diff --git a/.gitignore b/.gitignore index f78ec928..b7c3bbf1 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ .parcel-cache +node_modules/ +dist/ \ No newline at end of file diff --git a/dist/css/Senura-snake.css b/dist/css/Senura-snake.css new file mode 100644 index 00000000..2102a783 --- /dev/null +++ b/dist/css/Senura-snake.css @@ -0,0 +1,146 @@ +/* +JavaScript Snake +By Patrick Gillespie +http://patorjk.com/games/snake +*/ + +body { + margin: 0px; + padding: 0px; + background-color: #000000; +} + +.snake-toolbar { + color: #847a87; +} + +#game-area { + margin: 10px; + padding: 0px; +} + +#game-area:focus { + outline: none; +} + +#mode-wrapper { + font-family: Verdana, arial, helvetica, sans-serif; + font-size: 14px; + color: #f6f0f7; +} + +a.snake-link, +a.snake-link:link, +a.snake-link:visited { + color: #605d61; +} + +a.snake-link:hover { + color: #a500d6; +} + +.snake-pause-screen { + font-family: Verdana, arial, helvetica, sans-serif; + font-size: 14px; + position: absolute; + width: 300px; + height: 80px; + text-align: center; + top: 50%; + left: 50%; + margin-top: -40px; + margin-left: -150px; + display: none; + background-color: #ffffff; + color: #938996; +} + +.snake-panel-component { + position: absolute; + font-family: Verdana, arial, helvetica, sans-serif; + font-size: 14px; + color: #cf6d6d; + text-align: center; + background-color: #550b70; + padding: 8px; + margin: 0px; +} + +.snake-snakebody-block { + margin: 0px; + padding: 0px; + background-color: #eddff2; + position: absolute; + border: 0px solid black; + background-repeat: no-repeat; +} + +.snake-snakebody-alive { + background-image: url("src/css/images/dark-snakeblock.png"); +} +.snake-snakebody-dead { + background-image: url("src/css/images/dead-dark-snakeblock.png"); +} + +.snake-food-block { + margin: 0px; + padding: 0px; + background-color: black; + border: 2px solid #000000; + position: absolute; +} + +.snake-playing-field { + margin: 0px; + padding: 0px; + position: absolute; + background-color: #fcfcfc; + border: 3px solid black; +} + +.snake-game-container { + margin: 0px; + padding: 0px; + border-width: 0px; + border-style: none; + zoom: 1; + background-color: #3e2e44; + position: relative; +} + +.snake-welcome-dialog { + padding: 8px; + margin: 0px; + background-color: black; + color: #ab00de; + font-family: Verdana, arial, helvetica, sans-serif; + font-size: 14px; + position: absolute; + top: 50%; + left: 50%; + width: 300px; + /*height: 150px;*/ + margin-top: -100px; + margin-left: -158px; + text-align: center; + display: block; +} + +.snake-try-again-dialog, +.snake-win-dialog { + padding: 8px; + margin: 0px; + background-color: black; + color: #ab00de; + font-family: Verdana, arial, helvetica, sans-serif; + font-size: 14px; + position: absolute; + top: 50%; + left: 50%; + width: 300px; + height: 100px; + margin-top: -75px; + margin-left: -158px; + text-align: center; + display: none; +} diff --git a/dist/css/black-snake.css b/dist/css/black-snake.css new file mode 100644 index 00000000..a92710b5 --- /dev/null +++ b/dist/css/black-snake.css @@ -0,0 +1,142 @@ +/* +JavaScript Snake +By Patrick Gillespie +http://patorjk.com/games/snake +*/ +body { + margin: 0px; + padding: 0px; + background-color: black; + color: white; +} + +#game-area { + margin: 10px; + padding: 0px; +} + +#mode-wrapper { + color: #ffffff; + font-family: Verdana, arial, helvetica, sans-serif; + font-size: 14px; +} + +#game-area:focus { + outline: none; +} + +a.snake-link, +a.snake-link:link, +a.snake-link:visited { + color: #fcfc54; +} + +a.snake-link:hover { + color: #ffff54; +} + +.snake-pause-screen { + font-family: Verdana, arial, helvetica, sans-serif; + font-size: 14px; + position: absolute; + width: 300px; + height: 80px; + text-align: center; + top: 50%; + left: 50%; + margin-top: -40px; + margin-left: -150px; + display: none; + background-color: black; + color: white; +} + +.snake-panel-component { + position: absolute; + font-family: Verdana, arial, helvetica, sans-serif; + font-size: 14px; + color: #ffffff; + text-align: center; + padding: 8px; + margin: 0px; +} + +.snake-snakebody-block { + margin: 0px; + padding: 0px; + background-color: #ff0000; + position: absolute; + border: 0px solid #000080; + background-repeat: no-repeat; +} + +.snake-snakebody-alive { + background-image: url("src/cssss/images/snakeblock.png"), + url("src/css/images/snakeblock.png"); +} +.snake-snakebody-dead { + background-image: url("src/cssss/images/deadblock.png"), + url("src/css/images/deadblock.png"); +} + +.snake-food-block { + margin: 0px; + padding: 0px; + background-color: aqua; + border: 0px solid #000080; + position: absolute; +} + +.snake-playing-field { + margin: 0px; + padding: 0px; + position: absolute; + background-color: purple; + border: 0px solid purple; +} + +.snake-game-container { + margin: 0px; + padding: 0px; + border-width: 0px; + border-style: none; + zoom: 1; + position: relative; +} + +.snake-welcome-dialog { + padding: 8px; + margin: 0px; + background-color: #000000; + color: #ffffff; + font-family: Verdana, arial, helvetica, sans-serif; + font-size: 14px; + position: absolute; + top: 50%; + left: 50%; + width: 300px; + /*height: 150px;*/ + margin-top: -100px; + margin-left: -158px; + text-align: center; + display: block; +} + +.snake-try-again-dialog, +.snake-win-dialog { + padding: 8px; + margin: 0px; + background-color: #000000; + color: #ffffff; + font-family: Verdana, arial, helvetica, sans-serif; + font-size: 14px; + position: absolute; + top: 50%; + left: 50%; + width: 300px; + height: 100px; + margin-top: -75px; + margin-left: -158px; + text-align: center; + display: none; +} diff --git a/dist/css/dark-snake.css b/dist/css/dark-snake.css new file mode 100644 index 00000000..16388e41 --- /dev/null +++ b/dist/css/dark-snake.css @@ -0,0 +1,146 @@ +/* +JavaScript Snake +By Patrick Gillespie +http://patorjk.com/games/snake +*/ + +body { + margin: 0px; + padding: 0px; + background-color: #3e2e44; +} + +.snake-toolbar { + color: #938996; +} + +#game-area { + margin: 10px; + padding: 0px; +} + +#game-area:focus { + outline: none; +} + +#mode-wrapper { + font-family: Verdana, arial, helvetica, sans-serif; + font-size: 14px; + color: #938996; +} + +a.snake-link, +a.snake-link:link, +a.snake-link:visited { + color: #938996; +} + +a.snake-link:hover { + color: #938996; +} + +.snake-pause-screen { + font-family: Verdana, arial, helvetica, sans-serif; + font-size: 14px; + position: absolute; + width: 300px; + height: 80px; + text-align: center; + top: 50%; + left: 50%; + margin-top: -40px; + margin-left: -150px; + display: none; + background-color: #3e2e44; + color: #938996; +} + +.snake-panel-component { + position: absolute; + font-family: Verdana, arial, helvetica, sans-serif; + font-size: 14px; + color: #938996; + text-align: center; + background-color: #3e2e44; + padding: 8px; + margin: 0px; +} + +.snake-snakebody-block { + margin: 0px; + padding: 0px; + background-color: #3e2e44; + position: absolute; + border: 0px solid black; + background-repeat: no-repeat; +} + +.snake-snakebody-alive { + background-image: url("src/css/images/dark-snakeblock.png"); +} +.snake-snakebody-dead { + background-image: url("src/css/images/dead-dark-snakeblock.png"); +} + +.snake-food-block { + margin: 0px; + padding: 0px; + background-color: black; + border: 2px solid #3e2e44; + position: absolute; +} + +.snake-playing-field { + margin: 0px; + padding: 0px; + position: absolute; + background-color: #312e44; + border: 3px solid black; +} + +.snake-game-container { + margin: 0px; + padding: 0px; + border-width: 0px; + border-style: none; + zoom: 1; + background-color: #3e2e44; + position: relative; +} + +.snake-welcome-dialog { + padding: 8px; + margin: 0px; + background-color: black; + color: #938996; + font-family: Verdana, arial, helvetica, sans-serif; + font-size: 14px; + position: absolute; + top: 50%; + left: 50%; + width: 300px; + /*height: 150px;*/ + margin-top: -100px; + margin-left: -158px; + text-align: center; + display: block; +} + +.snake-try-again-dialog, +.snake-win-dialog { + padding: 8px; + margin: 0px; + background-color: black; + color: #938996; + font-family: Verdana, arial, helvetica, sans-serif; + font-size: 14px; + position: absolute; + top: 50%; + left: 50%; + width: 300px; + height: 100px; + margin-top: -75px; + margin-left: -158px; + text-align: center; + display: none; +} diff --git a/dist/css/green-snake.css b/dist/css/green-snake.css new file mode 100644 index 00000000..9cd114c5 --- /dev/null +++ b/dist/css/green-snake.css @@ -0,0 +1,147 @@ +/* +JavaScript Snake +By Patrick Gillespie +http://patorjk.com/games/snake +*/ +body { + margin: 0px; + padding: 0px; + background-color: darkgreen; +} + +.snake-toolbar { + background-color: rgba(255, 255, 255, 0.4); + border-radius: 10px; +} + +#game-area { + margin: 10px; + padding: 0px; + background-color: lightgreen; +} + +#mode-wrapper { + color: #ffffff; + font-family: Verdana, arial, helvetica, sans-serif; + font-size: 14px; +} + +#game-area:focus { + outline: none; +} + +a.snake-link, +a.snake-link:link, +a.snake-link:visited { + color: black; +} + +a.snake-link:hover { + color: #ffff54; +} + +.snake-pause-screen { + font-family: Verdana, arial, helvetica, sans-serif; + font-size: 14px; + position: absolute; + width: 300px; + height: 80px; + text-align: center; + top: 50%; + left: 50%; + margin-top: -40px; + margin-left: -150px; + display: none; + background-color: black; + color: white; +} + +.snake-panel-component { + position: absolute; + font-family: Verdana, arial, helvetica, sans-serif; + font-size: 14px; + color: black; + text-align: center; + background-color: white; + padding: 8px; + margin: 0px; +} + +.snake-snakebody-block { + margin: 0px; + padding: 0px; + background-color: #ff0000; + position: absolute; + border: 0px solid #000080; + background-repeat: no-repeat; +} + +.snake-snakebody-alive { + background-image: url("src/css/images/snakeblock.png"); +} +.snake-snakebody-dead { + background-image: url("src/css/images/deadblock.png"); +} + +.snake-food-block { + margin: 0px; + padding: 0px; + background-color: black; + border: 0px solid #000080; + position: absolute; +} + +.snake-playing-field { + margin: 0px; + padding: 0px; + position: absolute; + background-color: white; + border: 0px solid #0000a8; +} + +.snake-game-container { + margin: 0px; + padding: 0px; + border-width: 0px; + border-style: none; + zoom: 1; + background-color: #fc5454; + position: relative; +} + +.snake-welcome-dialog { + padding: 8px; + margin: 0px; + background-color: #000000; + color: #ffffff; + font-family: Verdana, arial, helvetica, sans-serif; + font-size: 14px; + position: absolute; + top: 50%; + left: 50%; + width: 300px; + /*height: 150px;*/ + margin-top: -100px; + margin-left: -158px; + text-align: center; + display: block; +} + +.snake-try-again-dialog, +.snake-win-dialog { + padding: 8px; + margin: 0px; + background-color: #000000; + color: #ffffff; + font-family: Verdana, arial, helvetica, sans-serif; + font-size: 14px; + position: absolute; + top: 50%; + left: 50%; + width: 300px; + height: 100px; + margin-top: -75px; + margin-left: -158px; + text-align: center; + display: none; +} diff --git a/dist/css/head-snake.css b/dist/css/head-snake.css new file mode 100644 index 00000000..0e7daf95 --- /dev/null +++ b/dist/css/head-snake.css @@ -0,0 +1,148 @@ +body { + margin: 0px; + padding: 0px; + background-color: rgb(0, 0, 0); +} + +#game-area { + margin: 10px; + padding: 0px; +} + +#mode-wrapper { + color: #ffffff; + font-family: Verdana, arial, helvetica, sans-serif; + font-size: 14px; +} + +#game-area:focus { + outline: none; +} + +a.snake-link, +a.snake-link:link, +a.snake-link:visited { + color: #fcfc54; +} + +a.snake-link:hover { + color: #ffff54; +} + +.snake-pause-screen { + font-family: Verdana, arial, helvetica, sans-serif; + font-size: 14px; + position: absolute; + width: 300px; + height: 80px; + text-align: center; + top: 50%; + left: 50%; + margin-top: -40px; + margin-left: -150px; + display: none; + background-color: black; + color: white; +} + +.snake-panel-component { + position: absolute; + font-family: Verdana, arial, helvetica, sans-serif; + font-size: 14px; + color: #ffffff; + text-align: center; + padding: 8px; + margin: 0px; +} + +#snake-snakehead-alive { + background-image: url("src/css/images/green-head-snakeblock.png"); + margin: 0px; + padding: 0px; + background-color: rgb(10, 173, 10); + position: absolute; + border: 0px solid #000080; + background-repeat: no-repeat; + border-radius: 4px; +} + +.snake-snakebody-block { + margin: 0px; + padding: 0px; + background-color: #ff0000; + position: absolute; + border: 0px solid #000080; + background-repeat: no-repeat; +} + +.snake-snakebody-alive { + background-image: url("src/css/images/green-body-snakeblock.png"), + url("src/css/images/green-body-snakeblock.png"); +} +.snake-snakebody-dead { + background-image: url("src/css/images/deadblock.png"), + url("src/css/images/deadblock.png"); +} + +.snake-food-block { + margin: 0px; + padding: 0px; + background-color: rgb(182, 11, 11); + border: 0px solid #000080; + position: absolute; + border-radius: 6px; +} + +.snake-playing-field { + margin: 0px; + padding: 0px; + position: absolute; + background-color: rgb(245, 245, 220); + border: 0px solid #0000a8; +} + +.snake-game-container { + margin: 0px; + padding: 0px; + border-width: 0px; + border-style: none; + zoom: 1; + position: relative; +} + +.snake-welcome-dialog { + padding: 8px; + margin: 0px; + background-color: #000000; + color: #ffffff; + font-family: Verdana, arial, helvetica, sans-serif; + font-size: 14px; + position: absolute; + top: 50%; + left: 50%; + width: 300px; + /*height: 150px;*/ + margin-top: -100px; + margin-left: -158px; + text-align: center; + display: block; +} + +.snake-try-again-dialog, +.snake-win-dialog { + padding: 8px; + margin: 0px; + background-color: #000000; + color: #ffffff; + font-family: Verdana, arial, helvetica, sans-serif; + font-size: 14px; + position: absolute; + top: 50%; + left: 50%; + width: 300px; + height: 100px; + margin-top: -75px; + margin-left: -158px; + text-align: center; + display: none; +} diff --git a/dist/css/images/Thumbs.db b/dist/css/images/Thumbs.db new file mode 100755 index 00000000..5892f185 Binary files /dev/null and b/dist/css/images/Thumbs.db differ diff --git a/dist/css/images/dark-snakeblock.png b/dist/css/images/dark-snakeblock.png new file mode 100644 index 00000000..66c4f1c2 Binary files /dev/null and b/dist/css/images/dark-snakeblock.png differ diff --git a/dist/css/images/dead-dark-snakeblock.png b/dist/css/images/dead-dark-snakeblock.png new file mode 100644 index 00000000..63302e51 Binary files /dev/null and b/dist/css/images/dead-dark-snakeblock.png differ diff --git a/dist/css/images/deadblock.png b/dist/css/images/deadblock.png new file mode 100755 index 00000000..e3d07842 Binary files /dev/null and b/dist/css/images/deadblock.png differ diff --git a/dist/css/images/deadblock_border.png b/dist/css/images/deadblock_border.png new file mode 100644 index 00000000..94b5628e Binary files /dev/null and b/dist/css/images/deadblock_border.png differ diff --git a/dist/css/images/favicon.png b/dist/css/images/favicon.png new file mode 100644 index 00000000..ccbbc5d8 Binary files /dev/null and b/dist/css/images/favicon.png differ diff --git a/dist/css/images/green-body-snakeblock.png b/dist/css/images/green-body-snakeblock.png new file mode 100644 index 00000000..fa9d23de Binary files /dev/null and b/dist/css/images/green-body-snakeblock.png differ diff --git a/dist/css/images/green-head-snakeblock.png b/dist/css/images/green-head-snakeblock.png new file mode 100644 index 00000000..5d235cd5 Binary files /dev/null and b/dist/css/images/green-head-snakeblock.png differ diff --git a/dist/css/images/matrix-food-block.png b/dist/css/images/matrix-food-block.png new file mode 100644 index 00000000..5e3ef68b Binary files /dev/null and b/dist/css/images/matrix-food-block.png differ diff --git a/dist/css/images/matrix-snake-block.png b/dist/css/images/matrix-snake-block.png new file mode 100644 index 00000000..8416cc80 Binary files /dev/null and b/dist/css/images/matrix-snake-block.png differ diff --git a/dist/css/images/neon-body-snakeblock.png b/dist/css/images/neon-body-snakeblock.png new file mode 100644 index 00000000..d66f7717 Binary files /dev/null and b/dist/css/images/neon-body-snakeblock.png differ diff --git a/dist/css/images/neon-dead-snakeblock.png b/dist/css/images/neon-dead-snakeblock.png new file mode 100644 index 00000000..55da41ab Binary files /dev/null and b/dist/css/images/neon-dead-snakeblock.png differ diff --git a/dist/css/images/snakeblock.png b/dist/css/images/snakeblock.png new file mode 100755 index 00000000..e25b646f Binary files /dev/null and b/dist/css/images/snakeblock.png differ diff --git a/dist/css/light-snake.css b/dist/css/light-snake.css new file mode 100644 index 00000000..db0be890 --- /dev/null +++ b/dist/css/light-snake.css @@ -0,0 +1,127 @@ +/* +JavaScript Snake +By Patrick Gillespie +http://patorjk.com/games/snake +*/ + +body { + margin: 0px; + padding: 0px; + background-color: #f73378; +} +#game-area { + margin: 10px; + padding: 0px; +} + +#mode-wrapper { + color: #ffffff; + font-family: Verdana, arial, helvetica, sans-serif; + font-size: 14px; +} +#game-area:focus { + outline: none; +} +a.snake-link, +a.snake-link:link, +a.snake-link:visited { + color: #fcfc54; +} +a.snake-link:hover { + color: #ffff54; +} +.snake-pause-screen { + font-family: Verdana, arial, helvetica, sans-serif; + font-size: 14px; + position: absolute; + width: 300px; + height: 80px; + text-align: center; + top: 50%; + left: 50%; + margin-top: -40px; + margin-left: -150px; + display: none; + background-color: black; + color: white; +} +.snake-panel-component { + position: absolute; + font-family: Verdana, arial, helvetica, sans-serif; + font-size: 14px; + color: #ffffff; + text-align: center; + padding: 8px; + margin: 0px; +} +.snake-snakebody-block { + margin: 0px; + padding: 0px; + background-color: #ff0000; + position: absolute; + border: 0px solid #000080; + background-repeat: no-repeat; +} +.snake-snakebody-alive { + background-image: url("src/css/images/snakeblock.png"); +} +.snake-snakebody-dead { + background-image: url("src/css/images/deadblock.png"); +} +.snake-food-block { + margin: 0px; + padding: 0px; + background-color: #6cfd6a; + border: 0px solid #000080; + position: absolute; +} +.snake-playing-field { + margin: 0px; + padding: 0px; + position: absolute; + background-color: #ab003c; + border: 0px solid #ab003c; +} +.snake-game-container { + margin: 0px; + padding: 0px; + border-width: 0px; + border-style: none; + zoom: 1; + position: relative; +} +.snake-welcome-dialog { + padding: 8px; + margin: 0px; + background-color: #000000; + color: #ffffff; + font-family: Verdana, arial, helvetica, sans-serif; + font-size: 14px; + position: absolute; + top: 50%; + left: 50%; + width: 300px; + /*height: 150px;*/ + margin-top: -100px; + margin-left: -158px; + text-align: center; + display: block; +} +.snake-try-again-dialog, +.snake-win-dialog { + padding: 8px; + margin: 0px; + background-color: #000000; + color: #ffffff; + font-family: Verdana, arial, helvetica, sans-serif; + font-size: 14px; + position: absolute; + top: 50%; + left: 50%; + width: 300px; + height: 100px; + margin-top: -75px; + margin-left: -158px; + text-align: center; + display: none; +} diff --git a/dist/css/main-snake.css b/dist/css/main-snake.css new file mode 100755 index 00000000..7938bf34 --- /dev/null +++ b/dist/css/main-snake.css @@ -0,0 +1,140 @@ +/* +JavaScript Snake +By Patrick Gillespie +http://patorjk.com/games/snake +*/ +body { + margin: 0px; + padding: 0px; + background-color: #fc5454; +} + +#game-area { + margin: 10px; + padding: 0px; +} + +#mode-wrapper { + color: #ffffff; + font-family: Verdana, arial, helvetica, sans-serif; + font-size: 14px; +} + +#game-area:focus { + outline: none; +} + +a.snake-link, +a.snake-link:link, +a.snake-link:visited { + color: #fcfc54; +} + +a.snake-link:hover { + color: #ffff54; +} + +.snake-pause-screen { + font-family: Verdana, arial, helvetica, sans-serif; + font-size: 14px; + position: absolute; + width: 300px; + height: 80px; + text-align: center; + top: 50%; + left: 50%; + margin-top: -40px; + margin-left: -150px; + display: none; + background-color: black; + color: white; +} + +.snake-panel-component { + position: absolute; + font-family: Verdana, arial, helvetica, sans-serif; + font-size: 14px; + color: #ffffff; + text-align: center; + padding: 8px; + margin: 0px; +} + +.snake-snakebody-block { + margin: 0px; + padding: 0px; + background-color: #ff0000; + position: absolute; + border: 0px solid #000080; + background-repeat: no-repeat; +} + +.snake-snakebody-alive { + background-image: url("./images/snakeblock.png"), + url("./images/snakeblock.png"); +} +.snake-snakebody-dead { + background-image: url("./images/deadblock.png"), url("./images/deadblock.png"); +} + +.snake-food-block { + margin: 0px; + padding: 0px; + background-color: #ff0000; + border: 0px solid #000080; + position: absolute; +} + +.snake-playing-field { + margin: 0px; + padding: 0px; + position: absolute; + background-color: #0000a8; + border: 0px solid #0000a8; +} + +.snake-game-container { + margin: 0px; + padding: 0px; + border-width: 0px; + border-style: none; + zoom: 1; + position: relative; +} + +.snake-welcome-dialog { + padding: 8px; + margin: 0px; + background-color: #000000; + color: #ffffff; + font-family: Verdana, arial, helvetica, sans-serif; + font-size: 14px; + position: absolute; + top: 50%; + left: 50%; + width: 300px; + /*height: 150px;*/ + margin-top: -100px; + margin-left: -158px; + text-align: center; + display: block; +} + +.snake-try-again-dialog, +.snake-win-dialog { + padding: 8px; + margin: 0px; + background-color: #000000; + color: #ffffff; + font-family: Verdana, arial, helvetica, sans-serif; + font-size: 14px; + position: absolute; + top: 50%; + left: 50%; + width: 300px; + height: 100px; + margin-top: -75px; + margin-left: -158px; + text-align: center; + display: none; +} diff --git a/dist/css/matrix-snake.css b/dist/css/matrix-snake.css new file mode 100644 index 00000000..643d6960 --- /dev/null +++ b/dist/css/matrix-snake.css @@ -0,0 +1,134 @@ +body { +margin:0px; +padding:0px; +background-color: #00ff11; +} + +#game-area { +margin:10px; +padding:0px; +background-color: #00ff11; +} + +#mode-wrapper { +color: #000000; +font-family: Verdana, arial, helvetica, sans-serif; +font-size: 14px; + +} + +#game-area:focus { outline: none; } + +a.snake-link, a.snake-link:link, a.snake-link:visited { +color: #FCFC54; +} + +a.snake-link:hover { +color: #FfFf54; +} + +.snake-pause-screen { +font-family: Verdana, arial, helvetica, sans-serif; +font-size: 14px; +position:absolute; +width:300px; +height:80px; +text-align:center; +top:50%; +left:50%; +margin-top:-40px; +margin-left:-150px; +display:none; +background-color:black; +color:white; +} + +.snake-panel-component { +position: absolute; +font-family: Verdana, arial, helvetica, sans-serif; +font-size: 14px; +color: #000000; +text-align: center; +background-color: #00ff11; +padding: 8px; +margin: 0px; +} + +.snake-snakebody-block { +margin: 0px; +padding: 0px; +background-color: #FF0000; +position: absolute; +border: 0px solid #000080; +background-repeat: no-repeat; +} + +.snake-snakebody-alive { +background-image: url('src/css/images/matrix-snake-block.png'); +} +.snake-snakebody-dead { +background-image: url('src/css/images/deadblock.png'); +} + +.snake-food-block { +margin: 0px; +padding: 0px; +background-color: #FF0000; +border: 0px solid #000080; +position: absolute; +background-image: url("src/css/images/matrix-food-block.png") +} + +.snake-playing-field { +margin: 0px; +padding: 0px; +position: absolute; +background-color: #000000; +border: 0px solid #000000; +} + +.snake-game-container { +margin: 0px; +padding: 0px; +border-width: 0px; +border-style: none; +zoom: 1; +background-color: #00ff11; +position: relative; +} + +.snake-welcome-dialog { +padding: 8px; +margin: 0px; +background-color: #000000; +color: #00ff11; +font-family: Verdana, arial, helvetica, sans-serif; +font-size: 14px; +position: absolute; +top: 50%; +left: 50%; +width: 300px; +/height: 150px;/ +margin-top: -100px; +margin-left: -158px; +text-align: center; +display: block; +} + +.snake-try-again-dialog, .snake-win-dialog { +padding: 8px; +margin: 0px; +background-color: #000000; +color: #ff0000; +font-family: Verdana, arial, helvetica, sans-serif; +font-size: 14px; +position: absolute; +top: 50%; +left: 50%; +width: 300px; +height: 100px; +margin-top: -75px; +margin-left: -158px; +text-align: center; +display: none; +} diff --git a/dist/css/neon-snake.css b/dist/css/neon-snake.css new file mode 100644 index 00000000..49591510 --- /dev/null +++ b/dist/css/neon-snake.css @@ -0,0 +1,145 @@ +/* +JavaScript Snake +By Patrick Gillespie +http://patorjk.com/games/snake +*/ +body { + margin: 0px; + padding: 0px; + background-color: #000000; +} + +.snake-toolbar { + color: #ffffff; +} + +#game-area { + margin: 10px; + padding: 0px; +} + +#mode-wrapper { + color: #ffffff; + font-family: Verdana, arial, helvetica, sans-serif; + font-size: 14px; +} + +#game-area:focus { + outline: none; +} + +a.snake-link, +a.snake-link:link, +a.snake-link:visited { + color: #00ffe0; +} + +a.snake-link:hover { + color: #0fff00; +} + +.snake-pause-screen { + font-family: Verdana, arial, helvetica, sans-serif; + font-size: 14px; + position: absolute; + width: 300px; + height: 80px; + text-align: center; + top: 50%; + left: 50%; + margin-top: -40px; + margin-left: -150px; + display: none; + background-color: #0fff00; + color: #000000; +} + +.snake-panel-component { + position: absolute; + font-family: Verdana, arial, helvetica, sans-serif; + font-size: 14px; + color: #ffffff; + text-align: center; + padding: 8px; + margin: 0px; +} + +.snake-snakebody-block { + margin: 0px; + padding: 0px; + background-color: #ff0000; + position: absolute; + border: 0px solid #000080; + background-repeat: no-repeat; +} + +.snake-snakebody-alive { + background-image: url("src/css/images/neon-body-snakeblock.png"), + url("src/cssss/images/neon-body-snakeblock.png"); +} +.snake-snakebody-dead { + background-image: url("src/css/images/neon-dead-snakeblock.png"), + url("src/cssss/images/neon-dead-snakeblock.png"); +} + +.snake-food-block { + margin: 0px; + padding: 0px; + background-color: #ff0000; + border: 0px solid #000080; + position: absolute; +} + +.snake-playing-field { + margin: 0px; + padding: 0px; + position: absolute; + background-color: #00ffd4; + border: 0px solid #0000a8; +} + +.snake-game-container { + margin: 0px; + padding: 0px; + border-width: 0px; + border-style: none; + zoom: 1; + position: relative; +} + +.snake-welcome-dialog { + padding: 8px; + margin: 0px; + background-color: #0fff00; + color: #000000; + font-family: Verdana, arial, helvetica, sans-serif; + font-size: 14px; + position: absolute; + top: 50%; + left: 50%; + width: 300px; + /*height: 150px;*/ + margin-top: -100px; + margin-left: -158px; + text-align: center; + display: block; +} + +.snake-try-again-dialog, +.snake-win-dialog { + padding: 8px; + margin: 0px; + background-color: #0fff00; + color: #000000; + font-family: Verdana, arial, helvetica, sans-serif; + font-size: 14px; + position: absolute; + top: 50%; + left: 50%; + width: 300px; + height: 100px; + margin-top: -75px; + margin-left: -158px; + text-align: center; + display: none; +} diff --git a/dist/css/teal-snake.css b/dist/css/teal-snake.css new file mode 100644 index 00000000..ac06471a --- /dev/null +++ b/dist/css/teal-snake.css @@ -0,0 +1,148 @@ +/* +JavaScript Snake +By Patrick Gillespie +http://patorjk.com/games/snake +*/ +@import url("https://fonts.googleapis.com/css2?family=Electrolize&display=swap"); + +body { + margin: 0px; + padding: 0px; + background-color: teal; +} + +.snake-toolbar { + font-family: Electrolize; + color: white; +} + +#game-area { + margin: 10px; + padding: 0px; +} + +#game-area:focus { + outline: none; +} + +#mode-wrapper { + font-family: Electrolize; + font-size: 14px; + color: whitesmoke; +} + +a.snake-link, +a.snake-link:link, +a.snake-link:visited { + color: white; +} + +a.snake-link:hover { + color: white; +} + +.snake-pause-screen { + font-family: Electrolize; + font-size: 16px; + position: absolute; + width: 300px; + height: 80px; + text-align: center; + top: 50%; + left: 50%; + margin-top: -40px; + margin-left: -150px; + display: none; + background-color: #3e2e44; + color: whitesmoke; +} + +.snake-panel-component { + position: absolute; + font-family: Electrolize; + font-size: 16px; + color: #938996; + text-align: center; + background-color: #3e2e44; + padding: 8px; + margin: 0px; +} + +.snake-snakebody-block { + margin: 0px; + padding: 0px; + background-color: orange; + position: absolute; + border: 0px solid black; + background-repeat: no-repeat; +} + +.snake-snakebody-alive { + background-image: url("src/css/images/snakeblock.png"); +} +.snake-snakebody-dead { + background-image: url("src/css/images/dead-dark-snakeblock.png"); +} + +.snake-food-block { + margin: 0px; + padding: 0px; + background-color: red; + border: 2px solid black; + position: absolute; +} + +.snake-playing-field { + margin: 0px; + padding: 0px; + position: absolute; + background-color: rgb(0, 180, 180); + border: 3px solid black; +} + +.snake-game-container { + margin: 0px; + padding: 0px; + border-width: 0px; + border-style: none; + zoom: 1; + background-color: #3e2e44; + position: relative; +} + +.snake-welcome-dialog { + padding: 8px; + margin: 0px; + background-color: black; + color: whitesmoke; + font-family: Electrolize; + font-size: 14px; + position: absolute; + top: 50%; + left: 50%; + width: 300px; + /*height: 150px;*/ + margin-top: -100px; + margin-left: -158px; + text-align: center; + display: block; +} + +.snake-try-again-dialog, +.snake-win-dialog { + padding: 8px; + margin: 0px; + background-color: black; + color: whitesmoke; + font-family: Electrolize; + font-size: 16px; + position: absolute; + top: 50%; + left: 50%; + width: 300px; + height: 100px; + margin-top: -75px; + margin-left: -158px; + text-align: center; + display: none; +} diff --git a/dist/deadblock.10c73d1e.png b/dist/deadblock.10c73d1e.png new file mode 100644 index 00000000..440f6435 Binary files /dev/null and b/dist/deadblock.10c73d1e.png differ diff --git a/dist/favicon.9a17b5aa.png b/dist/favicon.9a17b5aa.png new file mode 100644 index 00000000..00ee8181 Binary files /dev/null and b/dist/favicon.9a17b5aa.png differ diff --git a/dist/index.6576cb57.js b/dist/index.6576cb57.js new file mode 100644 index 00000000..6f4e82a0 --- /dev/null +++ b/dist/index.6576cb57.js @@ -0,0 +1,2 @@ +new SNAKE.Board({boardContainer:"game-area",fullScreen:!0,premoveOnPause:!1,onLengthUpdate:o=>{console.log(`Length: ${o}`)},onPauseToggle:o=>{console.log(`Is paused: ${o}`)},onInit:o=>{console.log("init!"),console.log(o)},onWin:()=>{console.log("wn!")},onDeath:()=>{console.log("dead!")}}); +//# sourceMappingURL=index.6576cb57.js.map diff --git a/dist/index.6576cb57.js.map b/dist/index.6576cb57.js.map new file mode 100644 index 00000000..16208470 --- /dev/null +++ b/dist/index.6576cb57.js.map @@ -0,0 +1 @@ +{"mappings":"ACAqB,IAAI,MAAM,KAAK,CAAC,CACnC,eAAgB,YAChB,WAAY,CAAA,EACZ,eAAgB,CAAA,EAChB,eAAgB,AAAC,IACf,QAAQ,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAA,CAAQ,CACjC,EACA,cAAe,AAAC,IACd,QAAQ,GAAG,CAAC,CAAC,WAAW,EAAE,EAAA,CAAU,CACtC,EACA,OAAQ,AAAC,IACP,QAAQ,GAAG,CAAC,SACZ,QAAQ,GAAG,CAAC,EACd,EACA,MAAO,KACL,QAAQ,GAAG,CAAC,MACd,EACA,QAAS,KACP,QAAQ,GAAG,CAAC,QACd,CACF","sources":["","src/js/init.js"],"sourcesContent":["const mySnakeBoard = new SNAKE.Board({\n boardContainer: \"game-area\",\n fullScreen: true,\n premoveOnPause: false,\n onLengthUpdate: (length)=>{\n console.log(`Length: ${length}`);\n },\n onPauseToggle: (isPaused)=>{\n console.log(`Is paused: ${isPaused}`);\n },\n onInit: (params)=>{\n console.log(\"init!\");\n console.log(params);\n },\n onWin: ()=>{\n console.log(\"wn!\");\n },\n onDeath: ()=>{\n console.log(\"dead!\");\n }\n});\n\n//# sourceMappingURL=index.6576cb57.js.map\n","const mySnakeBoard = new SNAKE.Board({\n boardContainer: \"game-area\",\n fullScreen: true,\n premoveOnPause: false,\n onLengthUpdate: (length) => {\n console.log(`Length: ${length}`);\n },\n onPauseToggle: (isPaused) => {\n console.log(`Is paused: ${isPaused}`);\n },\n onInit: (params) => {\n console.log(\"init!\");\n console.log(params);\n },\n onWin: () => {\n console.log(\"wn!\");\n },\n onDeath: () => {\n console.log(\"dead!\");\n },\n});\n"],"names":["SNAKE","Board","boardContainer","fullScreen","premoveOnPause","onLengthUpdate","length","console","log","onPauseToggle","isPaused","onInit","params","onWin","onDeath"],"version":3,"file":"index.6576cb57.js.map"} \ No newline at end of file diff --git a/dist/index.9e01aba4.css b/dist/index.9e01aba4.css new file mode 100644 index 00000000..7ae15694 --- /dev/null +++ b/dist/index.9e01aba4.css @@ -0,0 +1,2 @@ +body{background-color:#fc5454;margin:0;padding:0}#game-area{margin:10px;padding:0}#mode-wrapper{color:#fff;font-family:Verdana,arial,helvetica,sans-serif;font-size:14px}#game-area:focus{outline:none}a.snake-link,a.snake-link:link,a.snake-link:visited{color:#fcfc54}a.snake-link:hover{color:#ffff54}.snake-pause-screen{text-align:center;color:#fff;background-color:#000;width:300px;height:80px;margin-top:-40px;margin-left:-150px;font-family:Verdana,arial,helvetica,sans-serif;font-size:14px;display:none;position:absolute;top:50%;left:50%}.snake-panel-component{color:#fff;text-align:center;margin:0;padding:8px;font-family:Verdana,arial,helvetica,sans-serif;font-size:14px;position:absolute}.snake-snakebody-block{background-color:red;background-repeat:no-repeat;border:0 solid navy;margin:0;padding:0;position:absolute}.snake-snakebody-alive{background-image:url(snakeblock.e91ee11a.png),url(snakeblock.e91ee11a.png)}.snake-snakebody-dead{background-image:url(deadblock.10c73d1e.png),url(deadblock.10c73d1e.png)}.snake-food-block{background-color:red;border:0 solid navy;margin:0;padding:0;position:absolute}.snake-playing-field{background-color:#0000a8;border:0 solid #0000a8;margin:0;padding:0;position:absolute}.snake-game-container{zoom:1;border-style:none;border-width:0;margin:0;padding:0;position:relative}.snake-welcome-dialog{color:#fff;text-align:center;background-color:#000;width:300px;margin:-100px 0 0 -158px;padding:8px;font-family:Verdana,arial,helvetica,sans-serif;font-size:14px;display:block;position:absolute;top:50%;left:50%}.snake-try-again-dialog,.snake-win-dialog{color:#fff;text-align:center;background-color:#000;width:300px;height:100px;margin:-75px 0 0 -158px;padding:8px;font-family:Verdana,arial,helvetica,sans-serif;font-size:14px;display:none;position:absolute;top:50%;left:50%} +/*# sourceMappingURL=index.9e01aba4.css.map */ diff --git a/dist/index.9e01aba4.css.map b/dist/index.9e01aba4.css.map new file mode 100644 index 00000000..7fbe2d4f --- /dev/null +++ b/dist/index.9e01aba4.css.map @@ -0,0 +1 @@ +{"mappings":"ACKA,iDAMA,iCAKA,uFAMA,8BAIA,kEAMA,iCAIA,iPAgBA,yJAUA,iIASA,oIAIA,iIAIA,gGAQA,0GAQA,mGASA,yOAkBA","sources":["index.9e01aba4.css","src/css/main-snake.css"],"sourcesContent":["body {\n background-color: #fc5454;\n margin: 0;\n padding: 0;\n}\n\n#game-area {\n margin: 10px;\n padding: 0;\n}\n\n#mode-wrapper {\n color: #fff;\n font-family: Verdana, arial, helvetica, sans-serif;\n font-size: 14px;\n}\n\n#game-area:focus {\n outline: none;\n}\n\na.snake-link, a.snake-link:link, a.snake-link:visited {\n color: #fcfc54;\n}\n\na.snake-link:hover {\n color: #ffff54;\n}\n\n.snake-pause-screen {\n text-align: center;\n color: #fff;\n background-color: #000;\n width: 300px;\n height: 80px;\n margin-top: -40px;\n margin-left: -150px;\n font-family: Verdana, arial, helvetica, sans-serif;\n font-size: 14px;\n display: none;\n position: absolute;\n top: 50%;\n left: 50%;\n}\n\n.snake-panel-component {\n color: #fff;\n text-align: center;\n margin: 0;\n padding: 8px;\n font-family: Verdana, arial, helvetica, sans-serif;\n font-size: 14px;\n position: absolute;\n}\n\n.snake-snakebody-block {\n background-color: red;\n background-repeat: no-repeat;\n border: 0 solid navy;\n margin: 0;\n padding: 0;\n position: absolute;\n}\n\n.snake-snakebody-alive {\n background-image: url(\"snakeblock.e91ee11a.png\"), url(\"snakeblock.e91ee11a.png\");\n}\n\n.snake-snakebody-dead {\n background-image: url(\"deadblock.10c73d1e.png\"), url(\"deadblock.10c73d1e.png\");\n}\n\n.snake-food-block {\n background-color: red;\n border: 0 solid navy;\n margin: 0;\n padding: 0;\n position: absolute;\n}\n\n.snake-playing-field {\n background-color: #0000a8;\n border: 0 solid #0000a8;\n margin: 0;\n padding: 0;\n position: absolute;\n}\n\n.snake-game-container {\n zoom: 1;\n border-style: none;\n border-width: 0;\n margin: 0;\n padding: 0;\n position: relative;\n}\n\n.snake-welcome-dialog {\n color: #fff;\n text-align: center;\n background-color: #000;\n width: 300px;\n margin: -100px 0 0 -158px;\n padding: 8px;\n font-family: Verdana, arial, helvetica, sans-serif;\n font-size: 14px;\n display: block;\n position: absolute;\n top: 50%;\n left: 50%;\n}\n\n.snake-try-again-dialog, .snake-win-dialog {\n color: #fff;\n text-align: center;\n background-color: #000;\n width: 300px;\n height: 100px;\n margin: -75px 0 0 -158px;\n padding: 8px;\n font-family: Verdana, arial, helvetica, sans-serif;\n font-size: 14px;\n display: none;\n position: absolute;\n top: 50%;\n left: 50%;\n}\n/*# sourceMappingURL=index.9e01aba4.css.map */\n","/*\nJavaScript Snake\nBy Patrick Gillespie\nhttp://patorjk.com/games/snake\n*/\nbody {\n margin: 0px;\n padding: 0px;\n background-color: #fc5454;\n}\n\n#game-area {\n margin: 10px;\n padding: 0px;\n}\n\n#mode-wrapper {\n color: #ffffff;\n font-family: Verdana, arial, helvetica, sans-serif;\n font-size: 14px;\n}\n\n#game-area:focus {\n outline: none;\n}\n\na.snake-link,\na.snake-link:link,\na.snake-link:visited {\n color: #fcfc54;\n}\n\na.snake-link:hover {\n color: #ffff54;\n}\n\n.snake-pause-screen {\n font-family: Verdana, arial, helvetica, sans-serif;\n font-size: 14px;\n position: absolute;\n width: 300px;\n height: 80px;\n text-align: center;\n top: 50%;\n left: 50%;\n margin-top: -40px;\n margin-left: -150px;\n display: none;\n background-color: black;\n color: white;\n}\n\n.snake-panel-component {\n position: absolute;\n font-family: Verdana, arial, helvetica, sans-serif;\n font-size: 14px;\n color: #ffffff;\n text-align: center;\n padding: 8px;\n margin: 0px;\n}\n\n.snake-snakebody-block {\n margin: 0px;\n padding: 0px;\n background-color: #ff0000;\n position: absolute;\n border: 0px solid #000080;\n background-repeat: no-repeat;\n}\n\n.snake-snakebody-alive {\n background-image: url(\"./images/snakeblock.png\"),\n url(\"./images/snakeblock.png\");\n}\n.snake-snakebody-dead {\n background-image: url(\"./images/deadblock.png\"), url(\"./images/deadblock.png\");\n}\n\n.snake-food-block {\n margin: 0px;\n padding: 0px;\n background-color: #ff0000;\n border: 0px solid #000080;\n position: absolute;\n}\n\n.snake-playing-field {\n margin: 0px;\n padding: 0px;\n position: absolute;\n background-color: #0000a8;\n border: 0px solid #0000a8;\n}\n\n.snake-game-container {\n margin: 0px;\n padding: 0px;\n border-width: 0px;\n border-style: none;\n zoom: 1;\n position: relative;\n}\n\n.snake-welcome-dialog {\n padding: 8px;\n margin: 0px;\n background-color: #000000;\n color: #ffffff;\n font-family: Verdana, arial, helvetica, sans-serif;\n font-size: 14px;\n position: absolute;\n top: 50%;\n left: 50%;\n width: 300px;\n /*height: 150px;*/\n margin-top: -100px;\n margin-left: -158px;\n text-align: center;\n display: block;\n}\n\n.snake-try-again-dialog,\n.snake-win-dialog {\n padding: 8px;\n margin: 0px;\n background-color: #000000;\n color: #ffffff;\n font-family: Verdana, arial, helvetica, sans-serif;\n font-size: 14px;\n position: absolute;\n top: 50%;\n left: 50%;\n width: 300px;\n height: 100px;\n margin-top: -75px;\n margin-left: -158px;\n text-align: center;\n display: none;\n}\n"],"names":[],"version":3,"file":"index.9e01aba4.css.map"} \ No newline at end of file diff --git a/dist/index.a5373759.js b/dist/index.a5373759.js new file mode 100644 index 00000000..8f01653e --- /dev/null +++ b/dist/index.a5373759.js @@ -0,0 +1,2 @@ +window.SNAKE||(window.SNAKE={});const e="jsSnakeHighScore";SNAKE.addEventListener=window.addEventListener?function(e,t,n,a){e.addEventListener(t,n,a)}:window.attachEvent?function(e,t,n){e.attachEvent("on"+t,n)}:void 0,SNAKE.removeEventListener=window.removeEventListener?function(e,t,n,a){e.removeEventListener(t,n,a)}:window.detachEvent?function(e,t,n){e.detachEvent("on"+t,n)}:void 0,SNAKE.Snake=SNAKE.Snake||function(){let t=[],n=function(){this.elm=null,this.elmStyle=null,this.row=-1,this.col=-1,this.next=null,this.prev=null};return function(a){let o;if(!a||!a.playingBoard)return;void 0===localStorage[e]&&localStorage.setItem(e,0);let l=this,d=a.playingBoard,i=[0,1,0,-1],s=[-1,0,1,0],r=1,c=-1,u=!0,m=-1,p=80,h=!1,g=!1,k=document.getElementById("selectMode");function y(e){let t=e.row*d.getBlockHeight();return`${t}px`}function f(e){let t=e.col*d.getBlockWidth();return`${t}px`}function v(){let e=document.createElement("div");return e.className="snake-snakebody-block",e.style.left="-1000px",e.style.top="-1000px",e.style.width=d.getBlockWidth()+"px",e.style.height=d.getBlockHeight()+"px",e}function w(e){let a;let o=v();for(let l=1;lt&&(alert("Congratulations! You have beaten your previous high score, which was "+t+"."),localStorage.setItem(e,l.snakeLength))})(),l.snakeHead.elm.style.zIndex=function(e){let t=0,n=0,a;for(a in e)e[a].elm.currentStyle?n=parseFloat(e[a].elm.style["z-index"],10):window.getComputedStyle&&(n=parseFloat(document.defaultView.getComputedStyle(e[a].elm,null).getPropertyValue("z-index"),10)),!isNaN(n)&&n>t&&(t=n);return t+1}(l.snakeBody),l.snakeHead.elm.className=l.snakeHead.elm.className.replace(/\bsnake-snakebody-alive\b/,""),l.snakeHead.elm.className+=" snake-snakebody-dead",h=!0,t()}k&&k.addEventListener("change",function(e){let t=(e=e||{}).target?parseInt(e.target.value):80;isNaN(t)?t=80:t<25&&(t=80),p=t,setTimeout(function(){document.getElementById("game-area").focus()},10)}),l.snakeBody={},l.snakeBody.b0=new n,l.snakeBody.b0.row=a.startRow||1,l.snakeBody.b0.col=a.startCol||1,l.snakeBody.b0.elm=v(),l.snakeBody.b0.elmStyle=l.snakeBody.b0.elm.style,d.getBoardContainer().appendChild(l.snakeBody.b0.elm),l.snakeBody.b0.elm.style.left=f(l.snakeBody.b0),l.snakeBody.b0.elm.style.top=y(l.snakeBody.b0),l.snakeBody.b0.next=l.snakeBody.b0,l.snakeBody.b0.prev=l.snakeBody.b0,l.snakeLength=1,l.snakeHead=l.snakeBody.b0,l.snakeTail=l.snakeBody.b0,l.snakeHead.elm.className=l.snakeHead.elm.className.replace(/\bsnake-snakebody-dead\b/,""),l.snakeHead.elm.id="snake-snakehead-alive",l.snakeHead.elm.className+=" snake-snakebody-alive",l.setPaused=function(e){g=e},l.getPaused=function(){return g},l.setDirection=e=>{m!==r&&(c=e),(2!==Math.abs(e-r)||u)&&(m=e,u=!1)},l.handleArrowKeys=function(e){if(h||g&&!a.premoveOnPause)return;let t=-1;switch(e){case 37:case 65:t=3;break;case 38:case 87:t=0;break;case 39:case 68:t=1;break;case 40:case 83:t=2}l.setDirection(t)},l.go=function(){let e=l.snakeHead,t=l.snakeTail,n=d.grid;if(!0===g){setTimeout(function(){l.go()},p);return}if(a.moveSnakeWithAI&&a.moveSnakeWithAI({grid:n,snakeHead:l.snakeHead,currentDirection:m,isFirstGameMove:u,setDirection:l.setDirection}),l.snakeTail=t.prev,l.snakeHead=t,n[t.row]&&n[t.row][t.col]&&(n[t.row][t.col]=0),-1!==m&&(r=m,-1!==c&&(m=c,c=-1)),t.col=e.col+i[r],t.row=e.row+s[r],t.elmStyle||(t.elmStyle=t.elm.style),t.elmStyle.left=f(t),t.elmStyle.top=y(t),l.snakeLength>1&&(t.elm.id="snake-snakehead-alive",e.elm.id=""),0===n[t.row][t.col])n[t.row][t.col]=1,setTimeout(function(){l.go()},p);else if(n[t.row][t.col]>0)l.handleDeath();else if(n[t.row][t.col]===d.getGridFoodValue()){if(n[t.row][t.col]=1,!l.eatFood()){l.handleWin();return}setTimeout(function(){l.go()},p)}},l.eatFood=function(){t.length<=5&&w(10);let e=t.splice(0,5),n=e.length,a;for(o=l.snakeTail;n--;)a="b"+l.snakeLength++,l.snakeBody[a]=e[n],l.snakeBody[a].prev=o,l.snakeBody[a].elm.className=l.snakeHead.elm.className.replace(/\bsnake-snakebody-dead\b/,""),l.snakeBody[a].elm.className+=" snake-snakebody-alive",o.next=l.snakeBody[a],o=l.snakeBody[a];if(l.snakeTail=l.snakeBody[a],l.snakeTail.next=l.snakeHead,l.snakeHead.prev=l.snakeTail,!d.foodEaten())return!1;let i=document.getElementById("selectMode");return 0==i.options[i.selectedIndex].text.localeCompare("Rush")&&p>30&&(p-=5),!0},l.handleDeath=function(){p=parseInt(document.getElementById("selectMode").value),S(d.handleDeath)},l.handleWin=function(){S(d.handleWin)},l.rebirth=function(){h=!1,u=!0,c=-1},l.reset=function(){let e;if(!1===h)return;let n=[],o=l.snakeHead.next;for(;o!==l.snakeHead;)e=o.next,o.prev=null,o.next=null,n.push(o),o=e;l.snakeHead.next=l.snakeHead,l.snakeHead.prev=l.snakeHead,l.snakeTail=l.snakeHead,l.snakeLength=1;for(let e=0;ep,l.setSpeed=e=>{p=e},w(10)}}(),SNAKE.Food=SNAKE.Food||function(){let e=0;function t(e,t){return Math.floor(Math.random()*(t+1-e))+e}return function(n){let a,o;if(!n||!n.playingBoard)return;let l=n.playingBoard,d=e++,i=document.createElement("div");i.setAttribute("id","snake-food-"+d),i.className="snake-food-block",i.style.width=l.getBlockWidth()+"px",i.style.height=l.getBlockHeight()+"px",i.style.left="-1000px",i.style.top="-1000px",l.getBoardContainer().appendChild(i),this.getFoodElement=function(){return i},this.randomlyPlaceFood=function(){l.grid[a]&&l.grid[a][o]===l.getGridFoodValue()&&(l.grid[a][o]=0);let e=0,n=0,d=0,s=l.grid.length-1,r=l.grid[0].length-1;for(;0!==l.grid[e][n];)if(e=t(1,s),n=t(1,r),++d>2e4)return!1;return l.grid[e][n]=l.getGridFoodValue(),a=e,o=n,i.style.top=e*l.getBlockHeight()+"px",i.style.left=n*l.getBlockWidth()+"px",!0}}}(),SNAKE.Board=SNAKE.Board||function(){let t=0;function n(e){let t=0,n=0,a;for(a in e)e[a].elm.currentStyle?n=parseFloat(e[a].elm.style["z-index"],10):window.getComputedStyle&&(n=parseFloat(document.defaultView.getComputedStyle(e[a].elm,null).getPropertyValue("z-index"),10)),!isNaN(n)&&n>t&&(t=n);return t+1}return function(a){let o,l,d,i,s,r,c,u,m;let p=this,h=t++,g=a||{};g.onLengthUpdate||(g.onLengthUpdate=()=>{}),g.onPauseToggle||(g.onPauseToggle=()=>{}),g.onWin||(g.onWin=()=>{}),g.onDeath||(g.onDeath=()=>{});let k,y,f=1,v,w,S=!1;function B(){return g.startRow||2}function b(){return g.startCol||2}function E(e,t,n){let a=document.createElement("div");a.id=t+h,a.className=n;let o=document.createElement("div");o.innerHTML="JavaScript Snake

"+e+"

";let l=document.createElement("button");l.appendChild(document.createTextNode("Play Again?"));let d=function(){a.style.display="none",p.resetBoard(),p.setBoardState(1),p.getBoardContainer().focus()};return SNAKE.addEventListener(window,"keyup",function(e){if(0!==f||"block"!==a.style.display)return;e||(e=window.event);let t=e.which?e.which:e.keyCode;(32===t||13===t)&&d()},!0),SNAKE.addEventListener(l,"click",d,!1),a.appendChild(o),a.appendChild(l),a}function H(e){let t=Math.max(n(y.snakeBody),n({tmp:{elm:k.getFoodElement()}}));e&&(o.removeChild(e),o.appendChild(e),e.style.zIndex=t,e.style.display="block"),p.setBoardState(0)}p.grid=[],p.setPaused=function(e){S=e,y.setPaused(e),S?m.style.display="block":m.style.display="none",g.onPauseToggle(S)},p.getPaused=function(){return S},p.resetBoard=function(){SNAKE.removeEventListener(o,"keydown",v,!1),SNAKE.removeEventListener(o,"visibilitychange",w,!1),y.reset(),g.onLengthUpdate(1),i.innerHTML="Length: 1",p.setupPlayingField(),p.grid[B()][b()]=1},p.getBoardState=function(){return f},p.setBoardState=function(e){f=e},p.getGridFoodValue=function(){return -1},p.getPlayingFieldElement=function(){return l},p.setBoardContainer=function(e){"string"==typeof e&&(e=document.getElementById(e)),e!==o&&(o=e,l=null,p.setupPlayingField(),p.grid[B()][b()]=1)},p.getBoardContainer=function(){return o},p.getBlockWidth=function(){return 20},p.getBlockHeight=function(){return 20},p.setupPlayingField=function(){let t,n,a,f;if(!l&&((l=document.createElement("div")).setAttribute("id","playingField"),l.className="snake-playing-field",SNAKE.addEventListener(l,"click",function(){o.focus()},!1),(m=document.createElement("div")).className="snake-pause-screen",m.innerHTML="
[Paused]

Press [space] to unpause.

",(d=document.createElement("div")).className="snake-panel-component",d.innerHTML="more patorjk.com apps - source code - pat's youtube",(i=document.createElement("div")).className="snake-panel-component",i.innerHTML="Length: 1",(s=document.createElement("div")).className="snake-panel-component",s.innerHTML="Highscore: "+(localStorage[e]||0),g.moveSnakeWithAI||(r=function(){let e=document.createElement("div");e.id="sbWelcome"+h,e.className="snake-welcome-dialog";let t=document.createElement("div"),n="";g.fullScreen&&(n="On Windows, press F11 to play in Full Screen mode."),t.innerHTML="JavaScript Snake

Use the arrow keys on your keyboard to play the game. "+n+"

";let a=document.createElement("button");a.appendChild(document.createTextNode("Play Game"));let o=function(){SNAKE.removeEventListener(window,"keyup",l,!1),e.style.display="none",p.setBoardState(1),p.getBoardContainer().focus()},l=function(e){e||(e=window.event);let t=e.which?e.which:e.keyCode;(32===t||13===t)&&o()};return SNAKE.addEventListener(window,"keyup",l,!1),SNAKE.addEventListener(a,"click",o,!1),e.appendChild(t),e.appendChild(a),e}(),c=E("You died :(","sbTryAgain","snake-try-again-dialog"),u=E("You win! :D","sbWin","snake-win-dialog")),SNAKE.addEventListener(o,"keyup",function(e){return e||(e=window.event),e.cancelBubble=!0,e.stopPropagation&&e.stopPropagation(),e.preventDefault&&e.preventDefault(),!1},!1),o.className="snake-game-container",m.style.zIndex=1e4,o.appendChild(m),o.appendChild(l),o.appendChild(d),o.appendChild(i),o.appendChild(s),g.moveSnakeWithAI||(o.appendChild(r),o.appendChild(c),o.appendChild(u)),y=new SNAKE.Snake({playingBoard:p,startRow:B(),startCol:b(),premoveOnPause:g.premoveOnPause,moveSnakeWithAI:g.moveSnakeWithAI}),k=new SNAKE.Food({playingBoard:p}),r&&(r.style.zIndex=1e3)),!0===g.fullScreen){let e,o;a=0,f=0,e=0,"number"==typeof window.innerWidth?e=window.innerWidth:document.documentElement&&(document.documentElement.clientWidth||document.documentElement.clientHeight)?e=document.documentElement.clientWidth:document.body&&(document.body.clientWidth||document.body.clientHeight)&&(e=document.body.clientWidth),t=e-20,o=0,"number"==typeof window.innerHeight?o=window.innerHeight:document.documentElement&&(document.documentElement.clientWidth||document.documentElement.clientHeight)?o=document.documentElement.clientHeight:document.body&&(document.body.clientWidth||document.body.clientHeight)&&(o=document.body.clientHeight),n=o-20}else a=g.top,f=g.left,t=g.width,n=g.height;let S=2*p.getBlockWidth()+t%p.getBlockWidth(),H=Math.min(250*p.getBlockWidth()-S,t-S),N=3*p.getBlockHeight()+n%p.getBlockHeight(),L=Math.min(250*p.getBlockHeight()-N,n-N);o.style.left=f+"px",o.style.top=a+"px",o.style.width=t+"px",o.style.height=n+"px",l.style.left=p.getBlockWidth()+"px",l.style.top=p.getBlockHeight()+"px",l.style.width=H+"px",l.style.height=L+"px";let A=N-p.getBlockHeight(),C=p.getBlockHeight()+L+Math.round((A-30)/2)+"px";d.style.top=C,d.style.width="450px",d.style.left=Math.round(t/2)-Math.round(225)+"px",i.style.top=C,i.style.left="30px",s.style.top=C,s.style.left=t-140+"px",t<700?d.style.display="none":d.style.display="block",p.grid=[];let x=H/p.getBlockWidth()+2,P=L/p.getBlockHeight()+2;for(let e=0;e=37&&t<=40)&&87!==t&&65!==t&&83!==t&&68!==t)return;SNAKE.removeEventListener(o,"keydown",v,!1),SNAKE.removeEventListener(o,"visibilitychange",w,!1),v=function(e){e||(e=window.event);let t=e.which?e.which:e.keyCode;return 32===t&&0!=p.getBoardState()&&p.setPaused(!p.getPaused()),y.handleArrowKeys(t),e.cancelBubble=!0,e.stopPropagation&&e.stopPropagation(),e.preventDefault&&e.preventDefault(),!1},document.addEventListener("visibilitychange",()=>{"hidden"!==document.visibilityState||0==p.getBoardState()||p.getPaused()||p.setPaused(!0)}),SNAKE.addEventListener(o,"keydown",v,!1),SNAKE.addEventListener(o,"visibilitychange",w,!1),y.rebirth(),y.handleArrowKeys(t),p.setBoardState(2),y.go()}return e.cancelBubble=!0,e.stopPropagation&&e.stopPropagation(),e.preventDefault&&e.preventDefault(),!1},g.moveSnakeWithAI||(SNAKE.addEventListener(o,"keydown",v,!1),SNAKE.addEventListener(o,"visibilitychange",w,!1))},p.foodEaten=function(){return g.onLengthUpdate(y.snakeLength),i.innerHTML="Length: "+y.snakeLength,y.snakeLength>localStorage[e]&&(localStorage.setItem(e,y.snakeLength),s.innerHTML="Highscore: "+localStorage[e]),!!k.randomlyPlaceFood()},p.handleDeath=function(){H(c),g.onDeath({startAIGame:p.startAIGame})},p.handleWin=function(){H(u),g.onWin({startAIGame:p.startAIGame})},p.setSpeed=e=>{y.setSpeed(e)},p.getSpeed=()=>y.getSpeed(),p.startAIGame=()=>{p.resetBoard(),y.rebirth(),p.setBoardState(2),y.go()},g.fullScreen=void 0!==g.fullScreen&&g.fullScreen,g.top=void 0===g.top?0:g.top,g.left=void 0===g.left?0:g.left,g.width=void 0===g.width?400:g.width,g.height=void 0===g.height?400:g.height,g.premoveOnPause=void 0!==g.premoveOnPause&&g.premoveOnPause,g.fullScreen&&SNAKE.addEventListener(window,"resize",function(){p.setupPlayingField()},!1),p.setBoardState(0),g.boardContainer&&p.setBoardContainer(g.boardContainer),g.onInit&&g.onInit({reloadGame:function(){p.resetBoard(),p.setBoardState(1),p.getBoardContainer().focus()},getSpeed:p.getSpeed,setSpeed:p.setSpeed,startAIGame:p.startAIGame})}}(); +//# sourceMappingURL=index.a5373759.js.map diff --git a/dist/index.a5373759.js.map b/dist/index.a5373759.js.map new file mode 100644 index 00000000..fa690fde --- /dev/null +++ b/dist/index.a5373759.js.map @@ -0,0 +1 @@ +{"mappings":"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","sources":["","src/js/snake.js"],"sourcesContent":["/*\nJavaScript Snake\nFirst version by Patrick Gillespie - I've since merged in a good number of github pull requests\nhttp://patorjk.com/games/snake\n*/ /**\n * @module Snake\n * @class SNAKE\n */ // this will allow us to access the game in other JS files when the app is loaded up in a codesandbox.com sandbox, that's the only reason it's here\nif (!window.SNAKE) window.SNAKE = {};\n/*\n Direction explained (0 = up, etc etc)\n 0\n 3 1\n 2\n*/ const MOVE_NONE = -1;\nconst MOVE_UP = 0;\nconst MOVE_LEFT = 3;\nconst MOVE_DOWN = 2;\nconst MOVE_RIGHT = 1;\nconst MIN_SNAKE_SPEED = 25;\nconst RUSH_INCR = 5;\nconst DEFAULT_SNAKE_SPEED = 80;\nconst BOARD_NOT_READY = 0;\nconst BOARD_READY = 1;\nconst BOARD_IN_PLAY = 2;\nconst HIGH_SCORE_KEY = \"jsSnakeHighScore\";\n/**\n * @method addEventListener\n * @param {Object} obj The object to add an event listener to.\n * @param {String} event The event to listen for.\n * @param {Function} funct The function to execute when the event is triggered.\n * @param {Boolean} evtCapturing True to do event capturing, false to do event bubbling.\n */ SNAKE.addEventListener = function() {\n if (window.addEventListener) return function(obj, event, funct, evtCapturing) {\n obj.addEventListener(event, funct, evtCapturing);\n };\n else if (window.attachEvent) return function(obj, event, funct) {\n obj.attachEvent(\"on\" + event, funct);\n };\n}();\n/**\n * @method removeEventListener\n * @param {Object} obj The object to remove an event listener from.\n * @param {String} event The event that was listened for.\n * @param {Function} funct The function that was executed when the event is triggered.\n * @param {Boolean} evtCapturing True if event capturing was done, false otherwise.\n */ SNAKE.removeEventListener = function() {\n if (window.removeEventListener) return function(obj, event, funct, evtCapturing) {\n obj.removeEventListener(event, funct, evtCapturing);\n };\n else if (window.detachEvent) return function(obj, event, funct) {\n obj.detachEvent(\"on\" + event, funct);\n };\n}();\n/**\n * This class manages the snake which will reside inside of a SNAKE.Board object.\n * @class Snake\n * @constructor\n * @namespace SNAKE\n * @param {Object} config The configuration object for the class. Contains playingBoard (the SNAKE.Board that this snake resides in), startRow and startCol.\n */ SNAKE.Snake = SNAKE.Snake || function() {\n // -------------------------------------------------------------------------\n // Private static variables and methods\n // -------------------------------------------------------------------------\n const blockPool = [];\n const SnakeBlock = function() {\n this.elm = null;\n this.elmStyle = null;\n this.row = -1;\n this.col = -1;\n this.next = null;\n this.prev = null;\n };\n // this function is adapted from the example at http://greengeckodesign.com/blog/2007/07/get-highest-z-index-in-javascript.html\n function getNextHighestZIndex(myObj) {\n let highestIndex = 0, currentIndex = 0, ii;\n for(ii in myObj){\n if (myObj[ii].elm.currentStyle) currentIndex = parseFloat(myObj[ii].elm.style[\"z-index\"], 10);\n else if (window.getComputedStyle) currentIndex = parseFloat(document.defaultView.getComputedStyle(myObj[ii].elm, null).getPropertyValue(\"z-index\"), 10);\n if (!isNaN(currentIndex) && currentIndex > highestIndex) highestIndex = currentIndex;\n }\n return highestIndex + 1;\n }\n // -------------------------------------------------------------------------\n // Contructor + public and private definitions\n // -------------------------------------------------------------------------\n /*\n config options:\n playingBoard - the SnakeBoard that this snake belongs too.\n startRow - The row the snake should start on.\n startCol - The column the snake should start on.\n moveSnakeWithAI - function to move the snake with AI\n */ return function(config) {\n if (!config || !config.playingBoard) return;\n if (localStorage[HIGH_SCORE_KEY] === undefined) localStorage.setItem(HIGH_SCORE_KEY, 0);\n // ----- private variables -----\n const me = this;\n const playingBoard = config.playingBoard;\n const growthIncr = 5;\n const columnShift = [\n 0,\n 1,\n 0,\n -1\n ];\n const rowShift = [\n -1,\n 0,\n 1,\n 0\n ];\n let prevNode;\n let lastMove = 1, preMove = MOVE_NONE, isFirstGameMove = true, currentDirection = MOVE_NONE, snakeSpeed = DEFAULT_SNAKE_SPEED, isDead = false, isPaused = false;\n const modeDropdown = document.getElementById(\"selectMode\");\n if (modeDropdown) modeDropdown.addEventListener(\"change\", function(evt) {\n evt = evt || {};\n let val = evt.target ? parseInt(evt.target.value) : DEFAULT_SNAKE_SPEED;\n if (isNaN(val)) val = DEFAULT_SNAKE_SPEED;\n else if (val < MIN_SNAKE_SPEED) val = DEFAULT_SNAKE_SPEED;\n snakeSpeed = val;\n setTimeout(function() {\n document.getElementById(\"game-area\").focus();\n }, 10);\n });\n // ----- public variables -----\n me.snakeBody = {};\n me.snakeBody[\"b0\"] = new SnakeBlock(); // create snake head\n me.snakeBody[\"b0\"].row = config.startRow || 1;\n me.snakeBody[\"b0\"].col = config.startCol || 1;\n me.snakeBody[\"b0\"].elm = createSnakeElement();\n me.snakeBody[\"b0\"].elmStyle = me.snakeBody[\"b0\"].elm.style;\n playingBoard.getBoardContainer().appendChild(me.snakeBody[\"b0\"].elm);\n me.snakeBody[\"b0\"].elm.style.left = getLeftPosition(me.snakeBody[\"b0\"]);\n me.snakeBody[\"b0\"].elm.style.top = getTopPosition(me.snakeBody[\"b0\"]);\n me.snakeBody[\"b0\"].next = me.snakeBody[\"b0\"];\n me.snakeBody[\"b0\"].prev = me.snakeBody[\"b0\"];\n me.snakeLength = 1;\n me.snakeHead = me.snakeBody[\"b0\"];\n me.snakeTail = me.snakeBody[\"b0\"];\n me.snakeHead.elm.className = me.snakeHead.elm.className.replace(/\\bsnake-snakebody-dead\\b/, \"\");\n me.snakeHead.elm.id = \"snake-snakehead-alive\";\n me.snakeHead.elm.className += \" snake-snakebody-alive\";\n // ----- private methods -----\n function getTopPosition(block) {\n const num = block.row * playingBoard.getBlockHeight();\n return `${num}px`;\n }\n function getLeftPosition(block) {\n const num = block.col * playingBoard.getBlockWidth();\n return `${num}px`;\n }\n function createSnakeElement() {\n const tempNode = document.createElement(\"div\");\n tempNode.className = \"snake-snakebody-block\";\n tempNode.style.left = \"-1000px\";\n tempNode.style.top = \"-1000px\";\n tempNode.style.width = playingBoard.getBlockWidth() + \"px\";\n tempNode.style.height = playingBoard.getBlockHeight() + \"px\";\n return tempNode;\n }\n function createBlocks(num) {\n let tempBlock;\n const tempNode = createSnakeElement();\n for(let ii = 1; ii < num; ii++){\n tempBlock = new SnakeBlock();\n tempBlock.elm = tempNode.cloneNode(true);\n tempBlock.elmStyle = tempBlock.elm.style;\n playingBoard.getBoardContainer().appendChild(tempBlock.elm);\n blockPool[blockPool.length] = tempBlock;\n }\n tempBlock = new SnakeBlock();\n tempBlock.elm = tempNode;\n playingBoard.getBoardContainer().appendChild(tempBlock.elm);\n blockPool[blockPool.length] = tempBlock;\n }\n function recordScore() {\n const highScore = localStorage[HIGH_SCORE_KEY];\n if (me.snakeLength > highScore) {\n alert(\"Congratulations! You have beaten your previous high score, which was \" + highScore + \".\");\n localStorage.setItem(HIGH_SCORE_KEY, me.snakeLength);\n }\n }\n function handleEndCondition(handleFunc) {\n recordScore();\n me.snakeHead.elm.style.zIndex = getNextHighestZIndex(me.snakeBody);\n me.snakeHead.elm.className = me.snakeHead.elm.className.replace(/\\bsnake-snakebody-alive\\b/, \"\");\n me.snakeHead.elm.className += \" snake-snakebody-dead\";\n isDead = true;\n handleFunc();\n }\n // ----- public methods -----\n me.setPaused = function(val) {\n isPaused = val;\n };\n me.getPaused = function() {\n return isPaused;\n };\n /**\n * This method sets the snake direction\n * @param direction\n */ me.setDirection = (direction)=>{\n if (currentDirection !== lastMove) // Allow a queue of 1 premove so you can turn again before the first turn registers\n preMove = direction;\n if (Math.abs(direction - lastMove) !== 2 || isFirstGameMove) {\n // Prevent snake from turning 180 degrees\n currentDirection = direction;\n isFirstGameMove = false;\n }\n };\n /**\n * This method is called when a user presses a key. It logs arrow key presses in \"currentDirection\", which is used when the snake needs to make its next move.\n * @method handleArrowKeys\n * @param {Number} keyNum A number representing the key that was pressed.\n */ /*\n Handles what happens when an arrow key is pressed.\n Direction explained (0 = up, etc etc)\n 0\n 3 1\n 2\n */ me.handleArrowKeys = function(keyNum) {\n if (isDead || isPaused && !config.premoveOnPause) return;\n let directionFound = MOVE_NONE;\n switch(keyNum){\n case 37:\n case 65:\n directionFound = MOVE_LEFT;\n break;\n case 38:\n case 87:\n directionFound = MOVE_UP;\n break;\n case 39:\n case 68:\n directionFound = MOVE_RIGHT;\n break;\n case 40:\n case 83:\n directionFound = MOVE_DOWN;\n break;\n }\n me.setDirection(directionFound);\n };\n /**\n * This method is executed for each move of the snake. It determines where the snake will go and what will happen to it. This method needs to run quickly.\n * @method go\n */ me.go = function() {\n const oldHead = me.snakeHead, newHead = me.snakeTail, grid = playingBoard.grid; // cache grid for quicker lookup\n if (isPaused === true) {\n setTimeout(function() {\n me.go();\n }, snakeSpeed);\n return;\n }\n // code to execute if snake is being moved by AI\n if (config.moveSnakeWithAI) config.moveSnakeWithAI({\n grid,\n snakeHead: me.snakeHead,\n currentDirection,\n isFirstGameMove,\n setDirection: me.setDirection\n });\n me.snakeTail = newHead.prev;\n me.snakeHead = newHead;\n // clear the old board position\n if (grid[newHead.row] && grid[newHead.row][newHead.col]) grid[newHead.row][newHead.col] = 0;\n if (currentDirection !== MOVE_NONE) {\n lastMove = currentDirection;\n if (preMove !== MOVE_NONE) {\n // If the user queued up another move after the current one\n currentDirection = preMove; // Execute that move next time (unless overwritten)\n preMove = MOVE_NONE;\n }\n }\n newHead.col = oldHead.col + columnShift[lastMove];\n newHead.row = oldHead.row + rowShift[lastMove];\n if (!newHead.elmStyle) newHead.elmStyle = newHead.elm.style;\n newHead.elmStyle.left = getLeftPosition(newHead);\n newHead.elmStyle.top = getTopPosition(newHead);\n if (me.snakeLength > 1) {\n newHead.elm.id = \"snake-snakehead-alive\";\n oldHead.elm.id = \"\";\n }\n // check the new spot the snake moved into\n if (grid[newHead.row][newHead.col] === 0) {\n grid[newHead.row][newHead.col] = 1;\n setTimeout(function() {\n me.go();\n }, snakeSpeed);\n } else if (grid[newHead.row][newHead.col] > 0) me.handleDeath();\n else if (grid[newHead.row][newHead.col] === playingBoard.getGridFoodValue()) {\n grid[newHead.row][newHead.col] = 1;\n if (!me.eatFood()) {\n me.handleWin();\n return;\n }\n setTimeout(function() {\n me.go();\n }, snakeSpeed);\n }\n };\n /**\n * This method is called when it is determined that the snake has eaten some food.\n * @method eatFood\n * @return {bool} Whether a new food was able to spawn (true)\n * or not (false) after the snake eats food.\n */ me.eatFood = function() {\n if (blockPool.length <= growthIncr) createBlocks(growthIncr * 2);\n const blocks = blockPool.splice(0, growthIncr);\n let ii = blocks.length, index;\n prevNode = me.snakeTail;\n while(ii--){\n index = \"b\" + me.snakeLength++;\n me.snakeBody[index] = blocks[ii];\n me.snakeBody[index].prev = prevNode;\n me.snakeBody[index].elm.className = me.snakeHead.elm.className.replace(/\\bsnake-snakebody-dead\\b/, \"\");\n me.snakeBody[index].elm.className += \" snake-snakebody-alive\";\n prevNode.next = me.snakeBody[index];\n prevNode = me.snakeBody[index];\n }\n me.snakeTail = me.snakeBody[index];\n me.snakeTail.next = me.snakeHead;\n me.snakeHead.prev = me.snakeTail;\n if (!playingBoard.foodEaten()) return false;\n //Checks if the current selected option is that of \"Rush\"\n //If so, \"increase\" the snake speed\n const selectDropDown = document.getElementById(\"selectMode\");\n const selectedOption = selectDropDown.options[selectDropDown.selectedIndex];\n if (selectedOption.text.localeCompare(\"Rush\") == 0) {\n if (snakeSpeed > MIN_SNAKE_SPEED + RUSH_INCR) snakeSpeed -= RUSH_INCR;\n }\n return true;\n };\n /**\n * This method handles what happens when the snake dies.\n * @method handleDeath\n */ me.handleDeath = function() {\n //Reset speed\n const selectedSpeed = document.getElementById(\"selectMode\").value;\n snakeSpeed = parseInt(selectedSpeed);\n handleEndCondition(playingBoard.handleDeath);\n };\n /**\n * This method handles what happens when the snake wins.\n * @method handleDeath\n */ me.handleWin = function() {\n handleEndCondition(playingBoard.handleWin);\n };\n /**\n * This method sets a flag that lets the snake be alive again.\n * @method rebirth\n */ me.rebirth = function() {\n isDead = false;\n isFirstGameMove = true;\n preMove = MOVE_NONE;\n };\n /**\n * This method reset the snake so it is ready for a new game.\n * @method reset\n */ me.reset = function() {\n if (isDead === false) return;\n const blocks = [];\n let curNode = me.snakeHead.next;\n let nextNode;\n while(curNode !== me.snakeHead){\n nextNode = curNode.next;\n curNode.prev = null;\n curNode.next = null;\n blocks.push(curNode);\n curNode = nextNode;\n }\n me.snakeHead.next = me.snakeHead;\n me.snakeHead.prev = me.snakeHead;\n me.snakeTail = me.snakeHead;\n me.snakeLength = 1;\n for(let ii = 0; ii < blocks.length; ii++){\n blocks[ii].elm.style.left = \"-1000px\";\n blocks[ii].elm.style.top = \"-1000px\";\n blocks[ii].elm.className = me.snakeHead.elm.className.replace(/\\bsnake-snakebody-dead\\b/, \"\");\n blocks[ii].elm.className += \" snake-snakebody-alive\";\n }\n blockPool.concat(blocks);\n me.snakeHead.elm.className = me.snakeHead.elm.className.replace(/\\bsnake-snakebody-dead\\b/, \"\");\n me.snakeHead.elm.className += \" snake-snakebody-alive\";\n me.snakeHead.elm.id = \"snake-snakehead-alive\";\n me.snakeHead.row = config.startRow || 1;\n me.snakeHead.col = config.startCol || 1;\n me.snakeHead.elm.style.left = getLeftPosition(me.snakeHead);\n me.snakeHead.elm.style.top = getTopPosition(me.snakeHead);\n };\n me.getSpeed = ()=>{\n return snakeSpeed;\n };\n me.setSpeed = (speed)=>{\n snakeSpeed = speed;\n };\n // ---------------------------------------------------------------------\n // Initialize\n // ---------------------------------------------------------------------\n createBlocks(growthIncr * 2);\n };\n}();\n/**\n * This class manages the food which the snake will eat.\n * @class Food\n * @constructor\n * @namespace SNAKE\n * @param {Object} config The configuration object for the class. Contains playingBoard (the SNAKE.Board that this food resides in).\n */ SNAKE.Food = SNAKE.Food || function() {\n // -------------------------------------------------------------------------\n // Private static variables and methods\n // -------------------------------------------------------------------------\n let instanceNumber = 0;\n function getRandomPosition(x, y) {\n return Math.floor(Math.random() * (y + 1 - x)) + x;\n }\n // -------------------------------------------------------------------------\n // Contructor + public and private definitions\n // -------------------------------------------------------------------------\n /*\n config options:\n playingBoard - the SnakeBoard that this object belongs too.\n */ return function(config) {\n if (!config || !config.playingBoard) return;\n // ----- private variables -----\n const me = this;\n const playingBoard = config.playingBoard;\n let fRow, fColumn;\n const myId = instanceNumber++;\n const elmFood = document.createElement(\"div\");\n elmFood.setAttribute(\"id\", \"snake-food-\" + myId);\n elmFood.className = \"snake-food-block\";\n elmFood.style.width = playingBoard.getBlockWidth() + \"px\";\n elmFood.style.height = playingBoard.getBlockHeight() + \"px\";\n elmFood.style.left = \"-1000px\";\n elmFood.style.top = \"-1000px\";\n playingBoard.getBoardContainer().appendChild(elmFood);\n // ----- public methods -----\n /**\n * @method getFoodElement\n * @return {DOM Element} The div the represents the food.\n */ me.getFoodElement = function() {\n return elmFood;\n };\n /**\n * Randomly places the food onto an available location on the playing board.\n * @method randomlyPlaceFood\n * @return {bool} Whether a food was able to spawn (true) or not (false).\n */ me.randomlyPlaceFood = function() {\n // if there exist some food, clear its presence from the board\n if (playingBoard.grid[fRow] && playingBoard.grid[fRow][fColumn] === playingBoard.getGridFoodValue()) playingBoard.grid[fRow][fColumn] = 0;\n let row = 0, col = 0, numTries = 0;\n const maxRows = playingBoard.grid.length - 1;\n const maxCols = playingBoard.grid[0].length - 1;\n while(playingBoard.grid[row][col] !== 0){\n row = getRandomPosition(1, maxRows);\n col = getRandomPosition(1, maxCols);\n // in some cases there may not be any room to put food anywhere\n // instead of freezing, exit out (and return false to indicate\n // that the player beat the game)\n numTries++;\n if (numTries > 20000) return false;\n }\n playingBoard.grid[row][col] = playingBoard.getGridFoodValue();\n fRow = row;\n fColumn = col;\n elmFood.style.top = row * playingBoard.getBlockHeight() + \"px\";\n elmFood.style.left = col * playingBoard.getBlockWidth() + \"px\";\n return true;\n };\n };\n}();\n/**\n * This class manages playing board for the game.\n * @class Board\n * @constructor\n * @namespace SNAKE\n * @param {Object} config The configuration object for the class. Set fullScreen equal to true if you want the game to take up the full screen, otherwise, set the top, left, width and height parameters.\n */ SNAKE.Board = SNAKE.Board || function() {\n // -------------------------------------------------------------------------\n // Private static variables and methods\n // -------------------------------------------------------------------------\n let instanceNumber = 0;\n // this function is adapted from the example at http://greengeckodesign.com/blog/2007/07/get-highest-z-index-in-javascript.html\n function getNextHighestZIndex(myObj) {\n let highestIndex = 0, currentIndex = 0, ii;\n for(ii in myObj){\n if (myObj[ii].elm.currentStyle) currentIndex = parseFloat(myObj[ii].elm.style[\"z-index\"], 10);\n else if (window.getComputedStyle) currentIndex = parseFloat(document.defaultView.getComputedStyle(myObj[ii].elm, null).getPropertyValue(\"z-index\"), 10);\n if (!isNaN(currentIndex) && currentIndex > highestIndex) highestIndex = currentIndex;\n }\n return highestIndex + 1;\n }\n /*\n This function returns the width of the available screen real estate that we have\n */ function getClientWidth() {\n let myWidth = 0;\n if (typeof window.innerWidth === \"number\") myWidth = window.innerWidth; //Non-IE\n else if (document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight)) myWidth = document.documentElement.clientWidth; //IE 6+ in 'standards compliant mode'\n else if (document.body && (document.body.clientWidth || document.body.clientHeight)) myWidth = document.body.clientWidth; //IE 4 compatible\n return myWidth;\n }\n /*\n This function returns the height of the available screen real estate that we have\n */ function getClientHeight() {\n let myHeight = 0;\n if (typeof window.innerHeight === \"number\") myHeight = window.innerHeight; //Non-IE\n else if (document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight)) myHeight = document.documentElement.clientHeight; //IE 6+ in 'standards compliant mode'\n else if (document.body && (document.body.clientWidth || document.body.clientHeight)) myHeight = document.body.clientHeight; //IE 4 compatible\n return myHeight;\n }\n // -------------------------------------------------------------------------\n // Contructor + public and private definitions\n // -------------------------------------------------------------------------\n return function(inputConfig) {\n // --- private variables ---\n const me = this;\n const myId = instanceNumber++;\n const config = inputConfig || {};\n const MAX_BOARD_COLS = 250;\n const MAX_BOARD_ROWS = 250;\n const blockWidth = 20;\n const blockHeight = 20;\n const GRID_FOOD_VALUE = -1; // the value of a spot on the board that represents snake food; MUST BE NEGATIVE\n // defaults\n if (!config.onLengthUpdate) config.onLengthUpdate = ()=>{};\n if (!config.onPauseToggle) config.onPauseToggle = ()=>{};\n if (!config.onWin) config.onWin = ()=>{};\n if (!config.onDeath) config.onDeath = ()=>{};\n let myFood, mySnake, boardState = BOARD_READY, myKeyListener, myWindowListener, isPaused = false; //note: both the board and the snake can be paused\n // Board components\n let elmContainer, elmPlayingField, elmAboutPanel, elmLengthPanel, elmHighscorePanel, elmWelcome, elmTryAgain, elmWin, elmPauseScreen;\n // --- public variables ---\n me.grid = [];\n // ---------------------------------------------------------------------\n // private functions\n // ---------------------------------------------------------------------\n function getStartRow() {\n return config.startRow || 2;\n }\n function getStartCol() {\n return config.startCol || 2;\n }\n function createBoardElements() {\n elmPlayingField = document.createElement(\"div\");\n elmPlayingField.setAttribute(\"id\", \"playingField\");\n elmPlayingField.className = \"snake-playing-field\";\n SNAKE.addEventListener(elmPlayingField, \"click\", function() {\n elmContainer.focus();\n }, false);\n elmPauseScreen = document.createElement(\"div\");\n elmPauseScreen.className = \"snake-pause-screen\";\n elmPauseScreen.innerHTML = \"
[Paused]

Press [space] to unpause.

\";\n elmAboutPanel = document.createElement(\"div\");\n elmAboutPanel.className = \"snake-panel-component\";\n elmAboutPanel.innerHTML = \"more patorjk.com apps - source code - pat's youtube\";\n elmLengthPanel = document.createElement(\"div\");\n elmLengthPanel.className = \"snake-panel-component\";\n elmLengthPanel.innerHTML = \"Length: 1\";\n elmHighscorePanel = document.createElement(\"div\");\n elmHighscorePanel.className = \"snake-panel-component\";\n elmHighscorePanel.innerHTML = \"Highscore: \" + (localStorage[HIGH_SCORE_KEY] || 0);\n // if it's not AI, show the dialogs\n if (!config.moveSnakeWithAI) {\n elmWelcome = createWelcomeElement();\n elmTryAgain = createTryAgainElement();\n elmWin = createWinElement();\n }\n SNAKE.addEventListener(elmContainer, \"keyup\", function(evt) {\n if (!evt) evt = window.event;\n evt.cancelBubble = true;\n if (evt.stopPropagation) evt.stopPropagation();\n if (evt.preventDefault) evt.preventDefault();\n return false;\n }, false);\n elmContainer.className = \"snake-game-container\";\n elmPauseScreen.style.zIndex = 10000;\n elmContainer.appendChild(elmPauseScreen);\n elmContainer.appendChild(elmPlayingField);\n elmContainer.appendChild(elmAboutPanel);\n elmContainer.appendChild(elmLengthPanel);\n elmContainer.appendChild(elmHighscorePanel);\n // nothing to attach if using AI\n if (!config.moveSnakeWithAI) {\n elmContainer.appendChild(elmWelcome);\n elmContainer.appendChild(elmTryAgain);\n elmContainer.appendChild(elmWin);\n }\n mySnake = new SNAKE.Snake({\n playingBoard: me,\n startRow: getStartRow(),\n startCol: getStartCol(),\n premoveOnPause: config.premoveOnPause,\n moveSnakeWithAI: config.moveSnakeWithAI\n });\n myFood = new SNAKE.Food({\n playingBoard: me\n });\n if (elmWelcome) elmWelcome.style.zIndex = 1000;\n }\n function maxBoardWidth() {\n return MAX_BOARD_COLS * me.getBlockWidth();\n }\n function maxBoardHeight() {\n return MAX_BOARD_ROWS * me.getBlockHeight();\n }\n function createWelcomeElement() {\n const tmpElm = document.createElement(\"div\");\n tmpElm.id = \"sbWelcome\" + myId;\n tmpElm.className = \"snake-welcome-dialog\";\n const welcomeTxt = document.createElement(\"div\");\n let fullScreenText = \"\";\n if (config.fullScreen) fullScreenText = \"On Windows, press F11 to play in Full Screen mode.\";\n welcomeTxt.innerHTML = \"JavaScript Snake

Use the arrow keys on your keyboard to play the game. \" + fullScreenText + \"

\";\n const welcomeStart = document.createElement(\"button\");\n welcomeStart.appendChild(document.createTextNode(\"Play Game\"));\n const loadGame = function() {\n SNAKE.removeEventListener(window, \"keyup\", kbShortcut, false);\n tmpElm.style.display = \"none\";\n me.setBoardState(BOARD_READY);\n me.getBoardContainer().focus();\n };\n const kbShortcut = function(evt) {\n if (!evt) evt = window.event;\n const keyNum = evt.which ? evt.which : evt.keyCode;\n if (keyNum === 32 || keyNum === 13) loadGame();\n };\n SNAKE.addEventListener(window, \"keyup\", kbShortcut, false);\n SNAKE.addEventListener(welcomeStart, \"click\", loadGame, false);\n tmpElm.appendChild(welcomeTxt);\n tmpElm.appendChild(welcomeStart);\n return tmpElm;\n }\n function createGameEndElement(message, elmId, elmClassName) {\n const tmpElm = document.createElement(\"div\");\n tmpElm.id = elmId + myId;\n tmpElm.className = elmClassName;\n const gameEndTxt = document.createElement(\"div\");\n gameEndTxt.innerHTML = \"JavaScript Snake

\" + message + \"

\";\n const gameEndStart = document.createElement(\"button\");\n gameEndStart.appendChild(document.createTextNode(\"Play Again?\"));\n const reloadGame = function() {\n tmpElm.style.display = \"none\";\n me.resetBoard();\n me.setBoardState(BOARD_READY);\n me.getBoardContainer().focus();\n };\n const kbGameEndShortcut = function(evt) {\n if (boardState !== 0 || tmpElm.style.display !== \"block\") return;\n if (!evt) evt = window.event;\n const keyNum = evt.which ? evt.which : evt.keyCode;\n if (keyNum === 32 || keyNum === 13) reloadGame();\n };\n SNAKE.addEventListener(window, \"keyup\", kbGameEndShortcut, true);\n SNAKE.addEventListener(gameEndStart, \"click\", reloadGame, false);\n tmpElm.appendChild(gameEndTxt);\n tmpElm.appendChild(gameEndStart);\n return tmpElm;\n }\n function createTryAgainElement() {\n return createGameEndElement(\"You died :(\", \"sbTryAgain\", \"snake-try-again-dialog\");\n }\n function createWinElement() {\n return createGameEndElement(\"You win! :D\", \"sbWin\", \"snake-win-dialog\");\n }\n function handleEndCondition(elmDialog) {\n const index = Math.max(getNextHighestZIndex(mySnake.snakeBody), getNextHighestZIndex({\n tmp: {\n elm: myFood.getFoodElement()\n }\n }));\n if (elmDialog) {\n elmContainer.removeChild(elmDialog);\n elmContainer.appendChild(elmDialog);\n elmDialog.style.zIndex = index;\n elmDialog.style.display = \"block\";\n }\n me.setBoardState(BOARD_NOT_READY);\n }\n // ---------------------------------------------------------------------\n // public functions\n // ---------------------------------------------------------------------\n me.setPaused = function(val) {\n isPaused = val;\n mySnake.setPaused(val);\n if (isPaused) elmPauseScreen.style.display = \"block\";\n else elmPauseScreen.style.display = \"none\";\n config.onPauseToggle(isPaused);\n };\n me.getPaused = function() {\n return isPaused;\n };\n /**\n * Resets the playing board for a new game.\n * @method resetBoard\n */ me.resetBoard = function() {\n SNAKE.removeEventListener(elmContainer, \"keydown\", myKeyListener, false);\n SNAKE.removeEventListener(elmContainer, \"visibilitychange\", myWindowListener, false);\n mySnake.reset();\n config.onLengthUpdate(1);\n elmLengthPanel.innerHTML = \"Length: 1\";\n me.setupPlayingField();\n me.grid[getStartRow()][getStartCol()] = 1; // snake head\n };\n /**\n * Gets the current state of the playing board. There are 3 states: 0 - Welcome or Try Again dialog is present. 1 - User has pressed \"Start Game\" on the Welcome or Try Again dialog but has not pressed an arrow key to move the snake. 2 - The game is in progress and the snake is moving.\n * @method getBoardState\n * @return {Number} The state of the board.\n */ me.getBoardState = function() {\n return boardState;\n };\n /**\n * Sets the current state of the playing board. There are 3 states: 0 - Welcome or Try Again dialog is present. 1 - User has pressed \"Start Game\" on the Welcome or Try Again dialog but has not pressed an arrow key to move the snake. 2 - The game is in progress and the snake is moving.\n * @method setBoardState\n * @param {Number} state The state of the board.\n */ me.setBoardState = function(state) {\n boardState = state;\n };\n /**\n * @method getGridFoodValue\n * @return {Number} A number that represents food on a number representation of the playing board.\n */ me.getGridFoodValue = function() {\n return GRID_FOOD_VALUE;\n };\n /**\n * @method getPlayingFieldElement\n * @return {DOM Element} The div representing the playing field (this is where the snake can move).\n */ me.getPlayingFieldElement = function() {\n return elmPlayingField;\n };\n /**\n * @method setBoardContainer\n * @param {DOM Element or String} myContainer Sets the container element for the game.\n */ me.setBoardContainer = function(myContainer) {\n if (typeof myContainer === \"string\") myContainer = document.getElementById(myContainer);\n if (myContainer === elmContainer) return;\n elmContainer = myContainer;\n elmPlayingField = null;\n me.setupPlayingField();\n me.grid[getStartRow()][getStartCol()] = 1; // snake head\n };\n /**\n * @method getBoardContainer\n * @return {DOM Element}\n */ me.getBoardContainer = function() {\n return elmContainer;\n };\n /**\n * @method getBlockWidth\n * @return {Number}\n */ me.getBlockWidth = function() {\n return blockWidth;\n };\n /**\n * @method getBlockHeight\n * @return {Number}\n */ me.getBlockHeight = function() {\n return blockHeight;\n };\n /**\n * Sets up the playing field.\n * @method setupPlayingField\n */ me.setupPlayingField = function() {\n if (!elmPlayingField) createBoardElements();\n // create playing field\n // calculate width of our game container\n let cWidth, cHeight;\n let cTop, cLeft;\n if (config.fullScreen === true) {\n cTop = 0;\n cLeft = 0;\n cWidth = getClientWidth() - 20;\n cHeight = getClientHeight() - 20;\n } else {\n cTop = config.top;\n cLeft = config.left;\n cWidth = config.width;\n cHeight = config.height;\n }\n // define the dimensions of the board and playing field\n const wEdgeSpace = me.getBlockWidth() * 2 + cWidth % me.getBlockWidth();\n const fWidth = Math.min(maxBoardWidth() - wEdgeSpace, cWidth - wEdgeSpace);\n const hEdgeSpace = me.getBlockHeight() * 3 + cHeight % me.getBlockHeight();\n const fHeight = Math.min(maxBoardHeight() - hEdgeSpace, cHeight - hEdgeSpace);\n elmContainer.style.left = cLeft + \"px\";\n elmContainer.style.top = cTop + \"px\";\n elmContainer.style.width = cWidth + \"px\";\n elmContainer.style.height = cHeight + \"px\";\n elmPlayingField.style.left = me.getBlockWidth() + \"px\";\n elmPlayingField.style.top = me.getBlockHeight() + \"px\";\n elmPlayingField.style.width = fWidth + \"px\";\n elmPlayingField.style.height = fHeight + \"px\";\n // the math for this will need to change depending on font size, padding, etc\n // assuming height of 14 (font size) + 8 (padding)\n const bottomPanelHeight = hEdgeSpace - me.getBlockHeight();\n const pLabelTop = me.getBlockHeight() + fHeight + Math.round((bottomPanelHeight - 30) / 2) + \"px\";\n elmAboutPanel.style.top = pLabelTop;\n elmAboutPanel.style.width = \"450px\";\n elmAboutPanel.style.left = Math.round(cWidth / 2) - Math.round(225) + \"px\";\n elmLengthPanel.style.top = pLabelTop;\n elmLengthPanel.style.left = \"30px\";\n elmHighscorePanel.style.top = pLabelTop;\n elmHighscorePanel.style.left = cWidth - 140 + \"px\";\n // if width is too narrow, hide the about panel\n if (cWidth < 700) elmAboutPanel.style.display = \"none\";\n else elmAboutPanel.style.display = \"block\";\n me.grid = [];\n const numBoardCols = fWidth / me.getBlockWidth() + 2;\n const numBoardRows = fHeight / me.getBlockHeight() + 2;\n for(let row = 0; row < numBoardRows; row++){\n me.grid[row] = [];\n for(let col = 0; col < numBoardCols; col++)if (col === 0 || row === 0 || col === numBoardCols - 1 || row === numBoardRows - 1) me.grid[row][col] = 1; // an edge\n else me.grid[row][col] = 0; // empty space\n }\n myFood.randomlyPlaceFood();\n config.onLengthUpdate(1);\n myKeyListener = function(evt) {\n if (!evt) evt = window.event;\n const keyNum = evt.which ? evt.which : evt.keyCode;\n if (me.getBoardState() === BOARD_READY) {\n if (!(keyNum >= 37 && keyNum <= 40) && !(keyNum === 87 || keyNum === 65 || keyNum === 83 || keyNum === 68)) return;\n // if not an arrow key, leave\n // This removes the listener added at the #listenerX line\n SNAKE.removeEventListener(elmContainer, \"keydown\", myKeyListener, false);\n SNAKE.removeEventListener(elmContainer, \"visibilitychange\", myWindowListener, false);\n myKeyListener = function(evt) {\n if (!evt) evt = window.event;\n const keyNum = evt.which ? evt.which : evt.keyCode;\n if (keyNum === 32) {\n if (me.getBoardState() != BOARD_NOT_READY) me.setPaused(!me.getPaused());\n }\n mySnake.handleArrowKeys(keyNum);\n evt.cancelBubble = true;\n if (evt.stopPropagation) evt.stopPropagation();\n if (evt.preventDefault) evt.preventDefault();\n return false;\n };\n //listener for pausing the game if user change tab or minimize the browser window\n document.addEventListener(\"visibilitychange\", ()=>{\n if (document.visibilityState === \"hidden\") {\n if (me.getBoardState() != BOARD_NOT_READY && !me.getPaused()) me.setPaused(true);\n }\n });\n SNAKE.addEventListener(elmContainer, \"keydown\", myKeyListener, false);\n SNAKE.addEventListener(elmContainer, \"visibilitychange\", myWindowListener, false);\n mySnake.rebirth();\n mySnake.handleArrowKeys(keyNum);\n me.setBoardState(BOARD_IN_PLAY); // start the game!\n mySnake.go();\n }\n evt.cancelBubble = true;\n if (evt.stopPropagation) evt.stopPropagation();\n if (evt.preventDefault) evt.preventDefault();\n return false;\n };\n // Search for #listenerX to see where this is removed\n if (!config.moveSnakeWithAI) {\n SNAKE.addEventListener(elmContainer, \"keydown\", myKeyListener, false);\n SNAKE.addEventListener(elmContainer, \"visibilitychange\", myWindowListener, false);\n }\n };\n /**\n * This method is called when the snake has eaten some food.\n * @method foodEaten\n * @return {bool} Whether a new food was able to spawn (true)\n * or not (false) after the snake eats food.\n */ me.foodEaten = function() {\n config.onLengthUpdate(mySnake.snakeLength);\n elmLengthPanel.innerHTML = \"Length: \" + mySnake.snakeLength;\n if (mySnake.snakeLength > localStorage[HIGH_SCORE_KEY]) {\n localStorage.setItem(HIGH_SCORE_KEY, mySnake.snakeLength);\n elmHighscorePanel.innerHTML = \"Highscore: \" + localStorage[HIGH_SCORE_KEY];\n }\n if (!myFood.randomlyPlaceFood()) return false;\n return true;\n };\n /**\n * This method is called when the snake dies.\n * @method handleDeath\n */ me.handleDeath = function() {\n handleEndCondition(elmTryAgain);\n config.onDeath({\n startAIGame: me.startAIGame\n });\n };\n /**\n * This method is called when the snake wins.\n * @method handleWin\n */ me.handleWin = function() {\n handleEndCondition(elmWin);\n config.onWin({\n startAIGame: me.startAIGame\n });\n };\n me.setSpeed = (speed)=>{\n mySnake.setSpeed(speed);\n };\n me.getSpeed = ()=>{\n return mySnake.getSpeed();\n };\n me.startAIGame = ()=>{\n me.resetBoard();\n mySnake.rebirth();\n me.setBoardState(BOARD_IN_PLAY); // start the game!\n mySnake.go();\n };\n // ---------------------------------------------------------------------\n // Initialize\n // ---------------------------------------------------------------------\n config.fullScreen = typeof config.fullScreen === \"undefined\" ? false : config.fullScreen;\n config.top = typeof config.top === \"undefined\" ? 0 : config.top;\n config.left = typeof config.left === \"undefined\" ? 0 : config.left;\n config.width = typeof config.width === \"undefined\" ? 400 : config.width;\n config.height = typeof config.height === \"undefined\" ? 400 : config.height;\n config.premoveOnPause = typeof config.premoveOnPause === \"undefined\" ? false : config.premoveOnPause;\n if (config.fullScreen) SNAKE.addEventListener(window, \"resize\", function() {\n me.setupPlayingField();\n }, false);\n me.setBoardState(BOARD_NOT_READY);\n if (config.boardContainer) me.setBoardContainer(config.boardContainer);\n const reloadGame = function() {\n me.resetBoard();\n me.setBoardState(BOARD_READY);\n me.getBoardContainer().focus();\n };\n if (config.onInit) config.onInit({\n reloadGame,\n getSpeed: me.getSpeed,\n setSpeed: me.setSpeed,\n startAIGame: me.startAIGame\n });\n }; // end return function\n}();\n\n//# sourceMappingURL=index.a5373759.js.map\n","/*\nJavaScript Snake\nFirst version by Patrick Gillespie - I've since merged in a good number of github pull requests\nhttp://patorjk.com/games/snake\n*/\n\n/**\n * @module Snake\n * @class SNAKE\n */\n\n// this will allow us to access the game in other JS files when the app is loaded up in a codesandbox.com sandbox, that's the only reason it's here\nif (!window.SNAKE) {\n window.SNAKE = {};\n}\n\n/*\n Direction explained (0 = up, etc etc)\n 0\n 3 1\n 2\n*/\nconst MOVE_NONE = -1;\nconst MOVE_UP = 0;\nconst MOVE_LEFT = 3;\nconst MOVE_DOWN = 2;\nconst MOVE_RIGHT = 1;\n\nconst MIN_SNAKE_SPEED = 25;\nconst RUSH_INCR = 5;\n\nconst DEFAULT_SNAKE_SPEED = 80;\n\nconst BOARD_NOT_READY = 0;\nconst BOARD_READY = 1;\nconst BOARD_IN_PLAY = 2;\n\nconst HIGH_SCORE_KEY = \"jsSnakeHighScore\";\n\n/**\n * @method addEventListener\n * @param {Object} obj The object to add an event listener to.\n * @param {String} event The event to listen for.\n * @param {Function} funct The function to execute when the event is triggered.\n * @param {Boolean} evtCapturing True to do event capturing, false to do event bubbling.\n */\nSNAKE.addEventListener = (function () {\n if (window.addEventListener) {\n return function (obj, event, funct, evtCapturing) {\n obj.addEventListener(event, funct, evtCapturing);\n };\n } else if (window.attachEvent) {\n return function (obj, event, funct) {\n obj.attachEvent(\"on\" + event, funct);\n };\n }\n})();\n\n/**\n * @method removeEventListener\n * @param {Object} obj The object to remove an event listener from.\n * @param {String} event The event that was listened for.\n * @param {Function} funct The function that was executed when the event is triggered.\n * @param {Boolean} evtCapturing True if event capturing was done, false otherwise.\n */\n\nSNAKE.removeEventListener = (function () {\n if (window.removeEventListener) {\n return function (obj, event, funct, evtCapturing) {\n obj.removeEventListener(event, funct, evtCapturing);\n };\n } else if (window.detachEvent) {\n return function (obj, event, funct) {\n obj.detachEvent(\"on\" + event, funct);\n };\n }\n})();\n\n/**\n * This class manages the snake which will reside inside of a SNAKE.Board object.\n * @class Snake\n * @constructor\n * @namespace SNAKE\n * @param {Object} config The configuration object for the class. Contains playingBoard (the SNAKE.Board that this snake resides in), startRow and startCol.\n */\nSNAKE.Snake =\n SNAKE.Snake ||\n (function () {\n // -------------------------------------------------------------------------\n // Private static variables and methods\n // -------------------------------------------------------------------------\n\n const blockPool = [];\n\n const SnakeBlock = function () {\n this.elm = null;\n this.elmStyle = null;\n this.row = -1;\n this.col = -1;\n this.next = null;\n this.prev = null;\n };\n\n // this function is adapted from the example at http://greengeckodesign.com/blog/2007/07/get-highest-z-index-in-javascript.html\n function getNextHighestZIndex(myObj) {\n let highestIndex = 0,\n currentIndex = 0,\n ii;\n for (ii in myObj) {\n if (myObj[ii].elm.currentStyle) {\n currentIndex = parseFloat(myObj[ii].elm.style[\"z-index\"], 10);\n } else if (window.getComputedStyle) {\n currentIndex = parseFloat(\n document.defaultView\n .getComputedStyle(myObj[ii].elm, null)\n .getPropertyValue(\"z-index\"),\n 10,\n );\n }\n if (!isNaN(currentIndex) && currentIndex > highestIndex) {\n highestIndex = currentIndex;\n }\n }\n return highestIndex + 1;\n }\n\n // -------------------------------------------------------------------------\n // Contructor + public and private definitions\n // -------------------------------------------------------------------------\n\n /*\n config options:\n playingBoard - the SnakeBoard that this snake belongs too.\n startRow - The row the snake should start on.\n startCol - The column the snake should start on.\n moveSnakeWithAI - function to move the snake with AI\n */\n return function (config) {\n if (!config || !config.playingBoard) {\n return;\n }\n if (localStorage[HIGH_SCORE_KEY] === undefined)\n localStorage.setItem(HIGH_SCORE_KEY, 0);\n\n // ----- private variables -----\n\n const me = this;\n const playingBoard = config.playingBoard;\n const growthIncr = 5;\n const columnShift = [0, 1, 0, -1];\n const rowShift = [-1, 0, 1, 0];\n let prevNode;\n\n let lastMove = 1,\n preMove = MOVE_NONE,\n isFirstGameMove = true,\n currentDirection = MOVE_NONE, // 0: up, 1: left, 2: down, 3: right\n snakeSpeed = DEFAULT_SNAKE_SPEED,\n isDead = false,\n isPaused = false;\n\n const modeDropdown = document.getElementById(\"selectMode\");\n if (modeDropdown) {\n modeDropdown.addEventListener(\"change\", function (evt) {\n evt = evt || {};\n let val = evt.target\n ? parseInt(evt.target.value)\n : DEFAULT_SNAKE_SPEED;\n\n if (isNaN(val)) {\n val = DEFAULT_SNAKE_SPEED;\n } else if (val < MIN_SNAKE_SPEED) {\n val = DEFAULT_SNAKE_SPEED;\n }\n\n snakeSpeed = val;\n\n setTimeout(function () {\n document.getElementById(\"game-area\").focus();\n }, 10);\n });\n }\n\n // ----- public variables -----\n me.snakeBody = {};\n me.snakeBody[\"b0\"] = new SnakeBlock(); // create snake head\n me.snakeBody[\"b0\"].row = config.startRow || 1;\n me.snakeBody[\"b0\"].col = config.startCol || 1;\n me.snakeBody[\"b0\"].elm = createSnakeElement();\n me.snakeBody[\"b0\"].elmStyle = me.snakeBody[\"b0\"].elm.style;\n playingBoard.getBoardContainer().appendChild(me.snakeBody[\"b0\"].elm);\n me.snakeBody[\"b0\"].elm.style.left = getLeftPosition(me.snakeBody[\"b0\"]);\n me.snakeBody[\"b0\"].elm.style.top = getTopPosition(me.snakeBody[\"b0\"]);\n me.snakeBody[\"b0\"].next = me.snakeBody[\"b0\"];\n me.snakeBody[\"b0\"].prev = me.snakeBody[\"b0\"];\n\n me.snakeLength = 1;\n me.snakeHead = me.snakeBody[\"b0\"];\n me.snakeTail = me.snakeBody[\"b0\"];\n me.snakeHead.elm.className = me.snakeHead.elm.className.replace(\n /\\bsnake-snakebody-dead\\b/,\n \"\",\n );\n me.snakeHead.elm.id = \"snake-snakehead-alive\";\n me.snakeHead.elm.className += \" snake-snakebody-alive\";\n\n // ----- private methods -----\n\n function getTopPosition(block) {\n const num = block.row * playingBoard.getBlockHeight();\n return `${num}px`;\n }\n\n function getLeftPosition(block) {\n const num = block.col * playingBoard.getBlockWidth();\n return `${num}px`;\n }\n\n function createSnakeElement() {\n const tempNode = document.createElement(\"div\");\n tempNode.className = \"snake-snakebody-block\";\n tempNode.style.left = \"-1000px\";\n tempNode.style.top = \"-1000px\";\n tempNode.style.width = playingBoard.getBlockWidth() + \"px\";\n tempNode.style.height = playingBoard.getBlockHeight() + \"px\";\n return tempNode;\n }\n\n function createBlocks(num) {\n let tempBlock;\n const tempNode = createSnakeElement();\n\n for (let ii = 1; ii < num; ii++) {\n tempBlock = new SnakeBlock();\n tempBlock.elm = tempNode.cloneNode(true);\n tempBlock.elmStyle = tempBlock.elm.style;\n playingBoard.getBoardContainer().appendChild(tempBlock.elm);\n blockPool[blockPool.length] = tempBlock;\n }\n\n tempBlock = new SnakeBlock();\n tempBlock.elm = tempNode;\n playingBoard.getBoardContainer().appendChild(tempBlock.elm);\n blockPool[blockPool.length] = tempBlock;\n }\n\n function recordScore() {\n const highScore = localStorage[HIGH_SCORE_KEY];\n if (me.snakeLength > highScore) {\n alert(\n \"Congratulations! You have beaten your previous high score, which was \" +\n highScore +\n \".\",\n );\n localStorage.setItem(HIGH_SCORE_KEY, me.snakeLength);\n }\n }\n\n function handleEndCondition(handleFunc) {\n recordScore();\n me.snakeHead.elm.style.zIndex = getNextHighestZIndex(me.snakeBody);\n me.snakeHead.elm.className = me.snakeHead.elm.className.replace(\n /\\bsnake-snakebody-alive\\b/,\n \"\",\n );\n me.snakeHead.elm.className += \" snake-snakebody-dead\";\n\n isDead = true;\n handleFunc();\n }\n\n // ----- public methods -----\n\n me.setPaused = function (val) {\n isPaused = val;\n };\n me.getPaused = function () {\n return isPaused;\n };\n\n /**\n * This method sets the snake direction\n * @param direction\n */\n me.setDirection = (direction) => {\n if (currentDirection !== lastMove) {\n // Allow a queue of 1 premove so you can turn again before the first turn registers\n preMove = direction;\n }\n if (Math.abs(direction - lastMove) !== 2 || isFirstGameMove) {\n // Prevent snake from turning 180 degrees\n currentDirection = direction;\n isFirstGameMove = false;\n }\n };\n\n /**\n * This method is called when a user presses a key. It logs arrow key presses in \"currentDirection\", which is used when the snake needs to make its next move.\n * @method handleArrowKeys\n * @param {Number} keyNum A number representing the key that was pressed.\n */\n /*\n Handles what happens when an arrow key is pressed.\n Direction explained (0 = up, etc etc)\n 0\n 3 1\n 2\n */\n me.handleArrowKeys = function (keyNum) {\n if (isDead || (isPaused && !config.premoveOnPause)) {\n return;\n }\n\n let directionFound = MOVE_NONE;\n\n switch (keyNum) {\n case 37:\n case 65:\n directionFound = MOVE_LEFT;\n break;\n case 38:\n case 87:\n directionFound = MOVE_UP;\n break;\n case 39:\n case 68:\n directionFound = MOVE_RIGHT;\n break;\n case 40:\n case 83:\n directionFound = MOVE_DOWN;\n break;\n }\n me.setDirection(directionFound);\n };\n\n /**\n * This method is executed for each move of the snake. It determines where the snake will go and what will happen to it. This method needs to run quickly.\n * @method go\n */\n me.go = function () {\n const oldHead = me.snakeHead,\n newHead = me.snakeTail,\n grid = playingBoard.grid; // cache grid for quicker lookup\n\n if (isPaused === true) {\n setTimeout(function () {\n me.go();\n }, snakeSpeed);\n return;\n }\n\n // code to execute if snake is being moved by AI\n if (config.moveSnakeWithAI) {\n config.moveSnakeWithAI({\n grid,\n snakeHead: me.snakeHead,\n currentDirection,\n isFirstGameMove,\n setDirection: me.setDirection,\n });\n }\n\n me.snakeTail = newHead.prev;\n me.snakeHead = newHead;\n\n // clear the old board position\n if (grid[newHead.row] && grid[newHead.row][newHead.col]) {\n grid[newHead.row][newHead.col] = 0;\n }\n\n if (currentDirection !== MOVE_NONE) {\n lastMove = currentDirection;\n if (preMove !== MOVE_NONE) {\n // If the user queued up another move after the current one\n currentDirection = preMove; // Execute that move next time (unless overwritten)\n preMove = MOVE_NONE;\n }\n }\n\n newHead.col = oldHead.col + columnShift[lastMove];\n newHead.row = oldHead.row + rowShift[lastMove];\n\n if (!newHead.elmStyle) {\n newHead.elmStyle = newHead.elm.style;\n }\n\n newHead.elmStyle.left = getLeftPosition(newHead);\n newHead.elmStyle.top = getTopPosition(newHead);\n if (me.snakeLength > 1) {\n newHead.elm.id = \"snake-snakehead-alive\";\n oldHead.elm.id = \"\";\n }\n\n // check the new spot the snake moved into\n\n if (grid[newHead.row][newHead.col] === 0) {\n grid[newHead.row][newHead.col] = 1;\n setTimeout(function () {\n me.go();\n }, snakeSpeed);\n } else if (grid[newHead.row][newHead.col] > 0) {\n me.handleDeath();\n } else if (\n grid[newHead.row][newHead.col] === playingBoard.getGridFoodValue()\n ) {\n grid[newHead.row][newHead.col] = 1;\n if (!me.eatFood()) {\n me.handleWin();\n return;\n }\n setTimeout(function () {\n me.go();\n }, snakeSpeed);\n }\n };\n\n /**\n * This method is called when it is determined that the snake has eaten some food.\n * @method eatFood\n * @return {bool} Whether a new food was able to spawn (true)\n * or not (false) after the snake eats food.\n */\n me.eatFood = function () {\n if (blockPool.length <= growthIncr) {\n createBlocks(growthIncr * 2);\n }\n const blocks = blockPool.splice(0, growthIncr);\n\n let ii = blocks.length,\n index;\n prevNode = me.snakeTail;\n while (ii--) {\n index = \"b\" + me.snakeLength++;\n me.snakeBody[index] = blocks[ii];\n me.snakeBody[index].prev = prevNode;\n me.snakeBody[index].elm.className =\n me.snakeHead.elm.className.replace(/\\bsnake-snakebody-dead\\b/, \"\");\n me.snakeBody[index].elm.className += \" snake-snakebody-alive\";\n prevNode.next = me.snakeBody[index];\n prevNode = me.snakeBody[index];\n }\n me.snakeTail = me.snakeBody[index];\n me.snakeTail.next = me.snakeHead;\n me.snakeHead.prev = me.snakeTail;\n\n if (!playingBoard.foodEaten()) {\n return false;\n }\n\n //Checks if the current selected option is that of \"Rush\"\n //If so, \"increase\" the snake speed\n const selectDropDown = document.getElementById(\"selectMode\");\n const selectedOption =\n selectDropDown.options[selectDropDown.selectedIndex];\n\n if (selectedOption.text.localeCompare(\"Rush\") == 0) {\n if (snakeSpeed > MIN_SNAKE_SPEED + RUSH_INCR) {\n snakeSpeed -= RUSH_INCR;\n }\n }\n\n return true;\n };\n\n /**\n * This method handles what happens when the snake dies.\n * @method handleDeath\n */\n me.handleDeath = function () {\n //Reset speed\n const selectedSpeed = document.getElementById(\"selectMode\").value;\n snakeSpeed = parseInt(selectedSpeed);\n\n handleEndCondition(playingBoard.handleDeath);\n };\n\n /**\n * This method handles what happens when the snake wins.\n * @method handleDeath\n */\n me.handleWin = function () {\n handleEndCondition(playingBoard.handleWin);\n };\n\n /**\n * This method sets a flag that lets the snake be alive again.\n * @method rebirth\n */\n me.rebirth = function () {\n isDead = false;\n isFirstGameMove = true;\n preMove = MOVE_NONE;\n };\n\n /**\n * This method reset the snake so it is ready for a new game.\n * @method reset\n */\n me.reset = function () {\n if (isDead === false) {\n return;\n }\n\n const blocks = [];\n let curNode = me.snakeHead.next;\n let nextNode;\n\n while (curNode !== me.snakeHead) {\n nextNode = curNode.next;\n curNode.prev = null;\n curNode.next = null;\n blocks.push(curNode);\n curNode = nextNode;\n }\n me.snakeHead.next = me.snakeHead;\n me.snakeHead.prev = me.snakeHead;\n me.snakeTail = me.snakeHead;\n me.snakeLength = 1;\n\n for (let ii = 0; ii < blocks.length; ii++) {\n blocks[ii].elm.style.left = \"-1000px\";\n blocks[ii].elm.style.top = \"-1000px\";\n blocks[ii].elm.className = me.snakeHead.elm.className.replace(\n /\\bsnake-snakebody-dead\\b/,\n \"\",\n );\n blocks[ii].elm.className += \" snake-snakebody-alive\";\n }\n\n blockPool.concat(blocks);\n me.snakeHead.elm.className = me.snakeHead.elm.className.replace(\n /\\bsnake-snakebody-dead\\b/,\n \"\",\n );\n me.snakeHead.elm.className += \" snake-snakebody-alive\";\n me.snakeHead.elm.id = \"snake-snakehead-alive\";\n me.snakeHead.row = config.startRow || 1;\n me.snakeHead.col = config.startCol || 1;\n me.snakeHead.elm.style.left = getLeftPosition(me.snakeHead);\n me.snakeHead.elm.style.top = getTopPosition(me.snakeHead);\n };\n\n me.getSpeed = () => {\n return snakeSpeed;\n };\n me.setSpeed = (speed) => {\n snakeSpeed = speed;\n };\n\n // ---------------------------------------------------------------------\n // Initialize\n // ---------------------------------------------------------------------\n createBlocks(growthIncr * 2);\n };\n })();\n\n/**\n * This class manages the food which the snake will eat.\n * @class Food\n * @constructor\n * @namespace SNAKE\n * @param {Object} config The configuration object for the class. Contains playingBoard (the SNAKE.Board that this food resides in).\n */\n\nSNAKE.Food =\n SNAKE.Food ||\n (function () {\n // -------------------------------------------------------------------------\n // Private static variables and methods\n // -------------------------------------------------------------------------\n\n let instanceNumber = 0;\n\n function getRandomPosition(x, y) {\n return Math.floor(Math.random() * (y + 1 - x)) + x;\n }\n\n // -------------------------------------------------------------------------\n // Contructor + public and private definitions\n // -------------------------------------------------------------------------\n\n /*\n config options:\n playingBoard - the SnakeBoard that this object belongs too.\n */\n return function (config) {\n if (!config || !config.playingBoard) {\n return;\n }\n\n // ----- private variables -----\n\n const me = this;\n const playingBoard = config.playingBoard;\n let fRow, fColumn;\n const myId = instanceNumber++;\n\n const elmFood = document.createElement(\"div\");\n elmFood.setAttribute(\"id\", \"snake-food-\" + myId);\n elmFood.className = \"snake-food-block\";\n elmFood.style.width = playingBoard.getBlockWidth() + \"px\";\n elmFood.style.height = playingBoard.getBlockHeight() + \"px\";\n elmFood.style.left = \"-1000px\";\n elmFood.style.top = \"-1000px\";\n playingBoard.getBoardContainer().appendChild(elmFood);\n\n // ----- public methods -----\n\n /**\n * @method getFoodElement\n * @return {DOM Element} The div the represents the food.\n */\n me.getFoodElement = function () {\n return elmFood;\n };\n\n /**\n * Randomly places the food onto an available location on the playing board.\n * @method randomlyPlaceFood\n * @return {bool} Whether a food was able to spawn (true) or not (false).\n */\n me.randomlyPlaceFood = function () {\n // if there exist some food, clear its presence from the board\n if (\n playingBoard.grid[fRow] &&\n playingBoard.grid[fRow][fColumn] === playingBoard.getGridFoodValue()\n ) {\n playingBoard.grid[fRow][fColumn] = 0;\n }\n\n let row = 0,\n col = 0,\n numTries = 0;\n\n const maxRows = playingBoard.grid.length - 1;\n const maxCols = playingBoard.grid[0].length - 1;\n\n while (playingBoard.grid[row][col] !== 0) {\n row = getRandomPosition(1, maxRows);\n col = getRandomPosition(1, maxCols);\n\n // in some cases there may not be any room to put food anywhere\n // instead of freezing, exit out (and return false to indicate\n // that the player beat the game)\n numTries++;\n if (numTries > 20000) {\n return false;\n }\n }\n\n playingBoard.grid[row][col] = playingBoard.getGridFoodValue();\n fRow = row;\n fColumn = col;\n elmFood.style.top = row * playingBoard.getBlockHeight() + \"px\";\n elmFood.style.left = col * playingBoard.getBlockWidth() + \"px\";\n return true;\n };\n };\n })();\n\n/**\n * This class manages playing board for the game.\n * @class Board\n * @constructor\n * @namespace SNAKE\n * @param {Object} config The configuration object for the class. Set fullScreen equal to true if you want the game to take up the full screen, otherwise, set the top, left, width and height parameters.\n */\n\nSNAKE.Board =\n SNAKE.Board ||\n (function () {\n // -------------------------------------------------------------------------\n // Private static variables and methods\n // -------------------------------------------------------------------------\n\n let instanceNumber = 0;\n\n // this function is adapted from the example at http://greengeckodesign.com/blog/2007/07/get-highest-z-index-in-javascript.html\n function getNextHighestZIndex(myObj) {\n let highestIndex = 0,\n currentIndex = 0,\n ii;\n for (ii in myObj) {\n if (myObj[ii].elm.currentStyle) {\n currentIndex = parseFloat(myObj[ii].elm.style[\"z-index\"], 10);\n } else if (window.getComputedStyle) {\n currentIndex = parseFloat(\n document.defaultView\n .getComputedStyle(myObj[ii].elm, null)\n .getPropertyValue(\"z-index\"),\n 10,\n );\n }\n if (!isNaN(currentIndex) && currentIndex > highestIndex) {\n highestIndex = currentIndex;\n }\n }\n return highestIndex + 1;\n }\n\n /*\n This function returns the width of the available screen real estate that we have\n */\n function getClientWidth() {\n let myWidth = 0;\n if (typeof window.innerWidth === \"number\") {\n myWidth = window.innerWidth; //Non-IE\n } else if (\n document.documentElement &&\n (document.documentElement.clientWidth ||\n document.documentElement.clientHeight)\n ) {\n myWidth = document.documentElement.clientWidth; //IE 6+ in 'standards compliant mode'\n } else if (\n document.body &&\n (document.body.clientWidth || document.body.clientHeight)\n ) {\n myWidth = document.body.clientWidth; //IE 4 compatible\n }\n return myWidth;\n }\n\n /*\n This function returns the height of the available screen real estate that we have\n */\n function getClientHeight() {\n let myHeight = 0;\n if (typeof window.innerHeight === \"number\") {\n myHeight = window.innerHeight; //Non-IE\n } else if (\n document.documentElement &&\n (document.documentElement.clientWidth ||\n document.documentElement.clientHeight)\n ) {\n myHeight = document.documentElement.clientHeight; //IE 6+ in 'standards compliant mode'\n } else if (\n document.body &&\n (document.body.clientWidth || document.body.clientHeight)\n ) {\n myHeight = document.body.clientHeight; //IE 4 compatible\n }\n return myHeight;\n }\n\n // -------------------------------------------------------------------------\n // Contructor + public and private definitions\n // -------------------------------------------------------------------------\n\n return function (inputConfig) {\n // --- private variables ---\n const me = this;\n const myId = instanceNumber++;\n const config = inputConfig || {};\n const MAX_BOARD_COLS = 250;\n const MAX_BOARD_ROWS = 250;\n const blockWidth = 20;\n const blockHeight = 20;\n const GRID_FOOD_VALUE = -1; // the value of a spot on the board that represents snake food; MUST BE NEGATIVE\n\n // defaults\n if (!config.onLengthUpdate) {\n config.onLengthUpdate = () => {};\n }\n\n if (!config.onPauseToggle) {\n config.onPauseToggle = () => {};\n }\n if (!config.onWin) {\n config.onWin = () => {};\n }\n if (!config.onDeath) {\n config.onDeath = () => {};\n }\n\n let myFood,\n mySnake,\n boardState = BOARD_READY, // 0: in active, 1: awaiting game start, 2: playing game\n myKeyListener,\n myWindowListener,\n isPaused = false; //note: both the board and the snake can be paused\n\n // Board components\n let elmContainer,\n elmPlayingField,\n elmAboutPanel,\n elmLengthPanel,\n elmHighscorePanel,\n elmWelcome,\n elmTryAgain,\n elmWin,\n elmPauseScreen;\n\n // --- public variables ---\n me.grid = [];\n\n // ---------------------------------------------------------------------\n // private functions\n // ---------------------------------------------------------------------\n\n function getStartRow() {\n return config.startRow || 2;\n }\n\n function getStartCol() {\n return config.startCol || 2;\n }\n\n function createBoardElements() {\n elmPlayingField = document.createElement(\"div\");\n elmPlayingField.setAttribute(\"id\", \"playingField\");\n elmPlayingField.className = \"snake-playing-field\";\n\n SNAKE.addEventListener(\n elmPlayingField,\n \"click\",\n function () {\n elmContainer.focus();\n },\n false,\n );\n\n elmPauseScreen = document.createElement(\"div\");\n elmPauseScreen.className = \"snake-pause-screen\";\n elmPauseScreen.innerHTML =\n \"
[Paused]

Press [space] to unpause.

\";\n\n elmAboutPanel = document.createElement(\"div\");\n elmAboutPanel.className = \"snake-panel-component\";\n elmAboutPanel.innerHTML =\n \"more patorjk.com apps - source code - pat's youtube\";\n\n elmLengthPanel = document.createElement(\"div\");\n elmLengthPanel.className = \"snake-panel-component\";\n elmLengthPanel.innerHTML = \"Length: 1\";\n\n elmHighscorePanel = document.createElement(\"div\");\n elmHighscorePanel.className = \"snake-panel-component\";\n elmHighscorePanel.innerHTML =\n \"Highscore: \" + (localStorage[HIGH_SCORE_KEY] || 0);\n\n // if it's not AI, show the dialogs\n if (!config.moveSnakeWithAI) {\n elmWelcome = createWelcomeElement();\n elmTryAgain = createTryAgainElement();\n elmWin = createWinElement();\n }\n\n SNAKE.addEventListener(\n elmContainer,\n \"keyup\",\n function (evt) {\n if (!evt) evt = window.event;\n evt.cancelBubble = true;\n if (evt.stopPropagation) {\n evt.stopPropagation();\n }\n if (evt.preventDefault) {\n evt.preventDefault();\n }\n return false;\n },\n false,\n );\n\n elmContainer.className = \"snake-game-container\";\n\n elmPauseScreen.style.zIndex = 10000;\n elmContainer.appendChild(elmPauseScreen);\n elmContainer.appendChild(elmPlayingField);\n elmContainer.appendChild(elmAboutPanel);\n elmContainer.appendChild(elmLengthPanel);\n elmContainer.appendChild(elmHighscorePanel);\n\n // nothing to attach if using AI\n if (!config.moveSnakeWithAI) {\n elmContainer.appendChild(elmWelcome);\n elmContainer.appendChild(elmTryAgain);\n elmContainer.appendChild(elmWin);\n }\n\n mySnake = new SNAKE.Snake({\n playingBoard: me,\n startRow: getStartRow(),\n startCol: getStartCol(),\n premoveOnPause: config.premoveOnPause,\n moveSnakeWithAI: config.moveSnakeWithAI,\n });\n myFood = new SNAKE.Food({ playingBoard: me });\n\n if (elmWelcome) {\n elmWelcome.style.zIndex = 1000;\n }\n }\n\n function maxBoardWidth() {\n return MAX_BOARD_COLS * me.getBlockWidth();\n }\n\n function maxBoardHeight() {\n return MAX_BOARD_ROWS * me.getBlockHeight();\n }\n\n function createWelcomeElement() {\n const tmpElm = document.createElement(\"div\");\n tmpElm.id = \"sbWelcome\" + myId;\n tmpElm.className = \"snake-welcome-dialog\";\n\n const welcomeTxt = document.createElement(\"div\");\n let fullScreenText = \"\";\n if (config.fullScreen) {\n fullScreenText = \"On Windows, press F11 to play in Full Screen mode.\";\n }\n welcomeTxt.innerHTML =\n \"JavaScript Snake

Use the arrow keys on your keyboard to play the game. \" +\n fullScreenText +\n \"

\";\n const welcomeStart = document.createElement(\"button\");\n welcomeStart.appendChild(document.createTextNode(\"Play Game\"));\n\n const loadGame = function () {\n SNAKE.removeEventListener(window, \"keyup\", kbShortcut, false);\n tmpElm.style.display = \"none\";\n me.setBoardState(BOARD_READY);\n me.getBoardContainer().focus();\n };\n\n const kbShortcut = function (evt) {\n if (!evt) evt = window.event;\n const keyNum = evt.which ? evt.which : evt.keyCode;\n if (keyNum === 32 || keyNum === 13) {\n loadGame();\n }\n };\n\n SNAKE.addEventListener(window, \"keyup\", kbShortcut, false);\n SNAKE.addEventListener(welcomeStart, \"click\", loadGame, false);\n\n tmpElm.appendChild(welcomeTxt);\n tmpElm.appendChild(welcomeStart);\n return tmpElm;\n }\n\n function createGameEndElement(message, elmId, elmClassName) {\n const tmpElm = document.createElement(\"div\");\n tmpElm.id = elmId + myId;\n tmpElm.className = elmClassName;\n\n const gameEndTxt = document.createElement(\"div\");\n gameEndTxt.innerHTML = \"JavaScript Snake

\" + message + \"

\";\n const gameEndStart = document.createElement(\"button\");\n gameEndStart.appendChild(document.createTextNode(\"Play Again?\"));\n\n const reloadGame = function () {\n tmpElm.style.display = \"none\";\n me.resetBoard();\n me.setBoardState(BOARD_READY);\n me.getBoardContainer().focus();\n };\n\n const kbGameEndShortcut = function (evt) {\n if (boardState !== 0 || tmpElm.style.display !== \"block\") {\n return;\n }\n if (!evt) evt = window.event;\n const keyNum = evt.which ? evt.which : evt.keyCode;\n if (keyNum === 32 || keyNum === 13) {\n reloadGame();\n }\n };\n SNAKE.addEventListener(window, \"keyup\", kbGameEndShortcut, true);\n\n SNAKE.addEventListener(gameEndStart, \"click\", reloadGame, false);\n tmpElm.appendChild(gameEndTxt);\n tmpElm.appendChild(gameEndStart);\n return tmpElm;\n }\n\n function createTryAgainElement() {\n return createGameEndElement(\n \"You died :(\",\n \"sbTryAgain\",\n \"snake-try-again-dialog\",\n );\n }\n\n function createWinElement() {\n return createGameEndElement(\"You win! :D\", \"sbWin\", \"snake-win-dialog\");\n }\n\n function handleEndCondition(elmDialog) {\n const index = Math.max(\n getNextHighestZIndex(mySnake.snakeBody),\n getNextHighestZIndex({ tmp: { elm: myFood.getFoodElement() } }),\n );\n if (elmDialog) {\n elmContainer.removeChild(elmDialog);\n elmContainer.appendChild(elmDialog);\n elmDialog.style.zIndex = index;\n elmDialog.style.display = \"block\";\n }\n me.setBoardState(BOARD_NOT_READY);\n }\n\n // ---------------------------------------------------------------------\n // public functions\n // ---------------------------------------------------------------------\n\n me.setPaused = function (val) {\n isPaused = val;\n mySnake.setPaused(val);\n if (isPaused) {\n elmPauseScreen.style.display = \"block\";\n } else {\n elmPauseScreen.style.display = \"none\";\n }\n config.onPauseToggle(isPaused);\n };\n me.getPaused = function () {\n return isPaused;\n };\n\n /**\n * Resets the playing board for a new game.\n * @method resetBoard\n */\n me.resetBoard = function () {\n SNAKE.removeEventListener(\n elmContainer,\n \"keydown\",\n myKeyListener,\n false,\n );\n SNAKE.removeEventListener(\n elmContainer,\n \"visibilitychange\",\n myWindowListener,\n false,\n );\n mySnake.reset();\n config.onLengthUpdate(1);\n elmLengthPanel.innerHTML = \"Length: 1\";\n me.setupPlayingField();\n me.grid[getStartRow()][getStartCol()] = 1; // snake head\n };\n /**\n * Gets the current state of the playing board. There are 3 states: 0 - Welcome or Try Again dialog is present. 1 - User has pressed \"Start Game\" on the Welcome or Try Again dialog but has not pressed an arrow key to move the snake. 2 - The game is in progress and the snake is moving.\n * @method getBoardState\n * @return {Number} The state of the board.\n */\n me.getBoardState = function () {\n return boardState;\n };\n /**\n * Sets the current state of the playing board. There are 3 states: 0 - Welcome or Try Again dialog is present. 1 - User has pressed \"Start Game\" on the Welcome or Try Again dialog but has not pressed an arrow key to move the snake. 2 - The game is in progress and the snake is moving.\n * @method setBoardState\n * @param {Number} state The state of the board.\n */\n me.setBoardState = function (state) {\n boardState = state;\n };\n /**\n * @method getGridFoodValue\n * @return {Number} A number that represents food on a number representation of the playing board.\n */\n me.getGridFoodValue = function () {\n return GRID_FOOD_VALUE;\n };\n /**\n * @method getPlayingFieldElement\n * @return {DOM Element} The div representing the playing field (this is where the snake can move).\n */\n me.getPlayingFieldElement = function () {\n return elmPlayingField;\n };\n /**\n * @method setBoardContainer\n * @param {DOM Element or String} myContainer Sets the container element for the game.\n */\n me.setBoardContainer = function (myContainer) {\n if (typeof myContainer === \"string\") {\n myContainer = document.getElementById(myContainer);\n }\n if (myContainer === elmContainer) {\n return;\n }\n elmContainer = myContainer;\n elmPlayingField = null;\n me.setupPlayingField();\n me.grid[getStartRow()][getStartCol()] = 1; // snake head\n };\n /**\n * @method getBoardContainer\n * @return {DOM Element}\n */\n me.getBoardContainer = function () {\n return elmContainer;\n };\n /**\n * @method getBlockWidth\n * @return {Number}\n */\n me.getBlockWidth = function () {\n return blockWidth;\n };\n /**\n * @method getBlockHeight\n * @return {Number}\n */\n me.getBlockHeight = function () {\n return blockHeight;\n };\n /**\n * Sets up the playing field.\n * @method setupPlayingField\n */\n me.setupPlayingField = function () {\n if (!elmPlayingField) {\n createBoardElements();\n } // create playing field\n\n // calculate width of our game container\n let cWidth, cHeight;\n let cTop, cLeft;\n if (config.fullScreen === true) {\n cTop = 0;\n cLeft = 0;\n cWidth = getClientWidth() - 20;\n cHeight = getClientHeight() - 20;\n } else {\n cTop = config.top;\n cLeft = config.left;\n cWidth = config.width;\n cHeight = config.height;\n }\n\n // define the dimensions of the board and playing field\n const wEdgeSpace =\n me.getBlockWidth() * 2 + (cWidth % me.getBlockWidth());\n const fWidth = Math.min(\n maxBoardWidth() - wEdgeSpace,\n cWidth - wEdgeSpace,\n );\n const hEdgeSpace =\n me.getBlockHeight() * 3 + (cHeight % me.getBlockHeight());\n const fHeight = Math.min(\n maxBoardHeight() - hEdgeSpace,\n cHeight - hEdgeSpace,\n );\n\n elmContainer.style.left = cLeft + \"px\";\n elmContainer.style.top = cTop + \"px\";\n elmContainer.style.width = cWidth + \"px\";\n elmContainer.style.height = cHeight + \"px\";\n elmPlayingField.style.left = me.getBlockWidth() + \"px\";\n elmPlayingField.style.top = me.getBlockHeight() + \"px\";\n elmPlayingField.style.width = fWidth + \"px\";\n elmPlayingField.style.height = fHeight + \"px\";\n\n // the math for this will need to change depending on font size, padding, etc\n // assuming height of 14 (font size) + 8 (padding)\n const bottomPanelHeight = hEdgeSpace - me.getBlockHeight();\n const pLabelTop =\n me.getBlockHeight() +\n fHeight +\n Math.round((bottomPanelHeight - 30) / 2) +\n \"px\";\n\n elmAboutPanel.style.top = pLabelTop;\n elmAboutPanel.style.width = \"450px\";\n elmAboutPanel.style.left =\n Math.round(cWidth / 2) - Math.round(450 / 2) + \"px\";\n\n elmLengthPanel.style.top = pLabelTop;\n elmLengthPanel.style.left = 30 + \"px\";\n\n elmHighscorePanel.style.top = pLabelTop;\n elmHighscorePanel.style.left = cWidth - 140 + \"px\";\n\n // if width is too narrow, hide the about panel\n if (cWidth < 700) {\n elmAboutPanel.style.display = \"none\";\n } else {\n elmAboutPanel.style.display = \"block\";\n }\n\n me.grid = [];\n const numBoardCols = fWidth / me.getBlockWidth() + 2;\n const numBoardRows = fHeight / me.getBlockHeight() + 2;\n\n for (let row = 0; row < numBoardRows; row++) {\n me.grid[row] = [];\n for (let col = 0; col < numBoardCols; col++) {\n if (\n col === 0 ||\n row === 0 ||\n col === numBoardCols - 1 ||\n row === numBoardRows - 1\n ) {\n me.grid[row][col] = 1; // an edge\n } else {\n me.grid[row][col] = 0; // empty space\n }\n }\n }\n\n myFood.randomlyPlaceFood();\n config.onLengthUpdate(1);\n\n myKeyListener = function (evt) {\n if (!evt) evt = window.event;\n const keyNum = evt.which ? evt.which : evt.keyCode;\n\n if (me.getBoardState() === BOARD_READY) {\n if (\n !(keyNum >= 37 && keyNum <= 40) &&\n !(\n keyNum === 87 ||\n keyNum === 65 ||\n keyNum === 83 ||\n keyNum === 68\n )\n ) {\n return;\n } // if not an arrow key, leave\n\n // This removes the listener added at the #listenerX line\n SNAKE.removeEventListener(\n elmContainer,\n \"keydown\",\n myKeyListener,\n false,\n );\n SNAKE.removeEventListener(\n elmContainer,\n \"visibilitychange\",\n myWindowListener,\n false,\n );\n\n myKeyListener = function (evt) {\n if (!evt) evt = window.event;\n const keyNum = evt.which ? evt.which : evt.keyCode;\n\n if (keyNum === 32) {\n if (me.getBoardState() != BOARD_NOT_READY)\n me.setPaused(!me.getPaused());\n }\n\n mySnake.handleArrowKeys(keyNum);\n\n evt.cancelBubble = true;\n if (evt.stopPropagation) {\n evt.stopPropagation();\n }\n if (evt.preventDefault) {\n evt.preventDefault();\n }\n return false;\n };\n\n //listener for pausing the game if user change tab or minimize the browser window\n document.addEventListener(\"visibilitychange\", () => {\n if (document.visibilityState === \"hidden\") {\n if (me.getBoardState() != BOARD_NOT_READY && !me.getPaused())\n me.setPaused(true);\n }\n });\n\n SNAKE.addEventListener(\n elmContainer,\n \"keydown\",\n myKeyListener,\n false,\n );\n SNAKE.addEventListener(\n elmContainer,\n \"visibilitychange\",\n myWindowListener,\n false,\n );\n\n mySnake.rebirth();\n mySnake.handleArrowKeys(keyNum);\n me.setBoardState(BOARD_IN_PLAY); // start the game!\n mySnake.go();\n }\n\n evt.cancelBubble = true;\n if (evt.stopPropagation) {\n evt.stopPropagation();\n }\n if (evt.preventDefault) {\n evt.preventDefault();\n }\n return false;\n };\n\n // Search for #listenerX to see where this is removed\n if (!config.moveSnakeWithAI) {\n SNAKE.addEventListener(elmContainer, \"keydown\", myKeyListener, false);\n SNAKE.addEventListener(\n elmContainer,\n \"visibilitychange\",\n myWindowListener,\n false,\n );\n }\n };\n\n /**\n * This method is called when the snake has eaten some food.\n * @method foodEaten\n * @return {bool} Whether a new food was able to spawn (true)\n * or not (false) after the snake eats food.\n */\n me.foodEaten = function () {\n config.onLengthUpdate(mySnake.snakeLength);\n elmLengthPanel.innerHTML = \"Length: \" + mySnake.snakeLength;\n if (mySnake.snakeLength > localStorage[HIGH_SCORE_KEY]) {\n localStorage.setItem(HIGH_SCORE_KEY, mySnake.snakeLength);\n elmHighscorePanel.innerHTML =\n \"Highscore: \" + localStorage[HIGH_SCORE_KEY];\n }\n if (!myFood.randomlyPlaceFood()) {\n return false;\n }\n return true;\n };\n\n /**\n * This method is called when the snake dies.\n * @method handleDeath\n */\n me.handleDeath = function () {\n handleEndCondition(elmTryAgain);\n config.onDeath({ startAIGame: me.startAIGame });\n };\n\n /**\n * This method is called when the snake wins.\n * @method handleWin\n */\n me.handleWin = function () {\n handleEndCondition(elmWin);\n config.onWin({ startAIGame: me.startAIGame });\n };\n\n me.setSpeed = (speed) => {\n mySnake.setSpeed(speed);\n };\n me.getSpeed = () => {\n return mySnake.getSpeed();\n };\n\n me.startAIGame = () => {\n me.resetBoard();\n mySnake.rebirth();\n me.setBoardState(BOARD_IN_PLAY); // start the game!\n mySnake.go();\n };\n\n // ---------------------------------------------------------------------\n // Initialize\n // ---------------------------------------------------------------------\n\n config.fullScreen =\n typeof config.fullScreen === \"undefined\" ? false : config.fullScreen;\n config.top = typeof config.top === \"undefined\" ? 0 : config.top;\n config.left = typeof config.left === \"undefined\" ? 0 : config.left;\n config.width = typeof config.width === \"undefined\" ? 400 : config.width;\n config.height =\n typeof config.height === \"undefined\" ? 400 : config.height;\n config.premoveOnPause =\n typeof config.premoveOnPause === \"undefined\"\n ? false\n : config.premoveOnPause;\n\n if (config.fullScreen) {\n SNAKE.addEventListener(\n window,\n \"resize\",\n function () {\n me.setupPlayingField();\n },\n false,\n );\n }\n\n me.setBoardState(BOARD_NOT_READY);\n\n if (config.boardContainer) {\n me.setBoardContainer(config.boardContainer);\n }\n\n const reloadGame = function () {\n me.resetBoard();\n me.setBoardState(BOARD_READY);\n me.getBoardContainer().focus();\n };\n\n if (config.onInit) {\n config.onInit({\n reloadGame,\n getSpeed: me.getSpeed,\n setSpeed: me.setSpeed,\n startAIGame: me.startAIGame,\n });\n }\n }; // end return function\n })();\n"],"names":["window","SNAKE","HIGH_SCORE_KEY","addEventListener","obj","event","funct","evtCapturing","attachEvent","removeEventListener","detachEvent","Snake","blockPool","SnakeBlock","elm","elmStyle","row","col","next","prev","config","prevNode","playingBoard","undefined","localStorage","setItem","me","columnShift","rowShift","lastMove","preMove","isFirstGameMove","currentDirection","snakeSpeed","isDead","isPaused","modeDropdown","document","getElementById","getTopPosition","block","num","getBlockHeight","getLeftPosition","getBlockWidth","createSnakeElement","tempNode","createElement","className","style","left","top","width","height","createBlocks","tempBlock","ii","cloneNode","getBoardContainer","appendChild","length","handleEndCondition","handleFunc","recordScore","highScore","snakeLength","alert","snakeHead","zIndex","getNextHighestZIndex","myObj","highestIndex","currentIndex","currentStyle","parseFloat","getComputedStyle","defaultView","getPropertyValue","isNaN","snakeBody","replace","evt","val","target","parseInt","value","setTimeout","focus","startRow","startCol","snakeTail","id","setPaused","getPaused","setDirection","direction","Math","abs","handleArrowKeys","keyNum","premoveOnPause","directionFound","go","oldHead","newHead","grid","moveSnakeWithAI","handleDeath","getGridFoodValue","eatFood","handleWin","growthIncr","blocks","splice","index","foodEaten","selectDropDown","selectedOption","options","selectedIndex","text","localeCompare","MIN_SNAKE_SPEED","rebirth","reset","nextNode","curNode","push","concat","getSpeed","setSpeed","speed","Food","instanceNumber","getRandomPosition","x","y","floor","random","fRow","fColumn","myId","elmFood","setAttribute","getFoodElement","randomlyPlaceFood","numTries","maxRows","maxCols","Board","inputConfig","elmContainer","elmPlayingField","elmAboutPanel","elmLengthPanel","elmHighscorePanel","elmWelcome","elmTryAgain","elmWin","elmPauseScreen","onLengthUpdate","onPauseToggle","onWin","onDeath","myFood","mySnake","boardState","myKeyListener","myWindowListener","getStartRow","getStartCol","createGameEndElement","message","elmId","elmClassName","tmpElm","gameEndTxt","innerHTML","gameEndStart","createTextNode","reloadGame","display","resetBoard","setBoardState","which","keyCode","elmDialog","max","tmp","removeChild","setupPlayingField","getBoardState","state","getPlayingFieldElement","setBoardContainer","myContainer","cWidth","cHeight","cTop","cLeft","createWelcomeElement","welcomeTxt","fullScreenText","fullScreen","welcomeStart","loadGame","kbShortcut","cancelBubble","stopPropagation","preventDefault","myWidth","myHeight","innerWidth","documentElement","clientWidth","clientHeight","body","innerHeight","wEdgeSpace","fWidth","min","maxBoardWidth","hEdgeSpace","fHeight","maxBoardHeight","bottomPanelHeight","pLabelTop","round","numBoardCols","numBoardRows","visibilityState","startAIGame","boardContainer","onInit"],"version":3,"file":"index.a5373759.js.map"} \ No newline at end of file diff --git a/dist/index.html b/dist/index.html new file mode 100644 index 00000000..15e5a55d --- /dev/null +++ b/dist/index.html @@ -0,0 +1 @@ +JavaScript Snake
Theme:
Mode:

\ No newline at end of file diff --git a/dist/snakeblock.e91ee11a.png b/dist/snakeblock.e91ee11a.png new file mode 100644 index 00000000..69ca4cd4 Binary files /dev/null and b/dist/snakeblock.e91ee11a.png differ diff --git a/node_modules/.bin/browserslist b/node_modules/.bin/browserslist new file mode 120000 index 00000000..3cd991b2 --- /dev/null +++ b/node_modules/.bin/browserslist @@ -0,0 +1 @@ +../browserslist/cli.js \ No newline at end of file diff --git a/node_modules/.bin/detect-libc b/node_modules/.bin/detect-libc new file mode 120000 index 00000000..b4c4b767 --- /dev/null +++ b/node_modules/.bin/detect-libc @@ -0,0 +1 @@ +../detect-libc/bin/detect-libc.js \ No newline at end of file diff --git a/node_modules/.bin/download-lmdb-prebuilds b/node_modules/.bin/download-lmdb-prebuilds new file mode 120000 index 00000000..12b417f5 --- /dev/null +++ b/node_modules/.bin/download-lmdb-prebuilds @@ -0,0 +1 @@ +../lmdb/bin/download-prebuilds.js \ No newline at end of file diff --git a/node_modules/.bin/download-msgpackr-prebuilds b/node_modules/.bin/download-msgpackr-prebuilds new file mode 120000 index 00000000..562dd619 --- /dev/null +++ b/node_modules/.bin/download-msgpackr-prebuilds @@ -0,0 +1 @@ +../msgpackr-extract/bin/download-prebuilds.js \ No newline at end of file diff --git a/node_modules/.bin/js-yaml b/node_modules/.bin/js-yaml new file mode 120000 index 00000000..9dbd010d --- /dev/null +++ b/node_modules/.bin/js-yaml @@ -0,0 +1 @@ +../js-yaml/bin/js-yaml.js \ No newline at end of file diff --git a/node_modules/.bin/json5 b/node_modules/.bin/json5 new file mode 120000 index 00000000..217f3798 --- /dev/null +++ b/node_modules/.bin/json5 @@ -0,0 +1 @@ +../json5/lib/cli.js \ No newline at end of file diff --git a/node_modules/.bin/node-gyp-build-optional-packages b/node_modules/.bin/node-gyp-build-optional-packages new file mode 120000 index 00000000..96302064 --- /dev/null +++ b/node_modules/.bin/node-gyp-build-optional-packages @@ -0,0 +1 @@ +../node-gyp-build-optional-packages/bin.js \ No newline at end of file diff --git a/node_modules/.bin/node-gyp-build-optional-packages-optional b/node_modules/.bin/node-gyp-build-optional-packages-optional new file mode 120000 index 00000000..5915bd7f --- /dev/null +++ b/node_modules/.bin/node-gyp-build-optional-packages-optional @@ -0,0 +1 @@ +../node-gyp-build-optional-packages/optional.js \ No newline at end of file diff --git a/node_modules/.bin/node-gyp-build-optional-packages-test b/node_modules/.bin/node-gyp-build-optional-packages-test new file mode 120000 index 00000000..c0cc9797 --- /dev/null +++ b/node_modules/.bin/node-gyp-build-optional-packages-test @@ -0,0 +1 @@ +../node-gyp-build-optional-packages/build-test.js \ No newline at end of file diff --git a/node_modules/.bin/parcel b/node_modules/.bin/parcel new file mode 120000 index 00000000..5da1994f --- /dev/null +++ b/node_modules/.bin/parcel @@ -0,0 +1 @@ +../parcel/lib/bin.js \ No newline at end of file diff --git a/node_modules/.bin/semver b/node_modules/.bin/semver new file mode 120000 index 00000000..5aaadf42 --- /dev/null +++ b/node_modules/.bin/semver @@ -0,0 +1 @@ +../semver/bin/semver.js \ No newline at end of file diff --git a/node_modules/.bin/update-browserslist-db b/node_modules/.bin/update-browserslist-db new file mode 120000 index 00000000..b11e16f3 --- /dev/null +++ b/node_modules/.bin/update-browserslist-db @@ -0,0 +1 @@ +../update-browserslist-db/cli.js \ No newline at end of file diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json new file mode 100644 index 00000000..afc41eba --- /dev/null +++ b/node_modules/.package-lock.json @@ -0,0 +1,2705 @@ +{ + "name": "javascript-snake", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "node_modules/@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@lezer/common": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.2.3.tgz", + "integrity": "sha512-w7ojc8ejBqr2REPsWxJjrMFsA/ysDCFICn8zEOR9mrqzOu2amhITYuLD8ag6XZf0CFXDrhKqw7+tW8cX66NaDA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@lezer/lr": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.4.2.tgz", + "integrity": "sha512-pu0K1jCIdnQ12aWNaAVU5bzi7Bd1w54J3ECgANPmYLtQKP0HBj2cE/5coBD66MT10xbtIuUr7tg0Shbsvk0mDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.0.0" + } + }, + "node_modules/@lmdb/lmdb-linux-x64": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-2.8.5.tgz", + "integrity": "sha512-Xkc8IUx9aEhP0zvgeKy7IQ3ReX2N8N1L0WPcQwnZweWmOuKfwpS3GRIYqLtK5za/w3E60zhFfNdS+3pBZPytqQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@mischnic/json-sourcemap": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@mischnic/json-sourcemap/-/json-sourcemap-0.1.1.tgz", + "integrity": "sha512-iA7+tyVqfrATAIsIRWQG+a7ZLLD0VaOCKV2Wd/v4mqIU3J9c4jx9p7S0nw1XH3gJCKNBOOwACOPYYSUu9pgT+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.0.0", + "@lezer/lr": "^1.0.0", + "json5": "^2.2.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.3.tgz", + "integrity": "sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@parcel/bundler-default": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/bundler-default/-/bundler-default-2.13.3.tgz", + "integrity": "sha512-mOuWeth0bZzRv1b9Lrvydis/hAzJyePy0gwa0tix3/zyYBvw0JY+xkXVR4qKyD/blc1Ra2qOlfI2uD3ucnsdXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/diagnostic": "2.13.3", + "@parcel/graph": "3.3.3", + "@parcel/plugin": "2.13.3", + "@parcel/rust": "2.13.3", + "@parcel/utils": "2.13.3", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.13.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/cache": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/cache/-/cache-2.13.3.tgz", + "integrity": "sha512-Vz5+K5uCt9mcuQAMDo0JdbPYDmVdB8Nvu/A2vTEK2rqZPxvoOTczKeMBA4JqzKqGURHPRLaJCvuR8nDG+jhK9A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/fs": "2.13.3", + "@parcel/logger": "2.13.3", + "@parcel/utils": "2.13.3", + "lmdb": "2.8.5" + }, + "engines": { + "node": ">= 16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "peerDependencies": { + "@parcel/core": "^2.13.3" + } + }, + "node_modules/@parcel/codeframe": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/codeframe/-/codeframe-2.13.3.tgz", + "integrity": "sha512-L/PQf+PT0xM8k9nc0B+PxxOYO2phQYnbuifu9o4pFRiqVmCtHztP+XMIvRJ2gOEXy3pgAImSPFVJ3xGxMFky4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.2" + }, + "engines": { + "node": ">= 16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/compressor-raw": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/compressor-raw/-/compressor-raw-2.13.3.tgz", + "integrity": "sha512-C6vjDlgTLjYc358i7LA/dqcL0XDQZ1IHXFw6hBaHHOfxPKW2T4bzUI6RURyToEK9Q1X7+ggDKqgdLxwp4veCFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/plugin": "2.13.3" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.13.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/config-default": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/config-default/-/config-default-2.13.3.tgz", + "integrity": "sha512-WUsx83ic8DgLwwnL1Bua4lRgQqYjxiTT+DBxESGk1paNm1juWzyfPXEQDLXwiCTcWMQGiXQFQ8OuSISauVQ8dQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/bundler-default": "2.13.3", + "@parcel/compressor-raw": "2.13.3", + "@parcel/namer-default": "2.13.3", + "@parcel/optimizer-css": "2.13.3", + "@parcel/optimizer-htmlnano": "2.13.3", + "@parcel/optimizer-image": "2.13.3", + "@parcel/optimizer-svgo": "2.13.3", + "@parcel/optimizer-swc": "2.13.3", + "@parcel/packager-css": "2.13.3", + "@parcel/packager-html": "2.13.3", + "@parcel/packager-js": "2.13.3", + "@parcel/packager-raw": "2.13.3", + "@parcel/packager-svg": "2.13.3", + "@parcel/packager-wasm": "2.13.3", + "@parcel/reporter-dev-server": "2.13.3", + "@parcel/resolver-default": "2.13.3", + "@parcel/runtime-browser-hmr": "2.13.3", + "@parcel/runtime-js": "2.13.3", + "@parcel/runtime-react-refresh": "2.13.3", + "@parcel/runtime-service-worker": "2.13.3", + "@parcel/transformer-babel": "2.13.3", + "@parcel/transformer-css": "2.13.3", + "@parcel/transformer-html": "2.13.3", + "@parcel/transformer-image": "2.13.3", + "@parcel/transformer-js": "2.13.3", + "@parcel/transformer-json": "2.13.3", + "@parcel/transformer-postcss": "2.13.3", + "@parcel/transformer-posthtml": "2.13.3", + "@parcel/transformer-raw": "2.13.3", + "@parcel/transformer-react-refresh-wrap": "2.13.3", + "@parcel/transformer-svg": "2.13.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "peerDependencies": { + "@parcel/core": "^2.13.3" + } + }, + "node_modules/@parcel/core": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/core/-/core-2.13.3.tgz", + "integrity": "sha512-SRZFtqGiaKHlZ2YAvf+NHvBFWS3GnkBvJMfOJM7kxJRK3M1bhbwJa/GgSdzqro5UVf9Bfj6E+pkdrRQIOZ7jMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@mischnic/json-sourcemap": "^0.1.0", + "@parcel/cache": "2.13.3", + "@parcel/diagnostic": "2.13.3", + "@parcel/events": "2.13.3", + "@parcel/feature-flags": "2.13.3", + "@parcel/fs": "2.13.3", + "@parcel/graph": "3.3.3", + "@parcel/logger": "2.13.3", + "@parcel/package-manager": "2.13.3", + "@parcel/plugin": "2.13.3", + "@parcel/profiler": "2.13.3", + "@parcel/rust": "2.13.3", + "@parcel/source-map": "^2.1.1", + "@parcel/types": "2.13.3", + "@parcel/utils": "2.13.3", + "@parcel/workers": "2.13.3", + "base-x": "^3.0.8", + "browserslist": "^4.6.6", + "clone": "^2.1.1", + "dotenv": "^16.4.5", + "dotenv-expand": "^11.0.6", + "json5": "^2.2.0", + "msgpackr": "^1.9.9", + "nullthrows": "^1.1.1", + "semver": "^7.5.2" + }, + "engines": { + "node": ">= 16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/diagnostic": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/diagnostic/-/diagnostic-2.13.3.tgz", + "integrity": "sha512-C70KXLBaXLJvr7XCEVu8m6TqNdw1gQLxqg5BQ8roR62R4vWWDnOq8PEksxDi4Y8Z/FF4i3Sapv6tRx9iBNxDEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@mischnic/json-sourcemap": "^0.1.0", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/events": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/events/-/events-2.13.3.tgz", + "integrity": "sha512-ZkSHTTbD/E+53AjUzhAWTnMLnxLEU5yRw0H614CaruGh+GjgOIKyukGeToF5Gf/lvZ159VrJCGE0Z5EpgHVkuQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/feature-flags": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/feature-flags/-/feature-flags-2.13.3.tgz", + "integrity": "sha512-UZm14QpamDFoUut9YtCZSpG1HxPs07lUwUCpsAYL0PpxASD3oWJQxIJGfDZPa2272DarXDG9adTKrNXvkHZblw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/fs": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/fs/-/fs-2.13.3.tgz", + "integrity": "sha512-+MPWAt0zr+TCDSlj1LvkORTjfB/BSffsE99A9AvScKytDSYYpY2s0t4vtV9unSh0FHMS2aBCZNJ4t7KL+DcPIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/feature-flags": "2.13.3", + "@parcel/rust": "2.13.3", + "@parcel/types-internal": "2.13.3", + "@parcel/utils": "2.13.3", + "@parcel/watcher": "^2.0.7", + "@parcel/workers": "2.13.3" + }, + "engines": { + "node": ">= 16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "peerDependencies": { + "@parcel/core": "^2.13.3" + } + }, + "node_modules/@parcel/graph": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@parcel/graph/-/graph-3.3.3.tgz", + "integrity": "sha512-pxs4GauEdvCN8nRd6wG3st6LvpHske3GfqGwUSR0P0X0pBPI1/NicvXz6xzp3rgb9gPWfbKXeI/2IOTfIxxVfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/feature-flags": "2.13.3", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/logger": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/logger/-/logger-2.13.3.tgz", + "integrity": "sha512-8YF/ZhsQgd7ohQ2vEqcMD1Ag9JlJULROWRPGgGYLGD+twuxAiSdiFBpN3f+j4gQN4PYaLaIS/SwUFx11J243fQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/diagnostic": "2.13.3", + "@parcel/events": "2.13.3" + }, + "engines": { + "node": ">= 16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/markdown-ansi": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/markdown-ansi/-/markdown-ansi-2.13.3.tgz", + "integrity": "sha512-B4rUdlNUulJs2xOQuDbN7Hq5a9roq8IZUcJ1vQ8PAv+zMGb7KCfqIIr/BSCDYGhayfAGBVWW8x55Kvrl1zrDYw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.2" + }, + "engines": { + "node": ">= 16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/namer-default": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/namer-default/-/namer-default-2.13.3.tgz", + "integrity": "sha512-A2a5A5fuyNcjSGOS0hPcdQmOE2kszZnLIXof7UMGNkNkeC62KAG8WcFZH5RNOY3LT5H773hq51zmc2Y2gE5Rnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/diagnostic": "2.13.3", + "@parcel/plugin": "2.13.3", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.13.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/node-resolver-core": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/@parcel/node-resolver-core/-/node-resolver-core-3.4.3.tgz", + "integrity": "sha512-IEnMks49egEic1ITBp59VQyHzkSQUXqpU9hOHwqN3KoSTdZ6rEgrXcS3pa6tdXay4NYGlcZ88kFCE8i/xYoVCg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@mischnic/json-sourcemap": "^0.1.0", + "@parcel/diagnostic": "2.13.3", + "@parcel/fs": "2.13.3", + "@parcel/rust": "2.13.3", + "@parcel/utils": "2.13.3", + "nullthrows": "^1.1.1", + "semver": "^7.5.2" + }, + "engines": { + "node": ">= 16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/optimizer-css": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-css/-/optimizer-css-2.13.3.tgz", + "integrity": "sha512-A8o9IVCv919vhv69SkLmyW2WjJR5WZgcMqV6L1uiGF8i8z18myrMhrp2JuSHx29PRT9uNyzNC4Xrd4StYjIhJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/diagnostic": "2.13.3", + "@parcel/plugin": "2.13.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.13.3", + "browserslist": "^4.6.6", + "lightningcss": "^1.22.1", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.13.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/optimizer-htmlnano": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-htmlnano/-/optimizer-htmlnano-2.13.3.tgz", + "integrity": "sha512-K4Uvg0Sy2pECP7pdvvbud++F0pfcbNkq+IxTrgqBX5HJnLEmRZwgdvZEKF43oMEolclMnURMQRGjRplRaPdbXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/diagnostic": "2.13.3", + "@parcel/plugin": "2.13.3", + "@parcel/utils": "2.13.3", + "htmlnano": "^2.0.0", + "nullthrows": "^1.1.1", + "posthtml": "^0.16.5" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.13.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/optimizer-image": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-image/-/optimizer-image-2.13.3.tgz", + "integrity": "sha512-wlDUICA29J4UnqkKrWiyt68g1e85qfYhp4zJFcFJL0LX1qqh1QwsLUz3YJ+KlruoqPxJSFEC8ncBEKiVCsqhEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/diagnostic": "2.13.3", + "@parcel/plugin": "2.13.3", + "@parcel/rust": "2.13.3", + "@parcel/utils": "2.13.3", + "@parcel/workers": "2.13.3" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.13.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "peerDependencies": { + "@parcel/core": "^2.13.3" + } + }, + "node_modules/@parcel/optimizer-svgo": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-svgo/-/optimizer-svgo-2.13.3.tgz", + "integrity": "sha512-piIKxQKzhZK54dJR6yqIcq+urZmpsfgUpLCZT3cnWlX4ux5+S2iN66qqZBs0zVn+a58LcWcoP4Z9ieiJmpiu2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/diagnostic": "2.13.3", + "@parcel/plugin": "2.13.3", + "@parcel/utils": "2.13.3" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.13.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/optimizer-swc": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-swc/-/optimizer-swc-2.13.3.tgz", + "integrity": "sha512-zNSq6oWqLlW8ksPIDjM0VgrK6ZAJbPQCDvs1V+p0oX3CzEe85lT5VkRpnfrN1+/vvEJNGL8e60efHKpI+rXGTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/diagnostic": "2.13.3", + "@parcel/plugin": "2.13.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.13.3", + "@swc/core": "^1.7.26", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.13.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/package-manager": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/package-manager/-/package-manager-2.13.3.tgz", + "integrity": "sha512-FLNI5OrZxymGf/Yln0E/kjnGn5sdkQAxW7pQVdtuM+5VeN75yibJRjsSGv88PvJ+KvpD2ANgiIJo1RufmoPcww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/diagnostic": "2.13.3", + "@parcel/fs": "2.13.3", + "@parcel/logger": "2.13.3", + "@parcel/node-resolver-core": "3.4.3", + "@parcel/types": "2.13.3", + "@parcel/utils": "2.13.3", + "@parcel/workers": "2.13.3", + "@swc/core": "^1.7.26", + "semver": "^7.5.2" + }, + "engines": { + "node": ">= 16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "peerDependencies": { + "@parcel/core": "^2.13.3" + } + }, + "node_modules/@parcel/packager-css": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/packager-css/-/packager-css-2.13.3.tgz", + "integrity": "sha512-ghDqRMtrUwaDERzFm9le0uz2PTeqqsjsW0ihQSZPSAptElRl9o5BR+XtMPv3r7Ui0evo+w35gD55oQCJ28vCig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/diagnostic": "2.13.3", + "@parcel/plugin": "2.13.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.13.3", + "lightningcss": "^1.22.1", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.13.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/packager-html": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/packager-html/-/packager-html-2.13.3.tgz", + "integrity": "sha512-jDLnKSA/EzVEZ3/aegXO3QJ/Ij732AgBBkIQfeC8tUoxwVz5b3HiPBAjVjcUSfZs7mdBSHO+ELWC3UD+HbsIrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/plugin": "2.13.3", + "@parcel/types": "2.13.3", + "@parcel/utils": "2.13.3", + "nullthrows": "^1.1.1", + "posthtml": "^0.16.5" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.13.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/packager-js": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/packager-js/-/packager-js-2.13.3.tgz", + "integrity": "sha512-0pMHHf2zOn7EOJe88QJw5h/wcV1bFfj6cXVcE55Wa8GX3V+SdCgolnlvNuBcRQ1Tlx0Xkpo+9hMFVIQbNQY6zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/diagnostic": "2.13.3", + "@parcel/plugin": "2.13.3", + "@parcel/rust": "2.13.3", + "@parcel/source-map": "^2.1.1", + "@parcel/types": "2.13.3", + "@parcel/utils": "2.13.3", + "globals": "^13.2.0", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.13.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/packager-raw": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/packager-raw/-/packager-raw-2.13.3.tgz", + "integrity": "sha512-AWu4UB+akBdskzvT3KGVHIdacU9f7cI678DQQ1jKQuc9yZz5D0VFt3ocFBOmvDfEQDF0uH3jjtJR7fnuvX7Biw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/plugin": "2.13.3" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.13.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/packager-svg": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/packager-svg/-/packager-svg-2.13.3.tgz", + "integrity": "sha512-tKGRiFq/4jh5u2xpTstNQ7gu+RuZWzlWqpw5NaFmcKe6VQe5CMcS499xTFoREAGnRvevSeIgC38X1a+VOo+/AA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/plugin": "2.13.3", + "@parcel/types": "2.13.3", + "@parcel/utils": "2.13.3", + "posthtml": "^0.16.4" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.13.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/packager-wasm": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/packager-wasm/-/packager-wasm-2.13.3.tgz", + "integrity": "sha512-SZB56/b230vFrSehVXaUAWjJmWYc89gzb8OTLkBm7uvtFtov2J1R8Ig9TTJwinyXE3h84MCFP/YpQElSfoLkJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/plugin": "2.13.3" + }, + "engines": { + "node": ">=16.0.0", + "parcel": "^2.13.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/plugin": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/plugin/-/plugin-2.13.3.tgz", + "integrity": "sha512-cterKHHcwg6q11Gpif/aqvHo056TR+yDVJ3fSdiG2xr5KD1VZ2B3hmofWERNNwjMcnR1h9Xq40B7jCKUhOyNFA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/types": "2.13.3" + }, + "engines": { + "node": ">= 16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/profiler": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/profiler/-/profiler-2.13.3.tgz", + "integrity": "sha512-ok6BwWSLvyHe5TuSXjSacYnDStFgP5Y30tA9mbtWSm0INDsYf+m5DqzpYPx8U54OaywWMK8w3MXUClosJX3aPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/diagnostic": "2.13.3", + "@parcel/events": "2.13.3", + "@parcel/types-internal": "2.13.3", + "chrome-trace-event": "^1.0.2" + }, + "engines": { + "node": ">= 16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/reporter-cli": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/reporter-cli/-/reporter-cli-2.13.3.tgz", + "integrity": "sha512-EA5tKt/6bXYNMEavSs35qHlFdx6cZmRazlZxPBgxPePQYoouNAPMNLUOEQozaPhz9f5fvNDN7EHOFaAWcdO2LA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/plugin": "2.13.3", + "@parcel/types": "2.13.3", + "@parcel/utils": "2.13.3", + "chalk": "^4.1.2", + "term-size": "^2.2.1" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.13.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/reporter-dev-server": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/reporter-dev-server/-/reporter-dev-server-2.13.3.tgz", + "integrity": "sha512-ZNeFp6AOIQFv7mZIv2P5O188dnZHNg0ymeDVcakfZomwhpSva2dFNS3AnvWo4eyWBlUxkmQO8BtaxeWTs7jAuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/plugin": "2.13.3", + "@parcel/utils": "2.13.3" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.13.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/reporter-tracer": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/reporter-tracer/-/reporter-tracer-2.13.3.tgz", + "integrity": "sha512-aBsVPI8jLZTDkFYrI69GxnsdvZKEYerkPsu935LcX9rfUYssOnmmUP+3oI+8fbg+qNjJuk9BgoQ4hCp9FOphMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/plugin": "2.13.3", + "@parcel/utils": "2.13.3", + "chrome-trace-event": "^1.0.3", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.13.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/resolver-default": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/resolver-default/-/resolver-default-2.13.3.tgz", + "integrity": "sha512-urBZuRALWT9pFMeWQ8JirchLmsQEyI9lrJptiwLbJWrwvmlwSUGkcstmPwoNRf/aAQjICB7ser/247Vny0pFxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/node-resolver-core": "3.4.3", + "@parcel/plugin": "2.13.3" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.13.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/runtime-browser-hmr": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/runtime-browser-hmr/-/runtime-browser-hmr-2.13.3.tgz", + "integrity": "sha512-EAcPojQFUNUGUrDk66cu3ySPO0NXRVS5CKPd4QrxPCVVbGzde4koKu8krC/TaGsoyUqhie8HMnS70qBP0GFfcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/plugin": "2.13.3", + "@parcel/utils": "2.13.3" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.13.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/runtime-js": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/runtime-js/-/runtime-js-2.13.3.tgz", + "integrity": "sha512-62OucNAnxb2Q0uyTFWW/0Hvv2DJ4b5H6neh/YFu2/wmxaZ37xTpEuEcG2do7KW54xE5DeLP+RliHLwi4NvR3ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/diagnostic": "2.13.3", + "@parcel/plugin": "2.13.3", + "@parcel/utils": "2.13.3", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.13.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/runtime-react-refresh": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/runtime-react-refresh/-/runtime-react-refresh-2.13.3.tgz", + "integrity": "sha512-PYZ1klpJVwqE3WuifILjtF1dugtesHEuJcXYZI85T6UoRSD5ctS1nAIpZzT14Ga1lRt/jd+eAmhWL1l3m/Vk1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/plugin": "2.13.3", + "@parcel/utils": "2.13.3", + "react-error-overlay": "6.0.9", + "react-refresh": ">=0.9 <=0.14" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.13.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/runtime-service-worker": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/runtime-service-worker/-/runtime-service-worker-2.13.3.tgz", + "integrity": "sha512-BjMhPuT7Us1+YIo31exPRwomPiL+jrZZS5UUAwlEW2XGHDceEotzRM94LwxeFliCScT4IOokGoxixm19qRuzWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/plugin": "2.13.3", + "@parcel/utils": "2.13.3", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.13.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/rust": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/rust/-/rust-2.13.3.tgz", + "integrity": "sha512-dLq85xDAtzr3P5200cvxk+8WXSWauYbxuev9LCPdwfhlaWo/JEj6cu9seVdWlkagjGwkoV1kXC+GGntgUXOLAQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/source-map": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@parcel/source-map/-/source-map-2.1.1.tgz", + "integrity": "sha512-Ejx1P/mj+kMjQb8/y5XxDUn4reGdr+WyKYloBljpppUy8gs42T+BNoEOuRYqDVdgPc6NxduzIDoJS9pOFfV5Ew==", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-libc": "^1.0.3" + }, + "engines": { + "node": "^12.18.3 || >=14" + } + }, + "node_modules/@parcel/transformer-babel": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-babel/-/transformer-babel-2.13.3.tgz", + "integrity": "sha512-ikzK9f5WTFrdQsPitQgjCPH6HmVU8AQPRemIJ2BndYhtodn5PQut5cnSvTrqax8RjYvheEKCQk/Zb/uR7qgS3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/diagnostic": "2.13.3", + "@parcel/plugin": "2.13.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.13.3", + "browserslist": "^4.6.6", + "json5": "^2.2.0", + "nullthrows": "^1.1.1", + "semver": "^7.5.2" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.13.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/transformer-css": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-css/-/transformer-css-2.13.3.tgz", + "integrity": "sha512-zbrNURGph6JeVADbGydyZ7lcu/izj41kDxQ9xw4RPRW/3rofQiTU0OTREi+uBWiMENQySXVivEdzHA9cA+aLAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/diagnostic": "2.13.3", + "@parcel/plugin": "2.13.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.13.3", + "browserslist": "^4.6.6", + "lightningcss": "^1.22.1", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.13.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/transformer-html": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-html/-/transformer-html-2.13.3.tgz", + "integrity": "sha512-Yf74FkL9RCCB4+hxQRVMNQThH9+fZ5w0NLiQPpWUOcgDEEyxTi4FWPQgEBsKl/XK2ehdydbQB9fBgPQLuQxwPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/diagnostic": "2.13.3", + "@parcel/plugin": "2.13.3", + "@parcel/rust": "2.13.3", + "nullthrows": "^1.1.1", + "posthtml": "^0.16.5", + "posthtml-parser": "^0.12.1", + "posthtml-render": "^3.0.0", + "semver": "^7.5.2", + "srcset": "4" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.13.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/transformer-html/node_modules/srcset": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/srcset/-/srcset-4.0.0.tgz", + "integrity": "sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@parcel/transformer-image": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-image/-/transformer-image-2.13.3.tgz", + "integrity": "sha512-wL1CXyeFAqbp2wcEq/JD3a/tbAyVIDMTC6laQxlIwnVV7dsENhK1qRuJZuoBdixESeUpFQSmmQvDIhcfT/cUUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/plugin": "2.13.3", + "@parcel/utils": "2.13.3", + "@parcel/workers": "2.13.3", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.13.3" + }, + "peerDependencies": { + "@parcel/core": "^2.13.3" + } + }, + "node_modules/@parcel/transformer-js": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-js/-/transformer-js-2.13.3.tgz", + "integrity": "sha512-KqfNGn1IHzDoN2aPqt4nDksgb50Xzcny777C7A7hjlQ3cmkjyJrixYjzzsPaPSGJ+kJpknh3KE8unkQ9mhFvRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/diagnostic": "2.13.3", + "@parcel/plugin": "2.13.3", + "@parcel/rust": "2.13.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.13.3", + "@parcel/workers": "2.13.3", + "@swc/helpers": "^0.5.0", + "browserslist": "^4.6.6", + "nullthrows": "^1.1.1", + "regenerator-runtime": "^0.14.1", + "semver": "^7.5.2" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.13.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "peerDependencies": { + "@parcel/core": "^2.13.3" + } + }, + "node_modules/@parcel/transformer-json": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-json/-/transformer-json-2.13.3.tgz", + "integrity": "sha512-rrq0ab6J0w9ePtsxi0kAvpCmrUYXXAx1Z5PATZakv89rSYbHBKEdXxyCoKFui/UPVCUEGVs5r0iOFepdHpIyeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/plugin": "2.13.3", + "json5": "^2.2.0" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.13.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/transformer-postcss": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-postcss/-/transformer-postcss-2.13.3.tgz", + "integrity": "sha512-AIiWpU0QSFBrPcYIqAnhqB8RGE6yHFznnxztfg1t2zMSOnK3xoU6xqYKv8H/MduShGGrC3qVOeDfM8MUwzL3cw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/diagnostic": "2.13.3", + "@parcel/plugin": "2.13.3", + "@parcel/rust": "2.13.3", + "@parcel/utils": "2.13.3", + "clone": "^2.1.1", + "nullthrows": "^1.1.1", + "postcss-value-parser": "^4.2.0", + "semver": "^7.5.2" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.13.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/transformer-posthtml": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-posthtml/-/transformer-posthtml-2.13.3.tgz", + "integrity": "sha512-5GSLyccpHASwFAu3uJ83gDIBSvfsGdVmhJvy0Vxe+K1Fklk2ibhvvtUHMhB7mg6SPHC+R9jsNc3ZqY04ZLeGjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/plugin": "2.13.3", + "@parcel/utils": "2.13.3", + "nullthrows": "^1.1.1", + "posthtml": "^0.16.5", + "posthtml-parser": "^0.12.1", + "posthtml-render": "^3.0.0", + "semver": "^7.5.2" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.13.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/transformer-raw": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-raw/-/transformer-raw-2.13.3.tgz", + "integrity": "sha512-BFsAbdQF0l8/Pdb7dSLJeYcd8jgwvAUbHgMink2MNXJuRUvDl19Gns8jVokU+uraFHulJMBj40+K/RTd33in4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/plugin": "2.13.3" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.13.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/transformer-react-refresh-wrap": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-react-refresh-wrap/-/transformer-react-refresh-wrap-2.13.3.tgz", + "integrity": "sha512-mOof4cRyxsZRdg8kkWaFtaX98mHpxUhcGPU+nF9RQVa9q737ItxrorsPNR9hpZAyE2TtFNflNW7RoYsgvlLw8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/plugin": "2.13.3", + "@parcel/utils": "2.13.3", + "react-refresh": ">=0.9 <=0.14" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.13.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/transformer-svg": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-svg/-/transformer-svg-2.13.3.tgz", + "integrity": "sha512-9jm7ZF4KHIrGLWlw/SFUz5KKJ20nxHvjFAmzde34R9Wu+F1BOjLZxae7w4ZRwvIc+UVOUcBBQFmhSVwVDZg6Dw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/diagnostic": "2.13.3", + "@parcel/plugin": "2.13.3", + "@parcel/rust": "2.13.3", + "nullthrows": "^1.1.1", + "posthtml": "^0.16.5", + "posthtml-parser": "^0.12.1", + "posthtml-render": "^3.0.0", + "semver": "^7.5.2" + }, + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.13.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/types": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/types/-/types-2.13.3.tgz", + "integrity": "sha512-+RpFHxx8fy8/dpuehHUw/ja9PRExC3wJoIlIIF42E7SLu2SvlTHtKm6EfICZzxCXNEBzjoDbamCRcN0nmTPlhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/types-internal": "2.13.3", + "@parcel/workers": "2.13.3" + } + }, + "node_modules/@parcel/types-internal": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/types-internal/-/types-internal-2.13.3.tgz", + "integrity": "sha512-Lhx0n+9RCp+Ipktf/I+CLm3zE9Iq9NtDd8b2Vr5lVWyoT8AbzBKIHIpTbhLS4kjZ80L3I6o93OYjqAaIjsqoZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/diagnostic": "2.13.3", + "@parcel/feature-flags": "2.13.3", + "@parcel/source-map": "^2.1.1", + "utility-types": "^3.10.0" + } + }, + "node_modules/@parcel/utils": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/utils/-/utils-2.13.3.tgz", + "integrity": "sha512-yxY9xw2wOUlJaScOXYZmMGoZ4Ck4Kqj+p6Koe5kLkkWM1j98Q0Dj2tf/mNvZi4yrdnlm+dclCwNRnuE8Q9D+pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/codeframe": "2.13.3", + "@parcel/diagnostic": "2.13.3", + "@parcel/logger": "2.13.3", + "@parcel/markdown-ansi": "2.13.3", + "@parcel/rust": "2.13.3", + "@parcel/source-map": "^2.1.1", + "chalk": "^4.1.2", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", + "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.1", + "@parcel/watcher-darwin-arm64": "2.5.1", + "@parcel/watcher-darwin-x64": "2.5.1", + "@parcel/watcher-freebsd-x64": "2.5.1", + "@parcel/watcher-linux-arm-glibc": "2.5.1", + "@parcel/watcher-linux-arm-musl": "2.5.1", + "@parcel/watcher-linux-arm64-glibc": "2.5.1", + "@parcel/watcher-linux-arm64-musl": "2.5.1", + "@parcel/watcher-linux-x64-glibc": "2.5.1", + "@parcel/watcher-linux-x64-musl": "2.5.1", + "@parcel/watcher-win32-arm64": "2.5.1", + "@parcel/watcher-win32-ia32": "2.5.1", + "@parcel/watcher-win32-x64": "2.5.1" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", + "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", + "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/workers": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@parcel/workers/-/workers-2.13.3.tgz", + "integrity": "sha512-oAHmdniWTRwwwsKbcF4t3VjOtKN+/W17Wj5laiYB+HLkfsjGTfIQPj3sdXmrlBAGpI4omIcvR70PHHXnfdTfwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/diagnostic": "2.13.3", + "@parcel/logger": "2.13.3", + "@parcel/profiler": "2.13.3", + "@parcel/types-internal": "2.13.3", + "@parcel/utils": "2.13.3", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "peerDependencies": { + "@parcel/core": "^2.13.3" + } + }, + "node_modules/@swc/core": { + "version": "1.10.12", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.10.12.tgz", + "integrity": "sha512-+iUL0PYpPm6N9AdV1wvafakvCqFegQus1aoEDxgFsv3/uNVNIyRaupf/v/Zkp5hbep2EzhtoJR0aiJIzDbXWHg==", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@swc/counter": "^0.1.3", + "@swc/types": "^0.1.17" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/swc" + }, + "optionalDependencies": { + "@swc/core-darwin-arm64": "1.10.12", + "@swc/core-darwin-x64": "1.10.12", + "@swc/core-linux-arm-gnueabihf": "1.10.12", + "@swc/core-linux-arm64-gnu": "1.10.12", + "@swc/core-linux-arm64-musl": "1.10.12", + "@swc/core-linux-x64-gnu": "1.10.12", + "@swc/core-linux-x64-musl": "1.10.12", + "@swc/core-win32-arm64-msvc": "1.10.12", + "@swc/core-win32-ia32-msvc": "1.10.12", + "@swc/core-win32-x64-msvc": "1.10.12" + }, + "peerDependencies": { + "@swc/helpers": "*" + }, + "peerDependenciesMeta": { + "@swc/helpers": { + "optional": true + } + } + }, + "node_modules/@swc/core-linux-x64-gnu": { + "version": "1.10.12", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.10.12.tgz", + "integrity": "sha512-XldSIHyjD7m1Gh+/8rxV3Ok711ENLI420CU2EGEqSe3VSGZ7pHJvJn9ZFbYpWhsLxPqBYMFjp3Qw+J6OXCPXCA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-musl": { + "version": "1.10.12", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.10.12.tgz", + "integrity": "sha512-wvPXzJxzPgTqhyp1UskOx1hRTtdWxlyFD1cGWOxgLsMik0V9xKRgqKnMPv16Nk7L9xl6quQ6DuUHj9ID7L3oVw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/counter": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@swc/helpers": { + "version": "0.5.15", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", + "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.8.0" + } + }, + "node_modules/@swc/types": { + "version": "0.1.17", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.17.tgz", + "integrity": "sha512-V5gRru+aD8YVyCOMAjMpWR1Ui577DD5KSJsHP8RAxopAH22jFz6GZd/qxqjO6MJHQhcsjvjOFXyDhyLQUnMveQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@swc/counter": "^0.1.3" + } + }, + "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, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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, + "license": "Python-2.0" + }, + "node_modules/base-x": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.10.tgz", + "integrity": "sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.24.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", + "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.1" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "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, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001696", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001696.tgz", + "integrity": "sha512-pDCPkvzfa39ehJtJ+OwGT/2yvT2SbjfHhiIW2LWOAcMQ7BzwxT/XuyUp4OTOd0XFWA6BKw0JalnBHgSi5DGJBQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "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, + "license": "MIT", + "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/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "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, + "license": "MIT", + "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, + "license": "MIT" + }, + "node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/cosmiconfig": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dotenv": { + "version": "16.4.7", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", + "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dotenv-expand": { + "version": "11.0.7", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz", + "integrity": "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dotenv": "^16.4.5" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.90", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.90.tgz", + "integrity": "sha512-C3PN4aydfW91Natdyd449Kw+BzhLmof6tzy5W1pFC5SpQxVXT+oyiyOG9AgYYSN9OdA/ik3YkCrpwqI8ug5Tug==", + "dev": true, + "license": "ISC" + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "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, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/get-port": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-4.2.0.tgz", + "integrity": "sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/htmlnano": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/htmlnano/-/htmlnano-2.1.1.tgz", + "integrity": "sha512-kAERyg/LuNZYmdqgCdYvugyLWNFAm8MWXpQMz1pLpetmCbFwoMxvkSoaAMlFrOC4OKTWI4KlZGT/RsNxg4ghOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cosmiconfig": "^9.0.0", + "posthtml": "^0.16.5", + "timsort": "^0.3.0" + }, + "peerDependencies": { + "cssnano": "^7.0.0", + "postcss": "^8.3.11", + "purgecss": "^6.0.0", + "relateurl": "^0.2.7", + "srcset": "5.0.1", + "svgo": "^3.0.2", + "terser": "^5.10.0", + "uncss": "^0.17.3" + }, + "peerDependenciesMeta": { + "cssnano": { + "optional": true + }, + "postcss": { + "optional": true + }, + "purgecss": { + "optional": true + }, + "relateurl": { + "optional": true + }, + "srcset": { + "optional": true + }, + "svgo": { + "optional": true + }, + "terser": { + "optional": true + }, + "uncss": { + "optional": true + } + } + }, + "node_modules/htmlparser2": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-9.1.0.tgz", + "integrity": "sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.1.0", + "entities": "^4.5.0" + } + }, + "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, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "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, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-json": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-json/-/is-json-2.0.1.tgz", + "integrity": "sha512-6BEnpVn1rcf3ngfmViLM6vjUjGErbdrL4rwlv+u1NO1XO8kqT4YGL8+19Q+Z/bas8tY90BTWMk2+fW1g6hQjbA==", + "dev": true, + "license": "ISC" + }, + "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, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "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, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/lightningcss": { + "version": "1.29.1", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.29.1.tgz", + "integrity": "sha512-FmGoeD4S05ewj+AkhTY+D+myDvXI6eL27FjHIjoyUkO/uw7WZD1fBVs0QxeYWa7E17CUHJaYX/RUGISCtcrG4Q==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^1.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-darwin-arm64": "1.29.1", + "lightningcss-darwin-x64": "1.29.1", + "lightningcss-freebsd-x64": "1.29.1", + "lightningcss-linux-arm-gnueabihf": "1.29.1", + "lightningcss-linux-arm64-gnu": "1.29.1", + "lightningcss-linux-arm64-musl": "1.29.1", + "lightningcss-linux-x64-gnu": "1.29.1", + "lightningcss-linux-x64-musl": "1.29.1", + "lightningcss-win32-arm64-msvc": "1.29.1", + "lightningcss-win32-x64-msvc": "1.29.1" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.29.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.29.1.tgz", + "integrity": "sha512-u1S+xdODy/eEtjADqirA774y3jLcm8RPtYztwReEXoZKdzgsHYPl0s5V52Tst+GKzqjebkULT86XMSxejzfISw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.29.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.29.1.tgz", + "integrity": "sha512-L0Tx0DtaNUTzXv0lbGCLB/c/qEADanHbu4QdcNOXLIe1i8i22rZRpbT3gpWYsCh9aSL9zFujY/WmEXIatWvXbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lmdb": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-2.8.5.tgz", + "integrity": "sha512-9bMdFfc80S+vSldBmG3HOuLVHnxRdNTlpzR6QDnzqCQtCzGUEAGTzBKYMeIM+I/sU4oZfgbcbS7X7F65/z/oxQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "msgpackr": "^1.9.5", + "node-addon-api": "^6.1.0", + "node-gyp-build-optional-packages": "5.1.1", + "ordered-binary": "^1.4.1", + "weak-lru-cache": "^1.2.2" + }, + "bin": { + "download-lmdb-prebuilds": "bin/download-prebuilds.js" + }, + "optionalDependencies": { + "@lmdb/lmdb-darwin-arm64": "2.8.5", + "@lmdb/lmdb-darwin-x64": "2.8.5", + "@lmdb/lmdb-linux-arm": "2.8.5", + "@lmdb/lmdb-linux-arm64": "2.8.5", + "@lmdb/lmdb-linux-x64": "2.8.5", + "@lmdb/lmdb-win32-x64": "2.8.5" + } + }, + "node_modules/lmdb/node_modules/node-addon-api": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", + "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", + "dev": true, + "license": "MIT" + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/msgpackr": { + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.11.2.tgz", + "integrity": "sha512-F9UngXRlPyWCDEASDpTf6c9uNhGPTqnTeLVt7bN+bU1eajoR/8V9ys2BRaV5C/e5ihE6sJ9uPIKaYt6bFuO32g==", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "msgpackr-extract": "^3.0.2" + } + }, + "node_modules/msgpackr-extract": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.3.tgz", + "integrity": "sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "node-gyp-build-optional-packages": "5.2.2" + }, + "bin": { + "download-msgpackr-prebuilds": "bin/download-prebuilds.js" + }, + "optionalDependencies": { + "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.3", + "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.3" + } + }, + "node_modules/msgpackr-extract/node_modules/detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/msgpackr-extract/node_modules/node-gyp-build-optional-packages": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.2.2.tgz", + "integrity": "sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^2.0.1" + }, + "bin": { + "node-gyp-build-optional-packages": "bin.js", + "node-gyp-build-optional-packages-optional": "optional.js", + "node-gyp-build-optional-packages-test": "build-test.js" + } + }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-gyp-build-optional-packages": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.1.1.tgz", + "integrity": "sha512-+P72GAjVAbTxjjwUmwjVrqrdZROD4nf8KgpBoDxqXXTiYZZt/ud60dE5yvCSr9lRO8e8yv6kgJIC0K0PfZFVQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.1" + }, + "bin": { + "node-gyp-build-optional-packages": "bin.js", + "node-gyp-build-optional-packages-optional": "optional.js", + "node-gyp-build-optional-packages-test": "build-test.js" + } + }, + "node_modules/node-gyp-build-optional-packages/node_modules/detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true, + "license": "MIT" + }, + "node_modules/nullthrows": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", + "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", + "dev": true, + "license": "MIT" + }, + "node_modules/ordered-binary": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.5.3.tgz", + "integrity": "sha512-oGFr3T+pYdTGJ+YFEILMpS3es+GiIbs9h/XQrclBXUtd44ey7XwfsMzM31f64I1SQOawDoDr/D823kNCADI8TA==", + "dev": true, + "license": "MIT" + }, + "node_modules/parcel": { + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/parcel/-/parcel-2.13.3.tgz", + "integrity": "sha512-8GrC8C7J8mwRpAlk7EJ7lwdFTbCN+dcXH2gy5AsEs9pLfzo9wvxOTx6W0fzSlvCOvZOita+8GdfYlGfEt0tRgA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/config-default": "2.13.3", + "@parcel/core": "2.13.3", + "@parcel/diagnostic": "2.13.3", + "@parcel/events": "2.13.3", + "@parcel/feature-flags": "2.13.3", + "@parcel/fs": "2.13.3", + "@parcel/logger": "2.13.3", + "@parcel/package-manager": "2.13.3", + "@parcel/reporter-cli": "2.13.3", + "@parcel/reporter-dev-server": "2.13.3", + "@parcel/reporter-tracer": "2.13.3", + "@parcel/utils": "2.13.3", + "chalk": "^4.1.2", + "commander": "^12.1.0", + "get-port": "^4.2.0" + }, + "bin": { + "parcel": "lib/bin.js" + }, + "engines": { + "node": ">= 16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/parcel-reporter-static-files-copy": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/parcel-reporter-static-files-copy/-/parcel-reporter-static-files-copy-1.5.3.tgz", + "integrity": "sha512-Ukq2SyJYn3GFIPCLamXuQ+2t+0j54llujjOUoRjtmVvfsuGnJDEpMznADeIoKuQDvy0jpxtWzWkQvxqI/j+U4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@parcel/plugin": "^2.0.0-beta.1" + }, + "engines": { + "parcel": "^2.0.0-beta.1" + } + }, + "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, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/posthtml": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.16.6.tgz", + "integrity": "sha512-JcEmHlyLK/o0uGAlj65vgg+7LIms0xKXe60lcDOTU7oVX/3LuEuLwrQpW3VJ7de5TaFKiW4kWkaIpJL42FEgxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "posthtml-parser": "^0.11.0", + "posthtml-render": "^3.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/posthtml-parser": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.12.1.tgz", + "integrity": "sha512-rYFmsDLfYm+4Ts2Oh4DCDSZPtdC1BLnRXAobypVzX9alj28KGl65dIFtgDY9zB57D0TC4Qxqrawuq/2et1P0GA==", + "dev": true, + "license": "MIT", + "dependencies": { + "htmlparser2": "^9.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/posthtml-render": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-3.0.0.tgz", + "integrity": "sha512-z+16RoxK3fUPgwaIgH9NGnK1HKY9XIDpydky5eQGgAFVXTCSezalv9U2jQuNV+Z9qV1fDWNzldcw4eK0SSbqKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-json": "^2.0.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/posthtml/node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/posthtml/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, + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/posthtml/node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/posthtml/node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/posthtml/node_modules/entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/posthtml/node_modules/htmlparser2": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", + "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.2", + "domutils": "^2.8.0", + "entities": "^3.0.1" + } + }, + "node_modules/posthtml/node_modules/posthtml-parser": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.11.0.tgz", + "integrity": "sha512-QecJtfLekJbWVo/dMAA+OSwY79wpRmbqS5TeXvXSX+f0c6pW4/SE6inzZ2qkU7oAMCPqIDkZDvd/bQsSFUnKyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "htmlparser2": "^7.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/react-error-overlay": { + "version": "6.0.9", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.9.tgz", + "integrity": "sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew==", + "dev": true, + "license": "MIT" + }, + "node_modules/react-refresh": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", + "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true, + "license": "MIT" + }, + "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, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.0.tgz", + "integrity": "sha512-DrfFnPzblFmNrIZzg5RzHegbiRWg7KMR7btwi2yjHwx06zsUbO5g613sVwEV7FTwmzJu+Io0lJe2GJ3LxqpvBQ==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/srcset": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/srcset/-/srcset-5.0.1.tgz", + "integrity": "sha512-/P1UYbGfJVlxZag7aABNRrulEXAwCSDo7fklafOQrantuPTDmYgijJMks2zusPCVzgW9+4P69mq7w6pYuZpgxw==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "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, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/term-size": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", + "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==", + "dev": true, + "license": "MIT" + }, + "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, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "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, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz", + "integrity": "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/utility-types": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.11.0.tgz", + "integrity": "sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/weak-lru-cache": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz", + "integrity": "sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==", + "dev": true, + "license": "MIT" + } + } +} diff --git a/node_modules/@babel/code-frame/LICENSE b/node_modules/@babel/code-frame/LICENSE new file mode 100644 index 00000000..f31575ec --- /dev/null +++ b/node_modules/@babel/code-frame/LICENSE @@ -0,0 +1,22 @@ +MIT License + +Copyright (c) 2014-present Sebastian McKenzie and other contributors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/@babel/code-frame/README.md b/node_modules/@babel/code-frame/README.md new file mode 100644 index 00000000..71607551 --- /dev/null +++ b/node_modules/@babel/code-frame/README.md @@ -0,0 +1,19 @@ +# @babel/code-frame + +> Generate errors that contain a code frame that point to source locations. + +See our website [@babel/code-frame](https://babeljs.io/docs/babel-code-frame) for more information. + +## Install + +Using npm: + +```sh +npm install --save-dev @babel/code-frame +``` + +or using yarn: + +```sh +yarn add @babel/code-frame --dev +``` diff --git a/node_modules/@babel/code-frame/lib/index.js b/node_modules/@babel/code-frame/lib/index.js new file mode 100644 index 00000000..b409f301 --- /dev/null +++ b/node_modules/@babel/code-frame/lib/index.js @@ -0,0 +1,216 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +var picocolors = require('picocolors'); +var jsTokens = require('js-tokens'); +var helperValidatorIdentifier = require('@babel/helper-validator-identifier'); + +function isColorSupported() { + return (typeof process === "object" && (process.env.FORCE_COLOR === "0" || process.env.FORCE_COLOR === "false") ? false : picocolors.isColorSupported + ); +} +const compose = (f, g) => v => f(g(v)); +function buildDefs(colors) { + return { + keyword: colors.cyan, + capitalized: colors.yellow, + jsxIdentifier: colors.yellow, + punctuator: colors.yellow, + number: colors.magenta, + string: colors.green, + regex: colors.magenta, + comment: colors.gray, + invalid: compose(compose(colors.white, colors.bgRed), colors.bold), + gutter: colors.gray, + marker: compose(colors.red, colors.bold), + message: compose(colors.red, colors.bold), + reset: colors.reset + }; +} +const defsOn = buildDefs(picocolors.createColors(true)); +const defsOff = buildDefs(picocolors.createColors(false)); +function getDefs(enabled) { + return enabled ? defsOn : defsOff; +} + +const sometimesKeywords = new Set(["as", "async", "from", "get", "of", "set"]); +const NEWLINE$1 = /\r\n|[\n\r\u2028\u2029]/; +const BRACKET = /^[()[\]{}]$/; +let tokenize; +{ + const JSX_TAG = /^[a-z][\w-]*$/i; + const getTokenType = function (token, offset, text) { + if (token.type === "name") { + if (helperValidatorIdentifier.isKeyword(token.value) || helperValidatorIdentifier.isStrictReservedWord(token.value, true) || sometimesKeywords.has(token.value)) { + return "keyword"; + } + if (JSX_TAG.test(token.value) && (text[offset - 1] === "<" || text.slice(offset - 2, offset) === " defs[type](str)).join("\n"); + } else { + highlighted += value; + } + } + return highlighted; +} + +let deprecationWarningShown = false; +const NEWLINE = /\r\n|[\n\r\u2028\u2029]/; +function getMarkerLines(loc, source, opts) { + const startLoc = Object.assign({ + column: 0, + line: -1 + }, loc.start); + const endLoc = Object.assign({}, startLoc, loc.end); + const { + linesAbove = 2, + linesBelow = 3 + } = opts || {}; + const startLine = startLoc.line; + const startColumn = startLoc.column; + const endLine = endLoc.line; + const endColumn = endLoc.column; + let start = Math.max(startLine - (linesAbove + 1), 0); + let end = Math.min(source.length, endLine + linesBelow); + if (startLine === -1) { + start = 0; + } + if (endLine === -1) { + end = source.length; + } + const lineDiff = endLine - startLine; + const markerLines = {}; + if (lineDiff) { + for (let i = 0; i <= lineDiff; i++) { + const lineNumber = i + startLine; + if (!startColumn) { + markerLines[lineNumber] = true; + } else if (i === 0) { + const sourceLength = source[lineNumber - 1].length; + markerLines[lineNumber] = [startColumn, sourceLength - startColumn + 1]; + } else if (i === lineDiff) { + markerLines[lineNumber] = [0, endColumn]; + } else { + const sourceLength = source[lineNumber - i].length; + markerLines[lineNumber] = [0, sourceLength]; + } + } + } else { + if (startColumn === endColumn) { + if (startColumn) { + markerLines[startLine] = [startColumn, 0]; + } else { + markerLines[startLine] = true; + } + } else { + markerLines[startLine] = [startColumn, endColumn - startColumn]; + } + } + return { + start, + end, + markerLines + }; +} +function codeFrameColumns(rawLines, loc, opts = {}) { + const shouldHighlight = opts.forceColor || isColorSupported() && opts.highlightCode; + const defs = getDefs(shouldHighlight); + const lines = rawLines.split(NEWLINE); + const { + start, + end, + markerLines + } = getMarkerLines(loc, lines, opts); + const hasColumns = loc.start && typeof loc.start.column === "number"; + const numberMaxWidth = String(end).length; + const highlightedLines = shouldHighlight ? highlight(rawLines) : rawLines; + let frame = highlightedLines.split(NEWLINE, end).slice(start, end).map((line, index) => { + const number = start + 1 + index; + const paddedNumber = ` ${number}`.slice(-numberMaxWidth); + const gutter = ` ${paddedNumber} |`; + const hasMarker = markerLines[number]; + const lastMarkerLine = !markerLines[number + 1]; + if (hasMarker) { + let markerLine = ""; + if (Array.isArray(hasMarker)) { + const markerSpacing = line.slice(0, Math.max(hasMarker[0] - 1, 0)).replace(/[^\t]/g, " "); + const numberOfMarkers = hasMarker[1] || 1; + markerLine = ["\n ", defs.gutter(gutter.replace(/\d/g, " ")), " ", markerSpacing, defs.marker("^").repeat(numberOfMarkers)].join(""); + if (lastMarkerLine && opts.message) { + markerLine += " " + defs.message(opts.message); + } + } + return [defs.marker(">"), defs.gutter(gutter), line.length > 0 ? ` ${line}` : "", markerLine].join(""); + } else { + return ` ${defs.gutter(gutter)}${line.length > 0 ? ` ${line}` : ""}`; + } + }).join("\n"); + if (opts.message && !hasColumns) { + frame = `${" ".repeat(numberMaxWidth + 1)}${opts.message}\n${frame}`; + } + if (shouldHighlight) { + return defs.reset(frame); + } else { + return frame; + } +} +function index (rawLines, lineNumber, colNumber, opts = {}) { + if (!deprecationWarningShown) { + deprecationWarningShown = true; + const message = "Passing lineNumber and colNumber is deprecated to @babel/code-frame. Please use `codeFrameColumns`."; + if (process.emitWarning) { + process.emitWarning(message, "DeprecationWarning"); + } else { + const deprecationError = new Error(message); + deprecationError.name = "DeprecationWarning"; + console.warn(new Error(message)); + } + } + colNumber = Math.max(colNumber, 0); + const location = { + start: { + column: colNumber, + line: lineNumber + } + }; + return codeFrameColumns(rawLines, location, opts); +} + +exports.codeFrameColumns = codeFrameColumns; +exports.default = index; +exports.highlight = highlight; +//# sourceMappingURL=index.js.map diff --git a/node_modules/@babel/code-frame/lib/index.js.map b/node_modules/@babel/code-frame/lib/index.js.map new file mode 100644 index 00000000..46a181dc --- /dev/null +++ b/node_modules/@babel/code-frame/lib/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sources":["../src/defs.ts","../src/highlight.ts","../src/index.ts"],"sourcesContent":["import picocolors, { createColors } from \"picocolors\";\nimport type { Colors, Formatter } from \"picocolors/types\";\n\nexport function isColorSupported() {\n return (\n // See https://github.com/alexeyraspopov/picocolors/issues/62\n typeof process === \"object\" &&\n (process.env.FORCE_COLOR === \"0\" || process.env.FORCE_COLOR === \"false\")\n ? false\n : picocolors.isColorSupported\n );\n}\n\nexport type InternalTokenType =\n | \"keyword\"\n | \"capitalized\"\n | \"jsxIdentifier\"\n | \"punctuator\"\n | \"number\"\n | \"string\"\n | \"regex\"\n | \"comment\"\n | \"invalid\";\n\ntype UITokens = \"gutter\" | \"marker\" | \"message\";\n\nexport type Defs = {\n [_ in InternalTokenType | UITokens | \"reset\"]: Formatter;\n};\n\nconst compose: (f: (gv: U) => V, g: (v: T) => U) => (v: T) => V =\n (f, g) => v =>\n f(g(v));\n\n/**\n * Styles for token types.\n */\nfunction buildDefs(colors: Colors): Defs {\n return {\n keyword: colors.cyan,\n capitalized: colors.yellow,\n jsxIdentifier: colors.yellow,\n punctuator: colors.yellow,\n number: colors.magenta,\n string: colors.green,\n regex: colors.magenta,\n comment: colors.gray,\n invalid: compose(compose(colors.white, colors.bgRed), colors.bold),\n\n gutter: colors.gray,\n marker: compose(colors.red, colors.bold),\n message: compose(colors.red, colors.bold),\n\n reset: colors.reset,\n };\n}\n\nconst defsOn = buildDefs(createColors(true));\nconst defsOff = buildDefs(createColors(false));\n\nexport function getDefs(enabled: boolean): Defs {\n return enabled ? defsOn : defsOff;\n}\n","import type { Token as JSToken, JSXToken } from \"js-tokens\";\nimport jsTokens from \"js-tokens\";\n\nimport {\n isStrictReservedWord,\n isKeyword,\n} from \"@babel/helper-validator-identifier\";\n\nimport { getDefs, type InternalTokenType } from \"./defs.ts\";\n\n/**\n * Names that are always allowed as identifiers, but also appear as keywords\n * within certain syntactic productions.\n *\n * https://tc39.es/ecma262/#sec-keywords-and-reserved-words\n *\n * `target` has been omitted since it is very likely going to be a false\n * positive.\n */\nconst sometimesKeywords = new Set([\"as\", \"async\", \"from\", \"get\", \"of\", \"set\"]);\n\ntype Token = {\n type: InternalTokenType | \"uncolored\";\n value: string;\n};\n\n/**\n * RegExp to test for newlines in terminal.\n */\nconst NEWLINE = /\\r\\n|[\\n\\r\\u2028\\u2029]/;\n\n/**\n * RegExp to test for the three types of brackets.\n */\nconst BRACKET = /^[()[\\]{}]$/;\n\nlet tokenize: (\n text: string,\n) => Generator<{ type: InternalTokenType | \"uncolored\"; value: string }>;\n\nif (process.env.BABEL_8_BREAKING) {\n /**\n * Get the type of token, specifying punctuator type.\n */\n const getTokenType = function (\n token: JSToken | JSXToken,\n ): InternalTokenType | \"uncolored\" {\n if (token.type === \"IdentifierName\") {\n if (\n isKeyword(token.value) ||\n isStrictReservedWord(token.value, true) ||\n sometimesKeywords.has(token.value)\n ) {\n return \"keyword\";\n }\n\n if (token.value[0] !== token.value[0].toLowerCase()) {\n return \"capitalized\";\n }\n }\n\n if (token.type === \"Punctuator\" && BRACKET.test(token.value)) {\n return \"uncolored\";\n }\n\n if (token.type === \"Invalid\" && token.value === \"@\") {\n return \"punctuator\";\n }\n\n switch (token.type) {\n case \"NumericLiteral\":\n return \"number\";\n\n case \"StringLiteral\":\n case \"JSXString\":\n case \"NoSubstitutionTemplate\":\n return \"string\";\n\n case \"RegularExpressionLiteral\":\n return \"regex\";\n\n case \"Punctuator\":\n case \"JSXPunctuator\":\n return \"punctuator\";\n\n case \"MultiLineComment\":\n case \"SingleLineComment\":\n return \"comment\";\n\n case \"Invalid\":\n case \"JSXInvalid\":\n return \"invalid\";\n\n case \"JSXIdentifier\":\n return \"jsxIdentifier\";\n\n default:\n return \"uncolored\";\n }\n };\n\n /**\n * Turn a string of JS into an array of objects.\n */\n tokenize = function* (text: string): Generator {\n for (const token of jsTokens(text, { jsx: true })) {\n switch (token.type) {\n case \"TemplateHead\":\n yield { type: \"string\", value: token.value.slice(0, -2) };\n yield { type: \"punctuator\", value: \"${\" };\n break;\n\n case \"TemplateMiddle\":\n yield { type: \"punctuator\", value: \"}\" };\n yield { type: \"string\", value: token.value.slice(1, -2) };\n yield { type: \"punctuator\", value: \"${\" };\n break;\n\n case \"TemplateTail\":\n yield { type: \"punctuator\", value: \"}\" };\n yield { type: \"string\", value: token.value.slice(1) };\n break;\n\n default:\n yield {\n type: getTokenType(token),\n value: token.value,\n };\n }\n }\n };\n} else {\n /**\n * RegExp to test for what seems to be a JSX tag name.\n */\n const JSX_TAG = /^[a-z][\\w-]*$/i;\n\n // The token here is defined in js-tokens@4. However we don't bother\n // typing it since the whole block will be removed in Babel 8\n const getTokenType = function (token: any, offset: number, text: string) {\n if (token.type === \"name\") {\n if (\n isKeyword(token.value) ||\n isStrictReservedWord(token.value, true) ||\n sometimesKeywords.has(token.value)\n ) {\n return \"keyword\";\n }\n\n if (\n JSX_TAG.test(token.value) &&\n (text[offset - 1] === \"<\" || text.slice(offset - 2, offset) === \" defs[type as InternalTokenType](str))\n .join(\"\\n\");\n } else {\n highlighted += value;\n }\n }\n\n return highlighted;\n}\n","import { getDefs, isColorSupported } from \"./defs.ts\";\nimport { highlight } from \"./highlight.ts\";\n\nexport { highlight };\n\nlet deprecationWarningShown = false;\n\ntype Location = {\n column: number;\n line: number;\n};\n\ntype NodeLocation = {\n end?: Location;\n start: Location;\n};\n\nexport interface Options {\n /** Syntax highlight the code as JavaScript for terminals. default: false */\n highlightCode?: boolean;\n /** The number of lines to show above the error. default: 2 */\n linesAbove?: number;\n /** The number of lines to show below the error. default: 3 */\n linesBelow?: number;\n /**\n * Forcibly syntax highlight the code as JavaScript (for non-terminals);\n * overrides highlightCode.\n * default: false\n */\n forceColor?: boolean;\n /**\n * Pass in a string to be displayed inline (if possible) next to the\n * highlighted location in the code. If it can't be positioned inline,\n * it will be placed above the code frame.\n * default: nothing\n */\n message?: string;\n}\n\n/**\n * RegExp to test for newlines in terminal.\n */\n\nconst NEWLINE = /\\r\\n|[\\n\\r\\u2028\\u2029]/;\n\n/**\n * Extract what lines should be marked and highlighted.\n */\n\ntype MarkerLines = Record;\n\nfunction getMarkerLines(\n loc: NodeLocation,\n source: Array,\n opts: Options,\n): {\n start: number;\n end: number;\n markerLines: MarkerLines;\n} {\n const startLoc: Location = {\n column: 0,\n line: -1,\n ...loc.start,\n };\n const endLoc: Location = {\n ...startLoc,\n ...loc.end,\n };\n const { linesAbove = 2, linesBelow = 3 } = opts || {};\n const startLine = startLoc.line;\n const startColumn = startLoc.column;\n const endLine = endLoc.line;\n const endColumn = endLoc.column;\n\n let start = Math.max(startLine - (linesAbove + 1), 0);\n let end = Math.min(source.length, endLine + linesBelow);\n\n if (startLine === -1) {\n start = 0;\n }\n\n if (endLine === -1) {\n end = source.length;\n }\n\n const lineDiff = endLine - startLine;\n const markerLines: MarkerLines = {};\n\n if (lineDiff) {\n for (let i = 0; i <= lineDiff; i++) {\n const lineNumber = i + startLine;\n\n if (!startColumn) {\n markerLines[lineNumber] = true;\n } else if (i === 0) {\n const sourceLength = source[lineNumber - 1].length;\n\n markerLines[lineNumber] = [startColumn, sourceLength - startColumn + 1];\n } else if (i === lineDiff) {\n markerLines[lineNumber] = [0, endColumn];\n } else {\n const sourceLength = source[lineNumber - i].length;\n\n markerLines[lineNumber] = [0, sourceLength];\n }\n }\n } else {\n if (startColumn === endColumn) {\n if (startColumn) {\n markerLines[startLine] = [startColumn, 0];\n } else {\n markerLines[startLine] = true;\n }\n } else {\n markerLines[startLine] = [startColumn, endColumn - startColumn];\n }\n }\n\n return { start, end, markerLines };\n}\n\nexport function codeFrameColumns(\n rawLines: string,\n loc: NodeLocation,\n opts: Options = {},\n): string {\n const shouldHighlight =\n opts.forceColor || (isColorSupported() && opts.highlightCode);\n const defs = getDefs(shouldHighlight);\n\n const lines = rawLines.split(NEWLINE);\n const { start, end, markerLines } = getMarkerLines(loc, lines, opts);\n const hasColumns = loc.start && typeof loc.start.column === \"number\";\n\n const numberMaxWidth = String(end).length;\n\n const highlightedLines = shouldHighlight ? highlight(rawLines) : rawLines;\n\n let frame = highlightedLines\n .split(NEWLINE, end)\n .slice(start, end)\n .map((line, index) => {\n const number = start + 1 + index;\n const paddedNumber = ` ${number}`.slice(-numberMaxWidth);\n const gutter = ` ${paddedNumber} |`;\n const hasMarker = markerLines[number];\n const lastMarkerLine = !markerLines[number + 1];\n if (hasMarker) {\n let markerLine = \"\";\n if (Array.isArray(hasMarker)) {\n const markerSpacing = line\n .slice(0, Math.max(hasMarker[0] - 1, 0))\n .replace(/[^\\t]/g, \" \");\n const numberOfMarkers = hasMarker[1] || 1;\n\n markerLine = [\n \"\\n \",\n defs.gutter(gutter.replace(/\\d/g, \" \")),\n \" \",\n markerSpacing,\n defs.marker(\"^\").repeat(numberOfMarkers),\n ].join(\"\");\n\n if (lastMarkerLine && opts.message) {\n markerLine += \" \" + defs.message(opts.message);\n }\n }\n return [\n defs.marker(\">\"),\n defs.gutter(gutter),\n line.length > 0 ? ` ${line}` : \"\",\n markerLine,\n ].join(\"\");\n } else {\n return ` ${defs.gutter(gutter)}${line.length > 0 ? ` ${line}` : \"\"}`;\n }\n })\n .join(\"\\n\");\n\n if (opts.message && !hasColumns) {\n frame = `${\" \".repeat(numberMaxWidth + 1)}${opts.message}\\n${frame}`;\n }\n\n if (shouldHighlight) {\n return defs.reset(frame);\n } else {\n return frame;\n }\n}\n\n/**\n * Create a code frame, adding line numbers, code highlighting, and pointing to a given position.\n */\n\nexport default function (\n rawLines: string,\n lineNumber: number,\n colNumber?: number | null,\n opts: Options = {},\n): string {\n if (!deprecationWarningShown) {\n deprecationWarningShown = true;\n\n const message =\n \"Passing lineNumber and colNumber is deprecated to @babel/code-frame. Please use `codeFrameColumns`.\";\n\n if (process.emitWarning) {\n // A string is directly supplied to emitWarning, because when supplying an\n // Error object node throws in the tests because of different contexts\n process.emitWarning(message, \"DeprecationWarning\");\n } else {\n const deprecationError = new Error(message);\n deprecationError.name = \"DeprecationWarning\";\n console.warn(new Error(message));\n }\n }\n\n colNumber = Math.max(colNumber, 0);\n\n const location: NodeLocation = {\n start: { column: colNumber, line: lineNumber },\n };\n\n return codeFrameColumns(rawLines, location, opts);\n}\n"],"names":["isColorSupported","process","env","FORCE_COLOR","picocolors","compose","f","g","v","buildDefs","colors","keyword","cyan","capitalized","yellow","jsxIdentifier","punctuator","number","magenta","string","green","regex","comment","gray","invalid","white","bgRed","bold","gutter","marker","red","message","reset","defsOn","createColors","defsOff","getDefs","enabled","sometimesKeywords","Set","NEWLINE","BRACKET","tokenize","JSX_TAG","getTokenType","token","offset","text","type","isKeyword","value","isStrictReservedWord","has","test","slice","toLowerCase","match","jsTokens","default","exec","matchToToken","index","highlight","defs","highlighted","split","map","str","join","deprecationWarningShown","getMarkerLines","loc","source","opts","startLoc","Object","assign","column","line","start","endLoc","end","linesAbove","linesBelow","startLine","startColumn","endLine","endColumn","Math","max","min","length","lineDiff","markerLines","i","lineNumber","sourceLength","codeFrameColumns","rawLines","shouldHighlight","forceColor","highlightCode","lines","hasColumns","numberMaxWidth","String","highlightedLines","frame","paddedNumber","hasMarker","lastMarkerLine","markerLine","Array","isArray","markerSpacing","replace","numberOfMarkers","repeat","colNumber","emitWarning","deprecationError","Error","name","console","warn","location"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/@babel/code-frame/package.json b/node_modules/@babel/code-frame/package.json new file mode 100644 index 00000000..076c3128 --- /dev/null +++ b/node_modules/@babel/code-frame/package.json @@ -0,0 +1,31 @@ +{ + "name": "@babel/code-frame", + "version": "7.26.2", + "description": "Generate errors that contain a code frame that point to source locations.", + "author": "The Babel Team (https://babel.dev/team)", + "homepage": "https://babel.dev/docs/en/next/babel-code-frame", + "bugs": "https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen", + "license": "MIT", + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/babel/babel.git", + "directory": "packages/babel-code-frame" + }, + "main": "./lib/index.js", + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "devDependencies": { + "import-meta-resolve": "^4.1.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "type": "commonjs" +} \ No newline at end of file diff --git a/node_modules/@babel/helper-validator-identifier/LICENSE b/node_modules/@babel/helper-validator-identifier/LICENSE new file mode 100644 index 00000000..f31575ec --- /dev/null +++ b/node_modules/@babel/helper-validator-identifier/LICENSE @@ -0,0 +1,22 @@ +MIT License + +Copyright (c) 2014-present Sebastian McKenzie and other contributors + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/@babel/helper-validator-identifier/README.md b/node_modules/@babel/helper-validator-identifier/README.md new file mode 100644 index 00000000..05c19e64 --- /dev/null +++ b/node_modules/@babel/helper-validator-identifier/README.md @@ -0,0 +1,19 @@ +# @babel/helper-validator-identifier + +> Validate identifier/keywords name + +See our website [@babel/helper-validator-identifier](https://babeljs.io/docs/babel-helper-validator-identifier) for more information. + +## Install + +Using npm: + +```sh +npm install --save @babel/helper-validator-identifier +``` + +or using yarn: + +```sh +yarn add @babel/helper-validator-identifier +``` diff --git a/node_modules/@babel/helper-validator-identifier/lib/identifier.js b/node_modules/@babel/helper-validator-identifier/lib/identifier.js new file mode 100644 index 00000000..fdb9aece --- /dev/null +++ b/node_modules/@babel/helper-validator-identifier/lib/identifier.js @@ -0,0 +1,70 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.isIdentifierChar = isIdentifierChar; +exports.isIdentifierName = isIdentifierName; +exports.isIdentifierStart = isIdentifierStart; +let nonASCIIidentifierStartChars = "\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u052f\u0531-\u0556\u0559\u0560-\u0588\u05d0-\u05ea\u05ef-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u0860-\u086a\u0870-\u0887\u0889-\u088e\u08a0-\u08c9\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u09fc\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0af9\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d\u0c58-\u0c5a\u0c5d\u0c60\u0c61\u0c80\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cdd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d04-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d54-\u0d56\u0d5f-\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e86-\u0e8a\u0e8c-\u0ea3\u0ea5\u0ea7-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u1711\u171f-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1878\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191e\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4c\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1c80-\u1c8a\u1c90-\u1cba\u1cbd-\u1cbf\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5\u1cf6\u1cfa\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2118-\u211d\u2124\u2126\u2128\u212a-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309b-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312f\u3131-\u318e\u31a0-\u31bf\u31f0-\u31ff\u3400-\u4dbf\u4e00-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua69d\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7cd\ua7d0\ua7d1\ua7d3\ua7d5-\ua7dc\ua7f2-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua8fd\ua8fe\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\ua9e0-\ua9e4\ua9e6-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa7e-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab69\uab70-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc"; +let nonASCIIidentifierChars = "\xb7\u0300-\u036f\u0387\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u0669\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u06f0-\u06f9\u0711\u0730-\u074a\u07a6-\u07b0\u07c0-\u07c9\u07eb-\u07f3\u07fd\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u0897-\u089f\u08ca-\u08e1\u08e3-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u09e6-\u09ef\u09fe\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0ae6-\u0aef\u0afa-\u0aff\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b55-\u0b57\u0b62\u0b63\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c00-\u0c04\u0c3c\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c66-\u0c6f\u0c81-\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0ce6-\u0cef\u0cf3\u0d00-\u0d03\u0d3b\u0d3c\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d66-\u0d6f\u0d81-\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0e50-\u0e59\u0eb1\u0eb4-\u0ebc\u0ec8-\u0ece\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1040-\u1049\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u1369-\u1371\u1712-\u1715\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4-\u17d3\u17dd\u17e0-\u17e9\u180b-\u180d\u180f-\u1819\u18a9\u1920-\u192b\u1930-\u193b\u1946-\u194f\u19d0-\u19da\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1ab0-\u1abd\u1abf-\u1ace\u1b00-\u1b04\u1b34-\u1b44\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1bad\u1bb0-\u1bb9\u1be6-\u1bf3\u1c24-\u1c37\u1c40-\u1c49\u1c50-\u1c59\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf4\u1cf7-\u1cf9\u1dc0-\u1dff\u200c\u200d\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\u30fb\ua620-\ua629\ua66f\ua674-\ua67d\ua69e\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua82c\ua880\ua881\ua8b4-\ua8c5\ua8d0-\ua8d9\ua8e0-\ua8f1\ua8ff-\ua909\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\ua9d0-\ua9d9\ua9e5\ua9f0-\ua9f9\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa50-\uaa59\uaa7b-\uaa7d\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaeb-\uaaef\uaaf5\uaaf6\uabe3-\uabea\uabec\uabed\uabf0-\uabf9\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f\uff65"; +const nonASCIIidentifierStart = new RegExp("[" + nonASCIIidentifierStartChars + "]"); +const nonASCIIidentifier = new RegExp("[" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + "]"); +nonASCIIidentifierStartChars = nonASCIIidentifierChars = null; +const astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 14, 29, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 13, 10, 2, 14, 2, 6, 2, 1, 2, 10, 2, 14, 2, 6, 2, 1, 4, 51, 13, 310, 10, 21, 11, 7, 25, 5, 2, 41, 2, 8, 70, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 71, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 28, 43, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 14, 35, 39, 27, 10, 22, 251, 41, 7, 1, 17, 2, 60, 28, 11, 0, 9, 21, 43, 17, 47, 20, 28, 22, 13, 52, 58, 1, 3, 0, 14, 44, 33, 24, 27, 35, 30, 0, 3, 0, 9, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 20, 1, 64, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 31, 9, 2, 0, 3, 0, 2, 37, 2, 0, 26, 0, 2, 0, 45, 52, 19, 3, 21, 2, 31, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 14, 0, 72, 26, 38, 6, 186, 43, 117, 63, 32, 7, 3, 0, 3, 7, 2, 1, 2, 23, 16, 0, 2, 0, 95, 7, 3, 38, 17, 0, 2, 0, 29, 0, 11, 39, 8, 0, 22, 0, 12, 45, 20, 0, 19, 72, 200, 32, 32, 8, 2, 36, 18, 0, 50, 29, 113, 6, 2, 1, 2, 37, 22, 0, 26, 5, 2, 1, 2, 31, 15, 0, 328, 18, 16, 0, 2, 12, 2, 33, 125, 0, 80, 921, 103, 110, 18, 195, 2637, 96, 16, 1071, 18, 5, 26, 3994, 6, 582, 6842, 29, 1763, 568, 8, 30, 18, 78, 18, 29, 19, 47, 17, 3, 32, 20, 6, 18, 433, 44, 212, 63, 129, 74, 6, 0, 67, 12, 65, 1, 2, 0, 29, 6135, 9, 1237, 42, 9, 8936, 3, 2, 6, 2, 1, 2, 290, 16, 0, 30, 2, 3, 0, 15, 3, 9, 395, 2309, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 1845, 30, 7, 5, 262, 61, 147, 44, 11, 6, 17, 0, 322, 29, 19, 43, 485, 27, 229, 29, 3, 0, 496, 6, 2, 3, 2, 1, 2, 14, 2, 196, 60, 67, 8, 0, 1205, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42719, 33, 4153, 7, 221, 3, 5761, 15, 7472, 16, 621, 2467, 541, 1507, 4938, 6, 4191]; +const astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 574, 3, 9, 9, 7, 9, 32, 4, 318, 1, 80, 3, 71, 10, 50, 3, 123, 2, 54, 14, 32, 10, 3, 1, 11, 3, 46, 10, 8, 0, 46, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 3, 0, 158, 11, 6, 9, 7, 3, 56, 1, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 68, 8, 2, 0, 3, 0, 2, 3, 2, 4, 2, 0, 15, 1, 83, 17, 10, 9, 5, 0, 82, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 7, 19, 58, 14, 5, 9, 243, 14, 166, 9, 71, 5, 2, 1, 3, 3, 2, 0, 2, 1, 13, 9, 120, 6, 3, 6, 4, 0, 29, 9, 41, 6, 2, 3, 9, 0, 10, 10, 47, 15, 343, 9, 54, 7, 2, 7, 17, 9, 57, 21, 2, 13, 123, 5, 4, 0, 2, 1, 2, 6, 2, 0, 9, 9, 49, 4, 2, 1, 2, 4, 9, 9, 330, 3, 10, 1, 2, 0, 49, 6, 4, 4, 14, 10, 5350, 0, 7, 14, 11465, 27, 2343, 9, 87, 9, 39, 4, 60, 6, 26, 9, 535, 9, 470, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 4178, 9, 519, 45, 3, 22, 543, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 101, 0, 161, 6, 10, 9, 357, 0, 62, 13, 499, 13, 245, 1, 2, 9, 726, 6, 110, 6, 6, 9, 4759, 9, 787719, 239]; +function isInAstralSet(code, set) { + let pos = 0x10000; + for (let i = 0, length = set.length; i < length; i += 2) { + pos += set[i]; + if (pos > code) return false; + pos += set[i + 1]; + if (pos >= code) return true; + } + return false; +} +function isIdentifierStart(code) { + if (code < 65) return code === 36; + if (code <= 90) return true; + if (code < 97) return code === 95; + if (code <= 122) return true; + if (code <= 0xffff) { + return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code)); + } + return isInAstralSet(code, astralIdentifierStartCodes); +} +function isIdentifierChar(code) { + if (code < 48) return code === 36; + if (code < 58) return true; + if (code < 65) return false; + if (code <= 90) return true; + if (code < 97) return code === 95; + if (code <= 122) return true; + if (code <= 0xffff) { + return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code)); + } + return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes); +} +function isIdentifierName(name) { + let isFirst = true; + for (let i = 0; i < name.length; i++) { + let cp = name.charCodeAt(i); + if ((cp & 0xfc00) === 0xd800 && i + 1 < name.length) { + const trail = name.charCodeAt(++i); + if ((trail & 0xfc00) === 0xdc00) { + cp = 0x10000 + ((cp & 0x3ff) << 10) + (trail & 0x3ff); + } + } + if (isFirst) { + isFirst = false; + if (!isIdentifierStart(cp)) { + return false; + } + } else if (!isIdentifierChar(cp)) { + return false; + } + } + return !isFirst; +} + +//# sourceMappingURL=identifier.js.map diff --git a/node_modules/@babel/helper-validator-identifier/lib/identifier.js.map b/node_modules/@babel/helper-validator-identifier/lib/identifier.js.map new file mode 100644 index 00000000..ecf09522 --- /dev/null +++ b/node_modules/@babel/helper-validator-identifier/lib/identifier.js.map @@ -0,0 +1 @@ +{"version":3,"names":["nonASCIIidentifierStartChars","nonASCIIidentifierChars","nonASCIIidentifierStart","RegExp","nonASCIIidentifier","astralIdentifierStartCodes","astralIdentifierCodes","isInAstralSet","code","set","pos","i","length","isIdentifierStart","test","String","fromCharCode","isIdentifierChar","isIdentifierName","name","isFirst","cp","charCodeAt","trail"],"sources":["../src/identifier.ts"],"sourcesContent":["// We inline this package\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport * as charCodes from \"charcodes\";\n\n// ## Character categories\n\n// Big ugly regular expressions that match characters in the\n// whitespace, identifier, and identifier-start categories. These\n// are only applied when a character is found to actually have a\n// code point between 0x80 and 0xffff.\n// Generated by `scripts/generate-identifier-regex.cjs`.\n\n/* prettier-ignore */\nlet nonASCIIidentifierStartChars = \"\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u037f\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u052f\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05d0-\\u05ea\\u05ef-\\u05f2\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086a\\u0870-\\u0887\\u0889-\\u088e\\u08a0-\\u08c9\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u09fc\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0af9\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d\\u0c58-\\u0c5a\\u0c5d\\u0c60\\u0c61\\u0c80\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cdd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d04-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d54-\\u0d56\\u0d5f-\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e86-\\u0e8a\\u0e8c-\\u0ea3\\u0ea5\\u0ea7-\\u0eb0\\u0eb2\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f5\\u13f8-\\u13fd\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f8\\u1700-\\u1711\\u171f-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1878\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4c\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1c80-\\u1c8a\\u1c90-\\u1cba\\u1cbd-\\u1cbf\\u1ce9-\\u1cec\\u1cee-\\u1cf3\\u1cf5\\u1cf6\\u1cfa\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2118-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2ce4\\u2ceb-\\u2cee\\u2cf2\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309b-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312f\\u3131-\\u318e\\u31a0-\\u31bf\\u31f0-\\u31ff\\u3400-\\u4dbf\\u4e00-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua69d\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7cd\\ua7d0\\ua7d1\\ua7d3\\ua7d5-\\ua7dc\\ua7f2-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua8fd\\ua8fe\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\ua9e0-\\ua9e4\\ua9e6-\\ua9ef\\ua9fa-\\ua9fe\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa7e-\\uaaaf\\uaab1\\uaab5\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab5a\\uab5c-\\uab69\\uab70-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc\";\n/* prettier-ignore */\nlet nonASCIIidentifierChars = \"\\xb7\\u0300-\\u036f\\u0387\\u0483-\\u0487\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u0669\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u06f0-\\u06f9\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07c0-\\u07c9\\u07eb-\\u07f3\\u07fd\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u0897-\\u089f\\u08ca-\\u08e1\\u08e3-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962\\u0963\\u0966-\\u096f\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09cd\\u09d7\\u09e2\\u09e3\\u09e6-\\u09ef\\u09fe\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a66-\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2\\u0ae3\\u0ae6-\\u0aef\\u0afa-\\u0aff\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b55-\\u0b57\\u0b62\\u0b63\\u0b66-\\u0b6f\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0be6-\\u0bef\\u0c00-\\u0c04\\u0c3c\\u0c3e-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0c66-\\u0c6f\\u0c81-\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0ce6-\\u0cef\\u0cf3\\u0d00-\\u0d03\\u0d3b\\u0d3c\\u0d3e-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4d\\u0d57\\u0d62\\u0d63\\u0d66-\\u0d6f\\u0d81-\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0de6-\\u0def\\u0df2\\u0df3\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0e50-\\u0e59\\u0eb1\\u0eb4-\\u0ebc\\u0ec8-\\u0ece\\u0ed0-\\u0ed9\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f3e\\u0f3f\\u0f71-\\u0f84\\u0f86\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102b-\\u103e\\u1040-\\u1049\\u1056-\\u1059\\u105e-\\u1060\\u1062-\\u1064\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f-\\u109d\\u135d-\\u135f\\u1369-\\u1371\\u1712-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b4-\\u17d3\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u180f-\\u1819\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u194f\\u19d0-\\u19da\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1ab0-\\u1abd\\u1abf-\\u1ace\\u1b00-\\u1b04\\u1b34-\\u1b44\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1b80-\\u1b82\\u1ba1-\\u1bad\\u1bb0-\\u1bb9\\u1be6-\\u1bf3\\u1c24-\\u1c37\\u1c40-\\u1c49\\u1c50-\\u1c59\\u1cd0-\\u1cd2\\u1cd4-\\u1ce8\\u1ced\\u1cf4\\u1cf7-\\u1cf9\\u1dc0-\\u1dff\\u200c\\u200d\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\u30fb\\ua620-\\ua629\\ua66f\\ua674-\\ua67d\\ua69e\\ua69f\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua823-\\ua827\\ua82c\\ua880\\ua881\\ua8b4-\\ua8c5\\ua8d0-\\ua8d9\\ua8e0-\\ua8f1\\ua8ff-\\ua909\\ua926-\\ua92d\\ua947-\\ua953\\ua980-\\ua983\\ua9b3-\\ua9c0\\ua9d0-\\ua9d9\\ua9e5\\ua9f0-\\ua9f9\\uaa29-\\uaa36\\uaa43\\uaa4c\\uaa4d\\uaa50-\\uaa59\\uaa7b-\\uaa7d\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uaaeb-\\uaaef\\uaaf5\\uaaf6\\uabe3-\\uabea\\uabec\\uabed\\uabf0-\\uabf9\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe2f\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff10-\\uff19\\uff3f\\uff65\";\n\nconst nonASCIIidentifierStart = new RegExp(\n \"[\" + nonASCIIidentifierStartChars + \"]\",\n);\nconst nonASCIIidentifier = new RegExp(\n \"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\",\n);\n\nnonASCIIidentifierStartChars = nonASCIIidentifierChars = null;\n\n// These are a run-length and offset-encoded representation of the\n// >0xffff code points that are a valid part of identifiers. The\n// offset starts at 0x10000, and each pair of numbers represents an\n// offset to the next range, and then a size of the range. They were\n// generated by `scripts/generate-identifier-regex.cjs`.\n/* prettier-ignore */\nconst astralIdentifierStartCodes = [0,11,2,25,2,18,2,1,2,14,3,13,35,122,70,52,268,28,4,48,48,31,14,29,6,37,11,29,3,35,5,7,2,4,43,157,19,35,5,35,5,39,9,51,13,10,2,14,2,6,2,1,2,10,2,14,2,6,2,1,4,51,13,310,10,21,11,7,25,5,2,41,2,8,70,5,3,0,2,43,2,1,4,0,3,22,11,22,10,30,66,18,2,1,11,21,11,25,71,55,7,1,65,0,16,3,2,2,2,28,43,28,4,28,36,7,2,27,28,53,11,21,11,18,14,17,111,72,56,50,14,50,14,35,39,27,10,22,251,41,7,1,17,2,60,28,11,0,9,21,43,17,47,20,28,22,13,52,58,1,3,0,14,44,33,24,27,35,30,0,3,0,9,34,4,0,13,47,15,3,22,0,2,0,36,17,2,24,20,1,64,6,2,0,2,3,2,14,2,9,8,46,39,7,3,1,3,21,2,6,2,1,2,4,4,0,19,0,13,4,31,9,2,0,3,0,2,37,2,0,26,0,2,0,45,52,19,3,21,2,31,47,21,1,2,0,185,46,42,3,37,47,21,0,60,42,14,0,72,26,38,6,186,43,117,63,32,7,3,0,3,7,2,1,2,23,16,0,2,0,95,7,3,38,17,0,2,0,29,0,11,39,8,0,22,0,12,45,20,0,19,72,200,32,32,8,2,36,18,0,50,29,113,6,2,1,2,37,22,0,26,5,2,1,2,31,15,0,328,18,16,0,2,12,2,33,125,0,80,921,103,110,18,195,2637,96,16,1071,18,5,26,3994,6,582,6842,29,1763,568,8,30,18,78,18,29,19,47,17,3,32,20,6,18,433,44,212,63,129,74,6,0,67,12,65,1,2,0,29,6135,9,1237,42,9,8936,3,2,6,2,1,2,290,16,0,30,2,3,0,15,3,9,395,2309,106,6,12,4,8,8,9,5991,84,2,70,2,1,3,0,3,1,3,3,2,11,2,0,2,6,2,64,2,3,3,7,2,6,2,27,2,3,2,4,2,0,4,6,2,339,3,24,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,30,2,24,2,7,1845,30,7,5,262,61,147,44,11,6,17,0,322,29,19,43,485,27,229,29,3,0,496,6,2,3,2,1,2,14,2,196,60,67,8,0,1205,3,2,26,2,1,2,0,3,0,2,9,2,3,2,0,2,0,7,0,5,0,2,0,2,0,2,2,2,1,2,0,3,0,2,0,2,0,2,0,2,0,2,1,2,0,3,3,2,6,2,3,2,3,2,0,2,9,2,16,6,2,2,4,2,16,4421,42719,33,4153,7,221,3,5761,15,7472,16,621,2467,541,1507,4938,6,4191];\n/* prettier-ignore */\nconst astralIdentifierCodes = [509,0,227,0,150,4,294,9,1368,2,2,1,6,3,41,2,5,0,166,1,574,3,9,9,7,9,32,4,318,1,80,3,71,10,50,3,123,2,54,14,32,10,3,1,11,3,46,10,8,0,46,9,7,2,37,13,2,9,6,1,45,0,13,2,49,13,9,3,2,11,83,11,7,0,3,0,158,11,6,9,7,3,56,1,2,6,3,1,3,2,10,0,11,1,3,6,4,4,68,8,2,0,3,0,2,3,2,4,2,0,15,1,83,17,10,9,5,0,82,19,13,9,214,6,3,8,28,1,83,16,16,9,82,12,9,9,7,19,58,14,5,9,243,14,166,9,71,5,2,1,3,3,2,0,2,1,13,9,120,6,3,6,4,0,29,9,41,6,2,3,9,0,10,10,47,15,343,9,54,7,2,7,17,9,57,21,2,13,123,5,4,0,2,1,2,6,2,0,9,9,49,4,2,1,2,4,9,9,330,3,10,1,2,0,49,6,4,4,14,10,5350,0,7,14,11465,27,2343,9,87,9,39,4,60,6,26,9,535,9,470,0,2,54,8,3,82,0,12,1,19628,1,4178,9,519,45,3,22,543,4,4,5,9,7,3,6,31,3,149,2,1418,49,513,54,5,49,9,0,15,0,23,4,2,14,1361,6,2,16,3,6,2,1,2,4,101,0,161,6,10,9,357,0,62,13,499,13,245,1,2,9,726,6,110,6,6,9,4759,9,787719,239];\n\n// This has a complexity linear to the value of the code. The\n// assumption is that looking up astral identifier characters is\n// rare.\nfunction isInAstralSet(code: number, set: readonly number[]): boolean {\n let pos = 0x10000;\n for (let i = 0, length = set.length; i < length; i += 2) {\n pos += set[i];\n if (pos > code) return false;\n\n pos += set[i + 1];\n if (pos >= code) return true;\n }\n return false;\n}\n\n// Test whether a given character code starts an identifier.\n\nexport function isIdentifierStart(code: number): boolean {\n if (code < charCodes.uppercaseA) return code === charCodes.dollarSign;\n if (code <= charCodes.uppercaseZ) return true;\n if (code < charCodes.lowercaseA) return code === charCodes.underscore;\n if (code <= charCodes.lowercaseZ) return true;\n if (code <= 0xffff) {\n return (\n code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code))\n );\n }\n return isInAstralSet(code, astralIdentifierStartCodes);\n}\n\n// Test whether a given character is part of an identifier.\n\nexport function isIdentifierChar(code: number): boolean {\n if (code < charCodes.digit0) return code === charCodes.dollarSign;\n if (code < charCodes.colon) return true;\n if (code < charCodes.uppercaseA) return false;\n if (code <= charCodes.uppercaseZ) return true;\n if (code < charCodes.lowercaseA) return code === charCodes.underscore;\n if (code <= charCodes.lowercaseZ) return true;\n if (code <= 0xffff) {\n return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code));\n }\n return (\n isInAstralSet(code, astralIdentifierStartCodes) ||\n isInAstralSet(code, astralIdentifierCodes)\n );\n}\n\n// Test whether a given string is a valid identifier name\n\nexport function isIdentifierName(name: string): boolean {\n let isFirst = true;\n for (let i = 0; i < name.length; i++) {\n // The implementation is based on\n // https://source.chromium.org/chromium/chromium/src/+/master:v8/src/builtins/builtins-string-gen.cc;l=1455;drc=221e331b49dfefadbc6fa40b0c68e6f97606d0b3;bpv=0;bpt=1\n // We reimplement `codePointAt` because `codePointAt` is a V8 builtin which is not inlined by TurboFan (as of M91)\n // since `name` is mostly ASCII, an inlined `charCodeAt` wins here\n let cp = name.charCodeAt(i);\n if ((cp & 0xfc00) === 0xd800 && i + 1 < name.length) {\n const trail = name.charCodeAt(++i);\n if ((trail & 0xfc00) === 0xdc00) {\n cp = 0x10000 + ((cp & 0x3ff) << 10) + (trail & 0x3ff);\n }\n }\n if (isFirst) {\n isFirst = false;\n if (!isIdentifierStart(cp)) {\n return false;\n }\n } else if (!isIdentifierChar(cp)) {\n return false;\n }\n }\n return !isFirst;\n}\n"],"mappings":";;;;;;;;AAaA,IAAIA,4BAA4B,GAAG,8qIAA8qI;AAEjtI,IAAIC,uBAAuB,GAAG,+kFAA+kF;AAE7mF,MAAMC,uBAAuB,GAAG,IAAIC,MAAM,CACxC,GAAG,GAAGH,4BAA4B,GAAG,GACvC,CAAC;AACD,MAAMI,kBAAkB,GAAG,IAAID,MAAM,CACnC,GAAG,GAAGH,4BAA4B,GAAGC,uBAAuB,GAAG,GACjE,CAAC;AAEDD,4BAA4B,GAAGC,uBAAuB,GAAG,IAAI;AAQ7D,MAAMI,0BAA0B,GAAG,CAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,GAAG,EAAC,CAAC,EAAC,EAAE,EAAC,GAAG,EAAC,GAAG,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,IAAI,EAAC,EAAE,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,GAAG,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,GAAG,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,EAAE,EAAC,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,GAAG,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,GAAG,EAAC,IAAI,EAAC,GAAG,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,IAAI,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,IAAI,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,GAAG,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,IAAI,EAAC,KAAK,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,IAAI,EAAC,GAAG,EAAC,IAAI,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,CAAC;AAEjkD,MAAMC,qBAAqB,GAAG,CAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,GAAG,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,GAAG,EAAC,EAAE,EAAC,GAAG,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,EAAE,EAAC,GAAG,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,EAAE,EAAC,CAAC,EAAC,EAAE,EAAC,GAAG,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,EAAE,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC,GAAG,EAA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","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/helper-validator-identifier/lib/index.js b/node_modules/@babel/helper-validator-identifier/lib/index.js new file mode 100644 index 00000000..76b22822 --- /dev/null +++ b/node_modules/@babel/helper-validator-identifier/lib/index.js @@ -0,0 +1,57 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "isIdentifierChar", { + enumerable: true, + get: function () { + return _identifier.isIdentifierChar; + } +}); +Object.defineProperty(exports, "isIdentifierName", { + enumerable: true, + get: function () { + return _identifier.isIdentifierName; + } +}); +Object.defineProperty(exports, "isIdentifierStart", { + enumerable: true, + get: function () { + return _identifier.isIdentifierStart; + } +}); +Object.defineProperty(exports, "isKeyword", { + enumerable: true, + get: function () { + return _keyword.isKeyword; + } +}); +Object.defineProperty(exports, "isReservedWord", { + enumerable: true, + get: function () { + return _keyword.isReservedWord; + } +}); +Object.defineProperty(exports, "isStrictBindOnlyReservedWord", { + enumerable: true, + get: function () { + return _keyword.isStrictBindOnlyReservedWord; + } +}); +Object.defineProperty(exports, "isStrictBindReservedWord", { + enumerable: true, + get: function () { + return _keyword.isStrictBindReservedWord; + } +}); +Object.defineProperty(exports, "isStrictReservedWord", { + enumerable: true, + get: function () { + return _keyword.isStrictReservedWord; + } +}); +var _identifier = require("./identifier.js"); +var _keyword = require("./keyword.js"); + +//# sourceMappingURL=index.js.map diff --git a/node_modules/@babel/helper-validator-identifier/lib/index.js.map b/node_modules/@babel/helper-validator-identifier/lib/index.js.map new file mode 100644 index 00000000..d985f3b9 --- /dev/null +++ b/node_modules/@babel/helper-validator-identifier/lib/index.js.map @@ -0,0 +1 @@ +{"version":3,"names":["_identifier","require","_keyword"],"sources":["../src/index.ts"],"sourcesContent":["export {\n isIdentifierName,\n isIdentifierChar,\n isIdentifierStart,\n} from \"./identifier.ts\";\nexport {\n isReservedWord,\n isStrictBindOnlyReservedWord,\n isStrictBindReservedWord,\n isStrictReservedWord,\n isKeyword,\n} from \"./keyword.ts\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,WAAA,GAAAC,OAAA;AAKA,IAAAC,QAAA,GAAAD,OAAA","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/helper-validator-identifier/lib/keyword.js b/node_modules/@babel/helper-validator-identifier/lib/keyword.js new file mode 100644 index 00000000..054cf847 --- /dev/null +++ b/node_modules/@babel/helper-validator-identifier/lib/keyword.js @@ -0,0 +1,35 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.isKeyword = isKeyword; +exports.isReservedWord = isReservedWord; +exports.isStrictBindOnlyReservedWord = isStrictBindOnlyReservedWord; +exports.isStrictBindReservedWord = isStrictBindReservedWord; +exports.isStrictReservedWord = isStrictReservedWord; +const reservedWords = { + keyword: ["break", "case", "catch", "continue", "debugger", "default", "do", "else", "finally", "for", "function", "if", "return", "switch", "throw", "try", "var", "const", "while", "with", "new", "this", "super", "class", "extends", "export", "import", "null", "true", "false", "in", "instanceof", "typeof", "void", "delete"], + strict: ["implements", "interface", "let", "package", "private", "protected", "public", "static", "yield"], + strictBind: ["eval", "arguments"] +}; +const keywords = new Set(reservedWords.keyword); +const reservedWordsStrictSet = new Set(reservedWords.strict); +const reservedWordsStrictBindSet = new Set(reservedWords.strictBind); +function isReservedWord(word, inModule) { + return inModule && word === "await" || word === "enum"; +} +function isStrictReservedWord(word, inModule) { + return isReservedWord(word, inModule) || reservedWordsStrictSet.has(word); +} +function isStrictBindOnlyReservedWord(word) { + return reservedWordsStrictBindSet.has(word); +} +function isStrictBindReservedWord(word, inModule) { + return isStrictReservedWord(word, inModule) || isStrictBindOnlyReservedWord(word); +} +function isKeyword(word) { + return keywords.has(word); +} + +//# sourceMappingURL=keyword.js.map diff --git a/node_modules/@babel/helper-validator-identifier/lib/keyword.js.map b/node_modules/@babel/helper-validator-identifier/lib/keyword.js.map new file mode 100644 index 00000000..3471f78c --- /dev/null +++ b/node_modules/@babel/helper-validator-identifier/lib/keyword.js.map @@ -0,0 +1 @@ +{"version":3,"names":["reservedWords","keyword","strict","strictBind","keywords","Set","reservedWordsStrictSet","reservedWordsStrictBindSet","isReservedWord","word","inModule","isStrictReservedWord","has","isStrictBindOnlyReservedWord","isStrictBindReservedWord","isKeyword"],"sources":["../src/keyword.ts"],"sourcesContent":["const reservedWords = {\n keyword: [\n \"break\",\n \"case\",\n \"catch\",\n \"continue\",\n \"debugger\",\n \"default\",\n \"do\",\n \"else\",\n \"finally\",\n \"for\",\n \"function\",\n \"if\",\n \"return\",\n \"switch\",\n \"throw\",\n \"try\",\n \"var\",\n \"const\",\n \"while\",\n \"with\",\n \"new\",\n \"this\",\n \"super\",\n \"class\",\n \"extends\",\n \"export\",\n \"import\",\n \"null\",\n \"true\",\n \"false\",\n \"in\",\n \"instanceof\",\n \"typeof\",\n \"void\",\n \"delete\",\n ],\n strict: [\n \"implements\",\n \"interface\",\n \"let\",\n \"package\",\n \"private\",\n \"protected\",\n \"public\",\n \"static\",\n \"yield\",\n ],\n strictBind: [\"eval\", \"arguments\"],\n};\nconst keywords = new Set(reservedWords.keyword);\nconst reservedWordsStrictSet = new Set(reservedWords.strict);\nconst reservedWordsStrictBindSet = new Set(reservedWords.strictBind);\n\n/**\n * Checks if word is a reserved word in non-strict mode\n */\nexport function isReservedWord(word: string, inModule: boolean): boolean {\n return (inModule && word === \"await\") || word === \"enum\";\n}\n\n/**\n * Checks if word is a reserved word in non-binding strict mode\n *\n * Includes non-strict reserved words\n */\nexport function isStrictReservedWord(word: string, inModule: boolean): boolean {\n return isReservedWord(word, inModule) || reservedWordsStrictSet.has(word);\n}\n\n/**\n * Checks if word is a reserved word in binding strict mode, but it is allowed as\n * a normal identifier.\n */\nexport function isStrictBindOnlyReservedWord(word: string): boolean {\n return reservedWordsStrictBindSet.has(word);\n}\n\n/**\n * Checks if word is a reserved word in binding strict mode\n *\n * Includes non-strict reserved words and non-binding strict reserved words\n */\nexport function isStrictBindReservedWord(\n word: string,\n inModule: boolean,\n): boolean {\n return (\n isStrictReservedWord(word, inModule) || isStrictBindOnlyReservedWord(word)\n );\n}\n\nexport function isKeyword(word: string): boolean {\n return keywords.has(word);\n}\n"],"mappings":";;;;;;;;;;AAAA,MAAMA,aAAa,GAAG;EACpBC,OAAO,EAAE,CACP,OAAO,EACP,MAAM,EACN,OAAO,EACP,UAAU,EACV,UAAU,EACV,SAAS,EACT,IAAI,EACJ,MAAM,EACN,SAAS,EACT,KAAK,EACL,UAAU,EACV,IAAI,EACJ,QAAQ,EACR,QAAQ,EACR,OAAO,EACP,KAAK,EACL,KAAK,EACL,OAAO,EACP,OAAO,EACP,MAAM,EACN,KAAK,EACL,MAAM,EACN,OAAO,EACP,OAAO,EACP,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,MAAM,EACN,OAAO,EACP,IAAI,EACJ,YAAY,EACZ,QAAQ,EACR,MAAM,EACN,QAAQ,CACT;EACDC,MAAM,EAAE,CACN,YAAY,EACZ,WAAW,EACX,KAAK,EACL,SAAS,EACT,SAAS,EACT,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,OAAO,CACR;EACDC,UAAU,EAAE,CAAC,MAAM,EAAE,WAAW;AAClC,CAAC;AACD,MAAMC,QAAQ,GAAG,IAAIC,GAAG,CAACL,aAAa,CAACC,OAAO,CAAC;AAC/C,MAAMK,sBAAsB,GAAG,IAAID,GAAG,CAACL,aAAa,CAACE,MAAM,CAAC;AAC5D,MAAMK,0BAA0B,GAAG,IAAIF,GAAG,CAACL,aAAa,CAACG,UAAU,CAAC;AAK7D,SAASK,cAAcA,CAACC,IAAY,EAAEC,QAAiB,EAAW;EACvE,OAAQA,QAAQ,IAAID,IAAI,KAAK,OAAO,IAAKA,IAAI,KAAK,MAAM;AAC1D;AAOO,SAASE,oBAAoBA,CAACF,IAAY,EAAEC,QAAiB,EAAW;EAC7E,OAAOF,cAAc,CAACC,IAAI,EAAEC,QAAQ,CAAC,IAAIJ,sBAAsB,CAACM,GAAG,CAACH,IAAI,CAAC;AAC3E;AAMO,SAASI,4BAA4BA,CAACJ,IAAY,EAAW;EAClE,OAAOF,0BAA0B,CAACK,GAAG,CAACH,IAAI,CAAC;AAC7C;AAOO,SAASK,wBAAwBA,CACtCL,IAAY,EACZC,QAAiB,EACR;EACT,OACEC,oBAAoB,CAACF,IAAI,EAAEC,QAAQ,CAAC,IAAIG,4BAA4B,CAACJ,IAAI,CAAC;AAE9E;AAEO,SAASM,SAASA,CAACN,IAAY,EAAW;EAC/C,OAAOL,QAAQ,CAACQ,GAAG,CAACH,IAAI,CAAC;AAC3B","ignoreList":[]} \ No newline at end of file diff --git a/node_modules/@babel/helper-validator-identifier/package.json b/node_modules/@babel/helper-validator-identifier/package.json new file mode 100644 index 00000000..01477400 --- /dev/null +++ b/node_modules/@babel/helper-validator-identifier/package.json @@ -0,0 +1,31 @@ +{ + "name": "@babel/helper-validator-identifier", + "version": "7.25.9", + "description": "Validate identifier/keywords name", + "repository": { + "type": "git", + "url": "https://github.com/babel/babel.git", + "directory": "packages/babel-helper-validator-identifier" + }, + "license": "MIT", + "publishConfig": { + "access": "public" + }, + "main": "./lib/index.js", + "exports": { + ".": { + "types": "./lib/index.d.ts", + "default": "./lib/index.js" + }, + "./package.json": "./package.json" + }, + "devDependencies": { + "@unicode/unicode-16.0.0": "^1.0.0", + "charcodes": "^0.2.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "author": "The Babel Team (https://babel.dev/team)", + "type": "commonjs" +} \ No newline at end of file diff --git a/node_modules/@lezer/common/LICENSE b/node_modules/@lezer/common/LICENSE new file mode 100644 index 00000000..c21df7e4 --- /dev/null +++ b/node_modules/@lezer/common/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (C) 2018 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/@lezer/common/README.md b/node_modules/@lezer/common/README.md new file mode 100644 index 00000000..aecc3a65 --- /dev/null +++ b/node_modules/@lezer/common/README.md @@ -0,0 +1,14 @@ +# @lezer/common + +[ [**WEBSITE**](http://lezer.codemirror.net) | [**ISSUES**](https://github.com/lezer-parser/lezer/issues) | [**FORUM**](https://discuss.codemirror.net/c/lezer) | [**CHANGELOG**](https://github.com/lezer-parser/common/blob/master/CHANGELOG.md) ] + +[Lezer](https://lezer.codemirror.net/) is an incremental parser system +intended for use in an editor or similar system. + +@lezer/common provides the syntax tree data structure and parser +abstractions for Lezer parsers. + +Its programming interface is documented on [the +website](https://lezer.codemirror.net/docs/ref/#common). + +This code is licensed under an MIT license. diff --git a/node_modules/@lezer/common/dist/index.cjs b/node_modules/@lezer/common/dist/index.cjs new file mode 100644 index 00000000..3cb9315f --- /dev/null +++ b/node_modules/@lezer/common/dist/index.cjs @@ -0,0 +1,2181 @@ +'use strict'; + +/** +The default maximum length of a `TreeBuffer` node. +*/ +const DefaultBufferLength = 1024; +let nextPropID = 0; +class Range { + constructor(from, to) { + this.from = from; + this.to = to; + } +} +/** +Each [node type](#common.NodeType) or [individual tree](#common.Tree) +can have metadata associated with it in props. Instances of this +class represent prop names. +*/ +class NodeProp { + /** + Create a new node prop type. + */ + constructor(config = {}) { + this.id = nextPropID++; + this.perNode = !!config.perNode; + this.deserialize = config.deserialize || (() => { + throw new Error("This node type doesn't define a deserialize function"); + }); + } + /** + This is meant to be used with + [`NodeSet.extend`](#common.NodeSet.extend) or + [`LRParser.configure`](#lr.ParserConfig.props) to compute + prop values for each node type in the set. Takes a [match + object](#common.NodeType^match) or function that returns undefined + if the node type doesn't get this prop, and the prop's value if + it does. + */ + add(match) { + if (this.perNode) + throw new RangeError("Can't add per-node props to node types"); + if (typeof match != "function") + match = NodeType.match(match); + return (type) => { + let result = match(type); + return result === undefined ? null : [this, result]; + }; + } +} +/** +Prop that is used to describe matching delimiters. For opening +delimiters, this holds an array of node names (written as a +space-separated string when declaring this prop in a grammar) +for the node types of closing delimiters that match it. +*/ +NodeProp.closedBy = new NodeProp({ deserialize: str => str.split(" ") }); +/** +The inverse of [`closedBy`](#common.NodeProp^closedBy). This is +attached to closing delimiters, holding an array of node names +of types of matching opening delimiters. +*/ +NodeProp.openedBy = new NodeProp({ deserialize: str => str.split(" ") }); +/** +Used to assign node types to groups (for example, all node +types that represent an expression could be tagged with an +`"Expression"` group). +*/ +NodeProp.group = new NodeProp({ deserialize: str => str.split(" ") }); +/** +Attached to nodes to indicate these should be +[displayed](https://codemirror.net/docs/ref/#language.syntaxTree) +in a bidirectional text isolate, so that direction-neutral +characters on their sides don't incorrectly get associated with +surrounding text. You'll generally want to set this for nodes +that contain arbitrary text, like strings and comments, and for +nodes that appear _inside_ arbitrary text, like HTML tags. When +not given a value, in a grammar declaration, defaults to +`"auto"`. +*/ +NodeProp.isolate = new NodeProp({ deserialize: value => { + if (value && value != "rtl" && value != "ltr" && value != "auto") + throw new RangeError("Invalid value for isolate: " + value); + return value || "auto"; + } }); +/** +The hash of the [context](#lr.ContextTracker.constructor) +that the node was parsed in, if any. Used to limit reuse of +contextual nodes. +*/ +NodeProp.contextHash = new NodeProp({ perNode: true }); +/** +The distance beyond the end of the node that the tokenizer +looked ahead for any of the tokens inside the node. (The LR +parser only stores this when it is larger than 25, for +efficiency reasons.) +*/ +NodeProp.lookAhead = new NodeProp({ perNode: true }); +/** +This per-node prop is used to replace a given node, or part of a +node, with another tree. This is useful to include trees from +different languages in mixed-language parsers. +*/ +NodeProp.mounted = new NodeProp({ perNode: true }); +/** +A mounted tree, which can be [stored](#common.NodeProp^mounted) on +a tree node to indicate that parts of its content are +represented by another tree. +*/ +class MountedTree { + constructor( + /** + The inner tree. + */ + tree, + /** + If this is null, this tree replaces the entire node (it will + be included in the regular iteration instead of its host + node). If not, only the given ranges are considered to be + covered by this tree. This is used for trees that are mixed in + a way that isn't strictly hierarchical. Such mounted trees are + only entered by [`resolveInner`](#common.Tree.resolveInner) + and [`enter`](#common.SyntaxNode.enter). + */ + overlay, + /** + The parser used to create this subtree. + */ + parser) { + this.tree = tree; + this.overlay = overlay; + this.parser = parser; + } + /** + @internal + */ + static get(tree) { + return tree && tree.props && tree.props[NodeProp.mounted.id]; + } +} +const noProps = Object.create(null); +/** +Each node in a syntax tree has a node type associated with it. +*/ +class NodeType { + /** + @internal + */ + constructor( + /** + The name of the node type. Not necessarily unique, but if the + grammar was written properly, different node types with the + same name within a node set should play the same semantic + role. + */ + name, + /** + @internal + */ + props, + /** + The id of this node in its set. Corresponds to the term ids + used in the parser. + */ + id, + /** + @internal + */ + flags = 0) { + this.name = name; + this.props = props; + this.id = id; + this.flags = flags; + } + /** + Define a node type. + */ + static define(spec) { + let props = spec.props && spec.props.length ? Object.create(null) : noProps; + let flags = (spec.top ? 1 /* NodeFlag.Top */ : 0) | (spec.skipped ? 2 /* NodeFlag.Skipped */ : 0) | + (spec.error ? 4 /* NodeFlag.Error */ : 0) | (spec.name == null ? 8 /* NodeFlag.Anonymous */ : 0); + let type = new NodeType(spec.name || "", props, spec.id, flags); + if (spec.props) + for (let src of spec.props) { + if (!Array.isArray(src)) + src = src(type); + if (src) { + if (src[0].perNode) + throw new RangeError("Can't store a per-node prop on a node type"); + props[src[0].id] = src[1]; + } + } + return type; + } + /** + Retrieves a node prop for this type. Will return `undefined` if + the prop isn't present on this node. + */ + prop(prop) { return this.props[prop.id]; } + /** + True when this is the top node of a grammar. + */ + get isTop() { return (this.flags & 1 /* NodeFlag.Top */) > 0; } + /** + True when this node is produced by a skip rule. + */ + get isSkipped() { return (this.flags & 2 /* NodeFlag.Skipped */) > 0; } + /** + Indicates whether this is an error node. + */ + get isError() { return (this.flags & 4 /* NodeFlag.Error */) > 0; } + /** + When true, this node type doesn't correspond to a user-declared + named node, for example because it is used to cache repetition. + */ + get isAnonymous() { return (this.flags & 8 /* NodeFlag.Anonymous */) > 0; } + /** + Returns true when this node's name or one of its + [groups](#common.NodeProp^group) matches the given string. + */ + is(name) { + if (typeof name == 'string') { + if (this.name == name) + return true; + let group = this.prop(NodeProp.group); + return group ? group.indexOf(name) > -1 : false; + } + return this.id == name; + } + /** + Create a function from node types to arbitrary values by + specifying an object whose property names are node or + [group](#common.NodeProp^group) names. Often useful with + [`NodeProp.add`](#common.NodeProp.add). You can put multiple + names, separated by spaces, in a single property name to map + multiple node names to a single value. + */ + static match(map) { + let direct = Object.create(null); + for (let prop in map) + for (let name of prop.split(" ")) + direct[name] = map[prop]; + return (node) => { + for (let groups = node.prop(NodeProp.group), i = -1; i < (groups ? groups.length : 0); i++) { + let found = direct[i < 0 ? node.name : groups[i]]; + if (found) + return found; + } + }; + } +} +/** +An empty dummy node type to use when no actual type is available. +*/ +NodeType.none = new NodeType("", Object.create(null), 0, 8 /* NodeFlag.Anonymous */); +/** +A node set holds a collection of node types. It is used to +compactly represent trees by storing their type ids, rather than a +full pointer to the type object, in a numeric array. Each parser +[has](#lr.LRParser.nodeSet) a node set, and [tree +buffers](#common.TreeBuffer) can only store collections of nodes +from the same set. A set can have a maximum of 2**16 (65536) node +types in it, so that the ids fit into 16-bit typed array slots. +*/ +class NodeSet { + /** + Create a set with the given types. The `id` property of each + type should correspond to its position within the array. + */ + constructor( + /** + The node types in this set, by id. + */ + types) { + this.types = types; + for (let i = 0; i < types.length; i++) + if (types[i].id != i) + throw new RangeError("Node type ids should correspond to array positions when creating a node set"); + } + /** + Create a copy of this set with some node properties added. The + arguments to this method can be created with + [`NodeProp.add`](#common.NodeProp.add). + */ + extend(...props) { + let newTypes = []; + for (let type of this.types) { + let newProps = null; + for (let source of props) { + let add = source(type); + if (add) { + if (!newProps) + newProps = Object.assign({}, type.props); + newProps[add[0].id] = add[1]; + } + } + newTypes.push(newProps ? new NodeType(type.name, newProps, type.id, type.flags) : type); + } + return new NodeSet(newTypes); + } +} +const CachedNode = new WeakMap(), CachedInnerNode = new WeakMap(); +/** +Options that control iteration. Can be combined with the `|` +operator to enable multiple ones. +*/ +exports.IterMode = void 0; +(function (IterMode) { + /** + When enabled, iteration will only visit [`Tree`](#common.Tree) + objects, not nodes packed into + [`TreeBuffer`](#common.TreeBuffer)s. + */ + IterMode[IterMode["ExcludeBuffers"] = 1] = "ExcludeBuffers"; + /** + Enable this to make iteration include anonymous nodes (such as + the nodes that wrap repeated grammar constructs into a balanced + tree). + */ + IterMode[IterMode["IncludeAnonymous"] = 2] = "IncludeAnonymous"; + /** + By default, regular [mounted](#common.NodeProp^mounted) nodes + replace their base node in iteration. Enable this to ignore them + instead. + */ + IterMode[IterMode["IgnoreMounts"] = 4] = "IgnoreMounts"; + /** + This option only applies in + [`enter`](#common.SyntaxNode.enter)-style methods. It tells the + library to not enter mounted overlays if one covers the given + position. + */ + IterMode[IterMode["IgnoreOverlays"] = 8] = "IgnoreOverlays"; +})(exports.IterMode || (exports.IterMode = {})); +/** +A piece of syntax tree. There are two ways to approach these +trees: the way they are actually stored in memory, and the +convenient way. + +Syntax trees are stored as a tree of `Tree` and `TreeBuffer` +objects. By packing detail information into `TreeBuffer` leaf +nodes, the representation is made a lot more memory-efficient. + +However, when you want to actually work with tree nodes, this +representation is very awkward, so most client code will want to +use the [`TreeCursor`](#common.TreeCursor) or +[`SyntaxNode`](#common.SyntaxNode) interface instead, which provides +a view on some part of this data structure, and can be used to +move around to adjacent nodes. +*/ +class Tree { + /** + Construct a new tree. See also [`Tree.build`](#common.Tree^build). + */ + constructor( + /** + The type of the top node. + */ + type, + /** + This node's child nodes. + */ + children, + /** + The positions (offsets relative to the start of this tree) of + the children. + */ + positions, + /** + The total length of this tree + */ + length, + /** + Per-node [node props](#common.NodeProp) to associate with this node. + */ + props) { + this.type = type; + this.children = children; + this.positions = positions; + this.length = length; + /** + @internal + */ + this.props = null; + if (props && props.length) { + this.props = Object.create(null); + for (let [prop, value] of props) + this.props[typeof prop == "number" ? prop : prop.id] = value; + } + } + /** + @internal + */ + toString() { + let mounted = MountedTree.get(this); + if (mounted && !mounted.overlay) + return mounted.tree.toString(); + let children = ""; + for (let ch of this.children) { + let str = ch.toString(); + if (str) { + if (children) + children += ","; + children += str; + } + } + return !this.type.name ? children : + (/\W/.test(this.type.name) && !this.type.isError ? JSON.stringify(this.type.name) : this.type.name) + + (children.length ? "(" + children + ")" : ""); + } + /** + Get a [tree cursor](#common.TreeCursor) positioned at the top of + the tree. Mode can be used to [control](#common.IterMode) which + nodes the cursor visits. + */ + cursor(mode = 0) { + return new TreeCursor(this.topNode, mode); + } + /** + Get a [tree cursor](#common.TreeCursor) pointing into this tree + at the given position and side (see + [`moveTo`](#common.TreeCursor.moveTo). + */ + cursorAt(pos, side = 0, mode = 0) { + let scope = CachedNode.get(this) || this.topNode; + let cursor = new TreeCursor(scope); + cursor.moveTo(pos, side); + CachedNode.set(this, cursor._tree); + return cursor; + } + /** + Get a [syntax node](#common.SyntaxNode) object for the top of the + tree. + */ + get topNode() { + return new TreeNode(this, 0, 0, null); + } + /** + Get the [syntax node](#common.SyntaxNode) at the given position. + If `side` is -1, this will move into nodes that end at the + position. If 1, it'll move into nodes that start at the + position. With 0, it'll only enter nodes that cover the position + from both sides. + + Note that this will not enter + [overlays](#common.MountedTree.overlay), and you often want + [`resolveInner`](#common.Tree.resolveInner) instead. + */ + resolve(pos, side = 0) { + let node = resolveNode(CachedNode.get(this) || this.topNode, pos, side, false); + CachedNode.set(this, node); + return node; + } + /** + Like [`resolve`](#common.Tree.resolve), but will enter + [overlaid](#common.MountedTree.overlay) nodes, producing a syntax node + pointing into the innermost overlaid tree at the given position + (with parent links going through all parent structure, including + the host trees). + */ + resolveInner(pos, side = 0) { + let node = resolveNode(CachedInnerNode.get(this) || this.topNode, pos, side, true); + CachedInnerNode.set(this, node); + return node; + } + /** + In some situations, it can be useful to iterate through all + nodes around a position, including those in overlays that don't + directly cover the position. This method gives you an iterator + that will produce all nodes, from small to big, around the given + position. + */ + resolveStack(pos, side = 0) { + return stackIterator(this, pos, side); + } + /** + Iterate over the tree and its children, calling `enter` for any + node that touches the `from`/`to` region (if given) before + running over such a node's children, and `leave` (if given) when + leaving the node. When `enter` returns `false`, that node will + not have its children iterated over (or `leave` called). + */ + iterate(spec) { + let { enter, leave, from = 0, to = this.length } = spec; + let mode = spec.mode || 0, anon = (mode & exports.IterMode.IncludeAnonymous) > 0; + for (let c = this.cursor(mode | exports.IterMode.IncludeAnonymous);;) { + let entered = false; + if (c.from <= to && c.to >= from && (!anon && c.type.isAnonymous || enter(c) !== false)) { + if (c.firstChild()) + continue; + entered = true; + } + for (;;) { + if (entered && leave && (anon || !c.type.isAnonymous)) + leave(c); + if (c.nextSibling()) + break; + if (!c.parent()) + return; + entered = true; + } + } + } + /** + Get the value of the given [node prop](#common.NodeProp) for this + node. Works with both per-node and per-type props. + */ + prop(prop) { + return !prop.perNode ? this.type.prop(prop) : this.props ? this.props[prop.id] : undefined; + } + /** + Returns the node's [per-node props](#common.NodeProp.perNode) in a + format that can be passed to the [`Tree`](#common.Tree) + constructor. + */ + get propValues() { + let result = []; + if (this.props) + for (let id in this.props) + result.push([+id, this.props[id]]); + return result; + } + /** + Balance the direct children of this tree, producing a copy of + which may have children grouped into subtrees with type + [`NodeType.none`](#common.NodeType^none). + */ + balance(config = {}) { + return this.children.length <= 8 /* Balance.BranchFactor */ ? this : + balanceRange(NodeType.none, this.children, this.positions, 0, this.children.length, 0, this.length, (children, positions, length) => new Tree(this.type, children, positions, length, this.propValues), config.makeTree || ((children, positions, length) => new Tree(NodeType.none, children, positions, length))); + } + /** + Build a tree from a postfix-ordered buffer of node information, + or a cursor over such a buffer. + */ + static build(data) { return buildTree(data); } +} +/** +The empty tree +*/ +Tree.empty = new Tree(NodeType.none, [], [], 0); +class FlatBufferCursor { + constructor(buffer, index) { + this.buffer = buffer; + this.index = index; + } + get id() { return this.buffer[this.index - 4]; } + get start() { return this.buffer[this.index - 3]; } + get end() { return this.buffer[this.index - 2]; } + get size() { return this.buffer[this.index - 1]; } + get pos() { return this.index; } + next() { this.index -= 4; } + fork() { return new FlatBufferCursor(this.buffer, this.index); } +} +/** +Tree buffers contain (type, start, end, endIndex) quads for each +node. In such a buffer, nodes are stored in prefix order (parents +before children, with the endIndex of the parent indicating which +children belong to it). +*/ +class TreeBuffer { + /** + Create a tree buffer. + */ + constructor( + /** + The buffer's content. + */ + buffer, + /** + The total length of the group of nodes in the buffer. + */ + length, + /** + The node set used in this buffer. + */ + set) { + this.buffer = buffer; + this.length = length; + this.set = set; + } + /** + @internal + */ + get type() { return NodeType.none; } + /** + @internal + */ + toString() { + let result = []; + for (let index = 0; index < this.buffer.length;) { + result.push(this.childString(index)); + index = this.buffer[index + 3]; + } + return result.join(","); + } + /** + @internal + */ + childString(index) { + let id = this.buffer[index], endIndex = this.buffer[index + 3]; + let type = this.set.types[id], result = type.name; + if (/\W/.test(result) && !type.isError) + result = JSON.stringify(result); + index += 4; + if (endIndex == index) + return result; + let children = []; + while (index < endIndex) { + children.push(this.childString(index)); + index = this.buffer[index + 3]; + } + return result + "(" + children.join(",") + ")"; + } + /** + @internal + */ + findChild(startIndex, endIndex, dir, pos, side) { + let { buffer } = this, pick = -1; + for (let i = startIndex; i != endIndex; i = buffer[i + 3]) { + if (checkSide(side, pos, buffer[i + 1], buffer[i + 2])) { + pick = i; + if (dir > 0) + break; + } + } + return pick; + } + /** + @internal + */ + slice(startI, endI, from) { + let b = this.buffer; + let copy = new Uint16Array(endI - startI), len = 0; + for (let i = startI, j = 0; i < endI;) { + copy[j++] = b[i++]; + copy[j++] = b[i++] - from; + let to = copy[j++] = b[i++] - from; + copy[j++] = b[i++] - startI; + len = Math.max(len, to); + } + return new TreeBuffer(copy, len, this.set); + } +} +function checkSide(side, pos, from, to) { + switch (side) { + case -2 /* Side.Before */: return from < pos; + case -1 /* Side.AtOrBefore */: return to >= pos && from < pos; + case 0 /* Side.Around */: return from < pos && to > pos; + case 1 /* Side.AtOrAfter */: return from <= pos && to > pos; + case 2 /* Side.After */: return to > pos; + case 4 /* Side.DontCare */: return true; + } +} +function resolveNode(node, pos, side, overlays) { + var _a; + // Move up to a node that actually holds the position, if possible + while (node.from == node.to || + (side < 1 ? node.from >= pos : node.from > pos) || + (side > -1 ? node.to <= pos : node.to < pos)) { + let parent = !overlays && node instanceof TreeNode && node.index < 0 ? null : node.parent; + if (!parent) + return node; + node = parent; + } + let mode = overlays ? 0 : exports.IterMode.IgnoreOverlays; + // Must go up out of overlays when those do not overlap with pos + if (overlays) + for (let scan = node, parent = scan.parent; parent; scan = parent, parent = scan.parent) { + if (scan instanceof TreeNode && scan.index < 0 && ((_a = parent.enter(pos, side, mode)) === null || _a === void 0 ? void 0 : _a.from) != scan.from) + node = parent; + } + for (;;) { + let inner = node.enter(pos, side, mode); + if (!inner) + return node; + node = inner; + } +} +class BaseNode { + cursor(mode = 0) { return new TreeCursor(this, mode); } + getChild(type, before = null, after = null) { + let r = getChildren(this, type, before, after); + return r.length ? r[0] : null; + } + getChildren(type, before = null, after = null) { + return getChildren(this, type, before, after); + } + resolve(pos, side = 0) { + return resolveNode(this, pos, side, false); + } + resolveInner(pos, side = 0) { + return resolveNode(this, pos, side, true); + } + matchContext(context) { + return matchNodeContext(this.parent, context); + } + enterUnfinishedNodesBefore(pos) { + let scan = this.childBefore(pos), node = this; + while (scan) { + let last = scan.lastChild; + if (!last || last.to != scan.to) + break; + if (last.type.isError && last.from == last.to) { + node = scan; + scan = last.prevSibling; + } + else { + scan = last; + } + } + return node; + } + get node() { return this; } + get next() { return this.parent; } +} +class TreeNode extends BaseNode { + constructor(_tree, from, + // Index in parent node, set to -1 if the node is not a direct child of _parent.node (overlay) + index, _parent) { + super(); + this._tree = _tree; + this.from = from; + this.index = index; + this._parent = _parent; + } + get type() { return this._tree.type; } + get name() { return this._tree.type.name; } + get to() { return this.from + this._tree.length; } + nextChild(i, dir, pos, side, mode = 0) { + for (let parent = this;;) { + for (let { children, positions } = parent._tree, e = dir > 0 ? children.length : -1; i != e; i += dir) { + let next = children[i], start = positions[i] + parent.from; + if (!checkSide(side, pos, start, start + next.length)) + continue; + if (next instanceof TreeBuffer) { + if (mode & exports.IterMode.ExcludeBuffers) + continue; + let index = next.findChild(0, next.buffer.length, dir, pos - start, side); + if (index > -1) + return new BufferNode(new BufferContext(parent, next, i, start), null, index); + } + else if ((mode & exports.IterMode.IncludeAnonymous) || (!next.type.isAnonymous || hasChild(next))) { + let mounted; + if (!(mode & exports.IterMode.IgnoreMounts) && (mounted = MountedTree.get(next)) && !mounted.overlay) + return new TreeNode(mounted.tree, start, i, parent); + let inner = new TreeNode(next, start, i, parent); + return (mode & exports.IterMode.IncludeAnonymous) || !inner.type.isAnonymous ? inner + : inner.nextChild(dir < 0 ? next.children.length - 1 : 0, dir, pos, side); + } + } + if ((mode & exports.IterMode.IncludeAnonymous) || !parent.type.isAnonymous) + return null; + if (parent.index >= 0) + i = parent.index + dir; + else + i = dir < 0 ? -1 : parent._parent._tree.children.length; + parent = parent._parent; + if (!parent) + return null; + } + } + get firstChild() { return this.nextChild(0, 1, 0, 4 /* Side.DontCare */); } + get lastChild() { return this.nextChild(this._tree.children.length - 1, -1, 0, 4 /* Side.DontCare */); } + childAfter(pos) { return this.nextChild(0, 1, pos, 2 /* Side.After */); } + childBefore(pos) { return this.nextChild(this._tree.children.length - 1, -1, pos, -2 /* Side.Before */); } + enter(pos, side, mode = 0) { + let mounted; + if (!(mode & exports.IterMode.IgnoreOverlays) && (mounted = MountedTree.get(this._tree)) && mounted.overlay) { + let rPos = pos - this.from; + for (let { from, to } of mounted.overlay) { + if ((side > 0 ? from <= rPos : from < rPos) && + (side < 0 ? to >= rPos : to > rPos)) + return new TreeNode(mounted.tree, mounted.overlay[0].from + this.from, -1, this); + } + } + return this.nextChild(0, 1, pos, side, mode); + } + nextSignificantParent() { + let val = this; + while (val.type.isAnonymous && val._parent) + val = val._parent; + return val; + } + get parent() { + return this._parent ? this._parent.nextSignificantParent() : null; + } + get nextSibling() { + return this._parent && this.index >= 0 ? this._parent.nextChild(this.index + 1, 1, 0, 4 /* Side.DontCare */) : null; + } + get prevSibling() { + return this._parent && this.index >= 0 ? this._parent.nextChild(this.index - 1, -1, 0, 4 /* Side.DontCare */) : null; + } + get tree() { return this._tree; } + toTree() { return this._tree; } + /** + @internal + */ + toString() { return this._tree.toString(); } +} +function getChildren(node, type, before, after) { + let cur = node.cursor(), result = []; + if (!cur.firstChild()) + return result; + if (before != null) + for (let found = false; !found;) { + found = cur.type.is(before); + if (!cur.nextSibling()) + return result; + } + for (;;) { + if (after != null && cur.type.is(after)) + return result; + if (cur.type.is(type)) + result.push(cur.node); + if (!cur.nextSibling()) + return after == null ? result : []; + } +} +function matchNodeContext(node, context, i = context.length - 1) { + for (let p = node; i >= 0; p = p.parent) { + if (!p) + return false; + if (!p.type.isAnonymous) { + if (context[i] && context[i] != p.name) + return false; + i--; + } + } + return true; +} +class BufferContext { + constructor(parent, buffer, index, start) { + this.parent = parent; + this.buffer = buffer; + this.index = index; + this.start = start; + } +} +class BufferNode extends BaseNode { + get name() { return this.type.name; } + get from() { return this.context.start + this.context.buffer.buffer[this.index + 1]; } + get to() { return this.context.start + this.context.buffer.buffer[this.index + 2]; } + constructor(context, _parent, index) { + super(); + this.context = context; + this._parent = _parent; + this.index = index; + this.type = context.buffer.set.types[context.buffer.buffer[index]]; + } + child(dir, pos, side) { + let { buffer } = this.context; + let index = buffer.findChild(this.index + 4, buffer.buffer[this.index + 3], dir, pos - this.context.start, side); + return index < 0 ? null : new BufferNode(this.context, this, index); + } + get firstChild() { return this.child(1, 0, 4 /* Side.DontCare */); } + get lastChild() { return this.child(-1, 0, 4 /* Side.DontCare */); } + childAfter(pos) { return this.child(1, pos, 2 /* Side.After */); } + childBefore(pos) { return this.child(-1, pos, -2 /* Side.Before */); } + enter(pos, side, mode = 0) { + if (mode & exports.IterMode.ExcludeBuffers) + return null; + let { buffer } = this.context; + let index = buffer.findChild(this.index + 4, buffer.buffer[this.index + 3], side > 0 ? 1 : -1, pos - this.context.start, side); + return index < 0 ? null : new BufferNode(this.context, this, index); + } + get parent() { + return this._parent || this.context.parent.nextSignificantParent(); + } + externalSibling(dir) { + return this._parent ? null : this.context.parent.nextChild(this.context.index + dir, dir, 0, 4 /* Side.DontCare */); + } + get nextSibling() { + let { buffer } = this.context; + let after = buffer.buffer[this.index + 3]; + if (after < (this._parent ? buffer.buffer[this._parent.index + 3] : buffer.buffer.length)) + return new BufferNode(this.context, this._parent, after); + return this.externalSibling(1); + } + get prevSibling() { + let { buffer } = this.context; + let parentStart = this._parent ? this._parent.index + 4 : 0; + if (this.index == parentStart) + return this.externalSibling(-1); + return new BufferNode(this.context, this._parent, buffer.findChild(parentStart, this.index, -1, 0, 4 /* Side.DontCare */)); + } + get tree() { return null; } + toTree() { + let children = [], positions = []; + let { buffer } = this.context; + let startI = this.index + 4, endI = buffer.buffer[this.index + 3]; + if (endI > startI) { + let from = buffer.buffer[this.index + 1]; + children.push(buffer.slice(startI, endI, from)); + positions.push(0); + } + return new Tree(this.type, children, positions, this.to - this.from); + } + /** + @internal + */ + toString() { return this.context.buffer.childString(this.index); } +} +function iterStack(heads) { + if (!heads.length) + return null; + let pick = 0, picked = heads[0]; + for (let i = 1; i < heads.length; i++) { + let node = heads[i]; + if (node.from > picked.from || node.to < picked.to) { + picked = node; + pick = i; + } + } + let next = picked instanceof TreeNode && picked.index < 0 ? null : picked.parent; + let newHeads = heads.slice(); + if (next) + newHeads[pick] = next; + else + newHeads.splice(pick, 1); + return new StackIterator(newHeads, picked); +} +class StackIterator { + constructor(heads, node) { + this.heads = heads; + this.node = node; + } + get next() { return iterStack(this.heads); } +} +function stackIterator(tree, pos, side) { + let inner = tree.resolveInner(pos, side), layers = null; + for (let scan = inner instanceof TreeNode ? inner : inner.context.parent; scan; scan = scan.parent) { + if (scan.index < 0) { // This is an overlay root + let parent = scan.parent; + (layers || (layers = [inner])).push(parent.resolve(pos, side)); + scan = parent; + } + else { + let mount = MountedTree.get(scan.tree); + // Relevant overlay branching off + if (mount && mount.overlay && mount.overlay[0].from <= pos && mount.overlay[mount.overlay.length - 1].to >= pos) { + let root = new TreeNode(mount.tree, mount.overlay[0].from + scan.from, -1, scan); + (layers || (layers = [inner])).push(resolveNode(root, pos, side, false)); + } + } + } + return layers ? iterStack(layers) : inner; +} +/** +A tree cursor object focuses on a given node in a syntax tree, and +allows you to move to adjacent nodes. +*/ +class TreeCursor { + /** + Shorthand for `.type.name`. + */ + get name() { return this.type.name; } + /** + @internal + */ + constructor(node, + /** + @internal + */ + mode = 0) { + this.mode = mode; + /** + @internal + */ + this.buffer = null; + this.stack = []; + /** + @internal + */ + this.index = 0; + this.bufferNode = null; + if (node instanceof TreeNode) { + this.yieldNode(node); + } + else { + this._tree = node.context.parent; + this.buffer = node.context; + for (let n = node._parent; n; n = n._parent) + this.stack.unshift(n.index); + this.bufferNode = node; + this.yieldBuf(node.index); + } + } + yieldNode(node) { + if (!node) + return false; + this._tree = node; + this.type = node.type; + this.from = node.from; + this.to = node.to; + return true; + } + yieldBuf(index, type) { + this.index = index; + let { start, buffer } = this.buffer; + this.type = type || buffer.set.types[buffer.buffer[index]]; + this.from = start + buffer.buffer[index + 1]; + this.to = start + buffer.buffer[index + 2]; + return true; + } + /** + @internal + */ + yield(node) { + if (!node) + return false; + if (node instanceof TreeNode) { + this.buffer = null; + return this.yieldNode(node); + } + this.buffer = node.context; + return this.yieldBuf(node.index, node.type); + } + /** + @internal + */ + toString() { + return this.buffer ? this.buffer.buffer.childString(this.index) : this._tree.toString(); + } + /** + @internal + */ + enterChild(dir, pos, side) { + if (!this.buffer) + return this.yield(this._tree.nextChild(dir < 0 ? this._tree._tree.children.length - 1 : 0, dir, pos, side, this.mode)); + let { buffer } = this.buffer; + let index = buffer.findChild(this.index + 4, buffer.buffer[this.index + 3], dir, pos - this.buffer.start, side); + if (index < 0) + return false; + this.stack.push(this.index); + return this.yieldBuf(index); + } + /** + Move the cursor to this node's first child. When this returns + false, the node has no child, and the cursor has not been moved. + */ + firstChild() { return this.enterChild(1, 0, 4 /* Side.DontCare */); } + /** + Move the cursor to this node's last child. + */ + lastChild() { return this.enterChild(-1, 0, 4 /* Side.DontCare */); } + /** + Move the cursor to the first child that ends after `pos`. + */ + childAfter(pos) { return this.enterChild(1, pos, 2 /* Side.After */); } + /** + Move to the last child that starts before `pos`. + */ + childBefore(pos) { return this.enterChild(-1, pos, -2 /* Side.Before */); } + /** + Move the cursor to the child around `pos`. If side is -1 the + child may end at that position, when 1 it may start there. This + will also enter [overlaid](#common.MountedTree.overlay) + [mounted](#common.NodeProp^mounted) trees unless `overlays` is + set to false. + */ + enter(pos, side, mode = this.mode) { + if (!this.buffer) + return this.yield(this._tree.enter(pos, side, mode)); + return mode & exports.IterMode.ExcludeBuffers ? false : this.enterChild(1, pos, side); + } + /** + Move to the node's parent node, if this isn't the top node. + */ + parent() { + if (!this.buffer) + return this.yieldNode((this.mode & exports.IterMode.IncludeAnonymous) ? this._tree._parent : this._tree.parent); + if (this.stack.length) + return this.yieldBuf(this.stack.pop()); + let parent = (this.mode & exports.IterMode.IncludeAnonymous) ? this.buffer.parent : this.buffer.parent.nextSignificantParent(); + this.buffer = null; + return this.yieldNode(parent); + } + /** + @internal + */ + sibling(dir) { + if (!this.buffer) + return !this._tree._parent ? false + : this.yield(this._tree.index < 0 ? null + : this._tree._parent.nextChild(this._tree.index + dir, dir, 0, 4 /* Side.DontCare */, this.mode)); + let { buffer } = this.buffer, d = this.stack.length - 1; + if (dir < 0) { + let parentStart = d < 0 ? 0 : this.stack[d] + 4; + if (this.index != parentStart) + return this.yieldBuf(buffer.findChild(parentStart, this.index, -1, 0, 4 /* Side.DontCare */)); + } + else { + let after = buffer.buffer[this.index + 3]; + if (after < (d < 0 ? buffer.buffer.length : buffer.buffer[this.stack[d] + 3])) + return this.yieldBuf(after); + } + return d < 0 ? this.yield(this.buffer.parent.nextChild(this.buffer.index + dir, dir, 0, 4 /* Side.DontCare */, this.mode)) : false; + } + /** + Move to this node's next sibling, if any. + */ + nextSibling() { return this.sibling(1); } + /** + Move to this node's previous sibling, if any. + */ + prevSibling() { return this.sibling(-1); } + atLastNode(dir) { + let index, parent, { buffer } = this; + if (buffer) { + if (dir > 0) { + if (this.index < buffer.buffer.buffer.length) + return false; + } + else { + for (let i = 0; i < this.index; i++) + if (buffer.buffer.buffer[i + 3] < this.index) + return false; + } + ({ index, parent } = buffer); + } + else { + ({ index, _parent: parent } = this._tree); + } + for (; parent; { index, _parent: parent } = parent) { + if (index > -1) + for (let i = index + dir, e = dir < 0 ? -1 : parent._tree.children.length; i != e; i += dir) { + let child = parent._tree.children[i]; + if ((this.mode & exports.IterMode.IncludeAnonymous) || + child instanceof TreeBuffer || + !child.type.isAnonymous || + hasChild(child)) + return false; + } + } + return true; + } + move(dir, enter) { + if (enter && this.enterChild(dir, 0, 4 /* Side.DontCare */)) + return true; + for (;;) { + if (this.sibling(dir)) + return true; + if (this.atLastNode(dir) || !this.parent()) + return false; + } + } + /** + Move to the next node in a + [pre-order](https://en.wikipedia.org/wiki/Tree_traversal#Pre-order,_NLR) + traversal, going from a node to its first child or, if the + current node is empty or `enter` is false, its next sibling or + the next sibling of the first parent node that has one. + */ + next(enter = true) { return this.move(1, enter); } + /** + Move to the next node in a last-to-first pre-order traversal. A + node is followed by its last child or, if it has none, its + previous sibling or the previous sibling of the first parent + node that has one. + */ + prev(enter = true) { return this.move(-1, enter); } + /** + Move the cursor to the innermost node that covers `pos`. If + `side` is -1, it will enter nodes that end at `pos`. If it is 1, + it will enter nodes that start at `pos`. + */ + moveTo(pos, side = 0) { + // Move up to a node that actually holds the position, if possible + while (this.from == this.to || + (side < 1 ? this.from >= pos : this.from > pos) || + (side > -1 ? this.to <= pos : this.to < pos)) + if (!this.parent()) + break; + // Then scan down into child nodes as far as possible + while (this.enterChild(1, pos, side)) { } + return this; + } + /** + Get a [syntax node](#common.SyntaxNode) at the cursor's current + position. + */ + get node() { + if (!this.buffer) + return this._tree; + let cache = this.bufferNode, result = null, depth = 0; + if (cache && cache.context == this.buffer) { + scan: for (let index = this.index, d = this.stack.length; d >= 0;) { + for (let c = cache; c; c = c._parent) + if (c.index == index) { + if (index == this.index) + return c; + result = c; + depth = d + 1; + break scan; + } + index = this.stack[--d]; + } + } + for (let i = depth; i < this.stack.length; i++) + result = new BufferNode(this.buffer, result, this.stack[i]); + return this.bufferNode = new BufferNode(this.buffer, result, this.index); + } + /** + Get the [tree](#common.Tree) that represents the current node, if + any. Will return null when the node is in a [tree + buffer](#common.TreeBuffer). + */ + get tree() { + return this.buffer ? null : this._tree._tree; + } + /** + Iterate over the current node and all its descendants, calling + `enter` when entering a node and `leave`, if given, when leaving + one. When `enter` returns `false`, any children of that node are + skipped, and `leave` isn't called for it. + */ + iterate(enter, leave) { + for (let depth = 0;;) { + let mustLeave = false; + if (this.type.isAnonymous || enter(this) !== false) { + if (this.firstChild()) { + depth++; + continue; + } + if (!this.type.isAnonymous) + mustLeave = true; + } + for (;;) { + if (mustLeave && leave) + leave(this); + mustLeave = this.type.isAnonymous; + if (!depth) + return; + if (this.nextSibling()) + break; + this.parent(); + depth--; + mustLeave = true; + } + } + } + /** + Test whether the current node matches a given context—a sequence + of direct parent node names. Empty strings in the context array + are treated as wildcards. + */ + matchContext(context) { + if (!this.buffer) + return matchNodeContext(this.node.parent, context); + let { buffer } = this.buffer, { types } = buffer.set; + for (let i = context.length - 1, d = this.stack.length - 1; i >= 0; d--) { + if (d < 0) + return matchNodeContext(this._tree, context, i); + let type = types[buffer.buffer[this.stack[d]]]; + if (!type.isAnonymous) { + if (context[i] && context[i] != type.name) + return false; + i--; + } + } + return true; + } +} +function hasChild(tree) { + return tree.children.some(ch => ch instanceof TreeBuffer || !ch.type.isAnonymous || hasChild(ch)); +} +function buildTree(data) { + var _a; + let { buffer, nodeSet, maxBufferLength = DefaultBufferLength, reused = [], minRepeatType = nodeSet.types.length } = data; + let cursor = Array.isArray(buffer) ? new FlatBufferCursor(buffer, buffer.length) : buffer; + let types = nodeSet.types; + let contextHash = 0, lookAhead = 0; + function takeNode(parentStart, minPos, children, positions, inRepeat, depth) { + let { id, start, end, size } = cursor; + let lookAheadAtStart = lookAhead, contextAtStart = contextHash; + while (size < 0) { + cursor.next(); + if (size == -1 /* SpecialRecord.Reuse */) { + let node = reused[id]; + children.push(node); + positions.push(start - parentStart); + return; + } + else if (size == -3 /* SpecialRecord.ContextChange */) { // Context change + contextHash = id; + return; + } + else if (size == -4 /* SpecialRecord.LookAhead */) { + lookAhead = id; + return; + } + else { + throw new RangeError(`Unrecognized record size: ${size}`); + } + } + let type = types[id], node, buffer; + let startPos = start - parentStart; + if (end - start <= maxBufferLength && (buffer = findBufferSize(cursor.pos - minPos, inRepeat))) { + // Small enough for a buffer, and no reused nodes inside + let data = new Uint16Array(buffer.size - buffer.skip); + let endPos = cursor.pos - buffer.size, index = data.length; + while (cursor.pos > endPos) + index = copyToBuffer(buffer.start, data, index); + node = new TreeBuffer(data, end - buffer.start, nodeSet); + startPos = buffer.start - parentStart; + } + else { // Make it a node + let endPos = cursor.pos - size; + cursor.next(); + let localChildren = [], localPositions = []; + let localInRepeat = id >= minRepeatType ? id : -1; + let lastGroup = 0, lastEnd = end; + while (cursor.pos > endPos) { + if (localInRepeat >= 0 && cursor.id == localInRepeat && cursor.size >= 0) { + if (cursor.end <= lastEnd - maxBufferLength) { + makeRepeatLeaf(localChildren, localPositions, start, lastGroup, cursor.end, lastEnd, localInRepeat, lookAheadAtStart, contextAtStart); + lastGroup = localChildren.length; + lastEnd = cursor.end; + } + cursor.next(); + } + else if (depth > 2500 /* CutOff.Depth */) { + takeFlatNode(start, endPos, localChildren, localPositions); + } + else { + takeNode(start, endPos, localChildren, localPositions, localInRepeat, depth + 1); + } + } + if (localInRepeat >= 0 && lastGroup > 0 && lastGroup < localChildren.length) + makeRepeatLeaf(localChildren, localPositions, start, lastGroup, start, lastEnd, localInRepeat, lookAheadAtStart, contextAtStart); + localChildren.reverse(); + localPositions.reverse(); + if (localInRepeat > -1 && lastGroup > 0) { + let make = makeBalanced(type, contextAtStart); + node = balanceRange(type, localChildren, localPositions, 0, localChildren.length, 0, end - start, make, make); + } + else { + node = makeTree(type, localChildren, localPositions, end - start, lookAheadAtStart - end, contextAtStart); + } + } + children.push(node); + positions.push(startPos); + } + function takeFlatNode(parentStart, minPos, children, positions) { + let nodes = []; // Temporary, inverted array of leaf nodes found, with absolute positions + let nodeCount = 0, stopAt = -1; + while (cursor.pos > minPos) { + let { id, start, end, size } = cursor; + if (size > 4) { // Not a leaf + cursor.next(); + } + else if (stopAt > -1 && start < stopAt) { + break; + } + else { + if (stopAt < 0) + stopAt = end - maxBufferLength; + nodes.push(id, start, end); + nodeCount++; + cursor.next(); + } + } + if (nodeCount) { + let buffer = new Uint16Array(nodeCount * 4); + let start = nodes[nodes.length - 2]; + for (let i = nodes.length - 3, j = 0; i >= 0; i -= 3) { + buffer[j++] = nodes[i]; + buffer[j++] = nodes[i + 1] - start; + buffer[j++] = nodes[i + 2] - start; + buffer[j++] = j; + } + children.push(new TreeBuffer(buffer, nodes[2] - start, nodeSet)); + positions.push(start - parentStart); + } + } + function makeBalanced(type, contextHash) { + return (children, positions, length) => { + let lookAhead = 0, lastI = children.length - 1, last, lookAheadProp; + if (lastI >= 0 && (last = children[lastI]) instanceof Tree) { + if (!lastI && last.type == type && last.length == length) + return last; + if (lookAheadProp = last.prop(NodeProp.lookAhead)) + lookAhead = positions[lastI] + last.length + lookAheadProp; + } + return makeTree(type, children, positions, length, lookAhead, contextHash); + }; + } + function makeRepeatLeaf(children, positions, base, i, from, to, type, lookAhead, contextHash) { + let localChildren = [], localPositions = []; + while (children.length > i) { + localChildren.push(children.pop()); + localPositions.push(positions.pop() + base - from); + } + children.push(makeTree(nodeSet.types[type], localChildren, localPositions, to - from, lookAhead - to, contextHash)); + positions.push(from - base); + } + function makeTree(type, children, positions, length, lookAhead, contextHash, props) { + if (contextHash) { + let pair = [NodeProp.contextHash, contextHash]; + props = props ? [pair].concat(props) : [pair]; + } + if (lookAhead > 25) { + let pair = [NodeProp.lookAhead, lookAhead]; + props = props ? [pair].concat(props) : [pair]; + } + return new Tree(type, children, positions, length, props); + } + function findBufferSize(maxSize, inRepeat) { + // Scan through the buffer to find previous siblings that fit + // together in a TreeBuffer, and don't contain any reused nodes + // (which can't be stored in a buffer). + // If `inRepeat` is > -1, ignore node boundaries of that type for + // nesting, but make sure the end falls either at the start + // (`maxSize`) or before such a node. + let fork = cursor.fork(); + let size = 0, start = 0, skip = 0, minStart = fork.end - maxBufferLength; + let result = { size: 0, start: 0, skip: 0 }; + scan: for (let minPos = fork.pos - maxSize; fork.pos > minPos;) { + let nodeSize = fork.size; + // Pretend nested repeat nodes of the same type don't exist + if (fork.id == inRepeat && nodeSize >= 0) { + // Except that we store the current state as a valid return + // value. + result.size = size; + result.start = start; + result.skip = skip; + skip += 4; + size += 4; + fork.next(); + continue; + } + let startPos = fork.pos - nodeSize; + if (nodeSize < 0 || startPos < minPos || fork.start < minStart) + break; + let localSkipped = fork.id >= minRepeatType ? 4 : 0; + let nodeStart = fork.start; + fork.next(); + while (fork.pos > startPos) { + if (fork.size < 0) { + if (fork.size == -3 /* SpecialRecord.ContextChange */) + localSkipped += 4; + else + break scan; + } + else if (fork.id >= minRepeatType) { + localSkipped += 4; + } + fork.next(); + } + start = nodeStart; + size += nodeSize; + skip += localSkipped; + } + if (inRepeat < 0 || size == maxSize) { + result.size = size; + result.start = start; + result.skip = skip; + } + return result.size > 4 ? result : undefined; + } + function copyToBuffer(bufferStart, buffer, index) { + let { id, start, end, size } = cursor; + cursor.next(); + if (size >= 0 && id < minRepeatType) { + let startIndex = index; + if (size > 4) { + let endPos = cursor.pos - (size - 4); + while (cursor.pos > endPos) + index = copyToBuffer(bufferStart, buffer, index); + } + buffer[--index] = startIndex; + buffer[--index] = end - bufferStart; + buffer[--index] = start - bufferStart; + buffer[--index] = id; + } + else if (size == -3 /* SpecialRecord.ContextChange */) { + contextHash = id; + } + else if (size == -4 /* SpecialRecord.LookAhead */) { + lookAhead = id; + } + return index; + } + let children = [], positions = []; + while (cursor.pos > 0) + takeNode(data.start || 0, data.bufferStart || 0, children, positions, -1, 0); + let length = (_a = data.length) !== null && _a !== void 0 ? _a : (children.length ? positions[0] + children[0].length : 0); + return new Tree(types[data.topID], children.reverse(), positions.reverse(), length); +} +const nodeSizeCache = new WeakMap; +function nodeSize(balanceType, node) { + if (!balanceType.isAnonymous || node instanceof TreeBuffer || node.type != balanceType) + return 1; + let size = nodeSizeCache.get(node); + if (size == null) { + size = 1; + for (let child of node.children) { + if (child.type != balanceType || !(child instanceof Tree)) { + size = 1; + break; + } + size += nodeSize(balanceType, child); + } + nodeSizeCache.set(node, size); + } + return size; +} +function balanceRange( +// The type the balanced tree's inner nodes. +balanceType, +// The direct children and their positions +children, positions, +// The index range in children/positions to use +from, to, +// The start position of the nodes, relative to their parent. +start, +// Length of the outer node +length, +// Function to build the top node of the balanced tree +mkTop, +// Function to build internal nodes for the balanced tree +mkTree) { + let total = 0; + for (let i = from; i < to; i++) + total += nodeSize(balanceType, children[i]); + let maxChild = Math.ceil((total * 1.5) / 8 /* Balance.BranchFactor */); + let localChildren = [], localPositions = []; + function divide(children, positions, from, to, offset) { + for (let i = from; i < to;) { + let groupFrom = i, groupStart = positions[i], groupSize = nodeSize(balanceType, children[i]); + i++; + for (; i < to; i++) { + let nextSize = nodeSize(balanceType, children[i]); + if (groupSize + nextSize >= maxChild) + break; + groupSize += nextSize; + } + if (i == groupFrom + 1) { + if (groupSize > maxChild) { + let only = children[groupFrom]; // Only trees can have a size > 1 + divide(only.children, only.positions, 0, only.children.length, positions[groupFrom] + offset); + continue; + } + localChildren.push(children[groupFrom]); + } + else { + let length = positions[i - 1] + children[i - 1].length - groupStart; + localChildren.push(balanceRange(balanceType, children, positions, groupFrom, i, groupStart, length, null, mkTree)); + } + localPositions.push(groupStart + offset - start); + } + } + divide(children, positions, from, to, 0); + return (mkTop || mkTree)(localChildren, localPositions, length); +} +/** +Provides a way to associate values with pieces of trees. As long +as that part of the tree is reused, the associated values can be +retrieved from an updated tree. +*/ +class NodeWeakMap { + constructor() { + this.map = new WeakMap(); + } + setBuffer(buffer, index, value) { + let inner = this.map.get(buffer); + if (!inner) + this.map.set(buffer, inner = new Map); + inner.set(index, value); + } + getBuffer(buffer, index) { + let inner = this.map.get(buffer); + return inner && inner.get(index); + } + /** + Set the value for this syntax node. + */ + set(node, value) { + if (node instanceof BufferNode) + this.setBuffer(node.context.buffer, node.index, value); + else if (node instanceof TreeNode) + this.map.set(node.tree, value); + } + /** + Retrieve value for this syntax node, if it exists in the map. + */ + get(node) { + return node instanceof BufferNode ? this.getBuffer(node.context.buffer, node.index) + : node instanceof TreeNode ? this.map.get(node.tree) : undefined; + } + /** + Set the value for the node that a cursor currently points to. + */ + cursorSet(cursor, value) { + if (cursor.buffer) + this.setBuffer(cursor.buffer.buffer, cursor.index, value); + else + this.map.set(cursor.tree, value); + } + /** + Retrieve the value for the node that a cursor currently points + to. + */ + cursorGet(cursor) { + return cursor.buffer ? this.getBuffer(cursor.buffer.buffer, cursor.index) : this.map.get(cursor.tree); + } +} + +/** +Tree fragments are used during [incremental +parsing](#common.Parser.startParse) to track parts of old trees +that can be reused in a new parse. An array of fragments is used +to track regions of an old tree whose nodes might be reused in new +parses. Use the static +[`applyChanges`](#common.TreeFragment^applyChanges) method to +update fragments for document changes. +*/ +class TreeFragment { + /** + Construct a tree fragment. You'll usually want to use + [`addTree`](#common.TreeFragment^addTree) and + [`applyChanges`](#common.TreeFragment^applyChanges) instead of + calling this directly. + */ + constructor( + /** + The start of the unchanged range pointed to by this fragment. + This refers to an offset in the _updated_ document (as opposed + to the original tree). + */ + from, + /** + The end of the unchanged range. + */ + to, + /** + The tree that this fragment is based on. + */ + tree, + /** + The offset between the fragment's tree and the document that + this fragment can be used against. Add this when going from + document to tree positions, subtract it to go from tree to + document positions. + */ + offset, openStart = false, openEnd = false) { + this.from = from; + this.to = to; + this.tree = tree; + this.offset = offset; + this.open = (openStart ? 1 /* Open.Start */ : 0) | (openEnd ? 2 /* Open.End */ : 0); + } + /** + Whether the start of the fragment represents the start of a + parse, or the end of a change. (In the second case, it may not + be safe to reuse some nodes at the start, depending on the + parsing algorithm.) + */ + get openStart() { return (this.open & 1 /* Open.Start */) > 0; } + /** + Whether the end of the fragment represents the end of a + full-document parse, or the start of a change. + */ + get openEnd() { return (this.open & 2 /* Open.End */) > 0; } + /** + Create a set of fragments from a freshly parsed tree, or update + an existing set of fragments by replacing the ones that overlap + with a tree with content from the new tree. When `partial` is + true, the parse is treated as incomplete, and the resulting + fragment has [`openEnd`](#common.TreeFragment.openEnd) set to + true. + */ + static addTree(tree, fragments = [], partial = false) { + let result = [new TreeFragment(0, tree.length, tree, 0, false, partial)]; + for (let f of fragments) + if (f.to > tree.length) + result.push(f); + return result; + } + /** + Apply a set of edits to an array of fragments, removing or + splitting fragments as necessary to remove edited ranges, and + adjusting offsets for fragments that moved. + */ + static applyChanges(fragments, changes, minGap = 128) { + if (!changes.length) + return fragments; + let result = []; + let fI = 1, nextF = fragments.length ? fragments[0] : null; + for (let cI = 0, pos = 0, off = 0;; cI++) { + let nextC = cI < changes.length ? changes[cI] : null; + let nextPos = nextC ? nextC.fromA : 1e9; + if (nextPos - pos >= minGap) + while (nextF && nextF.from < nextPos) { + let cut = nextF; + if (pos >= cut.from || nextPos <= cut.to || off) { + let fFrom = Math.max(cut.from, pos) - off, fTo = Math.min(cut.to, nextPos) - off; + cut = fFrom >= fTo ? null : new TreeFragment(fFrom, fTo, cut.tree, cut.offset + off, cI > 0, !!nextC); + } + if (cut) + result.push(cut); + if (nextF.to > nextPos) + break; + nextF = fI < fragments.length ? fragments[fI++] : null; + } + if (!nextC) + break; + pos = nextC.toA; + off = nextC.toA - nextC.toB; + } + return result; + } +} +/** +A superclass that parsers should extend. +*/ +class Parser { + /** + Start a parse, returning a [partial parse](#common.PartialParse) + object. [`fragments`](#common.TreeFragment) can be passed in to + make the parse incremental. + + By default, the entire input is parsed. You can pass `ranges`, + which should be a sorted array of non-empty, non-overlapping + ranges, to parse only those ranges. The tree returned in that + case will start at `ranges[0].from`. + */ + startParse(input, fragments, ranges) { + if (typeof input == "string") + input = new StringInput(input); + ranges = !ranges ? [new Range(0, input.length)] : ranges.length ? ranges.map(r => new Range(r.from, r.to)) : [new Range(0, 0)]; + return this.createParse(input, fragments || [], ranges); + } + /** + Run a full parse, returning the resulting tree. + */ + parse(input, fragments, ranges) { + let parse = this.startParse(input, fragments, ranges); + for (;;) { + let done = parse.advance(); + if (done) + return done; + } + } +} +class StringInput { + constructor(string) { + this.string = string; + } + get length() { return this.string.length; } + chunk(from) { return this.string.slice(from); } + get lineChunks() { return false; } + read(from, to) { return this.string.slice(from, to); } +} + +/** +Create a parse wrapper that, after the inner parse completes, +scans its tree for mixed language regions with the `nest` +function, runs the resulting [inner parses](#common.NestedParse), +and then [mounts](#common.NodeProp^mounted) their results onto the +tree. +*/ +function parseMixed(nest) { + return (parse, input, fragments, ranges) => new MixedParse(parse, nest, input, fragments, ranges); +} +class InnerParse { + constructor(parser, parse, overlay, target, from) { + this.parser = parser; + this.parse = parse; + this.overlay = overlay; + this.target = target; + this.from = from; + } +} +function checkRanges(ranges) { + if (!ranges.length || ranges.some(r => r.from >= r.to)) + throw new RangeError("Invalid inner parse ranges given: " + JSON.stringify(ranges)); +} +class ActiveOverlay { + constructor(parser, predicate, mounts, index, start, target, prev) { + this.parser = parser; + this.predicate = predicate; + this.mounts = mounts; + this.index = index; + this.start = start; + this.target = target; + this.prev = prev; + this.depth = 0; + this.ranges = []; + } +} +const stoppedInner = new NodeProp({ perNode: true }); +class MixedParse { + constructor(base, nest, input, fragments, ranges) { + this.nest = nest; + this.input = input; + this.fragments = fragments; + this.ranges = ranges; + this.inner = []; + this.innerDone = 0; + this.baseTree = null; + this.stoppedAt = null; + this.baseParse = base; + } + advance() { + if (this.baseParse) { + let done = this.baseParse.advance(); + if (!done) + return null; + this.baseParse = null; + this.baseTree = done; + this.startInner(); + if (this.stoppedAt != null) + for (let inner of this.inner) + inner.parse.stopAt(this.stoppedAt); + } + if (this.innerDone == this.inner.length) { + let result = this.baseTree; + if (this.stoppedAt != null) + result = new Tree(result.type, result.children, result.positions, result.length, result.propValues.concat([[stoppedInner, this.stoppedAt]])); + return result; + } + let inner = this.inner[this.innerDone], done = inner.parse.advance(); + if (done) { + this.innerDone++; + // This is a somewhat dodgy but super helpful hack where we + // patch up nodes created by the inner parse (and thus + // presumably not aliased anywhere else) to hold the information + // about the inner parse. + let props = Object.assign(Object.create(null), inner.target.props); + props[NodeProp.mounted.id] = new MountedTree(done, inner.overlay, inner.parser); + inner.target.props = props; + } + return null; + } + get parsedPos() { + if (this.baseParse) + return 0; + let pos = this.input.length; + for (let i = this.innerDone; i < this.inner.length; i++) { + if (this.inner[i].from < pos) + pos = Math.min(pos, this.inner[i].parse.parsedPos); + } + return pos; + } + stopAt(pos) { + this.stoppedAt = pos; + if (this.baseParse) + this.baseParse.stopAt(pos); + else + for (let i = this.innerDone; i < this.inner.length; i++) + this.inner[i].parse.stopAt(pos); + } + startInner() { + let fragmentCursor = new FragmentCursor(this.fragments); + let overlay = null; + let covered = null; + let cursor = new TreeCursor(new TreeNode(this.baseTree, this.ranges[0].from, 0, null), exports.IterMode.IncludeAnonymous | exports.IterMode.IgnoreMounts); + scan: for (let nest, isCovered;;) { + let enter = true, range; + if (this.stoppedAt != null && cursor.from >= this.stoppedAt) { + enter = false; + } + else if (fragmentCursor.hasNode(cursor)) { + if (overlay) { + let match = overlay.mounts.find(m => m.frag.from <= cursor.from && m.frag.to >= cursor.to && m.mount.overlay); + if (match) + for (let r of match.mount.overlay) { + let from = r.from + match.pos, to = r.to + match.pos; + if (from >= cursor.from && to <= cursor.to && !overlay.ranges.some(r => r.from < to && r.to > from)) + overlay.ranges.push({ from, to }); + } + } + enter = false; + } + else if (covered && (isCovered = checkCover(covered.ranges, cursor.from, cursor.to))) { + enter = isCovered != 2 /* Cover.Full */; + } + else if (!cursor.type.isAnonymous && (nest = this.nest(cursor, this.input)) && + (cursor.from < cursor.to || !nest.overlay)) { + if (!cursor.tree) + materialize(cursor); + let oldMounts = fragmentCursor.findMounts(cursor.from, nest.parser); + if (typeof nest.overlay == "function") { + overlay = new ActiveOverlay(nest.parser, nest.overlay, oldMounts, this.inner.length, cursor.from, cursor.tree, overlay); + } + else { + let ranges = punchRanges(this.ranges, nest.overlay || + (cursor.from < cursor.to ? [new Range(cursor.from, cursor.to)] : [])); + if (ranges.length) + checkRanges(ranges); + if (ranges.length || !nest.overlay) + this.inner.push(new InnerParse(nest.parser, ranges.length ? nest.parser.startParse(this.input, enterFragments(oldMounts, ranges), ranges) + : nest.parser.startParse(""), nest.overlay ? nest.overlay.map(r => new Range(r.from - cursor.from, r.to - cursor.from)) : null, cursor.tree, ranges.length ? ranges[0].from : cursor.from)); + if (!nest.overlay) + enter = false; + else if (ranges.length) + covered = { ranges, depth: 0, prev: covered }; + } + } + else if (overlay && (range = overlay.predicate(cursor))) { + if (range === true) + range = new Range(cursor.from, cursor.to); + if (range.from < range.to) { + let last = overlay.ranges.length - 1; + if (last >= 0 && overlay.ranges[last].to == range.from) + overlay.ranges[last] = { from: overlay.ranges[last].from, to: range.to }; + else + overlay.ranges.push(range); + } + } + if (enter && cursor.firstChild()) { + if (overlay) + overlay.depth++; + if (covered) + covered.depth++; + } + else { + for (;;) { + if (cursor.nextSibling()) + break; + if (!cursor.parent()) + break scan; + if (overlay && !--overlay.depth) { + let ranges = punchRanges(this.ranges, overlay.ranges); + if (ranges.length) { + checkRanges(ranges); + this.inner.splice(overlay.index, 0, new InnerParse(overlay.parser, overlay.parser.startParse(this.input, enterFragments(overlay.mounts, ranges), ranges), overlay.ranges.map(r => new Range(r.from - overlay.start, r.to - overlay.start)), overlay.target, ranges[0].from)); + } + overlay = overlay.prev; + } + if (covered && !--covered.depth) + covered = covered.prev; + } + } + } + } +} +function checkCover(covered, from, to) { + for (let range of covered) { + if (range.from >= to) + break; + if (range.to > from) + return range.from <= from && range.to >= to ? 2 /* Cover.Full */ : 1 /* Cover.Partial */; + } + return 0 /* Cover.None */; +} +// Take a piece of buffer and convert it into a stand-alone +// TreeBuffer. +function sliceBuf(buf, startI, endI, nodes, positions, off) { + if (startI < endI) { + let from = buf.buffer[startI + 1]; + nodes.push(buf.slice(startI, endI, from)); + positions.push(from - off); + } +} +// This function takes a node that's in a buffer, and converts it, and +// its parent buffer nodes, into a Tree. This is again acting on the +// assumption that the trees and buffers have been constructed by the +// parse that was ran via the mix parser, and thus aren't shared with +// any other code, making violations of the immutability safe. +function materialize(cursor) { + let { node } = cursor, stack = []; + let buffer = node.context.buffer; + // Scan up to the nearest tree + do { + stack.push(cursor.index); + cursor.parent(); + } while (!cursor.tree); + // Find the index of the buffer in that tree + let base = cursor.tree, i = base.children.indexOf(buffer); + let buf = base.children[i], b = buf.buffer, newStack = [i]; + // Split a level in the buffer, putting the nodes before and after + // the child that contains `node` into new buffers. + function split(startI, endI, type, innerOffset, length, stackPos) { + let targetI = stack[stackPos]; + let children = [], positions = []; + sliceBuf(buf, startI, targetI, children, positions, innerOffset); + let from = b[targetI + 1], to = b[targetI + 2]; + newStack.push(children.length); + let child = stackPos + ? split(targetI + 4, b[targetI + 3], buf.set.types[b[targetI]], from, to - from, stackPos - 1) + : node.toTree(); + children.push(child); + positions.push(from - innerOffset); + sliceBuf(buf, b[targetI + 3], endI, children, positions, innerOffset); + return new Tree(type, children, positions, length); + } + base.children[i] = split(0, b.length, NodeType.none, 0, buf.length, stack.length - 1); + // Move the cursor back to the target node + for (let index of newStack) { + let tree = cursor.tree.children[index], pos = cursor.tree.positions[index]; + cursor.yield(new TreeNode(tree, pos + cursor.from, index, cursor._tree)); + } +} +class StructureCursor { + constructor(root, offset) { + this.offset = offset; + this.done = false; + this.cursor = root.cursor(exports.IterMode.IncludeAnonymous | exports.IterMode.IgnoreMounts); + } + // Move to the first node (in pre-order) that starts at or after `pos`. + moveTo(pos) { + let { cursor } = this, p = pos - this.offset; + while (!this.done && cursor.from < p) { + if (cursor.to >= pos && cursor.enter(p, 1, exports.IterMode.IgnoreOverlays | exports.IterMode.ExcludeBuffers)) ; + else if (!cursor.next(false)) + this.done = true; + } + } + hasNode(cursor) { + this.moveTo(cursor.from); + if (!this.done && this.cursor.from + this.offset == cursor.from && this.cursor.tree) { + for (let tree = this.cursor.tree;;) { + if (tree == cursor.tree) + return true; + if (tree.children.length && tree.positions[0] == 0 && tree.children[0] instanceof Tree) + tree = tree.children[0]; + else + break; + } + } + return false; + } +} +class FragmentCursor { + constructor(fragments) { + var _a; + this.fragments = fragments; + this.curTo = 0; + this.fragI = 0; + if (fragments.length) { + let first = this.curFrag = fragments[0]; + this.curTo = (_a = first.tree.prop(stoppedInner)) !== null && _a !== void 0 ? _a : first.to; + this.inner = new StructureCursor(first.tree, -first.offset); + } + else { + this.curFrag = this.inner = null; + } + } + hasNode(node) { + while (this.curFrag && node.from >= this.curTo) + this.nextFrag(); + return this.curFrag && this.curFrag.from <= node.from && this.curTo >= node.to && this.inner.hasNode(node); + } + nextFrag() { + var _a; + this.fragI++; + if (this.fragI == this.fragments.length) { + this.curFrag = this.inner = null; + } + else { + let frag = this.curFrag = this.fragments[this.fragI]; + this.curTo = (_a = frag.tree.prop(stoppedInner)) !== null && _a !== void 0 ? _a : frag.to; + this.inner = new StructureCursor(frag.tree, -frag.offset); + } + } + findMounts(pos, parser) { + var _a; + let result = []; + if (this.inner) { + this.inner.cursor.moveTo(pos, 1); + for (let pos = this.inner.cursor.node; pos; pos = pos.parent) { + let mount = (_a = pos.tree) === null || _a === void 0 ? void 0 : _a.prop(NodeProp.mounted); + if (mount && mount.parser == parser) { + for (let i = this.fragI; i < this.fragments.length; i++) { + let frag = this.fragments[i]; + if (frag.from >= pos.to) + break; + if (frag.tree == this.curFrag.tree) + result.push({ + frag, + pos: pos.from - frag.offset, + mount + }); + } + } + } + } + return result; + } +} +function punchRanges(outer, ranges) { + let copy = null, current = ranges; + for (let i = 1, j = 0; i < outer.length; i++) { + let gapFrom = outer[i - 1].to, gapTo = outer[i].from; + for (; j < current.length; j++) { + let r = current[j]; + if (r.from >= gapTo) + break; + if (r.to <= gapFrom) + continue; + if (!copy) + current = copy = ranges.slice(); + if (r.from < gapFrom) { + copy[j] = new Range(r.from, gapFrom); + if (r.to > gapTo) + copy.splice(j + 1, 0, new Range(gapTo, r.to)); + } + else if (r.to > gapTo) { + copy[j--] = new Range(gapTo, r.to); + } + else { + copy.splice(j--, 1); + } + } + } + return current; +} +function findCoverChanges(a, b, from, to) { + let iA = 0, iB = 0, inA = false, inB = false, pos = -1e9; + let result = []; + for (;;) { + let nextA = iA == a.length ? 1e9 : inA ? a[iA].to : a[iA].from; + let nextB = iB == b.length ? 1e9 : inB ? b[iB].to : b[iB].from; + if (inA != inB) { + let start = Math.max(pos, from), end = Math.min(nextA, nextB, to); + if (start < end) + result.push(new Range(start, end)); + } + pos = Math.min(nextA, nextB); + if (pos == 1e9) + break; + if (nextA == pos) { + if (!inA) + inA = true; + else { + inA = false; + iA++; + } + } + if (nextB == pos) { + if (!inB) + inB = true; + else { + inB = false; + iB++; + } + } + } + return result; +} +// Given a number of fragments for the outer tree, and a set of ranges +// to parse, find fragments for inner trees mounted around those +// ranges, if any. +function enterFragments(mounts, ranges) { + let result = []; + for (let { pos, mount, frag } of mounts) { + let startPos = pos + (mount.overlay ? mount.overlay[0].from : 0), endPos = startPos + mount.tree.length; + let from = Math.max(frag.from, startPos), to = Math.min(frag.to, endPos); + if (mount.overlay) { + let overlay = mount.overlay.map(r => new Range(r.from + pos, r.to + pos)); + let changes = findCoverChanges(ranges, overlay, from, to); + for (let i = 0, pos = from;; i++) { + let last = i == changes.length, end = last ? to : changes[i].from; + if (end > pos) + result.push(new TreeFragment(pos, end, mount.tree, -startPos, frag.from >= pos || frag.openStart, frag.to <= end || frag.openEnd)); + if (last) + break; + pos = changes[i].to; + } + } + else { + result.push(new TreeFragment(from, to, mount.tree, -startPos, frag.from >= startPos || frag.openStart, frag.to <= endPos || frag.openEnd)); + } + } + return result; +} + +exports.DefaultBufferLength = DefaultBufferLength; +exports.MountedTree = MountedTree; +exports.NodeProp = NodeProp; +exports.NodeSet = NodeSet; +exports.NodeType = NodeType; +exports.NodeWeakMap = NodeWeakMap; +exports.Parser = Parser; +exports.Tree = Tree; +exports.TreeBuffer = TreeBuffer; +exports.TreeCursor = TreeCursor; +exports.TreeFragment = TreeFragment; +exports.parseMixed = parseMixed; diff --git a/node_modules/@lezer/common/dist/index.d.cts b/node_modules/@lezer/common/dist/index.d.cts new file mode 100644 index 00000000..478cf432 --- /dev/null +++ b/node_modules/@lezer/common/dist/index.d.cts @@ -0,0 +1,1137 @@ +/** +The [`TreeFragment.applyChanges`](#common.TreeFragment^applyChanges) +method expects changed ranges in this format. +*/ +interface ChangedRange { + /** + The start of the change in the start document + */ + fromA: number; + /** + The end of the change in the start document + */ + toA: number; + /** + The start of the replacement in the new document + */ + fromB: number; + /** + The end of the replacement in the new document + */ + toB: number; +} +/** +Tree fragments are used during [incremental +parsing](#common.Parser.startParse) to track parts of old trees +that can be reused in a new parse. An array of fragments is used +to track regions of an old tree whose nodes might be reused in new +parses. Use the static +[`applyChanges`](#common.TreeFragment^applyChanges) method to +update fragments for document changes. +*/ +declare class TreeFragment { + /** + The start of the unchanged range pointed to by this fragment. + This refers to an offset in the _updated_ document (as opposed + to the original tree). + */ + readonly from: number; + /** + The end of the unchanged range. + */ + readonly to: number; + /** + The tree that this fragment is based on. + */ + readonly tree: Tree; + /** + The offset between the fragment's tree and the document that + this fragment can be used against. Add this when going from + document to tree positions, subtract it to go from tree to + document positions. + */ + readonly offset: number; + /** + Construct a tree fragment. You'll usually want to use + [`addTree`](#common.TreeFragment^addTree) and + [`applyChanges`](#common.TreeFragment^applyChanges) instead of + calling this directly. + */ + constructor( + /** + The start of the unchanged range pointed to by this fragment. + This refers to an offset in the _updated_ document (as opposed + to the original tree). + */ + from: number, + /** + The end of the unchanged range. + */ + to: number, + /** + The tree that this fragment is based on. + */ + tree: Tree, + /** + The offset between the fragment's tree and the document that + this fragment can be used against. Add this when going from + document to tree positions, subtract it to go from tree to + document positions. + */ + offset: number, openStart?: boolean, openEnd?: boolean); + /** + Whether the start of the fragment represents the start of a + parse, or the end of a change. (In the second case, it may not + be safe to reuse some nodes at the start, depending on the + parsing algorithm.) + */ + get openStart(): boolean; + /** + Whether the end of the fragment represents the end of a + full-document parse, or the start of a change. + */ + get openEnd(): boolean; + /** + Create a set of fragments from a freshly parsed tree, or update + an existing set of fragments by replacing the ones that overlap + with a tree with content from the new tree. When `partial` is + true, the parse is treated as incomplete, and the resulting + fragment has [`openEnd`](#common.TreeFragment.openEnd) set to + true. + */ + static addTree(tree: Tree, fragments?: readonly TreeFragment[], partial?: boolean): readonly TreeFragment[]; + /** + Apply a set of edits to an array of fragments, removing or + splitting fragments as necessary to remove edited ranges, and + adjusting offsets for fragments that moved. + */ + static applyChanges(fragments: readonly TreeFragment[], changes: readonly ChangedRange[], minGap?: number): readonly TreeFragment[]; +} +/** +Interface used to represent an in-progress parse, which can be +moved forward piece-by-piece. +*/ +interface PartialParse { + /** + Advance the parse state by some amount. Will return the finished + syntax tree when the parse completes. + */ + advance(): Tree | null; + /** + The position up to which the document has been parsed. Note + that, in multi-pass parsers, this will stay back until the last + pass has moved past a given position. + */ + readonly parsedPos: number; + /** + Tell the parse to not advance beyond the given position. + `advance` will return a tree when the parse has reached the + position. Note that, depending on the parser algorithm and the + state of the parse when `stopAt` was called, that tree may + contain nodes beyond the position. It is an error to call + `stopAt` with a higher position than it's [current + value](#common.PartialParse.stoppedAt). + */ + stopAt(pos: number): void; + /** + Reports whether `stopAt` has been called on this parse. + */ + readonly stoppedAt: number | null; +} +/** +A superclass that parsers should extend. +*/ +declare abstract class Parser { + /** + Start a parse for a single tree. This is the method concrete + parser implementations must implement. Called by `startParse`, + with the optional arguments resolved. + */ + abstract createParse(input: Input, fragments: readonly TreeFragment[], ranges: readonly { + from: number; + to: number; + }[]): PartialParse; + /** + Start a parse, returning a [partial parse](#common.PartialParse) + object. [`fragments`](#common.TreeFragment) can be passed in to + make the parse incremental. + + By default, the entire input is parsed. You can pass `ranges`, + which should be a sorted array of non-empty, non-overlapping + ranges, to parse only those ranges. The tree returned in that + case will start at `ranges[0].from`. + */ + startParse(input: Input | string, fragments?: readonly TreeFragment[], ranges?: readonly { + from: number; + to: number; + }[]): PartialParse; + /** + Run a full parse, returning the resulting tree. + */ + parse(input: Input | string, fragments?: readonly TreeFragment[], ranges?: readonly { + from: number; + to: number; + }[]): Tree; +} +/** +This is the interface parsers use to access the document. To run +Lezer directly on your own document data structure, you have to +write an implementation of it. +*/ +interface Input { + /** + The length of the document. + */ + readonly length: number; + /** + Get the chunk after the given position. The returned string + should start at `from` and, if that isn't the end of the + document, may be of any length greater than zero. + */ + chunk(from: number): string; + /** + Indicates whether the chunks already end at line breaks, so that + client code that wants to work by-line can avoid re-scanning + them for line breaks. When this is true, the result of `chunk()` + should either be a single line break, or the content between + `from` and the next line break. + */ + readonly lineChunks: boolean; + /** + Read the part of the document between the given positions. + */ + read(from: number, to: number): string; +} +/** +Parse wrapper functions are supported by some parsers to inject +additional parsing logic. +*/ +type ParseWrapper = (inner: PartialParse, input: Input, fragments: readonly TreeFragment[], ranges: readonly { + from: number; + to: number; +}[]) => PartialParse; + +/** +The default maximum length of a `TreeBuffer` node. +*/ +declare const DefaultBufferLength = 1024; +/** +Each [node type](#common.NodeType) or [individual tree](#common.Tree) +can have metadata associated with it in props. Instances of this +class represent prop names. +*/ +declare class NodeProp { + /** + Indicates whether this prop is stored per [node + type](#common.NodeType) or per [tree node](#common.Tree). + */ + perNode: boolean; + /** + A method that deserializes a value of this prop from a string. + Can be used to allow a prop to be directly written in a grammar + file. + */ + deserialize: (str: string) => T; + /** + Create a new node prop type. + */ + constructor(config?: { + /** + The [deserialize](#common.NodeProp.deserialize) function to + use for this prop, used for example when directly providing + the prop from a grammar file. Defaults to a function that + raises an error. + */ + deserialize?: (str: string) => T; + /** + By default, node props are stored in the [node + type](#common.NodeType). It can sometimes be useful to directly + store information (usually related to the parsing algorithm) + in [nodes](#common.Tree) themselves. Set this to true to enable + that for this prop. + */ + perNode?: boolean; + }); + /** + This is meant to be used with + [`NodeSet.extend`](#common.NodeSet.extend) or + [`LRParser.configure`](#lr.ParserConfig.props) to compute + prop values for each node type in the set. Takes a [match + object](#common.NodeType^match) or function that returns undefined + if the node type doesn't get this prop, and the prop's value if + it does. + */ + add(match: { + [selector: string]: T; + } | ((type: NodeType) => T | undefined)): NodePropSource; + /** + Prop that is used to describe matching delimiters. For opening + delimiters, this holds an array of node names (written as a + space-separated string when declaring this prop in a grammar) + for the node types of closing delimiters that match it. + */ + static closedBy: NodeProp; + /** + The inverse of [`closedBy`](#common.NodeProp^closedBy). This is + attached to closing delimiters, holding an array of node names + of types of matching opening delimiters. + */ + static openedBy: NodeProp; + /** + Used to assign node types to groups (for example, all node + types that represent an expression could be tagged with an + `"Expression"` group). + */ + static group: NodeProp; + /** + Attached to nodes to indicate these should be + [displayed](https://codemirror.net/docs/ref/#language.syntaxTree) + in a bidirectional text isolate, so that direction-neutral + characters on their sides don't incorrectly get associated with + surrounding text. You'll generally want to set this for nodes + that contain arbitrary text, like strings and comments, and for + nodes that appear _inside_ arbitrary text, like HTML tags. When + not given a value, in a grammar declaration, defaults to + `"auto"`. + */ + static isolate: NodeProp<"rtl" | "ltr" | "auto">; + /** + The hash of the [context](#lr.ContextTracker.constructor) + that the node was parsed in, if any. Used to limit reuse of + contextual nodes. + */ + static contextHash: NodeProp; + /** + The distance beyond the end of the node that the tokenizer + looked ahead for any of the tokens inside the node. (The LR + parser only stores this when it is larger than 25, for + efficiency reasons.) + */ + static lookAhead: NodeProp; + /** + This per-node prop is used to replace a given node, or part of a + node, with another tree. This is useful to include trees from + different languages in mixed-language parsers. + */ + static mounted: NodeProp; +} +/** +A mounted tree, which can be [stored](#common.NodeProp^mounted) on +a tree node to indicate that parts of its content are +represented by another tree. +*/ +declare class MountedTree { + /** + The inner tree. + */ + readonly tree: Tree; + /** + If this is null, this tree replaces the entire node (it will + be included in the regular iteration instead of its host + node). If not, only the given ranges are considered to be + covered by this tree. This is used for trees that are mixed in + a way that isn't strictly hierarchical. Such mounted trees are + only entered by [`resolveInner`](#common.Tree.resolveInner) + and [`enter`](#common.SyntaxNode.enter). + */ + readonly overlay: readonly { + from: number; + to: number; + }[] | null; + /** + The parser used to create this subtree. + */ + readonly parser: Parser; + constructor( + /** + The inner tree. + */ + tree: Tree, + /** + If this is null, this tree replaces the entire node (it will + be included in the regular iteration instead of its host + node). If not, only the given ranges are considered to be + covered by this tree. This is used for trees that are mixed in + a way that isn't strictly hierarchical. Such mounted trees are + only entered by [`resolveInner`](#common.Tree.resolveInner) + and [`enter`](#common.SyntaxNode.enter). + */ + overlay: readonly { + from: number; + to: number; + }[] | null, + /** + The parser used to create this subtree. + */ + parser: Parser); +} +/** +Type returned by [`NodeProp.add`](#common.NodeProp.add). Describes +whether a prop should be added to a given node type in a node set, +and what value it should have. +*/ +type NodePropSource = (type: NodeType) => null | [NodeProp, any]; +/** +Each node in a syntax tree has a node type associated with it. +*/ +declare class NodeType { + /** + The name of the node type. Not necessarily unique, but if the + grammar was written properly, different node types with the + same name within a node set should play the same semantic + role. + */ + readonly name: string; + /** + The id of this node in its set. Corresponds to the term ids + used in the parser. + */ + readonly id: number; + /** + Define a node type. + */ + static define(spec: { + /** + The ID of the node type. When this type is used in a + [set](#common.NodeSet), the ID must correspond to its index in + the type array. + */ + id: number; + /** + The name of the node type. Leave empty to define an anonymous + node. + */ + name?: string; + /** + [Node props](#common.NodeProp) to assign to the type. The value + given for any given prop should correspond to the prop's type. + */ + props?: readonly ([NodeProp, any] | NodePropSource)[]; + /** + Whether this is a [top node](#common.NodeType.isTop). + */ + top?: boolean; + /** + Whether this node counts as an [error + node](#common.NodeType.isError). + */ + error?: boolean; + /** + Whether this node is a [skipped](#common.NodeType.isSkipped) + node. + */ + skipped?: boolean; + }): NodeType; + /** + Retrieves a node prop for this type. Will return `undefined` if + the prop isn't present on this node. + */ + prop(prop: NodeProp): T | undefined; + /** + True when this is the top node of a grammar. + */ + get isTop(): boolean; + /** + True when this node is produced by a skip rule. + */ + get isSkipped(): boolean; + /** + Indicates whether this is an error node. + */ + get isError(): boolean; + /** + When true, this node type doesn't correspond to a user-declared + named node, for example because it is used to cache repetition. + */ + get isAnonymous(): boolean; + /** + Returns true when this node's name or one of its + [groups](#common.NodeProp^group) matches the given string. + */ + is(name: string | number): boolean; + /** + An empty dummy node type to use when no actual type is available. + */ + static none: NodeType; + /** + Create a function from node types to arbitrary values by + specifying an object whose property names are node or + [group](#common.NodeProp^group) names. Often useful with + [`NodeProp.add`](#common.NodeProp.add). You can put multiple + names, separated by spaces, in a single property name to map + multiple node names to a single value. + */ + static match(map: { + [selector: string]: T; + }): (node: NodeType) => T | undefined; +} +/** +A node set holds a collection of node types. It is used to +compactly represent trees by storing their type ids, rather than a +full pointer to the type object, in a numeric array. Each parser +[has](#lr.LRParser.nodeSet) a node set, and [tree +buffers](#common.TreeBuffer) can only store collections of nodes +from the same set. A set can have a maximum of 2**16 (65536) node +types in it, so that the ids fit into 16-bit typed array slots. +*/ +declare class NodeSet { + /** + The node types in this set, by id. + */ + readonly types: readonly NodeType[]; + /** + Create a set with the given types. The `id` property of each + type should correspond to its position within the array. + */ + constructor( + /** + The node types in this set, by id. + */ + types: readonly NodeType[]); + /** + Create a copy of this set with some node properties added. The + arguments to this method can be created with + [`NodeProp.add`](#common.NodeProp.add). + */ + extend(...props: NodePropSource[]): NodeSet; +} +/** +Options that control iteration. Can be combined with the `|` +operator to enable multiple ones. +*/ +declare enum IterMode { + /** + When enabled, iteration will only visit [`Tree`](#common.Tree) + objects, not nodes packed into + [`TreeBuffer`](#common.TreeBuffer)s. + */ + ExcludeBuffers = 1, + /** + Enable this to make iteration include anonymous nodes (such as + the nodes that wrap repeated grammar constructs into a balanced + tree). + */ + IncludeAnonymous = 2, + /** + By default, regular [mounted](#common.NodeProp^mounted) nodes + replace their base node in iteration. Enable this to ignore them + instead. + */ + IgnoreMounts = 4, + /** + This option only applies in + [`enter`](#common.SyntaxNode.enter)-style methods. It tells the + library to not enter mounted overlays if one covers the given + position. + */ + IgnoreOverlays = 8 +} +/** +A piece of syntax tree. There are two ways to approach these +trees: the way they are actually stored in memory, and the +convenient way. + +Syntax trees are stored as a tree of `Tree` and `TreeBuffer` +objects. By packing detail information into `TreeBuffer` leaf +nodes, the representation is made a lot more memory-efficient. + +However, when you want to actually work with tree nodes, this +representation is very awkward, so most client code will want to +use the [`TreeCursor`](#common.TreeCursor) or +[`SyntaxNode`](#common.SyntaxNode) interface instead, which provides +a view on some part of this data structure, and can be used to +move around to adjacent nodes. +*/ +declare class Tree { + /** + The type of the top node. + */ + readonly type: NodeType; + /** + This node's child nodes. + */ + readonly children: readonly (Tree | TreeBuffer)[]; + /** + The positions (offsets relative to the start of this tree) of + the children. + */ + readonly positions: readonly number[]; + /** + The total length of this tree + */ + readonly length: number; + /** + Construct a new tree. See also [`Tree.build`](#common.Tree^build). + */ + constructor( + /** + The type of the top node. + */ + type: NodeType, + /** + This node's child nodes. + */ + children: readonly (Tree | TreeBuffer)[], + /** + The positions (offsets relative to the start of this tree) of + the children. + */ + positions: readonly number[], + /** + The total length of this tree + */ + length: number, + /** + Per-node [node props](#common.NodeProp) to associate with this node. + */ + props?: readonly [NodeProp | number, any][]); + /** + The empty tree + */ + static empty: Tree; + /** + Get a [tree cursor](#common.TreeCursor) positioned at the top of + the tree. Mode can be used to [control](#common.IterMode) which + nodes the cursor visits. + */ + cursor(mode?: IterMode): TreeCursor; + /** + Get a [tree cursor](#common.TreeCursor) pointing into this tree + at the given position and side (see + [`moveTo`](#common.TreeCursor.moveTo). + */ + cursorAt(pos: number, side?: -1 | 0 | 1, mode?: IterMode): TreeCursor; + /** + Get a [syntax node](#common.SyntaxNode) object for the top of the + tree. + */ + get topNode(): SyntaxNode; + /** + Get the [syntax node](#common.SyntaxNode) at the given position. + If `side` is -1, this will move into nodes that end at the + position. If 1, it'll move into nodes that start at the + position. With 0, it'll only enter nodes that cover the position + from both sides. + + Note that this will not enter + [overlays](#common.MountedTree.overlay), and you often want + [`resolveInner`](#common.Tree.resolveInner) instead. + */ + resolve(pos: number, side?: -1 | 0 | 1): SyntaxNode; + /** + Like [`resolve`](#common.Tree.resolve), but will enter + [overlaid](#common.MountedTree.overlay) nodes, producing a syntax node + pointing into the innermost overlaid tree at the given position + (with parent links going through all parent structure, including + the host trees). + */ + resolveInner(pos: number, side?: -1 | 0 | 1): SyntaxNode; + /** + In some situations, it can be useful to iterate through all + nodes around a position, including those in overlays that don't + directly cover the position. This method gives you an iterator + that will produce all nodes, from small to big, around the given + position. + */ + resolveStack(pos: number, side?: -1 | 0 | 1): NodeIterator; + /** + Iterate over the tree and its children, calling `enter` for any + node that touches the `from`/`to` region (if given) before + running over such a node's children, and `leave` (if given) when + leaving the node. When `enter` returns `false`, that node will + not have its children iterated over (or `leave` called). + */ + iterate(spec: { + enter(node: SyntaxNodeRef): boolean | void; + leave?(node: SyntaxNodeRef): void; + from?: number; + to?: number; + mode?: IterMode; + }): void; + /** + Get the value of the given [node prop](#common.NodeProp) for this + node. Works with both per-node and per-type props. + */ + prop(prop: NodeProp): T | undefined; + /** + Returns the node's [per-node props](#common.NodeProp.perNode) in a + format that can be passed to the [`Tree`](#common.Tree) + constructor. + */ + get propValues(): readonly [NodeProp | number, any][]; + /** + Balance the direct children of this tree, producing a copy of + which may have children grouped into subtrees with type + [`NodeType.none`](#common.NodeType^none). + */ + balance(config?: { + /** + Function to create the newly balanced subtrees. + */ + makeTree?: (children: readonly (Tree | TreeBuffer)[], positions: readonly number[], length: number) => Tree; + }): Tree; + /** + Build a tree from a postfix-ordered buffer of node information, + or a cursor over such a buffer. + */ + static build(data: BuildData): Tree; +} +/** +Represents a sequence of nodes. +*/ +type NodeIterator = { + node: SyntaxNode; + next: NodeIterator | null; +}; +type BuildData = { + /** + The buffer or buffer cursor to read the node data from. + + When this is an array, it should contain four values for every + node in the tree. + + - The first holds the node's type, as a node ID pointing into + the given `NodeSet`. + - The second holds the node's start offset. + - The third the end offset. + - The fourth the amount of space taken up in the array by this + node and its children. Since there's four values per node, + this is the total number of nodes inside this node (children + and transitive children) plus one for the node itself, times + four. + + Parent nodes should appear _after_ child nodes in the array. As + an example, a node of type 10 spanning positions 0 to 4, with + two children, of type 11 and 12, might look like this: + + [11, 0, 1, 4, 12, 2, 4, 4, 10, 0, 4, 12] + */ + buffer: BufferCursor | readonly number[]; + /** + The node types to use. + */ + nodeSet: NodeSet; + /** + The id of the top node type. + */ + topID: number; + /** + The position the tree should start at. Defaults to 0. + */ + start?: number; + /** + The position in the buffer where the function should stop + reading. Defaults to 0. + */ + bufferStart?: number; + /** + The length of the wrapping node. The end offset of the last + child is used when not provided. + */ + length?: number; + /** + The maximum buffer length to use. Defaults to + [`DefaultBufferLength`](#common.DefaultBufferLength). + */ + maxBufferLength?: number; + /** + An optional array holding reused nodes that the buffer can refer + to. + */ + reused?: readonly Tree[]; + /** + The first node type that indicates repeat constructs in this + grammar. + */ + minRepeatType?: number; +}; +/** +This is used by `Tree.build` as an abstraction for iterating over +a tree buffer. A cursor initially points at the very last element +in the buffer. Every time `next()` is called it moves on to the +previous one. +*/ +interface BufferCursor { + /** + The current buffer position (four times the number of nodes + remaining). + */ + pos: number; + /** + The node ID of the next node in the buffer. + */ + id: number; + /** + The start position of the next node in the buffer. + */ + start: number; + /** + The end position of the next node. + */ + end: number; + /** + The size of the next node (the number of nodes inside, counting + the node itself, times 4). + */ + size: number; + /** + Moves `this.pos` down by 4. + */ + next(): void; + /** + Create a copy of this cursor. + */ + fork(): BufferCursor; +} +/** +Tree buffers contain (type, start, end, endIndex) quads for each +node. In such a buffer, nodes are stored in prefix order (parents +before children, with the endIndex of the parent indicating which +children belong to it). +*/ +declare class TreeBuffer { + /** + The buffer's content. + */ + readonly buffer: Uint16Array; + /** + The total length of the group of nodes in the buffer. + */ + readonly length: number; + /** + The node set used in this buffer. + */ + readonly set: NodeSet; + /** + Create a tree buffer. + */ + constructor( + /** + The buffer's content. + */ + buffer: Uint16Array, + /** + The total length of the group of nodes in the buffer. + */ + length: number, + /** + The node set used in this buffer. + */ + set: NodeSet); +} +/** +The set of properties provided by both [`SyntaxNode`](#common.SyntaxNode) +and [`TreeCursor`](#common.TreeCursor). Note that, if you need +an object that is guaranteed to stay stable in the future, you +need to use the [`node`](#common.SyntaxNodeRef.node) accessor. +*/ +interface SyntaxNodeRef { + /** + The start position of the node. + */ + readonly from: number; + /** + The end position of the node. + */ + readonly to: number; + /** + The type of the node. + */ + readonly type: NodeType; + /** + The name of the node (`.type.name`). + */ + readonly name: string; + /** + Get the [tree](#common.Tree) that represents the current node, + if any. Will return null when the node is in a [tree + buffer](#common.TreeBuffer). + */ + readonly tree: Tree | null; + /** + Retrieve a stable [syntax node](#common.SyntaxNode) at this + position. + */ + readonly node: SyntaxNode; + /** + Test whether the node matches a given context—a sequence of + direct parent nodes. Empty strings in the context array act as + wildcards, other strings must match the ancestor node's name. + */ + matchContext(context: readonly string[]): boolean; +} +/** +A syntax node provides an immutable pointer to a given node in a +tree. When iterating over large amounts of nodes, you may want to +use a mutable [cursor](#common.TreeCursor) instead, which is more +efficient. +*/ +interface SyntaxNode extends SyntaxNodeRef { + /** + The node's parent node, if any. + */ + parent: SyntaxNode | null; + /** + The first child, if the node has children. + */ + firstChild: SyntaxNode | null; + /** + The node's last child, if available. + */ + lastChild: SyntaxNode | null; + /** + The first child that ends after `pos`. + */ + childAfter(pos: number): SyntaxNode | null; + /** + The last child that starts before `pos`. + */ + childBefore(pos: number): SyntaxNode | null; + /** + Enter the child at the given position. If side is -1 the child + may end at that position, when 1 it may start there. + + This will by default enter + [overlaid](#common.MountedTree.overlay) + [mounted](#common.NodeProp^mounted) trees. You can set + `overlays` to false to disable that. + + Similarly, when `buffers` is false this will not enter + [buffers](#common.TreeBuffer), only [nodes](#common.Tree) (which + is mostly useful when looking for props, which cannot exist on + buffer-allocated nodes). + */ + enter(pos: number, side: -1 | 0 | 1, mode?: IterMode): SyntaxNode | null; + /** + This node's next sibling, if any. + */ + nextSibling: SyntaxNode | null; + /** + This node's previous sibling. + */ + prevSibling: SyntaxNode | null; + /** + A [tree cursor](#common.TreeCursor) starting at this node. + */ + cursor(mode?: IterMode): TreeCursor; + /** + Find the node around, before (if `side` is -1), or after (`side` + is 1) the given position. Will look in parent nodes if the + position is outside this node. + */ + resolve(pos: number, side?: -1 | 0 | 1): SyntaxNode; + /** + Similar to `resolve`, but enter + [overlaid](#common.MountedTree.overlay) nodes. + */ + resolveInner(pos: number, side?: -1 | 0 | 1): SyntaxNode; + /** + Move the position to the innermost node before `pos` that looks + like it is unfinished (meaning it ends in an error node or has a + child ending in an error node right at its end). + */ + enterUnfinishedNodesBefore(pos: number): SyntaxNode; + /** + Get a [tree](#common.Tree) for this node. Will allocate one if it + points into a buffer. + */ + toTree(): Tree; + /** + Get the first child of the given type (which may be a [node + name](#common.NodeType.name) or a [group + name](#common.NodeProp^group)). If `before` is non-null, only + return children that occur somewhere after a node with that name + or group. If `after` is non-null, only return children that + occur somewhere before a node with that name or group. + */ + getChild(type: string | number, before?: string | number | null, after?: string | number | null): SyntaxNode | null; + /** + Like [`getChild`](#common.SyntaxNode.getChild), but return all + matching children, not just the first. + */ + getChildren(type: string | number, before?: string | number | null, after?: string | number | null): SyntaxNode[]; +} +/** +A tree cursor object focuses on a given node in a syntax tree, and +allows you to move to adjacent nodes. +*/ +declare class TreeCursor implements SyntaxNodeRef { + /** + The node's type. + */ + type: NodeType; + /** + Shorthand for `.type.name`. + */ + get name(): string; + /** + The start source offset of this node. + */ + from: number; + /** + The end source offset. + */ + to: number; + private stack; + private bufferNode; + private yieldNode; + private yieldBuf; + /** + Move the cursor to this node's first child. When this returns + false, the node has no child, and the cursor has not been moved. + */ + firstChild(): boolean; + /** + Move the cursor to this node's last child. + */ + lastChild(): boolean; + /** + Move the cursor to the first child that ends after `pos`. + */ + childAfter(pos: number): boolean; + /** + Move to the last child that starts before `pos`. + */ + childBefore(pos: number): boolean; + /** + Move the cursor to the child around `pos`. If side is -1 the + child may end at that position, when 1 it may start there. This + will also enter [overlaid](#common.MountedTree.overlay) + [mounted](#common.NodeProp^mounted) trees unless `overlays` is + set to false. + */ + enter(pos: number, side: -1 | 0 | 1, mode?: IterMode): boolean; + /** + Move to the node's parent node, if this isn't the top node. + */ + parent(): boolean; + /** + Move to this node's next sibling, if any. + */ + nextSibling(): boolean; + /** + Move to this node's previous sibling, if any. + */ + prevSibling(): boolean; + private atLastNode; + private move; + /** + Move to the next node in a + [pre-order](https://en.wikipedia.org/wiki/Tree_traversal#Pre-order,_NLR) + traversal, going from a node to its first child or, if the + current node is empty or `enter` is false, its next sibling or + the next sibling of the first parent node that has one. + */ + next(enter?: boolean): boolean; + /** + Move to the next node in a last-to-first pre-order traversal. A + node is followed by its last child or, if it has none, its + previous sibling or the previous sibling of the first parent + node that has one. + */ + prev(enter?: boolean): boolean; + /** + Move the cursor to the innermost node that covers `pos`. If + `side` is -1, it will enter nodes that end at `pos`. If it is 1, + it will enter nodes that start at `pos`. + */ + moveTo(pos: number, side?: -1 | 0 | 1): this; + /** + Get a [syntax node](#common.SyntaxNode) at the cursor's current + position. + */ + get node(): SyntaxNode; + /** + Get the [tree](#common.Tree) that represents the current node, if + any. Will return null when the node is in a [tree + buffer](#common.TreeBuffer). + */ + get tree(): Tree | null; + /** + Iterate over the current node and all its descendants, calling + `enter` when entering a node and `leave`, if given, when leaving + one. When `enter` returns `false`, any children of that node are + skipped, and `leave` isn't called for it. + */ + iterate(enter: (node: SyntaxNodeRef) => boolean | void, leave?: (node: SyntaxNodeRef) => void): void; + /** + Test whether the current node matches a given context—a sequence + of direct parent node names. Empty strings in the context array + are treated as wildcards. + */ + matchContext(context: readonly string[]): boolean; +} +/** +Provides a way to associate values with pieces of trees. As long +as that part of the tree is reused, the associated values can be +retrieved from an updated tree. +*/ +declare class NodeWeakMap { + private map; + private setBuffer; + private getBuffer; + /** + Set the value for this syntax node. + */ + set(node: SyntaxNode, value: T): void; + /** + Retrieve value for this syntax node, if it exists in the map. + */ + get(node: SyntaxNode): T | undefined; + /** + Set the value for the node that a cursor currently points to. + */ + cursorSet(cursor: TreeCursor, value: T): void; + /** + Retrieve the value for the node that a cursor currently points + to. + */ + cursorGet(cursor: TreeCursor): T | undefined; +} + +/** +Objects returned by the function passed to +[`parseMixed`](#common.parseMixed) should conform to this +interface. +*/ +interface NestedParse { + /** + The parser to use for the inner region. + */ + parser: Parser; + /** + When this property is not given, the entire node is parsed with + this parser, and it is [mounted](#common.NodeProp^mounted) as a + non-overlay node, replacing its host node in tree iteration. + + When an array of ranges is given, only those ranges are parsed, + and the tree is mounted as an + [overlay](#common.MountedTree.overlay). + + When a function is given, that function will be called for + descendant nodes of the target node, not including child nodes + that are covered by another nested parse, to determine the + overlay ranges. When it returns true, the entire descendant is + included, otherwise just the range given. The mixed parser will + optimize range-finding in reused nodes, which means it's a good + idea to use a function here when the target node is expected to + have a large, deep structure. + */ + overlay?: readonly { + from: number; + to: number; + }[] | ((node: SyntaxNodeRef) => { + from: number; + to: number; + } | boolean); +} +/** +Create a parse wrapper that, after the inner parse completes, +scans its tree for mixed language regions with the `nest` +function, runs the resulting [inner parses](#common.NestedParse), +and then [mounts](#common.NodeProp^mounted) their results onto the +tree. +*/ +declare function parseMixed(nest: (node: SyntaxNodeRef, input: Input) => NestedParse | null): ParseWrapper; + +export { BufferCursor, ChangedRange, DefaultBufferLength, Input, IterMode, MountedTree, NestedParse, NodeIterator, NodeProp, NodePropSource, NodeSet, NodeType, NodeWeakMap, ParseWrapper, Parser, PartialParse, SyntaxNode, SyntaxNodeRef, Tree, TreeBuffer, TreeCursor, TreeFragment, parseMixed }; diff --git a/node_modules/@lezer/common/dist/index.d.ts b/node_modules/@lezer/common/dist/index.d.ts new file mode 100644 index 00000000..478cf432 --- /dev/null +++ b/node_modules/@lezer/common/dist/index.d.ts @@ -0,0 +1,1137 @@ +/** +The [`TreeFragment.applyChanges`](#common.TreeFragment^applyChanges) +method expects changed ranges in this format. +*/ +interface ChangedRange { + /** + The start of the change in the start document + */ + fromA: number; + /** + The end of the change in the start document + */ + toA: number; + /** + The start of the replacement in the new document + */ + fromB: number; + /** + The end of the replacement in the new document + */ + toB: number; +} +/** +Tree fragments are used during [incremental +parsing](#common.Parser.startParse) to track parts of old trees +that can be reused in a new parse. An array of fragments is used +to track regions of an old tree whose nodes might be reused in new +parses. Use the static +[`applyChanges`](#common.TreeFragment^applyChanges) method to +update fragments for document changes. +*/ +declare class TreeFragment { + /** + The start of the unchanged range pointed to by this fragment. + This refers to an offset in the _updated_ document (as opposed + to the original tree). + */ + readonly from: number; + /** + The end of the unchanged range. + */ + readonly to: number; + /** + The tree that this fragment is based on. + */ + readonly tree: Tree; + /** + The offset between the fragment's tree and the document that + this fragment can be used against. Add this when going from + document to tree positions, subtract it to go from tree to + document positions. + */ + readonly offset: number; + /** + Construct a tree fragment. You'll usually want to use + [`addTree`](#common.TreeFragment^addTree) and + [`applyChanges`](#common.TreeFragment^applyChanges) instead of + calling this directly. + */ + constructor( + /** + The start of the unchanged range pointed to by this fragment. + This refers to an offset in the _updated_ document (as opposed + to the original tree). + */ + from: number, + /** + The end of the unchanged range. + */ + to: number, + /** + The tree that this fragment is based on. + */ + tree: Tree, + /** + The offset between the fragment's tree and the document that + this fragment can be used against. Add this when going from + document to tree positions, subtract it to go from tree to + document positions. + */ + offset: number, openStart?: boolean, openEnd?: boolean); + /** + Whether the start of the fragment represents the start of a + parse, or the end of a change. (In the second case, it may not + be safe to reuse some nodes at the start, depending on the + parsing algorithm.) + */ + get openStart(): boolean; + /** + Whether the end of the fragment represents the end of a + full-document parse, or the start of a change. + */ + get openEnd(): boolean; + /** + Create a set of fragments from a freshly parsed tree, or update + an existing set of fragments by replacing the ones that overlap + with a tree with content from the new tree. When `partial` is + true, the parse is treated as incomplete, and the resulting + fragment has [`openEnd`](#common.TreeFragment.openEnd) set to + true. + */ + static addTree(tree: Tree, fragments?: readonly TreeFragment[], partial?: boolean): readonly TreeFragment[]; + /** + Apply a set of edits to an array of fragments, removing or + splitting fragments as necessary to remove edited ranges, and + adjusting offsets for fragments that moved. + */ + static applyChanges(fragments: readonly TreeFragment[], changes: readonly ChangedRange[], minGap?: number): readonly TreeFragment[]; +} +/** +Interface used to represent an in-progress parse, which can be +moved forward piece-by-piece. +*/ +interface PartialParse { + /** + Advance the parse state by some amount. Will return the finished + syntax tree when the parse completes. + */ + advance(): Tree | null; + /** + The position up to which the document has been parsed. Note + that, in multi-pass parsers, this will stay back until the last + pass has moved past a given position. + */ + readonly parsedPos: number; + /** + Tell the parse to not advance beyond the given position. + `advance` will return a tree when the parse has reached the + position. Note that, depending on the parser algorithm and the + state of the parse when `stopAt` was called, that tree may + contain nodes beyond the position. It is an error to call + `stopAt` with a higher position than it's [current + value](#common.PartialParse.stoppedAt). + */ + stopAt(pos: number): void; + /** + Reports whether `stopAt` has been called on this parse. + */ + readonly stoppedAt: number | null; +} +/** +A superclass that parsers should extend. +*/ +declare abstract class Parser { + /** + Start a parse for a single tree. This is the method concrete + parser implementations must implement. Called by `startParse`, + with the optional arguments resolved. + */ + abstract createParse(input: Input, fragments: readonly TreeFragment[], ranges: readonly { + from: number; + to: number; + }[]): PartialParse; + /** + Start a parse, returning a [partial parse](#common.PartialParse) + object. [`fragments`](#common.TreeFragment) can be passed in to + make the parse incremental. + + By default, the entire input is parsed. You can pass `ranges`, + which should be a sorted array of non-empty, non-overlapping + ranges, to parse only those ranges. The tree returned in that + case will start at `ranges[0].from`. + */ + startParse(input: Input | string, fragments?: readonly TreeFragment[], ranges?: readonly { + from: number; + to: number; + }[]): PartialParse; + /** + Run a full parse, returning the resulting tree. + */ + parse(input: Input | string, fragments?: readonly TreeFragment[], ranges?: readonly { + from: number; + to: number; + }[]): Tree; +} +/** +This is the interface parsers use to access the document. To run +Lezer directly on your own document data structure, you have to +write an implementation of it. +*/ +interface Input { + /** + The length of the document. + */ + readonly length: number; + /** + Get the chunk after the given position. The returned string + should start at `from` and, if that isn't the end of the + document, may be of any length greater than zero. + */ + chunk(from: number): string; + /** + Indicates whether the chunks already end at line breaks, so that + client code that wants to work by-line can avoid re-scanning + them for line breaks. When this is true, the result of `chunk()` + should either be a single line break, or the content between + `from` and the next line break. + */ + readonly lineChunks: boolean; + /** + Read the part of the document between the given positions. + */ + read(from: number, to: number): string; +} +/** +Parse wrapper functions are supported by some parsers to inject +additional parsing logic. +*/ +type ParseWrapper = (inner: PartialParse, input: Input, fragments: readonly TreeFragment[], ranges: readonly { + from: number; + to: number; +}[]) => PartialParse; + +/** +The default maximum length of a `TreeBuffer` node. +*/ +declare const DefaultBufferLength = 1024; +/** +Each [node type](#common.NodeType) or [individual tree](#common.Tree) +can have metadata associated with it in props. Instances of this +class represent prop names. +*/ +declare class NodeProp { + /** + Indicates whether this prop is stored per [node + type](#common.NodeType) or per [tree node](#common.Tree). + */ + perNode: boolean; + /** + A method that deserializes a value of this prop from a string. + Can be used to allow a prop to be directly written in a grammar + file. + */ + deserialize: (str: string) => T; + /** + Create a new node prop type. + */ + constructor(config?: { + /** + The [deserialize](#common.NodeProp.deserialize) function to + use for this prop, used for example when directly providing + the prop from a grammar file. Defaults to a function that + raises an error. + */ + deserialize?: (str: string) => T; + /** + By default, node props are stored in the [node + type](#common.NodeType). It can sometimes be useful to directly + store information (usually related to the parsing algorithm) + in [nodes](#common.Tree) themselves. Set this to true to enable + that for this prop. + */ + perNode?: boolean; + }); + /** + This is meant to be used with + [`NodeSet.extend`](#common.NodeSet.extend) or + [`LRParser.configure`](#lr.ParserConfig.props) to compute + prop values for each node type in the set. Takes a [match + object](#common.NodeType^match) or function that returns undefined + if the node type doesn't get this prop, and the prop's value if + it does. + */ + add(match: { + [selector: string]: T; + } | ((type: NodeType) => T | undefined)): NodePropSource; + /** + Prop that is used to describe matching delimiters. For opening + delimiters, this holds an array of node names (written as a + space-separated string when declaring this prop in a grammar) + for the node types of closing delimiters that match it. + */ + static closedBy: NodeProp; + /** + The inverse of [`closedBy`](#common.NodeProp^closedBy). This is + attached to closing delimiters, holding an array of node names + of types of matching opening delimiters. + */ + static openedBy: NodeProp; + /** + Used to assign node types to groups (for example, all node + types that represent an expression could be tagged with an + `"Expression"` group). + */ + static group: NodeProp; + /** + Attached to nodes to indicate these should be + [displayed](https://codemirror.net/docs/ref/#language.syntaxTree) + in a bidirectional text isolate, so that direction-neutral + characters on their sides don't incorrectly get associated with + surrounding text. You'll generally want to set this for nodes + that contain arbitrary text, like strings and comments, and for + nodes that appear _inside_ arbitrary text, like HTML tags. When + not given a value, in a grammar declaration, defaults to + `"auto"`. + */ + static isolate: NodeProp<"rtl" | "ltr" | "auto">; + /** + The hash of the [context](#lr.ContextTracker.constructor) + that the node was parsed in, if any. Used to limit reuse of + contextual nodes. + */ + static contextHash: NodeProp; + /** + The distance beyond the end of the node that the tokenizer + looked ahead for any of the tokens inside the node. (The LR + parser only stores this when it is larger than 25, for + efficiency reasons.) + */ + static lookAhead: NodeProp; + /** + This per-node prop is used to replace a given node, or part of a + node, with another tree. This is useful to include trees from + different languages in mixed-language parsers. + */ + static mounted: NodeProp; +} +/** +A mounted tree, which can be [stored](#common.NodeProp^mounted) on +a tree node to indicate that parts of its content are +represented by another tree. +*/ +declare class MountedTree { + /** + The inner tree. + */ + readonly tree: Tree; + /** + If this is null, this tree replaces the entire node (it will + be included in the regular iteration instead of its host + node). If not, only the given ranges are considered to be + covered by this tree. This is used for trees that are mixed in + a way that isn't strictly hierarchical. Such mounted trees are + only entered by [`resolveInner`](#common.Tree.resolveInner) + and [`enter`](#common.SyntaxNode.enter). + */ + readonly overlay: readonly { + from: number; + to: number; + }[] | null; + /** + The parser used to create this subtree. + */ + readonly parser: Parser; + constructor( + /** + The inner tree. + */ + tree: Tree, + /** + If this is null, this tree replaces the entire node (it will + be included in the regular iteration instead of its host + node). If not, only the given ranges are considered to be + covered by this tree. This is used for trees that are mixed in + a way that isn't strictly hierarchical. Such mounted trees are + only entered by [`resolveInner`](#common.Tree.resolveInner) + and [`enter`](#common.SyntaxNode.enter). + */ + overlay: readonly { + from: number; + to: number; + }[] | null, + /** + The parser used to create this subtree. + */ + parser: Parser); +} +/** +Type returned by [`NodeProp.add`](#common.NodeProp.add). Describes +whether a prop should be added to a given node type in a node set, +and what value it should have. +*/ +type NodePropSource = (type: NodeType) => null | [NodeProp, any]; +/** +Each node in a syntax tree has a node type associated with it. +*/ +declare class NodeType { + /** + The name of the node type. Not necessarily unique, but if the + grammar was written properly, different node types with the + same name within a node set should play the same semantic + role. + */ + readonly name: string; + /** + The id of this node in its set. Corresponds to the term ids + used in the parser. + */ + readonly id: number; + /** + Define a node type. + */ + static define(spec: { + /** + The ID of the node type. When this type is used in a + [set](#common.NodeSet), the ID must correspond to its index in + the type array. + */ + id: number; + /** + The name of the node type. Leave empty to define an anonymous + node. + */ + name?: string; + /** + [Node props](#common.NodeProp) to assign to the type. The value + given for any given prop should correspond to the prop's type. + */ + props?: readonly ([NodeProp, any] | NodePropSource)[]; + /** + Whether this is a [top node](#common.NodeType.isTop). + */ + top?: boolean; + /** + Whether this node counts as an [error + node](#common.NodeType.isError). + */ + error?: boolean; + /** + Whether this node is a [skipped](#common.NodeType.isSkipped) + node. + */ + skipped?: boolean; + }): NodeType; + /** + Retrieves a node prop for this type. Will return `undefined` if + the prop isn't present on this node. + */ + prop(prop: NodeProp): T | undefined; + /** + True when this is the top node of a grammar. + */ + get isTop(): boolean; + /** + True when this node is produced by a skip rule. + */ + get isSkipped(): boolean; + /** + Indicates whether this is an error node. + */ + get isError(): boolean; + /** + When true, this node type doesn't correspond to a user-declared + named node, for example because it is used to cache repetition. + */ + get isAnonymous(): boolean; + /** + Returns true when this node's name or one of its + [groups](#common.NodeProp^group) matches the given string. + */ + is(name: string | number): boolean; + /** + An empty dummy node type to use when no actual type is available. + */ + static none: NodeType; + /** + Create a function from node types to arbitrary values by + specifying an object whose property names are node or + [group](#common.NodeProp^group) names. Often useful with + [`NodeProp.add`](#common.NodeProp.add). You can put multiple + names, separated by spaces, in a single property name to map + multiple node names to a single value. + */ + static match(map: { + [selector: string]: T; + }): (node: NodeType) => T | undefined; +} +/** +A node set holds a collection of node types. It is used to +compactly represent trees by storing their type ids, rather than a +full pointer to the type object, in a numeric array. Each parser +[has](#lr.LRParser.nodeSet) a node set, and [tree +buffers](#common.TreeBuffer) can only store collections of nodes +from the same set. A set can have a maximum of 2**16 (65536) node +types in it, so that the ids fit into 16-bit typed array slots. +*/ +declare class NodeSet { + /** + The node types in this set, by id. + */ + readonly types: readonly NodeType[]; + /** + Create a set with the given types. The `id` property of each + type should correspond to its position within the array. + */ + constructor( + /** + The node types in this set, by id. + */ + types: readonly NodeType[]); + /** + Create a copy of this set with some node properties added. The + arguments to this method can be created with + [`NodeProp.add`](#common.NodeProp.add). + */ + extend(...props: NodePropSource[]): NodeSet; +} +/** +Options that control iteration. Can be combined with the `|` +operator to enable multiple ones. +*/ +declare enum IterMode { + /** + When enabled, iteration will only visit [`Tree`](#common.Tree) + objects, not nodes packed into + [`TreeBuffer`](#common.TreeBuffer)s. + */ + ExcludeBuffers = 1, + /** + Enable this to make iteration include anonymous nodes (such as + the nodes that wrap repeated grammar constructs into a balanced + tree). + */ + IncludeAnonymous = 2, + /** + By default, regular [mounted](#common.NodeProp^mounted) nodes + replace their base node in iteration. Enable this to ignore them + instead. + */ + IgnoreMounts = 4, + /** + This option only applies in + [`enter`](#common.SyntaxNode.enter)-style methods. It tells the + library to not enter mounted overlays if one covers the given + position. + */ + IgnoreOverlays = 8 +} +/** +A piece of syntax tree. There are two ways to approach these +trees: the way they are actually stored in memory, and the +convenient way. + +Syntax trees are stored as a tree of `Tree` and `TreeBuffer` +objects. By packing detail information into `TreeBuffer` leaf +nodes, the representation is made a lot more memory-efficient. + +However, when you want to actually work with tree nodes, this +representation is very awkward, so most client code will want to +use the [`TreeCursor`](#common.TreeCursor) or +[`SyntaxNode`](#common.SyntaxNode) interface instead, which provides +a view on some part of this data structure, and can be used to +move around to adjacent nodes. +*/ +declare class Tree { + /** + The type of the top node. + */ + readonly type: NodeType; + /** + This node's child nodes. + */ + readonly children: readonly (Tree | TreeBuffer)[]; + /** + The positions (offsets relative to the start of this tree) of + the children. + */ + readonly positions: readonly number[]; + /** + The total length of this tree + */ + readonly length: number; + /** + Construct a new tree. See also [`Tree.build`](#common.Tree^build). + */ + constructor( + /** + The type of the top node. + */ + type: NodeType, + /** + This node's child nodes. + */ + children: readonly (Tree | TreeBuffer)[], + /** + The positions (offsets relative to the start of this tree) of + the children. + */ + positions: readonly number[], + /** + The total length of this tree + */ + length: number, + /** + Per-node [node props](#common.NodeProp) to associate with this node. + */ + props?: readonly [NodeProp | number, any][]); + /** + The empty tree + */ + static empty: Tree; + /** + Get a [tree cursor](#common.TreeCursor) positioned at the top of + the tree. Mode can be used to [control](#common.IterMode) which + nodes the cursor visits. + */ + cursor(mode?: IterMode): TreeCursor; + /** + Get a [tree cursor](#common.TreeCursor) pointing into this tree + at the given position and side (see + [`moveTo`](#common.TreeCursor.moveTo). + */ + cursorAt(pos: number, side?: -1 | 0 | 1, mode?: IterMode): TreeCursor; + /** + Get a [syntax node](#common.SyntaxNode) object for the top of the + tree. + */ + get topNode(): SyntaxNode; + /** + Get the [syntax node](#common.SyntaxNode) at the given position. + If `side` is -1, this will move into nodes that end at the + position. If 1, it'll move into nodes that start at the + position. With 0, it'll only enter nodes that cover the position + from both sides. + + Note that this will not enter + [overlays](#common.MountedTree.overlay), and you often want + [`resolveInner`](#common.Tree.resolveInner) instead. + */ + resolve(pos: number, side?: -1 | 0 | 1): SyntaxNode; + /** + Like [`resolve`](#common.Tree.resolve), but will enter + [overlaid](#common.MountedTree.overlay) nodes, producing a syntax node + pointing into the innermost overlaid tree at the given position + (with parent links going through all parent structure, including + the host trees). + */ + resolveInner(pos: number, side?: -1 | 0 | 1): SyntaxNode; + /** + In some situations, it can be useful to iterate through all + nodes around a position, including those in overlays that don't + directly cover the position. This method gives you an iterator + that will produce all nodes, from small to big, around the given + position. + */ + resolveStack(pos: number, side?: -1 | 0 | 1): NodeIterator; + /** + Iterate over the tree and its children, calling `enter` for any + node that touches the `from`/`to` region (if given) before + running over such a node's children, and `leave` (if given) when + leaving the node. When `enter` returns `false`, that node will + not have its children iterated over (or `leave` called). + */ + iterate(spec: { + enter(node: SyntaxNodeRef): boolean | void; + leave?(node: SyntaxNodeRef): void; + from?: number; + to?: number; + mode?: IterMode; + }): void; + /** + Get the value of the given [node prop](#common.NodeProp) for this + node. Works with both per-node and per-type props. + */ + prop(prop: NodeProp): T | undefined; + /** + Returns the node's [per-node props](#common.NodeProp.perNode) in a + format that can be passed to the [`Tree`](#common.Tree) + constructor. + */ + get propValues(): readonly [NodeProp | number, any][]; + /** + Balance the direct children of this tree, producing a copy of + which may have children grouped into subtrees with type + [`NodeType.none`](#common.NodeType^none). + */ + balance(config?: { + /** + Function to create the newly balanced subtrees. + */ + makeTree?: (children: readonly (Tree | TreeBuffer)[], positions: readonly number[], length: number) => Tree; + }): Tree; + /** + Build a tree from a postfix-ordered buffer of node information, + or a cursor over such a buffer. + */ + static build(data: BuildData): Tree; +} +/** +Represents a sequence of nodes. +*/ +type NodeIterator = { + node: SyntaxNode; + next: NodeIterator | null; +}; +type BuildData = { + /** + The buffer or buffer cursor to read the node data from. + + When this is an array, it should contain four values for every + node in the tree. + + - The first holds the node's type, as a node ID pointing into + the given `NodeSet`. + - The second holds the node's start offset. + - The third the end offset. + - The fourth the amount of space taken up in the array by this + node and its children. Since there's four values per node, + this is the total number of nodes inside this node (children + and transitive children) plus one for the node itself, times + four. + + Parent nodes should appear _after_ child nodes in the array. As + an example, a node of type 10 spanning positions 0 to 4, with + two children, of type 11 and 12, might look like this: + + [11, 0, 1, 4, 12, 2, 4, 4, 10, 0, 4, 12] + */ + buffer: BufferCursor | readonly number[]; + /** + The node types to use. + */ + nodeSet: NodeSet; + /** + The id of the top node type. + */ + topID: number; + /** + The position the tree should start at. Defaults to 0. + */ + start?: number; + /** + The position in the buffer where the function should stop + reading. Defaults to 0. + */ + bufferStart?: number; + /** + The length of the wrapping node. The end offset of the last + child is used when not provided. + */ + length?: number; + /** + The maximum buffer length to use. Defaults to + [`DefaultBufferLength`](#common.DefaultBufferLength). + */ + maxBufferLength?: number; + /** + An optional array holding reused nodes that the buffer can refer + to. + */ + reused?: readonly Tree[]; + /** + The first node type that indicates repeat constructs in this + grammar. + */ + minRepeatType?: number; +}; +/** +This is used by `Tree.build` as an abstraction for iterating over +a tree buffer. A cursor initially points at the very last element +in the buffer. Every time `next()` is called it moves on to the +previous one. +*/ +interface BufferCursor { + /** + The current buffer position (four times the number of nodes + remaining). + */ + pos: number; + /** + The node ID of the next node in the buffer. + */ + id: number; + /** + The start position of the next node in the buffer. + */ + start: number; + /** + The end position of the next node. + */ + end: number; + /** + The size of the next node (the number of nodes inside, counting + the node itself, times 4). + */ + size: number; + /** + Moves `this.pos` down by 4. + */ + next(): void; + /** + Create a copy of this cursor. + */ + fork(): BufferCursor; +} +/** +Tree buffers contain (type, start, end, endIndex) quads for each +node. In such a buffer, nodes are stored in prefix order (parents +before children, with the endIndex of the parent indicating which +children belong to it). +*/ +declare class TreeBuffer { + /** + The buffer's content. + */ + readonly buffer: Uint16Array; + /** + The total length of the group of nodes in the buffer. + */ + readonly length: number; + /** + The node set used in this buffer. + */ + readonly set: NodeSet; + /** + Create a tree buffer. + */ + constructor( + /** + The buffer's content. + */ + buffer: Uint16Array, + /** + The total length of the group of nodes in the buffer. + */ + length: number, + /** + The node set used in this buffer. + */ + set: NodeSet); +} +/** +The set of properties provided by both [`SyntaxNode`](#common.SyntaxNode) +and [`TreeCursor`](#common.TreeCursor). Note that, if you need +an object that is guaranteed to stay stable in the future, you +need to use the [`node`](#common.SyntaxNodeRef.node) accessor. +*/ +interface SyntaxNodeRef { + /** + The start position of the node. + */ + readonly from: number; + /** + The end position of the node. + */ + readonly to: number; + /** + The type of the node. + */ + readonly type: NodeType; + /** + The name of the node (`.type.name`). + */ + readonly name: string; + /** + Get the [tree](#common.Tree) that represents the current node, + if any. Will return null when the node is in a [tree + buffer](#common.TreeBuffer). + */ + readonly tree: Tree | null; + /** + Retrieve a stable [syntax node](#common.SyntaxNode) at this + position. + */ + readonly node: SyntaxNode; + /** + Test whether the node matches a given context—a sequence of + direct parent nodes. Empty strings in the context array act as + wildcards, other strings must match the ancestor node's name. + */ + matchContext(context: readonly string[]): boolean; +} +/** +A syntax node provides an immutable pointer to a given node in a +tree. When iterating over large amounts of nodes, you may want to +use a mutable [cursor](#common.TreeCursor) instead, which is more +efficient. +*/ +interface SyntaxNode extends SyntaxNodeRef { + /** + The node's parent node, if any. + */ + parent: SyntaxNode | null; + /** + The first child, if the node has children. + */ + firstChild: SyntaxNode | null; + /** + The node's last child, if available. + */ + lastChild: SyntaxNode | null; + /** + The first child that ends after `pos`. + */ + childAfter(pos: number): SyntaxNode | null; + /** + The last child that starts before `pos`. + */ + childBefore(pos: number): SyntaxNode | null; + /** + Enter the child at the given position. If side is -1 the child + may end at that position, when 1 it may start there. + + This will by default enter + [overlaid](#common.MountedTree.overlay) + [mounted](#common.NodeProp^mounted) trees. You can set + `overlays` to false to disable that. + + Similarly, when `buffers` is false this will not enter + [buffers](#common.TreeBuffer), only [nodes](#common.Tree) (which + is mostly useful when looking for props, which cannot exist on + buffer-allocated nodes). + */ + enter(pos: number, side: -1 | 0 | 1, mode?: IterMode): SyntaxNode | null; + /** + This node's next sibling, if any. + */ + nextSibling: SyntaxNode | null; + /** + This node's previous sibling. + */ + prevSibling: SyntaxNode | null; + /** + A [tree cursor](#common.TreeCursor) starting at this node. + */ + cursor(mode?: IterMode): TreeCursor; + /** + Find the node around, before (if `side` is -1), or after (`side` + is 1) the given position. Will look in parent nodes if the + position is outside this node. + */ + resolve(pos: number, side?: -1 | 0 | 1): SyntaxNode; + /** + Similar to `resolve`, but enter + [overlaid](#common.MountedTree.overlay) nodes. + */ + resolveInner(pos: number, side?: -1 | 0 | 1): SyntaxNode; + /** + Move the position to the innermost node before `pos` that looks + like it is unfinished (meaning it ends in an error node or has a + child ending in an error node right at its end). + */ + enterUnfinishedNodesBefore(pos: number): SyntaxNode; + /** + Get a [tree](#common.Tree) for this node. Will allocate one if it + points into a buffer. + */ + toTree(): Tree; + /** + Get the first child of the given type (which may be a [node + name](#common.NodeType.name) or a [group + name](#common.NodeProp^group)). If `before` is non-null, only + return children that occur somewhere after a node with that name + or group. If `after` is non-null, only return children that + occur somewhere before a node with that name or group. + */ + getChild(type: string | number, before?: string | number | null, after?: string | number | null): SyntaxNode | null; + /** + Like [`getChild`](#common.SyntaxNode.getChild), but return all + matching children, not just the first. + */ + getChildren(type: string | number, before?: string | number | null, after?: string | number | null): SyntaxNode[]; +} +/** +A tree cursor object focuses on a given node in a syntax tree, and +allows you to move to adjacent nodes. +*/ +declare class TreeCursor implements SyntaxNodeRef { + /** + The node's type. + */ + type: NodeType; + /** + Shorthand for `.type.name`. + */ + get name(): string; + /** + The start source offset of this node. + */ + from: number; + /** + The end source offset. + */ + to: number; + private stack; + private bufferNode; + private yieldNode; + private yieldBuf; + /** + Move the cursor to this node's first child. When this returns + false, the node has no child, and the cursor has not been moved. + */ + firstChild(): boolean; + /** + Move the cursor to this node's last child. + */ + lastChild(): boolean; + /** + Move the cursor to the first child that ends after `pos`. + */ + childAfter(pos: number): boolean; + /** + Move to the last child that starts before `pos`. + */ + childBefore(pos: number): boolean; + /** + Move the cursor to the child around `pos`. If side is -1 the + child may end at that position, when 1 it may start there. This + will also enter [overlaid](#common.MountedTree.overlay) + [mounted](#common.NodeProp^mounted) trees unless `overlays` is + set to false. + */ + enter(pos: number, side: -1 | 0 | 1, mode?: IterMode): boolean; + /** + Move to the node's parent node, if this isn't the top node. + */ + parent(): boolean; + /** + Move to this node's next sibling, if any. + */ + nextSibling(): boolean; + /** + Move to this node's previous sibling, if any. + */ + prevSibling(): boolean; + private atLastNode; + private move; + /** + Move to the next node in a + [pre-order](https://en.wikipedia.org/wiki/Tree_traversal#Pre-order,_NLR) + traversal, going from a node to its first child or, if the + current node is empty or `enter` is false, its next sibling or + the next sibling of the first parent node that has one. + */ + next(enter?: boolean): boolean; + /** + Move to the next node in a last-to-first pre-order traversal. A + node is followed by its last child or, if it has none, its + previous sibling or the previous sibling of the first parent + node that has one. + */ + prev(enter?: boolean): boolean; + /** + Move the cursor to the innermost node that covers `pos`. If + `side` is -1, it will enter nodes that end at `pos`. If it is 1, + it will enter nodes that start at `pos`. + */ + moveTo(pos: number, side?: -1 | 0 | 1): this; + /** + Get a [syntax node](#common.SyntaxNode) at the cursor's current + position. + */ + get node(): SyntaxNode; + /** + Get the [tree](#common.Tree) that represents the current node, if + any. Will return null when the node is in a [tree + buffer](#common.TreeBuffer). + */ + get tree(): Tree | null; + /** + Iterate over the current node and all its descendants, calling + `enter` when entering a node and `leave`, if given, when leaving + one. When `enter` returns `false`, any children of that node are + skipped, and `leave` isn't called for it. + */ + iterate(enter: (node: SyntaxNodeRef) => boolean | void, leave?: (node: SyntaxNodeRef) => void): void; + /** + Test whether the current node matches a given context—a sequence + of direct parent node names. Empty strings in the context array + are treated as wildcards. + */ + matchContext(context: readonly string[]): boolean; +} +/** +Provides a way to associate values with pieces of trees. As long +as that part of the tree is reused, the associated values can be +retrieved from an updated tree. +*/ +declare class NodeWeakMap { + private map; + private setBuffer; + private getBuffer; + /** + Set the value for this syntax node. + */ + set(node: SyntaxNode, value: T): void; + /** + Retrieve value for this syntax node, if it exists in the map. + */ + get(node: SyntaxNode): T | undefined; + /** + Set the value for the node that a cursor currently points to. + */ + cursorSet(cursor: TreeCursor, value: T): void; + /** + Retrieve the value for the node that a cursor currently points + to. + */ + cursorGet(cursor: TreeCursor): T | undefined; +} + +/** +Objects returned by the function passed to +[`parseMixed`](#common.parseMixed) should conform to this +interface. +*/ +interface NestedParse { + /** + The parser to use for the inner region. + */ + parser: Parser; + /** + When this property is not given, the entire node is parsed with + this parser, and it is [mounted](#common.NodeProp^mounted) as a + non-overlay node, replacing its host node in tree iteration. + + When an array of ranges is given, only those ranges are parsed, + and the tree is mounted as an + [overlay](#common.MountedTree.overlay). + + When a function is given, that function will be called for + descendant nodes of the target node, not including child nodes + that are covered by another nested parse, to determine the + overlay ranges. When it returns true, the entire descendant is + included, otherwise just the range given. The mixed parser will + optimize range-finding in reused nodes, which means it's a good + idea to use a function here when the target node is expected to + have a large, deep structure. + */ + overlay?: readonly { + from: number; + to: number; + }[] | ((node: SyntaxNodeRef) => { + from: number; + to: number; + } | boolean); +} +/** +Create a parse wrapper that, after the inner parse completes, +scans its tree for mixed language regions with the `nest` +function, runs the resulting [inner parses](#common.NestedParse), +and then [mounts](#common.NodeProp^mounted) their results onto the +tree. +*/ +declare function parseMixed(nest: (node: SyntaxNodeRef, input: Input) => NestedParse | null): ParseWrapper; + +export { BufferCursor, ChangedRange, DefaultBufferLength, Input, IterMode, MountedTree, NestedParse, NodeIterator, NodeProp, NodePropSource, NodeSet, NodeType, NodeWeakMap, ParseWrapper, Parser, PartialParse, SyntaxNode, SyntaxNodeRef, Tree, TreeBuffer, TreeCursor, TreeFragment, parseMixed }; diff --git a/node_modules/@lezer/common/dist/index.js b/node_modules/@lezer/common/dist/index.js new file mode 100644 index 00000000..36de5ea7 --- /dev/null +++ b/node_modules/@lezer/common/dist/index.js @@ -0,0 +1,2168 @@ +/** +The default maximum length of a `TreeBuffer` node. +*/ +const DefaultBufferLength = 1024; +let nextPropID = 0; +class Range { + constructor(from, to) { + this.from = from; + this.to = to; + } +} +/** +Each [node type](#common.NodeType) or [individual tree](#common.Tree) +can have metadata associated with it in props. Instances of this +class represent prop names. +*/ +class NodeProp { + /** + Create a new node prop type. + */ + constructor(config = {}) { + this.id = nextPropID++; + this.perNode = !!config.perNode; + this.deserialize = config.deserialize || (() => { + throw new Error("This node type doesn't define a deserialize function"); + }); + } + /** + This is meant to be used with + [`NodeSet.extend`](#common.NodeSet.extend) or + [`LRParser.configure`](#lr.ParserConfig.props) to compute + prop values for each node type in the set. Takes a [match + object](#common.NodeType^match) or function that returns undefined + if the node type doesn't get this prop, and the prop's value if + it does. + */ + add(match) { + if (this.perNode) + throw new RangeError("Can't add per-node props to node types"); + if (typeof match != "function") + match = NodeType.match(match); + return (type) => { + let result = match(type); + return result === undefined ? null : [this, result]; + }; + } +} +/** +Prop that is used to describe matching delimiters. For opening +delimiters, this holds an array of node names (written as a +space-separated string when declaring this prop in a grammar) +for the node types of closing delimiters that match it. +*/ +NodeProp.closedBy = new NodeProp({ deserialize: str => str.split(" ") }); +/** +The inverse of [`closedBy`](#common.NodeProp^closedBy). This is +attached to closing delimiters, holding an array of node names +of types of matching opening delimiters. +*/ +NodeProp.openedBy = new NodeProp({ deserialize: str => str.split(" ") }); +/** +Used to assign node types to groups (for example, all node +types that represent an expression could be tagged with an +`"Expression"` group). +*/ +NodeProp.group = new NodeProp({ deserialize: str => str.split(" ") }); +/** +Attached to nodes to indicate these should be +[displayed](https://codemirror.net/docs/ref/#language.syntaxTree) +in a bidirectional text isolate, so that direction-neutral +characters on their sides don't incorrectly get associated with +surrounding text. You'll generally want to set this for nodes +that contain arbitrary text, like strings and comments, and for +nodes that appear _inside_ arbitrary text, like HTML tags. When +not given a value, in a grammar declaration, defaults to +`"auto"`. +*/ +NodeProp.isolate = new NodeProp({ deserialize: value => { + if (value && value != "rtl" && value != "ltr" && value != "auto") + throw new RangeError("Invalid value for isolate: " + value); + return value || "auto"; + } }); +/** +The hash of the [context](#lr.ContextTracker.constructor) +that the node was parsed in, if any. Used to limit reuse of +contextual nodes. +*/ +NodeProp.contextHash = new NodeProp({ perNode: true }); +/** +The distance beyond the end of the node that the tokenizer +looked ahead for any of the tokens inside the node. (The LR +parser only stores this when it is larger than 25, for +efficiency reasons.) +*/ +NodeProp.lookAhead = new NodeProp({ perNode: true }); +/** +This per-node prop is used to replace a given node, or part of a +node, with another tree. This is useful to include trees from +different languages in mixed-language parsers. +*/ +NodeProp.mounted = new NodeProp({ perNode: true }); +/** +A mounted tree, which can be [stored](#common.NodeProp^mounted) on +a tree node to indicate that parts of its content are +represented by another tree. +*/ +class MountedTree { + constructor( + /** + The inner tree. + */ + tree, + /** + If this is null, this tree replaces the entire node (it will + be included in the regular iteration instead of its host + node). If not, only the given ranges are considered to be + covered by this tree. This is used for trees that are mixed in + a way that isn't strictly hierarchical. Such mounted trees are + only entered by [`resolveInner`](#common.Tree.resolveInner) + and [`enter`](#common.SyntaxNode.enter). + */ + overlay, + /** + The parser used to create this subtree. + */ + parser) { + this.tree = tree; + this.overlay = overlay; + this.parser = parser; + } + /** + @internal + */ + static get(tree) { + return tree && tree.props && tree.props[NodeProp.mounted.id]; + } +} +const noProps = Object.create(null); +/** +Each node in a syntax tree has a node type associated with it. +*/ +class NodeType { + /** + @internal + */ + constructor( + /** + The name of the node type. Not necessarily unique, but if the + grammar was written properly, different node types with the + same name within a node set should play the same semantic + role. + */ + name, + /** + @internal + */ + props, + /** + The id of this node in its set. Corresponds to the term ids + used in the parser. + */ + id, + /** + @internal + */ + flags = 0) { + this.name = name; + this.props = props; + this.id = id; + this.flags = flags; + } + /** + Define a node type. + */ + static define(spec) { + let props = spec.props && spec.props.length ? Object.create(null) : noProps; + let flags = (spec.top ? 1 /* NodeFlag.Top */ : 0) | (spec.skipped ? 2 /* NodeFlag.Skipped */ : 0) | + (spec.error ? 4 /* NodeFlag.Error */ : 0) | (spec.name == null ? 8 /* NodeFlag.Anonymous */ : 0); + let type = new NodeType(spec.name || "", props, spec.id, flags); + if (spec.props) + for (let src of spec.props) { + if (!Array.isArray(src)) + src = src(type); + if (src) { + if (src[0].perNode) + throw new RangeError("Can't store a per-node prop on a node type"); + props[src[0].id] = src[1]; + } + } + return type; + } + /** + Retrieves a node prop for this type. Will return `undefined` if + the prop isn't present on this node. + */ + prop(prop) { return this.props[prop.id]; } + /** + True when this is the top node of a grammar. + */ + get isTop() { return (this.flags & 1 /* NodeFlag.Top */) > 0; } + /** + True when this node is produced by a skip rule. + */ + get isSkipped() { return (this.flags & 2 /* NodeFlag.Skipped */) > 0; } + /** + Indicates whether this is an error node. + */ + get isError() { return (this.flags & 4 /* NodeFlag.Error */) > 0; } + /** + When true, this node type doesn't correspond to a user-declared + named node, for example because it is used to cache repetition. + */ + get isAnonymous() { return (this.flags & 8 /* NodeFlag.Anonymous */) > 0; } + /** + Returns true when this node's name or one of its + [groups](#common.NodeProp^group) matches the given string. + */ + is(name) { + if (typeof name == 'string') { + if (this.name == name) + return true; + let group = this.prop(NodeProp.group); + return group ? group.indexOf(name) > -1 : false; + } + return this.id == name; + } + /** + Create a function from node types to arbitrary values by + specifying an object whose property names are node or + [group](#common.NodeProp^group) names. Often useful with + [`NodeProp.add`](#common.NodeProp.add). You can put multiple + names, separated by spaces, in a single property name to map + multiple node names to a single value. + */ + static match(map) { + let direct = Object.create(null); + for (let prop in map) + for (let name of prop.split(" ")) + direct[name] = map[prop]; + return (node) => { + for (let groups = node.prop(NodeProp.group), i = -1; i < (groups ? groups.length : 0); i++) { + let found = direct[i < 0 ? node.name : groups[i]]; + if (found) + return found; + } + }; + } +} +/** +An empty dummy node type to use when no actual type is available. +*/ +NodeType.none = new NodeType("", Object.create(null), 0, 8 /* NodeFlag.Anonymous */); +/** +A node set holds a collection of node types. It is used to +compactly represent trees by storing their type ids, rather than a +full pointer to the type object, in a numeric array. Each parser +[has](#lr.LRParser.nodeSet) a node set, and [tree +buffers](#common.TreeBuffer) can only store collections of nodes +from the same set. A set can have a maximum of 2**16 (65536) node +types in it, so that the ids fit into 16-bit typed array slots. +*/ +class NodeSet { + /** + Create a set with the given types. The `id` property of each + type should correspond to its position within the array. + */ + constructor( + /** + The node types in this set, by id. + */ + types) { + this.types = types; + for (let i = 0; i < types.length; i++) + if (types[i].id != i) + throw new RangeError("Node type ids should correspond to array positions when creating a node set"); + } + /** + Create a copy of this set with some node properties added. The + arguments to this method can be created with + [`NodeProp.add`](#common.NodeProp.add). + */ + extend(...props) { + let newTypes = []; + for (let type of this.types) { + let newProps = null; + for (let source of props) { + let add = source(type); + if (add) { + if (!newProps) + newProps = Object.assign({}, type.props); + newProps[add[0].id] = add[1]; + } + } + newTypes.push(newProps ? new NodeType(type.name, newProps, type.id, type.flags) : type); + } + return new NodeSet(newTypes); + } +} +const CachedNode = new WeakMap(), CachedInnerNode = new WeakMap(); +/** +Options that control iteration. Can be combined with the `|` +operator to enable multiple ones. +*/ +var IterMode; +(function (IterMode) { + /** + When enabled, iteration will only visit [`Tree`](#common.Tree) + objects, not nodes packed into + [`TreeBuffer`](#common.TreeBuffer)s. + */ + IterMode[IterMode["ExcludeBuffers"] = 1] = "ExcludeBuffers"; + /** + Enable this to make iteration include anonymous nodes (such as + the nodes that wrap repeated grammar constructs into a balanced + tree). + */ + IterMode[IterMode["IncludeAnonymous"] = 2] = "IncludeAnonymous"; + /** + By default, regular [mounted](#common.NodeProp^mounted) nodes + replace their base node in iteration. Enable this to ignore them + instead. + */ + IterMode[IterMode["IgnoreMounts"] = 4] = "IgnoreMounts"; + /** + This option only applies in + [`enter`](#common.SyntaxNode.enter)-style methods. It tells the + library to not enter mounted overlays if one covers the given + position. + */ + IterMode[IterMode["IgnoreOverlays"] = 8] = "IgnoreOverlays"; +})(IterMode || (IterMode = {})); +/** +A piece of syntax tree. There are two ways to approach these +trees: the way they are actually stored in memory, and the +convenient way. + +Syntax trees are stored as a tree of `Tree` and `TreeBuffer` +objects. By packing detail information into `TreeBuffer` leaf +nodes, the representation is made a lot more memory-efficient. + +However, when you want to actually work with tree nodes, this +representation is very awkward, so most client code will want to +use the [`TreeCursor`](#common.TreeCursor) or +[`SyntaxNode`](#common.SyntaxNode) interface instead, which provides +a view on some part of this data structure, and can be used to +move around to adjacent nodes. +*/ +class Tree { + /** + Construct a new tree. See also [`Tree.build`](#common.Tree^build). + */ + constructor( + /** + The type of the top node. + */ + type, + /** + This node's child nodes. + */ + children, + /** + The positions (offsets relative to the start of this tree) of + the children. + */ + positions, + /** + The total length of this tree + */ + length, + /** + Per-node [node props](#common.NodeProp) to associate with this node. + */ + props) { + this.type = type; + this.children = children; + this.positions = positions; + this.length = length; + /** + @internal + */ + this.props = null; + if (props && props.length) { + this.props = Object.create(null); + for (let [prop, value] of props) + this.props[typeof prop == "number" ? prop : prop.id] = value; + } + } + /** + @internal + */ + toString() { + let mounted = MountedTree.get(this); + if (mounted && !mounted.overlay) + return mounted.tree.toString(); + let children = ""; + for (let ch of this.children) { + let str = ch.toString(); + if (str) { + if (children) + children += ","; + children += str; + } + } + return !this.type.name ? children : + (/\W/.test(this.type.name) && !this.type.isError ? JSON.stringify(this.type.name) : this.type.name) + + (children.length ? "(" + children + ")" : ""); + } + /** + Get a [tree cursor](#common.TreeCursor) positioned at the top of + the tree. Mode can be used to [control](#common.IterMode) which + nodes the cursor visits. + */ + cursor(mode = 0) { + return new TreeCursor(this.topNode, mode); + } + /** + Get a [tree cursor](#common.TreeCursor) pointing into this tree + at the given position and side (see + [`moveTo`](#common.TreeCursor.moveTo). + */ + cursorAt(pos, side = 0, mode = 0) { + let scope = CachedNode.get(this) || this.topNode; + let cursor = new TreeCursor(scope); + cursor.moveTo(pos, side); + CachedNode.set(this, cursor._tree); + return cursor; + } + /** + Get a [syntax node](#common.SyntaxNode) object for the top of the + tree. + */ + get topNode() { + return new TreeNode(this, 0, 0, null); + } + /** + Get the [syntax node](#common.SyntaxNode) at the given position. + If `side` is -1, this will move into nodes that end at the + position. If 1, it'll move into nodes that start at the + position. With 0, it'll only enter nodes that cover the position + from both sides. + + Note that this will not enter + [overlays](#common.MountedTree.overlay), and you often want + [`resolveInner`](#common.Tree.resolveInner) instead. + */ + resolve(pos, side = 0) { + let node = resolveNode(CachedNode.get(this) || this.topNode, pos, side, false); + CachedNode.set(this, node); + return node; + } + /** + Like [`resolve`](#common.Tree.resolve), but will enter + [overlaid](#common.MountedTree.overlay) nodes, producing a syntax node + pointing into the innermost overlaid tree at the given position + (with parent links going through all parent structure, including + the host trees). + */ + resolveInner(pos, side = 0) { + let node = resolveNode(CachedInnerNode.get(this) || this.topNode, pos, side, true); + CachedInnerNode.set(this, node); + return node; + } + /** + In some situations, it can be useful to iterate through all + nodes around a position, including those in overlays that don't + directly cover the position. This method gives you an iterator + that will produce all nodes, from small to big, around the given + position. + */ + resolveStack(pos, side = 0) { + return stackIterator(this, pos, side); + } + /** + Iterate over the tree and its children, calling `enter` for any + node that touches the `from`/`to` region (if given) before + running over such a node's children, and `leave` (if given) when + leaving the node. When `enter` returns `false`, that node will + not have its children iterated over (or `leave` called). + */ + iterate(spec) { + let { enter, leave, from = 0, to = this.length } = spec; + let mode = spec.mode || 0, anon = (mode & IterMode.IncludeAnonymous) > 0; + for (let c = this.cursor(mode | IterMode.IncludeAnonymous);;) { + let entered = false; + if (c.from <= to && c.to >= from && (!anon && c.type.isAnonymous || enter(c) !== false)) { + if (c.firstChild()) + continue; + entered = true; + } + for (;;) { + if (entered && leave && (anon || !c.type.isAnonymous)) + leave(c); + if (c.nextSibling()) + break; + if (!c.parent()) + return; + entered = true; + } + } + } + /** + Get the value of the given [node prop](#common.NodeProp) for this + node. Works with both per-node and per-type props. + */ + prop(prop) { + return !prop.perNode ? this.type.prop(prop) : this.props ? this.props[prop.id] : undefined; + } + /** + Returns the node's [per-node props](#common.NodeProp.perNode) in a + format that can be passed to the [`Tree`](#common.Tree) + constructor. + */ + get propValues() { + let result = []; + if (this.props) + for (let id in this.props) + result.push([+id, this.props[id]]); + return result; + } + /** + Balance the direct children of this tree, producing a copy of + which may have children grouped into subtrees with type + [`NodeType.none`](#common.NodeType^none). + */ + balance(config = {}) { + return this.children.length <= 8 /* Balance.BranchFactor */ ? this : + balanceRange(NodeType.none, this.children, this.positions, 0, this.children.length, 0, this.length, (children, positions, length) => new Tree(this.type, children, positions, length, this.propValues), config.makeTree || ((children, positions, length) => new Tree(NodeType.none, children, positions, length))); + } + /** + Build a tree from a postfix-ordered buffer of node information, + or a cursor over such a buffer. + */ + static build(data) { return buildTree(data); } +} +/** +The empty tree +*/ +Tree.empty = new Tree(NodeType.none, [], [], 0); +class FlatBufferCursor { + constructor(buffer, index) { + this.buffer = buffer; + this.index = index; + } + get id() { return this.buffer[this.index - 4]; } + get start() { return this.buffer[this.index - 3]; } + get end() { return this.buffer[this.index - 2]; } + get size() { return this.buffer[this.index - 1]; } + get pos() { return this.index; } + next() { this.index -= 4; } + fork() { return new FlatBufferCursor(this.buffer, this.index); } +} +/** +Tree buffers contain (type, start, end, endIndex) quads for each +node. In such a buffer, nodes are stored in prefix order (parents +before children, with the endIndex of the parent indicating which +children belong to it). +*/ +class TreeBuffer { + /** + Create a tree buffer. + */ + constructor( + /** + The buffer's content. + */ + buffer, + /** + The total length of the group of nodes in the buffer. + */ + length, + /** + The node set used in this buffer. + */ + set) { + this.buffer = buffer; + this.length = length; + this.set = set; + } + /** + @internal + */ + get type() { return NodeType.none; } + /** + @internal + */ + toString() { + let result = []; + for (let index = 0; index < this.buffer.length;) { + result.push(this.childString(index)); + index = this.buffer[index + 3]; + } + return result.join(","); + } + /** + @internal + */ + childString(index) { + let id = this.buffer[index], endIndex = this.buffer[index + 3]; + let type = this.set.types[id], result = type.name; + if (/\W/.test(result) && !type.isError) + result = JSON.stringify(result); + index += 4; + if (endIndex == index) + return result; + let children = []; + while (index < endIndex) { + children.push(this.childString(index)); + index = this.buffer[index + 3]; + } + return result + "(" + children.join(",") + ")"; + } + /** + @internal + */ + findChild(startIndex, endIndex, dir, pos, side) { + let { buffer } = this, pick = -1; + for (let i = startIndex; i != endIndex; i = buffer[i + 3]) { + if (checkSide(side, pos, buffer[i + 1], buffer[i + 2])) { + pick = i; + if (dir > 0) + break; + } + } + return pick; + } + /** + @internal + */ + slice(startI, endI, from) { + let b = this.buffer; + let copy = new Uint16Array(endI - startI), len = 0; + for (let i = startI, j = 0; i < endI;) { + copy[j++] = b[i++]; + copy[j++] = b[i++] - from; + let to = copy[j++] = b[i++] - from; + copy[j++] = b[i++] - startI; + len = Math.max(len, to); + } + return new TreeBuffer(copy, len, this.set); + } +} +function checkSide(side, pos, from, to) { + switch (side) { + case -2 /* Side.Before */: return from < pos; + case -1 /* Side.AtOrBefore */: return to >= pos && from < pos; + case 0 /* Side.Around */: return from < pos && to > pos; + case 1 /* Side.AtOrAfter */: return from <= pos && to > pos; + case 2 /* Side.After */: return to > pos; + case 4 /* Side.DontCare */: return true; + } +} +function resolveNode(node, pos, side, overlays) { + var _a; + // Move up to a node that actually holds the position, if possible + while (node.from == node.to || + (side < 1 ? node.from >= pos : node.from > pos) || + (side > -1 ? node.to <= pos : node.to < pos)) { + let parent = !overlays && node instanceof TreeNode && node.index < 0 ? null : node.parent; + if (!parent) + return node; + node = parent; + } + let mode = overlays ? 0 : IterMode.IgnoreOverlays; + // Must go up out of overlays when those do not overlap with pos + if (overlays) + for (let scan = node, parent = scan.parent; parent; scan = parent, parent = scan.parent) { + if (scan instanceof TreeNode && scan.index < 0 && ((_a = parent.enter(pos, side, mode)) === null || _a === void 0 ? void 0 : _a.from) != scan.from) + node = parent; + } + for (;;) { + let inner = node.enter(pos, side, mode); + if (!inner) + return node; + node = inner; + } +} +class BaseNode { + cursor(mode = 0) { return new TreeCursor(this, mode); } + getChild(type, before = null, after = null) { + let r = getChildren(this, type, before, after); + return r.length ? r[0] : null; + } + getChildren(type, before = null, after = null) { + return getChildren(this, type, before, after); + } + resolve(pos, side = 0) { + return resolveNode(this, pos, side, false); + } + resolveInner(pos, side = 0) { + return resolveNode(this, pos, side, true); + } + matchContext(context) { + return matchNodeContext(this.parent, context); + } + enterUnfinishedNodesBefore(pos) { + let scan = this.childBefore(pos), node = this; + while (scan) { + let last = scan.lastChild; + if (!last || last.to != scan.to) + break; + if (last.type.isError && last.from == last.to) { + node = scan; + scan = last.prevSibling; + } + else { + scan = last; + } + } + return node; + } + get node() { return this; } + get next() { return this.parent; } +} +class TreeNode extends BaseNode { + constructor(_tree, from, + // Index in parent node, set to -1 if the node is not a direct child of _parent.node (overlay) + index, _parent) { + super(); + this._tree = _tree; + this.from = from; + this.index = index; + this._parent = _parent; + } + get type() { return this._tree.type; } + get name() { return this._tree.type.name; } + get to() { return this.from + this._tree.length; } + nextChild(i, dir, pos, side, mode = 0) { + for (let parent = this;;) { + for (let { children, positions } = parent._tree, e = dir > 0 ? children.length : -1; i != e; i += dir) { + let next = children[i], start = positions[i] + parent.from; + if (!checkSide(side, pos, start, start + next.length)) + continue; + if (next instanceof TreeBuffer) { + if (mode & IterMode.ExcludeBuffers) + continue; + let index = next.findChild(0, next.buffer.length, dir, pos - start, side); + if (index > -1) + return new BufferNode(new BufferContext(parent, next, i, start), null, index); + } + else if ((mode & IterMode.IncludeAnonymous) || (!next.type.isAnonymous || hasChild(next))) { + let mounted; + if (!(mode & IterMode.IgnoreMounts) && (mounted = MountedTree.get(next)) && !mounted.overlay) + return new TreeNode(mounted.tree, start, i, parent); + let inner = new TreeNode(next, start, i, parent); + return (mode & IterMode.IncludeAnonymous) || !inner.type.isAnonymous ? inner + : inner.nextChild(dir < 0 ? next.children.length - 1 : 0, dir, pos, side); + } + } + if ((mode & IterMode.IncludeAnonymous) || !parent.type.isAnonymous) + return null; + if (parent.index >= 0) + i = parent.index + dir; + else + i = dir < 0 ? -1 : parent._parent._tree.children.length; + parent = parent._parent; + if (!parent) + return null; + } + } + get firstChild() { return this.nextChild(0, 1, 0, 4 /* Side.DontCare */); } + get lastChild() { return this.nextChild(this._tree.children.length - 1, -1, 0, 4 /* Side.DontCare */); } + childAfter(pos) { return this.nextChild(0, 1, pos, 2 /* Side.After */); } + childBefore(pos) { return this.nextChild(this._tree.children.length - 1, -1, pos, -2 /* Side.Before */); } + enter(pos, side, mode = 0) { + let mounted; + if (!(mode & IterMode.IgnoreOverlays) && (mounted = MountedTree.get(this._tree)) && mounted.overlay) { + let rPos = pos - this.from; + for (let { from, to } of mounted.overlay) { + if ((side > 0 ? from <= rPos : from < rPos) && + (side < 0 ? to >= rPos : to > rPos)) + return new TreeNode(mounted.tree, mounted.overlay[0].from + this.from, -1, this); + } + } + return this.nextChild(0, 1, pos, side, mode); + } + nextSignificantParent() { + let val = this; + while (val.type.isAnonymous && val._parent) + val = val._parent; + return val; + } + get parent() { + return this._parent ? this._parent.nextSignificantParent() : null; + } + get nextSibling() { + return this._parent && this.index >= 0 ? this._parent.nextChild(this.index + 1, 1, 0, 4 /* Side.DontCare */) : null; + } + get prevSibling() { + return this._parent && this.index >= 0 ? this._parent.nextChild(this.index - 1, -1, 0, 4 /* Side.DontCare */) : null; + } + get tree() { return this._tree; } + toTree() { return this._tree; } + /** + @internal + */ + toString() { return this._tree.toString(); } +} +function getChildren(node, type, before, after) { + let cur = node.cursor(), result = []; + if (!cur.firstChild()) + return result; + if (before != null) + for (let found = false; !found;) { + found = cur.type.is(before); + if (!cur.nextSibling()) + return result; + } + for (;;) { + if (after != null && cur.type.is(after)) + return result; + if (cur.type.is(type)) + result.push(cur.node); + if (!cur.nextSibling()) + return after == null ? result : []; + } +} +function matchNodeContext(node, context, i = context.length - 1) { + for (let p = node; i >= 0; p = p.parent) { + if (!p) + return false; + if (!p.type.isAnonymous) { + if (context[i] && context[i] != p.name) + return false; + i--; + } + } + return true; +} +class BufferContext { + constructor(parent, buffer, index, start) { + this.parent = parent; + this.buffer = buffer; + this.index = index; + this.start = start; + } +} +class BufferNode extends BaseNode { + get name() { return this.type.name; } + get from() { return this.context.start + this.context.buffer.buffer[this.index + 1]; } + get to() { return this.context.start + this.context.buffer.buffer[this.index + 2]; } + constructor(context, _parent, index) { + super(); + this.context = context; + this._parent = _parent; + this.index = index; + this.type = context.buffer.set.types[context.buffer.buffer[index]]; + } + child(dir, pos, side) { + let { buffer } = this.context; + let index = buffer.findChild(this.index + 4, buffer.buffer[this.index + 3], dir, pos - this.context.start, side); + return index < 0 ? null : new BufferNode(this.context, this, index); + } + get firstChild() { return this.child(1, 0, 4 /* Side.DontCare */); } + get lastChild() { return this.child(-1, 0, 4 /* Side.DontCare */); } + childAfter(pos) { return this.child(1, pos, 2 /* Side.After */); } + childBefore(pos) { return this.child(-1, pos, -2 /* Side.Before */); } + enter(pos, side, mode = 0) { + if (mode & IterMode.ExcludeBuffers) + return null; + let { buffer } = this.context; + let index = buffer.findChild(this.index + 4, buffer.buffer[this.index + 3], side > 0 ? 1 : -1, pos - this.context.start, side); + return index < 0 ? null : new BufferNode(this.context, this, index); + } + get parent() { + return this._parent || this.context.parent.nextSignificantParent(); + } + externalSibling(dir) { + return this._parent ? null : this.context.parent.nextChild(this.context.index + dir, dir, 0, 4 /* Side.DontCare */); + } + get nextSibling() { + let { buffer } = this.context; + let after = buffer.buffer[this.index + 3]; + if (after < (this._parent ? buffer.buffer[this._parent.index + 3] : buffer.buffer.length)) + return new BufferNode(this.context, this._parent, after); + return this.externalSibling(1); + } + get prevSibling() { + let { buffer } = this.context; + let parentStart = this._parent ? this._parent.index + 4 : 0; + if (this.index == parentStart) + return this.externalSibling(-1); + return new BufferNode(this.context, this._parent, buffer.findChild(parentStart, this.index, -1, 0, 4 /* Side.DontCare */)); + } + get tree() { return null; } + toTree() { + let children = [], positions = []; + let { buffer } = this.context; + let startI = this.index + 4, endI = buffer.buffer[this.index + 3]; + if (endI > startI) { + let from = buffer.buffer[this.index + 1]; + children.push(buffer.slice(startI, endI, from)); + positions.push(0); + } + return new Tree(this.type, children, positions, this.to - this.from); + } + /** + @internal + */ + toString() { return this.context.buffer.childString(this.index); } +} +function iterStack(heads) { + if (!heads.length) + return null; + let pick = 0, picked = heads[0]; + for (let i = 1; i < heads.length; i++) { + let node = heads[i]; + if (node.from > picked.from || node.to < picked.to) { + picked = node; + pick = i; + } + } + let next = picked instanceof TreeNode && picked.index < 0 ? null : picked.parent; + let newHeads = heads.slice(); + if (next) + newHeads[pick] = next; + else + newHeads.splice(pick, 1); + return new StackIterator(newHeads, picked); +} +class StackIterator { + constructor(heads, node) { + this.heads = heads; + this.node = node; + } + get next() { return iterStack(this.heads); } +} +function stackIterator(tree, pos, side) { + let inner = tree.resolveInner(pos, side), layers = null; + for (let scan = inner instanceof TreeNode ? inner : inner.context.parent; scan; scan = scan.parent) { + if (scan.index < 0) { // This is an overlay root + let parent = scan.parent; + (layers || (layers = [inner])).push(parent.resolve(pos, side)); + scan = parent; + } + else { + let mount = MountedTree.get(scan.tree); + // Relevant overlay branching off + if (mount && mount.overlay && mount.overlay[0].from <= pos && mount.overlay[mount.overlay.length - 1].to >= pos) { + let root = new TreeNode(mount.tree, mount.overlay[0].from + scan.from, -1, scan); + (layers || (layers = [inner])).push(resolveNode(root, pos, side, false)); + } + } + } + return layers ? iterStack(layers) : inner; +} +/** +A tree cursor object focuses on a given node in a syntax tree, and +allows you to move to adjacent nodes. +*/ +class TreeCursor { + /** + Shorthand for `.type.name`. + */ + get name() { return this.type.name; } + /** + @internal + */ + constructor(node, + /** + @internal + */ + mode = 0) { + this.mode = mode; + /** + @internal + */ + this.buffer = null; + this.stack = []; + /** + @internal + */ + this.index = 0; + this.bufferNode = null; + if (node instanceof TreeNode) { + this.yieldNode(node); + } + else { + this._tree = node.context.parent; + this.buffer = node.context; + for (let n = node._parent; n; n = n._parent) + this.stack.unshift(n.index); + this.bufferNode = node; + this.yieldBuf(node.index); + } + } + yieldNode(node) { + if (!node) + return false; + this._tree = node; + this.type = node.type; + this.from = node.from; + this.to = node.to; + return true; + } + yieldBuf(index, type) { + this.index = index; + let { start, buffer } = this.buffer; + this.type = type || buffer.set.types[buffer.buffer[index]]; + this.from = start + buffer.buffer[index + 1]; + this.to = start + buffer.buffer[index + 2]; + return true; + } + /** + @internal + */ + yield(node) { + if (!node) + return false; + if (node instanceof TreeNode) { + this.buffer = null; + return this.yieldNode(node); + } + this.buffer = node.context; + return this.yieldBuf(node.index, node.type); + } + /** + @internal + */ + toString() { + return this.buffer ? this.buffer.buffer.childString(this.index) : this._tree.toString(); + } + /** + @internal + */ + enterChild(dir, pos, side) { + if (!this.buffer) + return this.yield(this._tree.nextChild(dir < 0 ? this._tree._tree.children.length - 1 : 0, dir, pos, side, this.mode)); + let { buffer } = this.buffer; + let index = buffer.findChild(this.index + 4, buffer.buffer[this.index + 3], dir, pos - this.buffer.start, side); + if (index < 0) + return false; + this.stack.push(this.index); + return this.yieldBuf(index); + } + /** + Move the cursor to this node's first child. When this returns + false, the node has no child, and the cursor has not been moved. + */ + firstChild() { return this.enterChild(1, 0, 4 /* Side.DontCare */); } + /** + Move the cursor to this node's last child. + */ + lastChild() { return this.enterChild(-1, 0, 4 /* Side.DontCare */); } + /** + Move the cursor to the first child that ends after `pos`. + */ + childAfter(pos) { return this.enterChild(1, pos, 2 /* Side.After */); } + /** + Move to the last child that starts before `pos`. + */ + childBefore(pos) { return this.enterChild(-1, pos, -2 /* Side.Before */); } + /** + Move the cursor to the child around `pos`. If side is -1 the + child may end at that position, when 1 it may start there. This + will also enter [overlaid](#common.MountedTree.overlay) + [mounted](#common.NodeProp^mounted) trees unless `overlays` is + set to false. + */ + enter(pos, side, mode = this.mode) { + if (!this.buffer) + return this.yield(this._tree.enter(pos, side, mode)); + return mode & IterMode.ExcludeBuffers ? false : this.enterChild(1, pos, side); + } + /** + Move to the node's parent node, if this isn't the top node. + */ + parent() { + if (!this.buffer) + return this.yieldNode((this.mode & IterMode.IncludeAnonymous) ? this._tree._parent : this._tree.parent); + if (this.stack.length) + return this.yieldBuf(this.stack.pop()); + let parent = (this.mode & IterMode.IncludeAnonymous) ? this.buffer.parent : this.buffer.parent.nextSignificantParent(); + this.buffer = null; + return this.yieldNode(parent); + } + /** + @internal + */ + sibling(dir) { + if (!this.buffer) + return !this._tree._parent ? false + : this.yield(this._tree.index < 0 ? null + : this._tree._parent.nextChild(this._tree.index + dir, dir, 0, 4 /* Side.DontCare */, this.mode)); + let { buffer } = this.buffer, d = this.stack.length - 1; + if (dir < 0) { + let parentStart = d < 0 ? 0 : this.stack[d] + 4; + if (this.index != parentStart) + return this.yieldBuf(buffer.findChild(parentStart, this.index, -1, 0, 4 /* Side.DontCare */)); + } + else { + let after = buffer.buffer[this.index + 3]; + if (after < (d < 0 ? buffer.buffer.length : buffer.buffer[this.stack[d] + 3])) + return this.yieldBuf(after); + } + return d < 0 ? this.yield(this.buffer.parent.nextChild(this.buffer.index + dir, dir, 0, 4 /* Side.DontCare */, this.mode)) : false; + } + /** + Move to this node's next sibling, if any. + */ + nextSibling() { return this.sibling(1); } + /** + Move to this node's previous sibling, if any. + */ + prevSibling() { return this.sibling(-1); } + atLastNode(dir) { + let index, parent, { buffer } = this; + if (buffer) { + if (dir > 0) { + if (this.index < buffer.buffer.buffer.length) + return false; + } + else { + for (let i = 0; i < this.index; i++) + if (buffer.buffer.buffer[i + 3] < this.index) + return false; + } + ({ index, parent } = buffer); + } + else { + ({ index, _parent: parent } = this._tree); + } + for (; parent; { index, _parent: parent } = parent) { + if (index > -1) + for (let i = index + dir, e = dir < 0 ? -1 : parent._tree.children.length; i != e; i += dir) { + let child = parent._tree.children[i]; + if ((this.mode & IterMode.IncludeAnonymous) || + child instanceof TreeBuffer || + !child.type.isAnonymous || + hasChild(child)) + return false; + } + } + return true; + } + move(dir, enter) { + if (enter && this.enterChild(dir, 0, 4 /* Side.DontCare */)) + return true; + for (;;) { + if (this.sibling(dir)) + return true; + if (this.atLastNode(dir) || !this.parent()) + return false; + } + } + /** + Move to the next node in a + [pre-order](https://en.wikipedia.org/wiki/Tree_traversal#Pre-order,_NLR) + traversal, going from a node to its first child or, if the + current node is empty or `enter` is false, its next sibling or + the next sibling of the first parent node that has one. + */ + next(enter = true) { return this.move(1, enter); } + /** + Move to the next node in a last-to-first pre-order traversal. A + node is followed by its last child or, if it has none, its + previous sibling or the previous sibling of the first parent + node that has one. + */ + prev(enter = true) { return this.move(-1, enter); } + /** + Move the cursor to the innermost node that covers `pos`. If + `side` is -1, it will enter nodes that end at `pos`. If it is 1, + it will enter nodes that start at `pos`. + */ + moveTo(pos, side = 0) { + // Move up to a node that actually holds the position, if possible + while (this.from == this.to || + (side < 1 ? this.from >= pos : this.from > pos) || + (side > -1 ? this.to <= pos : this.to < pos)) + if (!this.parent()) + break; + // Then scan down into child nodes as far as possible + while (this.enterChild(1, pos, side)) { } + return this; + } + /** + Get a [syntax node](#common.SyntaxNode) at the cursor's current + position. + */ + get node() { + if (!this.buffer) + return this._tree; + let cache = this.bufferNode, result = null, depth = 0; + if (cache && cache.context == this.buffer) { + scan: for (let index = this.index, d = this.stack.length; d >= 0;) { + for (let c = cache; c; c = c._parent) + if (c.index == index) { + if (index == this.index) + return c; + result = c; + depth = d + 1; + break scan; + } + index = this.stack[--d]; + } + } + for (let i = depth; i < this.stack.length; i++) + result = new BufferNode(this.buffer, result, this.stack[i]); + return this.bufferNode = new BufferNode(this.buffer, result, this.index); + } + /** + Get the [tree](#common.Tree) that represents the current node, if + any. Will return null when the node is in a [tree + buffer](#common.TreeBuffer). + */ + get tree() { + return this.buffer ? null : this._tree._tree; + } + /** + Iterate over the current node and all its descendants, calling + `enter` when entering a node and `leave`, if given, when leaving + one. When `enter` returns `false`, any children of that node are + skipped, and `leave` isn't called for it. + */ + iterate(enter, leave) { + for (let depth = 0;;) { + let mustLeave = false; + if (this.type.isAnonymous || enter(this) !== false) { + if (this.firstChild()) { + depth++; + continue; + } + if (!this.type.isAnonymous) + mustLeave = true; + } + for (;;) { + if (mustLeave && leave) + leave(this); + mustLeave = this.type.isAnonymous; + if (!depth) + return; + if (this.nextSibling()) + break; + this.parent(); + depth--; + mustLeave = true; + } + } + } + /** + Test whether the current node matches a given context—a sequence + of direct parent node names. Empty strings in the context array + are treated as wildcards. + */ + matchContext(context) { + if (!this.buffer) + return matchNodeContext(this.node.parent, context); + let { buffer } = this.buffer, { types } = buffer.set; + for (let i = context.length - 1, d = this.stack.length - 1; i >= 0; d--) { + if (d < 0) + return matchNodeContext(this._tree, context, i); + let type = types[buffer.buffer[this.stack[d]]]; + if (!type.isAnonymous) { + if (context[i] && context[i] != type.name) + return false; + i--; + } + } + return true; + } +} +function hasChild(tree) { + return tree.children.some(ch => ch instanceof TreeBuffer || !ch.type.isAnonymous || hasChild(ch)); +} +function buildTree(data) { + var _a; + let { buffer, nodeSet, maxBufferLength = DefaultBufferLength, reused = [], minRepeatType = nodeSet.types.length } = data; + let cursor = Array.isArray(buffer) ? new FlatBufferCursor(buffer, buffer.length) : buffer; + let types = nodeSet.types; + let contextHash = 0, lookAhead = 0; + function takeNode(parentStart, minPos, children, positions, inRepeat, depth) { + let { id, start, end, size } = cursor; + let lookAheadAtStart = lookAhead, contextAtStart = contextHash; + while (size < 0) { + cursor.next(); + if (size == -1 /* SpecialRecord.Reuse */) { + let node = reused[id]; + children.push(node); + positions.push(start - parentStart); + return; + } + else if (size == -3 /* SpecialRecord.ContextChange */) { // Context change + contextHash = id; + return; + } + else if (size == -4 /* SpecialRecord.LookAhead */) { + lookAhead = id; + return; + } + else { + throw new RangeError(`Unrecognized record size: ${size}`); + } + } + let type = types[id], node, buffer; + let startPos = start - parentStart; + if (end - start <= maxBufferLength && (buffer = findBufferSize(cursor.pos - minPos, inRepeat))) { + // Small enough for a buffer, and no reused nodes inside + let data = new Uint16Array(buffer.size - buffer.skip); + let endPos = cursor.pos - buffer.size, index = data.length; + while (cursor.pos > endPos) + index = copyToBuffer(buffer.start, data, index); + node = new TreeBuffer(data, end - buffer.start, nodeSet); + startPos = buffer.start - parentStart; + } + else { // Make it a node + let endPos = cursor.pos - size; + cursor.next(); + let localChildren = [], localPositions = []; + let localInRepeat = id >= minRepeatType ? id : -1; + let lastGroup = 0, lastEnd = end; + while (cursor.pos > endPos) { + if (localInRepeat >= 0 && cursor.id == localInRepeat && cursor.size >= 0) { + if (cursor.end <= lastEnd - maxBufferLength) { + makeRepeatLeaf(localChildren, localPositions, start, lastGroup, cursor.end, lastEnd, localInRepeat, lookAheadAtStart, contextAtStart); + lastGroup = localChildren.length; + lastEnd = cursor.end; + } + cursor.next(); + } + else if (depth > 2500 /* CutOff.Depth */) { + takeFlatNode(start, endPos, localChildren, localPositions); + } + else { + takeNode(start, endPos, localChildren, localPositions, localInRepeat, depth + 1); + } + } + if (localInRepeat >= 0 && lastGroup > 0 && lastGroup < localChildren.length) + makeRepeatLeaf(localChildren, localPositions, start, lastGroup, start, lastEnd, localInRepeat, lookAheadAtStart, contextAtStart); + localChildren.reverse(); + localPositions.reverse(); + if (localInRepeat > -1 && lastGroup > 0) { + let make = makeBalanced(type, contextAtStart); + node = balanceRange(type, localChildren, localPositions, 0, localChildren.length, 0, end - start, make, make); + } + else { + node = makeTree(type, localChildren, localPositions, end - start, lookAheadAtStart - end, contextAtStart); + } + } + children.push(node); + positions.push(startPos); + } + function takeFlatNode(parentStart, minPos, children, positions) { + let nodes = []; // Temporary, inverted array of leaf nodes found, with absolute positions + let nodeCount = 0, stopAt = -1; + while (cursor.pos > minPos) { + let { id, start, end, size } = cursor; + if (size > 4) { // Not a leaf + cursor.next(); + } + else if (stopAt > -1 && start < stopAt) { + break; + } + else { + if (stopAt < 0) + stopAt = end - maxBufferLength; + nodes.push(id, start, end); + nodeCount++; + cursor.next(); + } + } + if (nodeCount) { + let buffer = new Uint16Array(nodeCount * 4); + let start = nodes[nodes.length - 2]; + for (let i = nodes.length - 3, j = 0; i >= 0; i -= 3) { + buffer[j++] = nodes[i]; + buffer[j++] = nodes[i + 1] - start; + buffer[j++] = nodes[i + 2] - start; + buffer[j++] = j; + } + children.push(new TreeBuffer(buffer, nodes[2] - start, nodeSet)); + positions.push(start - parentStart); + } + } + function makeBalanced(type, contextHash) { + return (children, positions, length) => { + let lookAhead = 0, lastI = children.length - 1, last, lookAheadProp; + if (lastI >= 0 && (last = children[lastI]) instanceof Tree) { + if (!lastI && last.type == type && last.length == length) + return last; + if (lookAheadProp = last.prop(NodeProp.lookAhead)) + lookAhead = positions[lastI] + last.length + lookAheadProp; + } + return makeTree(type, children, positions, length, lookAhead, contextHash); + }; + } + function makeRepeatLeaf(children, positions, base, i, from, to, type, lookAhead, contextHash) { + let localChildren = [], localPositions = []; + while (children.length > i) { + localChildren.push(children.pop()); + localPositions.push(positions.pop() + base - from); + } + children.push(makeTree(nodeSet.types[type], localChildren, localPositions, to - from, lookAhead - to, contextHash)); + positions.push(from - base); + } + function makeTree(type, children, positions, length, lookAhead, contextHash, props) { + if (contextHash) { + let pair = [NodeProp.contextHash, contextHash]; + props = props ? [pair].concat(props) : [pair]; + } + if (lookAhead > 25) { + let pair = [NodeProp.lookAhead, lookAhead]; + props = props ? [pair].concat(props) : [pair]; + } + return new Tree(type, children, positions, length, props); + } + function findBufferSize(maxSize, inRepeat) { + // Scan through the buffer to find previous siblings that fit + // together in a TreeBuffer, and don't contain any reused nodes + // (which can't be stored in a buffer). + // If `inRepeat` is > -1, ignore node boundaries of that type for + // nesting, but make sure the end falls either at the start + // (`maxSize`) or before such a node. + let fork = cursor.fork(); + let size = 0, start = 0, skip = 0, minStart = fork.end - maxBufferLength; + let result = { size: 0, start: 0, skip: 0 }; + scan: for (let minPos = fork.pos - maxSize; fork.pos > minPos;) { + let nodeSize = fork.size; + // Pretend nested repeat nodes of the same type don't exist + if (fork.id == inRepeat && nodeSize >= 0) { + // Except that we store the current state as a valid return + // value. + result.size = size; + result.start = start; + result.skip = skip; + skip += 4; + size += 4; + fork.next(); + continue; + } + let startPos = fork.pos - nodeSize; + if (nodeSize < 0 || startPos < minPos || fork.start < minStart) + break; + let localSkipped = fork.id >= minRepeatType ? 4 : 0; + let nodeStart = fork.start; + fork.next(); + while (fork.pos > startPos) { + if (fork.size < 0) { + if (fork.size == -3 /* SpecialRecord.ContextChange */) + localSkipped += 4; + else + break scan; + } + else if (fork.id >= minRepeatType) { + localSkipped += 4; + } + fork.next(); + } + start = nodeStart; + size += nodeSize; + skip += localSkipped; + } + if (inRepeat < 0 || size == maxSize) { + result.size = size; + result.start = start; + result.skip = skip; + } + return result.size > 4 ? result : undefined; + } + function copyToBuffer(bufferStart, buffer, index) { + let { id, start, end, size } = cursor; + cursor.next(); + if (size >= 0 && id < minRepeatType) { + let startIndex = index; + if (size > 4) { + let endPos = cursor.pos - (size - 4); + while (cursor.pos > endPos) + index = copyToBuffer(bufferStart, buffer, index); + } + buffer[--index] = startIndex; + buffer[--index] = end - bufferStart; + buffer[--index] = start - bufferStart; + buffer[--index] = id; + } + else if (size == -3 /* SpecialRecord.ContextChange */) { + contextHash = id; + } + else if (size == -4 /* SpecialRecord.LookAhead */) { + lookAhead = id; + } + return index; + } + let children = [], positions = []; + while (cursor.pos > 0) + takeNode(data.start || 0, data.bufferStart || 0, children, positions, -1, 0); + let length = (_a = data.length) !== null && _a !== void 0 ? _a : (children.length ? positions[0] + children[0].length : 0); + return new Tree(types[data.topID], children.reverse(), positions.reverse(), length); +} +const nodeSizeCache = new WeakMap; +function nodeSize(balanceType, node) { + if (!balanceType.isAnonymous || node instanceof TreeBuffer || node.type != balanceType) + return 1; + let size = nodeSizeCache.get(node); + if (size == null) { + size = 1; + for (let child of node.children) { + if (child.type != balanceType || !(child instanceof Tree)) { + size = 1; + break; + } + size += nodeSize(balanceType, child); + } + nodeSizeCache.set(node, size); + } + return size; +} +function balanceRange( +// The type the balanced tree's inner nodes. +balanceType, +// The direct children and their positions +children, positions, +// The index range in children/positions to use +from, to, +// The start position of the nodes, relative to their parent. +start, +// Length of the outer node +length, +// Function to build the top node of the balanced tree +mkTop, +// Function to build internal nodes for the balanced tree +mkTree) { + let total = 0; + for (let i = from; i < to; i++) + total += nodeSize(balanceType, children[i]); + let maxChild = Math.ceil((total * 1.5) / 8 /* Balance.BranchFactor */); + let localChildren = [], localPositions = []; + function divide(children, positions, from, to, offset) { + for (let i = from; i < to;) { + let groupFrom = i, groupStart = positions[i], groupSize = nodeSize(balanceType, children[i]); + i++; + for (; i < to; i++) { + let nextSize = nodeSize(balanceType, children[i]); + if (groupSize + nextSize >= maxChild) + break; + groupSize += nextSize; + } + if (i == groupFrom + 1) { + if (groupSize > maxChild) { + let only = children[groupFrom]; // Only trees can have a size > 1 + divide(only.children, only.positions, 0, only.children.length, positions[groupFrom] + offset); + continue; + } + localChildren.push(children[groupFrom]); + } + else { + let length = positions[i - 1] + children[i - 1].length - groupStart; + localChildren.push(balanceRange(balanceType, children, positions, groupFrom, i, groupStart, length, null, mkTree)); + } + localPositions.push(groupStart + offset - start); + } + } + divide(children, positions, from, to, 0); + return (mkTop || mkTree)(localChildren, localPositions, length); +} +/** +Provides a way to associate values with pieces of trees. As long +as that part of the tree is reused, the associated values can be +retrieved from an updated tree. +*/ +class NodeWeakMap { + constructor() { + this.map = new WeakMap(); + } + setBuffer(buffer, index, value) { + let inner = this.map.get(buffer); + if (!inner) + this.map.set(buffer, inner = new Map); + inner.set(index, value); + } + getBuffer(buffer, index) { + let inner = this.map.get(buffer); + return inner && inner.get(index); + } + /** + Set the value for this syntax node. + */ + set(node, value) { + if (node instanceof BufferNode) + this.setBuffer(node.context.buffer, node.index, value); + else if (node instanceof TreeNode) + this.map.set(node.tree, value); + } + /** + Retrieve value for this syntax node, if it exists in the map. + */ + get(node) { + return node instanceof BufferNode ? this.getBuffer(node.context.buffer, node.index) + : node instanceof TreeNode ? this.map.get(node.tree) : undefined; + } + /** + Set the value for the node that a cursor currently points to. + */ + cursorSet(cursor, value) { + if (cursor.buffer) + this.setBuffer(cursor.buffer.buffer, cursor.index, value); + else + this.map.set(cursor.tree, value); + } + /** + Retrieve the value for the node that a cursor currently points + to. + */ + cursorGet(cursor) { + return cursor.buffer ? this.getBuffer(cursor.buffer.buffer, cursor.index) : this.map.get(cursor.tree); + } +} + +/** +Tree fragments are used during [incremental +parsing](#common.Parser.startParse) to track parts of old trees +that can be reused in a new parse. An array of fragments is used +to track regions of an old tree whose nodes might be reused in new +parses. Use the static +[`applyChanges`](#common.TreeFragment^applyChanges) method to +update fragments for document changes. +*/ +class TreeFragment { + /** + Construct a tree fragment. You'll usually want to use + [`addTree`](#common.TreeFragment^addTree) and + [`applyChanges`](#common.TreeFragment^applyChanges) instead of + calling this directly. + */ + constructor( + /** + The start of the unchanged range pointed to by this fragment. + This refers to an offset in the _updated_ document (as opposed + to the original tree). + */ + from, + /** + The end of the unchanged range. + */ + to, + /** + The tree that this fragment is based on. + */ + tree, + /** + The offset between the fragment's tree and the document that + this fragment can be used against. Add this when going from + document to tree positions, subtract it to go from tree to + document positions. + */ + offset, openStart = false, openEnd = false) { + this.from = from; + this.to = to; + this.tree = tree; + this.offset = offset; + this.open = (openStart ? 1 /* Open.Start */ : 0) | (openEnd ? 2 /* Open.End */ : 0); + } + /** + Whether the start of the fragment represents the start of a + parse, or the end of a change. (In the second case, it may not + be safe to reuse some nodes at the start, depending on the + parsing algorithm.) + */ + get openStart() { return (this.open & 1 /* Open.Start */) > 0; } + /** + Whether the end of the fragment represents the end of a + full-document parse, or the start of a change. + */ + get openEnd() { return (this.open & 2 /* Open.End */) > 0; } + /** + Create a set of fragments from a freshly parsed tree, or update + an existing set of fragments by replacing the ones that overlap + with a tree with content from the new tree. When `partial` is + true, the parse is treated as incomplete, and the resulting + fragment has [`openEnd`](#common.TreeFragment.openEnd) set to + true. + */ + static addTree(tree, fragments = [], partial = false) { + let result = [new TreeFragment(0, tree.length, tree, 0, false, partial)]; + for (let f of fragments) + if (f.to > tree.length) + result.push(f); + return result; + } + /** + Apply a set of edits to an array of fragments, removing or + splitting fragments as necessary to remove edited ranges, and + adjusting offsets for fragments that moved. + */ + static applyChanges(fragments, changes, minGap = 128) { + if (!changes.length) + return fragments; + let result = []; + let fI = 1, nextF = fragments.length ? fragments[0] : null; + for (let cI = 0, pos = 0, off = 0;; cI++) { + let nextC = cI < changes.length ? changes[cI] : null; + let nextPos = nextC ? nextC.fromA : 1e9; + if (nextPos - pos >= minGap) + while (nextF && nextF.from < nextPos) { + let cut = nextF; + if (pos >= cut.from || nextPos <= cut.to || off) { + let fFrom = Math.max(cut.from, pos) - off, fTo = Math.min(cut.to, nextPos) - off; + cut = fFrom >= fTo ? null : new TreeFragment(fFrom, fTo, cut.tree, cut.offset + off, cI > 0, !!nextC); + } + if (cut) + result.push(cut); + if (nextF.to > nextPos) + break; + nextF = fI < fragments.length ? fragments[fI++] : null; + } + if (!nextC) + break; + pos = nextC.toA; + off = nextC.toA - nextC.toB; + } + return result; + } +} +/** +A superclass that parsers should extend. +*/ +class Parser { + /** + Start a parse, returning a [partial parse](#common.PartialParse) + object. [`fragments`](#common.TreeFragment) can be passed in to + make the parse incremental. + + By default, the entire input is parsed. You can pass `ranges`, + which should be a sorted array of non-empty, non-overlapping + ranges, to parse only those ranges. The tree returned in that + case will start at `ranges[0].from`. + */ + startParse(input, fragments, ranges) { + if (typeof input == "string") + input = new StringInput(input); + ranges = !ranges ? [new Range(0, input.length)] : ranges.length ? ranges.map(r => new Range(r.from, r.to)) : [new Range(0, 0)]; + return this.createParse(input, fragments || [], ranges); + } + /** + Run a full parse, returning the resulting tree. + */ + parse(input, fragments, ranges) { + let parse = this.startParse(input, fragments, ranges); + for (;;) { + let done = parse.advance(); + if (done) + return done; + } + } +} +class StringInput { + constructor(string) { + this.string = string; + } + get length() { return this.string.length; } + chunk(from) { return this.string.slice(from); } + get lineChunks() { return false; } + read(from, to) { return this.string.slice(from, to); } +} + +/** +Create a parse wrapper that, after the inner parse completes, +scans its tree for mixed language regions with the `nest` +function, runs the resulting [inner parses](#common.NestedParse), +and then [mounts](#common.NodeProp^mounted) their results onto the +tree. +*/ +function parseMixed(nest) { + return (parse, input, fragments, ranges) => new MixedParse(parse, nest, input, fragments, ranges); +} +class InnerParse { + constructor(parser, parse, overlay, target, from) { + this.parser = parser; + this.parse = parse; + this.overlay = overlay; + this.target = target; + this.from = from; + } +} +function checkRanges(ranges) { + if (!ranges.length || ranges.some(r => r.from >= r.to)) + throw new RangeError("Invalid inner parse ranges given: " + JSON.stringify(ranges)); +} +class ActiveOverlay { + constructor(parser, predicate, mounts, index, start, target, prev) { + this.parser = parser; + this.predicate = predicate; + this.mounts = mounts; + this.index = index; + this.start = start; + this.target = target; + this.prev = prev; + this.depth = 0; + this.ranges = []; + } +} +const stoppedInner = new NodeProp({ perNode: true }); +class MixedParse { + constructor(base, nest, input, fragments, ranges) { + this.nest = nest; + this.input = input; + this.fragments = fragments; + this.ranges = ranges; + this.inner = []; + this.innerDone = 0; + this.baseTree = null; + this.stoppedAt = null; + this.baseParse = base; + } + advance() { + if (this.baseParse) { + let done = this.baseParse.advance(); + if (!done) + return null; + this.baseParse = null; + this.baseTree = done; + this.startInner(); + if (this.stoppedAt != null) + for (let inner of this.inner) + inner.parse.stopAt(this.stoppedAt); + } + if (this.innerDone == this.inner.length) { + let result = this.baseTree; + if (this.stoppedAt != null) + result = new Tree(result.type, result.children, result.positions, result.length, result.propValues.concat([[stoppedInner, this.stoppedAt]])); + return result; + } + let inner = this.inner[this.innerDone], done = inner.parse.advance(); + if (done) { + this.innerDone++; + // This is a somewhat dodgy but super helpful hack where we + // patch up nodes created by the inner parse (and thus + // presumably not aliased anywhere else) to hold the information + // about the inner parse. + let props = Object.assign(Object.create(null), inner.target.props); + props[NodeProp.mounted.id] = new MountedTree(done, inner.overlay, inner.parser); + inner.target.props = props; + } + return null; + } + get parsedPos() { + if (this.baseParse) + return 0; + let pos = this.input.length; + for (let i = this.innerDone; i < this.inner.length; i++) { + if (this.inner[i].from < pos) + pos = Math.min(pos, this.inner[i].parse.parsedPos); + } + return pos; + } + stopAt(pos) { + this.stoppedAt = pos; + if (this.baseParse) + this.baseParse.stopAt(pos); + else + for (let i = this.innerDone; i < this.inner.length; i++) + this.inner[i].parse.stopAt(pos); + } + startInner() { + let fragmentCursor = new FragmentCursor(this.fragments); + let overlay = null; + let covered = null; + let cursor = new TreeCursor(new TreeNode(this.baseTree, this.ranges[0].from, 0, null), IterMode.IncludeAnonymous | IterMode.IgnoreMounts); + scan: for (let nest, isCovered;;) { + let enter = true, range; + if (this.stoppedAt != null && cursor.from >= this.stoppedAt) { + enter = false; + } + else if (fragmentCursor.hasNode(cursor)) { + if (overlay) { + let match = overlay.mounts.find(m => m.frag.from <= cursor.from && m.frag.to >= cursor.to && m.mount.overlay); + if (match) + for (let r of match.mount.overlay) { + let from = r.from + match.pos, to = r.to + match.pos; + if (from >= cursor.from && to <= cursor.to && !overlay.ranges.some(r => r.from < to && r.to > from)) + overlay.ranges.push({ from, to }); + } + } + enter = false; + } + else if (covered && (isCovered = checkCover(covered.ranges, cursor.from, cursor.to))) { + enter = isCovered != 2 /* Cover.Full */; + } + else if (!cursor.type.isAnonymous && (nest = this.nest(cursor, this.input)) && + (cursor.from < cursor.to || !nest.overlay)) { + if (!cursor.tree) + materialize(cursor); + let oldMounts = fragmentCursor.findMounts(cursor.from, nest.parser); + if (typeof nest.overlay == "function") { + overlay = new ActiveOverlay(nest.parser, nest.overlay, oldMounts, this.inner.length, cursor.from, cursor.tree, overlay); + } + else { + let ranges = punchRanges(this.ranges, nest.overlay || + (cursor.from < cursor.to ? [new Range(cursor.from, cursor.to)] : [])); + if (ranges.length) + checkRanges(ranges); + if (ranges.length || !nest.overlay) + this.inner.push(new InnerParse(nest.parser, ranges.length ? nest.parser.startParse(this.input, enterFragments(oldMounts, ranges), ranges) + : nest.parser.startParse(""), nest.overlay ? nest.overlay.map(r => new Range(r.from - cursor.from, r.to - cursor.from)) : null, cursor.tree, ranges.length ? ranges[0].from : cursor.from)); + if (!nest.overlay) + enter = false; + else if (ranges.length) + covered = { ranges, depth: 0, prev: covered }; + } + } + else if (overlay && (range = overlay.predicate(cursor))) { + if (range === true) + range = new Range(cursor.from, cursor.to); + if (range.from < range.to) { + let last = overlay.ranges.length - 1; + if (last >= 0 && overlay.ranges[last].to == range.from) + overlay.ranges[last] = { from: overlay.ranges[last].from, to: range.to }; + else + overlay.ranges.push(range); + } + } + if (enter && cursor.firstChild()) { + if (overlay) + overlay.depth++; + if (covered) + covered.depth++; + } + else { + for (;;) { + if (cursor.nextSibling()) + break; + if (!cursor.parent()) + break scan; + if (overlay && !--overlay.depth) { + let ranges = punchRanges(this.ranges, overlay.ranges); + if (ranges.length) { + checkRanges(ranges); + this.inner.splice(overlay.index, 0, new InnerParse(overlay.parser, overlay.parser.startParse(this.input, enterFragments(overlay.mounts, ranges), ranges), overlay.ranges.map(r => new Range(r.from - overlay.start, r.to - overlay.start)), overlay.target, ranges[0].from)); + } + overlay = overlay.prev; + } + if (covered && !--covered.depth) + covered = covered.prev; + } + } + } + } +} +function checkCover(covered, from, to) { + for (let range of covered) { + if (range.from >= to) + break; + if (range.to > from) + return range.from <= from && range.to >= to ? 2 /* Cover.Full */ : 1 /* Cover.Partial */; + } + return 0 /* Cover.None */; +} +// Take a piece of buffer and convert it into a stand-alone +// TreeBuffer. +function sliceBuf(buf, startI, endI, nodes, positions, off) { + if (startI < endI) { + let from = buf.buffer[startI + 1]; + nodes.push(buf.slice(startI, endI, from)); + positions.push(from - off); + } +} +// This function takes a node that's in a buffer, and converts it, and +// its parent buffer nodes, into a Tree. This is again acting on the +// assumption that the trees and buffers have been constructed by the +// parse that was ran via the mix parser, and thus aren't shared with +// any other code, making violations of the immutability safe. +function materialize(cursor) { + let { node } = cursor, stack = []; + let buffer = node.context.buffer; + // Scan up to the nearest tree + do { + stack.push(cursor.index); + cursor.parent(); + } while (!cursor.tree); + // Find the index of the buffer in that tree + let base = cursor.tree, i = base.children.indexOf(buffer); + let buf = base.children[i], b = buf.buffer, newStack = [i]; + // Split a level in the buffer, putting the nodes before and after + // the child that contains `node` into new buffers. + function split(startI, endI, type, innerOffset, length, stackPos) { + let targetI = stack[stackPos]; + let children = [], positions = []; + sliceBuf(buf, startI, targetI, children, positions, innerOffset); + let from = b[targetI + 1], to = b[targetI + 2]; + newStack.push(children.length); + let child = stackPos + ? split(targetI + 4, b[targetI + 3], buf.set.types[b[targetI]], from, to - from, stackPos - 1) + : node.toTree(); + children.push(child); + positions.push(from - innerOffset); + sliceBuf(buf, b[targetI + 3], endI, children, positions, innerOffset); + return new Tree(type, children, positions, length); + } + base.children[i] = split(0, b.length, NodeType.none, 0, buf.length, stack.length - 1); + // Move the cursor back to the target node + for (let index of newStack) { + let tree = cursor.tree.children[index], pos = cursor.tree.positions[index]; + cursor.yield(new TreeNode(tree, pos + cursor.from, index, cursor._tree)); + } +} +class StructureCursor { + constructor(root, offset) { + this.offset = offset; + this.done = false; + this.cursor = root.cursor(IterMode.IncludeAnonymous | IterMode.IgnoreMounts); + } + // Move to the first node (in pre-order) that starts at or after `pos`. + moveTo(pos) { + let { cursor } = this, p = pos - this.offset; + while (!this.done && cursor.from < p) { + if (cursor.to >= pos && cursor.enter(p, 1, IterMode.IgnoreOverlays | IterMode.ExcludeBuffers)) ; + else if (!cursor.next(false)) + this.done = true; + } + } + hasNode(cursor) { + this.moveTo(cursor.from); + if (!this.done && this.cursor.from + this.offset == cursor.from && this.cursor.tree) { + for (let tree = this.cursor.tree;;) { + if (tree == cursor.tree) + return true; + if (tree.children.length && tree.positions[0] == 0 && tree.children[0] instanceof Tree) + tree = tree.children[0]; + else + break; + } + } + return false; + } +} +class FragmentCursor { + constructor(fragments) { + var _a; + this.fragments = fragments; + this.curTo = 0; + this.fragI = 0; + if (fragments.length) { + let first = this.curFrag = fragments[0]; + this.curTo = (_a = first.tree.prop(stoppedInner)) !== null && _a !== void 0 ? _a : first.to; + this.inner = new StructureCursor(first.tree, -first.offset); + } + else { + this.curFrag = this.inner = null; + } + } + hasNode(node) { + while (this.curFrag && node.from >= this.curTo) + this.nextFrag(); + return this.curFrag && this.curFrag.from <= node.from && this.curTo >= node.to && this.inner.hasNode(node); + } + nextFrag() { + var _a; + this.fragI++; + if (this.fragI == this.fragments.length) { + this.curFrag = this.inner = null; + } + else { + let frag = this.curFrag = this.fragments[this.fragI]; + this.curTo = (_a = frag.tree.prop(stoppedInner)) !== null && _a !== void 0 ? _a : frag.to; + this.inner = new StructureCursor(frag.tree, -frag.offset); + } + } + findMounts(pos, parser) { + var _a; + let result = []; + if (this.inner) { + this.inner.cursor.moveTo(pos, 1); + for (let pos = this.inner.cursor.node; pos; pos = pos.parent) { + let mount = (_a = pos.tree) === null || _a === void 0 ? void 0 : _a.prop(NodeProp.mounted); + if (mount && mount.parser == parser) { + for (let i = this.fragI; i < this.fragments.length; i++) { + let frag = this.fragments[i]; + if (frag.from >= pos.to) + break; + if (frag.tree == this.curFrag.tree) + result.push({ + frag, + pos: pos.from - frag.offset, + mount + }); + } + } + } + } + return result; + } +} +function punchRanges(outer, ranges) { + let copy = null, current = ranges; + for (let i = 1, j = 0; i < outer.length; i++) { + let gapFrom = outer[i - 1].to, gapTo = outer[i].from; + for (; j < current.length; j++) { + let r = current[j]; + if (r.from >= gapTo) + break; + if (r.to <= gapFrom) + continue; + if (!copy) + current = copy = ranges.slice(); + if (r.from < gapFrom) { + copy[j] = new Range(r.from, gapFrom); + if (r.to > gapTo) + copy.splice(j + 1, 0, new Range(gapTo, r.to)); + } + else if (r.to > gapTo) { + copy[j--] = new Range(gapTo, r.to); + } + else { + copy.splice(j--, 1); + } + } + } + return current; +} +function findCoverChanges(a, b, from, to) { + let iA = 0, iB = 0, inA = false, inB = false, pos = -1e9; + let result = []; + for (;;) { + let nextA = iA == a.length ? 1e9 : inA ? a[iA].to : a[iA].from; + let nextB = iB == b.length ? 1e9 : inB ? b[iB].to : b[iB].from; + if (inA != inB) { + let start = Math.max(pos, from), end = Math.min(nextA, nextB, to); + if (start < end) + result.push(new Range(start, end)); + } + pos = Math.min(nextA, nextB); + if (pos == 1e9) + break; + if (nextA == pos) { + if (!inA) + inA = true; + else { + inA = false; + iA++; + } + } + if (nextB == pos) { + if (!inB) + inB = true; + else { + inB = false; + iB++; + } + } + } + return result; +} +// Given a number of fragments for the outer tree, and a set of ranges +// to parse, find fragments for inner trees mounted around those +// ranges, if any. +function enterFragments(mounts, ranges) { + let result = []; + for (let { pos, mount, frag } of mounts) { + let startPos = pos + (mount.overlay ? mount.overlay[0].from : 0), endPos = startPos + mount.tree.length; + let from = Math.max(frag.from, startPos), to = Math.min(frag.to, endPos); + if (mount.overlay) { + let overlay = mount.overlay.map(r => new Range(r.from + pos, r.to + pos)); + let changes = findCoverChanges(ranges, overlay, from, to); + for (let i = 0, pos = from;; i++) { + let last = i == changes.length, end = last ? to : changes[i].from; + if (end > pos) + result.push(new TreeFragment(pos, end, mount.tree, -startPos, frag.from >= pos || frag.openStart, frag.to <= end || frag.openEnd)); + if (last) + break; + pos = changes[i].to; + } + } + else { + result.push(new TreeFragment(from, to, mount.tree, -startPos, frag.from >= startPos || frag.openStart, frag.to <= endPos || frag.openEnd)); + } + } + return result; +} + +export { DefaultBufferLength, IterMode, MountedTree, NodeProp, NodeSet, NodeType, NodeWeakMap, Parser, Tree, TreeBuffer, TreeCursor, TreeFragment, parseMixed }; diff --git a/node_modules/@lezer/common/package.json b/node_modules/@lezer/common/package.json new file mode 100644 index 00000000..4b574ebc --- /dev/null +++ b/node_modules/@lezer/common/package.json @@ -0,0 +1,32 @@ +{ + "name": "@lezer/common", + "version": "1.2.3", + "description": "Syntax tree data structure and parser interfaces for the lezer parser", + "main": "dist/index.cjs", + "type": "module", + "exports": { + "import": "./dist/index.js", + "require": "./dist/index.cjs" + }, + "module": "dist/index.js", + "types": "dist/index.d.ts", + "author": "Marijn Haverbeke ", + "license": "MIT", + "devDependencies": { + "ist": "^1.1.1", + "@marijn/buildtool": "^0.1.5", + "@types/mocha": "^5.2.6", + "mocha": "^10.2.0", + "ts-node": "^10.9.2" + }, + "files": ["dist"], + "repository": { + "type" : "git", + "url" : "https://github.com/lezer-parser/common.git" + }, + "scripts": { + "watch": "node build.js --watch", + "prepare": "node build.js", + "test": "mocha" + } +} diff --git a/node_modules/@lezer/lr/LICENSE b/node_modules/@lezer/lr/LICENSE new file mode 100644 index 00000000..c21df7e4 --- /dev/null +++ b/node_modules/@lezer/lr/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (C) 2018 by Marijn Haverbeke and others + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/@lezer/lr/README.md b/node_modules/@lezer/lr/README.md new file mode 100644 index 00000000..9a326205 --- /dev/null +++ b/node_modules/@lezer/lr/README.md @@ -0,0 +1,25 @@ +# @lezer/lr + +[ [**WEBSITE**](http://lezer.codemirror.net) | [**ISSUES**](https://github.com/lezer-parser/lezer/issues) | [**FORUM**](https://discuss.codemirror.net/c/lezer) | [**CHANGELOG**](https://github.com/lezer-parser/lr/blob/master/CHANGELOG.md) ] + +Lezer ("reader" in Dutch, pronounced pretty much as laser) is an +incremental GLR parser intended for use in an editor or similar +system, which needs to keep a representation of the program current +during changes and in the face of syntax errors. + +It prioritizes speed and compactness (both of parser table files and +of syntax tree) over having a highly usable parse tree—trees nodes are +just blobs with a start, end, tag, and set of child nodes, with no +further labeling of child nodes or extra metadata. + +This package contains the run-time LR parser library. It consumes +parsers generated by +[@lezer/generator](https://github.com/lezer-parser/generator). + +The parser programming interface is documented on [the +website](https://lezer.codemirror.net/docs/ref/#lr). + +The code is licensed under an MIT license. + +This project was hugely inspired by +[tree-sitter](http://tree-sitter.github.io/tree-sitter/). diff --git a/node_modules/@lezer/lr/dist/constants.d.ts b/node_modules/@lezer/lr/dist/constants.d.ts new file mode 100644 index 00000000..1657d561 --- /dev/null +++ b/node_modules/@lezer/lr/dist/constants.d.ts @@ -0,0 +1,45 @@ +export declare const enum Action { + ReduceFlag = 65536, + ValueMask = 65535, + ReduceDepthShift = 19, + RepeatFlag = 131072, + GotoFlag = 131072, + StayFlag = 262144 +} +export declare const enum StateFlag { + Skipped = 1, + Accepting = 2 +} +export declare const enum Specialize { + Specialize = 0, + Extend = 1 +} +export declare const enum Term { + Err = 0 +} +export declare const enum Seq { + End = 65535, + Done = 0, + Next = 1, + Other = 2 +} +export declare const enum ParseState { + Flags = 0, + Actions = 1, + Skip = 2, + TokenizerMask = 3, + DefaultReduce = 4, + ForcedReduce = 5, + Size = 6 +} +export declare const enum Encode { + BigValCode = 126, + BigVal = 65535, + Start = 32, + Gap1 = 34,// '"' + Gap2 = 92,// '\\; + Base = 46 +} +export declare const enum File { + Version = 14 +} diff --git a/node_modules/@lezer/lr/dist/constants.js b/node_modules/@lezer/lr/dist/constants.js new file mode 100644 index 00000000..6a999688 --- /dev/null +++ b/node_modules/@lezer/lr/dist/constants.js @@ -0,0 +1,5 @@ +"use strict"; +// This file defines some constants that are needed both in this +// package and in lezer-generator, so that the generator code can +// access them without them being part of lezer's public interface. +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/node_modules/@lezer/lr/dist/index.cjs b/node_modules/@lezer/lr/dist/index.cjs new file mode 100644 index 00000000..714f140c --- /dev/null +++ b/node_modules/@lezer/lr/dist/index.cjs @@ -0,0 +1,1890 @@ +'use strict'; + +var common = require('@lezer/common'); + +/** +A parse stack. These are used internally by the parser to track +parsing progress. They also provide some properties and methods +that external code such as a tokenizer can use to get information +about the parse state. +*/ +class Stack { + /** + @internal + */ + constructor( + /** + The parse that this stack is part of @internal + */ + p, + /** + Holds state, input pos, buffer index triplets for all but the + top state @internal + */ + stack, + /** + The current parse state @internal + */ + state, + // The position at which the next reduce should take place. This + // can be less than `this.pos` when skipped expressions have been + // added to the stack (which should be moved outside of the next + // reduction) + /** + @internal + */ + reducePos, + /** + The input position up to which this stack has parsed. + */ + pos, + /** + The dynamic score of the stack, including dynamic precedence + and error-recovery penalties + @internal + */ + score, + // The output buffer. Holds (type, start, end, size) quads + // representing nodes created by the parser, where `size` is + // amount of buffer array entries covered by this node. + /** + @internal + */ + buffer, + // The base offset of the buffer. When stacks are split, the split + // instance shared the buffer history with its parent up to + // `bufferBase`, which is the absolute offset (including the + // offset of previous splits) into the buffer at which this stack + // starts writing. + /** + @internal + */ + bufferBase, + /** + @internal + */ + curContext, + /** + @internal + */ + lookAhead = 0, + // A parent stack from which this was split off, if any. This is + // set up so that it always points to a stack that has some + // additional buffer content, never to a stack with an equal + // `bufferBase`. + /** + @internal + */ + parent) { + this.p = p; + this.stack = stack; + this.state = state; + this.reducePos = reducePos; + this.pos = pos; + this.score = score; + this.buffer = buffer; + this.bufferBase = bufferBase; + this.curContext = curContext; + this.lookAhead = lookAhead; + this.parent = parent; + } + /** + @internal + */ + toString() { + return `[${this.stack.filter((_, i) => i % 3 == 0).concat(this.state)}]@${this.pos}${this.score ? "!" + this.score : ""}`; + } + // Start an empty stack + /** + @internal + */ + static start(p, state, pos = 0) { + let cx = p.parser.context; + return new Stack(p, [], state, pos, pos, 0, [], 0, cx ? new StackContext(cx, cx.start) : null, 0, null); + } + /** + The stack's current [context](#lr.ContextTracker) value, if + any. Its type will depend on the context tracker's type + parameter, or it will be `null` if there is no context + tracker. + */ + get context() { return this.curContext ? this.curContext.context : null; } + // Push a state onto the stack, tracking its start position as well + // as the buffer base at that point. + /** + @internal + */ + pushState(state, start) { + this.stack.push(this.state, start, this.bufferBase + this.buffer.length); + this.state = state; + } + // Apply a reduce action + /** + @internal + */ + reduce(action) { + var _a; + let depth = action >> 19 /* Action.ReduceDepthShift */, type = action & 65535 /* Action.ValueMask */; + let { parser } = this.p; + let lookaheadRecord = this.reducePos < this.pos - 25 /* Lookahead.Margin */; + if (lookaheadRecord) + this.setLookAhead(this.pos); + let dPrec = parser.dynamicPrecedence(type); + if (dPrec) + this.score += dPrec; + if (depth == 0) { + this.pushState(parser.getGoto(this.state, type, true), this.reducePos); + // Zero-depth reductions are a special case—they add stuff to + // the stack without popping anything off. + if (type < parser.minRepeatTerm) + this.storeNode(type, this.reducePos, this.reducePos, lookaheadRecord ? 8 : 4, true); + this.reduceContext(type, this.reducePos); + return; + } + // Find the base index into `this.stack`, content after which will + // be dropped. Note that with `StayFlag` reductions we need to + // consume two extra frames (the dummy parent node for the skipped + // expression and the state that we'll be staying in, which should + // be moved to `this.state`). + let base = this.stack.length - ((depth - 1) * 3) - (action & 262144 /* Action.StayFlag */ ? 6 : 0); + let start = base ? this.stack[base - 2] : this.p.ranges[0].from, size = this.reducePos - start; + // This is a kludge to try and detect overly deep left-associative + // trees, which will not increase the parse stack depth and thus + // won't be caught by the regular stack-depth limit check. + if (size >= 2000 /* Recover.MinBigReduction */ && !((_a = this.p.parser.nodeSet.types[type]) === null || _a === void 0 ? void 0 : _a.isAnonymous)) { + if (start == this.p.lastBigReductionStart) { + this.p.bigReductionCount++; + this.p.lastBigReductionSize = size; + } + else if (this.p.lastBigReductionSize < size) { + this.p.bigReductionCount = 1; + this.p.lastBigReductionStart = start; + this.p.lastBigReductionSize = size; + } + } + let bufferBase = base ? this.stack[base - 1] : 0, count = this.bufferBase + this.buffer.length - bufferBase; + // Store normal terms or `R -> R R` repeat reductions + if (type < parser.minRepeatTerm || (action & 131072 /* Action.RepeatFlag */)) { + let pos = parser.stateFlag(this.state, 1 /* StateFlag.Skipped */) ? this.pos : this.reducePos; + this.storeNode(type, start, pos, count + 4, true); + } + if (action & 262144 /* Action.StayFlag */) { + this.state = this.stack[base]; + } + else { + let baseStateID = this.stack[base - 3]; + this.state = parser.getGoto(baseStateID, type, true); + } + while (this.stack.length > base) + this.stack.pop(); + this.reduceContext(type, start); + } + // Shift a value into the buffer + /** + @internal + */ + storeNode(term, start, end, size = 4, mustSink = false) { + if (term == 0 /* Term.Err */ && + (!this.stack.length || this.stack[this.stack.length - 1] < this.buffer.length + this.bufferBase)) { + // Try to omit/merge adjacent error nodes + let cur = this, top = this.buffer.length; + if (top == 0 && cur.parent) { + top = cur.bufferBase - cur.parent.bufferBase; + cur = cur.parent; + } + if (top > 0 && cur.buffer[top - 4] == 0 /* Term.Err */ && cur.buffer[top - 1] > -1) { + if (start == end) + return; + if (cur.buffer[top - 2] >= start) { + cur.buffer[top - 2] = end; + return; + } + } + } + if (!mustSink || this.pos == end) { // Simple case, just append + this.buffer.push(term, start, end, size); + } + else { // There may be skipped nodes that have to be moved forward + let index = this.buffer.length; + if (index > 0 && this.buffer[index - 4] != 0 /* Term.Err */) { + let mustMove = false; + for (let scan = index; scan > 0 && this.buffer[scan - 2] > end; scan -= 4) { + if (this.buffer[scan - 1] >= 0) { + mustMove = true; + break; + } + } + if (mustMove) + while (index > 0 && this.buffer[index - 2] > end) { + // Move this record forward + this.buffer[index] = this.buffer[index - 4]; + this.buffer[index + 1] = this.buffer[index - 3]; + this.buffer[index + 2] = this.buffer[index - 2]; + this.buffer[index + 3] = this.buffer[index - 1]; + index -= 4; + if (size > 4) + size -= 4; + } + } + this.buffer[index] = term; + this.buffer[index + 1] = start; + this.buffer[index + 2] = end; + this.buffer[index + 3] = size; + } + } + // Apply a shift action + /** + @internal + */ + shift(action, type, start, end) { + if (action & 131072 /* Action.GotoFlag */) { + this.pushState(action & 65535 /* Action.ValueMask */, this.pos); + } + else if ((action & 262144 /* Action.StayFlag */) == 0) { // Regular shift + let nextState = action, { parser } = this.p; + if (end > this.pos || type <= parser.maxNode) { + this.pos = end; + if (!parser.stateFlag(nextState, 1 /* StateFlag.Skipped */)) + this.reducePos = end; + } + this.pushState(nextState, start); + this.shiftContext(type, start); + if (type <= parser.maxNode) + this.buffer.push(type, start, end, 4); + } + else { // Shift-and-stay, which means this is a skipped token + this.pos = end; + this.shiftContext(type, start); + if (type <= this.p.parser.maxNode) + this.buffer.push(type, start, end, 4); + } + } + // Apply an action + /** + @internal + */ + apply(action, next, nextStart, nextEnd) { + if (action & 65536 /* Action.ReduceFlag */) + this.reduce(action); + else + this.shift(action, next, nextStart, nextEnd); + } + // Add a prebuilt (reused) node into the buffer. + /** + @internal + */ + useNode(value, next) { + let index = this.p.reused.length - 1; + if (index < 0 || this.p.reused[index] != value) { + this.p.reused.push(value); + index++; + } + let start = this.pos; + this.reducePos = this.pos = start + value.length; + this.pushState(next, start); + this.buffer.push(index, start, this.reducePos, -1 /* size == -1 means this is a reused value */); + if (this.curContext) + this.updateContext(this.curContext.tracker.reuse(this.curContext.context, value, this, this.p.stream.reset(this.pos - value.length))); + } + // Split the stack. Due to the buffer sharing and the fact + // that `this.stack` tends to stay quite shallow, this isn't very + // expensive. + /** + @internal + */ + split() { + let parent = this; + let off = parent.buffer.length; + // Because the top of the buffer (after this.pos) may be mutated + // to reorder reductions and skipped tokens, and shared buffers + // should be immutable, this copies any outstanding skipped tokens + // to the new buffer, and puts the base pointer before them. + while (off > 0 && parent.buffer[off - 2] > parent.reducePos) + off -= 4; + let buffer = parent.buffer.slice(off), base = parent.bufferBase + off; + // Make sure parent points to an actual parent with content, if there is such a parent. + while (parent && base == parent.bufferBase) + parent = parent.parent; + return new Stack(this.p, this.stack.slice(), this.state, this.reducePos, this.pos, this.score, buffer, base, this.curContext, this.lookAhead, parent); + } + // Try to recover from an error by 'deleting' (ignoring) one token. + /** + @internal + */ + recoverByDelete(next, nextEnd) { + let isNode = next <= this.p.parser.maxNode; + if (isNode) + this.storeNode(next, this.pos, nextEnd, 4); + this.storeNode(0 /* Term.Err */, this.pos, nextEnd, isNode ? 8 : 4); + this.pos = this.reducePos = nextEnd; + this.score -= 190 /* Recover.Delete */; + } + /** + Check if the given term would be able to be shifted (optionally + after some reductions) on this stack. This can be useful for + external tokenizers that want to make sure they only provide a + given token when it applies. + */ + canShift(term) { + for (let sim = new SimulatedStack(this);;) { + let action = this.p.parser.stateSlot(sim.state, 4 /* ParseState.DefaultReduce */) || this.p.parser.hasAction(sim.state, term); + if (action == 0) + return false; + if ((action & 65536 /* Action.ReduceFlag */) == 0) + return true; + sim.reduce(action); + } + } + // Apply up to Recover.MaxNext recovery actions that conceptually + // inserts some missing token or rule. + /** + @internal + */ + recoverByInsert(next) { + if (this.stack.length >= 300 /* Recover.MaxInsertStackDepth */) + return []; + let nextStates = this.p.parser.nextStates(this.state); + if (nextStates.length > 4 /* Recover.MaxNext */ << 1 || this.stack.length >= 120 /* Recover.DampenInsertStackDepth */) { + let best = []; + for (let i = 0, s; i < nextStates.length; i += 2) { + if ((s = nextStates[i + 1]) != this.state && this.p.parser.hasAction(s, next)) + best.push(nextStates[i], s); + } + if (this.stack.length < 120 /* Recover.DampenInsertStackDepth */) + for (let i = 0; best.length < 4 /* Recover.MaxNext */ << 1 && i < nextStates.length; i += 2) { + let s = nextStates[i + 1]; + if (!best.some((v, i) => (i & 1) && v == s)) + best.push(nextStates[i], s); + } + nextStates = best; + } + let result = []; + for (let i = 0; i < nextStates.length && result.length < 4 /* Recover.MaxNext */; i += 2) { + let s = nextStates[i + 1]; + if (s == this.state) + continue; + let stack = this.split(); + stack.pushState(s, this.pos); + stack.storeNode(0 /* Term.Err */, stack.pos, stack.pos, 4, true); + stack.shiftContext(nextStates[i], this.pos); + stack.reducePos = this.pos; + stack.score -= 200 /* Recover.Insert */; + result.push(stack); + } + return result; + } + // Force a reduce, if possible. Return false if that can't + // be done. + /** + @internal + */ + forceReduce() { + let { parser } = this.p; + let reduce = parser.stateSlot(this.state, 5 /* ParseState.ForcedReduce */); + if ((reduce & 65536 /* Action.ReduceFlag */) == 0) + return false; + if (!parser.validAction(this.state, reduce)) { + let depth = reduce >> 19 /* Action.ReduceDepthShift */, term = reduce & 65535 /* Action.ValueMask */; + let target = this.stack.length - depth * 3; + if (target < 0 || parser.getGoto(this.stack[target], term, false) < 0) { + let backup = this.findForcedReduction(); + if (backup == null) + return false; + reduce = backup; + } + this.storeNode(0 /* Term.Err */, this.pos, this.pos, 4, true); + this.score -= 100 /* Recover.Reduce */; + } + this.reducePos = this.pos; + this.reduce(reduce); + return true; + } + /** + Try to scan through the automaton to find some kind of reduction + that can be applied. Used when the regular ForcedReduce field + isn't a valid action. @internal + */ + findForcedReduction() { + let { parser } = this.p, seen = []; + let explore = (state, depth) => { + if (seen.includes(state)) + return; + seen.push(state); + return parser.allActions(state, (action) => { + if (action & (262144 /* Action.StayFlag */ | 131072 /* Action.GotoFlag */)) ; + else if (action & 65536 /* Action.ReduceFlag */) { + let rDepth = (action >> 19 /* Action.ReduceDepthShift */) - depth; + if (rDepth > 1) { + let term = action & 65535 /* Action.ValueMask */, target = this.stack.length - rDepth * 3; + if (target >= 0 && parser.getGoto(this.stack[target], term, false) >= 0) + return (rDepth << 19 /* Action.ReduceDepthShift */) | 65536 /* Action.ReduceFlag */ | term; + } + } + else { + let found = explore(action, depth + 1); + if (found != null) + return found; + } + }); + }; + return explore(this.state, 0); + } + /** + @internal + */ + forceAll() { + while (!this.p.parser.stateFlag(this.state, 2 /* StateFlag.Accepting */)) { + if (!this.forceReduce()) { + this.storeNode(0 /* Term.Err */, this.pos, this.pos, 4, true); + break; + } + } + return this; + } + /** + Check whether this state has no further actions (assumed to be a direct descendant of the + top state, since any other states must be able to continue + somehow). @internal + */ + get deadEnd() { + if (this.stack.length != 3) + return false; + let { parser } = this.p; + return parser.data[parser.stateSlot(this.state, 1 /* ParseState.Actions */)] == 65535 /* Seq.End */ && + !parser.stateSlot(this.state, 4 /* ParseState.DefaultReduce */); + } + /** + Restart the stack (put it back in its start state). Only safe + when this.stack.length == 3 (state is directly below the top + state). @internal + */ + restart() { + this.storeNode(0 /* Term.Err */, this.pos, this.pos, 4, true); + this.state = this.stack[0]; + this.stack.length = 0; + } + /** + @internal + */ + sameState(other) { + if (this.state != other.state || this.stack.length != other.stack.length) + return false; + for (let i = 0; i < this.stack.length; i += 3) + if (this.stack[i] != other.stack[i]) + return false; + return true; + } + /** + Get the parser used by this stack. + */ + get parser() { return this.p.parser; } + /** + Test whether a given dialect (by numeric ID, as exported from + the terms file) is enabled. + */ + dialectEnabled(dialectID) { return this.p.parser.dialect.flags[dialectID]; } + shiftContext(term, start) { + if (this.curContext) + this.updateContext(this.curContext.tracker.shift(this.curContext.context, term, this, this.p.stream.reset(start))); + } + reduceContext(term, start) { + if (this.curContext) + this.updateContext(this.curContext.tracker.reduce(this.curContext.context, term, this, this.p.stream.reset(start))); + } + /** + @internal + */ + emitContext() { + let last = this.buffer.length - 1; + if (last < 0 || this.buffer[last] != -3) + this.buffer.push(this.curContext.hash, this.pos, this.pos, -3); + } + /** + @internal + */ + emitLookAhead() { + let last = this.buffer.length - 1; + if (last < 0 || this.buffer[last] != -4) + this.buffer.push(this.lookAhead, this.pos, this.pos, -4); + } + updateContext(context) { + if (context != this.curContext.context) { + let newCx = new StackContext(this.curContext.tracker, context); + if (newCx.hash != this.curContext.hash) + this.emitContext(); + this.curContext = newCx; + } + } + /** + @internal + */ + setLookAhead(lookAhead) { + if (lookAhead > this.lookAhead) { + this.emitLookAhead(); + this.lookAhead = lookAhead; + } + } + /** + @internal + */ + close() { + if (this.curContext && this.curContext.tracker.strict) + this.emitContext(); + if (this.lookAhead > 0) + this.emitLookAhead(); + } +} +class StackContext { + constructor(tracker, context) { + this.tracker = tracker; + this.context = context; + this.hash = tracker.strict ? tracker.hash(context) : 0; + } +} +// Used to cheaply run some reductions to scan ahead without mutating +// an entire stack +class SimulatedStack { + constructor(start) { + this.start = start; + this.state = start.state; + this.stack = start.stack; + this.base = this.stack.length; + } + reduce(action) { + let term = action & 65535 /* Action.ValueMask */, depth = action >> 19 /* Action.ReduceDepthShift */; + if (depth == 0) { + if (this.stack == this.start.stack) + this.stack = this.stack.slice(); + this.stack.push(this.state, 0, 0); + this.base += 3; + } + else { + this.base -= (depth - 1) * 3; + } + let goto = this.start.p.parser.getGoto(this.stack[this.base - 3], term, true); + this.state = goto; + } +} +// This is given to `Tree.build` to build a buffer, and encapsulates +// the parent-stack-walking necessary to read the nodes. +class StackBufferCursor { + constructor(stack, pos, index) { + this.stack = stack; + this.pos = pos; + this.index = index; + this.buffer = stack.buffer; + if (this.index == 0) + this.maybeNext(); + } + static create(stack, pos = stack.bufferBase + stack.buffer.length) { + return new StackBufferCursor(stack, pos, pos - stack.bufferBase); + } + maybeNext() { + let next = this.stack.parent; + if (next != null) { + this.index = this.stack.bufferBase - next.bufferBase; + this.stack = next; + this.buffer = next.buffer; + } + } + get id() { return this.buffer[this.index - 4]; } + get start() { return this.buffer[this.index - 3]; } + get end() { return this.buffer[this.index - 2]; } + get size() { return this.buffer[this.index - 1]; } + next() { + this.index -= 4; + this.pos -= 4; + if (this.index == 0) + this.maybeNext(); + } + fork() { + return new StackBufferCursor(this.stack, this.pos, this.index); + } +} + +// See lezer-generator/src/encode.ts for comments about the encoding +// used here +function decodeArray(input, Type = Uint16Array) { + if (typeof input != "string") + return input; + let array = null; + for (let pos = 0, out = 0; pos < input.length;) { + let value = 0; + for (;;) { + let next = input.charCodeAt(pos++), stop = false; + if (next == 126 /* Encode.BigValCode */) { + value = 65535 /* Encode.BigVal */; + break; + } + if (next >= 92 /* Encode.Gap2 */) + next--; + if (next >= 34 /* Encode.Gap1 */) + next--; + let digit = next - 32 /* Encode.Start */; + if (digit >= 46 /* Encode.Base */) { + digit -= 46 /* Encode.Base */; + stop = true; + } + value += digit; + if (stop) + break; + value *= 46 /* Encode.Base */; + } + if (array) + array[out++] = value; + else + array = new Type(value); + } + return array; +} + +class CachedToken { + constructor() { + this.start = -1; + this.value = -1; + this.end = -1; + this.extended = -1; + this.lookAhead = 0; + this.mask = 0; + this.context = 0; + } +} +const nullToken = new CachedToken; +/** +[Tokenizers](#lr.ExternalTokenizer) interact with the input +through this interface. It presents the input as a stream of +characters, tracking lookahead and hiding the complexity of +[ranges](#common.Parser.parse^ranges) from tokenizer code. +*/ +class InputStream { + /** + @internal + */ + constructor( + /** + @internal + */ + input, + /** + @internal + */ + ranges) { + this.input = input; + this.ranges = ranges; + /** + @internal + */ + this.chunk = ""; + /** + @internal + */ + this.chunkOff = 0; + /** + Backup chunk + */ + this.chunk2 = ""; + this.chunk2Pos = 0; + /** + The character code of the next code unit in the input, or -1 + when the stream is at the end of the input. + */ + this.next = -1; + /** + @internal + */ + this.token = nullToken; + this.rangeIndex = 0; + this.pos = this.chunkPos = ranges[0].from; + this.range = ranges[0]; + this.end = ranges[ranges.length - 1].to; + this.readNext(); + } + /** + @internal + */ + resolveOffset(offset, assoc) { + let range = this.range, index = this.rangeIndex; + let pos = this.pos + offset; + while (pos < range.from) { + if (!index) + return null; + let next = this.ranges[--index]; + pos -= range.from - next.to; + range = next; + } + while (assoc < 0 ? pos > range.to : pos >= range.to) { + if (index == this.ranges.length - 1) + return null; + let next = this.ranges[++index]; + pos += next.from - range.to; + range = next; + } + return pos; + } + /** + @internal + */ + clipPos(pos) { + if (pos >= this.range.from && pos < this.range.to) + return pos; + for (let range of this.ranges) + if (range.to > pos) + return Math.max(pos, range.from); + return this.end; + } + /** + Look at a code unit near the stream position. `.peek(0)` equals + `.next`, `.peek(-1)` gives you the previous character, and so + on. + + Note that looking around during tokenizing creates dependencies + on potentially far-away content, which may reduce the + effectiveness incremental parsing—when looking forward—or even + cause invalid reparses when looking backward more than 25 code + units, since the library does not track lookbehind. + */ + peek(offset) { + let idx = this.chunkOff + offset, pos, result; + if (idx >= 0 && idx < this.chunk.length) { + pos = this.pos + offset; + result = this.chunk.charCodeAt(idx); + } + else { + let resolved = this.resolveOffset(offset, 1); + if (resolved == null) + return -1; + pos = resolved; + if (pos >= this.chunk2Pos && pos < this.chunk2Pos + this.chunk2.length) { + result = this.chunk2.charCodeAt(pos - this.chunk2Pos); + } + else { + let i = this.rangeIndex, range = this.range; + while (range.to <= pos) + range = this.ranges[++i]; + this.chunk2 = this.input.chunk(this.chunk2Pos = pos); + if (pos + this.chunk2.length > range.to) + this.chunk2 = this.chunk2.slice(0, range.to - pos); + result = this.chunk2.charCodeAt(0); + } + } + if (pos >= this.token.lookAhead) + this.token.lookAhead = pos + 1; + return result; + } + /** + Accept a token. By default, the end of the token is set to the + current stream position, but you can pass an offset (relative to + the stream position) to change that. + */ + acceptToken(token, endOffset = 0) { + let end = endOffset ? this.resolveOffset(endOffset, -1) : this.pos; + if (end == null || end < this.token.start) + throw new RangeError("Token end out of bounds"); + this.token.value = token; + this.token.end = end; + } + /** + Accept a token ending at a specific given position. + */ + acceptTokenTo(token, endPos) { + this.token.value = token; + this.token.end = endPos; + } + getChunk() { + if (this.pos >= this.chunk2Pos && this.pos < this.chunk2Pos + this.chunk2.length) { + let { chunk, chunkPos } = this; + this.chunk = this.chunk2; + this.chunkPos = this.chunk2Pos; + this.chunk2 = chunk; + this.chunk2Pos = chunkPos; + this.chunkOff = this.pos - this.chunkPos; + } + else { + this.chunk2 = this.chunk; + this.chunk2Pos = this.chunkPos; + let nextChunk = this.input.chunk(this.pos); + let end = this.pos + nextChunk.length; + this.chunk = end > this.range.to ? nextChunk.slice(0, this.range.to - this.pos) : nextChunk; + this.chunkPos = this.pos; + this.chunkOff = 0; + } + } + readNext() { + if (this.chunkOff >= this.chunk.length) { + this.getChunk(); + if (this.chunkOff == this.chunk.length) + return this.next = -1; + } + return this.next = this.chunk.charCodeAt(this.chunkOff); + } + /** + Move the stream forward N (defaults to 1) code units. Returns + the new value of [`next`](#lr.InputStream.next). + */ + advance(n = 1) { + this.chunkOff += n; + while (this.pos + n >= this.range.to) { + if (this.rangeIndex == this.ranges.length - 1) + return this.setDone(); + n -= this.range.to - this.pos; + this.range = this.ranges[++this.rangeIndex]; + this.pos = this.range.from; + } + this.pos += n; + if (this.pos >= this.token.lookAhead) + this.token.lookAhead = this.pos + 1; + return this.readNext(); + } + setDone() { + this.pos = this.chunkPos = this.end; + this.range = this.ranges[this.rangeIndex = this.ranges.length - 1]; + this.chunk = ""; + return this.next = -1; + } + /** + @internal + */ + reset(pos, token) { + if (token) { + this.token = token; + token.start = pos; + token.lookAhead = pos + 1; + token.value = token.extended = -1; + } + else { + this.token = nullToken; + } + if (this.pos != pos) { + this.pos = pos; + if (pos == this.end) { + this.setDone(); + return this; + } + while (pos < this.range.from) + this.range = this.ranges[--this.rangeIndex]; + while (pos >= this.range.to) + this.range = this.ranges[++this.rangeIndex]; + if (pos >= this.chunkPos && pos < this.chunkPos + this.chunk.length) { + this.chunkOff = pos - this.chunkPos; + } + else { + this.chunk = ""; + this.chunkOff = 0; + } + this.readNext(); + } + return this; + } + /** + @internal + */ + read(from, to) { + if (from >= this.chunkPos && to <= this.chunkPos + this.chunk.length) + return this.chunk.slice(from - this.chunkPos, to - this.chunkPos); + if (from >= this.chunk2Pos && to <= this.chunk2Pos + this.chunk2.length) + return this.chunk2.slice(from - this.chunk2Pos, to - this.chunk2Pos); + if (from >= this.range.from && to <= this.range.to) + return this.input.read(from, to); + let result = ""; + for (let r of this.ranges) { + if (r.from >= to) + break; + if (r.to > from) + result += this.input.read(Math.max(r.from, from), Math.min(r.to, to)); + } + return result; + } +} +/** +@internal +*/ +class TokenGroup { + constructor(data, id) { + this.data = data; + this.id = id; + } + token(input, stack) { + let { parser } = stack.p; + readToken(this.data, input, stack, this.id, parser.data, parser.tokenPrecTable); + } +} +TokenGroup.prototype.contextual = TokenGroup.prototype.fallback = TokenGroup.prototype.extend = false; +/** +@hide +*/ +class LocalTokenGroup { + constructor(data, precTable, elseToken) { + this.precTable = precTable; + this.elseToken = elseToken; + this.data = typeof data == "string" ? decodeArray(data) : data; + } + token(input, stack) { + let start = input.pos, skipped = 0; + for (;;) { + let atEof = input.next < 0, nextPos = input.resolveOffset(1, 1); + readToken(this.data, input, stack, 0, this.data, this.precTable); + if (input.token.value > -1) + break; + if (this.elseToken == null) + return; + if (!atEof) + skipped++; + if (nextPos == null) + break; + input.reset(nextPos, input.token); + } + if (skipped) { + input.reset(start, input.token); + input.acceptToken(this.elseToken, skipped); + } + } +} +LocalTokenGroup.prototype.contextual = TokenGroup.prototype.fallback = TokenGroup.prototype.extend = false; +/** +`@external tokens` declarations in the grammar should resolve to +an instance of this class. +*/ +class ExternalTokenizer { + /** + Create a tokenizer. The first argument is the function that, + given an input stream, scans for the types of tokens it + recognizes at the stream's position, and calls + [`acceptToken`](#lr.InputStream.acceptToken) when it finds + one. + */ + constructor( + /** + @internal + */ + token, options = {}) { + this.token = token; + this.contextual = !!options.contextual; + this.fallback = !!options.fallback; + this.extend = !!options.extend; + } +} +// Tokenizer data is stored a big uint16 array containing, for each +// state: +// +// - A group bitmask, indicating what token groups are reachable from +// this state, so that paths that can only lead to tokens not in +// any of the current groups can be cut off early. +// +// - The position of the end of the state's sequence of accepting +// tokens +// +// - The number of outgoing edges for the state +// +// - The accepting tokens, as (token id, group mask) pairs +// +// - The outgoing edges, as (start character, end character, state +// index) triples, with end character being exclusive +// +// This function interprets that data, running through a stream as +// long as new states with the a matching group mask can be reached, +// and updating `input.token` when it matches a token. +function readToken(data, input, stack, group, precTable, precOffset) { + let state = 0, groupMask = 1 << group, { dialect } = stack.p.parser; + scan: for (;;) { + if ((groupMask & data[state]) == 0) + break; + let accEnd = data[state + 1]; + // Check whether this state can lead to a token in the current group + // Accept tokens in this state, possibly overwriting + // lower-precedence / shorter tokens + for (let i = state + 3; i < accEnd; i += 2) + if ((data[i + 1] & groupMask) > 0) { + let term = data[i]; + if (dialect.allows(term) && + (input.token.value == -1 || input.token.value == term || + overrides(term, input.token.value, precTable, precOffset))) { + input.acceptToken(term); + break; + } + } + let next = input.next, low = 0, high = data[state + 2]; + // Special case for EOF + if (input.next < 0 && high > low && data[accEnd + high * 3 - 3] == 65535 /* Seq.End */) { + state = data[accEnd + high * 3 - 1]; + continue scan; + } + // Do a binary search on the state's edges + for (; low < high;) { + let mid = (low + high) >> 1; + let index = accEnd + mid + (mid << 1); + let from = data[index], to = data[index + 1] || 0x10000; + if (next < from) + high = mid; + else if (next >= to) + low = mid + 1; + else { + state = data[index + 2]; + input.advance(); + continue scan; + } + } + break; + } +} +function findOffset(data, start, term) { + for (let i = start, next; (next = data[i]) != 65535 /* Seq.End */; i++) + if (next == term) + return i - start; + return -1; +} +function overrides(token, prev, tableData, tableOffset) { + let iPrev = findOffset(tableData, tableOffset, prev); + return iPrev < 0 || findOffset(tableData, tableOffset, token) < iPrev; +} + +// Environment variable used to control console output +const verbose = typeof process != "undefined" && process.env && /\bparse\b/.test(process.env.LOG); +let stackIDs = null; +function cutAt(tree, pos, side) { + let cursor = tree.cursor(common.IterMode.IncludeAnonymous); + cursor.moveTo(pos); + for (;;) { + if (!(side < 0 ? cursor.childBefore(pos) : cursor.childAfter(pos))) + for (;;) { + if ((side < 0 ? cursor.to < pos : cursor.from > pos) && !cursor.type.isError) + return side < 0 ? Math.max(0, Math.min(cursor.to - 1, pos - 25 /* Lookahead.Margin */)) + : Math.min(tree.length, Math.max(cursor.from + 1, pos + 25 /* Lookahead.Margin */)); + if (side < 0 ? cursor.prevSibling() : cursor.nextSibling()) + break; + if (!cursor.parent()) + return side < 0 ? 0 : tree.length; + } + } +} +class FragmentCursor { + constructor(fragments, nodeSet) { + this.fragments = fragments; + this.nodeSet = nodeSet; + this.i = 0; + this.fragment = null; + this.safeFrom = -1; + this.safeTo = -1; + this.trees = []; + this.start = []; + this.index = []; + this.nextFragment(); + } + nextFragment() { + let fr = this.fragment = this.i == this.fragments.length ? null : this.fragments[this.i++]; + if (fr) { + this.safeFrom = fr.openStart ? cutAt(fr.tree, fr.from + fr.offset, 1) - fr.offset : fr.from; + this.safeTo = fr.openEnd ? cutAt(fr.tree, fr.to + fr.offset, -1) - fr.offset : fr.to; + while (this.trees.length) { + this.trees.pop(); + this.start.pop(); + this.index.pop(); + } + this.trees.push(fr.tree); + this.start.push(-fr.offset); + this.index.push(0); + this.nextStart = this.safeFrom; + } + else { + this.nextStart = 1e9; + } + } + // `pos` must be >= any previously given `pos` for this cursor + nodeAt(pos) { + if (pos < this.nextStart) + return null; + while (this.fragment && this.safeTo <= pos) + this.nextFragment(); + if (!this.fragment) + return null; + for (;;) { + let last = this.trees.length - 1; + if (last < 0) { // End of tree + this.nextFragment(); + return null; + } + let top = this.trees[last], index = this.index[last]; + if (index == top.children.length) { + this.trees.pop(); + this.start.pop(); + this.index.pop(); + continue; + } + let next = top.children[index]; + let start = this.start[last] + top.positions[index]; + if (start > pos) { + this.nextStart = start; + return null; + } + if (next instanceof common.Tree) { + if (start == pos) { + if (start < this.safeFrom) + return null; + let end = start + next.length; + if (end <= this.safeTo) { + let lookAhead = next.prop(common.NodeProp.lookAhead); + if (!lookAhead || end + lookAhead < this.fragment.to) + return next; + } + } + this.index[last]++; + if (start + next.length >= Math.max(this.safeFrom, pos)) { // Enter this node + this.trees.push(next); + this.start.push(start); + this.index.push(0); + } + } + else { + this.index[last]++; + this.nextStart = start + next.length; + } + } + } +} +class TokenCache { + constructor(parser, stream) { + this.stream = stream; + this.tokens = []; + this.mainToken = null; + this.actions = []; + this.tokens = parser.tokenizers.map(_ => new CachedToken); + } + getActions(stack) { + let actionIndex = 0; + let main = null; + let { parser } = stack.p, { tokenizers } = parser; + let mask = parser.stateSlot(stack.state, 3 /* ParseState.TokenizerMask */); + let context = stack.curContext ? stack.curContext.hash : 0; + let lookAhead = 0; + for (let i = 0; i < tokenizers.length; i++) { + if (((1 << i) & mask) == 0) + continue; + let tokenizer = tokenizers[i], token = this.tokens[i]; + if (main && !tokenizer.fallback) + continue; + if (tokenizer.contextual || token.start != stack.pos || token.mask != mask || token.context != context) { + this.updateCachedToken(token, tokenizer, stack); + token.mask = mask; + token.context = context; + } + if (token.lookAhead > token.end + 25 /* Lookahead.Margin */) + lookAhead = Math.max(token.lookAhead, lookAhead); + if (token.value != 0 /* Term.Err */) { + let startIndex = actionIndex; + if (token.extended > -1) + actionIndex = this.addActions(stack, token.extended, token.end, actionIndex); + actionIndex = this.addActions(stack, token.value, token.end, actionIndex); + if (!tokenizer.extend) { + main = token; + if (actionIndex > startIndex) + break; + } + } + } + while (this.actions.length > actionIndex) + this.actions.pop(); + if (lookAhead) + stack.setLookAhead(lookAhead); + if (!main && stack.pos == this.stream.end) { + main = new CachedToken; + main.value = stack.p.parser.eofTerm; + main.start = main.end = stack.pos; + actionIndex = this.addActions(stack, main.value, main.end, actionIndex); + } + this.mainToken = main; + return this.actions; + } + getMainToken(stack) { + if (this.mainToken) + return this.mainToken; + let main = new CachedToken, { pos, p } = stack; + main.start = pos; + main.end = Math.min(pos + 1, p.stream.end); + main.value = pos == p.stream.end ? p.parser.eofTerm : 0 /* Term.Err */; + return main; + } + updateCachedToken(token, tokenizer, stack) { + let start = this.stream.clipPos(stack.pos); + tokenizer.token(this.stream.reset(start, token), stack); + if (token.value > -1) { + let { parser } = stack.p; + for (let i = 0; i < parser.specialized.length; i++) + if (parser.specialized[i] == token.value) { + let result = parser.specializers[i](this.stream.read(token.start, token.end), stack); + if (result >= 0 && stack.p.parser.dialect.allows(result >> 1)) { + if ((result & 1) == 0 /* Specialize.Specialize */) + token.value = result >> 1; + else + token.extended = result >> 1; + break; + } + } + } + else { + token.value = 0 /* Term.Err */; + token.end = this.stream.clipPos(start + 1); + } + } + putAction(action, token, end, index) { + // Don't add duplicate actions + for (let i = 0; i < index; i += 3) + if (this.actions[i] == action) + return index; + this.actions[index++] = action; + this.actions[index++] = token; + this.actions[index++] = end; + return index; + } + addActions(stack, token, end, index) { + let { state } = stack, { parser } = stack.p, { data } = parser; + for (let set = 0; set < 2; set++) { + for (let i = parser.stateSlot(state, set ? 2 /* ParseState.Skip */ : 1 /* ParseState.Actions */);; i += 3) { + if (data[i] == 65535 /* Seq.End */) { + if (data[i + 1] == 1 /* Seq.Next */) { + i = pair(data, i + 2); + } + else { + if (index == 0 && data[i + 1] == 2 /* Seq.Other */) + index = this.putAction(pair(data, i + 2), token, end, index); + break; + } + } + if (data[i] == token) + index = this.putAction(pair(data, i + 1), token, end, index); + } + } + return index; + } +} +class Parse { + constructor(parser, input, fragments, ranges) { + this.parser = parser; + this.input = input; + this.ranges = ranges; + this.recovering = 0; + this.nextStackID = 0x2654; // ♔, ♕, ♖, ♗, ♘, ♙, ♠, ♡, ♢, ♣, ♤, ♥, ♦, ♧ + this.minStackPos = 0; + this.reused = []; + this.stoppedAt = null; + this.lastBigReductionStart = -1; + this.lastBigReductionSize = 0; + this.bigReductionCount = 0; + this.stream = new InputStream(input, ranges); + this.tokens = new TokenCache(parser, this.stream); + this.topTerm = parser.top[1]; + let { from } = ranges[0]; + this.stacks = [Stack.start(this, parser.top[0], from)]; + this.fragments = fragments.length && this.stream.end - from > parser.bufferLength * 4 + ? new FragmentCursor(fragments, parser.nodeSet) : null; + } + get parsedPos() { + return this.minStackPos; + } + // Move the parser forward. This will process all parse stacks at + // `this.pos` and try to advance them to a further position. If no + // stack for such a position is found, it'll start error-recovery. + // + // When the parse is finished, this will return a syntax tree. When + // not, it returns `null`. + advance() { + let stacks = this.stacks, pos = this.minStackPos; + // This will hold stacks beyond `pos`. + let newStacks = this.stacks = []; + let stopped, stoppedTokens; + // If a large amount of reductions happened with the same start + // position, force the stack out of that production in order to + // avoid creating a tree too deep to recurse through. + // (This is an ugly kludge, because unfortunately there is no + // straightforward, cheap way to check for this happening, due to + // the history of reductions only being available in an + // expensive-to-access format in the stack buffers.) + if (this.bigReductionCount > 300 /* Rec.MaxLeftAssociativeReductionCount */ && stacks.length == 1) { + let [s] = stacks; + while (s.forceReduce() && s.stack.length && s.stack[s.stack.length - 2] >= this.lastBigReductionStart) { } + this.bigReductionCount = this.lastBigReductionSize = 0; + } + // Keep advancing any stacks at `pos` until they either move + // forward or can't be advanced. Gather stacks that can't be + // advanced further in `stopped`. + for (let i = 0; i < stacks.length; i++) { + let stack = stacks[i]; + for (;;) { + this.tokens.mainToken = null; + if (stack.pos > pos) { + newStacks.push(stack); + } + else if (this.advanceStack(stack, newStacks, stacks)) { + continue; + } + else { + if (!stopped) { + stopped = []; + stoppedTokens = []; + } + stopped.push(stack); + let tok = this.tokens.getMainToken(stack); + stoppedTokens.push(tok.value, tok.end); + } + break; + } + } + if (!newStacks.length) { + let finished = stopped && findFinished(stopped); + if (finished) { + if (verbose) + console.log("Finish with " + this.stackID(finished)); + return this.stackToTree(finished); + } + if (this.parser.strict) { + if (verbose && stopped) + console.log("Stuck with token " + (this.tokens.mainToken ? this.parser.getName(this.tokens.mainToken.value) : "none")); + throw new SyntaxError("No parse at " + pos); + } + if (!this.recovering) + this.recovering = 5 /* Rec.Distance */; + } + if (this.recovering && stopped) { + let finished = this.stoppedAt != null && stopped[0].pos > this.stoppedAt ? stopped[0] + : this.runRecovery(stopped, stoppedTokens, newStacks); + if (finished) { + if (verbose) + console.log("Force-finish " + this.stackID(finished)); + return this.stackToTree(finished.forceAll()); + } + } + if (this.recovering) { + let maxRemaining = this.recovering == 1 ? 1 : this.recovering * 3 /* Rec.MaxRemainingPerStep */; + if (newStacks.length > maxRemaining) { + newStacks.sort((a, b) => b.score - a.score); + while (newStacks.length > maxRemaining) + newStacks.pop(); + } + if (newStacks.some(s => s.reducePos > pos)) + this.recovering--; + } + else if (newStacks.length > 1) { + // Prune stacks that are in the same state, or that have been + // running without splitting for a while, to avoid getting stuck + // with multiple successful stacks running endlessly on. + outer: for (let i = 0; i < newStacks.length - 1; i++) { + let stack = newStacks[i]; + for (let j = i + 1; j < newStacks.length; j++) { + let other = newStacks[j]; + if (stack.sameState(other) || + stack.buffer.length > 500 /* Rec.MinBufferLengthPrune */ && other.buffer.length > 500 /* Rec.MinBufferLengthPrune */) { + if (((stack.score - other.score) || (stack.buffer.length - other.buffer.length)) > 0) { + newStacks.splice(j--, 1); + } + else { + newStacks.splice(i--, 1); + continue outer; + } + } + } + } + if (newStacks.length > 12 /* Rec.MaxStackCount */) + newStacks.splice(12 /* Rec.MaxStackCount */, newStacks.length - 12 /* Rec.MaxStackCount */); + } + this.minStackPos = newStacks[0].pos; + for (let i = 1; i < newStacks.length; i++) + if (newStacks[i].pos < this.minStackPos) + this.minStackPos = newStacks[i].pos; + return null; + } + stopAt(pos) { + if (this.stoppedAt != null && this.stoppedAt < pos) + throw new RangeError("Can't move stoppedAt forward"); + this.stoppedAt = pos; + } + // Returns an updated version of the given stack, or null if the + // stack can't advance normally. When `split` and `stacks` are + // given, stacks split off by ambiguous operations will be pushed to + // `split`, or added to `stacks` if they move `pos` forward. + advanceStack(stack, stacks, split) { + let start = stack.pos, { parser } = this; + let base = verbose ? this.stackID(stack) + " -> " : ""; + if (this.stoppedAt != null && start > this.stoppedAt) + return stack.forceReduce() ? stack : null; + if (this.fragments) { + let strictCx = stack.curContext && stack.curContext.tracker.strict, cxHash = strictCx ? stack.curContext.hash : 0; + for (let cached = this.fragments.nodeAt(start); cached;) { + let match = this.parser.nodeSet.types[cached.type.id] == cached.type ? parser.getGoto(stack.state, cached.type.id) : -1; + if (match > -1 && cached.length && (!strictCx || (cached.prop(common.NodeProp.contextHash) || 0) == cxHash)) { + stack.useNode(cached, match); + if (verbose) + console.log(base + this.stackID(stack) + ` (via reuse of ${parser.getName(cached.type.id)})`); + return true; + } + if (!(cached instanceof common.Tree) || cached.children.length == 0 || cached.positions[0] > 0) + break; + let inner = cached.children[0]; + if (inner instanceof common.Tree && cached.positions[0] == 0) + cached = inner; + else + break; + } + } + let defaultReduce = parser.stateSlot(stack.state, 4 /* ParseState.DefaultReduce */); + if (defaultReduce > 0) { + stack.reduce(defaultReduce); + if (verbose) + console.log(base + this.stackID(stack) + ` (via always-reduce ${parser.getName(defaultReduce & 65535 /* Action.ValueMask */)})`); + return true; + } + if (stack.stack.length >= 8400 /* Rec.CutDepth */) { + while (stack.stack.length > 6000 /* Rec.CutTo */ && stack.forceReduce()) { } + } + let actions = this.tokens.getActions(stack); + for (let i = 0; i < actions.length;) { + let action = actions[i++], term = actions[i++], end = actions[i++]; + let last = i == actions.length || !split; + let localStack = last ? stack : stack.split(); + let main = this.tokens.mainToken; + localStack.apply(action, term, main ? main.start : localStack.pos, end); + if (verbose) + console.log(base + this.stackID(localStack) + ` (via ${(action & 65536 /* Action.ReduceFlag */) == 0 ? "shift" + : `reduce of ${parser.getName(action & 65535 /* Action.ValueMask */)}`} for ${parser.getName(term)} @ ${start}${localStack == stack ? "" : ", split"})`); + if (last) + return true; + else if (localStack.pos > start) + stacks.push(localStack); + else + split.push(localStack); + } + return false; + } + // Advance a given stack forward as far as it will go. Returns the + // (possibly updated) stack if it got stuck, or null if it moved + // forward and was given to `pushStackDedup`. + advanceFully(stack, newStacks) { + let pos = stack.pos; + for (;;) { + if (!this.advanceStack(stack, null, null)) + return false; + if (stack.pos > pos) { + pushStackDedup(stack, newStacks); + return true; + } + } + } + runRecovery(stacks, tokens, newStacks) { + let finished = null, restarted = false; + for (let i = 0; i < stacks.length; i++) { + let stack = stacks[i], token = tokens[i << 1], tokenEnd = tokens[(i << 1) + 1]; + let base = verbose ? this.stackID(stack) + " -> " : ""; + if (stack.deadEnd) { + if (restarted) + continue; + restarted = true; + stack.restart(); + if (verbose) + console.log(base + this.stackID(stack) + " (restarted)"); + let done = this.advanceFully(stack, newStacks); + if (done) + continue; + } + let force = stack.split(), forceBase = base; + for (let j = 0; force.forceReduce() && j < 10 /* Rec.ForceReduceLimit */; j++) { + if (verbose) + console.log(forceBase + this.stackID(force) + " (via force-reduce)"); + let done = this.advanceFully(force, newStacks); + if (done) + break; + if (verbose) + forceBase = this.stackID(force) + " -> "; + } + for (let insert of stack.recoverByInsert(token)) { + if (verbose) + console.log(base + this.stackID(insert) + " (via recover-insert)"); + this.advanceFully(insert, newStacks); + } + if (this.stream.end > stack.pos) { + if (tokenEnd == stack.pos) { + tokenEnd++; + token = 0 /* Term.Err */; + } + stack.recoverByDelete(token, tokenEnd); + if (verbose) + console.log(base + this.stackID(stack) + ` (via recover-delete ${this.parser.getName(token)})`); + pushStackDedup(stack, newStacks); + } + else if (!finished || finished.score < stack.score) { + finished = stack; + } + } + return finished; + } + // Convert the stack's buffer to a syntax tree. + stackToTree(stack) { + stack.close(); + return common.Tree.build({ buffer: StackBufferCursor.create(stack), + nodeSet: this.parser.nodeSet, + topID: this.topTerm, + maxBufferLength: this.parser.bufferLength, + reused: this.reused, + start: this.ranges[0].from, + length: stack.pos - this.ranges[0].from, + minRepeatType: this.parser.minRepeatTerm }); + } + stackID(stack) { + let id = (stackIDs || (stackIDs = new WeakMap)).get(stack); + if (!id) + stackIDs.set(stack, id = String.fromCodePoint(this.nextStackID++)); + return id + stack; + } +} +function pushStackDedup(stack, newStacks) { + for (let i = 0; i < newStacks.length; i++) { + let other = newStacks[i]; + if (other.pos == stack.pos && other.sameState(stack)) { + if (newStacks[i].score < stack.score) + newStacks[i] = stack; + return; + } + } + newStacks.push(stack); +} +class Dialect { + constructor(source, flags, disabled) { + this.source = source; + this.flags = flags; + this.disabled = disabled; + } + allows(term) { return !this.disabled || this.disabled[term] == 0; } +} +const id = x => x; +/** +Context trackers are used to track stateful context (such as +indentation in the Python grammar, or parent elements in the XML +grammar) needed by external tokenizers. You declare them in a +grammar file as `@context exportName from "module"`. + +Context values should be immutable, and can be updated (replaced) +on shift or reduce actions. + +The export used in a `@context` declaration should be of this +type. +*/ +class ContextTracker { + /** + Define a context tracker. + */ + constructor(spec) { + this.start = spec.start; + this.shift = spec.shift || id; + this.reduce = spec.reduce || id; + this.reuse = spec.reuse || id; + this.hash = spec.hash || (() => 0); + this.strict = spec.strict !== false; + } +} +/** +Holds the parse tables for a given grammar, as generated by +`lezer-generator`, and provides [methods](#common.Parser) to parse +content with. +*/ +class LRParser extends common.Parser { + /** + @internal + */ + constructor(spec) { + super(); + /** + @internal + */ + this.wrappers = []; + if (spec.version != 14 /* File.Version */) + throw new RangeError(`Parser version (${spec.version}) doesn't match runtime version (${14 /* File.Version */})`); + let nodeNames = spec.nodeNames.split(" "); + this.minRepeatTerm = nodeNames.length; + for (let i = 0; i < spec.repeatNodeCount; i++) + nodeNames.push(""); + let topTerms = Object.keys(spec.topRules).map(r => spec.topRules[r][1]); + let nodeProps = []; + for (let i = 0; i < nodeNames.length; i++) + nodeProps.push([]); + function setProp(nodeID, prop, value) { + nodeProps[nodeID].push([prop, prop.deserialize(String(value))]); + } + if (spec.nodeProps) + for (let propSpec of spec.nodeProps) { + let prop = propSpec[0]; + if (typeof prop == "string") + prop = common.NodeProp[prop]; + for (let i = 1; i < propSpec.length;) { + let next = propSpec[i++]; + if (next >= 0) { + setProp(next, prop, propSpec[i++]); + } + else { + let value = propSpec[i + -next]; + for (let j = -next; j > 0; j--) + setProp(propSpec[i++], prop, value); + i++; + } + } + } + this.nodeSet = new common.NodeSet(nodeNames.map((name, i) => common.NodeType.define({ + name: i >= this.minRepeatTerm ? undefined : name, + id: i, + props: nodeProps[i], + top: topTerms.indexOf(i) > -1, + error: i == 0, + skipped: spec.skippedNodes && spec.skippedNodes.indexOf(i) > -1 + }))); + if (spec.propSources) + this.nodeSet = this.nodeSet.extend(...spec.propSources); + this.strict = false; + this.bufferLength = common.DefaultBufferLength; + let tokenArray = decodeArray(spec.tokenData); + this.context = spec.context; + this.specializerSpecs = spec.specialized || []; + this.specialized = new Uint16Array(this.specializerSpecs.length); + for (let i = 0; i < this.specializerSpecs.length; i++) + this.specialized[i] = this.specializerSpecs[i].term; + this.specializers = this.specializerSpecs.map(getSpecializer); + this.states = decodeArray(spec.states, Uint32Array); + this.data = decodeArray(spec.stateData); + this.goto = decodeArray(spec.goto); + this.maxTerm = spec.maxTerm; + this.tokenizers = spec.tokenizers.map(value => typeof value == "number" ? new TokenGroup(tokenArray, value) : value); + this.topRules = spec.topRules; + this.dialects = spec.dialects || {}; + this.dynamicPrecedences = spec.dynamicPrecedences || null; + this.tokenPrecTable = spec.tokenPrec; + this.termNames = spec.termNames || null; + this.maxNode = this.nodeSet.types.length - 1; + this.dialect = this.parseDialect(); + this.top = this.topRules[Object.keys(this.topRules)[0]]; + } + createParse(input, fragments, ranges) { + let parse = new Parse(this, input, fragments, ranges); + for (let w of this.wrappers) + parse = w(parse, input, fragments, ranges); + return parse; + } + /** + Get a goto table entry @internal + */ + getGoto(state, term, loose = false) { + let table = this.goto; + if (term >= table[0]) + return -1; + for (let pos = table[term + 1];;) { + let groupTag = table[pos++], last = groupTag & 1; + let target = table[pos++]; + if (last && loose) + return target; + for (let end = pos + (groupTag >> 1); pos < end; pos++) + if (table[pos] == state) + return target; + if (last) + return -1; + } + } + /** + Check if this state has an action for a given terminal @internal + */ + hasAction(state, terminal) { + let data = this.data; + for (let set = 0; set < 2; set++) { + for (let i = this.stateSlot(state, set ? 2 /* ParseState.Skip */ : 1 /* ParseState.Actions */), next;; i += 3) { + if ((next = data[i]) == 65535 /* Seq.End */) { + if (data[i + 1] == 1 /* Seq.Next */) + next = data[i = pair(data, i + 2)]; + else if (data[i + 1] == 2 /* Seq.Other */) + return pair(data, i + 2); + else + break; + } + if (next == terminal || next == 0 /* Term.Err */) + return pair(data, i + 1); + } + } + return 0; + } + /** + @internal + */ + stateSlot(state, slot) { + return this.states[(state * 6 /* ParseState.Size */) + slot]; + } + /** + @internal + */ + stateFlag(state, flag) { + return (this.stateSlot(state, 0 /* ParseState.Flags */) & flag) > 0; + } + /** + @internal + */ + validAction(state, action) { + return !!this.allActions(state, a => a == action ? true : null); + } + /** + @internal + */ + allActions(state, action) { + let deflt = this.stateSlot(state, 4 /* ParseState.DefaultReduce */); + let result = deflt ? action(deflt) : undefined; + for (let i = this.stateSlot(state, 1 /* ParseState.Actions */); result == null; i += 3) { + if (this.data[i] == 65535 /* Seq.End */) { + if (this.data[i + 1] == 1 /* Seq.Next */) + i = pair(this.data, i + 2); + else + break; + } + result = action(pair(this.data, i + 1)); + } + return result; + } + /** + Get the states that can follow this one through shift actions or + goto jumps. @internal + */ + nextStates(state) { + let result = []; + for (let i = this.stateSlot(state, 1 /* ParseState.Actions */);; i += 3) { + if (this.data[i] == 65535 /* Seq.End */) { + if (this.data[i + 1] == 1 /* Seq.Next */) + i = pair(this.data, i + 2); + else + break; + } + if ((this.data[i + 2] & (65536 /* Action.ReduceFlag */ >> 16)) == 0) { + let value = this.data[i + 1]; + if (!result.some((v, i) => (i & 1) && v == value)) + result.push(this.data[i], value); + } + } + return result; + } + /** + Configure the parser. Returns a new parser instance that has the + given settings modified. Settings not provided in `config` are + kept from the original parser. + */ + configure(config) { + // Hideous reflection-based kludge to make it easy to create a + // slightly modified copy of a parser. + let copy = Object.assign(Object.create(LRParser.prototype), this); + if (config.props) + copy.nodeSet = this.nodeSet.extend(...config.props); + if (config.top) { + let info = this.topRules[config.top]; + if (!info) + throw new RangeError(`Invalid top rule name ${config.top}`); + copy.top = info; + } + if (config.tokenizers) + copy.tokenizers = this.tokenizers.map(t => { + let found = config.tokenizers.find(r => r.from == t); + return found ? found.to : t; + }); + if (config.specializers) { + copy.specializers = this.specializers.slice(); + copy.specializerSpecs = this.specializerSpecs.map((s, i) => { + let found = config.specializers.find(r => r.from == s.external); + if (!found) + return s; + let spec = Object.assign(Object.assign({}, s), { external: found.to }); + copy.specializers[i] = getSpecializer(spec); + return spec; + }); + } + if (config.contextTracker) + copy.context = config.contextTracker; + if (config.dialect) + copy.dialect = this.parseDialect(config.dialect); + if (config.strict != null) + copy.strict = config.strict; + if (config.wrap) + copy.wrappers = copy.wrappers.concat(config.wrap); + if (config.bufferLength != null) + copy.bufferLength = config.bufferLength; + return copy; + } + /** + Tells you whether any [parse wrappers](#lr.ParserConfig.wrap) + are registered for this parser. + */ + hasWrappers() { + return this.wrappers.length > 0; + } + /** + Returns the name associated with a given term. This will only + work for all terms when the parser was generated with the + `--names` option. By default, only the names of tagged terms are + stored. + */ + getName(term) { + return this.termNames ? this.termNames[term] : String(term <= this.maxNode && this.nodeSet.types[term].name || term); + } + /** + The eof term id is always allocated directly after the node + types. @internal + */ + get eofTerm() { return this.maxNode + 1; } + /** + The type of top node produced by the parser. + */ + get topNode() { return this.nodeSet.types[this.top[1]]; } + /** + @internal + */ + dynamicPrecedence(term) { + let prec = this.dynamicPrecedences; + return prec == null ? 0 : prec[term] || 0; + } + /** + @internal + */ + parseDialect(dialect) { + let values = Object.keys(this.dialects), flags = values.map(() => false); + if (dialect) + for (let part of dialect.split(" ")) { + let id = values.indexOf(part); + if (id >= 0) + flags[id] = true; + } + let disabled = null; + for (let i = 0; i < values.length; i++) + if (!flags[i]) { + for (let j = this.dialects[values[i]], id; (id = this.data[j++]) != 65535 /* Seq.End */;) + (disabled || (disabled = new Uint8Array(this.maxTerm + 1)))[id] = 1; + } + return new Dialect(dialect, flags, disabled); + } + /** + Used by the output of the parser generator. Not available to + user code. @hide + */ + static deserialize(spec) { + return new LRParser(spec); + } +} +function pair(data, off) { return data[off] | (data[off + 1] << 16); } +function findFinished(stacks) { + let best = null; + for (let stack of stacks) { + let stopped = stack.p.stoppedAt; + if ((stack.pos == stack.p.stream.end || stopped != null && stack.pos > stopped) && + stack.p.parser.stateFlag(stack.state, 2 /* StateFlag.Accepting */) && + (!best || best.score < stack.score)) + best = stack; + } + return best; +} +function getSpecializer(spec) { + if (spec.external) { + let mask = spec.extend ? 1 /* Specialize.Extend */ : 0 /* Specialize.Specialize */; + return (value, stack) => (spec.external(value, stack) << 1) | mask; + } + return spec.get; +} + +exports.ContextTracker = ContextTracker; +exports.ExternalTokenizer = ExternalTokenizer; +exports.InputStream = InputStream; +exports.LRParser = LRParser; +exports.LocalTokenGroup = LocalTokenGroup; +exports.Stack = Stack; diff --git a/node_modules/@lezer/lr/dist/index.d.cts b/node_modules/@lezer/lr/dist/index.d.cts new file mode 100644 index 00000000..71c2b1a0 --- /dev/null +++ b/node_modules/@lezer/lr/dist/index.d.cts @@ -0,0 +1,303 @@ +import { Tree, NodePropSource, ParseWrapper, Parser, NodeSet, Input, TreeFragment, PartialParse, NodeType } from '@lezer/common'; + +/** +A parse stack. These are used internally by the parser to track +parsing progress. They also provide some properties and methods +that external code such as a tokenizer can use to get information +about the parse state. +*/ +declare class Stack { + /** + The input position up to which this stack has parsed. + */ + pos: number; + /** + The stack's current [context](#lr.ContextTracker) value, if + any. Its type will depend on the context tracker's type + parameter, or it will be `null` if there is no context + tracker. + */ + get context(): any; + /** + Check if the given term would be able to be shifted (optionally + after some reductions) on this stack. This can be useful for + external tokenizers that want to make sure they only provide a + given token when it applies. + */ + canShift(term: number): boolean; + /** + Get the parser used by this stack. + */ + get parser(): LRParser; + /** + Test whether a given dialect (by numeric ID, as exported from + the terms file) is enabled. + */ + dialectEnabled(dialectID: number): boolean; + private shiftContext; + private reduceContext; + private updateContext; +} + +/** +[Tokenizers](#lr.ExternalTokenizer) interact with the input +through this interface. It presents the input as a stream of +characters, tracking lookahead and hiding the complexity of +[ranges](#common.Parser.parse^ranges) from tokenizer code. +*/ +declare class InputStream { + /** + Backup chunk + */ + private chunk2; + private chunk2Pos; + /** + The character code of the next code unit in the input, or -1 + when the stream is at the end of the input. + */ + next: number; + /** + The current position of the stream. Note that, due to parses + being able to cover non-contiguous + [ranges](#common.Parser.startParse), advancing the stream does + not always mean its position moves a single unit. + */ + pos: number; + private rangeIndex; + private range; + /** + Look at a code unit near the stream position. `.peek(0)` equals + `.next`, `.peek(-1)` gives you the previous character, and so + on. + + Note that looking around during tokenizing creates dependencies + on potentially far-away content, which may reduce the + effectiveness incremental parsing—when looking forward—or even + cause invalid reparses when looking backward more than 25 code + units, since the library does not track lookbehind. + */ + peek(offset: number): number; + /** + Accept a token. By default, the end of the token is set to the + current stream position, but you can pass an offset (relative to + the stream position) to change that. + */ + acceptToken(token: number, endOffset?: number): void; + /** + Accept a token ending at a specific given position. + */ + acceptTokenTo(token: number, endPos: number): void; + private getChunk; + private readNext; + /** + Move the stream forward N (defaults to 1) code units. Returns + the new value of [`next`](#lr.InputStream.next). + */ + advance(n?: number): number; + private setDone; +} +interface Tokenizer { +} +/** +@hide +*/ +declare class LocalTokenGroup implements Tokenizer { + readonly precTable: number; + readonly elseToken?: number | undefined; + contextual: boolean; + fallback: boolean; + extend: boolean; + readonly data: Readonly; + constructor(data: Readonly | string, precTable: number, elseToken?: number | undefined); + token(input: InputStream, stack: Stack): void; +} +interface ExternalOptions { + /** + When set to true, mark this tokenizer as depending on the + current parse stack, which prevents its result from being cached + between parser actions at the same positions. + */ + contextual?: boolean; + /** + By defaults, when a tokenizer returns a token, that prevents + tokenizers with lower precedence from even running. When + `fallback` is true, the tokenizer is allowed to run when a + previous tokenizer returned a token that didn't match any of the + current state's actions. + */ + fallback?: boolean; + /** + When set to true, tokenizing will not stop after this tokenizer + has produced a token. (But it will still fail to reach this one + if a higher-precedence tokenizer produced a token.) + */ + extend?: boolean; +} +/** +`@external tokens` declarations in the grammar should resolve to +an instance of this class. +*/ +declare class ExternalTokenizer { + /** + Create a tokenizer. The first argument is the function that, + given an input stream, scans for the types of tokens it + recognizes at the stream's position, and calls + [`acceptToken`](#lr.InputStream.acceptToken) when it finds + one. + */ + constructor( + /** + @internal + */ + token: (input: InputStream, stack: Stack) => void, options?: ExternalOptions); +} + +/** +Context trackers are used to track stateful context (such as +indentation in the Python grammar, or parent elements in the XML +grammar) needed by external tokenizers. You declare them in a +grammar file as `@context exportName from "module"`. + +Context values should be immutable, and can be updated (replaced) +on shift or reduce actions. + +The export used in a `@context` declaration should be of this +type. +*/ +declare class ContextTracker { + /** + Define a context tracker. + */ + constructor(spec: { + /** + The initial value of the context at the start of the parse. + */ + start: T; + /** + Update the context when the parser executes a + [shift](https://en.wikipedia.org/wiki/LR_parser#Shift_and_reduce_actions) + action. + */ + shift?(context: T, term: number, stack: Stack, input: InputStream): T; + /** + Update the context when the parser executes a reduce action. + */ + reduce?(context: T, term: number, stack: Stack, input: InputStream): T; + /** + Update the context when the parser reuses a node from a tree + fragment. + */ + reuse?(context: T, node: Tree, stack: Stack, input: InputStream): T; + /** + Reduce a context value to a number (for cheap storage and + comparison). Only needed for strict contexts. + */ + hash?(context: T): number; + /** + By default, nodes can only be reused during incremental + parsing if they were created in the same context as the one in + which they are reused. Set this to false to disable that + check (and the overhead of storing the hashes). + */ + strict?: boolean; + }); +} +/** +Configuration options when +[reconfiguring](#lr.LRParser.configure) a parser. +*/ +interface ParserConfig { + /** + Node prop values to add to the parser's node set. + */ + props?: readonly NodePropSource[]; + /** + The name of the `@top` declaration to parse from. If not + specified, the first top rule declaration in the grammar is + used. + */ + top?: string; + /** + A space-separated string of dialects to enable. + */ + dialect?: string; + /** + Replace the given external tokenizers with new ones. + */ + tokenizers?: { + from: ExternalTokenizer; + to: ExternalTokenizer; + }[]; + /** + Replace external specializers with new ones. + */ + specializers?: { + from: (value: string, stack: Stack) => number; + to: (value: string, stack: Stack) => number; + }[]; + /** + Replace the context tracker with a new one. + */ + contextTracker?: ContextTracker; + /** + When true, the parser will raise an exception, rather than run + its error-recovery strategies, when the input doesn't match the + grammar. + */ + strict?: boolean; + /** + Add a wrapper, which can extend parses created by this parser + with additional logic (usually used to add + [mixed-language](#common.parseMixed) parsing). + */ + wrap?: ParseWrapper; + /** + The maximum length of the TreeBuffers generated in the output + tree. Defaults to 1024. + */ + bufferLength?: number; +} +/** +Holds the parse tables for a given grammar, as generated by +`lezer-generator`, and provides [methods](#common.Parser) to parse +content with. +*/ +declare class LRParser extends Parser { + /** + The nodes used in the trees emitted by this parser. + */ + readonly nodeSet: NodeSet; + createParse(input: Input, fragments: readonly TreeFragment[], ranges: readonly { + from: number; + to: number; + }[]): PartialParse; + /** + Configure the parser. Returns a new parser instance that has the + given settings modified. Settings not provided in `config` are + kept from the original parser. + */ + configure(config: ParserConfig): LRParser; + /** + Tells you whether any [parse wrappers](#lr.ParserConfig.wrap) + are registered for this parser. + */ + hasWrappers(): boolean; + /** + Returns the name associated with a given term. This will only + work for all terms when the parser was generated with the + `--names` option. By default, only the names of tagged terms are + stored. + */ + getName(term: number): string; + /** + The type of top node produced by the parser. + */ + get topNode(): NodeType; + /** + Used by the output of the parser generator. Not available to + user code. @hide + */ + static deserialize(spec: any): LRParser; +} + +export { ContextTracker, ExternalTokenizer, InputStream, LRParser, LocalTokenGroup, ParserConfig, Stack }; diff --git a/node_modules/@lezer/lr/dist/index.d.ts b/node_modules/@lezer/lr/dist/index.d.ts new file mode 100644 index 00000000..71c2b1a0 --- /dev/null +++ b/node_modules/@lezer/lr/dist/index.d.ts @@ -0,0 +1,303 @@ +import { Tree, NodePropSource, ParseWrapper, Parser, NodeSet, Input, TreeFragment, PartialParse, NodeType } from '@lezer/common'; + +/** +A parse stack. These are used internally by the parser to track +parsing progress. They also provide some properties and methods +that external code such as a tokenizer can use to get information +about the parse state. +*/ +declare class Stack { + /** + The input position up to which this stack has parsed. + */ + pos: number; + /** + The stack's current [context](#lr.ContextTracker) value, if + any. Its type will depend on the context tracker's type + parameter, or it will be `null` if there is no context + tracker. + */ + get context(): any; + /** + Check if the given term would be able to be shifted (optionally + after some reductions) on this stack. This can be useful for + external tokenizers that want to make sure they only provide a + given token when it applies. + */ + canShift(term: number): boolean; + /** + Get the parser used by this stack. + */ + get parser(): LRParser; + /** + Test whether a given dialect (by numeric ID, as exported from + the terms file) is enabled. + */ + dialectEnabled(dialectID: number): boolean; + private shiftContext; + private reduceContext; + private updateContext; +} + +/** +[Tokenizers](#lr.ExternalTokenizer) interact with the input +through this interface. It presents the input as a stream of +characters, tracking lookahead and hiding the complexity of +[ranges](#common.Parser.parse^ranges) from tokenizer code. +*/ +declare class InputStream { + /** + Backup chunk + */ + private chunk2; + private chunk2Pos; + /** + The character code of the next code unit in the input, or -1 + when the stream is at the end of the input. + */ + next: number; + /** + The current position of the stream. Note that, due to parses + being able to cover non-contiguous + [ranges](#common.Parser.startParse), advancing the stream does + not always mean its position moves a single unit. + */ + pos: number; + private rangeIndex; + private range; + /** + Look at a code unit near the stream position. `.peek(0)` equals + `.next`, `.peek(-1)` gives you the previous character, and so + on. + + Note that looking around during tokenizing creates dependencies + on potentially far-away content, which may reduce the + effectiveness incremental parsing—when looking forward—or even + cause invalid reparses when looking backward more than 25 code + units, since the library does not track lookbehind. + */ + peek(offset: number): number; + /** + Accept a token. By default, the end of the token is set to the + current stream position, but you can pass an offset (relative to + the stream position) to change that. + */ + acceptToken(token: number, endOffset?: number): void; + /** + Accept a token ending at a specific given position. + */ + acceptTokenTo(token: number, endPos: number): void; + private getChunk; + private readNext; + /** + Move the stream forward N (defaults to 1) code units. Returns + the new value of [`next`](#lr.InputStream.next). + */ + advance(n?: number): number; + private setDone; +} +interface Tokenizer { +} +/** +@hide +*/ +declare class LocalTokenGroup implements Tokenizer { + readonly precTable: number; + readonly elseToken?: number | undefined; + contextual: boolean; + fallback: boolean; + extend: boolean; + readonly data: Readonly; + constructor(data: Readonly | string, precTable: number, elseToken?: number | undefined); + token(input: InputStream, stack: Stack): void; +} +interface ExternalOptions { + /** + When set to true, mark this tokenizer as depending on the + current parse stack, which prevents its result from being cached + between parser actions at the same positions. + */ + contextual?: boolean; + /** + By defaults, when a tokenizer returns a token, that prevents + tokenizers with lower precedence from even running. When + `fallback` is true, the tokenizer is allowed to run when a + previous tokenizer returned a token that didn't match any of the + current state's actions. + */ + fallback?: boolean; + /** + When set to true, tokenizing will not stop after this tokenizer + has produced a token. (But it will still fail to reach this one + if a higher-precedence tokenizer produced a token.) + */ + extend?: boolean; +} +/** +`@external tokens` declarations in the grammar should resolve to +an instance of this class. +*/ +declare class ExternalTokenizer { + /** + Create a tokenizer. The first argument is the function that, + given an input stream, scans for the types of tokens it + recognizes at the stream's position, and calls + [`acceptToken`](#lr.InputStream.acceptToken) when it finds + one. + */ + constructor( + /** + @internal + */ + token: (input: InputStream, stack: Stack) => void, options?: ExternalOptions); +} + +/** +Context trackers are used to track stateful context (such as +indentation in the Python grammar, or parent elements in the XML +grammar) needed by external tokenizers. You declare them in a +grammar file as `@context exportName from "module"`. + +Context values should be immutable, and can be updated (replaced) +on shift or reduce actions. + +The export used in a `@context` declaration should be of this +type. +*/ +declare class ContextTracker { + /** + Define a context tracker. + */ + constructor(spec: { + /** + The initial value of the context at the start of the parse. + */ + start: T; + /** + Update the context when the parser executes a + [shift](https://en.wikipedia.org/wiki/LR_parser#Shift_and_reduce_actions) + action. + */ + shift?(context: T, term: number, stack: Stack, input: InputStream): T; + /** + Update the context when the parser executes a reduce action. + */ + reduce?(context: T, term: number, stack: Stack, input: InputStream): T; + /** + Update the context when the parser reuses a node from a tree + fragment. + */ + reuse?(context: T, node: Tree, stack: Stack, input: InputStream): T; + /** + Reduce a context value to a number (for cheap storage and + comparison). Only needed for strict contexts. + */ + hash?(context: T): number; + /** + By default, nodes can only be reused during incremental + parsing if they were created in the same context as the one in + which they are reused. Set this to false to disable that + check (and the overhead of storing the hashes). + */ + strict?: boolean; + }); +} +/** +Configuration options when +[reconfiguring](#lr.LRParser.configure) a parser. +*/ +interface ParserConfig { + /** + Node prop values to add to the parser's node set. + */ + props?: readonly NodePropSource[]; + /** + The name of the `@top` declaration to parse from. If not + specified, the first top rule declaration in the grammar is + used. + */ + top?: string; + /** + A space-separated string of dialects to enable. + */ + dialect?: string; + /** + Replace the given external tokenizers with new ones. + */ + tokenizers?: { + from: ExternalTokenizer; + to: ExternalTokenizer; + }[]; + /** + Replace external specializers with new ones. + */ + specializers?: { + from: (value: string, stack: Stack) => number; + to: (value: string, stack: Stack) => number; + }[]; + /** + Replace the context tracker with a new one. + */ + contextTracker?: ContextTracker; + /** + When true, the parser will raise an exception, rather than run + its error-recovery strategies, when the input doesn't match the + grammar. + */ + strict?: boolean; + /** + Add a wrapper, which can extend parses created by this parser + with additional logic (usually used to add + [mixed-language](#common.parseMixed) parsing). + */ + wrap?: ParseWrapper; + /** + The maximum length of the TreeBuffers generated in the output + tree. Defaults to 1024. + */ + bufferLength?: number; +} +/** +Holds the parse tables for a given grammar, as generated by +`lezer-generator`, and provides [methods](#common.Parser) to parse +content with. +*/ +declare class LRParser extends Parser { + /** + The nodes used in the trees emitted by this parser. + */ + readonly nodeSet: NodeSet; + createParse(input: Input, fragments: readonly TreeFragment[], ranges: readonly { + from: number; + to: number; + }[]): PartialParse; + /** + Configure the parser. Returns a new parser instance that has the + given settings modified. Settings not provided in `config` are + kept from the original parser. + */ + configure(config: ParserConfig): LRParser; + /** + Tells you whether any [parse wrappers](#lr.ParserConfig.wrap) + are registered for this parser. + */ + hasWrappers(): boolean; + /** + Returns the name associated with a given term. This will only + work for all terms when the parser was generated with the + `--names` option. By default, only the names of tagged terms are + stored. + */ + getName(term: number): string; + /** + The type of top node produced by the parser. + */ + get topNode(): NodeType; + /** + Used by the output of the parser generator. Not available to + user code. @hide + */ + static deserialize(spec: any): LRParser; +} + +export { ContextTracker, ExternalTokenizer, InputStream, LRParser, LocalTokenGroup, ParserConfig, Stack }; diff --git a/node_modules/@lezer/lr/dist/index.js b/node_modules/@lezer/lr/dist/index.js new file mode 100644 index 00000000..8cb0185a --- /dev/null +++ b/node_modules/@lezer/lr/dist/index.js @@ -0,0 +1,1883 @@ +import { Parser, NodeProp, NodeSet, NodeType, DefaultBufferLength, Tree, IterMode } from '@lezer/common'; + +/** +A parse stack. These are used internally by the parser to track +parsing progress. They also provide some properties and methods +that external code such as a tokenizer can use to get information +about the parse state. +*/ +class Stack { + /** + @internal + */ + constructor( + /** + The parse that this stack is part of @internal + */ + p, + /** + Holds state, input pos, buffer index triplets for all but the + top state @internal + */ + stack, + /** + The current parse state @internal + */ + state, + // The position at which the next reduce should take place. This + // can be less than `this.pos` when skipped expressions have been + // added to the stack (which should be moved outside of the next + // reduction) + /** + @internal + */ + reducePos, + /** + The input position up to which this stack has parsed. + */ + pos, + /** + The dynamic score of the stack, including dynamic precedence + and error-recovery penalties + @internal + */ + score, + // The output buffer. Holds (type, start, end, size) quads + // representing nodes created by the parser, where `size` is + // amount of buffer array entries covered by this node. + /** + @internal + */ + buffer, + // The base offset of the buffer. When stacks are split, the split + // instance shared the buffer history with its parent up to + // `bufferBase`, which is the absolute offset (including the + // offset of previous splits) into the buffer at which this stack + // starts writing. + /** + @internal + */ + bufferBase, + /** + @internal + */ + curContext, + /** + @internal + */ + lookAhead = 0, + // A parent stack from which this was split off, if any. This is + // set up so that it always points to a stack that has some + // additional buffer content, never to a stack with an equal + // `bufferBase`. + /** + @internal + */ + parent) { + this.p = p; + this.stack = stack; + this.state = state; + this.reducePos = reducePos; + this.pos = pos; + this.score = score; + this.buffer = buffer; + this.bufferBase = bufferBase; + this.curContext = curContext; + this.lookAhead = lookAhead; + this.parent = parent; + } + /** + @internal + */ + toString() { + return `[${this.stack.filter((_, i) => i % 3 == 0).concat(this.state)}]@${this.pos}${this.score ? "!" + this.score : ""}`; + } + // Start an empty stack + /** + @internal + */ + static start(p, state, pos = 0) { + let cx = p.parser.context; + return new Stack(p, [], state, pos, pos, 0, [], 0, cx ? new StackContext(cx, cx.start) : null, 0, null); + } + /** + The stack's current [context](#lr.ContextTracker) value, if + any. Its type will depend on the context tracker's type + parameter, or it will be `null` if there is no context + tracker. + */ + get context() { return this.curContext ? this.curContext.context : null; } + // Push a state onto the stack, tracking its start position as well + // as the buffer base at that point. + /** + @internal + */ + pushState(state, start) { + this.stack.push(this.state, start, this.bufferBase + this.buffer.length); + this.state = state; + } + // Apply a reduce action + /** + @internal + */ + reduce(action) { + var _a; + let depth = action >> 19 /* Action.ReduceDepthShift */, type = action & 65535 /* Action.ValueMask */; + let { parser } = this.p; + let lookaheadRecord = this.reducePos < this.pos - 25 /* Lookahead.Margin */; + if (lookaheadRecord) + this.setLookAhead(this.pos); + let dPrec = parser.dynamicPrecedence(type); + if (dPrec) + this.score += dPrec; + if (depth == 0) { + this.pushState(parser.getGoto(this.state, type, true), this.reducePos); + // Zero-depth reductions are a special case—they add stuff to + // the stack without popping anything off. + if (type < parser.minRepeatTerm) + this.storeNode(type, this.reducePos, this.reducePos, lookaheadRecord ? 8 : 4, true); + this.reduceContext(type, this.reducePos); + return; + } + // Find the base index into `this.stack`, content after which will + // be dropped. Note that with `StayFlag` reductions we need to + // consume two extra frames (the dummy parent node for the skipped + // expression and the state that we'll be staying in, which should + // be moved to `this.state`). + let base = this.stack.length - ((depth - 1) * 3) - (action & 262144 /* Action.StayFlag */ ? 6 : 0); + let start = base ? this.stack[base - 2] : this.p.ranges[0].from, size = this.reducePos - start; + // This is a kludge to try and detect overly deep left-associative + // trees, which will not increase the parse stack depth and thus + // won't be caught by the regular stack-depth limit check. + if (size >= 2000 /* Recover.MinBigReduction */ && !((_a = this.p.parser.nodeSet.types[type]) === null || _a === void 0 ? void 0 : _a.isAnonymous)) { + if (start == this.p.lastBigReductionStart) { + this.p.bigReductionCount++; + this.p.lastBigReductionSize = size; + } + else if (this.p.lastBigReductionSize < size) { + this.p.bigReductionCount = 1; + this.p.lastBigReductionStart = start; + this.p.lastBigReductionSize = size; + } + } + let bufferBase = base ? this.stack[base - 1] : 0, count = this.bufferBase + this.buffer.length - bufferBase; + // Store normal terms or `R -> R R` repeat reductions + if (type < parser.minRepeatTerm || (action & 131072 /* Action.RepeatFlag */)) { + let pos = parser.stateFlag(this.state, 1 /* StateFlag.Skipped */) ? this.pos : this.reducePos; + this.storeNode(type, start, pos, count + 4, true); + } + if (action & 262144 /* Action.StayFlag */) { + this.state = this.stack[base]; + } + else { + let baseStateID = this.stack[base - 3]; + this.state = parser.getGoto(baseStateID, type, true); + } + while (this.stack.length > base) + this.stack.pop(); + this.reduceContext(type, start); + } + // Shift a value into the buffer + /** + @internal + */ + storeNode(term, start, end, size = 4, mustSink = false) { + if (term == 0 /* Term.Err */ && + (!this.stack.length || this.stack[this.stack.length - 1] < this.buffer.length + this.bufferBase)) { + // Try to omit/merge adjacent error nodes + let cur = this, top = this.buffer.length; + if (top == 0 && cur.parent) { + top = cur.bufferBase - cur.parent.bufferBase; + cur = cur.parent; + } + if (top > 0 && cur.buffer[top - 4] == 0 /* Term.Err */ && cur.buffer[top - 1] > -1) { + if (start == end) + return; + if (cur.buffer[top - 2] >= start) { + cur.buffer[top - 2] = end; + return; + } + } + } + if (!mustSink || this.pos == end) { // Simple case, just append + this.buffer.push(term, start, end, size); + } + else { // There may be skipped nodes that have to be moved forward + let index = this.buffer.length; + if (index > 0 && this.buffer[index - 4] != 0 /* Term.Err */) { + let mustMove = false; + for (let scan = index; scan > 0 && this.buffer[scan - 2] > end; scan -= 4) { + if (this.buffer[scan - 1] >= 0) { + mustMove = true; + break; + } + } + if (mustMove) + while (index > 0 && this.buffer[index - 2] > end) { + // Move this record forward + this.buffer[index] = this.buffer[index - 4]; + this.buffer[index + 1] = this.buffer[index - 3]; + this.buffer[index + 2] = this.buffer[index - 2]; + this.buffer[index + 3] = this.buffer[index - 1]; + index -= 4; + if (size > 4) + size -= 4; + } + } + this.buffer[index] = term; + this.buffer[index + 1] = start; + this.buffer[index + 2] = end; + this.buffer[index + 3] = size; + } + } + // Apply a shift action + /** + @internal + */ + shift(action, type, start, end) { + if (action & 131072 /* Action.GotoFlag */) { + this.pushState(action & 65535 /* Action.ValueMask */, this.pos); + } + else if ((action & 262144 /* Action.StayFlag */) == 0) { // Regular shift + let nextState = action, { parser } = this.p; + if (end > this.pos || type <= parser.maxNode) { + this.pos = end; + if (!parser.stateFlag(nextState, 1 /* StateFlag.Skipped */)) + this.reducePos = end; + } + this.pushState(nextState, start); + this.shiftContext(type, start); + if (type <= parser.maxNode) + this.buffer.push(type, start, end, 4); + } + else { // Shift-and-stay, which means this is a skipped token + this.pos = end; + this.shiftContext(type, start); + if (type <= this.p.parser.maxNode) + this.buffer.push(type, start, end, 4); + } + } + // Apply an action + /** + @internal + */ + apply(action, next, nextStart, nextEnd) { + if (action & 65536 /* Action.ReduceFlag */) + this.reduce(action); + else + this.shift(action, next, nextStart, nextEnd); + } + // Add a prebuilt (reused) node into the buffer. + /** + @internal + */ + useNode(value, next) { + let index = this.p.reused.length - 1; + if (index < 0 || this.p.reused[index] != value) { + this.p.reused.push(value); + index++; + } + let start = this.pos; + this.reducePos = this.pos = start + value.length; + this.pushState(next, start); + this.buffer.push(index, start, this.reducePos, -1 /* size == -1 means this is a reused value */); + if (this.curContext) + this.updateContext(this.curContext.tracker.reuse(this.curContext.context, value, this, this.p.stream.reset(this.pos - value.length))); + } + // Split the stack. Due to the buffer sharing and the fact + // that `this.stack` tends to stay quite shallow, this isn't very + // expensive. + /** + @internal + */ + split() { + let parent = this; + let off = parent.buffer.length; + // Because the top of the buffer (after this.pos) may be mutated + // to reorder reductions and skipped tokens, and shared buffers + // should be immutable, this copies any outstanding skipped tokens + // to the new buffer, and puts the base pointer before them. + while (off > 0 && parent.buffer[off - 2] > parent.reducePos) + off -= 4; + let buffer = parent.buffer.slice(off), base = parent.bufferBase + off; + // Make sure parent points to an actual parent with content, if there is such a parent. + while (parent && base == parent.bufferBase) + parent = parent.parent; + return new Stack(this.p, this.stack.slice(), this.state, this.reducePos, this.pos, this.score, buffer, base, this.curContext, this.lookAhead, parent); + } + // Try to recover from an error by 'deleting' (ignoring) one token. + /** + @internal + */ + recoverByDelete(next, nextEnd) { + let isNode = next <= this.p.parser.maxNode; + if (isNode) + this.storeNode(next, this.pos, nextEnd, 4); + this.storeNode(0 /* Term.Err */, this.pos, nextEnd, isNode ? 8 : 4); + this.pos = this.reducePos = nextEnd; + this.score -= 190 /* Recover.Delete */; + } + /** + Check if the given term would be able to be shifted (optionally + after some reductions) on this stack. This can be useful for + external tokenizers that want to make sure they only provide a + given token when it applies. + */ + canShift(term) { + for (let sim = new SimulatedStack(this);;) { + let action = this.p.parser.stateSlot(sim.state, 4 /* ParseState.DefaultReduce */) || this.p.parser.hasAction(sim.state, term); + if (action == 0) + return false; + if ((action & 65536 /* Action.ReduceFlag */) == 0) + return true; + sim.reduce(action); + } + } + // Apply up to Recover.MaxNext recovery actions that conceptually + // inserts some missing token or rule. + /** + @internal + */ + recoverByInsert(next) { + if (this.stack.length >= 300 /* Recover.MaxInsertStackDepth */) + return []; + let nextStates = this.p.parser.nextStates(this.state); + if (nextStates.length > 4 /* Recover.MaxNext */ << 1 || this.stack.length >= 120 /* Recover.DampenInsertStackDepth */) { + let best = []; + for (let i = 0, s; i < nextStates.length; i += 2) { + if ((s = nextStates[i + 1]) != this.state && this.p.parser.hasAction(s, next)) + best.push(nextStates[i], s); + } + if (this.stack.length < 120 /* Recover.DampenInsertStackDepth */) + for (let i = 0; best.length < 4 /* Recover.MaxNext */ << 1 && i < nextStates.length; i += 2) { + let s = nextStates[i + 1]; + if (!best.some((v, i) => (i & 1) && v == s)) + best.push(nextStates[i], s); + } + nextStates = best; + } + let result = []; + for (let i = 0; i < nextStates.length && result.length < 4 /* Recover.MaxNext */; i += 2) { + let s = nextStates[i + 1]; + if (s == this.state) + continue; + let stack = this.split(); + stack.pushState(s, this.pos); + stack.storeNode(0 /* Term.Err */, stack.pos, stack.pos, 4, true); + stack.shiftContext(nextStates[i], this.pos); + stack.reducePos = this.pos; + stack.score -= 200 /* Recover.Insert */; + result.push(stack); + } + return result; + } + // Force a reduce, if possible. Return false if that can't + // be done. + /** + @internal + */ + forceReduce() { + let { parser } = this.p; + let reduce = parser.stateSlot(this.state, 5 /* ParseState.ForcedReduce */); + if ((reduce & 65536 /* Action.ReduceFlag */) == 0) + return false; + if (!parser.validAction(this.state, reduce)) { + let depth = reduce >> 19 /* Action.ReduceDepthShift */, term = reduce & 65535 /* Action.ValueMask */; + let target = this.stack.length - depth * 3; + if (target < 0 || parser.getGoto(this.stack[target], term, false) < 0) { + let backup = this.findForcedReduction(); + if (backup == null) + return false; + reduce = backup; + } + this.storeNode(0 /* Term.Err */, this.pos, this.pos, 4, true); + this.score -= 100 /* Recover.Reduce */; + } + this.reducePos = this.pos; + this.reduce(reduce); + return true; + } + /** + Try to scan through the automaton to find some kind of reduction + that can be applied. Used when the regular ForcedReduce field + isn't a valid action. @internal + */ + findForcedReduction() { + let { parser } = this.p, seen = []; + let explore = (state, depth) => { + if (seen.includes(state)) + return; + seen.push(state); + return parser.allActions(state, (action) => { + if (action & (262144 /* Action.StayFlag */ | 131072 /* Action.GotoFlag */)) ; + else if (action & 65536 /* Action.ReduceFlag */) { + let rDepth = (action >> 19 /* Action.ReduceDepthShift */) - depth; + if (rDepth > 1) { + let term = action & 65535 /* Action.ValueMask */, target = this.stack.length - rDepth * 3; + if (target >= 0 && parser.getGoto(this.stack[target], term, false) >= 0) + return (rDepth << 19 /* Action.ReduceDepthShift */) | 65536 /* Action.ReduceFlag */ | term; + } + } + else { + let found = explore(action, depth + 1); + if (found != null) + return found; + } + }); + }; + return explore(this.state, 0); + } + /** + @internal + */ + forceAll() { + while (!this.p.parser.stateFlag(this.state, 2 /* StateFlag.Accepting */)) { + if (!this.forceReduce()) { + this.storeNode(0 /* Term.Err */, this.pos, this.pos, 4, true); + break; + } + } + return this; + } + /** + Check whether this state has no further actions (assumed to be a direct descendant of the + top state, since any other states must be able to continue + somehow). @internal + */ + get deadEnd() { + if (this.stack.length != 3) + return false; + let { parser } = this.p; + return parser.data[parser.stateSlot(this.state, 1 /* ParseState.Actions */)] == 65535 /* Seq.End */ && + !parser.stateSlot(this.state, 4 /* ParseState.DefaultReduce */); + } + /** + Restart the stack (put it back in its start state). Only safe + when this.stack.length == 3 (state is directly below the top + state). @internal + */ + restart() { + this.storeNode(0 /* Term.Err */, this.pos, this.pos, 4, true); + this.state = this.stack[0]; + this.stack.length = 0; + } + /** + @internal + */ + sameState(other) { + if (this.state != other.state || this.stack.length != other.stack.length) + return false; + for (let i = 0; i < this.stack.length; i += 3) + if (this.stack[i] != other.stack[i]) + return false; + return true; + } + /** + Get the parser used by this stack. + */ + get parser() { return this.p.parser; } + /** + Test whether a given dialect (by numeric ID, as exported from + the terms file) is enabled. + */ + dialectEnabled(dialectID) { return this.p.parser.dialect.flags[dialectID]; } + shiftContext(term, start) { + if (this.curContext) + this.updateContext(this.curContext.tracker.shift(this.curContext.context, term, this, this.p.stream.reset(start))); + } + reduceContext(term, start) { + if (this.curContext) + this.updateContext(this.curContext.tracker.reduce(this.curContext.context, term, this, this.p.stream.reset(start))); + } + /** + @internal + */ + emitContext() { + let last = this.buffer.length - 1; + if (last < 0 || this.buffer[last] != -3) + this.buffer.push(this.curContext.hash, this.pos, this.pos, -3); + } + /** + @internal + */ + emitLookAhead() { + let last = this.buffer.length - 1; + if (last < 0 || this.buffer[last] != -4) + this.buffer.push(this.lookAhead, this.pos, this.pos, -4); + } + updateContext(context) { + if (context != this.curContext.context) { + let newCx = new StackContext(this.curContext.tracker, context); + if (newCx.hash != this.curContext.hash) + this.emitContext(); + this.curContext = newCx; + } + } + /** + @internal + */ + setLookAhead(lookAhead) { + if (lookAhead > this.lookAhead) { + this.emitLookAhead(); + this.lookAhead = lookAhead; + } + } + /** + @internal + */ + close() { + if (this.curContext && this.curContext.tracker.strict) + this.emitContext(); + if (this.lookAhead > 0) + this.emitLookAhead(); + } +} +class StackContext { + constructor(tracker, context) { + this.tracker = tracker; + this.context = context; + this.hash = tracker.strict ? tracker.hash(context) : 0; + } +} +// Used to cheaply run some reductions to scan ahead without mutating +// an entire stack +class SimulatedStack { + constructor(start) { + this.start = start; + this.state = start.state; + this.stack = start.stack; + this.base = this.stack.length; + } + reduce(action) { + let term = action & 65535 /* Action.ValueMask */, depth = action >> 19 /* Action.ReduceDepthShift */; + if (depth == 0) { + if (this.stack == this.start.stack) + this.stack = this.stack.slice(); + this.stack.push(this.state, 0, 0); + this.base += 3; + } + else { + this.base -= (depth - 1) * 3; + } + let goto = this.start.p.parser.getGoto(this.stack[this.base - 3], term, true); + this.state = goto; + } +} +// This is given to `Tree.build` to build a buffer, and encapsulates +// the parent-stack-walking necessary to read the nodes. +class StackBufferCursor { + constructor(stack, pos, index) { + this.stack = stack; + this.pos = pos; + this.index = index; + this.buffer = stack.buffer; + if (this.index == 0) + this.maybeNext(); + } + static create(stack, pos = stack.bufferBase + stack.buffer.length) { + return new StackBufferCursor(stack, pos, pos - stack.bufferBase); + } + maybeNext() { + let next = this.stack.parent; + if (next != null) { + this.index = this.stack.bufferBase - next.bufferBase; + this.stack = next; + this.buffer = next.buffer; + } + } + get id() { return this.buffer[this.index - 4]; } + get start() { return this.buffer[this.index - 3]; } + get end() { return this.buffer[this.index - 2]; } + get size() { return this.buffer[this.index - 1]; } + next() { + this.index -= 4; + this.pos -= 4; + if (this.index == 0) + this.maybeNext(); + } + fork() { + return new StackBufferCursor(this.stack, this.pos, this.index); + } +} + +// See lezer-generator/src/encode.ts for comments about the encoding +// used here +function decodeArray(input, Type = Uint16Array) { + if (typeof input != "string") + return input; + let array = null; + for (let pos = 0, out = 0; pos < input.length;) { + let value = 0; + for (;;) { + let next = input.charCodeAt(pos++), stop = false; + if (next == 126 /* Encode.BigValCode */) { + value = 65535 /* Encode.BigVal */; + break; + } + if (next >= 92 /* Encode.Gap2 */) + next--; + if (next >= 34 /* Encode.Gap1 */) + next--; + let digit = next - 32 /* Encode.Start */; + if (digit >= 46 /* Encode.Base */) { + digit -= 46 /* Encode.Base */; + stop = true; + } + value += digit; + if (stop) + break; + value *= 46 /* Encode.Base */; + } + if (array) + array[out++] = value; + else + array = new Type(value); + } + return array; +} + +class CachedToken { + constructor() { + this.start = -1; + this.value = -1; + this.end = -1; + this.extended = -1; + this.lookAhead = 0; + this.mask = 0; + this.context = 0; + } +} +const nullToken = new CachedToken; +/** +[Tokenizers](#lr.ExternalTokenizer) interact with the input +through this interface. It presents the input as a stream of +characters, tracking lookahead and hiding the complexity of +[ranges](#common.Parser.parse^ranges) from tokenizer code. +*/ +class InputStream { + /** + @internal + */ + constructor( + /** + @internal + */ + input, + /** + @internal + */ + ranges) { + this.input = input; + this.ranges = ranges; + /** + @internal + */ + this.chunk = ""; + /** + @internal + */ + this.chunkOff = 0; + /** + Backup chunk + */ + this.chunk2 = ""; + this.chunk2Pos = 0; + /** + The character code of the next code unit in the input, or -1 + when the stream is at the end of the input. + */ + this.next = -1; + /** + @internal + */ + this.token = nullToken; + this.rangeIndex = 0; + this.pos = this.chunkPos = ranges[0].from; + this.range = ranges[0]; + this.end = ranges[ranges.length - 1].to; + this.readNext(); + } + /** + @internal + */ + resolveOffset(offset, assoc) { + let range = this.range, index = this.rangeIndex; + let pos = this.pos + offset; + while (pos < range.from) { + if (!index) + return null; + let next = this.ranges[--index]; + pos -= range.from - next.to; + range = next; + } + while (assoc < 0 ? pos > range.to : pos >= range.to) { + if (index == this.ranges.length - 1) + return null; + let next = this.ranges[++index]; + pos += next.from - range.to; + range = next; + } + return pos; + } + /** + @internal + */ + clipPos(pos) { + if (pos >= this.range.from && pos < this.range.to) + return pos; + for (let range of this.ranges) + if (range.to > pos) + return Math.max(pos, range.from); + return this.end; + } + /** + Look at a code unit near the stream position. `.peek(0)` equals + `.next`, `.peek(-1)` gives you the previous character, and so + on. + + Note that looking around during tokenizing creates dependencies + on potentially far-away content, which may reduce the + effectiveness incremental parsing—when looking forward—or even + cause invalid reparses when looking backward more than 25 code + units, since the library does not track lookbehind. + */ + peek(offset) { + let idx = this.chunkOff + offset, pos, result; + if (idx >= 0 && idx < this.chunk.length) { + pos = this.pos + offset; + result = this.chunk.charCodeAt(idx); + } + else { + let resolved = this.resolveOffset(offset, 1); + if (resolved == null) + return -1; + pos = resolved; + if (pos >= this.chunk2Pos && pos < this.chunk2Pos + this.chunk2.length) { + result = this.chunk2.charCodeAt(pos - this.chunk2Pos); + } + else { + let i = this.rangeIndex, range = this.range; + while (range.to <= pos) + range = this.ranges[++i]; + this.chunk2 = this.input.chunk(this.chunk2Pos = pos); + if (pos + this.chunk2.length > range.to) + this.chunk2 = this.chunk2.slice(0, range.to - pos); + result = this.chunk2.charCodeAt(0); + } + } + if (pos >= this.token.lookAhead) + this.token.lookAhead = pos + 1; + return result; + } + /** + Accept a token. By default, the end of the token is set to the + current stream position, but you can pass an offset (relative to + the stream position) to change that. + */ + acceptToken(token, endOffset = 0) { + let end = endOffset ? this.resolveOffset(endOffset, -1) : this.pos; + if (end == null || end < this.token.start) + throw new RangeError("Token end out of bounds"); + this.token.value = token; + this.token.end = end; + } + /** + Accept a token ending at a specific given position. + */ + acceptTokenTo(token, endPos) { + this.token.value = token; + this.token.end = endPos; + } + getChunk() { + if (this.pos >= this.chunk2Pos && this.pos < this.chunk2Pos + this.chunk2.length) { + let { chunk, chunkPos } = this; + this.chunk = this.chunk2; + this.chunkPos = this.chunk2Pos; + this.chunk2 = chunk; + this.chunk2Pos = chunkPos; + this.chunkOff = this.pos - this.chunkPos; + } + else { + this.chunk2 = this.chunk; + this.chunk2Pos = this.chunkPos; + let nextChunk = this.input.chunk(this.pos); + let end = this.pos + nextChunk.length; + this.chunk = end > this.range.to ? nextChunk.slice(0, this.range.to - this.pos) : nextChunk; + this.chunkPos = this.pos; + this.chunkOff = 0; + } + } + readNext() { + if (this.chunkOff >= this.chunk.length) { + this.getChunk(); + if (this.chunkOff == this.chunk.length) + return this.next = -1; + } + return this.next = this.chunk.charCodeAt(this.chunkOff); + } + /** + Move the stream forward N (defaults to 1) code units. Returns + the new value of [`next`](#lr.InputStream.next). + */ + advance(n = 1) { + this.chunkOff += n; + while (this.pos + n >= this.range.to) { + if (this.rangeIndex == this.ranges.length - 1) + return this.setDone(); + n -= this.range.to - this.pos; + this.range = this.ranges[++this.rangeIndex]; + this.pos = this.range.from; + } + this.pos += n; + if (this.pos >= this.token.lookAhead) + this.token.lookAhead = this.pos + 1; + return this.readNext(); + } + setDone() { + this.pos = this.chunkPos = this.end; + this.range = this.ranges[this.rangeIndex = this.ranges.length - 1]; + this.chunk = ""; + return this.next = -1; + } + /** + @internal + */ + reset(pos, token) { + if (token) { + this.token = token; + token.start = pos; + token.lookAhead = pos + 1; + token.value = token.extended = -1; + } + else { + this.token = nullToken; + } + if (this.pos != pos) { + this.pos = pos; + if (pos == this.end) { + this.setDone(); + return this; + } + while (pos < this.range.from) + this.range = this.ranges[--this.rangeIndex]; + while (pos >= this.range.to) + this.range = this.ranges[++this.rangeIndex]; + if (pos >= this.chunkPos && pos < this.chunkPos + this.chunk.length) { + this.chunkOff = pos - this.chunkPos; + } + else { + this.chunk = ""; + this.chunkOff = 0; + } + this.readNext(); + } + return this; + } + /** + @internal + */ + read(from, to) { + if (from >= this.chunkPos && to <= this.chunkPos + this.chunk.length) + return this.chunk.slice(from - this.chunkPos, to - this.chunkPos); + if (from >= this.chunk2Pos && to <= this.chunk2Pos + this.chunk2.length) + return this.chunk2.slice(from - this.chunk2Pos, to - this.chunk2Pos); + if (from >= this.range.from && to <= this.range.to) + return this.input.read(from, to); + let result = ""; + for (let r of this.ranges) { + if (r.from >= to) + break; + if (r.to > from) + result += this.input.read(Math.max(r.from, from), Math.min(r.to, to)); + } + return result; + } +} +/** +@internal +*/ +class TokenGroup { + constructor(data, id) { + this.data = data; + this.id = id; + } + token(input, stack) { + let { parser } = stack.p; + readToken(this.data, input, stack, this.id, parser.data, parser.tokenPrecTable); + } +} +TokenGroup.prototype.contextual = TokenGroup.prototype.fallback = TokenGroup.prototype.extend = false; +/** +@hide +*/ +class LocalTokenGroup { + constructor(data, precTable, elseToken) { + this.precTable = precTable; + this.elseToken = elseToken; + this.data = typeof data == "string" ? decodeArray(data) : data; + } + token(input, stack) { + let start = input.pos, skipped = 0; + for (;;) { + let atEof = input.next < 0, nextPos = input.resolveOffset(1, 1); + readToken(this.data, input, stack, 0, this.data, this.precTable); + if (input.token.value > -1) + break; + if (this.elseToken == null) + return; + if (!atEof) + skipped++; + if (nextPos == null) + break; + input.reset(nextPos, input.token); + } + if (skipped) { + input.reset(start, input.token); + input.acceptToken(this.elseToken, skipped); + } + } +} +LocalTokenGroup.prototype.contextual = TokenGroup.prototype.fallback = TokenGroup.prototype.extend = false; +/** +`@external tokens` declarations in the grammar should resolve to +an instance of this class. +*/ +class ExternalTokenizer { + /** + Create a tokenizer. The first argument is the function that, + given an input stream, scans for the types of tokens it + recognizes at the stream's position, and calls + [`acceptToken`](#lr.InputStream.acceptToken) when it finds + one. + */ + constructor( + /** + @internal + */ + token, options = {}) { + this.token = token; + this.contextual = !!options.contextual; + this.fallback = !!options.fallback; + this.extend = !!options.extend; + } +} +// Tokenizer data is stored a big uint16 array containing, for each +// state: +// +// - A group bitmask, indicating what token groups are reachable from +// this state, so that paths that can only lead to tokens not in +// any of the current groups can be cut off early. +// +// - The position of the end of the state's sequence of accepting +// tokens +// +// - The number of outgoing edges for the state +// +// - The accepting tokens, as (token id, group mask) pairs +// +// - The outgoing edges, as (start character, end character, state +// index) triples, with end character being exclusive +// +// This function interprets that data, running through a stream as +// long as new states with the a matching group mask can be reached, +// and updating `input.token` when it matches a token. +function readToken(data, input, stack, group, precTable, precOffset) { + let state = 0, groupMask = 1 << group, { dialect } = stack.p.parser; + scan: for (;;) { + if ((groupMask & data[state]) == 0) + break; + let accEnd = data[state + 1]; + // Check whether this state can lead to a token in the current group + // Accept tokens in this state, possibly overwriting + // lower-precedence / shorter tokens + for (let i = state + 3; i < accEnd; i += 2) + if ((data[i + 1] & groupMask) > 0) { + let term = data[i]; + if (dialect.allows(term) && + (input.token.value == -1 || input.token.value == term || + overrides(term, input.token.value, precTable, precOffset))) { + input.acceptToken(term); + break; + } + } + let next = input.next, low = 0, high = data[state + 2]; + // Special case for EOF + if (input.next < 0 && high > low && data[accEnd + high * 3 - 3] == 65535 /* Seq.End */) { + state = data[accEnd + high * 3 - 1]; + continue scan; + } + // Do a binary search on the state's edges + for (; low < high;) { + let mid = (low + high) >> 1; + let index = accEnd + mid + (mid << 1); + let from = data[index], to = data[index + 1] || 0x10000; + if (next < from) + high = mid; + else if (next >= to) + low = mid + 1; + else { + state = data[index + 2]; + input.advance(); + continue scan; + } + } + break; + } +} +function findOffset(data, start, term) { + for (let i = start, next; (next = data[i]) != 65535 /* Seq.End */; i++) + if (next == term) + return i - start; + return -1; +} +function overrides(token, prev, tableData, tableOffset) { + let iPrev = findOffset(tableData, tableOffset, prev); + return iPrev < 0 || findOffset(tableData, tableOffset, token) < iPrev; +} + +// Environment variable used to control console output +const verbose = typeof process != "undefined" && process.env && /\bparse\b/.test(process.env.LOG); +let stackIDs = null; +function cutAt(tree, pos, side) { + let cursor = tree.cursor(IterMode.IncludeAnonymous); + cursor.moveTo(pos); + for (;;) { + if (!(side < 0 ? cursor.childBefore(pos) : cursor.childAfter(pos))) + for (;;) { + if ((side < 0 ? cursor.to < pos : cursor.from > pos) && !cursor.type.isError) + return side < 0 ? Math.max(0, Math.min(cursor.to - 1, pos - 25 /* Lookahead.Margin */)) + : Math.min(tree.length, Math.max(cursor.from + 1, pos + 25 /* Lookahead.Margin */)); + if (side < 0 ? cursor.prevSibling() : cursor.nextSibling()) + break; + if (!cursor.parent()) + return side < 0 ? 0 : tree.length; + } + } +} +class FragmentCursor { + constructor(fragments, nodeSet) { + this.fragments = fragments; + this.nodeSet = nodeSet; + this.i = 0; + this.fragment = null; + this.safeFrom = -1; + this.safeTo = -1; + this.trees = []; + this.start = []; + this.index = []; + this.nextFragment(); + } + nextFragment() { + let fr = this.fragment = this.i == this.fragments.length ? null : this.fragments[this.i++]; + if (fr) { + this.safeFrom = fr.openStart ? cutAt(fr.tree, fr.from + fr.offset, 1) - fr.offset : fr.from; + this.safeTo = fr.openEnd ? cutAt(fr.tree, fr.to + fr.offset, -1) - fr.offset : fr.to; + while (this.trees.length) { + this.trees.pop(); + this.start.pop(); + this.index.pop(); + } + this.trees.push(fr.tree); + this.start.push(-fr.offset); + this.index.push(0); + this.nextStart = this.safeFrom; + } + else { + this.nextStart = 1e9; + } + } + // `pos` must be >= any previously given `pos` for this cursor + nodeAt(pos) { + if (pos < this.nextStart) + return null; + while (this.fragment && this.safeTo <= pos) + this.nextFragment(); + if (!this.fragment) + return null; + for (;;) { + let last = this.trees.length - 1; + if (last < 0) { // End of tree + this.nextFragment(); + return null; + } + let top = this.trees[last], index = this.index[last]; + if (index == top.children.length) { + this.trees.pop(); + this.start.pop(); + this.index.pop(); + continue; + } + let next = top.children[index]; + let start = this.start[last] + top.positions[index]; + if (start > pos) { + this.nextStart = start; + return null; + } + if (next instanceof Tree) { + if (start == pos) { + if (start < this.safeFrom) + return null; + let end = start + next.length; + if (end <= this.safeTo) { + let lookAhead = next.prop(NodeProp.lookAhead); + if (!lookAhead || end + lookAhead < this.fragment.to) + return next; + } + } + this.index[last]++; + if (start + next.length >= Math.max(this.safeFrom, pos)) { // Enter this node + this.trees.push(next); + this.start.push(start); + this.index.push(0); + } + } + else { + this.index[last]++; + this.nextStart = start + next.length; + } + } + } +} +class TokenCache { + constructor(parser, stream) { + this.stream = stream; + this.tokens = []; + this.mainToken = null; + this.actions = []; + this.tokens = parser.tokenizers.map(_ => new CachedToken); + } + getActions(stack) { + let actionIndex = 0; + let main = null; + let { parser } = stack.p, { tokenizers } = parser; + let mask = parser.stateSlot(stack.state, 3 /* ParseState.TokenizerMask */); + let context = stack.curContext ? stack.curContext.hash : 0; + let lookAhead = 0; + for (let i = 0; i < tokenizers.length; i++) { + if (((1 << i) & mask) == 0) + continue; + let tokenizer = tokenizers[i], token = this.tokens[i]; + if (main && !tokenizer.fallback) + continue; + if (tokenizer.contextual || token.start != stack.pos || token.mask != mask || token.context != context) { + this.updateCachedToken(token, tokenizer, stack); + token.mask = mask; + token.context = context; + } + if (token.lookAhead > token.end + 25 /* Lookahead.Margin */) + lookAhead = Math.max(token.lookAhead, lookAhead); + if (token.value != 0 /* Term.Err */) { + let startIndex = actionIndex; + if (token.extended > -1) + actionIndex = this.addActions(stack, token.extended, token.end, actionIndex); + actionIndex = this.addActions(stack, token.value, token.end, actionIndex); + if (!tokenizer.extend) { + main = token; + if (actionIndex > startIndex) + break; + } + } + } + while (this.actions.length > actionIndex) + this.actions.pop(); + if (lookAhead) + stack.setLookAhead(lookAhead); + if (!main && stack.pos == this.stream.end) { + main = new CachedToken; + main.value = stack.p.parser.eofTerm; + main.start = main.end = stack.pos; + actionIndex = this.addActions(stack, main.value, main.end, actionIndex); + } + this.mainToken = main; + return this.actions; + } + getMainToken(stack) { + if (this.mainToken) + return this.mainToken; + let main = new CachedToken, { pos, p } = stack; + main.start = pos; + main.end = Math.min(pos + 1, p.stream.end); + main.value = pos == p.stream.end ? p.parser.eofTerm : 0 /* Term.Err */; + return main; + } + updateCachedToken(token, tokenizer, stack) { + let start = this.stream.clipPos(stack.pos); + tokenizer.token(this.stream.reset(start, token), stack); + if (token.value > -1) { + let { parser } = stack.p; + for (let i = 0; i < parser.specialized.length; i++) + if (parser.specialized[i] == token.value) { + let result = parser.specializers[i](this.stream.read(token.start, token.end), stack); + if (result >= 0 && stack.p.parser.dialect.allows(result >> 1)) { + if ((result & 1) == 0 /* Specialize.Specialize */) + token.value = result >> 1; + else + token.extended = result >> 1; + break; + } + } + } + else { + token.value = 0 /* Term.Err */; + token.end = this.stream.clipPos(start + 1); + } + } + putAction(action, token, end, index) { + // Don't add duplicate actions + for (let i = 0; i < index; i += 3) + if (this.actions[i] == action) + return index; + this.actions[index++] = action; + this.actions[index++] = token; + this.actions[index++] = end; + return index; + } + addActions(stack, token, end, index) { + let { state } = stack, { parser } = stack.p, { data } = parser; + for (let set = 0; set < 2; set++) { + for (let i = parser.stateSlot(state, set ? 2 /* ParseState.Skip */ : 1 /* ParseState.Actions */);; i += 3) { + if (data[i] == 65535 /* Seq.End */) { + if (data[i + 1] == 1 /* Seq.Next */) { + i = pair(data, i + 2); + } + else { + if (index == 0 && data[i + 1] == 2 /* Seq.Other */) + index = this.putAction(pair(data, i + 2), token, end, index); + break; + } + } + if (data[i] == token) + index = this.putAction(pair(data, i + 1), token, end, index); + } + } + return index; + } +} +class Parse { + constructor(parser, input, fragments, ranges) { + this.parser = parser; + this.input = input; + this.ranges = ranges; + this.recovering = 0; + this.nextStackID = 0x2654; // ♔, ♕, ♖, ♗, ♘, ♙, ♠, ♡, ♢, ♣, ♤, ♥, ♦, ♧ + this.minStackPos = 0; + this.reused = []; + this.stoppedAt = null; + this.lastBigReductionStart = -1; + this.lastBigReductionSize = 0; + this.bigReductionCount = 0; + this.stream = new InputStream(input, ranges); + this.tokens = new TokenCache(parser, this.stream); + this.topTerm = parser.top[1]; + let { from } = ranges[0]; + this.stacks = [Stack.start(this, parser.top[0], from)]; + this.fragments = fragments.length && this.stream.end - from > parser.bufferLength * 4 + ? new FragmentCursor(fragments, parser.nodeSet) : null; + } + get parsedPos() { + return this.minStackPos; + } + // Move the parser forward. This will process all parse stacks at + // `this.pos` and try to advance them to a further position. If no + // stack for such a position is found, it'll start error-recovery. + // + // When the parse is finished, this will return a syntax tree. When + // not, it returns `null`. + advance() { + let stacks = this.stacks, pos = this.minStackPos; + // This will hold stacks beyond `pos`. + let newStacks = this.stacks = []; + let stopped, stoppedTokens; + // If a large amount of reductions happened with the same start + // position, force the stack out of that production in order to + // avoid creating a tree too deep to recurse through. + // (This is an ugly kludge, because unfortunately there is no + // straightforward, cheap way to check for this happening, due to + // the history of reductions only being available in an + // expensive-to-access format in the stack buffers.) + if (this.bigReductionCount > 300 /* Rec.MaxLeftAssociativeReductionCount */ && stacks.length == 1) { + let [s] = stacks; + while (s.forceReduce() && s.stack.length && s.stack[s.stack.length - 2] >= this.lastBigReductionStart) { } + this.bigReductionCount = this.lastBigReductionSize = 0; + } + // Keep advancing any stacks at `pos` until they either move + // forward or can't be advanced. Gather stacks that can't be + // advanced further in `stopped`. + for (let i = 0; i < stacks.length; i++) { + let stack = stacks[i]; + for (;;) { + this.tokens.mainToken = null; + if (stack.pos > pos) { + newStacks.push(stack); + } + else if (this.advanceStack(stack, newStacks, stacks)) { + continue; + } + else { + if (!stopped) { + stopped = []; + stoppedTokens = []; + } + stopped.push(stack); + let tok = this.tokens.getMainToken(stack); + stoppedTokens.push(tok.value, tok.end); + } + break; + } + } + if (!newStacks.length) { + let finished = stopped && findFinished(stopped); + if (finished) { + if (verbose) + console.log("Finish with " + this.stackID(finished)); + return this.stackToTree(finished); + } + if (this.parser.strict) { + if (verbose && stopped) + console.log("Stuck with token " + (this.tokens.mainToken ? this.parser.getName(this.tokens.mainToken.value) : "none")); + throw new SyntaxError("No parse at " + pos); + } + if (!this.recovering) + this.recovering = 5 /* Rec.Distance */; + } + if (this.recovering && stopped) { + let finished = this.stoppedAt != null && stopped[0].pos > this.stoppedAt ? stopped[0] + : this.runRecovery(stopped, stoppedTokens, newStacks); + if (finished) { + if (verbose) + console.log("Force-finish " + this.stackID(finished)); + return this.stackToTree(finished.forceAll()); + } + } + if (this.recovering) { + let maxRemaining = this.recovering == 1 ? 1 : this.recovering * 3 /* Rec.MaxRemainingPerStep */; + if (newStacks.length > maxRemaining) { + newStacks.sort((a, b) => b.score - a.score); + while (newStacks.length > maxRemaining) + newStacks.pop(); + } + if (newStacks.some(s => s.reducePos > pos)) + this.recovering--; + } + else if (newStacks.length > 1) { + // Prune stacks that are in the same state, or that have been + // running without splitting for a while, to avoid getting stuck + // with multiple successful stacks running endlessly on. + outer: for (let i = 0; i < newStacks.length - 1; i++) { + let stack = newStacks[i]; + for (let j = i + 1; j < newStacks.length; j++) { + let other = newStacks[j]; + if (stack.sameState(other) || + stack.buffer.length > 500 /* Rec.MinBufferLengthPrune */ && other.buffer.length > 500 /* Rec.MinBufferLengthPrune */) { + if (((stack.score - other.score) || (stack.buffer.length - other.buffer.length)) > 0) { + newStacks.splice(j--, 1); + } + else { + newStacks.splice(i--, 1); + continue outer; + } + } + } + } + if (newStacks.length > 12 /* Rec.MaxStackCount */) + newStacks.splice(12 /* Rec.MaxStackCount */, newStacks.length - 12 /* Rec.MaxStackCount */); + } + this.minStackPos = newStacks[0].pos; + for (let i = 1; i < newStacks.length; i++) + if (newStacks[i].pos < this.minStackPos) + this.minStackPos = newStacks[i].pos; + return null; + } + stopAt(pos) { + if (this.stoppedAt != null && this.stoppedAt < pos) + throw new RangeError("Can't move stoppedAt forward"); + this.stoppedAt = pos; + } + // Returns an updated version of the given stack, or null if the + // stack can't advance normally. When `split` and `stacks` are + // given, stacks split off by ambiguous operations will be pushed to + // `split`, or added to `stacks` if they move `pos` forward. + advanceStack(stack, stacks, split) { + let start = stack.pos, { parser } = this; + let base = verbose ? this.stackID(stack) + " -> " : ""; + if (this.stoppedAt != null && start > this.stoppedAt) + return stack.forceReduce() ? stack : null; + if (this.fragments) { + let strictCx = stack.curContext && stack.curContext.tracker.strict, cxHash = strictCx ? stack.curContext.hash : 0; + for (let cached = this.fragments.nodeAt(start); cached;) { + let match = this.parser.nodeSet.types[cached.type.id] == cached.type ? parser.getGoto(stack.state, cached.type.id) : -1; + if (match > -1 && cached.length && (!strictCx || (cached.prop(NodeProp.contextHash) || 0) == cxHash)) { + stack.useNode(cached, match); + if (verbose) + console.log(base + this.stackID(stack) + ` (via reuse of ${parser.getName(cached.type.id)})`); + return true; + } + if (!(cached instanceof Tree) || cached.children.length == 0 || cached.positions[0] > 0) + break; + let inner = cached.children[0]; + if (inner instanceof Tree && cached.positions[0] == 0) + cached = inner; + else + break; + } + } + let defaultReduce = parser.stateSlot(stack.state, 4 /* ParseState.DefaultReduce */); + if (defaultReduce > 0) { + stack.reduce(defaultReduce); + if (verbose) + console.log(base + this.stackID(stack) + ` (via always-reduce ${parser.getName(defaultReduce & 65535 /* Action.ValueMask */)})`); + return true; + } + if (stack.stack.length >= 8400 /* Rec.CutDepth */) { + while (stack.stack.length > 6000 /* Rec.CutTo */ && stack.forceReduce()) { } + } + let actions = this.tokens.getActions(stack); + for (let i = 0; i < actions.length;) { + let action = actions[i++], term = actions[i++], end = actions[i++]; + let last = i == actions.length || !split; + let localStack = last ? stack : stack.split(); + let main = this.tokens.mainToken; + localStack.apply(action, term, main ? main.start : localStack.pos, end); + if (verbose) + console.log(base + this.stackID(localStack) + ` (via ${(action & 65536 /* Action.ReduceFlag */) == 0 ? "shift" + : `reduce of ${parser.getName(action & 65535 /* Action.ValueMask */)}`} for ${parser.getName(term)} @ ${start}${localStack == stack ? "" : ", split"})`); + if (last) + return true; + else if (localStack.pos > start) + stacks.push(localStack); + else + split.push(localStack); + } + return false; + } + // Advance a given stack forward as far as it will go. Returns the + // (possibly updated) stack if it got stuck, or null if it moved + // forward and was given to `pushStackDedup`. + advanceFully(stack, newStacks) { + let pos = stack.pos; + for (;;) { + if (!this.advanceStack(stack, null, null)) + return false; + if (stack.pos > pos) { + pushStackDedup(stack, newStacks); + return true; + } + } + } + runRecovery(stacks, tokens, newStacks) { + let finished = null, restarted = false; + for (let i = 0; i < stacks.length; i++) { + let stack = stacks[i], token = tokens[i << 1], tokenEnd = tokens[(i << 1) + 1]; + let base = verbose ? this.stackID(stack) + " -> " : ""; + if (stack.deadEnd) { + if (restarted) + continue; + restarted = true; + stack.restart(); + if (verbose) + console.log(base + this.stackID(stack) + " (restarted)"); + let done = this.advanceFully(stack, newStacks); + if (done) + continue; + } + let force = stack.split(), forceBase = base; + for (let j = 0; force.forceReduce() && j < 10 /* Rec.ForceReduceLimit */; j++) { + if (verbose) + console.log(forceBase + this.stackID(force) + " (via force-reduce)"); + let done = this.advanceFully(force, newStacks); + if (done) + break; + if (verbose) + forceBase = this.stackID(force) + " -> "; + } + for (let insert of stack.recoverByInsert(token)) { + if (verbose) + console.log(base + this.stackID(insert) + " (via recover-insert)"); + this.advanceFully(insert, newStacks); + } + if (this.stream.end > stack.pos) { + if (tokenEnd == stack.pos) { + tokenEnd++; + token = 0 /* Term.Err */; + } + stack.recoverByDelete(token, tokenEnd); + if (verbose) + console.log(base + this.stackID(stack) + ` (via recover-delete ${this.parser.getName(token)})`); + pushStackDedup(stack, newStacks); + } + else if (!finished || finished.score < stack.score) { + finished = stack; + } + } + return finished; + } + // Convert the stack's buffer to a syntax tree. + stackToTree(stack) { + stack.close(); + return Tree.build({ buffer: StackBufferCursor.create(stack), + nodeSet: this.parser.nodeSet, + topID: this.topTerm, + maxBufferLength: this.parser.bufferLength, + reused: this.reused, + start: this.ranges[0].from, + length: stack.pos - this.ranges[0].from, + minRepeatType: this.parser.minRepeatTerm }); + } + stackID(stack) { + let id = (stackIDs || (stackIDs = new WeakMap)).get(stack); + if (!id) + stackIDs.set(stack, id = String.fromCodePoint(this.nextStackID++)); + return id + stack; + } +} +function pushStackDedup(stack, newStacks) { + for (let i = 0; i < newStacks.length; i++) { + let other = newStacks[i]; + if (other.pos == stack.pos && other.sameState(stack)) { + if (newStacks[i].score < stack.score) + newStacks[i] = stack; + return; + } + } + newStacks.push(stack); +} +class Dialect { + constructor(source, flags, disabled) { + this.source = source; + this.flags = flags; + this.disabled = disabled; + } + allows(term) { return !this.disabled || this.disabled[term] == 0; } +} +const id = x => x; +/** +Context trackers are used to track stateful context (such as +indentation in the Python grammar, or parent elements in the XML +grammar) needed by external tokenizers. You declare them in a +grammar file as `@context exportName from "module"`. + +Context values should be immutable, and can be updated (replaced) +on shift or reduce actions. + +The export used in a `@context` declaration should be of this +type. +*/ +class ContextTracker { + /** + Define a context tracker. + */ + constructor(spec) { + this.start = spec.start; + this.shift = spec.shift || id; + this.reduce = spec.reduce || id; + this.reuse = spec.reuse || id; + this.hash = spec.hash || (() => 0); + this.strict = spec.strict !== false; + } +} +/** +Holds the parse tables for a given grammar, as generated by +`lezer-generator`, and provides [methods](#common.Parser) to parse +content with. +*/ +class LRParser extends Parser { + /** + @internal + */ + constructor(spec) { + super(); + /** + @internal + */ + this.wrappers = []; + if (spec.version != 14 /* File.Version */) + throw new RangeError(`Parser version (${spec.version}) doesn't match runtime version (${14 /* File.Version */})`); + let nodeNames = spec.nodeNames.split(" "); + this.minRepeatTerm = nodeNames.length; + for (let i = 0; i < spec.repeatNodeCount; i++) + nodeNames.push(""); + let topTerms = Object.keys(spec.topRules).map(r => spec.topRules[r][1]); + let nodeProps = []; + for (let i = 0; i < nodeNames.length; i++) + nodeProps.push([]); + function setProp(nodeID, prop, value) { + nodeProps[nodeID].push([prop, prop.deserialize(String(value))]); + } + if (spec.nodeProps) + for (let propSpec of spec.nodeProps) { + let prop = propSpec[0]; + if (typeof prop == "string") + prop = NodeProp[prop]; + for (let i = 1; i < propSpec.length;) { + let next = propSpec[i++]; + if (next >= 0) { + setProp(next, prop, propSpec[i++]); + } + else { + let value = propSpec[i + -next]; + for (let j = -next; j > 0; j--) + setProp(propSpec[i++], prop, value); + i++; + } + } + } + this.nodeSet = new NodeSet(nodeNames.map((name, i) => NodeType.define({ + name: i >= this.minRepeatTerm ? undefined : name, + id: i, + props: nodeProps[i], + top: topTerms.indexOf(i) > -1, + error: i == 0, + skipped: spec.skippedNodes && spec.skippedNodes.indexOf(i) > -1 + }))); + if (spec.propSources) + this.nodeSet = this.nodeSet.extend(...spec.propSources); + this.strict = false; + this.bufferLength = DefaultBufferLength; + let tokenArray = decodeArray(spec.tokenData); + this.context = spec.context; + this.specializerSpecs = spec.specialized || []; + this.specialized = new Uint16Array(this.specializerSpecs.length); + for (let i = 0; i < this.specializerSpecs.length; i++) + this.specialized[i] = this.specializerSpecs[i].term; + this.specializers = this.specializerSpecs.map(getSpecializer); + this.states = decodeArray(spec.states, Uint32Array); + this.data = decodeArray(spec.stateData); + this.goto = decodeArray(spec.goto); + this.maxTerm = spec.maxTerm; + this.tokenizers = spec.tokenizers.map(value => typeof value == "number" ? new TokenGroup(tokenArray, value) : value); + this.topRules = spec.topRules; + this.dialects = spec.dialects || {}; + this.dynamicPrecedences = spec.dynamicPrecedences || null; + this.tokenPrecTable = spec.tokenPrec; + this.termNames = spec.termNames || null; + this.maxNode = this.nodeSet.types.length - 1; + this.dialect = this.parseDialect(); + this.top = this.topRules[Object.keys(this.topRules)[0]]; + } + createParse(input, fragments, ranges) { + let parse = new Parse(this, input, fragments, ranges); + for (let w of this.wrappers) + parse = w(parse, input, fragments, ranges); + return parse; + } + /** + Get a goto table entry @internal + */ + getGoto(state, term, loose = false) { + let table = this.goto; + if (term >= table[0]) + return -1; + for (let pos = table[term + 1];;) { + let groupTag = table[pos++], last = groupTag & 1; + let target = table[pos++]; + if (last && loose) + return target; + for (let end = pos + (groupTag >> 1); pos < end; pos++) + if (table[pos] == state) + return target; + if (last) + return -1; + } + } + /** + Check if this state has an action for a given terminal @internal + */ + hasAction(state, terminal) { + let data = this.data; + for (let set = 0; set < 2; set++) { + for (let i = this.stateSlot(state, set ? 2 /* ParseState.Skip */ : 1 /* ParseState.Actions */), next;; i += 3) { + if ((next = data[i]) == 65535 /* Seq.End */) { + if (data[i + 1] == 1 /* Seq.Next */) + next = data[i = pair(data, i + 2)]; + else if (data[i + 1] == 2 /* Seq.Other */) + return pair(data, i + 2); + else + break; + } + if (next == terminal || next == 0 /* Term.Err */) + return pair(data, i + 1); + } + } + return 0; + } + /** + @internal + */ + stateSlot(state, slot) { + return this.states[(state * 6 /* ParseState.Size */) + slot]; + } + /** + @internal + */ + stateFlag(state, flag) { + return (this.stateSlot(state, 0 /* ParseState.Flags */) & flag) > 0; + } + /** + @internal + */ + validAction(state, action) { + return !!this.allActions(state, a => a == action ? true : null); + } + /** + @internal + */ + allActions(state, action) { + let deflt = this.stateSlot(state, 4 /* ParseState.DefaultReduce */); + let result = deflt ? action(deflt) : undefined; + for (let i = this.stateSlot(state, 1 /* ParseState.Actions */); result == null; i += 3) { + if (this.data[i] == 65535 /* Seq.End */) { + if (this.data[i + 1] == 1 /* Seq.Next */) + i = pair(this.data, i + 2); + else + break; + } + result = action(pair(this.data, i + 1)); + } + return result; + } + /** + Get the states that can follow this one through shift actions or + goto jumps. @internal + */ + nextStates(state) { + let result = []; + for (let i = this.stateSlot(state, 1 /* ParseState.Actions */);; i += 3) { + if (this.data[i] == 65535 /* Seq.End */) { + if (this.data[i + 1] == 1 /* Seq.Next */) + i = pair(this.data, i + 2); + else + break; + } + if ((this.data[i + 2] & (65536 /* Action.ReduceFlag */ >> 16)) == 0) { + let value = this.data[i + 1]; + if (!result.some((v, i) => (i & 1) && v == value)) + result.push(this.data[i], value); + } + } + return result; + } + /** + Configure the parser. Returns a new parser instance that has the + given settings modified. Settings not provided in `config` are + kept from the original parser. + */ + configure(config) { + // Hideous reflection-based kludge to make it easy to create a + // slightly modified copy of a parser. + let copy = Object.assign(Object.create(LRParser.prototype), this); + if (config.props) + copy.nodeSet = this.nodeSet.extend(...config.props); + if (config.top) { + let info = this.topRules[config.top]; + if (!info) + throw new RangeError(`Invalid top rule name ${config.top}`); + copy.top = info; + } + if (config.tokenizers) + copy.tokenizers = this.tokenizers.map(t => { + let found = config.tokenizers.find(r => r.from == t); + return found ? found.to : t; + }); + if (config.specializers) { + copy.specializers = this.specializers.slice(); + copy.specializerSpecs = this.specializerSpecs.map((s, i) => { + let found = config.specializers.find(r => r.from == s.external); + if (!found) + return s; + let spec = Object.assign(Object.assign({}, s), { external: found.to }); + copy.specializers[i] = getSpecializer(spec); + return spec; + }); + } + if (config.contextTracker) + copy.context = config.contextTracker; + if (config.dialect) + copy.dialect = this.parseDialect(config.dialect); + if (config.strict != null) + copy.strict = config.strict; + if (config.wrap) + copy.wrappers = copy.wrappers.concat(config.wrap); + if (config.bufferLength != null) + copy.bufferLength = config.bufferLength; + return copy; + } + /** + Tells you whether any [parse wrappers](#lr.ParserConfig.wrap) + are registered for this parser. + */ + hasWrappers() { + return this.wrappers.length > 0; + } + /** + Returns the name associated with a given term. This will only + work for all terms when the parser was generated with the + `--names` option. By default, only the names of tagged terms are + stored. + */ + getName(term) { + return this.termNames ? this.termNames[term] : String(term <= this.maxNode && this.nodeSet.types[term].name || term); + } + /** + The eof term id is always allocated directly after the node + types. @internal + */ + get eofTerm() { return this.maxNode + 1; } + /** + The type of top node produced by the parser. + */ + get topNode() { return this.nodeSet.types[this.top[1]]; } + /** + @internal + */ + dynamicPrecedence(term) { + let prec = this.dynamicPrecedences; + return prec == null ? 0 : prec[term] || 0; + } + /** + @internal + */ + parseDialect(dialect) { + let values = Object.keys(this.dialects), flags = values.map(() => false); + if (dialect) + for (let part of dialect.split(" ")) { + let id = values.indexOf(part); + if (id >= 0) + flags[id] = true; + } + let disabled = null; + for (let i = 0; i < values.length; i++) + if (!flags[i]) { + for (let j = this.dialects[values[i]], id; (id = this.data[j++]) != 65535 /* Seq.End */;) + (disabled || (disabled = new Uint8Array(this.maxTerm + 1)))[id] = 1; + } + return new Dialect(dialect, flags, disabled); + } + /** + Used by the output of the parser generator. Not available to + user code. @hide + */ + static deserialize(spec) { + return new LRParser(spec); + } +} +function pair(data, off) { return data[off] | (data[off + 1] << 16); } +function findFinished(stacks) { + let best = null; + for (let stack of stacks) { + let stopped = stack.p.stoppedAt; + if ((stack.pos == stack.p.stream.end || stopped != null && stack.pos > stopped) && + stack.p.parser.stateFlag(stack.state, 2 /* StateFlag.Accepting */) && + (!best || best.score < stack.score)) + best = stack; + } + return best; +} +function getSpecializer(spec) { + if (spec.external) { + let mask = spec.extend ? 1 /* Specialize.Extend */ : 0 /* Specialize.Specialize */; + return (value, stack) => (spec.external(value, stack) << 1) | mask; + } + return spec.get; +} + +export { ContextTracker, ExternalTokenizer, InputStream, LRParser, LocalTokenGroup, Stack }; diff --git a/node_modules/@lezer/lr/package.json b/node_modules/@lezer/lr/package.json new file mode 100644 index 00000000..dd10fa45 --- /dev/null +++ b/node_modules/@lezer/lr/package.json @@ -0,0 +1,32 @@ +{ + "name": "@lezer/lr", + "version": "1.4.2", + "description": "Incremental parser", + "main": "dist/index.cjs", + "type": "module", + "exports": { + "import": "./dist/index.js", + "require": "./dist/index.cjs" + }, + "module": "dist/index.js", + "types": "dist/index.d.ts", + "author": "Marijn Haverbeke ", + "license": "MIT", + "repository": { + "type" : "git", + "url" : "https://github.com/lezer-parser/lr.git" + }, + "devDependencies": { + "@marijn/buildtool": "^0.1.5", + "@types/node": "^20.6.2" + }, + "dependencies": { + "@lezer/common": "^1.0.0" + }, + "files": ["dist"], + "scripts": { + "test": "echo 'Tests are in @lezer/generator'", + "watch": "node build.js --watch", + "prepare": "node build.js; tsc src/constants.ts -d --outDir dist" + } +} diff --git a/node_modules/@lmdb/lmdb-linux-x64/README.md b/node_modules/@lmdb/lmdb-linux-x64/README.md new file mode 100644 index 00000000..23a4a028 --- /dev/null +++ b/node_modules/@lmdb/lmdb-linux-x64/README.md @@ -0,0 +1 @@ +Platform specific binary for lmdb on linux OS with x64 architecture \ No newline at end of file diff --git a/node_modules/@lmdb/lmdb-linux-x64/index.js b/node_modules/@lmdb/lmdb-linux-x64/index.js new file mode 100644 index 00000000..e69de29b diff --git a/node_modules/@lmdb/lmdb-linux-x64/node.abi108.glibc.node b/node_modules/@lmdb/lmdb-linux-x64/node.abi108.glibc.node new file mode 100755 index 00000000..cb647241 Binary files /dev/null and b/node_modules/@lmdb/lmdb-linux-x64/node.abi108.glibc.node differ diff --git a/node_modules/@lmdb/lmdb-linux-x64/node.abi115.glibc.node b/node_modules/@lmdb/lmdb-linux-x64/node.abi115.glibc.node new file mode 100755 index 00000000..49df3212 Binary files /dev/null and b/node_modules/@lmdb/lmdb-linux-x64/node.abi115.glibc.node differ diff --git a/node_modules/@lmdb/lmdb-linux-x64/node.abi93.glibc.node b/node_modules/@lmdb/lmdb-linux-x64/node.abi93.glibc.node new file mode 100755 index 00000000..2ba607ec Binary files /dev/null and b/node_modules/@lmdb/lmdb-linux-x64/node.abi93.glibc.node differ diff --git a/node_modules/@lmdb/lmdb-linux-x64/node.napi.glibc.node b/node_modules/@lmdb/lmdb-linux-x64/node.napi.glibc.node new file mode 100755 index 00000000..af26eb94 Binary files /dev/null and b/node_modules/@lmdb/lmdb-linux-x64/node.napi.glibc.node differ diff --git a/node_modules/@lmdb/lmdb-linux-x64/node.napi.musl.node b/node_modules/@lmdb/lmdb-linux-x64/node.napi.musl.node new file mode 100755 index 00000000..09b73d8b Binary files /dev/null and b/node_modules/@lmdb/lmdb-linux-x64/node.napi.musl.node differ diff --git a/node_modules/@lmdb/lmdb-linux-x64/package.json b/node_modules/@lmdb/lmdb-linux-x64/package.json new file mode 100644 index 00000000..687cf2a1 --- /dev/null +++ b/node_modules/@lmdb/lmdb-linux-x64/package.json @@ -0,0 +1,21 @@ +{ + "name": "@lmdb/lmdb-linux-x64", + "version": "2.8.5", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "license": "MIT", + "author": "Kris Zyp", + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/kriszyp/lmdb-js.git" + }, + "bugs": { + "url": "https://github.com/kriszyp/lmdb-js/issues" + }, + "homepage": "https://github.com/kriszyp/lmdb-js#readme", + "description": "Platform specific binary for lmdb on linux OS with x64 architecture" +} \ No newline at end of file diff --git a/node_modules/@mischnic/json-sourcemap/LICENSE b/node_modules/@mischnic/json-sourcemap/LICENSE new file mode 100644 index 00000000..4197e067 --- /dev/null +++ b/node_modules/@mischnic/json-sourcemap/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Niklas Mischkulnig + +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. \ No newline at end of file diff --git a/node_modules/@mischnic/json-sourcemap/README.md b/node_modules/@mischnic/json-sourcemap/README.md new file mode 100644 index 00000000..d763b9d8 --- /dev/null +++ b/node_modules/@mischnic/json-sourcemap/README.md @@ -0,0 +1,43 @@ +# @mischnic/json-sourcemap + +Generate positions for values in JSON and JSON5 strings. + +Inspired by and mostly API-compatible with https://github.com/epoberezkin/json-source-map. + +## Usage + +```ts +type Position = { + line: number; + column: number; + pos: number; +}; + +type Mapping = + | { + value: Position; + valueEnd: Position; + } + | { + value: Position; + valueEnd: Position; + key?: Position; + keyEnd?: Position; + }; + +export function parse( + json: string, + reviver?: (key: any, value: any) => any, + options?: { + tabWidth?: number; + dialect?: "JSON5" | "JSON"; + } +): { + data: any; + pointers: Record; +}; +``` + +The default `tabWidth` is 4. + +The `valueEnd` and `keyEnd` positions are exclusive. `line`, `column` and `pos` are 0-based. diff --git a/node_modules/@mischnic/json-sourcemap/dist/index.d.ts b/node_modules/@mischnic/json-sourcemap/dist/index.d.ts new file mode 100644 index 00000000..e09f12ee --- /dev/null +++ b/node_modules/@mischnic/json-sourcemap/dist/index.d.ts @@ -0,0 +1,29 @@ +export type Position = { + line: number; + column: number; + pos: number; +}; + +export type Mapping = + | { + value: Position; + valueEnd: Position; + } + | { + value: Position; + valueEnd: Position; + key?: Position; + keyEnd?: Position; + }; + +export function parse( + json: string, + reviver?: (key: any, value: any) => any, + options?: { + tabWidth?: number; + dialect?: "JSON5" | "JSON"; + } +): { + data: any; + pointers: Record; +}; diff --git a/node_modules/@mischnic/json-sourcemap/dist/index.js b/node_modules/@mischnic/json-sourcemap/dist/index.js new file mode 100644 index 00000000..bb1f36a5 --- /dev/null +++ b/node_modules/@mischnic/json-sourcemap/dist/index.js @@ -0,0 +1,166 @@ +var $hlrUL$lezercommon = require("@lezer/common"); +var $hlrUL$json5 = require("json5"); +var $hlrUL$lezerlr = require("@lezer/lr"); + +function $parcel$interopDefault(a) { + return a && a.__esModule ? a.default : a; +} +function $parcel$export(e, n, v, s) { + Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true}); +} + +$parcel$export(module.exports, "parse", () => $83c796b2b9543406$export$98e6a39c04603d36); +// This file was generated by lezer-generator. You probably shouldn't edit it. + +const $1adaef8fb7bb1497$export$8f49e4af10703ce3 = (0, $hlrUL$lezerlr.LRParser).deserialize({ + version: 14, + states: "%QO]QPOOOOQO'#Cd'#CdOtQQO'#CgO!PQPO'#ClOOQO'#Cs'#CsQOQPOOOOQO'#Ci'#CiO!WQPO'#ChO!]QPO'#CuOOQO,59R,59RO!eQPO,59ROOQO'#Cm'#CmO!jQPO'#CyOOQO,59W,59WO!rQPO,59WO]QPO,59SO!wQQO,59aO#SQPO,59aOOQO1G.m1G.mO#[QPO,59eO#cQPO,59eOOQO1G.r1G.rOOQO1G.n1G.nOOQO,59Y,59YO#kQQO1G.{OOQO-E6l-E6lOOQO,59Z,59ZO#vQPO1G/POOQO-E6m-E6mPwQQO'#CnP]QPO'#Co", + stateData: "$R~OfOSPOSQOS~OSSOTSOUSOVSOYQO_ROhPO~OXXOhUOjUO~O^]O~P]Ok_O~Ol`OXiX~OXbO~OlcO^mX~O^eO~OhUOjUOXia~OlhOXia~O^ma~P]OlkO^ma~OhUOjUOXii~O^mi~P]OPQj~", + goto: "!}nPPPPPPPPoPPow!PPPo!V!_!ePPP!kP!wPPP!z]SOR_cknQWQVg`hmXVQ`hmQ[RVjcknQaWRiaQd[RldQTOWZRcknRf_RYQR^R", + nodeNames: "⚠ LineComment BlockComment JsonText True False Null Number String } { Object Property PropertyName ] [ Array ArrayValue", + maxTerm: 29, + nodeProps: [ + [ + "group", + -7, + 4, + 5, + 6, + 7, + 8, + 11, + 16, + "Value" + ], + [ + "openedBy", + 9, + "{", + 14, + "[" + ], + [ + "closedBy", + 10, + "}", + 15, + "]" + ] + ], + skippedNodes: [ + 0, + 1, + 2 + ], + repeatNodeCount: 2, + tokenData: "!!`~R!OXY$RYZ$RZ[$R[]$R]^$Rpq$Rrs$Wtu.Xwx0b{|2Y|}6p}!O2Y!O!P2l!P!Q6u!Q!R3l!R![5Q![!]8t!c!k.X!k!l8y!l!p.X!p!q@}!q!}.X!}#OB|#O#P/S#P#QCR#R#S.X#T#Y.X#Y#ZCW#Z#b.X#b#cHU#c#h.X#h#iLU#i#o.X#o#p!!U#q#r!!Z$f$g$R$g$IV.X$IV$IW$R$IW$I|.X$I|$I}$R$I}$JO$R$JU;'S.X;'S;=`0[<%l?HT.X?HT?HU$R?HUO.X~$WOf~~$ZXOp$vpq$Wqr$Wrs%`s#O$W#O#P&s#P;'S$W;'S;=`.R<%lO$W~$yVOr$vrs%`s#O$v#O#P%e#P;'S$v;'S;=`&m<%lO$v~%eOh~~%haYZ$v]^$vrs$vwx$v!Q!R$v#O#P$v#T#U$v#U#V$v#Y#Z$v#b#c$v#f#g$v#h#i$v#i#j$v#j#k$v#l#m$v$I|$I}$v$I}$JO$v~&pP;=`<%l$v~&vbYZ$v]^$vrs$Wwx$v!P!Q(O!Q!R$v#O#P$W#T#U$v#U#V$W#Y#Z$W#b#c$W#f#g$W#h#i$W#i#j*c#j#k$v#l#m$v$I|$I}$v$I}$JO$v~(RWpq(Oqr(Ors%`s#O(O#O#P(k#P;'S(O;'S;=`*]<%lO(O~(nXrs(O!P!Q(O#O#P(O#U#V(O#Y#Z(O#b#c(O#f#g(O#h#i(O#i#j)Z~)^R!Q![)g!c!i)g#T#Z)g~)jR!Q![)s!c!i)s#T#Z)s~)vR!Q![*P!c!i*P#T#Z*P~*SR!Q![(O!c!i(O#T#Z(O~*`P;=`<%l(O~*f]Or$vrs%`s!Q$v!Q![+_![!c$v!c!i+_!i#O$v#O#P%e#P#T$v#T#Z+_#Z;'S$v;'S;=`&m<%lO$v~+b]Or$vrs%`s!Q$v!Q![,Z![!c$v!c!i,Z!i#O$v#O#P%e#P#T$v#T#Z,Z#Z;'S$v;'S;=`&m<%lO$v~,^]Or$vrs%`s!Q$v!Q![-V![!c$v!c!i-V!i#O$v#O#P%e#P#T$v#T#Z-V#Z;'S$v;'S;=`&m<%lO$v~-Y]Or$vrs%`s!Q$v!Q![$W![!c$v!c!i$W!i#O$v#O#P%e#P#T$v#T#Z$W#Z;'S$v;'S;=`&m<%lO$v~.UP;=`<%l$WQ.^[jQtu.X!Q![.X!c!}.X#O#P/S#R#S.X#T#o.X$g$IV.X$IW$I|.X$JU;'S.X;'S;=`0[<%l?HT.X?HUO.XQ/VP#i#j/YQ/]R!Q![/f!c!i/f#T#Z/fQ/iR!Q![/r!c!i/r#T#Z/rQ/uR!Q![0O!c!i0O#T#Z0OQ0RR!Q![.X!c!i.X#T#Z.XQ0_P;=`<%l.X~0eVOw0bwx%`x#O0b#O#P0z#P;'S0b;'S;=`2S<%lO0b~0}aYZ0b]^0brs0bwx0b!Q!R0b#O#P0b#T#U0b#U#V0b#Y#Z0b#b#c0b#f#g0b#h#i0b#i#j0b#j#k0b#l#m0b$I|$I}0b$I}$JO0b~2VP;=`<%l0bP2]T!O!P2l!Q!R3l!R![5Q!k!l5c!p!q6dP2oP!Q![2rP2wRVP!Q![2r!g!h3Q#X#Y3QP3TR{|3^}!O3^!Q![3dP3aP!Q![3dP3iPVP!Q![3dP3qTVP!O!P2r!Q![4Q!g!h3Q#X#Y3Q#l#m4fP4TQ!O!P4Z!Q![4QP4`QVP!g!h3Q#X#Y3QP4iR!Q![4r!c!i4r#T#Z4rP4wRVP!Q![4r!c!i4r#T#Z4rP5VSVP!O!P2r!Q![5Q!g!h3Q#X#Y3QP5fP#b#c5iP5lP#Y#Z5oP5rP#]#^5uP5xP#b#c5{P6OP#]#^6RP6UP#h#i6XP6[P#m#n6_P6dOVPP6gP#T#U6jP6mP!p!q6_~6uOl~~6xQz{7O!P!Q8V~7RTOz7Oz{7b{;'S7O;'S;=`8P<%lO7O~7eVOz7Oz{7b{!P7O!P!Q7z!Q;'S7O;'S;=`8P<%lO7O~8POQ~~8SP;=`<%l7O~8[UP~OY8VZ]8V^$I|8V$JO;'S8V;'S;=`8n<%lO8V~8qP;=`<%l8V~8yOk~R9O^jQtu.X!Q![.X!c!}.X#O#P/S#R#S.X#T#b.X#b#c9z#c#o.X$g$IV.X$IW$I|.X$JU;'S.X;'S;=`0[<%l?HT.X?HUO.XR:P^jQtu.X!Q![.X!c!}.X#O#P/S#R#S.X#T#Y.X#Y#Z:{#Z#o.X$g$IV.X$IW$I|.X$JU;'S.X;'S;=`0[<%l?HT.X?HUO.XR;Q^jQtu.X!Q![.X!c!}.X#O#P/S#R#S.X#T#].X#]#^;|#^#o.X$g$IV.X$IW$I|.X$JU;'S.X;'S;=`0[<%l?HT.X?HUO.XRO#^#o.X$g$IV.X$IW$I|.X$JU;'S.X;'S;=`0[<%l?HT.X?HUO.XR>T^jQtu.X!Q![.X!c!}.X#O#P/S#R#S.X#T#h.X#h#i?P#i#o.X$g$IV.X$IW$I|.X$JU;'S.X;'S;=`0[<%l?HT.X?HUO.XR?U^jQtu.X!Q![.X!c!}.X#O#P/S#R#S.X#T#m.X#m#n@Q#n#o.X$g$IV.X$IW$I|.X$JU;'S.X;'S;=`0[<%l?HT.X?HUO.XR@X[VPjQtu.X!Q![.X!c!}.X#O#P/S#R#S.X#T#o.X$g$IV.X$IW$I|.X$JU;'S.X;'S;=`0[<%l?HT.X?HUO.XRAS]jQtu.X!Q![.X!c!}.X#O#P/S#R#S.X#T#UA{#U#o.X$g$IV.X$IW$I|.X$JU;'S.X;'S;=`0[<%l?HT.X?HUO.XRBQ^jQtu.X!Q![.X!c!p.X!p!q@Q!q!}.X#O#P/S#R#S.X#T#o.X$g$IV.X$IW$I|.X$JU;'S.X;'S;=`0[<%l?HT.X?HUO.X~CRO_~~CWO^~RC]]jQtu.X!Q![.X!c!}.X#O#P/S#R#S.X#T#UDU#U#o.X$g$IV.X$IW$I|.X$JU;'S.X;'S;=`0[<%l?HT.X?HUO.XRDZ^jQtu.X!Q![.X!c!}.X#O#P/S#R#S.X#T#`.X#`#aEV#a#o.X$g$IV.X$IW$I|.X$JU;'S.X;'S;=`0[<%l?HT.X?HUO.XRE[^jQtu.X!Q![.X!c!}.X#O#P/S#R#S.X#T#g.X#g#hFW#h#o.X$g$IV.X$IW$I|.X$JU;'S.X;'S;=`0[<%l?HT.X?HUO.XRF]^jQtu.X!Q![.X!c!}.X#O#P/S#R#S.X#T#X.X#X#YGX#Y#o.X$g$IV.X$IW$I|.X$JU;'S.X;'S;=`0[<%l?HT.X?HUO.XRG`[TPjQtu.X!Q![.X!c!}.X#O#P/S#R#S.X#T#o.X$g$IV.X$IW$I|.X$JU;'S.X;'S;=`0[<%l?HT.X?HUO.XRHZ^jQtu.X!Q![.X!c!}.X#O#P/S#R#S.X#T#i.X#i#jIV#j#o.X$g$IV.X$IW$I|.X$JU;'S.X;'S;=`0[<%l?HT.X?HUO.XRI[^jQtu.X!Q![.X!c!}.X#O#P/S#R#S.X#T#`.X#`#aJW#a#o.X$g$IV.X$IW$I|.X$JU;'S.X;'S;=`0[<%l?HT.X?HUO.XRJ]^jQtu.X!Q![.X!c!}.X#O#P/S#R#S.X#T#`.X#`#aKX#a#o.X$g$IV.X$IW$I|.X$JU;'S.X;'S;=`0[<%l?HT.X?HUO.XRK`[UPjQtu.X!Q![.X!c!}.X#O#P/S#R#S.X#T#o.X$g$IV.X$IW$I|.X$JU;'S.X;'S;=`0[<%l?HT.X?HUO.XRLZ^jQtu.X!Q![.X!c!}.X#O#P/S#R#S.X#T#f.X#f#gMV#g#o.X$g$IV.X$IW$I|.X$JU;'S.X;'S;=`0[<%l?HT.X?HUO.XRM[^jQtu.X!Q![.X!c!}.X#O#P/S#R#S.X#T#i.X#i#jNW#j#o.X$g$IV.X$IW$I|.X$JU;'S.X;'S;=`0[<%l?HT.X?HUO.XRN]^jQtu.X!Q![.X!c!}.X#O#P/S#R#S.X#T#X.X#X#Y! X#Y#o.X$g$IV.X$IW$I|.X$JU;'S.X;'S;=`0[<%l?HT.X?HUO.XR! `[SPjQtu.X!Q![.X!c!}.X#O#P/S#R#S.X#T#o.X$g$IV.X$IW$I|.X$JU;'S.X;'S;=`0[<%l?HT.X?HUO.X~!!ZOY~~!!`OX~", + tokenizers: [ + 0, + 1 + ], + topRules: { + "JsonText": [ + 0, + 3 + ] + }, + dialects: { + json5: 137 + }, + tokenPrec: 0 +}); + + +// This file was generated by lezer-generator. You probably shouldn't edit it. +const $121152950f502dea$export$e6476262d0d4122e = 1, $121152950f502dea$export$33c356ab5b93be35 = 2, $121152950f502dea$export$8bc1c2b4dd1e923b = 3, $121152950f502dea$export$4bc0976997a4d94e = 4, $121152950f502dea$export$5d3e9aafef2fffbe = 5, $121152950f502dea$export$26c9c3a80cd996ae = 6, $121152950f502dea$export$fffa67e515d04022 = 7, $121152950f502dea$export$89b8e0fa65f6a914 = 8, $121152950f502dea$export$164a3ab98abb171d = 11, $121152950f502dea$export$41b04b3a73e7216d = 12, $121152950f502dea$export$e546d8cfcc0684e2 = 13, $121152950f502dea$export$c4be6576ca6fe4aa = 16, $121152950f502dea$export$f06b0ce79fd44095 = 17, $121152950f502dea$export$386a487b17ea4d92 = 0; + + + + + + +function $83c796b2b9543406$export$98e6a39c04603d36(input, reviver, { dialect: dialect = "json" , tabWidth: tabWidth = 4 } = {}) { + // Let these parsers throw any errors about invalid input + let data = dialect === "JSON5" ? (0, ($parcel$interopDefault($hlrUL$json5))).parse(input, reviver) : JSON.parse(input, reviver); + let tree = (0, $1adaef8fb7bb1497$export$8f49e4af10703ce3).configure({ + strict: true, + dialect: dialect === "JSON5" ? "json5" : "json" + }).parse(input); + let pointers = new Map(); + let currentPath = [ + "" + ]; + tree.iterate({ + enter (node) { + // if (type.isError) { + // let fromPos = posToLineColumn(input, from, tabWidth); + // let error = new SyntaxError( + // `Failed to parse (${fromPos.line}:${fromPos.column})` + // ); + // error.lineNumber = fromPos.line; + // error.columnNumber = fromPos.column; + // throw error; + // } + let group = node.type.prop((0, $hlrUL$lezercommon.NodeProp).group); + if (group === null || group === void 0 ? void 0 : group.includes("Value")) $83c796b2b9543406$var$mapMerge(pointers, $83c796b2b9543406$var$toJsonPointer(currentPath), { + value: $83c796b2b9543406$var$posToLineColumn(input, node.from, tabWidth), + valueEnd: $83c796b2b9543406$var$posToLineColumn(input, node.to, tabWidth) + }); + if (node.name === "PropertyName") { + let name = input.slice(node.from, node.to); + let quoted = name[0] === `'` || name[0] == `"`; + currentPath.push(quoted ? name.slice(1, -1) : name); + $83c796b2b9543406$var$mapMerge(pointers, $83c796b2b9543406$var$toJsonPointer(currentPath), { + key: $83c796b2b9543406$var$posToLineColumn(input, node.from, tabWidth), + keyEnd: $83c796b2b9543406$var$posToLineColumn(input, node.to, tabWidth) + }); + } else if (node.name === "Array") currentPath.push(0); + }, + leave (node) { + if (node.name === "Property" || node.name === "Array") currentPath.pop(); + else if (node.name === "ArrayValue") // @ts-ignore + currentPath[currentPath.length - 1]++; + } + }); + return { + data: data, + pointers: Object.fromEntries(pointers) + }; +} +function $83c796b2b9543406$var$mapMerge(map, key, data) { + let value = map.get(key); + value = { + ...value, + ...data + }; + map.set(key, value); +} +function $83c796b2b9543406$var$posToLineColumn(input, pos, tabWidth) { + let line = $83c796b2b9543406$var$countNewLines(input, pos); + let lineStart = input.lastIndexOf("\n", pos - 1) + 1; + let column = $83c796b2b9543406$var$countColumn(input, lineStart, pos, tabWidth); + return { + line: line, + column: column, + pos: pos + }; +} +function $83c796b2b9543406$var$countNewLines(str, end) { + let count = 0; + for(let i = 0; i < end; i++)if (str[i] === "\n") count++; + return count; +} +function $83c796b2b9543406$var$countColumn(str, start, end, tabWidth) { + let count = 0; + for(let i = start; i < end; i++)count += str[i] === " " ? tabWidth : 1; + return count; +} +const $83c796b2b9543406$var$ESCAPE_REGEX = /[~/]/g; +function $83c796b2b9543406$var$toJsonPointer(path) { + let str = ""; + for (let e of path)if (typeof e === "string") str += e.replace($83c796b2b9543406$var$ESCAPE_REGEX, (v)=>v === "~" ? "~0" : "~1") + "/"; + else str += String(e) + "/"; + return str.slice(0, -1); +} + + diff --git a/node_modules/@mischnic/json-sourcemap/dist/index.js.flow b/node_modules/@mischnic/json-sourcemap/dist/index.js.flow new file mode 100644 index 00000000..b63086d9 --- /dev/null +++ b/node_modules/@mischnic/json-sourcemap/dist/index.js.flow @@ -0,0 +1,28 @@ +// @flow strict + +export type Position = {| + line: number, + column: number, + pos: number, +|}; + +export type Mapping = + | {| + value: Position, + valueEnd: Position, + |} + | {| + value: Position, + valueEnd: Position, + key?: Position, + keyEnd?: Position, + |}; + +declare export function parse( + json: string, + reviver?: (key: any, value: any) => any, + options?: {| tabWidth?: number, dialect?: "JSON5" | "JSON" |} +): {| + data: any, + pointers: {| [key: string]: Mapping |}, +|}; diff --git a/node_modules/@mischnic/json-sourcemap/package.json b/node_modules/@mischnic/json-sourcemap/package.json new file mode 100644 index 00000000..68519ffb --- /dev/null +++ b/node_modules/@mischnic/json-sourcemap/package.json @@ -0,0 +1,44 @@ +{ + "name": "@mischnic/json-sourcemap", + "version": "0.1.1", + "license": "MIT", + "description": "Generate positions for values in JSON and JSON5 strings", + "repository": { + "type": "git", + "url": "https://github.com/mischnic/json-sourcemap" + }, + "publishConfig": { + "access": "public" + }, + "main": "dist/index.js", + "sideEffects": true, + "scripts": { + "watch": "parcel watch index.ts --no-source-maps", + "build": "parcel build index.ts --no-source-maps", + "run-watch": "nodemon experiment.js", + "test": "mocha" + }, + "devDependencies": { + "json-pointer": "^0.6.2", + "json-source-map": "^0.6.1", + "mocha": "^10.0.0", + "parcel": "~2.8.0", + "parcel-reporter-static-files-copy": "^1.0.0", + "parcel-transformer-lezer": "^0.2.0", + "typescript": "^5.2.2" + }, + "dependencies": { + "@lezer/common": "^1.0.0", + "@lezer/lr": "^1.0.0", + "json5": "^2.2.1" + }, + "files": [ + "dist" + ], + "engines": { + "node": ">=12.0.0" + }, + "targets": { + "types": false + } +} diff --git a/node_modules/@msgpackr-extract/msgpackr-extract-linux-x64/README.md b/node_modules/@msgpackr-extract/msgpackr-extract-linux-x64/README.md new file mode 100644 index 00000000..9294f06b --- /dev/null +++ b/node_modules/@msgpackr-extract/msgpackr-extract-linux-x64/README.md @@ -0,0 +1 @@ +Platform specific binary for msgpackr-extract on linux OS with x64 architecture \ No newline at end of file diff --git a/node_modules/@msgpackr-extract/msgpackr-extract-linux-x64/index.js b/node_modules/@msgpackr-extract/msgpackr-extract-linux-x64/index.js new file mode 100644 index 00000000..e69de29b diff --git a/node_modules/@msgpackr-extract/msgpackr-extract-linux-x64/node.abi115.glibc.node b/node_modules/@msgpackr-extract/msgpackr-extract-linux-x64/node.abi115.glibc.node new file mode 100755 index 00000000..b9408d97 Binary files /dev/null and b/node_modules/@msgpackr-extract/msgpackr-extract-linux-x64/node.abi115.glibc.node differ diff --git a/node_modules/@msgpackr-extract/msgpackr-extract-linux-x64/node.abi115.musl.node b/node_modules/@msgpackr-extract/msgpackr-extract-linux-x64/node.abi115.musl.node new file mode 100755 index 00000000..79162343 Binary files /dev/null and b/node_modules/@msgpackr-extract/msgpackr-extract-linux-x64/node.abi115.musl.node differ diff --git a/node_modules/@msgpackr-extract/msgpackr-extract-linux-x64/node.napi.glibc.node b/node_modules/@msgpackr-extract/msgpackr-extract-linux-x64/node.napi.glibc.node new file mode 100755 index 00000000..d7217dd8 Binary files /dev/null and b/node_modules/@msgpackr-extract/msgpackr-extract-linux-x64/node.napi.glibc.node differ diff --git a/node_modules/@msgpackr-extract/msgpackr-extract-linux-x64/node.napi.musl.node b/node_modules/@msgpackr-extract/msgpackr-extract-linux-x64/node.napi.musl.node new file mode 100755 index 00000000..8317cca5 Binary files /dev/null and b/node_modules/@msgpackr-extract/msgpackr-extract-linux-x64/node.napi.musl.node differ diff --git a/node_modules/@msgpackr-extract/msgpackr-extract-linux-x64/package.json b/node_modules/@msgpackr-extract/msgpackr-extract-linux-x64/package.json new file mode 100644 index 00000000..f700d5b6 --- /dev/null +++ b/node_modules/@msgpackr-extract/msgpackr-extract-linux-x64/package.json @@ -0,0 +1,17 @@ +{ + "name": "@msgpackr-extract/msgpackr-extract-linux-x64", + "version": "3.0.3", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "license": "MIT", + "author": "Kris Zyp", + "repository": { + "type": "git", + "url": "http://github.com/kriszyp/msgpackr-extract" + }, + "description": "Platform specific binary for msgpackr-extract on linux OS with x64 architecture" +} \ No newline at end of file diff --git a/node_modules/@parcel/bundler-default/LICENSE b/node_modules/@parcel/bundler-default/LICENSE new file mode 100644 index 00000000..7fb9bc95 --- /dev/null +++ b/node_modules/@parcel/bundler-default/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017-present Devon Govett + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/@parcel/bundler-default/lib/DefaultBundler.js b/node_modules/@parcel/bundler-default/lib/DefaultBundler.js new file mode 100644 index 00000000..e4459a96 --- /dev/null +++ b/node_modules/@parcel/bundler-default/lib/DefaultBundler.js @@ -0,0 +1,1406 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +function _graph() { + const data = require("@parcel/graph"); + _graph = function () { + return data; + }; + return data; +} +function _assert() { + const data = _interopRequireDefault(require("assert")); + _assert = function () { + return data; + }; + return data; +} +function _plugin() { + const data = require("@parcel/plugin"); + _plugin = function () { + return data; + }; + return data; +} +function _utils() { + const data = require("@parcel/utils"); + _utils = function () { + return data; + }; + return data; +} +function _nullthrows() { + const data = _interopRequireDefault(require("nullthrows")); + _nullthrows = function () { + return data; + }; + return data; +} +function _path() { + const data = _interopRequireDefault(require("path")); + _path = function () { + return data; + }; + return data; +} +function _diagnostic() { + const data = require("@parcel/diagnostic"); + _diagnostic = function () { + return data; + }; + return data; +} +function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } +// Default options by http version. +const HTTP_OPTIONS = { + '1': { + minBundles: 1, + manualSharedBundles: [], + minBundleSize: 30000, + maxParallelRequests: 6, + disableSharedBundles: false + }, + '2': { + minBundles: 1, + manualSharedBundles: [], + minBundleSize: 20000, + maxParallelRequests: 25, + disableSharedBundles: false + } +}; + +/* BundleRoot - An asset that is the main entry of a Bundle. */ + +const dependencyPriorityEdges = { + sync: 1, + parallel: 2, + lazy: 3 +}; + +// IdealGraph is the structure we will pass to decorate, +// which mutates the assetGraph into the bundleGraph we would +// expect from default bundler +/** + * + * The Bundler works by creating an IdealGraph, which contains a BundleGraph that models bundles + * connected to other bundles by what references them, and thus models BundleGroups. + * + * First, we enter `bundle({bundleGraph, config})`. Here, "bundleGraph" is actually just the + * assetGraph turned into a type `MutableBundleGraph`, which will then be mutated in decorate, + * and turned into what we expect the bundleGraph to be as per the old (default) bundler structure + * & what the rest of Parcel expects a BundleGraph to be. + * + * `bundle({bundleGraph, config})` First gets a Mapping of target to entries, In most cases there is + * only one target, and one or more entries. (Targets are pertinent in monorepos or projects where you + * will have two or more distDirs, or output folders.) Then calls create IdealGraph and Decorate per target. + * + */ +var _default = exports.default = new (_plugin().Bundler)({ + loadConfig({ + config, + options, + logger + }) { + return loadBundlerConfig(config, options, logger); + }, + bundle({ + bundleGraph, + config, + logger + }) { + let targetMap = getEntryByTarget(bundleGraph); // Organize entries by target output folder/ distDir + let graphs = []; + for (let entries of targetMap.values()) { + // Create separate bundleGraphs per distDir + graphs.push(createIdealGraph(bundleGraph, config, entries, logger)); + } + for (let g of graphs) { + decorateLegacyGraph(g, bundleGraph); //mutate original graph + } + }, + optimize() {} +}); +function decorateLegacyGraph(idealGraph, bundleGraph) { + let idealBundleToLegacyBundle = new Map(); + let { + bundleGraph: idealBundleGraph, + dependencyBundleGraph, + bundleGroupBundleIds, + manualAssetToBundle + } = idealGraph; + let entryBundleToBundleGroup = new Map(); + // Step Create Bundles: Create bundle groups, bundles, and shared bundles and add assets to them + for (let [bundleNodeId, idealBundle] of idealBundleGraph.nodes.entries()) { + if (!idealBundle || idealBundle === 'root') continue; + let entryAsset = idealBundle.mainEntryAsset; + let bundleGroups = []; + let bundleGroup; + let bundle; + if (bundleGroupBundleIds.has(bundleNodeId)) { + (0, _assert().default)(idealBundle.manualSharedBundle == null, 'Unstable Manual Shared Bundle feature is processing a manualSharedBundle as a BundleGroup'); + let dependencies = dependencyBundleGraph.getNodeIdsConnectedTo(dependencyBundleGraph.getNodeIdByContentKey(String(bundleNodeId)), _graph().ALL_EDGE_TYPES).map(nodeId => { + let dependency = (0, _nullthrows().default)(dependencyBundleGraph.getNode(nodeId)); + (0, _assert().default)(dependency.type === 'dependency'); + return dependency.value; + }); + (0, _assert().default)(entryAsset != null, 'Processing a bundleGroup with no entry asset'); + for (let dependency of dependencies) { + bundleGroup = bundleGraph.createBundleGroup(dependency, idealBundle.target); + bundleGroups.push(bundleGroup); + } + (0, _assert().default)(bundleGroup); + entryBundleToBundleGroup.set(bundleNodeId, bundleGroup); + bundle = (0, _nullthrows().default)(bundleGraph.createBundle({ + entryAsset: (0, _nullthrows().default)(entryAsset), + needsStableName: idealBundle.needsStableName, + bundleBehavior: idealBundle.bundleBehavior, + target: idealBundle.target, + manualSharedBundle: idealBundle.manualSharedBundle + })); + bundleGraph.addBundleToBundleGroup(bundle, bundleGroup); + } else if (idealBundle.sourceBundles.size > 0 && !idealBundle.mainEntryAsset) { + let uniqueKey = idealBundle.uniqueKey != null ? idealBundle.uniqueKey : [...idealBundle.assets].map(asset => asset.id).join(','); + bundle = (0, _nullthrows().default)(bundleGraph.createBundle({ + uniqueKey, + needsStableName: idealBundle.needsStableName, + bundleBehavior: idealBundle.bundleBehavior, + type: idealBundle.type, + target: idealBundle.target, + env: idealBundle.env, + manualSharedBundle: idealBundle.manualSharedBundle + })); + } else if (idealBundle.uniqueKey != null) { + bundle = (0, _nullthrows().default)(bundleGraph.createBundle({ + uniqueKey: idealBundle.uniqueKey, + needsStableName: idealBundle.needsStableName, + bundleBehavior: idealBundle.bundleBehavior, + type: idealBundle.type, + target: idealBundle.target, + env: idealBundle.env, + manualSharedBundle: idealBundle.manualSharedBundle + })); + } else { + (0, _assert().default)(entryAsset != null); + bundle = (0, _nullthrows().default)(bundleGraph.createBundle({ + entryAsset, + needsStableName: idealBundle.needsStableName, + bundleBehavior: idealBundle.bundleBehavior, + target: idealBundle.target, + manualSharedBundle: idealBundle.manualSharedBundle + })); + } + idealBundleToLegacyBundle.set(idealBundle, bundle); + for (let asset of idealBundle.assets) { + bundleGraph.addAssetToBundle(asset, bundle); + } + } + // Step Internalization: Internalize dependencies for bundles + for (let idealBundle of idealBundleGraph.nodes) { + if (!idealBundle || idealBundle === 'root') continue; + let bundle = (0, _nullthrows().default)(idealBundleToLegacyBundle.get(idealBundle)); + if (idealBundle.internalizedAssets) { + idealBundle.internalizedAssets.forEach(internalized => { + let incomingDeps = bundleGraph.getIncomingDependencies(idealGraph.assets[internalized]); + for (let incomingDep of incomingDeps) { + if (incomingDep.priority === 'lazy' && incomingDep.specifierType !== 'url' && bundle.hasDependency(incomingDep)) { + bundleGraph.internalizeAsyncDependency(bundle, incomingDep); + } + } + }); + } + } + // Unstable Manual Shared Bundles + // NOTE: This only works under the assumption that manual shared bundles would have + // always already been loaded before the bundle that requires internalization. + for (let manualSharedAsset of manualAssetToBundle.keys()) { + let incomingDeps = bundleGraph.getIncomingDependencies(manualSharedAsset); + for (let incomingDep of incomingDeps) { + if (incomingDep.priority === 'lazy' && incomingDep.specifierType !== 'url') { + let bundles = bundleGraph.getBundlesWithDependency(incomingDep); + for (let bundle of bundles) { + bundleGraph.internalizeAsyncDependency(bundle, incomingDep); + } + } + } + } + + // Step Add to BundleGroups: Add bundles to their bundle groups + idealBundleGraph.traverse((nodeId, _, actions) => { + let node = idealBundleGraph.getNode(nodeId); + if (node === 'root') { + return; + } + actions.skipChildren(); + let outboundNodeIds = idealBundleGraph.getNodeIdsConnectedFrom(nodeId); + let entryBundle = (0, _nullthrows().default)(idealBundleGraph.getNode(nodeId)); + (0, _assert().default)(entryBundle !== 'root'); + let legacyEntryBundle = (0, _nullthrows().default)(idealBundleToLegacyBundle.get(entryBundle)); + for (let id of outboundNodeIds) { + let siblingBundle = (0, _nullthrows().default)(idealBundleGraph.getNode(id)); + (0, _assert().default)(siblingBundle !== 'root'); + let legacySiblingBundle = (0, _nullthrows().default)(idealBundleToLegacyBundle.get(siblingBundle)); + bundleGraph.createBundleReference(legacyEntryBundle, legacySiblingBundle); + } + }); + + // Step References: Add references to all bundles + for (let [asset, references] of idealGraph.assetReference) { + for (let [dependency, bundle] of references) { + let legacyBundle = (0, _nullthrows().default)(idealBundleToLegacyBundle.get(bundle)); + bundleGraph.createAssetReference(dependency, asset, legacyBundle); + } + } + for (let { + from, + to + } of idealBundleGraph.getAllEdges()) { + let sourceBundle = (0, _nullthrows().default)(idealBundleGraph.getNode(from)); + if (sourceBundle === 'root') { + continue; + } + (0, _assert().default)(sourceBundle !== 'root'); + let legacySourceBundle = (0, _nullthrows().default)(idealBundleToLegacyBundle.get(sourceBundle)); + let targetBundle = (0, _nullthrows().default)(idealBundleGraph.getNode(to)); + if (targetBundle === 'root') { + continue; + } + (0, _assert().default)(targetBundle !== 'root'); + let legacyTargetBundle = (0, _nullthrows().default)(idealBundleToLegacyBundle.get(targetBundle)); + bundleGraph.createBundleReference(legacySourceBundle, legacyTargetBundle); + } +} +function createIdealGraph(assetGraph, config, entries, logger) { + // Asset to the bundle and group it's an entry of + let bundleRoots = new Map(); + let bundles = new Map(); + let dependencyBundleGraph = new (_graph().ContentGraph)(); + let assetReference = new (_utils().DefaultMap)(() => []); + + // A Graph of Bundles and a root node (dummy string), which models only Bundles, and connections to their + // referencing Bundle. There are no actual BundleGroup nodes, just bundles that take on that role. + let bundleGraph = new (_graph().Graph)(); + let stack = []; + let bundleRootEdgeTypes = { + parallel: 1, + lazy: 2 + }; + // Graph that models bundleRoots, with parallel & async deps only to inform reachability + let bundleRootGraph = new (_graph().Graph)(); + let assetToBundleRootNodeId = new Map(); + let bundleGroupBundleIds = new Set(); + let bundleGraphRootNodeId = (0, _nullthrows().default)(bundleGraph.addNode('root')); + bundleGraph.setRootNodeId(bundleGraphRootNodeId); + // Step Create Entry Bundles + for (let [asset, dependency] of entries) { + let bundle = createBundle({ + asset, + target: (0, _nullthrows().default)(dependency.target), + needsStableName: dependency.isEntry + }); + let nodeId = bundleGraph.addNode(bundle); + bundles.set(asset.id, nodeId); + bundleRoots.set(asset, [nodeId, nodeId]); + bundleGraph.addEdge(bundleGraphRootNodeId, nodeId); + dependencyBundleGraph.addEdge(dependencyBundleGraph.addNodeByContentKeyIfNeeded(dependency.id, { + value: dependency, + type: 'dependency' + }), dependencyBundleGraph.addNodeByContentKeyIfNeeded(String(nodeId), { + value: bundle, + type: 'bundle' + }), dependencyPriorityEdges[dependency.priority]); + bundleGroupBundleIds.add(nodeId); + } + let assets = []; + let assetToIndex = new Map(); + //Manual is a map of the user-given name to the bundle node Id that corresponds to ALL the assets that match any glob in that user-specified array + let manualSharedMap = new Map(); + // May need a map to be able to look up NON- bundle root assets which need special case instructions + // Use this when placing assets into bundles, to avoid duplication + let manualAssetToBundle = new Map(); + let { + manualAssetToConfig, + constantModuleToMSB + } = function makeManualAssetToConfigLookup() { + let manualAssetToConfig = new Map(); + let constantModuleToMSB = new (_utils().DefaultMap)(() => []); + if (config.manualSharedBundles.length === 0) { + return { + manualAssetToConfig, + constantModuleToMSB + }; + } + let parentsToConfig = new (_utils().DefaultMap)(() => []); + for (let c of config.manualSharedBundles) { + if (c.root != null) { + parentsToConfig.get(_path().default.join(config.projectRoot, c.root)).push(c); + } + } + let numParentsToFind = parentsToConfig.size; + let configToParentAsset = new Map(); + assetGraph.traverse((node, _, actions) => { + if (node.type === 'asset' && parentsToConfig.has(node.value.filePath)) { + for (let c of parentsToConfig.get(node.value.filePath)) { + configToParentAsset.set(c, node.value); + } + numParentsToFind--; + if (numParentsToFind === 0) { + // If we've found all parents we can stop traversal + actions.stop(); + } + } + }); + + // Process in reverse order so earlier configs take precedence + for (let c of config.manualSharedBundles.reverse()) { + if (c.root != null && !configToParentAsset.has(c)) { + logger.warn({ + origin: '@parcel/bundler-default', + message: `Manual shared bundle "${c.name}" skipped, no root asset found` + }); + continue; + } + let parentAsset = configToParentAsset.get(c); + let assetRegexes = c.assets.map(glob => (0, _utils().globToRegex)(glob)); + assetGraph.traverse((node, _, actions) => { + if (node.type === 'asset' && (!Array.isArray(c.types) || c.types.includes(node.value.type))) { + let projectRelativePath = _path().default.relative(config.projectRoot, node.value.filePath); + if (!assetRegexes.some(regex => regex.test(projectRelativePath))) { + return; + } + + // We track all matching MSB's for constant modules as they are never duplicated + // and need to be assigned to all matching bundles + if (node.value.meta.isConstantModule === true) { + constantModuleToMSB.get(node.value).push(c); + } + manualAssetToConfig.set(node.value, c); + return; + } + if (node.type === 'dependency' && node.value.priority === 'lazy' && parentAsset) { + // Don't walk past the bundle group assets + actions.skipChildren(); + } + }, parentAsset); + } + return { + manualAssetToConfig, + constantModuleToMSB + }; + }(); + let manualBundleToInternalizedAsset = new (_utils().DefaultMap)(() => []); + + /** + * Step Create Bundles: Traverse the assetGraph (aka MutableBundleGraph) and create bundles + * for asset type changes, parallel, inline, and async or lazy dependencies, + * adding only that asset to each bundle, not its entire subgraph. + */ + assetGraph.traverse({ + enter(node, context, actions) { + if (node.type === 'asset') { + if ((context === null || context === void 0 ? void 0 : context.type) === 'dependency' && context !== null && context !== void 0 && context.value.isEntry && !entries.has(node.value)) { + // Skip whole subtrees of other targets by skipping those entries + actions.skipChildren(); + return node; + } + assetToIndex.set(node.value, assets.length); + assets.push(node.value); + let bundleIdTuple = bundleRoots.get(node.value); + if (bundleIdTuple && bundleIdTuple[0] === bundleIdTuple[1]) { + // Push to the stack (only) when a new bundle is created + stack.push([node.value, bundleIdTuple[0]]); + } else if (bundleIdTuple) { + // Otherwise, push on the last bundle that marks the start of a BundleGroup + stack.push([node.value, stack[stack.length - 1][1]]); + } + } else if (node.type === 'dependency') { + if (context == null) { + return node; + } + let dependency = node.value; + (0, _assert().default)((context === null || context === void 0 ? void 0 : context.type) === 'asset'); + let assets = assetGraph.getDependencyAssets(dependency); + if (assets.length === 0) { + return node; + } + for (let childAsset of assets) { + let bundleId = bundles.get(childAsset.id); + let bundle; + + // MSB Step 1: Match glob on filepath and type for any asset + let manualSharedBundleKey; + let manualSharedObject = manualAssetToConfig.get(childAsset); + if (manualSharedObject) { + // MSB Step 2: Generate a key for which to look up this manual bundle with + manualSharedBundleKey = manualSharedObject.name + ',' + childAsset.type; + } + if ( + // MSB Step 3: If a bundle for these globs already exsits, use it + manualSharedBundleKey != null && manualSharedMap.has(manualSharedBundleKey)) { + bundleId = (0, _nullthrows().default)(manualSharedMap.get(manualSharedBundleKey)); + } + if (dependency.priority === 'lazy' || childAsset.bundleBehavior === 'isolated' // An isolated Dependency, or Bundle must contain all assets it needs to load. + ) { + if (bundleId == null) { + let firstBundleGroup = (0, _nullthrows().default)(bundleGraph.getNode(stack[0][1])); + (0, _assert().default)(firstBundleGroup !== 'root'); + bundle = createBundle({ + asset: childAsset, + target: firstBundleGroup.target, + needsStableName: dependency.bundleBehavior === 'inline' || childAsset.bundleBehavior === 'inline' ? false : dependency.isEntry || dependency.needsStableName, + bundleBehavior: dependency.bundleBehavior ?? childAsset.bundleBehavior + }); + bundleId = bundleGraph.addNode(bundle); + bundles.set(childAsset.id, bundleId); + bundleRoots.set(childAsset, [bundleId, bundleId]); + bundleGroupBundleIds.add(bundleId); + bundleGraph.addEdge(bundleGraphRootNodeId, bundleId); + if (manualSharedObject) { + // MSB Step 4: If this was the first instance of a match, mark mainAsset for internalization + // since MSBs should not have main entry assets + manualBundleToInternalizedAsset.get(bundleId).push(childAsset); + } + } else { + bundle = (0, _nullthrows().default)(bundleGraph.getNode(bundleId)); + (0, _assert().default)(bundle !== 'root'); + if ( + // If this dependency requests isolated, but the bundle is not, + // make the bundle isolated for all uses. + dependency.bundleBehavior === 'isolated' && bundle.bundleBehavior == null) { + bundle.bundleBehavior = dependency.bundleBehavior; + } + } + dependencyBundleGraph.addEdge(dependencyBundleGraph.addNodeByContentKeyIfNeeded(dependency.id, { + value: dependency, + type: 'dependency' + }), dependencyBundleGraph.addNodeByContentKeyIfNeeded(String(bundleId), { + value: bundle, + type: 'bundle' + }), dependencyPriorityEdges[dependency.priority]); + } else if (dependency.priority === 'parallel' || childAsset.bundleBehavior === 'inline') { + // The referencing bundleRoot is the root of a Bundle that first brings in another bundle (essentially the FIRST parent of a bundle, this may or may not be a bundleGroup) + let [referencingBundleRoot, bundleGroupNodeId] = (0, _nullthrows().default)(stack[stack.length - 1]); + let bundleGroup = (0, _nullthrows().default)(bundleGraph.getNode(bundleGroupNodeId)); + (0, _assert().default)(bundleGroup !== 'root'); + let referencingBundleId = (0, _nullthrows().default)(bundleRoots.get(referencingBundleRoot))[0]; + let referencingBundle = (0, _nullthrows().default)(bundleGraph.getNode(referencingBundleId)); + (0, _assert().default)(referencingBundle !== 'root'); + if (bundleId == null) { + bundle = createBundle({ + // Bundles created from type changes shouldn't have an entry asset. + asset: childAsset, + type: childAsset.type, + env: childAsset.env, + bundleBehavior: dependency.bundleBehavior ?? childAsset.bundleBehavior, + target: referencingBundle.target, + needsStableName: childAsset.bundleBehavior === 'inline' || dependency.bundleBehavior === 'inline' || dependency.priority === 'parallel' && !dependency.needsStableName ? false : referencingBundle.needsStableName + }); + bundleId = bundleGraph.addNode(bundle); + } else { + bundle = bundleGraph.getNode(bundleId); + (0, _assert().default)(bundle != null && bundle !== 'root'); + if ( + // If this dependency requests isolated, but the bundle is not, + // make the bundle isolated for all uses. + dependency.bundleBehavior === 'isolated' && bundle.bundleBehavior == null) { + bundle.bundleBehavior = dependency.bundleBehavior; + } + } + bundles.set(childAsset.id, bundleId); + + // A bundle can belong to multiple bundlegroups, all the bundle groups of it's + // ancestors, and all async and entry bundles before it are "bundle groups" + // TODO: We may need to track bundles to all bundleGroups it belongs to in the future. + bundleRoots.set(childAsset, [bundleId, bundleGroupNodeId]); + bundleGraph.addEdge(referencingBundleId, bundleId); + if (bundleId != bundleGroupNodeId) { + dependencyBundleGraph.addEdge(dependencyBundleGraph.addNodeByContentKeyIfNeeded(dependency.id, { + value: dependency, + type: 'dependency' + }), dependencyBundleGraph.addNodeByContentKeyIfNeeded(String(bundleId), { + value: bundle, + type: 'bundle' + }), dependencyPriorityEdges.parallel); + } + assetReference.get(childAsset).push([dependency, bundle]); + } else { + bundleId = null; + } + if (manualSharedObject && bundleId != null) { + // MSB Step 5: At this point we've either created or found an existing MSB bundle + // add the asset if it doesn't already have it and set key + + (0, _assert().default)(bundle !== 'root' && bundle != null && bundleId != null); + manualAssetToBundle.set(childAsset, bundleId); + if (!bundle.assets.has(childAsset)) { + // Add asset to bundle + bundle.assets.add(childAsset); + bundle.size += childAsset.stats.size; + } + bundles.set(childAsset.id, bundleId); + bundleRoots.set(childAsset, [bundleId, bundleId]); + (0, _assert().default)(manualSharedBundleKey != null); + // Ensure we set key to BundleId so the next glob match uses the appropriate bundle + if (!manualSharedMap.has(manualSharedBundleKey)) { + manualSharedMap.set(manualSharedBundleKey, bundleId); + } + bundle.manualSharedBundle = manualSharedObject.name; + bundle.uniqueKey = manualSharedObject.name + childAsset.type; + } + } + } + return node; + }, + exit(node) { + var _stack; + if (((_stack = stack[stack.length - 1]) === null || _stack === void 0 ? void 0 : _stack[0]) === node.value) { + stack.pop(); + } + } + }, null, { + skipUnusedDependencies: true + }); + + // Strip MSBs of entries + for (let [nodeId, internalizedAssets] of manualBundleToInternalizedAsset.entries()) { + let bundle = bundleGraph.getNode(nodeId); + (0, _assert().default)(bundle != null && bundle !== 'root'); + if (!bundle.internalizedAssets) { + bundle.internalizedAssets = new (_graph().BitSet)(assets.length); + } + for (let asset of internalizedAssets) { + bundle.internalizedAssets.add((0, _nullthrows().default)(assetToIndex.get(asset))); + } + bundle.mainEntryAsset = null; + bundleGroupBundleIds.delete(nodeId); // manual bundles can now act as shared, non-bundle group, should they be non-bundleRoots as well? + } + + /** + * Step Determine Reachability: Determine reachability for every asset from each bundleRoot. + * This is later used to determine which bundles to place each asset in. We build up two + * structures, one traversal each. ReachableRoots to store sync relationships, + * and bundleRootGraph to store the minimal availability through `parallel` and `async` relationships. + * The two graphs, are used to build up ancestorAssets, a structure which holds all availability by + * all means for each asset. + */ + let rootNodeId = bundleRootGraph.addNode(-1); + bundleRootGraph.setRootNodeId(rootNodeId); + for (let [root] of bundleRoots) { + let nodeId = bundleRootGraph.addNode((0, _nullthrows().default)(assetToIndex.get(root))); + assetToBundleRootNodeId.set(root, nodeId); + if (entries.has(root)) { + bundleRootGraph.addEdge(rootNodeId, nodeId); + } + } + + // reachableRoots is an array of bit sets for each asset. Each bit set + // indicates which bundle roots are reachable from that asset synchronously. + let reachableRoots = []; + for (let i = 0; i < assets.length; i++) { + reachableRoots.push(new (_graph().BitSet)(bundleRootGraph.nodes.length)); + } + + // reachableAssets is the inverse mapping of reachableRoots. For each bundle root, + // it contains a bit set that indicates which assets are reachable from it. + let reachableAssets = []; + + // ancestorAssets maps bundle roots to the set of all assets available to it at runtime, + // including in earlier parallel bundles. These are intersected through all paths to + // the bundle to ensure that the available assets are always present no matter in which + // order the bundles are loaded. + let ancestorAssets = []; + let inlineConstantDeps = new (_utils().DefaultMap)(() => new Set()); + for (let [bundleRootId, assetId] of bundleRootGraph.nodes.entries()) { + let reachable = new (_graph().BitSet)(assets.length); + reachableAssets.push(reachable); + ancestorAssets.push(null); + if (bundleRootId == rootNodeId || assetId == null) continue; + // Add sync relationships to ReachableRoots + let root = assets[assetId]; + assetGraph.traverse((node, _, actions) => { + if (node.value === root) { + return; + } + if (node.type === 'dependency') { + let dependency = node.value; + if (dependency.priority !== 'sync' && dependencyBundleGraph.hasContentKey(dependency.id)) { + let assets = assetGraph.getDependencyAssets(dependency); + if (assets.length === 0) { + return; + } + (0, _assert().default)(assets.length === 1); + let bundleRoot = assets[0]; + let bundle = (0, _nullthrows().default)(bundleGraph.getNode((0, _nullthrows().default)(bundles.get(bundleRoot.id)))); + if (bundle !== 'root' && bundle.bundleBehavior == null && !bundle.env.isIsolated() && bundle.env.context === root.env.context) { + bundleRootGraph.addEdge(bundleRootId, (0, _nullthrows().default)(assetToBundleRootNodeId.get(bundleRoot)), dependency.priority === 'parallel' ? bundleRootEdgeTypes.parallel : bundleRootEdgeTypes.lazy); + } + } + if (dependency.priority !== 'sync') { + actions.skipChildren(); + } + return; + } + //asset node type + let asset = node.value; + if (asset.bundleBehavior != null) { + actions.skipChildren(); + return; + } + let assetIndex = (0, _nullthrows().default)(assetToIndex.get(node.value)); + reachable.add(assetIndex); + reachableRoots[assetIndex].add(bundleRootId); + if (asset.meta.isConstantModule === true) { + let parents = assetGraph.getIncomingDependencies(asset).map(dep => (0, _nullthrows().default)(assetGraph.getAssetWithDependency(dep))); + for (let parent of parents) { + inlineConstantDeps.get(parent).add(asset); + } + } + return; + }, root, { + skipUnusedDependencies: true + }); + } + for (let entry of entries.keys()) { + // Initialize an empty set of ancestors available to entries + let entryId = (0, _nullthrows().default)(assetToBundleRootNodeId.get(entry)); + ancestorAssets[entryId] = new (_graph().BitSet)(assets.length); + } + + // Step Determine Availability + // Visit nodes in a topological order, visiting parent nodes before child nodes. + + // This allows us to construct an understanding of which assets will already be + // loaded and available when a bundle runs, by pushing available assets downwards and + // computing the intersection of assets available through all possible paths to a bundle. + // We call this structure ancestorAssets, a Map that tracks a bundleRoot, + // to all assets available to it (meaning they will exist guaranteed when the bundleRoot is loaded) + // The topological sort ensures all parents are visited before the node we want to process. + for (let nodeId of bundleRootGraph.topoSort(_graph().ALL_EDGE_TYPES)) { + if (nodeId === rootNodeId) continue; + const bundleRoot = assets[(0, _nullthrows().default)(bundleRootGraph.getNode(nodeId))]; + let bundleGroupId = (0, _nullthrows().default)(bundleRoots.get(bundleRoot))[1]; + + // At a BundleRoot, we access it's available assets (via ancestorAssets), + // and add to that all assets within the bundles in that BundleGroup. + + // This set is available to all bundles in a particular bundleGroup because + // bundleGroups are just bundles loaded at the same time. However it is + // not true that a bundle's available assets = all assets of all the bundleGroups + // it belongs to. It's the intersection of those sets. + let available; + if (bundleRoot.bundleBehavior === 'isolated') { + available = new (_graph().BitSet)(assets.length); + } else { + available = (0, _nullthrows().default)(ancestorAssets[nodeId]).clone(); + for (let bundleIdInGroup of [bundleGroupId, ...bundleGraph.getNodeIdsConnectedFrom(bundleGroupId)]) { + let bundleInGroup = (0, _nullthrows().default)(bundleGraph.getNode(bundleIdInGroup)); + (0, _assert().default)(bundleInGroup !== 'root'); + if (bundleInGroup.bundleBehavior != null) { + continue; + } + for (let bundleRoot of bundleInGroup.assets) { + // Assets directly connected to current bundleRoot + available.add((0, _nullthrows().default)(assetToIndex.get(bundleRoot))); + available.union(reachableAssets[(0, _nullthrows().default)(assetToBundleRootNodeId.get(bundleRoot))]); + } + } + } + + // Now that we have bundleGroup availability, we will propagate that down to all the children + // of this bundleGroup. For a child, we also must maintain parallel availability. If it has + // parallel siblings that come before it, those, too, are available to it. Add those parallel + // available assets to the set of available assets for this child as well. + let children = bundleRootGraph.getNodeIdsConnectedFrom(nodeId, _graph().ALL_EDGE_TYPES); + let parallelAvailability = new (_graph().BitSet)(assets.length); + for (let childId of children) { + let assetId = (0, _nullthrows().default)(bundleRootGraph.getNode(childId)); + let child = assets[assetId]; + let bundleBehavior = getBundleFromBundleRoot(child).bundleBehavior; + if (bundleBehavior != null) { + continue; + } + let isParallel = bundleRootGraph.hasEdge(nodeId, childId, bundleRootEdgeTypes.parallel); + + // Most of the time, a child will have many parent bundleGroups, + // so the next time we peek at a child from another parent, we will + // intersect the availability built there with the previously computed + // availability. this ensures no matter which bundleGroup loads a particular bundle, + // it will only assume availability of assets it has under any circumstance + const childAvailableAssets = ancestorAssets[childId]; + let currentChildAvailable = isParallel ? _graph().BitSet.union(parallelAvailability, available) : available; + if (childAvailableAssets != null) { + childAvailableAssets.intersect(currentChildAvailable); + } else { + ancestorAssets[childId] = currentChildAvailable.clone(); + } + if (isParallel) { + parallelAvailability.union(reachableAssets[childId]); + parallelAvailability.add(assetId); //The next sibling should have older sibling available via parallel + } + } + } + // Step Internalize async bundles - internalize Async bundles if and only if, + // the bundle is synchronously available elsewhere. + // We can query sync assets available via reachableRoots. If the parent has + // the bundleRoot by reachableRoots AND ancestorAssets, internalize it. + for (let [id, bundleRootId] of bundleRootGraph.nodes.entries()) { + if (bundleRootId == null || id === rootNodeId) continue; + let bundleRoot = assets[bundleRootId]; + if (manualAssetToConfig.has(bundleRoot)) { + // We internalize for MSBs later, we should never delete MSBs + continue; + } + let parentRoots = bundleRootGraph.getNodeIdsConnectedTo(id, _graph().ALL_EDGE_TYPES); + let canDelete = getBundleFromBundleRoot(bundleRoot).bundleBehavior !== 'isolated'; + if (parentRoots.length === 0) continue; + for (let parentId of parentRoots) { + var _ancestorAssets$paren; + if (parentId === rootNodeId) { + // connected to root. + canDelete = false; + continue; + } + if (reachableAssets[parentId].has(bundleRootId) || (_ancestorAssets$paren = ancestorAssets[parentId]) !== null && _ancestorAssets$paren !== void 0 && _ancestorAssets$paren.has(bundleRootId)) { + let parentAssetId = (0, _nullthrows().default)(bundleRootGraph.getNode(parentId)); + let parent = assets[parentAssetId]; + let parentBundle = bundleGraph.getNode((0, _nullthrows().default)(bundles.get(parent.id))); + (0, _assert().default)(parentBundle != null && parentBundle !== 'root'); + if (!parentBundle.internalizedAssets) { + parentBundle.internalizedAssets = new (_graph().BitSet)(assets.length); + } + parentBundle.internalizedAssets.add(bundleRootId); + } else { + canDelete = false; + } + } + if (canDelete) { + deleteBundle(bundleRoot); + } + } + function assignInlineConstants(parentAsset, bundle) { + for (let inlineConstant of inlineConstantDeps.get(parentAsset)) { + if (!bundle.assets.has(inlineConstant)) { + bundle.assets.add(inlineConstant); + bundle.size += inlineConstant.stats.size; + } + } + } + + // Step Insert Or Share: Place all assets into bundles or create shared bundles. Each asset + // is placed into a single bundle based on the bundle entries it is reachable from. + // This creates a maximally code split bundle graph with no duplication. + let reachable = new (_graph().BitSet)(assets.length); + let reachableNonEntries = new (_graph().BitSet)(assets.length); + let reachableIntersection = new (_graph().BitSet)(assets.length); + for (let i = 0; i < assets.length; i++) { + let asset = assets[i]; + let manualSharedObject = manualAssetToConfig.get(asset); + if (bundleRoots.has(asset) && inlineConstantDeps.get(asset).size > 0) { + let entryBundleId = (0, _nullthrows().default)(bundleRoots.get(asset))[0]; + let entryBundle = (0, _nullthrows().default)(bundleGraph.getNode(entryBundleId)); + (0, _assert().default)(entryBundle !== 'root'); + assignInlineConstants(asset, entryBundle); + } + if (asset.meta.isConstantModule === true) { + // Ignore constant modules as they are placed with their direct parents + continue; + } + + // Unreliable bundleRoot assets which need to pulled in by shared bundles or other means. + // Filter out entries, since they can't have shared bundles. + // Neither can non-splittable, isolated, or needing of stable name bundles. + // Reserve those filtered out bundles since we add the asset back into them. + reachableNonEntries.clear(); + reachableRoots[i].forEach(nodeId => { + var _ancestorAssets$nodeI; + let assetId = bundleRootGraph.getNode(nodeId); + if (assetId == null) return; // deleted + let a = assets[assetId]; + if (entries.has(a) || !a.isBundleSplittable || bundleRoots.get(a) && (getBundleFromBundleRoot(a).needsStableName || getBundleFromBundleRoot(a).bundleBehavior === 'isolated')) { + // Add asset to non-splittable bundles. + addAssetToBundleRoot(asset, a); + } else if (!((_ancestorAssets$nodeI = ancestorAssets[nodeId]) !== null && _ancestorAssets$nodeI !== void 0 && _ancestorAssets$nodeI.has(i))) { + // Filter out bundles from this asset's reachable array if + // bundle does not contain the asset in its ancestry + reachableNonEntries.add(assetId); + } + }); + reachable.bits.set(reachableNonEntries.bits); + + // If we encounter a "manual" asset, draw an edge from reachable to its MSB + if (manualSharedObject && !reachable.empty()) { + let bundle; + let bundleId; + let manualSharedBundleKey = manualSharedObject.name + ',' + asset.type; + let sourceBundles = []; + reachable.forEach(id => { + sourceBundles.push((0, _nullthrows().default)(bundleRoots.get(assets[id]))[0]); + }); + if (!manualSharedMap.has(manualSharedBundleKey)) { + let firstSourceBundle = (0, _nullthrows().default)(bundleGraph.getNode(sourceBundles[0])); + (0, _assert().default)(firstSourceBundle !== 'root'); + bundle = createBundle({ + uniqueKey: manualSharedBundleKey, + target: firstSourceBundle.target, + type: asset.type, + env: firstSourceBundle.env, + manualSharedBundle: manualSharedObject === null || manualSharedObject === void 0 ? void 0 : manualSharedObject.name + }); + bundle.sourceBundles = new Set(sourceBundles); + bundle.assets.add(asset); + bundleId = bundleGraph.addNode(bundle); + manualSharedMap.set(manualSharedBundleKey, bundleId); + } else { + bundleId = (0, _nullthrows().default)(manualSharedMap.get(manualSharedBundleKey)); + bundle = (0, _nullthrows().default)(bundleGraph.getNode(bundleId)); + (0, _assert().default)(bundle != null && bundle !== 'root', 'We tried to use the root incorrectly'); + if (!bundle.assets.has(asset)) { + bundle.assets.add(asset); + bundle.size += asset.stats.size; + } + for (let s of sourceBundles) { + if (s != bundleId) { + bundle.sourceBundles.add(s); + } + } + } + for (let sourceBundleId of sourceBundles) { + if (bundleId !== sourceBundleId) { + bundleGraph.addEdge(sourceBundleId, bundleId); + } + } + dependencyBundleGraph.addNodeByContentKeyIfNeeded(String(bundleId), { + value: bundle, + type: 'bundle' + }); + continue; + } + + // Finally, filter out bundleRoots (bundles) from this assets + // reachable if they are subgraphs, and reuse that subgraph bundle + // by drawing an edge. Essentially, if two bundles within an asset's + // reachable array, have an ancestor-subgraph relationship, draw that edge. + // This allows for us to reuse a bundle instead of making a shared bundle if + // a bundle represents the exact set of assets a set of bundles would share + + // if a bundle b is a subgraph of another bundle f, reuse it, drawing an edge between the two + if (config.disableSharedBundles === false) { + reachableNonEntries.forEach(candidateId => { + let candidateSourceBundleRoot = assets[candidateId]; + let candidateSourceBundleId = (0, _nullthrows().default)(bundleRoots.get(candidateSourceBundleRoot))[0]; + if (candidateSourceBundleRoot.env.isIsolated()) { + return; + } + let reuseableBundleId = bundles.get(asset.id); + if (reuseableBundleId != null) { + reachable.delete(candidateId); + bundleGraph.addEdge(candidateSourceBundleId, reuseableBundleId); + let reusableBundle = bundleGraph.getNode(reuseableBundleId); + (0, _assert().default)(reusableBundle !== 'root' && reusableBundle != null); + reusableBundle.sourceBundles.add(candidateSourceBundleId); + } else { + // Asset is not a bundleRoot, but if its ancestor bundle (in the asset's reachable) can be + // reused as a subgraph of another bundleRoot in its reachable, reuse it + reachableIntersection.bits.set(reachableNonEntries.bits); + reachableIntersection.intersect(reachableAssets[(0, _nullthrows().default)(assetToBundleRootNodeId.get(candidateSourceBundleRoot))]); + reachableIntersection.forEach(otherCandidateId => { + let otherReuseCandidate = assets[otherCandidateId]; + if (candidateSourceBundleRoot === otherReuseCandidate) return; + let reusableBundleId = (0, _nullthrows().default)(bundles.get(otherReuseCandidate.id)); + reachable.delete(candidateId); + bundleGraph.addEdge((0, _nullthrows().default)(bundles.get(candidateSourceBundleRoot.id)), reusableBundleId); + let reusableBundle = bundleGraph.getNode(reusableBundleId); + (0, _assert().default)(reusableBundle !== 'root' && reusableBundle != null); + reusableBundle.sourceBundles.add(candidateSourceBundleId); + }); + } + }); + } + let reachableArray = []; + reachable.forEach(id => { + reachableArray.push(assets[id]); + }); + + // Create shared bundles for splittable bundles. + if (config.disableSharedBundles === false && reachableArray.length > config.minBundles) { + let sourceBundles = reachableArray.map(a => (0, _nullthrows().default)(bundleRoots.get(a))[0]); + let key = reachableArray.map(a => a.id).join(',') + '.' + asset.type; + let bundleId = bundles.get(key); + let bundle; + if (bundleId == null) { + let firstSourceBundle = (0, _nullthrows().default)(bundleGraph.getNode(sourceBundles[0])); + (0, _assert().default)(firstSourceBundle !== 'root'); + bundle = createBundle({ + target: firstSourceBundle.target, + type: asset.type, + env: firstSourceBundle.env + }); + bundle.sourceBundles = new Set(sourceBundles); + let sharedInternalizedAssets = firstSourceBundle.internalizedAssets ? firstSourceBundle.internalizedAssets.clone() : new (_graph().BitSet)(assets.length); + for (let p of sourceBundles) { + let parentBundle = (0, _nullthrows().default)(bundleGraph.getNode(p)); + (0, _assert().default)(parentBundle !== 'root'); + if (parentBundle === firstSourceBundle) continue; + if (parentBundle.internalizedAssets) { + sharedInternalizedAssets.intersect(parentBundle.internalizedAssets); + } else { + sharedInternalizedAssets.clear(); + } + } + bundle.internalizedAssets = sharedInternalizedAssets; + bundleId = bundleGraph.addNode(bundle); + bundles.set(key, bundleId); + } else { + bundle = (0, _nullthrows().default)(bundleGraph.getNode(bundleId)); + (0, _assert().default)(bundle !== 'root'); + } + bundle.assets.add(asset); + bundle.size += asset.stats.size; + assignInlineConstants(asset, bundle); + for (let sourceBundleId of sourceBundles) { + if (bundleId !== sourceBundleId) { + bundleGraph.addEdge(sourceBundleId, bundleId); + } + } + dependencyBundleGraph.addNodeByContentKeyIfNeeded(String(bundleId), { + value: bundle, + type: 'bundle' + }); + } else if (config.disableSharedBundles === true || reachableArray.length <= config.minBundles) { + for (let root of reachableArray) { + addAssetToBundleRoot(asset, root); + } + } + } + let manualSharedBundleIds = new Set([...manualSharedMap.values()]); + // Step split manual shared bundles for those that have the "split" property set + let remainderMap = new (_utils().DefaultMap)(() => []); + for (let id of manualSharedMap.values()) { + let manualBundle = bundleGraph.getNode(id); + (0, _assert().default)(manualBundle !== 'root' && manualBundle != null); + if (manualBundle.sourceBundles.size > 0) { + var _manualAssetToConfig$; + let firstSourceBundle = (0, _nullthrows().default)(bundleGraph.getNode([...manualBundle.sourceBundles][0])); + (0, _assert().default)(firstSourceBundle !== 'root'); + let firstAsset = [...manualBundle.assets][0]; + let manualSharedObject = manualAssetToConfig.get(firstAsset); + (0, _assert().default)(manualSharedObject != null); + let modNum = (_manualAssetToConfig$ = manualAssetToConfig.get(firstAsset)) === null || _manualAssetToConfig$ === void 0 ? void 0 : _manualAssetToConfig$.split; + if (modNum != null) { + for (let a of [...manualBundle.assets]) { + let numRep = getBigIntFromContentKey(a.id); + // $FlowFixMe Flow doesn't know about BigInt + let r = Number(numRep % BigInt(modNum)); + remainderMap.get(r).push(a); + } + for (let i = 1; i < [...remainderMap.keys()].length; i++) { + let bundle = createBundle({ + uniqueKey: manualSharedObject.name + firstSourceBundle.type + i, + target: firstSourceBundle.target, + type: firstSourceBundle.type, + env: firstSourceBundle.env, + manualSharedBundle: manualSharedObject.name + }); + bundle.sourceBundles = manualBundle.sourceBundles; + bundle.internalizedAssets = manualBundle.internalizedAssets; + let bundleId = bundleGraph.addNode(bundle); + manualSharedBundleIds.add(bundleId); + for (let sourceBundleId of manualBundle.sourceBundles) { + if (bundleId !== sourceBundleId) { + bundleGraph.addEdge(sourceBundleId, bundleId); + } + } + for (let sp of remainderMap.get(i)) { + bundle.assets.add(sp); + bundle.size += sp.stats.size; + manualBundle.assets.delete(sp); + manualBundle.size -= sp.stats.size; + } + } + } + } + } + + // Step insert constant modules into manual shared bundles. + // We have to do this separately as they're the only case where a single asset can + // match multiple MSB's + for (let [asset, msbs] of constantModuleToMSB.entries()) { + for (let manualSharedObject of msbs) { + let bundleId = manualSharedMap.get(manualSharedObject.name + ',js'); + if (bundleId == null) continue; + let bundle = (0, _nullthrows().default)(bundleGraph.getNode(bundleId)); + (0, _assert().default)(bundle != null && bundle !== 'root', 'We tried to use the root incorrectly'); + if (!bundle.assets.has(asset)) { + bundle.assets.add(asset); + bundle.size += asset.stats.size; + } + } + } + + // Step Merge Share Bundles: Merge any shared bundles under the minimum bundle size back into + // their source bundles, and remove the bundle. + // We should include "bundle reuse" as shared bundles that may be removed but the bundle itself would have to be retained + for (let [bundleNodeId, bundle] of bundleGraph.nodes.entries()) { + if (!bundle || bundle === 'root') continue; + if (bundle.sourceBundles.size > 0 && bundle.mainEntryAsset == null && bundle.size < config.minBundleSize && !manualSharedBundleIds.has(bundleNodeId)) { + removeBundle(bundleGraph, bundleNodeId, assetReference); + } + } + let modifiedSourceBundles = new Set(); + + // Step Remove Shared Bundles: Remove shared bundles from bundle groups that hit the parallel request limit. + if (config.disableSharedBundles === false) { + for (let bundleGroupId of bundleGraph.getNodeIdsConnectedFrom(rootNodeId)) { + // Find shared bundles in this bundle group. + let bundleId = bundleGroupId; + + // We should include "bundle reuse" as shared bundles that may be removed but the bundle itself would have to be retained + let bundleIdsInGroup = getBundlesForBundleGroup(bundleId); //get all bundlegrups this bundle is an ancestor of + + // Filter out inline assests as they should not contribute to PRL + let numBundlesContributingToPRL = bundleIdsInGroup.reduce((count, b) => { + let bundle = (0, _nullthrows().default)(bundleGraph.getNode(b)); + (0, _assert().default)(bundle !== 'root'); + return count + (bundle.bundleBehavior !== 'inline'); + }, 0); + if (numBundlesContributingToPRL > config.maxParallelRequests) { + let sharedBundleIdsInBundleGroup = bundleIdsInGroup.filter(b => { + let bundle = (0, _nullthrows().default)(bundleGraph.getNode(b)); + // shared bundles must have source bundles, we could have a bundle + // connected to another bundle that isnt a shared bundle, so check + return bundle !== 'root' && bundle.sourceBundles.size > 0 && bundleId != b && !manualSharedBundleIds.has(b); + }); + + // Sort the bundles so the smallest ones are removed first. + let sharedBundlesInGroup = sharedBundleIdsInBundleGroup.map(id => ({ + id, + bundle: (0, _nullthrows().default)(bundleGraph.getNode(id)) + })).map(({ + id, + bundle + }) => { + // For Flow + (0, _assert().default)(bundle !== 'root'); + return { + id, + bundle + }; + }).sort((a, b) => b.bundle.size - a.bundle.size); + + // Remove bundles until the bundle group is within the parallel request limit. + while (sharedBundlesInGroup.length > 0 && numBundlesContributingToPRL > config.maxParallelRequests) { + let bundleTuple = sharedBundlesInGroup.pop(); + let bundleToRemove = bundleTuple.bundle; + let bundleIdToRemove = bundleTuple.id; + //TODO add integration test where bundles in bunlde group > max parallel request limit & only remove a couple shared bundles + // but total # bundles still exceeds limit due to non shared bundles + + // Add all assets in the shared bundle into the source bundles that are within this bundle group. + let sourceBundles = [...bundleToRemove.sourceBundles].filter(b => bundleIdsInGroup.includes(b)); + for (let sourceBundleId of sourceBundles) { + let sourceBundle = (0, _nullthrows().default)(bundleGraph.getNode(sourceBundleId)); + (0, _assert().default)(sourceBundle !== 'root'); + modifiedSourceBundles.add(sourceBundle); + bundleToRemove.sourceBundles.delete(sourceBundleId); + for (let asset of bundleToRemove.assets) { + addAssetToBundleRoot(asset, (0, _nullthrows().default)(sourceBundle.mainEntryAsset)); + } + //This case is specific to reused bundles, which can have shared bundles attached to it + for (let childId of bundleGraph.getNodeIdsConnectedFrom(bundleIdToRemove)) { + let child = bundleGraph.getNode(childId); + (0, _assert().default)(child !== 'root' && child != null); + child.sourceBundles.add(sourceBundleId); + bundleGraph.addEdge(sourceBundleId, childId); + } + // needs to add test case where shared bundle is removed from ONE bundlegroup but not from the whole graph! + // Remove the edge from this bundle group to the shared bundle. + // If there is now only a single bundle group that contains this bundle, + // merge it into the remaining source bundles. If it is orphaned entirely, remove it. + let incomingNodeCount = bundleGraph.getNodeIdsConnectedTo(bundleIdToRemove).length; + if (incomingNodeCount <= 2 && + //Never fully remove reused bundles + bundleToRemove.mainEntryAsset == null) { + // If one bundle group removes a shared bundle, but the other *can* keep it, still remove because that shared bundle is pointless (only one source bundle) + removeBundle(bundleGraph, bundleIdToRemove, assetReference); + // Stop iterating through bundleToRemove's sourceBundles as the bundle has been removed. + break; + } else { + bundleGraph.removeEdge(sourceBundleId, bundleIdToRemove); + } + } + numBundlesContributingToPRL--; + } + } + } + } + function getBigIntFromContentKey(contentKey) { + let b = Buffer.alloc(64); + b.write(contentKey); + // $FlowFixMe Flow doesn't have BigInt types in this version + return b.readBigInt64BE(); + } + // Fix asset order in source bundles as they are likely now incorrect after shared bundle deletion + if (modifiedSourceBundles.size > 0) { + let assetOrderMap = new Map(assets.map((a, index) => [a, index])); + for (let bundle of modifiedSourceBundles) { + bundle.assets = new Set([...bundle.assets].sort((a, b) => { + let aIndex = (0, _nullthrows().default)(assetOrderMap.get(a)); + let bIndex = (0, _nullthrows().default)(assetOrderMap.get(b)); + return aIndex - bIndex; + })); + } + } + function deleteBundle(bundleRoot) { + bundleGraph.removeNode((0, _nullthrows().default)(bundles.get(bundleRoot.id))); + bundleRoots.delete(bundleRoot); + bundles.delete(bundleRoot.id); + let bundleRootId = assetToBundleRootNodeId.get(bundleRoot); + if (bundleRootId != null && bundleRootGraph.hasNode(bundleRootId)) { + bundleRootGraph.removeNode(bundleRootId); + } + } + function getBundlesForBundleGroup(bundleGroupId) { + let bundlesInABundleGroup = []; + bundleGraph.traverse(nodeId => { + bundlesInABundleGroup.push(nodeId); + }, bundleGroupId); + return bundlesInABundleGroup; + } + function getBundleFromBundleRoot(bundleRoot) { + let bundle = bundleGraph.getNode((0, _nullthrows().default)(bundleRoots.get(bundleRoot))[0]); + (0, _assert().default)(bundle !== 'root' && bundle != null); + return bundle; + } + function addAssetToBundleRoot(asset, bundleRoot) { + let [bundleId, bundleGroupId] = (0, _nullthrows().default)(bundleRoots.get(bundleRoot)); + let bundle = (0, _nullthrows().default)(bundleGraph.getNode(bundleId)); + (0, _assert().default)(bundle !== 'root'); + if (asset.type !== bundle.type) { + let bundleGroup = (0, _nullthrows().default)(bundleGraph.getNode(bundleGroupId)); + (0, _assert().default)(bundleGroup !== 'root'); + let key = (0, _nullthrows().default)(bundleGroup.mainEntryAsset).id + '.' + asset.type; + let typeChangeBundleId = bundles.get(key); + if (typeChangeBundleId == null) { + let typeChangeBundle = createBundle({ + uniqueKey: key, + needsStableName: bundle.needsStableName, + bundleBehavior: bundle.bundleBehavior, + type: asset.type, + target: bundle.target, + env: bundle.env + }); + typeChangeBundleId = bundleGraph.addNode(typeChangeBundle); + bundleGraph.addEdge(bundleId, typeChangeBundleId); + bundles.set(key, typeChangeBundleId); + bundle = typeChangeBundle; + } else { + bundle = (0, _nullthrows().default)(bundleGraph.getNode(typeChangeBundleId)); + (0, _assert().default)(bundle !== 'root'); + } + } + bundle.assets.add(asset); + bundle.size += asset.stats.size; + assignInlineConstants(asset, bundle); + } + function removeBundle(bundleGraph, bundleId, assetReference) { + let bundle = (0, _nullthrows().default)(bundleGraph.getNode(bundleId)); + (0, _assert().default)(bundle !== 'root'); + for (let asset of bundle.assets) { + assetReference.set(asset, assetReference.get(asset).filter(t => !t.includes(bundle))); + for (let sourceBundleId of bundle.sourceBundles) { + let sourceBundle = (0, _nullthrows().default)(bundleGraph.getNode(sourceBundleId)); + (0, _assert().default)(sourceBundle !== 'root'); + addAssetToBundleRoot(asset, (0, _nullthrows().default)(sourceBundle.mainEntryAsset)); + } + } + bundleGraph.removeNode(bundleId); + } + return { + assets, + bundleGraph, + dependencyBundleGraph, + bundleGroupBundleIds, + assetReference, + manualAssetToBundle + }; +} +const CONFIG_SCHEMA = { + type: 'object', + properties: { + http: { + type: 'number', + enum: Object.keys(HTTP_OPTIONS).map(k => Number(k)) + }, + manualSharedBundles: { + type: 'array', + items: { + type: 'object', + properties: { + name: { + type: 'string' + }, + assets: { + type: 'array', + items: { + type: 'string' + } + }, + types: { + type: 'array', + items: { + type: 'string' + } + }, + root: { + type: 'string' + }, + split: { + type: 'number' + } + }, + required: ['name', 'assets'], + additionalProperties: false + } + }, + minBundles: { + type: 'number' + }, + minBundleSize: { + type: 'number' + }, + maxParallelRequests: { + type: 'number' + }, + disableSharedBundles: { + type: 'boolean' + } + }, + additionalProperties: false +}; +function createBundle(opts) { + if (opts.asset == null) { + return { + uniqueKey: opts.uniqueKey, + assets: new Set(), + mainEntryAsset: null, + size: 0, + sourceBundles: new Set(), + target: opts.target, + type: (0, _nullthrows().default)(opts.type), + env: (0, _nullthrows().default)(opts.env), + needsStableName: Boolean(opts.needsStableName), + bundleBehavior: opts.bundleBehavior, + manualSharedBundle: opts.manualSharedBundle + }; + } + let asset = (0, _nullthrows().default)(opts.asset); + return { + uniqueKey: opts.uniqueKey, + assets: new Set([asset]), + mainEntryAsset: asset, + size: asset.stats.size, + sourceBundles: new Set(), + target: opts.target, + type: opts.type ?? asset.type, + env: opts.env ?? asset.env, + needsStableName: Boolean(opts.needsStableName), + bundleBehavior: opts.bundleBehavior ?? asset.bundleBehavior, + manualSharedBundle: opts.manualSharedBundle + }; +} +function resolveModeConfig(config, mode) { + let generalConfig = {}; + let modeConfig = {}; + for (const key of Object.keys(config)) { + if (key === 'development' || key === 'production') { + if (key === mode) { + modeConfig = config[key]; + } + } else { + generalConfig[key] = config[key]; + } + } + + // $FlowFixMe Not sure how to convince flow here... + return { + ...generalConfig, + ...modeConfig + }; +} +async function loadBundlerConfig(config, options, logger) { + let conf = await config.getConfig([], { + packageKey: '@parcel/bundler-default' + }); + if (!conf) { + const modDefault = { + ...HTTP_OPTIONS['2'], + projectRoot: options.projectRoot + }; + return modDefault; + } + (0, _assert().default)((conf === null || conf === void 0 ? void 0 : conf.contents) != null); + let modeConfig = resolveModeConfig(conf.contents, options.mode); + + // minBundles will be ignored if shared bundles are disabled + if (modeConfig.minBundles != null && modeConfig.disableSharedBundles === true) { + logger.warn({ + origin: '@parcel/bundler-default', + message: `The value of "${modeConfig.minBundles}" set for minBundles will not be used as shared bundles have been disabled` + }); + } + + // minBundleSize will be ignored if shared bundles are disabled + if (modeConfig.minBundleSize != null && modeConfig.disableSharedBundles === true) { + logger.warn({ + origin: '@parcel/bundler-default', + message: `The value of "${modeConfig.minBundleSize}" set for minBundleSize will not be used as shared bundles have been disabled` + }); + } + + // maxParallelRequests will be ignored if shared bundles are disabled + if (modeConfig.maxParallelRequests != null && modeConfig.disableSharedBundles === true) { + logger.warn({ + origin: '@parcel/bundler-default', + message: `The value of "${modeConfig.maxParallelRequests}" set for maxParallelRequests will not be used as shared bundles have been disabled` + }); + } + if (modeConfig.manualSharedBundles) { + let nameArray = modeConfig.manualSharedBundles.map(a => a.name); + let nameSet = new Set(nameArray); + (0, _assert().default)(nameSet.size == nameArray.length, 'The name field must be unique for property manualSharedBundles'); + } + _utils().validateSchema.diagnostic(CONFIG_SCHEMA, { + data: modeConfig, + source: await options.inputFS.readFile(conf.filePath, 'utf8'), + filePath: conf.filePath, + prependKey: `/${(0, _diagnostic().encodeJSONKeyComponent)('@parcel/bundler-default')}` + }, '@parcel/bundler-default', 'Invalid config for @parcel/bundler-default'); + let http = modeConfig.http ?? 2; + let defaults = HTTP_OPTIONS[http]; + return { + minBundles: modeConfig.minBundles ?? defaults.minBundles, + minBundleSize: modeConfig.minBundleSize ?? defaults.minBundleSize, + maxParallelRequests: modeConfig.maxParallelRequests ?? defaults.maxParallelRequests, + projectRoot: options.projectRoot, + disableSharedBundles: modeConfig.disableSharedBundles ?? defaults.disableSharedBundles, + manualSharedBundles: modeConfig.manualSharedBundles ?? defaults.manualSharedBundles + }; +} +function getEntryByTarget(bundleGraph) { + // Find entries from assetGraph per target + let targets = new (_utils().DefaultMap)(() => new Map()); + bundleGraph.traverse({ + enter(node, context, actions) { + if (node.type !== 'asset') { + return node; + } + (0, _assert().default)(context != null && context.type === 'dependency' && context.value.isEntry && context.value.target != null); + targets.get(context.value.target.distDir).set(node.value, context.value); + actions.skipChildren(); + return node; + } + }); + return targets; +} \ No newline at end of file diff --git a/node_modules/@parcel/bundler-default/package.json b/node_modules/@parcel/bundler-default/package.json new file mode 100644 index 00000000..491fcea2 --- /dev/null +++ b/node_modules/@parcel/bundler-default/package.json @@ -0,0 +1,31 @@ +{ + "name": "@parcel/bundler-default", + "version": "2.13.3", + "license": "MIT", + "publishConfig": { + "access": "public" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "repository": { + "type": "git", + "url": "https://github.com/parcel-bundler/parcel.git" + }, + "main": "lib/DefaultBundler.js", + "source": "src/DefaultBundler.js", + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.13.3" + }, + "dependencies": { + "@parcel/diagnostic": "2.13.3", + "@parcel/graph": "3.3.3", + "@parcel/plugin": "2.13.3", + "@parcel/rust": "2.13.3", + "@parcel/utils": "2.13.3", + "nullthrows": "^1.1.1" + }, + "gitHead": "d19b1f6bdb05eb5a3085f44daae15c0fe2709ab9" +} diff --git a/node_modules/@parcel/bundler-default/src/DefaultBundler.js b/node_modules/@parcel/bundler-default/src/DefaultBundler.js new file mode 100644 index 00000000..f5e0d498 --- /dev/null +++ b/node_modules/@parcel/bundler-default/src/DefaultBundler.js @@ -0,0 +1,1838 @@ +// @flow strict-local +import type { + Asset, + Bundle as LegacyBundle, + BundleBehavior, + BundleGroup, + Dependency, + Environment, + Config, + MutableBundleGraph, + PluginOptions, + Target, + BuildMode, + PluginLogger, +} from '@parcel/types'; +import type {NodeId} from '@parcel/graph'; +import type {SchemaEntity} from '@parcel/utils'; +import {ContentGraph, Graph, BitSet, ALL_EDGE_TYPES} from '@parcel/graph'; + +import invariant from 'assert'; +import {Bundler} from '@parcel/plugin'; +import {validateSchema, DefaultMap, globToRegex} from '@parcel/utils'; +import nullthrows from 'nullthrows'; +import path from 'path'; +import {encodeJSONKeyComponent} from '@parcel/diagnostic'; + +type Glob = string; + +type ManualSharedBundles = Array<{| + name: string, + assets: Array, + types?: Array, + root?: string, + split?: number, +|}>; + +type BaseBundlerConfig = {| + http?: number, + minBundles?: number, + minBundleSize?: number, + maxParallelRequests?: number, + disableSharedBundles?: boolean, + manualSharedBundles?: ManualSharedBundles, +|}; + +type BundlerConfig = {| + [mode: BuildMode]: BaseBundlerConfig, +|} & BaseBundlerConfig; + +type ResolvedBundlerConfig = {| + minBundles: number, + minBundleSize: number, + maxParallelRequests: number, + projectRoot: string, + disableSharedBundles: boolean, + manualSharedBundles: ManualSharedBundles, +|}; + +// Default options by http version. +const HTTP_OPTIONS = { + '1': { + minBundles: 1, + manualSharedBundles: [], + minBundleSize: 30000, + maxParallelRequests: 6, + disableSharedBundles: false, + }, + '2': { + minBundles: 1, + manualSharedBundles: [], + minBundleSize: 20000, + maxParallelRequests: 25, + disableSharedBundles: false, + }, +}; + +/* BundleRoot - An asset that is the main entry of a Bundle. */ +type BundleRoot = Asset; +export type Bundle = {| + uniqueKey: ?string, + assets: Set, + internalizedAssets?: BitSet, + bundleBehavior?: ?BundleBehavior, + needsStableName: boolean, + mainEntryAsset: ?Asset, + size: number, + sourceBundles: Set, + target: Target, + env: Environment, + type: string, + manualSharedBundle: ?string, // for naming purposes +|}; + +const dependencyPriorityEdges = { + sync: 1, + parallel: 2, + lazy: 3, +}; + +type DependencyBundleGraph = ContentGraph< + | {| + value: Bundle, + type: 'bundle', + |} + | {| + value: Dependency, + type: 'dependency', + |}, + number, +>; +// IdealGraph is the structure we will pass to decorate, +// which mutates the assetGraph into the bundleGraph we would +// expect from default bundler +type IdealGraph = {| + assets: Array, + dependencyBundleGraph: DependencyBundleGraph, + bundleGraph: Graph, + bundleGroupBundleIds: Set, + assetReference: DefaultMap>, + manualAssetToBundle: Map, +|}; + +/** + * + * The Bundler works by creating an IdealGraph, which contains a BundleGraph that models bundles + * connected to other bundles by what references them, and thus models BundleGroups. + * + * First, we enter `bundle({bundleGraph, config})`. Here, "bundleGraph" is actually just the + * assetGraph turned into a type `MutableBundleGraph`, which will then be mutated in decorate, + * and turned into what we expect the bundleGraph to be as per the old (default) bundler structure + * & what the rest of Parcel expects a BundleGraph to be. + * + * `bundle({bundleGraph, config})` First gets a Mapping of target to entries, In most cases there is + * only one target, and one or more entries. (Targets are pertinent in monorepos or projects where you + * will have two or more distDirs, or output folders.) Then calls create IdealGraph and Decorate per target. + * + */ +export default (new Bundler({ + loadConfig({config, options, logger}) { + return loadBundlerConfig(config, options, logger); + }, + + bundle({bundleGraph, config, logger}) { + let targetMap = getEntryByTarget(bundleGraph); // Organize entries by target output folder/ distDir + let graphs = []; + for (let entries of targetMap.values()) { + // Create separate bundleGraphs per distDir + graphs.push(createIdealGraph(bundleGraph, config, entries, logger)); + } + for (let g of graphs) { + decorateLegacyGraph(g, bundleGraph); //mutate original graph + } + }, + optimize() {}, +}): Bundler); + +function decorateLegacyGraph( + idealGraph: IdealGraph, + bundleGraph: MutableBundleGraph, +): void { + let idealBundleToLegacyBundle: Map = new Map(); + + let { + bundleGraph: idealBundleGraph, + dependencyBundleGraph, + bundleGroupBundleIds, + manualAssetToBundle, + } = idealGraph; + let entryBundleToBundleGroup: Map = new Map(); + // Step Create Bundles: Create bundle groups, bundles, and shared bundles and add assets to them + for (let [bundleNodeId, idealBundle] of idealBundleGraph.nodes.entries()) { + if (!idealBundle || idealBundle === 'root') continue; + let entryAsset = idealBundle.mainEntryAsset; + let bundleGroups = []; + let bundleGroup; + let bundle; + + if (bundleGroupBundleIds.has(bundleNodeId)) { + invariant( + idealBundle.manualSharedBundle == null, + 'Unstable Manual Shared Bundle feature is processing a manualSharedBundle as a BundleGroup', + ); + let dependencies = dependencyBundleGraph + .getNodeIdsConnectedTo( + dependencyBundleGraph.getNodeIdByContentKey(String(bundleNodeId)), + ALL_EDGE_TYPES, + ) + .map(nodeId => { + let dependency = nullthrows(dependencyBundleGraph.getNode(nodeId)); + invariant(dependency.type === 'dependency'); + return dependency.value; + }); + invariant( + entryAsset != null, + 'Processing a bundleGroup with no entry asset', + ); + for (let dependency of dependencies) { + bundleGroup = bundleGraph.createBundleGroup( + dependency, + idealBundle.target, + ); + bundleGroups.push(bundleGroup); + } + invariant(bundleGroup); + entryBundleToBundleGroup.set(bundleNodeId, bundleGroup); + + bundle = nullthrows( + bundleGraph.createBundle({ + entryAsset: nullthrows(entryAsset), + needsStableName: idealBundle.needsStableName, + bundleBehavior: idealBundle.bundleBehavior, + target: idealBundle.target, + manualSharedBundle: idealBundle.manualSharedBundle, + }), + ); + + bundleGraph.addBundleToBundleGroup(bundle, bundleGroup); + } else if ( + idealBundle.sourceBundles.size > 0 && + !idealBundle.mainEntryAsset + ) { + let uniqueKey = + idealBundle.uniqueKey != null + ? idealBundle.uniqueKey + : [...idealBundle.assets].map(asset => asset.id).join(','); + + bundle = nullthrows( + bundleGraph.createBundle({ + uniqueKey, + needsStableName: idealBundle.needsStableName, + bundleBehavior: idealBundle.bundleBehavior, + type: idealBundle.type, + target: idealBundle.target, + env: idealBundle.env, + manualSharedBundle: idealBundle.manualSharedBundle, + }), + ); + } else if (idealBundle.uniqueKey != null) { + bundle = nullthrows( + bundleGraph.createBundle({ + uniqueKey: idealBundle.uniqueKey, + needsStableName: idealBundle.needsStableName, + bundleBehavior: idealBundle.bundleBehavior, + type: idealBundle.type, + target: idealBundle.target, + env: idealBundle.env, + manualSharedBundle: idealBundle.manualSharedBundle, + }), + ); + } else { + invariant(entryAsset != null); + bundle = nullthrows( + bundleGraph.createBundle({ + entryAsset, + needsStableName: idealBundle.needsStableName, + bundleBehavior: idealBundle.bundleBehavior, + target: idealBundle.target, + manualSharedBundle: idealBundle.manualSharedBundle, + }), + ); + } + + idealBundleToLegacyBundle.set(idealBundle, bundle); + + for (let asset of idealBundle.assets) { + bundleGraph.addAssetToBundle(asset, bundle); + } + } + // Step Internalization: Internalize dependencies for bundles + for (let idealBundle of idealBundleGraph.nodes) { + if (!idealBundle || idealBundle === 'root') continue; + let bundle = nullthrows(idealBundleToLegacyBundle.get(idealBundle)); + if (idealBundle.internalizedAssets) { + idealBundle.internalizedAssets.forEach(internalized => { + let incomingDeps = bundleGraph.getIncomingDependencies( + idealGraph.assets[internalized], + ); + for (let incomingDep of incomingDeps) { + if ( + incomingDep.priority === 'lazy' && + incomingDep.specifierType !== 'url' && + bundle.hasDependency(incomingDep) + ) { + bundleGraph.internalizeAsyncDependency(bundle, incomingDep); + } + } + }); + } + } + // Unstable Manual Shared Bundles + // NOTE: This only works under the assumption that manual shared bundles would have + // always already been loaded before the bundle that requires internalization. + for (let manualSharedAsset of manualAssetToBundle.keys()) { + let incomingDeps = bundleGraph.getIncomingDependencies(manualSharedAsset); + for (let incomingDep of incomingDeps) { + if ( + incomingDep.priority === 'lazy' && + incomingDep.specifierType !== 'url' + ) { + let bundles = bundleGraph.getBundlesWithDependency(incomingDep); + for (let bundle of bundles) { + bundleGraph.internalizeAsyncDependency(bundle, incomingDep); + } + } + } + } + + // Step Add to BundleGroups: Add bundles to their bundle groups + idealBundleGraph.traverse((nodeId, _, actions) => { + let node = idealBundleGraph.getNode(nodeId); + if (node === 'root') { + return; + } + actions.skipChildren(); + + let outboundNodeIds = idealBundleGraph.getNodeIdsConnectedFrom(nodeId); + let entryBundle = nullthrows(idealBundleGraph.getNode(nodeId)); + invariant(entryBundle !== 'root'); + let legacyEntryBundle = nullthrows( + idealBundleToLegacyBundle.get(entryBundle), + ); + + for (let id of outboundNodeIds) { + let siblingBundle = nullthrows(idealBundleGraph.getNode(id)); + invariant(siblingBundle !== 'root'); + let legacySiblingBundle = nullthrows( + idealBundleToLegacyBundle.get(siblingBundle), + ); + bundleGraph.createBundleReference(legacyEntryBundle, legacySiblingBundle); + } + }); + + // Step References: Add references to all bundles + for (let [asset, references] of idealGraph.assetReference) { + for (let [dependency, bundle] of references) { + let legacyBundle = nullthrows(idealBundleToLegacyBundle.get(bundle)); + bundleGraph.createAssetReference(dependency, asset, legacyBundle); + } + } + + for (let {from, to} of idealBundleGraph.getAllEdges()) { + let sourceBundle = nullthrows(idealBundleGraph.getNode(from)); + if (sourceBundle === 'root') { + continue; + } + invariant(sourceBundle !== 'root'); + + let legacySourceBundle = nullthrows( + idealBundleToLegacyBundle.get(sourceBundle), + ); + + let targetBundle = nullthrows(idealBundleGraph.getNode(to)); + if (targetBundle === 'root') { + continue; + } + invariant(targetBundle !== 'root'); + let legacyTargetBundle = nullthrows( + idealBundleToLegacyBundle.get(targetBundle), + ); + bundleGraph.createBundleReference(legacySourceBundle, legacyTargetBundle); + } +} + +function createIdealGraph( + assetGraph: MutableBundleGraph, + config: ResolvedBundlerConfig, + entries: Map, + logger: PluginLogger, +): IdealGraph { + // Asset to the bundle and group it's an entry of + let bundleRoots: Map = new Map(); + let bundles: Map = new Map(); + let dependencyBundleGraph: DependencyBundleGraph = new ContentGraph(); + let assetReference: DefaultMap< + Asset, + Array<[Dependency, Bundle]>, + > = new DefaultMap(() => []); + + // A Graph of Bundles and a root node (dummy string), which models only Bundles, and connections to their + // referencing Bundle. There are no actual BundleGroup nodes, just bundles that take on that role. + let bundleGraph: Graph = new Graph(); + let stack: Array<[BundleRoot, NodeId]> = []; + + let bundleRootEdgeTypes = { + parallel: 1, + lazy: 2, + }; + // Graph that models bundleRoots, with parallel & async deps only to inform reachability + let bundleRootGraph: Graph< + number, // asset index + $Values, + > = new Graph(); + let assetToBundleRootNodeId = new Map(); + + let bundleGroupBundleIds: Set = new Set(); + + let bundleGraphRootNodeId = nullthrows(bundleGraph.addNode('root')); + bundleGraph.setRootNodeId(bundleGraphRootNodeId); + // Step Create Entry Bundles + for (let [asset, dependency] of entries) { + let bundle = createBundle({ + asset, + target: nullthrows(dependency.target), + needsStableName: dependency.isEntry, + }); + let nodeId = bundleGraph.addNode(bundle); + bundles.set(asset.id, nodeId); + bundleRoots.set(asset, [nodeId, nodeId]); + bundleGraph.addEdge(bundleGraphRootNodeId, nodeId); + + dependencyBundleGraph.addEdge( + dependencyBundleGraph.addNodeByContentKeyIfNeeded(dependency.id, { + value: dependency, + type: 'dependency', + }), + dependencyBundleGraph.addNodeByContentKeyIfNeeded(String(nodeId), { + value: bundle, + type: 'bundle', + }), + dependencyPriorityEdges[dependency.priority], + ); + bundleGroupBundleIds.add(nodeId); + } + + let assets = []; + let assetToIndex = new Map(); + + function makeManualAssetToConfigLookup() { + let manualAssetToConfig = new Map(); + let constantModuleToMSB = new DefaultMap(() => []); + + if (config.manualSharedBundles.length === 0) { + return {manualAssetToConfig, constantModuleToMSB}; + } + + let parentsToConfig = new DefaultMap(() => []); + + for (let c of config.manualSharedBundles) { + if (c.root != null) { + parentsToConfig.get(path.join(config.projectRoot, c.root)).push(c); + } + } + let numParentsToFind = parentsToConfig.size; + let configToParentAsset = new Map(); + + assetGraph.traverse((node, _, actions) => { + if (node.type === 'asset' && parentsToConfig.has(node.value.filePath)) { + for (let c of parentsToConfig.get(node.value.filePath)) { + configToParentAsset.set(c, node.value); + } + + numParentsToFind--; + + if (numParentsToFind === 0) { + // If we've found all parents we can stop traversal + actions.stop(); + } + } + }); + + // Process in reverse order so earlier configs take precedence + for (let c of config.manualSharedBundles.reverse()) { + if (c.root != null && !configToParentAsset.has(c)) { + logger.warn({ + origin: '@parcel/bundler-default', + message: `Manual shared bundle "${c.name}" skipped, no root asset found`, + }); + continue; + } + + let parentAsset = configToParentAsset.get(c); + let assetRegexes = c.assets.map(glob => globToRegex(glob)); + + assetGraph.traverse((node, _, actions) => { + if ( + node.type === 'asset' && + (!Array.isArray(c.types) || c.types.includes(node.value.type)) + ) { + let projectRelativePath = path.relative( + config.projectRoot, + node.value.filePath, + ); + if (!assetRegexes.some(regex => regex.test(projectRelativePath))) { + return; + } + + // We track all matching MSB's for constant modules as they are never duplicated + // and need to be assigned to all matching bundles + if (node.value.meta.isConstantModule === true) { + constantModuleToMSB.get(node.value).push(c); + } + manualAssetToConfig.set(node.value, c); + return; + } + + if ( + node.type === 'dependency' && + node.value.priority === 'lazy' && + parentAsset + ) { + // Don't walk past the bundle group assets + actions.skipChildren(); + } + }, parentAsset); + } + + return {manualAssetToConfig, constantModuleToMSB}; + } + + //Manual is a map of the user-given name to the bundle node Id that corresponds to ALL the assets that match any glob in that user-specified array + let manualSharedMap: Map = new Map(); + // May need a map to be able to look up NON- bundle root assets which need special case instructions + // Use this when placing assets into bundles, to avoid duplication + let manualAssetToBundle: Map = new Map(); + let {manualAssetToConfig, constantModuleToMSB} = + makeManualAssetToConfigLookup(); + let manualBundleToInternalizedAsset: DefaultMap< + NodeId, + Array, + > = new DefaultMap(() => []); + + /** + * Step Create Bundles: Traverse the assetGraph (aka MutableBundleGraph) and create bundles + * for asset type changes, parallel, inline, and async or lazy dependencies, + * adding only that asset to each bundle, not its entire subgraph. + */ + assetGraph.traverse( + { + enter(node, context, actions) { + if (node.type === 'asset') { + if ( + context?.type === 'dependency' && + context?.value.isEntry && + !entries.has(node.value) + ) { + // Skip whole subtrees of other targets by skipping those entries + actions.skipChildren(); + return node; + } + assetToIndex.set(node.value, assets.length); + assets.push(node.value); + + let bundleIdTuple = bundleRoots.get(node.value); + if (bundleIdTuple && bundleIdTuple[0] === bundleIdTuple[1]) { + // Push to the stack (only) when a new bundle is created + stack.push([node.value, bundleIdTuple[0]]); + } else if (bundleIdTuple) { + // Otherwise, push on the last bundle that marks the start of a BundleGroup + stack.push([node.value, stack[stack.length - 1][1]]); + } + } else if (node.type === 'dependency') { + if (context == null) { + return node; + } + let dependency = node.value; + + invariant(context?.type === 'asset'); + + let assets = assetGraph.getDependencyAssets(dependency); + if (assets.length === 0) { + return node; + } + + for (let childAsset of assets) { + let bundleId = bundles.get(childAsset.id); + let bundle; + + // MSB Step 1: Match glob on filepath and type for any asset + let manualSharedBundleKey; + let manualSharedObject = manualAssetToConfig.get(childAsset); + + if (manualSharedObject) { + // MSB Step 2: Generate a key for which to look up this manual bundle with + manualSharedBundleKey = + manualSharedObject.name + ',' + childAsset.type; + } + + if ( + // MSB Step 3: If a bundle for these globs already exsits, use it + manualSharedBundleKey != null && + manualSharedMap.has(manualSharedBundleKey) + ) { + bundleId = nullthrows(manualSharedMap.get(manualSharedBundleKey)); + } + if ( + dependency.priority === 'lazy' || + childAsset.bundleBehavior === 'isolated' // An isolated Dependency, or Bundle must contain all assets it needs to load. + ) { + if (bundleId == null) { + let firstBundleGroup = nullthrows( + bundleGraph.getNode(stack[0][1]), + ); + invariant(firstBundleGroup !== 'root'); + bundle = createBundle({ + asset: childAsset, + target: firstBundleGroup.target, + needsStableName: + dependency.bundleBehavior === 'inline' || + childAsset.bundleBehavior === 'inline' + ? false + : dependency.isEntry || dependency.needsStableName, + bundleBehavior: + dependency.bundleBehavior ?? childAsset.bundleBehavior, + }); + bundleId = bundleGraph.addNode(bundle); + bundles.set(childAsset.id, bundleId); + bundleRoots.set(childAsset, [bundleId, bundleId]); + bundleGroupBundleIds.add(bundleId); + bundleGraph.addEdge(bundleGraphRootNodeId, bundleId); + if (manualSharedObject) { + // MSB Step 4: If this was the first instance of a match, mark mainAsset for internalization + // since MSBs should not have main entry assets + manualBundleToInternalizedAsset + .get(bundleId) + .push(childAsset); + } + } else { + bundle = nullthrows(bundleGraph.getNode(bundleId)); + invariant(bundle !== 'root'); + + if ( + // If this dependency requests isolated, but the bundle is not, + // make the bundle isolated for all uses. + dependency.bundleBehavior === 'isolated' && + bundle.bundleBehavior == null + ) { + bundle.bundleBehavior = dependency.bundleBehavior; + } + } + + dependencyBundleGraph.addEdge( + dependencyBundleGraph.addNodeByContentKeyIfNeeded( + dependency.id, + { + value: dependency, + type: 'dependency', + }, + ), + dependencyBundleGraph.addNodeByContentKeyIfNeeded( + String(bundleId), + { + value: bundle, + type: 'bundle', + }, + ), + dependencyPriorityEdges[dependency.priority], + ); + } else if ( + dependency.priority === 'parallel' || + childAsset.bundleBehavior === 'inline' + ) { + // The referencing bundleRoot is the root of a Bundle that first brings in another bundle (essentially the FIRST parent of a bundle, this may or may not be a bundleGroup) + let [referencingBundleRoot, bundleGroupNodeId] = nullthrows( + stack[stack.length - 1], + ); + let bundleGroup = nullthrows( + bundleGraph.getNode(bundleGroupNodeId), + ); + invariant(bundleGroup !== 'root'); + + let referencingBundleId = nullthrows( + bundleRoots.get(referencingBundleRoot), + )[0]; + let referencingBundle = nullthrows( + bundleGraph.getNode(referencingBundleId), + ); + invariant(referencingBundle !== 'root'); + + if (bundleId == null) { + bundle = createBundle({ + // Bundles created from type changes shouldn't have an entry asset. + asset: childAsset, + type: childAsset.type, + env: childAsset.env, + bundleBehavior: + dependency.bundleBehavior ?? childAsset.bundleBehavior, + target: referencingBundle.target, + needsStableName: + childAsset.bundleBehavior === 'inline' || + dependency.bundleBehavior === 'inline' || + (dependency.priority === 'parallel' && + !dependency.needsStableName) + ? false + : referencingBundle.needsStableName, + }); + bundleId = bundleGraph.addNode(bundle); + } else { + bundle = bundleGraph.getNode(bundleId); + invariant(bundle != null && bundle !== 'root'); + + if ( + // If this dependency requests isolated, but the bundle is not, + // make the bundle isolated for all uses. + dependency.bundleBehavior === 'isolated' && + bundle.bundleBehavior == null + ) { + bundle.bundleBehavior = dependency.bundleBehavior; + } + } + + bundles.set(childAsset.id, bundleId); + + // A bundle can belong to multiple bundlegroups, all the bundle groups of it's + // ancestors, and all async and entry bundles before it are "bundle groups" + // TODO: We may need to track bundles to all bundleGroups it belongs to in the future. + bundleRoots.set(childAsset, [bundleId, bundleGroupNodeId]); + bundleGraph.addEdge(referencingBundleId, bundleId); + + if (bundleId != bundleGroupNodeId) { + dependencyBundleGraph.addEdge( + dependencyBundleGraph.addNodeByContentKeyIfNeeded( + dependency.id, + { + value: dependency, + type: 'dependency', + }, + ), + dependencyBundleGraph.addNodeByContentKeyIfNeeded( + String(bundleId), + { + value: bundle, + type: 'bundle', + }, + ), + dependencyPriorityEdges.parallel, + ); + } + + assetReference.get(childAsset).push([dependency, bundle]); + } else { + bundleId = null; + } + if (manualSharedObject && bundleId != null) { + // MSB Step 5: At this point we've either created or found an existing MSB bundle + // add the asset if it doesn't already have it and set key + + invariant( + bundle !== 'root' && bundle != null && bundleId != null, + ); + + manualAssetToBundle.set(childAsset, bundleId); + + if (!bundle.assets.has(childAsset)) { + // Add asset to bundle + bundle.assets.add(childAsset); + bundle.size += childAsset.stats.size; + } + + bundles.set(childAsset.id, bundleId); + bundleRoots.set(childAsset, [bundleId, bundleId]); + + invariant(manualSharedBundleKey != null); + // Ensure we set key to BundleId so the next glob match uses the appropriate bundle + if (!manualSharedMap.has(manualSharedBundleKey)) { + manualSharedMap.set(manualSharedBundleKey, bundleId); + } + bundle.manualSharedBundle = manualSharedObject.name; + bundle.uniqueKey = manualSharedObject.name + childAsset.type; + } + } + } + return node; + }, + exit(node) { + if (stack[stack.length - 1]?.[0] === node.value) { + stack.pop(); + } + }, + }, + null, + {skipUnusedDependencies: true}, + ); + + // Strip MSBs of entries + for (let [ + nodeId, + internalizedAssets, + ] of manualBundleToInternalizedAsset.entries()) { + let bundle = bundleGraph.getNode(nodeId); + invariant(bundle != null && bundle !== 'root'); + + if (!bundle.internalizedAssets) { + bundle.internalizedAssets = new BitSet(assets.length); + } + for (let asset of internalizedAssets) { + bundle.internalizedAssets.add(nullthrows(assetToIndex.get(asset))); + } + bundle.mainEntryAsset = null; + bundleGroupBundleIds.delete(nodeId); // manual bundles can now act as shared, non-bundle group, should they be non-bundleRoots as well? + } + + /** + * Step Determine Reachability: Determine reachability for every asset from each bundleRoot. + * This is later used to determine which bundles to place each asset in. We build up two + * structures, one traversal each. ReachableRoots to store sync relationships, + * and bundleRootGraph to store the minimal availability through `parallel` and `async` relationships. + * The two graphs, are used to build up ancestorAssets, a structure which holds all availability by + * all means for each asset. + */ + let rootNodeId = bundleRootGraph.addNode(-1); + bundleRootGraph.setRootNodeId(rootNodeId); + + for (let [root] of bundleRoots) { + let nodeId = bundleRootGraph.addNode(nullthrows(assetToIndex.get(root))); + assetToBundleRootNodeId.set(root, nodeId); + if (entries.has(root)) { + bundleRootGraph.addEdge(rootNodeId, nodeId); + } + } + + // reachableRoots is an array of bit sets for each asset. Each bit set + // indicates which bundle roots are reachable from that asset synchronously. + let reachableRoots = []; + for (let i = 0; i < assets.length; i++) { + reachableRoots.push(new BitSet(bundleRootGraph.nodes.length)); + } + + // reachableAssets is the inverse mapping of reachableRoots. For each bundle root, + // it contains a bit set that indicates which assets are reachable from it. + let reachableAssets = []; + + // ancestorAssets maps bundle roots to the set of all assets available to it at runtime, + // including in earlier parallel bundles. These are intersected through all paths to + // the bundle to ensure that the available assets are always present no matter in which + // order the bundles are loaded. + let ancestorAssets = []; + + let inlineConstantDeps = new DefaultMap(() => new Set()); + + for (let [bundleRootId, assetId] of bundleRootGraph.nodes.entries()) { + let reachable = new BitSet(assets.length); + reachableAssets.push(reachable); + ancestorAssets.push(null); + + if (bundleRootId == rootNodeId || assetId == null) continue; + // Add sync relationships to ReachableRoots + let root = assets[assetId]; + assetGraph.traverse( + (node, _, actions) => { + if (node.value === root) { + return; + } + if (node.type === 'dependency') { + let dependency = node.value; + + if ( + dependency.priority !== 'sync' && + dependencyBundleGraph.hasContentKey(dependency.id) + ) { + let assets = assetGraph.getDependencyAssets(dependency); + if (assets.length === 0) { + return; + } + invariant(assets.length === 1); + let bundleRoot = assets[0]; + let bundle = nullthrows( + bundleGraph.getNode(nullthrows(bundles.get(bundleRoot.id))), + ); + if ( + bundle !== 'root' && + bundle.bundleBehavior == null && + !bundle.env.isIsolated() && + bundle.env.context === root.env.context + ) { + bundleRootGraph.addEdge( + bundleRootId, + nullthrows(assetToBundleRootNodeId.get(bundleRoot)), + dependency.priority === 'parallel' + ? bundleRootEdgeTypes.parallel + : bundleRootEdgeTypes.lazy, + ); + } + } + + if (dependency.priority !== 'sync') { + actions.skipChildren(); + } + return; + } + //asset node type + let asset = node.value; + if (asset.bundleBehavior != null) { + actions.skipChildren(); + return; + } + let assetIndex = nullthrows(assetToIndex.get(node.value)); + reachable.add(assetIndex); + reachableRoots[assetIndex].add(bundleRootId); + + if (asset.meta.isConstantModule === true) { + let parents = assetGraph + .getIncomingDependencies(asset) + .map(dep => nullthrows(assetGraph.getAssetWithDependency(dep))); + + for (let parent of parents) { + inlineConstantDeps.get(parent).add(asset); + } + } + + return; + }, + root, + {skipUnusedDependencies: true}, + ); + } + + for (let entry of entries.keys()) { + // Initialize an empty set of ancestors available to entries + let entryId = nullthrows(assetToBundleRootNodeId.get(entry)); + ancestorAssets[entryId] = new BitSet(assets.length); + } + + // Step Determine Availability + // Visit nodes in a topological order, visiting parent nodes before child nodes. + + // This allows us to construct an understanding of which assets will already be + // loaded and available when a bundle runs, by pushing available assets downwards and + // computing the intersection of assets available through all possible paths to a bundle. + // We call this structure ancestorAssets, a Map that tracks a bundleRoot, + // to all assets available to it (meaning they will exist guaranteed when the bundleRoot is loaded) + // The topological sort ensures all parents are visited before the node we want to process. + for (let nodeId of bundleRootGraph.topoSort(ALL_EDGE_TYPES)) { + if (nodeId === rootNodeId) continue; + const bundleRoot = assets[nullthrows(bundleRootGraph.getNode(nodeId))]; + let bundleGroupId = nullthrows(bundleRoots.get(bundleRoot))[1]; + + // At a BundleRoot, we access it's available assets (via ancestorAssets), + // and add to that all assets within the bundles in that BundleGroup. + + // This set is available to all bundles in a particular bundleGroup because + // bundleGroups are just bundles loaded at the same time. However it is + // not true that a bundle's available assets = all assets of all the bundleGroups + // it belongs to. It's the intersection of those sets. + let available; + if (bundleRoot.bundleBehavior === 'isolated') { + available = new BitSet(assets.length); + } else { + available = nullthrows(ancestorAssets[nodeId]).clone(); + for (let bundleIdInGroup of [ + bundleGroupId, + ...bundleGraph.getNodeIdsConnectedFrom(bundleGroupId), + ]) { + let bundleInGroup = nullthrows(bundleGraph.getNode(bundleIdInGroup)); + invariant(bundleInGroup !== 'root'); + if (bundleInGroup.bundleBehavior != null) { + continue; + } + + for (let bundleRoot of bundleInGroup.assets) { + // Assets directly connected to current bundleRoot + available.add(nullthrows(assetToIndex.get(bundleRoot))); + available.union( + reachableAssets[ + nullthrows(assetToBundleRootNodeId.get(bundleRoot)) + ], + ); + } + } + } + + // Now that we have bundleGroup availability, we will propagate that down to all the children + // of this bundleGroup. For a child, we also must maintain parallel availability. If it has + // parallel siblings that come before it, those, too, are available to it. Add those parallel + // available assets to the set of available assets for this child as well. + let children = bundleRootGraph.getNodeIdsConnectedFrom( + nodeId, + ALL_EDGE_TYPES, + ); + let parallelAvailability = new BitSet(assets.length); + + for (let childId of children) { + let assetId = nullthrows(bundleRootGraph.getNode(childId)); + let child = assets[assetId]; + let bundleBehavior = getBundleFromBundleRoot(child).bundleBehavior; + if (bundleBehavior != null) { + continue; + } + let isParallel = bundleRootGraph.hasEdge( + nodeId, + childId, + bundleRootEdgeTypes.parallel, + ); + + // Most of the time, a child will have many parent bundleGroups, + // so the next time we peek at a child from another parent, we will + // intersect the availability built there with the previously computed + // availability. this ensures no matter which bundleGroup loads a particular bundle, + // it will only assume availability of assets it has under any circumstance + const childAvailableAssets = ancestorAssets[childId]; + let currentChildAvailable = isParallel + ? BitSet.union(parallelAvailability, available) + : available; + if (childAvailableAssets != null) { + childAvailableAssets.intersect(currentChildAvailable); + } else { + ancestorAssets[childId] = currentChildAvailable.clone(); + } + if (isParallel) { + parallelAvailability.union(reachableAssets[childId]); + parallelAvailability.add(assetId); //The next sibling should have older sibling available via parallel + } + } + } + // Step Internalize async bundles - internalize Async bundles if and only if, + // the bundle is synchronously available elsewhere. + // We can query sync assets available via reachableRoots. If the parent has + // the bundleRoot by reachableRoots AND ancestorAssets, internalize it. + for (let [id, bundleRootId] of bundleRootGraph.nodes.entries()) { + if (bundleRootId == null || id === rootNodeId) continue; + let bundleRoot = assets[bundleRootId]; + + if (manualAssetToConfig.has(bundleRoot)) { + // We internalize for MSBs later, we should never delete MSBs + continue; + } + + let parentRoots = bundleRootGraph.getNodeIdsConnectedTo(id, ALL_EDGE_TYPES); + let canDelete = + getBundleFromBundleRoot(bundleRoot).bundleBehavior !== 'isolated'; + if (parentRoots.length === 0) continue; + for (let parentId of parentRoots) { + if (parentId === rootNodeId) { + // connected to root. + canDelete = false; + continue; + } + if ( + reachableAssets[parentId].has(bundleRootId) || + ancestorAssets[parentId]?.has(bundleRootId) + ) { + let parentAssetId = nullthrows(bundleRootGraph.getNode(parentId)); + let parent = assets[parentAssetId]; + let parentBundle = bundleGraph.getNode( + nullthrows(bundles.get(parent.id)), + ); + invariant(parentBundle != null && parentBundle !== 'root'); + if (!parentBundle.internalizedAssets) { + parentBundle.internalizedAssets = new BitSet(assets.length); + } + + parentBundle.internalizedAssets.add(bundleRootId); + } else { + canDelete = false; + } + } + if (canDelete) { + deleteBundle(bundleRoot); + } + } + + function assignInlineConstants(parentAsset: Asset, bundle: Bundle) { + for (let inlineConstant of inlineConstantDeps.get(parentAsset)) { + if (!bundle.assets.has(inlineConstant)) { + bundle.assets.add(inlineConstant); + bundle.size += inlineConstant.stats.size; + } + } + } + + // Step Insert Or Share: Place all assets into bundles or create shared bundles. Each asset + // is placed into a single bundle based on the bundle entries it is reachable from. + // This creates a maximally code split bundle graph with no duplication. + let reachable = new BitSet(assets.length); + let reachableNonEntries = new BitSet(assets.length); + let reachableIntersection = new BitSet(assets.length); + for (let i = 0; i < assets.length; i++) { + let asset = assets[i]; + let manualSharedObject = manualAssetToConfig.get(asset); + + if (bundleRoots.has(asset) && inlineConstantDeps.get(asset).size > 0) { + let entryBundleId = nullthrows(bundleRoots.get(asset))[0]; + let entryBundle = nullthrows(bundleGraph.getNode(entryBundleId)); + invariant(entryBundle !== 'root'); + assignInlineConstants(asset, entryBundle); + } + + if (asset.meta.isConstantModule === true) { + // Ignore constant modules as they are placed with their direct parents + continue; + } + + // Unreliable bundleRoot assets which need to pulled in by shared bundles or other means. + // Filter out entries, since they can't have shared bundles. + // Neither can non-splittable, isolated, or needing of stable name bundles. + // Reserve those filtered out bundles since we add the asset back into them. + reachableNonEntries.clear(); + reachableRoots[i].forEach(nodeId => { + let assetId = bundleRootGraph.getNode(nodeId); + if (assetId == null) return; // deleted + let a = assets[assetId]; + if ( + entries.has(a) || + !a.isBundleSplittable || + (bundleRoots.get(a) && + (getBundleFromBundleRoot(a).needsStableName || + getBundleFromBundleRoot(a).bundleBehavior === 'isolated')) + ) { + // Add asset to non-splittable bundles. + addAssetToBundleRoot(asset, a); + } else if (!ancestorAssets[nodeId]?.has(i)) { + // Filter out bundles from this asset's reachable array if + // bundle does not contain the asset in its ancestry + reachableNonEntries.add(assetId); + } + }); + + reachable.bits.set(reachableNonEntries.bits); + + // If we encounter a "manual" asset, draw an edge from reachable to its MSB + if (manualSharedObject && !reachable.empty()) { + let bundle; + let bundleId; + let manualSharedBundleKey = manualSharedObject.name + ',' + asset.type; + let sourceBundles = []; + reachable.forEach(id => { + sourceBundles.push(nullthrows(bundleRoots.get(assets[id]))[0]); + }); + + if (!manualSharedMap.has(manualSharedBundleKey)) { + let firstSourceBundle = nullthrows( + bundleGraph.getNode(sourceBundles[0]), + ); + invariant(firstSourceBundle !== 'root'); + + bundle = createBundle({ + uniqueKey: manualSharedBundleKey, + target: firstSourceBundle.target, + type: asset.type, + env: firstSourceBundle.env, + manualSharedBundle: manualSharedObject?.name, + }); + bundle.sourceBundles = new Set(sourceBundles); + bundle.assets.add(asset); + bundleId = bundleGraph.addNode(bundle); + manualSharedMap.set(manualSharedBundleKey, bundleId); + } else { + bundleId = nullthrows(manualSharedMap.get(manualSharedBundleKey)); + bundle = nullthrows(bundleGraph.getNode(bundleId)); + invariant( + bundle != null && bundle !== 'root', + 'We tried to use the root incorrectly', + ); + + if (!bundle.assets.has(asset)) { + bundle.assets.add(asset); + bundle.size += asset.stats.size; + } + + for (let s of sourceBundles) { + if (s != bundleId) { + bundle.sourceBundles.add(s); + } + } + } + + for (let sourceBundleId of sourceBundles) { + if (bundleId !== sourceBundleId) { + bundleGraph.addEdge(sourceBundleId, bundleId); + } + } + + dependencyBundleGraph.addNodeByContentKeyIfNeeded(String(bundleId), { + value: bundle, + type: 'bundle', + }); + continue; + } + + // Finally, filter out bundleRoots (bundles) from this assets + // reachable if they are subgraphs, and reuse that subgraph bundle + // by drawing an edge. Essentially, if two bundles within an asset's + // reachable array, have an ancestor-subgraph relationship, draw that edge. + // This allows for us to reuse a bundle instead of making a shared bundle if + // a bundle represents the exact set of assets a set of bundles would share + + // if a bundle b is a subgraph of another bundle f, reuse it, drawing an edge between the two + if (config.disableSharedBundles === false) { + reachableNonEntries.forEach(candidateId => { + let candidateSourceBundleRoot = assets[candidateId]; + let candidateSourceBundleId = nullthrows( + bundleRoots.get(candidateSourceBundleRoot), + )[0]; + if (candidateSourceBundleRoot.env.isIsolated()) { + return; + } + let reuseableBundleId = bundles.get(asset.id); + if (reuseableBundleId != null) { + reachable.delete(candidateId); + bundleGraph.addEdge(candidateSourceBundleId, reuseableBundleId); + + let reusableBundle = bundleGraph.getNode(reuseableBundleId); + invariant(reusableBundle !== 'root' && reusableBundle != null); + reusableBundle.sourceBundles.add(candidateSourceBundleId); + } else { + // Asset is not a bundleRoot, but if its ancestor bundle (in the asset's reachable) can be + // reused as a subgraph of another bundleRoot in its reachable, reuse it + reachableIntersection.bits.set(reachableNonEntries.bits); + reachableIntersection.intersect( + reachableAssets[ + nullthrows(assetToBundleRootNodeId.get(candidateSourceBundleRoot)) + ], + ); + + reachableIntersection.forEach(otherCandidateId => { + let otherReuseCandidate = assets[otherCandidateId]; + if (candidateSourceBundleRoot === otherReuseCandidate) return; + let reusableBundleId = nullthrows( + bundles.get(otherReuseCandidate.id), + ); + reachable.delete(candidateId); + bundleGraph.addEdge( + nullthrows(bundles.get(candidateSourceBundleRoot.id)), + reusableBundleId, + ); + let reusableBundle = bundleGraph.getNode(reusableBundleId); + invariant(reusableBundle !== 'root' && reusableBundle != null); + reusableBundle.sourceBundles.add(candidateSourceBundleId); + }); + } + }); + } + + let reachableArray = []; + reachable.forEach(id => { + reachableArray.push(assets[id]); + }); + + // Create shared bundles for splittable bundles. + if ( + config.disableSharedBundles === false && + reachableArray.length > config.minBundles + ) { + let sourceBundles = reachableArray.map( + a => nullthrows(bundleRoots.get(a))[0], + ); + let key = reachableArray.map(a => a.id).join(',') + '.' + asset.type; + let bundleId = bundles.get(key); + let bundle; + if (bundleId == null) { + let firstSourceBundle = nullthrows( + bundleGraph.getNode(sourceBundles[0]), + ); + invariant(firstSourceBundle !== 'root'); + bundle = createBundle({ + target: firstSourceBundle.target, + type: asset.type, + env: firstSourceBundle.env, + }); + bundle.sourceBundles = new Set(sourceBundles); + let sharedInternalizedAssets = firstSourceBundle.internalizedAssets + ? firstSourceBundle.internalizedAssets.clone() + : new BitSet(assets.length); + + for (let p of sourceBundles) { + let parentBundle = nullthrows(bundleGraph.getNode(p)); + invariant(parentBundle !== 'root'); + if (parentBundle === firstSourceBundle) continue; + + if (parentBundle.internalizedAssets) { + sharedInternalizedAssets.intersect(parentBundle.internalizedAssets); + } else { + sharedInternalizedAssets.clear(); + } + } + bundle.internalizedAssets = sharedInternalizedAssets; + bundleId = bundleGraph.addNode(bundle); + bundles.set(key, bundleId); + } else { + bundle = nullthrows(bundleGraph.getNode(bundleId)); + invariant(bundle !== 'root'); + } + bundle.assets.add(asset); + bundle.size += asset.stats.size; + + assignInlineConstants(asset, bundle); + + for (let sourceBundleId of sourceBundles) { + if (bundleId !== sourceBundleId) { + bundleGraph.addEdge(sourceBundleId, bundleId); + } + } + + dependencyBundleGraph.addNodeByContentKeyIfNeeded(String(bundleId), { + value: bundle, + type: 'bundle', + }); + } else if ( + config.disableSharedBundles === true || + reachableArray.length <= config.minBundles + ) { + for (let root of reachableArray) { + addAssetToBundleRoot(asset, root); + } + } + } + + let manualSharedBundleIds = new Set([...manualSharedMap.values()]); + // Step split manual shared bundles for those that have the "split" property set + let remainderMap = new DefaultMap(() => []); + for (let id of manualSharedMap.values()) { + let manualBundle = bundleGraph.getNode(id); + invariant(manualBundle !== 'root' && manualBundle != null); + + if (manualBundle.sourceBundles.size > 0) { + let firstSourceBundle = nullthrows( + bundleGraph.getNode([...manualBundle.sourceBundles][0]), + ); + invariant(firstSourceBundle !== 'root'); + let firstAsset = [...manualBundle.assets][0]; + let manualSharedObject = manualAssetToConfig.get(firstAsset); + invariant(manualSharedObject != null); + let modNum = manualAssetToConfig.get(firstAsset)?.split; + if (modNum != null) { + for (let a of [...manualBundle.assets]) { + let numRep = getBigIntFromContentKey(a.id); + // $FlowFixMe Flow doesn't know about BigInt + let r = Number(numRep % BigInt(modNum)); + + remainderMap.get(r).push(a); + } + + for (let i = 1; i < [...remainderMap.keys()].length; i++) { + let bundle = createBundle({ + uniqueKey: manualSharedObject.name + firstSourceBundle.type + i, + target: firstSourceBundle.target, + type: firstSourceBundle.type, + env: firstSourceBundle.env, + manualSharedBundle: manualSharedObject.name, + }); + bundle.sourceBundles = manualBundle.sourceBundles; + bundle.internalizedAssets = manualBundle.internalizedAssets; + let bundleId = bundleGraph.addNode(bundle); + manualSharedBundleIds.add(bundleId); + for (let sourceBundleId of manualBundle.sourceBundles) { + if (bundleId !== sourceBundleId) { + bundleGraph.addEdge(sourceBundleId, bundleId); + } + } + for (let sp of remainderMap.get(i)) { + bundle.assets.add(sp); + bundle.size += sp.stats.size; + manualBundle.assets.delete(sp); + manualBundle.size -= sp.stats.size; + } + } + } + } + } + + // Step insert constant modules into manual shared bundles. + // We have to do this separately as they're the only case where a single asset can + // match multiple MSB's + for (let [asset, msbs] of constantModuleToMSB.entries()) { + for (let manualSharedObject of msbs) { + let bundleId = manualSharedMap.get(manualSharedObject.name + ',js'); + if (bundleId == null) continue; + let bundle = nullthrows(bundleGraph.getNode(bundleId)); + invariant( + bundle != null && bundle !== 'root', + 'We tried to use the root incorrectly', + ); + + if (!bundle.assets.has(asset)) { + bundle.assets.add(asset); + bundle.size += asset.stats.size; + } + } + } + + // Step Merge Share Bundles: Merge any shared bundles under the minimum bundle size back into + // their source bundles, and remove the bundle. + // We should include "bundle reuse" as shared bundles that may be removed but the bundle itself would have to be retained + for (let [bundleNodeId, bundle] of bundleGraph.nodes.entries()) { + if (!bundle || bundle === 'root') continue; + if ( + bundle.sourceBundles.size > 0 && + bundle.mainEntryAsset == null && + bundle.size < config.minBundleSize && + !manualSharedBundleIds.has(bundleNodeId) + ) { + removeBundle(bundleGraph, bundleNodeId, assetReference); + } + } + + let modifiedSourceBundles = new Set(); + + // Step Remove Shared Bundles: Remove shared bundles from bundle groups that hit the parallel request limit. + if (config.disableSharedBundles === false) { + for (let bundleGroupId of bundleGraph.getNodeIdsConnectedFrom(rootNodeId)) { + // Find shared bundles in this bundle group. + let bundleId = bundleGroupId; + + // We should include "bundle reuse" as shared bundles that may be removed but the bundle itself would have to be retained + let bundleIdsInGroup = getBundlesForBundleGroup(bundleId); //get all bundlegrups this bundle is an ancestor of + + // Filter out inline assests as they should not contribute to PRL + let numBundlesContributingToPRL = bundleIdsInGroup.reduce((count, b) => { + let bundle = nullthrows(bundleGraph.getNode(b)); + invariant(bundle !== 'root'); + return count + (bundle.bundleBehavior !== 'inline'); + }, 0); + + if (numBundlesContributingToPRL > config.maxParallelRequests) { + let sharedBundleIdsInBundleGroup = bundleIdsInGroup.filter(b => { + let bundle = nullthrows(bundleGraph.getNode(b)); + // shared bundles must have source bundles, we could have a bundle + // connected to another bundle that isnt a shared bundle, so check + return ( + bundle !== 'root' && + bundle.sourceBundles.size > 0 && + bundleId != b && + !manualSharedBundleIds.has(b) + ); + }); + + // Sort the bundles so the smallest ones are removed first. + let sharedBundlesInGroup = sharedBundleIdsInBundleGroup + .map(id => ({ + id, + bundle: nullthrows(bundleGraph.getNode(id)), + })) + .map(({id, bundle}) => { + // For Flow + invariant(bundle !== 'root'); + return {id, bundle}; + }) + .sort((a, b) => b.bundle.size - a.bundle.size); + + // Remove bundles until the bundle group is within the parallel request limit. + while ( + sharedBundlesInGroup.length > 0 && + numBundlesContributingToPRL > config.maxParallelRequests + ) { + let bundleTuple = sharedBundlesInGroup.pop(); + let bundleToRemove = bundleTuple.bundle; + let bundleIdToRemove = bundleTuple.id; + //TODO add integration test where bundles in bunlde group > max parallel request limit & only remove a couple shared bundles + // but total # bundles still exceeds limit due to non shared bundles + + // Add all assets in the shared bundle into the source bundles that are within this bundle group. + let sourceBundles = [...bundleToRemove.sourceBundles].filter(b => + bundleIdsInGroup.includes(b), + ); + + for (let sourceBundleId of sourceBundles) { + let sourceBundle = nullthrows(bundleGraph.getNode(sourceBundleId)); + invariant(sourceBundle !== 'root'); + modifiedSourceBundles.add(sourceBundle); + bundleToRemove.sourceBundles.delete(sourceBundleId); + for (let asset of bundleToRemove.assets) { + addAssetToBundleRoot( + asset, + nullthrows(sourceBundle.mainEntryAsset), + ); + } + //This case is specific to reused bundles, which can have shared bundles attached to it + for (let childId of bundleGraph.getNodeIdsConnectedFrom( + bundleIdToRemove, + )) { + let child = bundleGraph.getNode(childId); + invariant(child !== 'root' && child != null); + child.sourceBundles.add(sourceBundleId); + bundleGraph.addEdge(sourceBundleId, childId); + } + // needs to add test case where shared bundle is removed from ONE bundlegroup but not from the whole graph! + // Remove the edge from this bundle group to the shared bundle. + // If there is now only a single bundle group that contains this bundle, + // merge it into the remaining source bundles. If it is orphaned entirely, remove it. + let incomingNodeCount = + bundleGraph.getNodeIdsConnectedTo(bundleIdToRemove).length; + + if ( + incomingNodeCount <= 2 && + //Never fully remove reused bundles + bundleToRemove.mainEntryAsset == null + ) { + // If one bundle group removes a shared bundle, but the other *can* keep it, still remove because that shared bundle is pointless (only one source bundle) + removeBundle(bundleGraph, bundleIdToRemove, assetReference); + // Stop iterating through bundleToRemove's sourceBundles as the bundle has been removed. + break; + } else { + bundleGraph.removeEdge(sourceBundleId, bundleIdToRemove); + } + } + numBundlesContributingToPRL--; + } + } + } + } + + function getBigIntFromContentKey(contentKey) { + let b = Buffer.alloc(64); + b.write(contentKey); + // $FlowFixMe Flow doesn't have BigInt types in this version + return b.readBigInt64BE(); + } + // Fix asset order in source bundles as they are likely now incorrect after shared bundle deletion + if (modifiedSourceBundles.size > 0) { + let assetOrderMap = new Map(assets.map((a, index) => [a, index])); + + for (let bundle of modifiedSourceBundles) { + bundle.assets = new Set( + [...bundle.assets].sort((a, b) => { + let aIndex = nullthrows(assetOrderMap.get(a)); + let bIndex = nullthrows(assetOrderMap.get(b)); + + return aIndex - bIndex; + }), + ); + } + } + function deleteBundle(bundleRoot: BundleRoot) { + bundleGraph.removeNode(nullthrows(bundles.get(bundleRoot.id))); + bundleRoots.delete(bundleRoot); + bundles.delete(bundleRoot.id); + let bundleRootId = assetToBundleRootNodeId.get(bundleRoot); + if (bundleRootId != null && bundleRootGraph.hasNode(bundleRootId)) { + bundleRootGraph.removeNode(bundleRootId); + } + } + function getBundlesForBundleGroup(bundleGroupId) { + let bundlesInABundleGroup = []; + bundleGraph.traverse(nodeId => { + bundlesInABundleGroup.push(nodeId); + }, bundleGroupId); + return bundlesInABundleGroup; + } + + function getBundleFromBundleRoot(bundleRoot: BundleRoot): Bundle { + let bundle = bundleGraph.getNode( + nullthrows(bundleRoots.get(bundleRoot))[0], + ); + invariant(bundle !== 'root' && bundle != null); + return bundle; + } + + function addAssetToBundleRoot(asset: Asset, bundleRoot: Asset) { + let [bundleId, bundleGroupId] = nullthrows(bundleRoots.get(bundleRoot)); + let bundle = nullthrows(bundleGraph.getNode(bundleId)); + invariant(bundle !== 'root'); + + if (asset.type !== bundle.type) { + let bundleGroup = nullthrows(bundleGraph.getNode(bundleGroupId)); + invariant(bundleGroup !== 'root'); + let key = nullthrows(bundleGroup.mainEntryAsset).id + '.' + asset.type; + let typeChangeBundleId = bundles.get(key); + if (typeChangeBundleId == null) { + let typeChangeBundle = createBundle({ + uniqueKey: key, + needsStableName: bundle.needsStableName, + bundleBehavior: bundle.bundleBehavior, + type: asset.type, + target: bundle.target, + env: bundle.env, + }); + typeChangeBundleId = bundleGraph.addNode(typeChangeBundle); + bundleGraph.addEdge(bundleId, typeChangeBundleId); + bundles.set(key, typeChangeBundleId); + bundle = typeChangeBundle; + } else { + bundle = nullthrows(bundleGraph.getNode(typeChangeBundleId)); + invariant(bundle !== 'root'); + } + } + + bundle.assets.add(asset); + bundle.size += asset.stats.size; + assignInlineConstants(asset, bundle); + } + + function removeBundle( + bundleGraph: Graph, + bundleId: NodeId, + assetReference: DefaultMap>, + ) { + let bundle = nullthrows(bundleGraph.getNode(bundleId)); + invariant(bundle !== 'root'); + for (let asset of bundle.assets) { + assetReference.set( + asset, + assetReference.get(asset).filter(t => !t.includes(bundle)), + ); + for (let sourceBundleId of bundle.sourceBundles) { + let sourceBundle = nullthrows(bundleGraph.getNode(sourceBundleId)); + invariant(sourceBundle !== 'root'); + addAssetToBundleRoot(asset, nullthrows(sourceBundle.mainEntryAsset)); + } + } + + bundleGraph.removeNode(bundleId); + } + + return { + assets, + bundleGraph, + dependencyBundleGraph, + bundleGroupBundleIds, + assetReference, + manualAssetToBundle, + }; +} + +const CONFIG_SCHEMA: SchemaEntity = { + type: 'object', + properties: { + http: { + type: 'number', + enum: Object.keys(HTTP_OPTIONS).map(k => Number(k)), + }, + manualSharedBundles: { + type: 'array', + items: { + type: 'object', + properties: { + name: { + type: 'string', + }, + assets: { + type: 'array', + items: { + type: 'string', + }, + }, + types: { + type: 'array', + items: { + type: 'string', + }, + }, + root: { + type: 'string', + }, + split: { + type: 'number', + }, + }, + required: ['name', 'assets'], + additionalProperties: false, + }, + }, + minBundles: { + type: 'number', + }, + minBundleSize: { + type: 'number', + }, + maxParallelRequests: { + type: 'number', + }, + disableSharedBundles: { + type: 'boolean', + }, + }, + additionalProperties: false, +}; + +function createBundle(opts: {| + uniqueKey?: string, + target: Target, + asset?: Asset, + env?: Environment, + type?: string, + needsStableName?: boolean, + bundleBehavior?: ?BundleBehavior, + manualSharedBundle?: ?string, +|}): Bundle { + if (opts.asset == null) { + return { + uniqueKey: opts.uniqueKey, + assets: new Set(), + mainEntryAsset: null, + size: 0, + sourceBundles: new Set(), + target: opts.target, + type: nullthrows(opts.type), + env: nullthrows(opts.env), + needsStableName: Boolean(opts.needsStableName), + bundleBehavior: opts.bundleBehavior, + manualSharedBundle: opts.manualSharedBundle, + }; + } + + let asset = nullthrows(opts.asset); + return { + uniqueKey: opts.uniqueKey, + assets: new Set([asset]), + mainEntryAsset: asset, + size: asset.stats.size, + sourceBundles: new Set(), + target: opts.target, + type: opts.type ?? asset.type, + env: opts.env ?? asset.env, + needsStableName: Boolean(opts.needsStableName), + bundleBehavior: opts.bundleBehavior ?? asset.bundleBehavior, + manualSharedBundle: opts.manualSharedBundle, + }; +} + +function resolveModeConfig( + config: BundlerConfig, + mode: BuildMode, +): BaseBundlerConfig { + let generalConfig = {}; + let modeConfig = {}; + + for (const key of Object.keys(config)) { + if (key === 'development' || key === 'production') { + if (key === mode) { + modeConfig = config[key]; + } + } else { + generalConfig[key] = config[key]; + } + } + + // $FlowFixMe Not sure how to convince flow here... + return { + ...generalConfig, + ...modeConfig, + }; +} + +async function loadBundlerConfig( + config: Config, + options: PluginOptions, + logger: PluginLogger, +): Promise { + let conf = await config.getConfig([], { + packageKey: '@parcel/bundler-default', + }); + + if (!conf) { + const modDefault = { + ...HTTP_OPTIONS['2'], + projectRoot: options.projectRoot, + }; + return modDefault; + } + + invariant(conf?.contents != null); + + let modeConfig = resolveModeConfig(conf.contents, options.mode); + + // minBundles will be ignored if shared bundles are disabled + if ( + modeConfig.minBundles != null && + modeConfig.disableSharedBundles === true + ) { + logger.warn({ + origin: '@parcel/bundler-default', + message: `The value of "${modeConfig.minBundles}" set for minBundles will not be used as shared bundles have been disabled`, + }); + } + + // minBundleSize will be ignored if shared bundles are disabled + if ( + modeConfig.minBundleSize != null && + modeConfig.disableSharedBundles === true + ) { + logger.warn({ + origin: '@parcel/bundler-default', + message: `The value of "${modeConfig.minBundleSize}" set for minBundleSize will not be used as shared bundles have been disabled`, + }); + } + + // maxParallelRequests will be ignored if shared bundles are disabled + if ( + modeConfig.maxParallelRequests != null && + modeConfig.disableSharedBundles === true + ) { + logger.warn({ + origin: '@parcel/bundler-default', + message: `The value of "${modeConfig.maxParallelRequests}" set for maxParallelRequests will not be used as shared bundles have been disabled`, + }); + } + + if (modeConfig.manualSharedBundles) { + let nameArray = modeConfig.manualSharedBundles.map(a => a.name); + let nameSet = new Set(nameArray); + invariant( + nameSet.size == nameArray.length, + 'The name field must be unique for property manualSharedBundles', + ); + } + + validateSchema.diagnostic( + CONFIG_SCHEMA, + { + data: modeConfig, + source: await options.inputFS.readFile(conf.filePath, 'utf8'), + filePath: conf.filePath, + prependKey: `/${encodeJSONKeyComponent('@parcel/bundler-default')}`, + }, + '@parcel/bundler-default', + 'Invalid config for @parcel/bundler-default', + ); + + let http = modeConfig.http ?? 2; + let defaults = HTTP_OPTIONS[http]; + + return { + minBundles: modeConfig.minBundles ?? defaults.minBundles, + minBundleSize: modeConfig.minBundleSize ?? defaults.minBundleSize, + maxParallelRequests: + modeConfig.maxParallelRequests ?? defaults.maxParallelRequests, + projectRoot: options.projectRoot, + disableSharedBundles: + modeConfig.disableSharedBundles ?? defaults.disableSharedBundles, + manualSharedBundles: + modeConfig.manualSharedBundles ?? defaults.manualSharedBundles, + }; +} + +function getEntryByTarget( + bundleGraph: MutableBundleGraph, +): DefaultMap> { + // Find entries from assetGraph per target + let targets: DefaultMap> = new DefaultMap( + () => new Map(), + ); + bundleGraph.traverse({ + enter(node, context, actions) { + if (node.type !== 'asset') { + return node; + } + invariant( + context != null && + context.type === 'dependency' && + context.value.isEntry && + context.value.target != null, + ); + targets.get(context.value.target.distDir).set(node.value, context.value); + actions.skipChildren(); + return node; + }, + }); + return targets; +} diff --git a/node_modules/@parcel/cache/LICENSE b/node_modules/@parcel/cache/LICENSE new file mode 100644 index 00000000..7fb9bc95 --- /dev/null +++ b/node_modules/@parcel/cache/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017-present Devon Govett + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/@parcel/cache/index.d.ts b/node_modules/@parcel/cache/index.d.ts new file mode 100644 index 00000000..bd738460 --- /dev/null +++ b/node_modules/@parcel/cache/index.d.ts @@ -0,0 +1,11 @@ +import type {FilePath} from '@parcel/types'; +import type {Cache} from './lib/types'; + +export type {Cache} from './lib/types'; +export const FSCache: { + new (cacheDir: FilePath): Cache; +}; + +export const LMDBCache: { + new (cacheDir: FilePath): Cache; +}; diff --git a/node_modules/@parcel/cache/lib/FSCache.js b/node_modules/@parcel/cache/lib/FSCache.js new file mode 100644 index 00000000..a364a9bf --- /dev/null +++ b/node_modules/@parcel/cache/lib/FSCache.js @@ -0,0 +1,132 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.FSCache = void 0; +function _stream() { + const data = _interopRequireDefault(require("stream")); + _stream = function () { + return data; + }; + return data; +} +function _path() { + const data = _interopRequireDefault(require("path")); + _path = function () { + return data; + }; + return data; +} +function _util() { + const data = require("util"); + _util = function () { + return data; + }; + return data; +} +function _logger() { + const data = _interopRequireDefault(require("@parcel/logger")); + _logger = function () { + return data; + }; + return data; +} +function _core() { + const data = require("@parcel/core"); + _core = function () { + return data; + }; + return data; +} +var _package = _interopRequireDefault(require("../package.json")); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } +// flowlint-next-line untyped-import:off +const pipeline = (0, _util().promisify)(_stream().default.pipeline); +class FSCache { + constructor(fs, cacheDir) { + this.fs = fs; + this.dir = cacheDir; + } + async ensure() { + // First, create the main cache directory if necessary. + await this.fs.mkdirp(this.dir); + + // In parallel, create sub-directories for every possible hex value + // This speeds up large caches on many file systems since there are fewer files in a single directory. + let dirPromises = []; + for (let i = 0; i < 256; i++) { + dirPromises.push(this.fs.mkdirp(_path().default.join(this.dir, ('00' + i.toString(16)).slice(-2)))); + } + await Promise.all(dirPromises); + } + _getCachePath(cacheId) { + return _path().default.join(this.dir, cacheId.slice(0, 2), cacheId.slice(2)); + } + getStream(key) { + return this.fs.createReadStream(this._getCachePath(`${key}-large`)); + } + setStream(key, stream) { + return pipeline(stream, this.fs.createWriteStream(this._getCachePath(`${key}-large`))); + } + has(key) { + return this.fs.exists(this._getCachePath(key)); + } + getBlob(key) { + return this.fs.readFile(this._getCachePath(key)); + } + async setBlob(key, contents) { + await this.fs.writeFile(this._getCachePath(key), contents); + } + async getBuffer(key) { + try { + return await this.fs.readFile(this._getCachePath(key)); + } catch (err) { + if (err.code === 'ENOENT') { + return null; + } else { + throw err; + } + } + } + hasLargeBlob(key) { + return this.fs.exists(this._getCachePath(`${key}-large`)); + } + getLargeBlob(key) { + return this.fs.readFile(this._getCachePath(`${key}-large`)); + } + async setLargeBlob(key, contents, options) { + await this.fs.writeFile(this._getCachePath(`${key}-large`), contents, { + signal: options === null || options === void 0 ? void 0 : options.signal + }); + } + async deleteLargeBlob(key) { + await this.fs.rimraf(this._getCachePath(`${key}-large`)); + } + async get(key) { + try { + let data = await this.fs.readFile(this._getCachePath(key)); + return (0, _core().deserialize)(data); + } catch (err) { + if (err.code === 'ENOENT') { + return null; + } else { + throw err; + } + } + } + async set(key, value) { + try { + let blobPath = this._getCachePath(key); + let data = (0, _core().serialize)(value); + await this.fs.writeFile(blobPath, data); + } catch (err) { + _logger().default.error(err, '@parcel/cache'); + } + } + refresh() { + // NOOP + } +} +exports.FSCache = FSCache; +(0, _core().registerSerializableClass)(`${_package.default.version}:FSCache`, FSCache); \ No newline at end of file diff --git a/node_modules/@parcel/cache/lib/IDBCache.browser.js b/node_modules/@parcel/cache/lib/IDBCache.browser.js new file mode 100644 index 00000000..089d2d46 --- /dev/null +++ b/node_modules/@parcel/cache/lib/IDBCache.browser.js @@ -0,0 +1,148 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.IDBCache = void 0; +function _stream() { + const data = require("stream"); + _stream = function () { + return data; + }; + return data; +} +function _core() { + const data = require("@parcel/core"); + _core = function () { + return data; + }; + return data; +} +function _utils() { + const data = require("@parcel/utils"); + _utils = function () { + return data; + }; + return data; +} +var _package = _interopRequireDefault(require("../package.json")); +function _idb() { + const data = require("idb"); + _idb = function () { + return data; + }; + return data; +} +function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } +// $FlowFixMe[untyped-import] +// $FlowFixMe[untyped-import] +const STORE_NAME = 'cache'; +class IDBCache { + // $FlowFixMe + + constructor() { + this.store = (0, _idb().openDB)('REPL-parcel-cache', 1, { + upgrade(db) { + db.createObjectStore(STORE_NAME); + }, + blocked() {}, + blocking() {}, + terminated() {} + }); + } + ensure() { + return Promise.resolve(); + } + serialize() { + return { + /*::...null*/ + }; + } + static deserialize() { + return new IDBCache(); + } + has(key) { + return Promise.resolve(this.store.get(key) != null); + } + async get(key) { + let data = await (await this.store).get(STORE_NAME, key); + if (data == null) { + return null; + } + return Promise.resolve((0, _core().deserialize)(data)); + } + async set(key, value) { + await (await this.store).put(STORE_NAME, (0, _core().serialize)(value), key); + } + getStream(key) { + let dataPromise = this.store.then(s => s.get(STORE_NAME, key)).then(d => Buffer.from(d)).catch(e => e); + const stream = new (_stream().Readable)({ + // $FlowFixMe(incompatible-call) + async read() { + let data = await dataPromise; + if (data instanceof Error) { + stream.emit('error', data); + } else { + stream.push(Buffer.from(data)); + stream.push(null); + } + } + }); + return stream; + } + async setStream(key, stream) { + let buf = await (0, _utils().bufferStream)(stream); + await (await this.store).put(STORE_NAME, buf, key); + } + async getBlob(key) { + let data = await (await this.store).get(STORE_NAME, key); + if (data == null) { + return Promise.reject(new Error(`Key ${key} not found in cache`)); + } + return Buffer.from(data.buffer); + } + async setBlob(key, contents) { + let data = contents instanceof Uint8Array ? contents : Buffer.from(contents); + await (await this.store).put(STORE_NAME, data, key); + } + + // async setBlobs( + // entries: $ReadOnlyArray<[string, Buffer | string]>, + // ): Promise { + // const tx = (await this.store).transaction(STORE_NAME, 'readwrite'); + // await Promise.all([ + // ...entries.map(([key, value]) => + // tx.store.put( + // value instanceof Uint8Array ? value : Buffer.from(value), + // key, + // ), + // ), + // tx.done, + // ]); + // } + + async getBuffer(key) { + let data = await (await this.store).get(STORE_NAME, key); + if (data == null) { + return null; + } + return Buffer.from(data.buffer); + } + hasLargeBlob(key) { + return this.has(key); + } + getLargeBlob(key) { + return this.getBlob(key); + } + setLargeBlob(key, contents) { + return this.setBlob(key, contents); + } + async deleteLargeBlob(key) { + await (await this.store).delete(STORE_NAME, key); + } + refresh() { + // NOOP + } +} +exports.IDBCache = IDBCache; +(0, _core().registerSerializableClass)(`${_package.default.version}:IDBCache`, IDBCache); \ No newline at end of file diff --git a/node_modules/@parcel/cache/lib/IDBCache.js b/node_modules/@parcel/cache/lib/IDBCache.js new file mode 100644 index 00000000..efef3f88 --- /dev/null +++ b/node_modules/@parcel/cache/lib/IDBCache.js @@ -0,0 +1,13 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.IDBCache = void 0; +// $FlowFixMe +class IDBCache { + constructor() { + throw new Error('IDBCache is only supported in the browser'); + } +} +exports.IDBCache = IDBCache; \ No newline at end of file diff --git a/node_modules/@parcel/cache/lib/LMDBCache.js b/node_modules/@parcel/cache/lib/LMDBCache.js new file mode 100644 index 00000000..59cb647b --- /dev/null +++ b/node_modules/@parcel/cache/lib/LMDBCache.js @@ -0,0 +1,133 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.LMDBCache = void 0; +function _stream() { + const data = _interopRequireDefault(require("stream")); + _stream = function () { + return data; + }; + return data; +} +function _path() { + const data = _interopRequireDefault(require("path")); + _path = function () { + return data; + }; + return data; +} +function _util() { + const data = require("util"); + _util = function () { + return data; + }; + return data; +} +function _core() { + const data = require("@parcel/core"); + _core = function () { + return data; + }; + return data; +} +function _fs() { + const data = require("@parcel/fs"); + _fs = function () { + return data; + }; + return data; +} +var _package = _interopRequireDefault(require("../package.json")); +function _lmdb() { + const data = _interopRequireDefault(require("lmdb")); + _lmdb = function () { + return data; + }; + return data; +} +function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } +// flowlint-next-line untyped-import:off +// $FlowFixMe +const pipeline = (0, _util().promisify)(_stream().default.pipeline); +class LMDBCache { + // $FlowFixMe + + constructor(cacheDir) { + this.fs = new (_fs().NodeFS)(); + this.dir = cacheDir; + this.store = _lmdb().default.open(cacheDir, { + name: 'parcel-cache', + encoding: 'binary', + compression: true + }); + } + ensure() { + return Promise.resolve(); + } + serialize() { + return { + dir: this.dir + }; + } + static deserialize(opts) { + return new LMDBCache(opts.dir); + } + has(key) { + return Promise.resolve(this.store.get(key) != null); + } + get(key) { + let data = this.store.get(key); + if (data == null) { + return Promise.resolve(null); + } + return Promise.resolve((0, _core().deserialize)(data)); + } + async set(key, value) { + await this.setBlob(key, (0, _core().serialize)(value)); + } + getStream(key) { + return this.fs.createReadStream(_path().default.join(this.dir, key)); + } + setStream(key, stream) { + return pipeline(stream, this.fs.createWriteStream(_path().default.join(this.dir, key))); + } + getBlob(key) { + let buffer = this.store.get(key); + return buffer != null ? Promise.resolve(buffer) : Promise.reject(new Error(`Key ${key} not found in cache`)); + } + async setBlob(key, contents) { + await this.store.put(key, contents); + } + getBuffer(key) { + return Promise.resolve(this.store.get(key)); + } + hasLargeBlob(key) { + return this.fs.exists(_path().default.join(this.dir, key)); + } + + // eslint-disable-next-line require-await + async getLargeBlob(key) { + return this.fs.readFile(_path().default.join(this.dir, key)); + } + + // eslint-disable-next-line require-await + async setLargeBlob(key, contents, options) { + await this.fs.writeFile(_path().default.join(this.dir, key), contents, { + signal: options === null || options === void 0 ? void 0 : options.signal + }); + } + async deleteLargeBlob(key) { + await this.fs.rimraf(_path().default.join(this.dir, key)); + } + refresh() { + // Reset the read transaction for the store. This guarantees that + // the next read will see the latest changes to the store. + // Useful in scenarios where reads and writes are multi-threaded. + // See https://github.com/kriszyp/lmdb-js#resetreadtxn-void + this.store.resetReadTxn(); + } +} +exports.LMDBCache = LMDBCache; +(0, _core().registerSerializableClass)(`${_package.default.version}:LMDBCache`, LMDBCache); \ No newline at end of file diff --git a/node_modules/@parcel/cache/lib/index.js b/node_modules/@parcel/cache/lib/index.js new file mode 100644 index 00000000..92600851 --- /dev/null +++ b/node_modules/@parcel/cache/lib/index.js @@ -0,0 +1,38 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +var _LMDBCache = require("./LMDBCache"); +Object.keys(_LMDBCache).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _LMDBCache[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _LMDBCache[key]; + } + }); +}); +var _FSCache = require("./FSCache"); +Object.keys(_FSCache).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _FSCache[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _FSCache[key]; + } + }); +}); +var _IDBCache = require("./IDBCache"); +Object.keys(_IDBCache).forEach(function (key) { + if (key === "default" || key === "__esModule") return; + if (key in exports && exports[key] === _IDBCache[key]) return; + Object.defineProperty(exports, key, { + enumerable: true, + get: function () { + return _IDBCache[key]; + } + }); +}); \ No newline at end of file diff --git a/node_modules/@parcel/cache/lib/types.d.ts b/node_modules/@parcel/cache/lib/types.d.ts new file mode 100644 index 00000000..78c37a90 --- /dev/null +++ b/node_modules/@parcel/cache/lib/types.d.ts @@ -0,0 +1,2 @@ +import type { Cache } from "@parcel/types"; +export type { Cache }; diff --git a/node_modules/@parcel/cache/lib/types.js b/node_modules/@parcel/cache/lib/types.js new file mode 100644 index 00000000..9a390c31 --- /dev/null +++ b/node_modules/@parcel/cache/lib/types.js @@ -0,0 +1 @@ +"use strict"; \ No newline at end of file diff --git a/node_modules/@parcel/cache/package.json b/node_modules/@parcel/cache/package.json new file mode 100644 index 00000000..cc6e11b2 --- /dev/null +++ b/node_modules/@parcel/cache/package.json @@ -0,0 +1,44 @@ +{ + "name": "@parcel/cache", + "description": "Interface for defining caches and file-system, IDB and LMDB implementations.", + "version": "2.13.3", + "license": "MIT", + "publishConfig": { + "access": "public" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "repository": { + "type": "git", + "url": "https://github.com/parcel-bundler/parcel.git" + }, + "main": "lib/index.js", + "source": "src/index.js", + "types": "index.d.ts", + "engines": { + "node": ">= 16.0.0" + }, + "scripts": { + "build-ts": "mkdir -p lib && flow-to-ts src/types.js > lib/types.d.ts", + "check-ts": "tsc --noEmit index.d.ts" + }, + "dependencies": { + "@parcel/fs": "2.13.3", + "@parcel/logger": "2.13.3", + "@parcel/utils": "2.13.3", + "lmdb": "2.8.5" + }, + "peerDependencies": { + "@parcel/core": "^2.13.3" + }, + "devDependencies": { + "idb": "^5.0.8" + }, + "browser": { + "./src/IDBCache.js": "./src/IDBCache.browser.js", + "./src/LMDBCache.js": false + }, + "gitHead": "d19b1f6bdb05eb5a3085f44daae15c0fe2709ab9" +} diff --git a/node_modules/@parcel/cache/src/FSCache.js b/node_modules/@parcel/cache/src/FSCache.js new file mode 100644 index 00000000..a1824100 --- /dev/null +++ b/node_modules/@parcel/cache/src/FSCache.js @@ -0,0 +1,135 @@ +// @flow strict-local + +import type {Readable, Writable} from 'stream'; +import type {FilePath} from '@parcel/types'; +import type {FileSystem} from '@parcel/fs'; +import type {Cache} from './types'; + +import stream from 'stream'; +import path from 'path'; +import {promisify} from 'util'; +import logger from '@parcel/logger'; +import {serialize, deserialize, registerSerializableClass} from '@parcel/core'; +// flowlint-next-line untyped-import:off +import packageJson from '../package.json'; + +const pipeline: (Readable, Writable) => Promise = promisify( + stream.pipeline, +); + +export class FSCache implements Cache { + fs: FileSystem; + dir: FilePath; + + constructor(fs: FileSystem, cacheDir: FilePath) { + this.fs = fs; + this.dir = cacheDir; + } + + async ensure(): Promise { + // First, create the main cache directory if necessary. + await this.fs.mkdirp(this.dir); + + // In parallel, create sub-directories for every possible hex value + // This speeds up large caches on many file systems since there are fewer files in a single directory. + let dirPromises = []; + for (let i = 0; i < 256; i++) { + dirPromises.push( + this.fs.mkdirp(path.join(this.dir, ('00' + i.toString(16)).slice(-2))), + ); + } + + await Promise.all(dirPromises); + } + + _getCachePath(cacheId: string): FilePath { + return path.join(this.dir, cacheId.slice(0, 2), cacheId.slice(2)); + } + + getStream(key: string): Readable { + return this.fs.createReadStream(this._getCachePath(`${key}-large`)); + } + + setStream(key: string, stream: Readable): Promise { + return pipeline( + stream, + this.fs.createWriteStream(this._getCachePath(`${key}-large`)), + ); + } + + has(key: string): Promise { + return this.fs.exists(this._getCachePath(key)); + } + + getBlob(key: string): Promise { + return this.fs.readFile(this._getCachePath(key)); + } + + async setBlob(key: string, contents: Buffer | string): Promise { + await this.fs.writeFile(this._getCachePath(key), contents); + } + + async getBuffer(key: string): Promise { + try { + return await this.fs.readFile(this._getCachePath(key)); + } catch (err) { + if (err.code === 'ENOENT') { + return null; + } else { + throw err; + } + } + } + + hasLargeBlob(key: string): Promise { + return this.fs.exists(this._getCachePath(`${key}-large`)); + } + + getLargeBlob(key: string): Promise { + return this.fs.readFile(this._getCachePath(`${key}-large`)); + } + + async setLargeBlob( + key: string, + contents: Buffer | string, + options?: {|signal?: AbortSignal|}, + ): Promise { + await this.fs.writeFile(this._getCachePath(`${key}-large`), contents, { + signal: options?.signal, + }); + } + + async deleteLargeBlob(key: string): Promise { + await this.fs.rimraf(this._getCachePath(`${key}-large`)); + } + + async get(key: string): Promise { + try { + let data = await this.fs.readFile(this._getCachePath(key)); + return deserialize(data); + } catch (err) { + if (err.code === 'ENOENT') { + return null; + } else { + throw err; + } + } + } + + async set(key: string, value: mixed): Promise { + try { + let blobPath = this._getCachePath(key); + let data = serialize(value); + + await this.fs.writeFile(blobPath, data); + } catch (err) { + logger.error(err, '@parcel/cache'); + } + } + + refresh(): void { + // NOOP + } +} + +registerSerializableClass(`${packageJson.version}:FSCache`, FSCache); diff --git a/node_modules/@parcel/cache/src/IDBCache.browser.js b/node_modules/@parcel/cache/src/IDBCache.browser.js new file mode 100644 index 00000000..3c8cd75d --- /dev/null +++ b/node_modules/@parcel/cache/src/IDBCache.browser.js @@ -0,0 +1,145 @@ +// @flow strict-local +import type {Cache} from './types'; + +import {Readable} from 'stream'; +import {serialize, deserialize, registerSerializableClass} from '@parcel/core'; +import {bufferStream} from '@parcel/utils'; +// $FlowFixMe[untyped-import] +import packageJson from '../package.json'; +// $FlowFixMe[untyped-import] +import {openDB} from 'idb'; + +const STORE_NAME = 'cache'; + +export class IDBCache implements Cache { + // $FlowFixMe + store: any; + + constructor() { + this.store = openDB('REPL-parcel-cache', 1, { + upgrade(db) { + db.createObjectStore(STORE_NAME); + }, + blocked() {}, + blocking() {}, + terminated() {}, + }); + } + + ensure(): Promise { + return Promise.resolve(); + } + + serialize(): {||} { + return { + /*::...null*/ + }; + } + + static deserialize(): IDBCache { + return new IDBCache(); + } + + has(key: string): Promise { + return Promise.resolve(this.store.get(key) != null); + } + + async get(key: string): Promise { + let data = await (await this.store).get(STORE_NAME, key); + if (data == null) { + return null; + } + + return Promise.resolve(deserialize(data)); + } + + async set(key: string, value: mixed): Promise { + await (await this.store).put(STORE_NAME, serialize(value), key); + } + + getStream(key: string): Readable { + let dataPromise = this.store + .then(s => s.get(STORE_NAME, key)) + .then(d => Buffer.from(d)) + .catch(e => e); + const stream = new Readable({ + // $FlowFixMe(incompatible-call) + async read() { + let data = await dataPromise; + if (data instanceof Error) { + stream.emit('error', data); + } else { + stream.push(Buffer.from(data)); + stream.push(null); + } + }, + }); + + return stream; + } + + async setStream(key: string, stream: Readable): Promise { + let buf = await bufferStream(stream); + await (await this.store).put(STORE_NAME, buf, key); + } + + async getBlob(key: string): Promise { + let data = await (await this.store).get(STORE_NAME, key); + if (data == null) { + return Promise.reject(new Error(`Key ${key} not found in cache`)); + } + return Buffer.from(data.buffer); + } + + async setBlob(key: string, contents: Buffer | string): Promise { + let data = + contents instanceof Uint8Array ? contents : Buffer.from(contents); + await (await this.store).put(STORE_NAME, data, key); + } + + // async setBlobs( + // entries: $ReadOnlyArray<[string, Buffer | string]>, + // ): Promise { + // const tx = (await this.store).transaction(STORE_NAME, 'readwrite'); + // await Promise.all([ + // ...entries.map(([key, value]) => + // tx.store.put( + // value instanceof Uint8Array ? value : Buffer.from(value), + // key, + // ), + // ), + // tx.done, + // ]); + // } + + async getBuffer(key: string): Promise { + let data = await (await this.store).get(STORE_NAME, key); + if (data == null) { + return null; + } + + return Buffer.from(data.buffer); + } + + hasLargeBlob(key: string): Promise { + return this.has(key); + } + + getLargeBlob(key: string): Promise { + return this.getBlob(key); + } + + setLargeBlob(key: string, contents: Buffer | string): Promise { + return this.setBlob(key, contents); + } + + async deleteLargeBlob(key: string): Promise { + await (await this.store).delete(STORE_NAME, key); + } + + refresh(): void { + // NOOP + } +} + +registerSerializableClass(`${packageJson.version}:IDBCache`, IDBCache); diff --git a/node_modules/@parcel/cache/src/IDBCache.js b/node_modules/@parcel/cache/src/IDBCache.js new file mode 100644 index 00000000..515e8480 --- /dev/null +++ b/node_modules/@parcel/cache/src/IDBCache.js @@ -0,0 +1,9 @@ +// @flow strict-local +import type {Cache} from './types'; + +// $FlowFixMe +export class IDBCache implements Cache { + constructor() { + throw new Error('IDBCache is only supported in the browser'); + } +} diff --git a/node_modules/@parcel/cache/src/LMDBCache.js b/node_modules/@parcel/cache/src/LMDBCache.js new file mode 100644 index 00000000..15205dfe --- /dev/null +++ b/node_modules/@parcel/cache/src/LMDBCache.js @@ -0,0 +1,127 @@ +// @flow strict-local +import type {FilePath} from '@parcel/types'; +import type {Cache} from './types'; +import type {Readable, Writable} from 'stream'; + +import stream from 'stream'; +import path from 'path'; +import {promisify} from 'util'; +import {serialize, deserialize, registerSerializableClass} from '@parcel/core'; +import {NodeFS} from '@parcel/fs'; +// flowlint-next-line untyped-import:off +import packageJson from '../package.json'; +// $FlowFixMe +import lmdb from 'lmdb'; + +const pipeline: (Readable, Writable) => Promise = promisify( + stream.pipeline, +); + +export class LMDBCache implements Cache { + fs: NodeFS; + dir: FilePath; + // $FlowFixMe + store: any; + + constructor(cacheDir: FilePath) { + this.fs = new NodeFS(); + this.dir = cacheDir; + + this.store = lmdb.open(cacheDir, { + name: 'parcel-cache', + encoding: 'binary', + compression: true, + }); + } + + ensure(): Promise { + return Promise.resolve(); + } + + serialize(): {|dir: FilePath|} { + return { + dir: this.dir, + }; + } + + static deserialize(opts: {|dir: FilePath|}): LMDBCache { + return new LMDBCache(opts.dir); + } + + has(key: string): Promise { + return Promise.resolve(this.store.get(key) != null); + } + + get(key: string): Promise { + let data = this.store.get(key); + if (data == null) { + return Promise.resolve(null); + } + + return Promise.resolve(deserialize(data)); + } + + async set(key: string, value: mixed): Promise { + await this.setBlob(key, serialize(value)); + } + + getStream(key: string): Readable { + return this.fs.createReadStream(path.join(this.dir, key)); + } + + setStream(key: string, stream: Readable): Promise { + return pipeline( + stream, + this.fs.createWriteStream(path.join(this.dir, key)), + ); + } + + getBlob(key: string): Promise { + let buffer = this.store.get(key); + return buffer != null + ? Promise.resolve(buffer) + : Promise.reject(new Error(`Key ${key} not found in cache`)); + } + + async setBlob(key: string, contents: Buffer | string): Promise { + await this.store.put(key, contents); + } + + getBuffer(key: string): Promise { + return Promise.resolve(this.store.get(key)); + } + + hasLargeBlob(key: string): Promise { + return this.fs.exists(path.join(this.dir, key)); + } + + // eslint-disable-next-line require-await + async getLargeBlob(key: string): Promise { + return this.fs.readFile(path.join(this.dir, key)); + } + + // eslint-disable-next-line require-await + async setLargeBlob( + key: string, + contents: Buffer | string, + options?: {|signal?: AbortSignal|}, + ): Promise { + await this.fs.writeFile(path.join(this.dir, key), contents, { + signal: options?.signal, + }); + } + + async deleteLargeBlob(key: string): Promise { + await this.fs.rimraf(path.join(this.dir, key)); + } + + refresh(): void { + // Reset the read transaction for the store. This guarantees that + // the next read will see the latest changes to the store. + // Useful in scenarios where reads and writes are multi-threaded. + // See https://github.com/kriszyp/lmdb-js#resetreadtxn-void + this.store.resetReadTxn(); + } +} + +registerSerializableClass(`${packageJson.version}:LMDBCache`, LMDBCache); diff --git a/node_modules/@parcel/cache/src/index.js b/node_modules/@parcel/cache/src/index.js new file mode 100644 index 00000000..a83c15f5 --- /dev/null +++ b/node_modules/@parcel/cache/src/index.js @@ -0,0 +1,5 @@ +// @flow +export type {Cache} from './types'; +export * from './LMDBCache'; +export * from './FSCache'; +export * from './IDBCache'; diff --git a/node_modules/@parcel/cache/src/types.js b/node_modules/@parcel/cache/src/types.js new file mode 100644 index 00000000..472be4c8 --- /dev/null +++ b/node_modules/@parcel/cache/src/types.js @@ -0,0 +1,4 @@ +// @flow +import type {Cache} from '@parcel/types'; + +export type {Cache}; diff --git a/node_modules/@parcel/codeframe/LICENSE b/node_modules/@parcel/codeframe/LICENSE new file mode 100644 index 00000000..7fb9bc95 --- /dev/null +++ b/node_modules/@parcel/codeframe/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017-present Devon Govett + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/@parcel/codeframe/lib/codeframe.js b/node_modules/@parcel/codeframe/lib/codeframe.js new file mode 100644 index 00000000..566a7977 --- /dev/null +++ b/node_modules/@parcel/codeframe/lib/codeframe.js @@ -0,0 +1,36049 @@ +var $goPnT$chalk = require("chalk"); + + +function $parcel$interopDefault(a) { + return a && a.__esModule ? a.default : a; +} + +function $parcel$defineInteropFlag(a) { + Object.defineProperty(a, '__esModule', {value: true, configurable: true}); +} + +function $parcel$export(e, n, v, s) { + Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true}); +} + + var $parcel$global = globalThis; + +var $parcel$modules = {}; +var $parcel$inits = {}; + +var parcelRequire = $parcel$global["parcelRequire94c2"]; + +if (parcelRequire == null) { + parcelRequire = function(id) { + if (id in $parcel$modules) { + return $parcel$modules[id].exports; + } + if (id in $parcel$inits) { + var init = $parcel$inits[id]; + delete $parcel$inits[id]; + var module = {id: id, exports: {}}; + $parcel$modules[id] = module; + init.call(module.exports, module, module.exports); + return module.exports; + } + var err = new Error("Cannot find module '" + id + "'"); + err.code = 'MODULE_NOT_FOUND'; + throw err; + }; + + parcelRequire.register = function register(id, init) { + $parcel$inits[id] = init; + }; + + $parcel$global["parcelRequire94c2"] = parcelRequire; +} + +var parcelRegister = parcelRequire.register; +parcelRegister("6XrSB", function(module, exports) { +/* +Language: 1C:Enterprise +Author: Stanislav Belov +Description: built-in language 1C:Enterprise (v7, v8) +Category: enterprise +*/ function $510de111102fdc7f$var$_1c(hljs) { + // общий паттерн для определения идентификаторов + var UNDERSCORE_IDENT_RE = "[A-Za-z\u0410-\u042F\u0430-\u044F\u0451\u0401_][A-Za-z\u0410-\u042F\u0430-\u044F\u0451\u0401_0-9]+"; + // v7 уникальные ключевые слова, отсутствующие в v8 ==> keyword + var v7_keywords = "\u0434\u0430\u043B\u0435\u0435 "; + // v8 ключевые слова ==> keyword + var v8_keywords = "\u0432\u043E\u0437\u0432\u0440\u0430\u0442 \u0432\u044B\u0437\u0432\u0430\u0442\u044C\u0438\u0441\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0435 \u0432\u044B\u043F\u043E\u043B\u043D\u0438\u0442\u044C \u0434\u043B\u044F \u0435\u0441\u043B\u0438 \u0438 \u0438\u0437 \u0438\u043B\u0438 \u0438\u043D\u0430\u0447\u0435 \u0438\u043D\u0430\u0447\u0435\u0435\u0441\u043B\u0438 \u0438\u0441\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0435 \u043A\u0430\u0436\u0434\u043E\u0433\u043E \u043A\u043E\u043D\u0435\u0446\u0435\u0441\u043B\u0438 \u043A\u043E\u043D\u0435\u0446\u043F\u043E\u043F\u044B\u0442\u043A\u0438 \u043A\u043E\u043D\u0435\u0446\u0446\u0438\u043A\u043B\u0430 \u043D\u0435 \u043D\u043E\u0432\u044B\u0439 \u043F\u0435\u0440\u0435\u0439\u0442\u0438 \u043F\u0435\u0440\u0435\u043C \u043F\u043E \u043F\u043E\u043A\u0430 \u043F\u043E\u043F\u044B\u0442\u043A\u0430 \u043F\u0440\u0435\u0440\u0432\u0430\u0442\u044C \u043F\u0440\u043E\u0434\u043E\u043B\u0436\u0438\u0442\u044C \u0442\u043E\u0433\u0434\u0430 \u0446\u0438\u043A\u043B \u044D\u043A\u0441\u043F\u043E\u0440\u0442 "; + // keyword : ключевые слова + var KEYWORD = v7_keywords + v8_keywords; + // v7 уникальные директивы, отсутствующие в v8 ==> meta-keyword + var v7_meta_keywords = "\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C\u0438\u0437\u0444\u0430\u0439\u043B\u0430 "; + // v8 ключевые слова в инструкциях препроцессора, директивах компиляции, аннотациях ==> meta-keyword + var v8_meta_keywords = "\u0432\u0435\u0431\u043A\u043B\u0438\u0435\u043D\u0442 \u0432\u043C\u0435\u0441\u0442\u043E \u0432\u043D\u0435\u0448\u043D\u0435\u0435\u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u0435 \u043A\u043B\u0438\u0435\u043D\u0442 \u043A\u043E\u043D\u0435\u0446\u043E\u0431\u043B\u0430\u0441\u0442\u0438 \u043C\u043E\u0431\u0438\u043B\u044C\u043D\u043E\u0435\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0435\u043A\u043B\u0438\u0435\u043D\u0442 \u043C\u043E\u0431\u0438\u043B\u044C\u043D\u043E\u0435\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0435\u0441\u0435\u0440\u0432\u0435\u0440 \u043D\u0430\u043A\u043B\u0438\u0435\u043D\u0442\u0435 \u043D\u0430\u043A\u043B\u0438\u0435\u043D\u0442\u0435\u043D\u0430\u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u043D\u0430\u043A\u043B\u0438\u0435\u043D\u0442\u0435\u043D\u0430\u0441\u0435\u0440\u0432\u0435\u0440\u0435\u0431\u0435\u0437\u043A\u043E\u043D\u0442\u0435\u043A\u0441\u0442\u0430 \u043D\u0430\u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u043D\u0430\u0441\u0435\u0440\u0432\u0435\u0440\u0435\u0431\u0435\u0437\u043A\u043E\u043D\u0442\u0435\u043A\u0441\u0442\u0430 \u043E\u0431\u043B\u0430\u0441\u0442\u044C \u043F\u0435\u0440\u0435\u0434 \u043F\u043E\u0441\u043B\u0435 \u0441\u0435\u0440\u0432\u0435\u0440 \u0442\u043E\u043B\u0441\u0442\u044B\u0439\u043A\u043B\u0438\u0435\u043D\u0442\u043E\u0431\u044B\u0447\u043D\u043E\u0435\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u0442\u043E\u043B\u0441\u0442\u044B\u0439\u043A\u043B\u0438\u0435\u043D\u0442\u0443\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u043C\u043E\u0435\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u0442\u043E\u043D\u043A\u0438\u0439\u043A\u043B\u0438\u0435\u043D\u0442 "; + // meta-keyword : ключевые слова в инструкциях препроцессора, директивах компиляции, аннотациях + var METAKEYWORD = v7_meta_keywords + v8_meta_keywords; + // v7 системные константы ==> built_in + var v7_system_constants = "\u0440\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u0435\u043B\u044C\u0441\u0442\u0440\u0430\u043D\u0438\u0446 \u0440\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u0435\u043B\u044C\u0441\u0442\u0440\u043E\u043A \u0441\u0438\u043C\u0432\u043E\u043B\u0442\u0430\u0431\u0443\u043B\u044F\u0446\u0438\u0438 "; + // v7 уникальные методы глобального контекста, отсутствующие в v8 ==> built_in + var v7_global_context_methods = "ansitooem oemtoansi \u0432\u0432\u0435\u0441\u0442\u0438\u0432\u0438\u0434\u0441\u0443\u0431\u043A\u043E\u043D\u0442\u043E \u0432\u0432\u0435\u0441\u0442\u0438\u043F\u0435\u0440\u0435\u0447\u0438\u0441\u043B\u0435\u043D\u0438\u0435 \u0432\u0432\u0435\u0441\u0442\u0438\u043F\u0435\u0440\u0438\u043E\u0434 \u0432\u0432\u0435\u0441\u0442\u0438\u043F\u043B\u0430\u043D\u0441\u0447\u0435\u0442\u043E\u0432 \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u044B\u0439\u043F\u043B\u0430\u043D\u0441\u0447\u0435\u0442\u043E\u0432 \u0434\u0430\u0442\u0430\u0433\u043E\u0434 \u0434\u0430\u0442\u0430\u043C\u0435\u0441\u044F\u0446 \u0434\u0430\u0442\u0430\u0447\u0438\u0441\u043B\u043E \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A\u0441\u0438\u0441\u0442\u0435\u043C\u044B \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435\u0432\u0441\u0442\u0440\u043E\u043A\u0443 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435\u0438\u0437\u0441\u0442\u0440\u043E\u043A\u0438 \u043A\u0430\u0442\u0430\u043B\u043E\u0433\u0438\u0431 \u043A\u0430\u0442\u0430\u043B\u043E\u0433\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F \u043A\u043E\u0434\u0441\u0438\u043C\u0432 \u043A\u043E\u043D\u0433\u043E\u0434\u0430 \u043A\u043E\u043D\u0435\u0446\u043F\u0435\u0440\u0438\u043E\u0434\u0430\u0431\u0438 \u043A\u043E\u043D\u0435\u0446\u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043D\u043D\u043E\u0433\u043E\u043F\u0435\u0440\u0438\u043E\u0434\u0430\u0431\u0438 \u043A\u043E\u043D\u0435\u0446\u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u043E\u0433\u043E\u0438\u043D\u0442\u0435\u0440\u0432\u0430\u043B\u0430 \u043A\u043E\u043D\u043A\u0432\u0430\u0440\u0442\u0430\u043B\u0430 \u043A\u043E\u043D\u043C\u0435\u0441\u044F\u0446\u0430 \u043A\u043E\u043D\u043D\u0435\u0434\u0435\u043B\u0438 \u043B\u043E\u0433 \u043B\u043E\u043310 \u043C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u043E\u0435\u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E\u0441\u0443\u0431\u043A\u043E\u043D\u0442\u043E \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435\u0438\u043D\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435\u043D\u0430\u0431\u043E\u0440\u0430\u043F\u0440\u0430\u0432 \u043D\u0430\u0437\u043D\u0430\u0447\u0438\u0442\u044C\u0432\u0438\u0434 \u043D\u0430\u0437\u043D\u0430\u0447\u0438\u0442\u044C\u0441\u0447\u0435\u0442 \u043D\u0430\u0439\u0442\u0438\u0441\u0441\u044B\u043B\u043A\u0438 \u043D\u0430\u0447\u0430\u043B\u043E\u043F\u0435\u0440\u0438\u043E\u0434\u0430\u0431\u0438 \u043D\u0430\u0447\u0430\u043B\u043E\u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u043E\u0433\u043E\u0438\u043D\u0442\u0435\u0440\u0432\u0430\u043B\u0430 \u043D\u0430\u0447\u0433\u043E\u0434\u0430 \u043D\u0430\u0447\u043A\u0432\u0430\u0440\u0442\u0430\u043B\u0430 \u043D\u0430\u0447\u043C\u0435\u0441\u044F\u0446\u0430 \u043D\u0430\u0447\u043D\u0435\u0434\u0435\u043B\u0438 \u043D\u043E\u043C\u0435\u0440\u0434\u043D\u044F\u0433\u043E\u0434\u0430 \u043D\u043E\u043C\u0435\u0440\u0434\u043D\u044F\u043D\u0435\u0434\u0435\u043B\u0438 \u043D\u043E\u043C\u0435\u0440\u043D\u0435\u0434\u0435\u043B\u0438\u0433\u043E\u0434\u0430 \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0430\u043E\u0436\u0438\u0434\u0430\u043D\u0438\u044F \u043E\u0441\u043D\u043E\u0432\u043D\u043E\u0439\u0436\u0443\u0440\u043D\u0430\u043B\u0440\u0430\u0441\u0447\u0435\u0442\u043E\u0432 \u043E\u0441\u043D\u043E\u0432\u043D\u043E\u0439\u043F\u043B\u0430\u043D\u0441\u0447\u0435\u0442\u043E\u0432 \u043E\u0441\u043D\u043E\u0432\u043D\u043E\u0439\u044F\u0437\u044B\u043A \u043E\u0447\u0438\u0441\u0442\u0438\u0442\u044C\u043E\u043A\u043D\u043E\u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0439 \u043F\u0435\u0440\u0438\u043E\u0434\u0441\u0442\u0440 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u0432\u0440\u0435\u043C\u044F\u0442\u0430 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u0434\u0430\u0442\u0443\u0442\u0430 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0442\u0430 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F\u043E\u0442\u0431\u043E\u0440\u0430 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u043F\u043E\u0437\u0438\u0446\u0438\u044E\u0442\u0430 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u043F\u0443\u0441\u0442\u043E\u0435\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u0442\u0430 \u043F\u0440\u0435\u0444\u0438\u043A\u0441\u0430\u0432\u0442\u043E\u043D\u0443\u043C\u0435\u0440\u0430\u0446\u0438\u0438 \u043F\u0440\u043E\u043F\u0438\u0441\u044C \u043F\u0443\u0441\u0442\u043E\u0435\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u0440\u0430\u0437\u043C \u0440\u0430\u0437\u043E\u0431\u0440\u0430\u0442\u044C\u043F\u043E\u0437\u0438\u0446\u0438\u044E\u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u0442\u044C\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044B\u043D\u0430 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u0442\u044C\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044B\u043F\u043E \u0441\u0438\u043C\u0432 \u0441\u043E\u0437\u0434\u0430\u0442\u044C\u043E\u0431\u044A\u0435\u043A\u0442 \u0441\u0442\u0430\u0442\u0443\u0441\u0432\u043E\u0437\u0432\u0440\u0430\u0442\u0430 \u0441\u0442\u0440\u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E\u0441\u0442\u0440\u043E\u043A \u0441\u0444\u043E\u0440\u043C\u0438\u0440\u043E\u0432\u0430\u0442\u044C\u043F\u043E\u0437\u0438\u0446\u0438\u044E\u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430 \u0441\u0447\u0435\u0442\u043F\u043E\u043A\u043E\u0434\u0443 \u0442\u0435\u043A\u0443\u0449\u0435\u0435\u0432\u0440\u0435\u043C\u044F \u0442\u0438\u043F\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u0442\u0438\u043F\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F\u0441\u0442\u0440 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C\u0442\u0430\u043D\u0430 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C\u0442\u0430\u043F\u043E \u0444\u0438\u043A\u0441\u0448\u0430\u0431\u043B\u043E\u043D \u0448\u0430\u0431\u043B\u043E\u043D "; + // v8 методы глобального контекста ==> built_in + var v8_global_context_methods = "acos asin atan base64\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 base64\u0441\u0442\u0440\u043E\u043A\u0430 cos exp log log10 pow sin sqrt tan xml\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 xml\u0441\u0442\u0440\u043E\u043A\u0430 xml\u0442\u0438\u043F xml\u0442\u0438\u043F\u0437\u043D\u0447 \u0430\u043A\u0442\u0438\u0432\u043D\u043E\u0435\u043E\u043A\u043D\u043E \u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u044B\u0439\u0440\u0435\u0436\u0438\u043C \u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u044B\u0439\u0440\u0435\u0436\u0438\u043C\u0440\u0430\u0437\u0434\u0435\u043B\u0435\u043D\u0438\u044F\u0434\u0430\u043D\u043D\u044B\u0445 \u0431\u0443\u043B\u0435\u0432\u043E \u0432\u0432\u0435\u0441\u0442\u0438\u0434\u0430\u0442\u0443 \u0432\u0432\u0435\u0441\u0442\u0438\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u0432\u0432\u0435\u0441\u0442\u0438\u0441\u0442\u0440\u043E\u043A\u0443 \u0432\u0432\u0435\u0441\u0442\u0438\u0447\u0438\u0441\u043B\u043E \u0432\u043E\u0437\u043C\u043E\u0436\u043D\u043E\u0441\u0442\u044C\u0447\u0442\u0435\u043D\u0438\u044Fxml \u0432\u043E\u043F\u0440\u043E\u0441 \u0432\u043E\u0441\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u0432\u0440\u0435\u0433 \u0432\u044B\u0433\u0440\u0443\u0437\u0438\u0442\u044C\u0436\u0443\u0440\u043D\u0430\u043B\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0432\u044B\u043F\u043E\u043B\u043D\u0438\u0442\u044C\u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0443\u043E\u043F\u043E\u0432\u0435\u0449\u0435\u043D\u0438\u044F \u0432\u044B\u043F\u043E\u043B\u043D\u0438\u0442\u044C\u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0443\u043F\u0440\u0430\u0432\u0434\u043E\u0441\u0442\u0443\u043F\u0430 \u0432\u044B\u0447\u0438\u0441\u043B\u0438\u0442\u044C \u0433\u043E\u0434 \u0434\u0430\u043D\u043D\u044B\u0435\u0444\u043E\u0440\u043C\u044B\u0432\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u0434\u0430\u0442\u0430 \u0434\u0435\u043D\u044C \u0434\u0435\u043D\u044C\u0433\u043E\u0434\u0430 \u0434\u0435\u043D\u044C\u043D\u0435\u0434\u0435\u043B\u0438 \u0434\u043E\u0431\u0430\u0432\u0438\u0442\u044C\u043C\u0435\u0441\u044F\u0446 \u0437\u0430\u0431\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u0430\u0442\u044C\u0434\u0430\u043D\u043D\u044B\u0435\u0434\u043B\u044F\u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0437\u0430\u0431\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u0430\u0442\u044C\u0440\u0430\u0431\u043E\u0442\u0443\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044C\u0440\u0430\u0431\u043E\u0442\u0443\u0441\u0438\u0441\u0442\u0435\u043C\u044B \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C\u0432\u043D\u0435\u0448\u043D\u044E\u044E\u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0443 \u0437\u0430\u043A\u0440\u044B\u0442\u044C\u0441\u043F\u0440\u0430\u0432\u043A\u0443 \u0437\u0430\u043F\u0438\u0441\u0430\u0442\u044Cjson \u0437\u0430\u043F\u0438\u0441\u0430\u0442\u044Cxml \u0437\u0430\u043F\u0438\u0441\u0430\u0442\u044C\u0434\u0430\u0442\u0443json \u0437\u0430\u043F\u0438\u0441\u044C\u0436\u0443\u0440\u043D\u0430\u043B\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0437\u0430\u043F\u043E\u043B\u043D\u0438\u0442\u044C\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F\u0441\u0432\u043E\u0439\u0441\u0442\u0432 \u0437\u0430\u043F\u0440\u043E\u0441\u0438\u0442\u044C\u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043D\u0438\u0435\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F \u0437\u0430\u043F\u0443\u0441\u0442\u0438\u0442\u044C\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u0437\u0430\u043F\u0443\u0441\u0442\u0438\u0442\u044C\u0441\u0438\u0441\u0442\u0435\u043C\u0443 \u0437\u0430\u0444\u0438\u043A\u0441\u0438\u0440\u043E\u0432\u0430\u0442\u044C\u0442\u0440\u0430\u043D\u0437\u0430\u043A\u0446\u0438\u044E \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435\u0432\u0434\u0430\u043D\u043D\u044B\u0435\u0444\u043E\u0440\u043C\u044B \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435\u0432\u0441\u0442\u0440\u043E\u043A\u0443\u0432\u043D\u0443\u0442\u0440 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435\u0432\u0444\u0430\u0439\u043B \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435\u0437\u0430\u043F\u043E\u043B\u043D\u0435\u043D\u043E \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435\u0438\u0437\u0441\u0442\u0440\u043E\u043A\u0438\u0432\u043D\u0443\u0442\u0440 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435\u0438\u0437\u0444\u0430\u0439\u043B\u0430 \u0438\u0437xml\u0442\u0438\u043F\u0430 \u0438\u043C\u043F\u043E\u0440\u0442\u043C\u043E\u0434\u0435\u043B\u0438xdto \u0438\u043C\u044F\u043A\u043E\u043C\u043F\u044C\u044E\u0442\u0435\u0440\u0430 \u0438\u043C\u044F\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F \u0438\u043D\u0438\u0446\u0438\u0430\u043B\u0438\u0437\u0438\u0440\u043E\u0432\u0430\u0442\u044C\u043F\u0440\u0435\u0434\u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0435\u0434\u0430\u043D\u043D\u044B\u0435 \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044F\u043E\u0431\u043E\u0448\u0438\u0431\u043A\u0435 \u043A\u0430\u0442\u0430\u043B\u043E\u0433\u0431\u0438\u0431\u043B\u0438\u043E\u0442\u0435\u043A\u0438\u043C\u043E\u0431\u0438\u043B\u044C\u043D\u043E\u0433\u043E\u0443\u0441\u0442\u0440\u043E\u0439\u0441\u0442\u0432\u0430 \u043A\u0430\u0442\u0430\u043B\u043E\u0433\u0432\u0440\u0435\u043C\u0435\u043D\u043D\u044B\u0445\u0444\u0430\u0439\u043B\u043E\u0432 \u043A\u0430\u0442\u0430\u043B\u043E\u0433\u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u043E\u0432 \u043A\u0430\u0442\u0430\u043B\u043E\u0433\u043F\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u044B \u043A\u043E\u0434\u0438\u0440\u043E\u0432\u0430\u0442\u044C\u0441\u0442\u0440\u043E\u043A\u0443 \u043A\u043E\u0434\u043B\u043E\u043A\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u0438\u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u043E\u043D\u043D\u043E\u0439\u0431\u0430\u0437\u044B \u043A\u043E\u0434\u0441\u0438\u043C\u0432\u043E\u043B\u0430 \u043A\u043E\u043C\u0430\u043D\u0434\u0430\u0441\u0438\u0441\u0442\u0435\u043C\u044B \u043A\u043E\u043D\u0435\u0446\u0433\u043E\u0434\u0430 \u043A\u043E\u043D\u0435\u0446\u0434\u043D\u044F \u043A\u043E\u043D\u0435\u0446\u043A\u0432\u0430\u0440\u0442\u0430\u043B\u0430 \u043A\u043E\u043D\u0435\u0446\u043C\u0435\u0441\u044F\u0446\u0430 \u043A\u043E\u043D\u0435\u0446\u043C\u0438\u043D\u0443\u0442\u044B \u043A\u043E\u043D\u0435\u0446\u043D\u0435\u0434\u0435\u043B\u0438 \u043A\u043E\u043D\u0435\u0446\u0447\u0430\u0441\u0430 \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044F\u0431\u0430\u0437\u044B\u0434\u0430\u043D\u043D\u044B\u0445\u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0430\u0434\u0438\u043D\u0430\u043C\u0438\u0447\u0435\u0441\u043A\u0438 \u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044F\u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0430 \u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C\u0434\u0430\u043D\u043D\u044B\u0435\u0444\u043E\u0440\u043C\u044B \u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C\u0444\u0430\u0439\u043B \u043A\u0440\u0430\u0442\u043A\u043E\u0435\u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0438\u0435\u043E\u0448\u0438\u0431\u043A\u0438 \u043B\u0435\u0432 \u043C\u0430\u043A\u0441 \u043C\u0435\u0441\u0442\u043D\u043E\u0435\u0432\u0440\u0435\u043C\u044F \u043C\u0435\u0441\u044F\u0446 \u043C\u0438\u043D \u043C\u0438\u043D\u0443\u0442\u0430 \u043C\u043E\u043D\u043E\u043F\u043E\u043B\u044C\u043D\u044B\u0439\u0440\u0435\u0436\u0438\u043C \u043D\u0430\u0439\u0442\u0438 \u043D\u0430\u0439\u0442\u0438\u043D\u0435\u0434\u043E\u043F\u0443\u0441\u0442\u0438\u043C\u044B\u0435\u0441\u0438\u043C\u0432\u043E\u043B\u044Bxml \u043D\u0430\u0439\u0442\u0438\u043E\u043A\u043D\u043E\u043F\u043E\u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u043E\u043D\u043D\u043E\u0439\u0441\u0441\u044B\u043B\u043A\u0435 \u043D\u0430\u0439\u0442\u0438\u043F\u043E\u043C\u0435\u0447\u0435\u043D\u043D\u044B\u0435\u043D\u0430\u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0435 \u043D\u0430\u0439\u0442\u0438\u043F\u043E\u0441\u0441\u044B\u043B\u043A\u0430\u043C \u043D\u0430\u0439\u0442\u0438\u0444\u0430\u0439\u043B\u044B \u043D\u0430\u0447\u0430\u043B\u043E\u0433\u043E\u0434\u0430 \u043D\u0430\u0447\u0430\u043B\u043E\u0434\u043D\u044F \u043D\u0430\u0447\u0430\u043B\u043E\u043A\u0432\u0430\u0440\u0442\u0430\u043B\u0430 \u043D\u0430\u0447\u0430\u043B\u043E\u043C\u0435\u0441\u044F\u0446\u0430 \u043D\u0430\u0447\u0430\u043B\u043E\u043C\u0438\u043D\u0443\u0442\u044B \u043D\u0430\u0447\u0430\u043B\u043E\u043D\u0435\u0434\u0435\u043B\u0438 \u043D\u0430\u0447\u0430\u043B\u043E\u0447\u0430\u0441\u0430 \u043D\u0430\u0447\u0430\u0442\u044C\u0437\u0430\u043F\u0440\u043E\u0441\u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043D\u0438\u044F\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F \u043D\u0430\u0447\u0430\u0442\u044C\u0437\u0430\u043F\u0443\u0441\u043A\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F \u043D\u0430\u0447\u0430\u0442\u044C\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435\u0444\u0430\u0439\u043B\u0430 \u043D\u0430\u0447\u0430\u0442\u044C\u043F\u0435\u0440\u0435\u043C\u0435\u0449\u0435\u043D\u0438\u0435\u0444\u0430\u0439\u043B\u0430 \u043D\u0430\u0447\u0430\u0442\u044C\u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0435\u0432\u043D\u0435\u0448\u043D\u0435\u0439\u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u044B \u043D\u0430\u0447\u0430\u0442\u044C\u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0435\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u0438\u044F\u0440\u0430\u0431\u043E\u0442\u044B\u0441\u043A\u0440\u0438\u043F\u0442\u043E\u0433\u0440\u0430\u0444\u0438\u0435\u0439 \u043D\u0430\u0447\u0430\u0442\u044C\u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0435\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u0438\u044F\u0440\u0430\u0431\u043E\u0442\u044B\u0441\u0444\u0430\u0439\u043B\u0430\u043C\u0438 \u043D\u0430\u0447\u0430\u0442\u044C\u043F\u043E\u0438\u0441\u043A\u0444\u0430\u0439\u043B\u043E\u0432 \u043D\u0430\u0447\u0430\u0442\u044C\u043F\u043E\u043B\u0443\u0447\u0435\u043D\u0438\u0435\u043A\u0430\u0442\u0430\u043B\u043E\u0433\u0430\u0432\u0440\u0435\u043C\u0435\u043D\u043D\u044B\u0445\u0444\u0430\u0439\u043B\u043E\u0432 \u043D\u0430\u0447\u0430\u0442\u044C\u043F\u043E\u043B\u0443\u0447\u0435\u043D\u0438\u0435\u043A\u0430\u0442\u0430\u043B\u043E\u0433\u0430\u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u043E\u0432 \u043D\u0430\u0447\u0430\u0442\u044C\u043F\u043E\u043B\u0443\u0447\u0435\u043D\u0438\u0435\u0440\u0430\u0431\u043E\u0447\u0435\u0433\u043E\u043A\u0430\u0442\u0430\u043B\u043E\u0433\u0430\u0434\u0430\u043D\u043D\u044B\u0445\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F \u043D\u0430\u0447\u0430\u0442\u044C\u043F\u043E\u043B\u0443\u0447\u0435\u043D\u0438\u0435\u0444\u0430\u0439\u043B\u043E\u0432 \u043D\u0430\u0447\u0430\u0442\u044C\u043F\u043E\u043C\u0435\u0449\u0435\u043D\u0438\u0435\u0444\u0430\u0439\u043B\u0430 \u043D\u0430\u0447\u0430\u0442\u044C\u043F\u043E\u043C\u0435\u0449\u0435\u043D\u0438\u0435\u0444\u0430\u0439\u043B\u043E\u0432 \u043D\u0430\u0447\u0430\u0442\u044C\u0441\u043E\u0437\u0434\u0430\u043D\u0438\u0435\u0434\u0432\u043E\u0438\u0447\u043D\u044B\u0445\u0434\u0430\u043D\u043D\u044B\u0445\u0438\u0437\u0444\u0430\u0439\u043B\u0430 \u043D\u0430\u0447\u0430\u0442\u044C\u0441\u043E\u0437\u0434\u0430\u043D\u0438\u0435\u043A\u0430\u0442\u0430\u043B\u043E\u0433\u0430 \u043D\u0430\u0447\u0430\u0442\u044C\u0442\u0440\u0430\u043D\u0437\u0430\u043A\u0446\u0438\u044E \u043D\u0430\u0447\u0430\u0442\u044C\u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0435\u0444\u0430\u0439\u043B\u043E\u0432 \u043D\u0430\u0447\u0430\u0442\u044C\u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0443\u0432\u043D\u0435\u0448\u043D\u0435\u0439\u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u044B \u043D\u0430\u0447\u0430\u0442\u044C\u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0443\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u0438\u044F\u0440\u0430\u0431\u043E\u0442\u044B\u0441\u043A\u0440\u0438\u043F\u0442\u043E\u0433\u0440\u0430\u0444\u0438\u0435\u0439 \u043D\u0430\u0447\u0430\u0442\u044C\u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0443\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u0438\u044F\u0440\u0430\u0431\u043E\u0442\u044B\u0441\u0444\u0430\u0439\u043B\u0430\u043C\u0438 \u043D\u0435\u0434\u0435\u043B\u044F\u0433\u043E\u0434\u0430 \u043D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u043E\u0441\u0442\u044C\u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u0438\u044F\u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u044F \u043D\u043E\u043C\u0435\u0440\u0441\u0435\u0430\u043D\u0441\u0430\u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u043E\u043D\u043D\u043E\u0439\u0431\u0430\u0437\u044B \u043D\u043E\u043C\u0435\u0440\u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u044F\u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u043E\u043D\u043D\u043E\u0439\u0431\u0430\u0437\u044B \u043D\u0440\u0435\u0433 \u043D\u0441\u0442\u0440 \u043E\u0431\u043D\u043E\u0432\u0438\u0442\u044C\u0438\u043D\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043E\u0431\u043D\u043E\u0432\u0438\u0442\u044C\u043D\u0443\u043C\u0435\u0440\u0430\u0446\u0438\u044E\u043E\u0431\u044A\u0435\u043A\u0442\u043E\u0432 \u043E\u0431\u043D\u043E\u0432\u0438\u0442\u044C\u043F\u043E\u0432\u0442\u043E\u0440\u043D\u043E\u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u043C\u044B\u0435\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0430\u043F\u0440\u0435\u0440\u044B\u0432\u0430\u043D\u0438\u044F\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F \u043E\u0431\u044A\u0435\u0434\u0438\u043D\u0438\u0442\u044C\u0444\u0430\u0439\u043B\u044B \u043E\u043A\u0440 \u043E\u043F\u0438\u0441\u0430\u043D\u0438\u0435\u043E\u0448\u0438\u0431\u043A\u0438 \u043E\u043F\u043E\u0432\u0435\u0441\u0442\u0438\u0442\u044C \u043E\u043F\u043E\u0432\u0435\u0441\u0442\u0438\u0442\u044C\u043E\u0431\u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0438 \u043E\u0442\u043A\u043B\u044E\u0447\u0438\u0442\u044C\u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A\u0437\u0430\u043F\u0440\u043E\u0441\u0430\u043D\u0430\u0441\u0442\u0440\u043E\u0435\u043A\u043A\u043B\u0438\u0435\u043D\u0442\u0430\u043B\u0438\u0446\u0435\u043D\u0437\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u043E\u0442\u043A\u043B\u044E\u0447\u0438\u0442\u044C\u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A\u043E\u0436\u0438\u0434\u0430\u043D\u0438\u044F \u043E\u0442\u043A\u043B\u044E\u0447\u0438\u0442\u044C\u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A\u043E\u043F\u043E\u0432\u0435\u0449\u0435\u043D\u0438\u044F \u043E\u0442\u043A\u0440\u044B\u0442\u044C\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u043E\u0442\u043A\u0440\u044B\u0442\u044C\u0438\u043D\u0434\u0435\u043A\u0441\u0441\u043F\u0440\u0430\u0432\u043A\u0438 \u043E\u0442\u043A\u0440\u044B\u0442\u044C\u0441\u043E\u0434\u0435\u0440\u0436\u0430\u043D\u0438\u0435\u0441\u043F\u0440\u0430\u0432\u043A\u0438 \u043E\u0442\u043A\u0440\u044B\u0442\u044C\u0441\u043F\u0440\u0430\u0432\u043A\u0443 \u043E\u0442\u043A\u0440\u044B\u0442\u044C\u0444\u043E\u0440\u043C\u0443 \u043E\u0442\u043A\u0440\u044B\u0442\u044C\u0444\u043E\u0440\u043C\u0443\u043C\u043E\u0434\u0430\u043B\u044C\u043D\u043E \u043E\u0442\u043C\u0435\u043D\u0438\u0442\u044C\u0442\u0440\u0430\u043D\u0437\u0430\u043A\u0446\u0438\u044E \u043E\u0447\u0438\u0441\u0442\u0438\u0442\u044C\u0436\u0443\u0440\u043D\u0430\u043B\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043E\u0447\u0438\u0441\u0442\u0438\u0442\u044C\u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F \u043E\u0447\u0438\u0441\u0442\u0438\u0442\u044C\u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B\u0434\u043E\u0441\u0442\u0443\u043F\u0430 \u043F\u0435\u0440\u0435\u0439\u0442\u0438\u043F\u043E\u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u043E\u043D\u043D\u043E\u0439\u0441\u0441\u044B\u043B\u043A\u0435 \u043F\u0435\u0440\u0435\u043C\u0435\u0441\u0442\u0438\u0442\u044C\u0444\u0430\u0439\u043B \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0438\u0442\u044C\u0432\u043D\u0435\u0448\u043D\u044E\u044E\u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0443 \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0438\u0442\u044C\u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A\u0437\u0430\u043F\u0440\u043E\u0441\u0430\u043D\u0430\u0441\u0442\u0440\u043E\u0435\u043A\u043A\u043B\u0438\u0435\u043D\u0442\u0430\u043B\u0438\u0446\u0435\u043D\u0437\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0438\u0442\u044C\u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A\u043E\u0436\u0438\u0434\u0430\u043D\u0438\u044F \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0438\u0442\u044C\u043E\u0431\u0440\u0430\u0431\u043E\u0442\u0447\u0438\u043A\u043E\u043F\u043E\u0432\u0435\u0449\u0435\u043D\u0438\u044F \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0438\u0442\u044C\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u0438\u0435\u0440\u0430\u0431\u043E\u0442\u044B\u0441\u043A\u0440\u0438\u043F\u0442\u043E\u0433\u0440\u0430\u0444\u0438\u0435\u0439 \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0438\u0442\u044C\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u0438\u0435\u0440\u0430\u0431\u043E\u0442\u044B\u0441\u0444\u0430\u0439\u043B\u0430\u043C\u0438 \u043F\u043E\u0434\u0440\u043E\u0431\u043D\u043E\u0435\u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0438\u0435\u043E\u0448\u0438\u0431\u043A\u0438 \u043F\u043E\u043A\u0430\u0437\u0430\u0442\u044C\u0432\u0432\u043E\u0434\u0434\u0430\u0442\u044B \u043F\u043E\u043A\u0430\u0437\u0430\u0442\u044C\u0432\u0432\u043E\u0434\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u043F\u043E\u043A\u0430\u0437\u0430\u0442\u044C\u0432\u0432\u043E\u0434\u0441\u0442\u0440\u043E\u043A\u0438 \u043F\u043E\u043A\u0430\u0437\u0430\u0442\u044C\u0432\u0432\u043E\u0434\u0447\u0438\u0441\u043B\u0430 \u043F\u043E\u043A\u0430\u0437\u0430\u0442\u044C\u0432\u043E\u043F\u0440\u043E\u0441 \u043F\u043E\u043A\u0430\u0437\u0430\u0442\u044C\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u043F\u043E\u043A\u0430\u0437\u0430\u0442\u044C\u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044E\u043E\u0431\u043E\u0448\u0438\u0431\u043A\u0435 \u043F\u043E\u043A\u0430\u0437\u0430\u0442\u044C\u043D\u0430\u043A\u0430\u0440\u0442\u0435 \u043F\u043E\u043A\u0430\u0437\u0430\u0442\u044C\u043E\u043F\u043E\u0432\u0435\u0449\u0435\u043D\u0438\u0435\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F \u043F\u043E\u043A\u0430\u0437\u0430\u0442\u044C\u043F\u0440\u0435\u0434\u0443\u043F\u0440\u0435\u0436\u0434\u0435\u043D\u0438\u0435 \u043F\u043E\u043B\u043D\u043E\u0435\u0438\u043C\u044F\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044Ccom\u043E\u0431\u044A\u0435\u043A\u0442 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044Cxml\u0442\u0438\u043F \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u0430\u0434\u0440\u0435\u0441\u043F\u043E\u043C\u0435\u0441\u0442\u043E\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u044E \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u0431\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u043A\u0443\u0441\u0435\u0430\u043D\u0441\u043E\u0432 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u0432\u0440\u0435\u043C\u044F\u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u0438\u044F\u0441\u043F\u044F\u0449\u0435\u0433\u043E\u0441\u0435\u0430\u043D\u0441\u0430 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u0432\u0440\u0435\u043C\u044F\u0437\u0430\u0441\u044B\u043F\u0430\u043D\u0438\u044F\u043F\u0430\u0441\u0441\u0438\u0432\u043D\u043E\u0433\u043E\u0441\u0435\u0430\u043D\u0441\u0430 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u0432\u0440\u0435\u043C\u044F\u043E\u0436\u0438\u0434\u0430\u043D\u0438\u044F\u0431\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u0434\u0430\u043D\u043D\u044B\u0435\u0432\u044B\u0431\u043E\u0440\u0430 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u0434\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0439\u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u043A\u043B\u0438\u0435\u043D\u0442\u0430\u043B\u0438\u0446\u0435\u043D\u0437\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u0434\u043E\u043F\u0443\u0441\u0442\u0438\u043C\u044B\u0435\u043A\u043E\u0434\u044B\u043B\u043E\u043A\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u0438 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u0434\u043E\u043F\u0443\u0441\u0442\u0438\u043C\u044B\u0435\u0447\u0430\u0441\u043E\u0432\u044B\u0435\u043F\u043E\u044F\u0441\u0430 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A\u043A\u043B\u0438\u0435\u043D\u0442\u0441\u043A\u043E\u0433\u043E\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A\u0441\u0438\u0441\u0442\u0435\u043C\u044B \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F\u043E\u0442\u0431\u043E\u0440\u0430\u0436\u0443\u0440\u043D\u0430\u043B\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u0438\u0434\u0435\u043D\u0442\u0438\u0444\u0438\u043A\u0430\u0442\u043E\u0440\u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u0438\u0437\u0432\u0440\u0435\u043C\u0435\u043D\u043D\u043E\u0433\u043E\u0445\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0430 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u0438\u043C\u044F\u0432\u0440\u0435\u043C\u0435\u043D\u043D\u043E\u0433\u043E\u0444\u0430\u0439\u043B\u0430 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u0438\u043C\u044F\u043A\u043B\u0438\u0435\u043D\u0442\u0430\u043B\u0438\u0446\u0435\u043D\u0437\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044E\u044D\u043A\u0440\u0430\u043D\u043E\u0432\u043A\u043B\u0438\u0435\u043D\u0442\u0430 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0435\u0436\u0443\u0440\u043D\u0430\u043B\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0435\u0441\u043E\u0431\u044B\u0442\u0438\u044F\u0436\u0443\u0440\u043D\u0430\u043B\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u043A\u0440\u0430\u0442\u043A\u0438\u0439\u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u043C\u0430\u043A\u0435\u0442\u043E\u0444\u043E\u0440\u043C\u043B\u0435\u043D\u0438\u044F \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u043C\u0430\u0441\u043A\u0443\u0432\u0441\u0435\u0444\u0430\u0439\u043B\u044B \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u043C\u0430\u0441\u043A\u0443\u0432\u0441\u0435\u0444\u0430\u0439\u043B\u044B\u043A\u043B\u0438\u0435\u043D\u0442\u0430 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u043C\u0430\u0441\u043A\u0443\u0432\u0441\u0435\u0444\u0430\u0439\u043B\u044B\u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u043C\u0435\u0441\u0442\u043E\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435\u043F\u043E\u0430\u0434\u0440\u0435\u0441\u0443 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u043C\u0438\u043D\u0438\u043C\u0430\u043B\u044C\u043D\u0443\u044E\u0434\u043B\u0438\u043D\u0443\u043F\u0430\u0440\u043E\u043B\u0435\u0439\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u0435\u0439 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u043E\u043D\u043D\u0443\u044E\u0441\u0441\u044B\u043B\u043A\u0443 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u043E\u043D\u043D\u0443\u044E\u0441\u0441\u044B\u043B\u043A\u0443\u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u043E\u043D\u043D\u043E\u0439\u0431\u0430\u0437\u044B \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0435\u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438\u0431\u0430\u0437\u044B\u0434\u0430\u043D\u043D\u044B\u0445 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0435\u043F\u0440\u0435\u0434\u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0445\u0434\u0430\u043D\u043D\u044B\u0445\u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u043E\u043D\u043D\u043E\u0439\u0431\u0430\u0437\u044B \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u043E\u0431\u0449\u0438\u0439\u043C\u0430\u043A\u0435\u0442 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u043E\u0431\u0449\u0443\u044E\u0444\u043E\u0440\u043C\u0443 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u043E\u043A\u043D\u0430 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u043E\u043F\u0435\u0440\u0430\u0442\u0438\u0432\u043D\u0443\u044E\u043E\u0442\u043C\u0435\u0442\u043A\u0443\u0432\u0440\u0435\u043C\u0435\u043D\u0438 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u043E\u0442\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0435\u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u043E\u0433\u043E\u0440\u0435\u0436\u0438\u043C\u0430 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B\u0444\u0443\u043D\u043A\u0446\u0438\u043E\u043D\u0430\u043B\u044C\u043D\u044B\u0445\u043E\u043F\u0446\u0438\u0439\u0438\u043D\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u043F\u043E\u043B\u043D\u043E\u0435\u0438\u043C\u044F\u043F\u0440\u0435\u0434\u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u043D\u043E\u0433\u043E\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0438\u044F\u043D\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u043E\u043D\u043D\u044B\u0445\u0441\u0441\u044B\u043B\u043E\u043A \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0443\u0441\u043B\u043E\u0436\u043D\u043E\u0441\u0442\u0438\u043F\u0430\u0440\u043E\u043B\u0435\u0439\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u0435\u0439 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u0440\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u0435\u043B\u044C\u043F\u0443\u0442\u0438 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u0440\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u0435\u043B\u044C\u043F\u0443\u0442\u0438\u043A\u043B\u0438\u0435\u043D\u0442\u0430 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u0440\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u0435\u043B\u044C\u043F\u0443\u0442\u0438\u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u0441\u0435\u0430\u043D\u0441\u044B\u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u043E\u043D\u043D\u043E\u0439\u0431\u0430\u0437\u044B \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u0441\u043A\u043E\u0440\u043E\u0441\u0442\u044C\u043A\u043B\u0438\u0435\u043D\u0442\u0441\u043A\u043E\u0433\u043E\u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u044F \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u044F\u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u043E\u043D\u043D\u043E\u0439\u0431\u0430\u0437\u044B \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044E \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435\u043E\u0431\u044A\u0435\u043A\u0442\u0430\u0438\u0444\u043E\u0440\u043C\u044B \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u0441\u043E\u0441\u0442\u0430\u0432\u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u043E\u0433\u043E\u0438\u043D\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430odata \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0443\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u044F\u0431\u0430\u0437\u044B\u0434\u0430\u043D\u043D\u044B\u0445 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u0442\u0435\u043A\u0443\u0449\u0438\u0439\u0441\u0435\u0430\u043D\u0441\u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u043E\u043D\u043D\u043E\u0439\u0431\u0430\u0437\u044B \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u0444\u0430\u0439\u043B \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u0444\u0430\u0439\u043B\u044B \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u0444\u043E\u0440\u043C\u0443 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u0444\u0443\u043D\u043A\u0446\u0438\u043E\u043D\u0430\u043B\u044C\u043D\u0443\u044E\u043E\u043F\u0446\u0438\u044E \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u0444\u0443\u043D\u043A\u0446\u0438\u043E\u043D\u0430\u043B\u044C\u043D\u0443\u044E\u043E\u043F\u0446\u0438\u044E\u0438\u043D\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u0447\u0430\u0441\u043E\u0432\u043E\u0439\u043F\u043E\u044F\u0441\u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u043E\u043D\u043D\u043E\u0439\u0431\u0430\u0437\u044B \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u0438\u043E\u0441 \u043F\u043E\u043C\u0435\u0441\u0442\u0438\u0442\u044C\u0432\u043E\u0432\u0440\u0435\u043C\u0435\u043D\u043D\u043E\u0435\u0445\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0435 \u043F\u043E\u043C\u0435\u0441\u0442\u0438\u0442\u044C\u0444\u0430\u0439\u043B \u043F\u043E\u043C\u0435\u0441\u0442\u0438\u0442\u044C\u0444\u0430\u0439\u043B\u044B \u043F\u0440\u0430\u0432 \u043F\u0440\u0430\u0432\u043E\u0434\u043E\u0441\u0442\u0443\u043F\u0430 \u043F\u0440\u0435\u0434\u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u043D\u043E\u0435\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0438\u0435\u043A\u043E\u0434\u0430\u043B\u043E\u043A\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u0438 \u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0438\u0435\u043F\u0435\u0440\u0438\u043E\u0434\u0430 \u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0438\u0435\u043F\u0440\u0430\u0432\u0430 \u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0438\u0435\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F \u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0438\u0435\u0441\u043E\u0431\u044B\u0442\u0438\u044F\u0436\u0443\u0440\u043D\u0430\u043B\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0438\u0435\u0447\u0430\u0441\u043E\u0432\u043E\u0433\u043E\u043F\u043E\u044F\u0441\u0430 \u043F\u0440\u0435\u0434\u0443\u043F\u0440\u0435\u0436\u0434\u0435\u043D\u0438\u0435 \u043F\u0440\u0435\u043A\u0440\u0430\u0442\u0438\u0442\u044C\u0440\u0430\u0431\u043E\u0442\u0443\u0441\u0438\u0441\u0442\u0435\u043C\u044B \u043F\u0440\u0438\u0432\u0438\u043B\u0435\u0433\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0439\u0440\u0435\u0436\u0438\u043C \u043F\u0440\u043E\u0434\u043E\u043B\u0436\u0438\u0442\u044C\u0432\u044B\u0437\u043E\u0432 \u043F\u0440\u043E\u0447\u0438\u0442\u0430\u0442\u044Cjson \u043F\u0440\u043E\u0447\u0438\u0442\u0430\u0442\u044Cxml \u043F\u0440\u043E\u0447\u0438\u0442\u0430\u0442\u044C\u0434\u0430\u0442\u0443json \u043F\u0443\u0441\u0442\u0430\u044F\u0441\u0442\u0440\u043E\u043A\u0430 \u0440\u0430\u0431\u043E\u0447\u0438\u0439\u043A\u0430\u0442\u0430\u043B\u043E\u0433\u0434\u0430\u043D\u043D\u044B\u0445\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F \u0440\u0430\u0437\u0431\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u0430\u0442\u044C\u0434\u0430\u043D\u043D\u044B\u0435\u0434\u043B\u044F\u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0440\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u044C\u0444\u0430\u0439\u043B \u0440\u0430\u0437\u043E\u0440\u0432\u0430\u0442\u044C\u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u0435\u0441\u0432\u043D\u0435\u0448\u043D\u0438\u043C\u0438\u0441\u0442\u043E\u0447\u043D\u0438\u043A\u043E\u043C\u0434\u0430\u043D\u043D\u044B\u0445 \u0440\u0430\u0441\u043A\u043E\u0434\u0438\u0440\u043E\u0432\u0430\u0442\u044C\u0441\u0442\u0440\u043E\u043A\u0443 \u0440\u043E\u043B\u044C\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0430 \u0441\u0435\u043A\u0443\u043D\u0434\u0430 \u0441\u0438\u0433\u043D\u0430\u043B \u0441\u0438\u043C\u0432\u043E\u043B \u0441\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C\u0436\u0443\u0440\u043D\u0430\u043B\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0441\u043C\u0435\u0449\u0435\u043D\u0438\u0435\u043B\u0435\u0442\u043D\u0435\u0433\u043E\u0432\u0440\u0435\u043C\u0435\u043D\u0438 \u0441\u043C\u0435\u0449\u0435\u043D\u0438\u0435\u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u043E\u0433\u043E\u0432\u0440\u0435\u043C\u0435\u043D\u0438 \u0441\u043E\u0435\u0434\u0438\u043D\u0438\u0442\u044C\u0431\u0443\u0444\u0435\u0440\u044B\u0434\u0432\u043E\u0438\u0447\u043D\u044B\u0445\u0434\u0430\u043D\u043D\u044B\u0445 \u0441\u043E\u0437\u0434\u0430\u0442\u044C\u043A\u0430\u0442\u0430\u043B\u043E\u0433 \u0441\u043E\u0437\u0434\u0430\u0442\u044C\u0444\u0430\u0431\u0440\u0438\u043A\u0443xdto \u0441\u043E\u043A\u0440\u043B \u0441\u043E\u043A\u0440\u043B\u043F \u0441\u043E\u043A\u0440\u043F \u0441\u043E\u043E\u0431\u0449\u0438\u0442\u044C \u0441\u043E\u0441\u0442\u043E\u044F\u043D\u0438\u0435 \u0441\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u0441\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C\u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F \u0441\u0440\u0435\u0434 \u0441\u0442\u0440\u0434\u043B\u0438\u043D\u0430 \u0441\u0442\u0440\u0437\u0430\u043A\u0430\u043D\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044F\u043D\u0430 \u0441\u0442\u0440\u0437\u0430\u043C\u0435\u043D\u0438\u0442\u044C \u0441\u0442\u0440\u043D\u0430\u0439\u0442\u0438 \u0441\u0442\u0440\u043D\u0430\u0447\u0438\u043D\u0430\u0435\u0442\u0441\u044F\u0441 \u0441\u0442\u0440\u043E\u043A\u0430 \u0441\u0442\u0440\u043E\u043A\u0430\u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u044F\u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u043E\u043D\u043D\u043E\u0439\u0431\u0430\u0437\u044B \u0441\u0442\u0440\u043F\u043E\u043B\u0443\u0447\u0438\u0442\u044C\u0441\u0442\u0440\u043E\u043A\u0443 \u0441\u0442\u0440\u0440\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u044C \u0441\u0442\u0440\u0441\u043E\u0435\u0434\u0438\u043D\u0438\u0442\u044C \u0441\u0442\u0440\u0441\u0440\u0430\u0432\u043D\u0438\u0442\u044C \u0441\u0442\u0440\u0447\u0438\u0441\u043B\u043E\u0432\u0445\u043E\u0436\u0434\u0435\u043D\u0438\u0439 \u0441\u0442\u0440\u0447\u0438\u0441\u043B\u043E\u0441\u0442\u0440\u043E\u043A \u0441\u0442\u0440\u0448\u0430\u0431\u043B\u043E\u043D \u0442\u0435\u043A\u0443\u0449\u0430\u044F\u0434\u0430\u0442\u0430 \u0442\u0435\u043A\u0443\u0449\u0430\u044F\u0434\u0430\u0442\u0430\u0441\u0435\u0430\u043D\u0441\u0430 \u0442\u0435\u043A\u0443\u0449\u0430\u044F\u0443\u043D\u0438\u0432\u0435\u0440\u0441\u0430\u043B\u044C\u043D\u0430\u044F\u0434\u0430\u0442\u0430 \u0442\u0435\u043A\u0443\u0449\u0430\u044F\u0443\u043D\u0438\u0432\u0435\u0440\u0441\u0430\u043B\u044C\u043D\u0430\u044F\u0434\u0430\u0442\u0430\u0432\u043C\u0438\u043B\u043B\u0438\u0441\u0435\u043A\u0443\u043D\u0434\u0430\u0445 \u0442\u0435\u043A\u0443\u0449\u0438\u0439\u0432\u0430\u0440\u0438\u0430\u043D\u0442\u0438\u043D\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430\u043A\u043B\u0438\u0435\u043D\u0442\u0441\u043A\u043E\u0433\u043E\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F \u0442\u0435\u043A\u0443\u0449\u0438\u0439\u0432\u0430\u0440\u0438\u0430\u043D\u0442\u043E\u0441\u043D\u043E\u0432\u043D\u043E\u0433\u043E\u0448\u0440\u0438\u0444\u0442\u0430\u043A\u043B\u0438\u0435\u043D\u0442\u0441\u043A\u043E\u0433\u043E\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F \u0442\u0435\u043A\u0443\u0449\u0438\u0439\u043A\u043E\u0434\u043B\u043E\u043A\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u0435\u043A\u0443\u0449\u0438\u0439\u0440\u0435\u0436\u0438\u043C\u0437\u0430\u043F\u0443\u0441\u043A\u0430 \u0442\u0435\u043A\u0443\u0449\u0438\u0439\u044F\u0437\u044B\u043A \u0442\u0435\u043A\u0443\u0449\u0438\u0439\u044F\u0437\u044B\u043A\u0441\u0438\u0441\u0442\u0435\u043C\u044B \u0442\u0438\u043F \u0442\u0438\u043F\u0437\u043D\u0447 \u0442\u0440\u0430\u043D\u0437\u0430\u043A\u0446\u0438\u044F\u0430\u043A\u0442\u0438\u0432\u043D\u0430 \u0442\u0440\u0435\u0433 \u0443\u0434\u0430\u043B\u0438\u0442\u044C\u0434\u0430\u043D\u043D\u044B\u0435\u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u043E\u043D\u043D\u043E\u0439\u0431\u0430\u0437\u044B \u0443\u0434\u0430\u043B\u0438\u0442\u044C\u0438\u0437\u0432\u0440\u0435\u043C\u0435\u043D\u043D\u043E\u0433\u043E\u0445\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0430 \u0443\u0434\u0430\u043B\u0438\u0442\u044C\u043E\u0431\u044A\u0435\u043A\u0442\u044B \u0443\u0434\u0430\u043B\u0438\u0442\u044C\u0444\u0430\u0439\u043B\u044B \u0443\u043D\u0438\u0432\u0435\u0440\u0441\u0430\u043B\u044C\u043D\u043E\u0435\u0432\u0440\u0435\u043C\u044F \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C\u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u044B\u0439\u0440\u0435\u0436\u0438\u043C \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C\u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u044B\u0439\u0440\u0435\u0436\u0438\u043C\u0440\u0430\u0437\u0434\u0435\u043B\u0435\u043D\u0438\u044F\u0434\u0430\u043D\u043D\u044B\u0445 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C\u0431\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u043A\u0443\u0441\u0435\u0430\u043D\u0441\u043E\u0432 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C\u0432\u043D\u0435\u0448\u043D\u044E\u044E\u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0443 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C\u0432\u0440\u0435\u043C\u044F\u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u0438\u044F\u0441\u043F\u044F\u0449\u0435\u0433\u043E\u0441\u0435\u0430\u043D\u0441\u0430 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C\u0432\u0440\u0435\u043C\u044F\u0437\u0430\u0441\u044B\u043F\u0430\u043D\u0438\u044F\u043F\u0430\u0441\u0441\u0438\u0432\u043D\u043E\u0433\u043E\u0441\u0435\u0430\u043D\u0441\u0430 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C\u0432\u0440\u0435\u043C\u044F\u043E\u0436\u0438\u0434\u0430\u043D\u0438\u044F\u0431\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C\u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A\u043A\u043B\u0438\u0435\u043D\u0442\u0441\u043A\u043E\u0433\u043E\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C\u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A\u0441\u0438\u0441\u0442\u0435\u043C\u044B \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C\u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0435\u0436\u0443\u0440\u043D\u0430\u043B\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C\u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0435\u0441\u043E\u0431\u044B\u0442\u0438\u044F\u0436\u0443\u0440\u043D\u0430\u043B\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C\u043A\u0440\u0430\u0442\u043A\u0438\u0439\u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C\u043C\u0438\u043D\u0438\u043C\u0430\u043B\u044C\u043D\u0443\u044E\u0434\u043B\u0438\u043D\u0443\u043F\u0430\u0440\u043E\u043B\u0435\u0439\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u0435\u0439 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C\u043C\u043E\u043D\u043E\u043F\u043E\u043B\u044C\u043D\u044B\u0439\u0440\u0435\u0436\u0438\u043C \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C\u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438\u043A\u043B\u0438\u0435\u043D\u0442\u0430\u043B\u0438\u0446\u0435\u043D\u0437\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C\u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0435\u043F\u0440\u0435\u0434\u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0445\u0434\u0430\u043D\u043D\u044B\u0445\u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u043E\u043D\u043D\u043E\u0439\u0431\u0430\u0437\u044B \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C\u043E\u0442\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0435\u0431\u0435\u0437\u043E\u043F\u0430\u0441\u043D\u043E\u0433\u043E\u0440\u0435\u0436\u0438\u043C\u0430 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C\u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B\u0444\u0443\u043D\u043A\u0446\u0438\u043E\u043D\u0430\u043B\u044C\u043D\u044B\u0445\u043E\u043F\u0446\u0438\u0439\u0438\u043D\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C\u043F\u0440\u0438\u0432\u0438\u043B\u0435\u0433\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0439\u0440\u0435\u0436\u0438\u043C \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C\u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0443\u0441\u043B\u043E\u0436\u043D\u043E\u0441\u0442\u0438\u043F\u0430\u0440\u043E\u043B\u0435\u0439\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u0435\u0439 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u0438\u0435\u0440\u0430\u0431\u043E\u0442\u044B\u0441\u043A\u0440\u0438\u043F\u0442\u043E\u0433\u0440\u0430\u0444\u0438\u0435\u0439 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u0438\u0435\u0440\u0430\u0431\u043E\u0442\u044B\u0441\u0444\u0430\u0439\u043B\u0430\u043C\u0438 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C\u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u0435\u0441\u0432\u043D\u0435\u0448\u043D\u0438\u043C\u0438\u0441\u0442\u043E\u0447\u043D\u0438\u043A\u043E\u043C\u0434\u0430\u043D\u043D\u044B\u0445 \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C\u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435\u043E\u0431\u044A\u0435\u043A\u0442\u0430\u0438\u0444\u043E\u0440\u043C\u044B \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C\u0441\u043E\u0441\u0442\u0430\u0432\u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u043E\u0433\u043E\u0438\u043D\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430odata \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C\u0447\u0430\u0441\u043E\u0432\u043E\u0439\u043F\u043E\u044F\u0441\u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u043E\u043D\u043D\u043E\u0439\u0431\u0430\u0437\u044B \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C\u0447\u0430\u0441\u043E\u0432\u043E\u0439\u043F\u043E\u044F\u0441\u0441\u0435\u0430\u043D\u0441\u0430 \u0444\u043E\u0440\u043C\u0430\u0442 \u0446\u0435\u043B \u0447\u0430\u0441 \u0447\u0430\u0441\u043E\u0432\u043E\u0439\u043F\u043E\u044F\u0441 \u0447\u0430\u0441\u043E\u0432\u043E\u0439\u043F\u043E\u044F\u0441\u0441\u0435\u0430\u043D\u0441\u0430 \u0447\u0438\u0441\u043B\u043E \u0447\u0438\u0441\u043B\u043E\u043F\u0440\u043E\u043F\u0438\u0441\u044C\u044E \u044D\u0442\u043E\u0430\u0434\u0440\u0435\u0441\u0432\u0440\u0435\u043C\u0435\u043D\u043D\u043E\u0433\u043E\u0445\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0430 "; + // v8 свойства глобального контекста ==> built_in + var v8_global_context_property = "ws\u0441\u0441\u044B\u043B\u043A\u0438 \u0431\u0438\u0431\u043B\u0438\u043E\u0442\u0435\u043A\u0430\u043A\u0430\u0440\u0442\u0438\u043D\u043E\u043A \u0431\u0438\u0431\u043B\u0438\u043E\u0442\u0435\u043A\u0430\u043C\u0430\u043A\u0435\u0442\u043E\u0432\u043E\u0444\u043E\u0440\u043C\u043B\u0435\u043D\u0438\u044F\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u0431\u0438\u0431\u043B\u0438\u043E\u0442\u0435\u043A\u0430\u0441\u0442\u0438\u043B\u0435\u0439 \u0431\u0438\u0437\u043D\u0435\u0441\u043F\u0440\u043E\u0446\u0435\u0441\u0441\u044B \u0432\u043D\u0435\u0448\u043D\u0438\u0435\u0438\u0441\u0442\u043E\u0447\u043D\u0438\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u0432\u043D\u0435\u0448\u043D\u0438\u0435\u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0438 \u0432\u043D\u0435\u0448\u043D\u0438\u0435\u043E\u0442\u0447\u0435\u0442\u044B \u0432\u0441\u0442\u0440\u043E\u0435\u043D\u043D\u044B\u0435\u043F\u043E\u043A\u0443\u043F\u043A\u0438 \u0433\u043B\u0430\u0432\u043D\u044B\u0439\u0438\u043D\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0433\u043B\u0430\u0432\u043D\u044B\u0439\u0441\u0442\u0438\u043B\u044C \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u044B \u0434\u043E\u0441\u0442\u0430\u0432\u043B\u044F\u0435\u043C\u044B\u0435\u0443\u0432\u0435\u0434\u043E\u043C\u043B\u0435\u043D\u0438\u044F \u0436\u0443\u0440\u043D\u0430\u043B\u044B\u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u043E\u0432 \u0437\u0430\u0434\u0430\u0447\u0438 \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044F\u043E\u0431\u0438\u043D\u0442\u0435\u0440\u043D\u0435\u0442\u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u0438 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0435\u0440\u0430\u0431\u043E\u0447\u0435\u0439\u0434\u0430\u0442\u044B \u0438\u0441\u0442\u043E\u0440\u0438\u044F\u0440\u0430\u0431\u043E\u0442\u044B\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F \u043A\u043E\u043D\u0441\u0442\u0430\u043D\u0442\u044B \u043A\u0440\u0438\u0442\u0435\u0440\u0438\u0438\u043E\u0442\u0431\u043E\u0440\u0430 \u043C\u0435\u0442\u0430\u0434\u0430\u043D\u043D\u044B\u0435 \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0438 \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435\u0440\u0435\u043A\u043B\u0430\u043C\u044B \u043E\u0442\u043F\u0440\u0430\u0432\u043A\u0430\u0434\u043E\u0441\u0442\u0430\u0432\u043B\u044F\u0435\u043C\u044B\u0445\u0443\u0432\u0435\u0434\u043E\u043C\u043B\u0435\u043D\u0438\u0439 \u043E\u0442\u0447\u0435\u0442\u044B \u043F\u0430\u043D\u0435\u043B\u044C\u0437\u0430\u0434\u0430\u0447\u043E\u0441 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u0437\u0430\u043F\u0443\u0441\u043A\u0430 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B\u0441\u0435\u0430\u043D\u0441\u0430 \u043F\u0435\u0440\u0435\u0447\u0438\u0441\u043B\u0435\u043D\u0438\u044F \u043F\u043B\u0430\u043D\u044B\u0432\u0438\u0434\u043E\u0432\u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u043F\u043B\u0430\u043D\u044B\u0432\u0438\u0434\u043E\u0432\u0445\u0430\u0440\u0430\u043A\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043A \u043F\u043B\u0430\u043D\u044B\u043E\u0431\u043C\u0435\u043D\u0430 \u043F\u043B\u0430\u043D\u044B\u0441\u0447\u0435\u0442\u043E\u0432 \u043F\u043E\u043B\u043D\u043E\u0442\u0435\u043A\u0441\u0442\u043E\u0432\u044B\u0439\u043F\u043E\u0438\u0441\u043A \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u0438\u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u043E\u043D\u043D\u043E\u0439\u0431\u0430\u0437\u044B \u043F\u043E\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u043D\u043E\u0441\u0442\u0438 \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0430\u0432\u0441\u0442\u0440\u043E\u0435\u043D\u043D\u044B\u0445\u043F\u043E\u043A\u0443\u043F\u043E\u043A \u0440\u0430\u0431\u043E\u0447\u0430\u044F\u0434\u0430\u0442\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u0438\u044F\u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044B\u0431\u0443\u0445\u0433\u0430\u043B\u0442\u0435\u0440\u0438\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044B\u043D\u0430\u043A\u043E\u043F\u043B\u0435\u043D\u0438\u044F \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044B\u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044B\u0441\u0432\u0435\u0434\u0435\u043D\u0438\u0439 \u0440\u0435\u0433\u043B\u0430\u043C\u0435\u043D\u0442\u043D\u044B\u0435\u0437\u0430\u0434\u0430\u043D\u0438\u044F \u0441\u0435\u0440\u0438\u0430\u043B\u0438\u0437\u0430\u0442\u043E\u0440xdto \u0441\u043F\u0440\u0430\u0432\u043E\u0447\u043D\u0438\u043A\u0438 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u0433\u0435\u043E\u043F\u043E\u0437\u0438\u0446\u0438\u043E\u043D\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043A\u0440\u0438\u043F\u0442\u043E\u0433\u0440\u0430\u0444\u0438\u0438 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043C\u0443\u043B\u044C\u0442\u0438\u043C\u0435\u0434\u0438\u0430 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F\u0440\u0435\u043A\u043B\u0430\u043C\u044B \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u043F\u043E\u0447\u0442\u044B \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430\u0442\u0435\u043B\u0435\u0444\u043E\u043D\u0438\u0438 \u0444\u0430\u0431\u0440\u0438\u043A\u0430xdto \u0444\u0430\u0439\u043B\u043E\u0432\u044B\u0435\u043F\u043E\u0442\u043E\u043A\u0438 \u0444\u043E\u043D\u043E\u0432\u044B\u0435\u0437\u0430\u0434\u0430\u043D\u0438\u044F \u0445\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0430\u043D\u0430\u0441\u0442\u0440\u043E\u0435\u043A \u0445\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0435\u0432\u0430\u0440\u0438\u0430\u043D\u0442\u043E\u0432\u043E\u0442\u0447\u0435\u0442\u043E\u0432 \u0445\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0435\u043D\u0430\u0441\u0442\u0440\u043E\u0435\u043A\u0434\u0430\u043D\u043D\u044B\u0445\u0444\u043E\u0440\u043C \u0445\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0435\u043E\u0431\u0449\u0438\u0445\u043D\u0430\u0441\u0442\u0440\u043E\u0435\u043A \u0445\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0435\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0445\u043D\u0430\u0441\u0442\u0440\u043E\u0435\u043A\u0434\u0438\u043D\u0430\u043C\u0438\u0447\u0435\u0441\u043A\u0438\u0445\u0441\u043F\u0438\u0441\u043A\u043E\u0432 \u0445\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0435\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0445\u043D\u0430\u0441\u0442\u0440\u043E\u0435\u043A\u043E\u0442\u0447\u0435\u0442\u043E\u0432 \u0445\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0435\u0441\u0438\u0441\u0442\u0435\u043C\u043D\u044B\u0445\u043D\u0430\u0441\u0442\u0440\u043E\u0435\u043A "; + // built_in : встроенные или библиотечные объекты (константы, классы, функции) + var BUILTIN = v7_system_constants + v7_global_context_methods + v8_global_context_methods + v8_global_context_property; + // v8 системные наборы значений ==> class + var v8_system_sets_of_values = "web\u0446\u0432\u0435\u0442\u0430 windows\u0446\u0432\u0435\u0442\u0430 windows\u0448\u0440\u0438\u0444\u0442\u044B \u0431\u0438\u0431\u043B\u0438\u043E\u0442\u0435\u043A\u0430\u043A\u0430\u0440\u0442\u0438\u043D\u043E\u043A \u0440\u0430\u043C\u043A\u0438\u0441\u0442\u0438\u043B\u044F \u0441\u0438\u043C\u0432\u043E\u043B\u044B \u0446\u0432\u0435\u0442\u0430\u0441\u0442\u0438\u043B\u044F \u0448\u0440\u0438\u0444\u0442\u044B\u0441\u0442\u0438\u043B\u044F "; + // v8 системные перечисления - интерфейсные ==> class + var v8_system_enums_interface = "\u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u0435\u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u0435\u0434\u0430\u043D\u043D\u044B\u0445\u0444\u043E\u0440\u043C\u044B\u0432\u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0430\u0445 \u0430\u0432\u0442\u043E\u043D\u0443\u043C\u0435\u0440\u0430\u0446\u0438\u044F\u0432\u0444\u043E\u0440\u043C\u0435 \u0430\u0432\u0442\u043E\u0440\u0430\u0437\u0434\u0432\u0438\u0436\u0435\u043D\u0438\u0435\u0441\u0435\u0440\u0438\u0439 \u0430\u043D\u0438\u043C\u0430\u0446\u0438\u044F\u0434\u0438\u0430\u0433\u0440\u0430\u043C\u043C\u044B \u0432\u0430\u0440\u0438\u0430\u043D\u0442\u0432\u044B\u0440\u0430\u0432\u043D\u0438\u0432\u0430\u043D\u0438\u044F\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432\u0438\u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u043E\u0432 \u0432\u0430\u0440\u0438\u0430\u043D\u0442\u0443\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u044F\u0432\u044B\u0441\u043E\u0442\u043E\u0439\u0442\u0430\u0431\u043B\u0438\u0446\u044B \u0432\u0435\u0440\u0442\u0438\u043A\u0430\u043B\u044C\u043D\u0430\u044F\u043F\u0440\u043E\u043A\u0440\u0443\u0442\u043A\u0430\u0444\u043E\u0440\u043C\u044B \u0432\u0435\u0440\u0442\u0438\u043A\u0430\u043B\u044C\u043D\u043E\u0435\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u0432\u0435\u0440\u0442\u0438\u043A\u0430\u043B\u044C\u043D\u043E\u0435\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430 \u0432\u0438\u0434\u0433\u0440\u0443\u043F\u043F\u044B\u0444\u043E\u0440\u043C\u044B \u0432\u0438\u0434\u0434\u0435\u043A\u043E\u0440\u0430\u0446\u0438\u0438\u0444\u043E\u0440\u043C\u044B \u0432\u0438\u0434\u0434\u043E\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u044F\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\u0444\u043E\u0440\u043C\u044B \u0432\u0438\u0434\u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F\u0434\u0430\u043D\u043D\u044B\u0445 \u0432\u0438\u0434\u043A\u043D\u043E\u043F\u043A\u0438\u0444\u043E\u0440\u043C\u044B \u0432\u0438\u0434\u043F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0430\u0442\u0435\u043B\u044F \u0432\u0438\u0434\u043F\u043E\u0434\u043F\u0438\u0441\u0435\u0439\u043A\u0434\u0438\u0430\u0433\u0440\u0430\u043C\u043C\u0435 \u0432\u0438\u0434\u043F\u043E\u043B\u044F\u0444\u043E\u0440\u043C\u044B \u0432\u0438\u0434\u0444\u043B\u0430\u0436\u043A\u0430 \u0432\u043B\u0438\u044F\u043D\u0438\u0435\u0440\u0430\u0437\u043C\u0435\u0440\u0430\u043D\u0430\u043F\u0443\u0437\u044B\u0440\u0435\u043A\u0434\u0438\u0430\u0433\u0440\u0430\u043C\u043C\u044B \u0433\u043E\u0440\u0438\u0437\u043E\u043D\u0442\u0430\u043B\u044C\u043D\u043E\u0435\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u0433\u043E\u0440\u0438\u0437\u043E\u043D\u0442\u0430\u043B\u044C\u043D\u043E\u0435\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430 \u0433\u0440\u0443\u043F\u043F\u0438\u0440\u043E\u0432\u043A\u0430\u043A\u043E\u043B\u043E\u043D\u043E\u043A \u0433\u0440\u0443\u043F\u043F\u0438\u0440\u043E\u0432\u043A\u0430\u043F\u043E\u0434\u0447\u0438\u043D\u0435\u043D\u043D\u044B\u0445\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432\u0444\u043E\u0440\u043C\u044B \u0433\u0440\u0443\u043F\u043F\u044B\u0438\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u044B \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435\u043F\u0435\u0440\u0435\u0442\u0430\u0441\u043A\u0438\u0432\u0430\u043D\u0438\u044F \u0434\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0439\u0440\u0435\u0436\u0438\u043C\u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F \u0434\u043E\u043F\u0443\u0441\u0442\u0438\u043C\u044B\u0435\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044F\u043F\u0435\u0440\u0435\u0442\u0430\u0441\u043A\u0438\u0432\u0430\u043D\u0438\u044F \u0438\u043D\u0442\u0435\u0440\u0432\u0430\u043B\u043C\u0435\u0436\u0434\u0443\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\u043C\u0438\u0444\u043E\u0440\u043C\u044B \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0435\u0432\u044B\u0432\u043E\u0434\u0430 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0435\u043F\u043E\u043B\u043E\u0441\u044B\u043F\u0440\u043E\u043A\u0440\u0443\u0442\u043A\u0438 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u043C\u043E\u0435\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435\u0442\u043E\u0447\u043A\u0438\u0431\u0438\u0440\u0436\u0435\u0432\u043E\u0439\u0434\u0438\u0430\u0433\u0440\u0430\u043C\u043C\u044B \u0438\u0441\u0442\u043E\u0440\u0438\u044F\u0432\u044B\u0431\u043E\u0440\u0430\u043F\u0440\u0438\u0432\u0432\u043E\u0434\u0435 \u0438\u0441\u0442\u043E\u0447\u043D\u0438\u043A\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0439\u043E\u0441\u0438\u0442\u043E\u0447\u0435\u043A\u0434\u0438\u0430\u0433\u0440\u0430\u043C\u043C\u044B \u0438\u0441\u0442\u043E\u0447\u043D\u0438\u043A\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F\u0440\u0430\u0437\u043C\u0435\u0440\u0430\u043F\u0443\u0437\u044B\u0440\u044C\u043A\u0430\u0434\u0438\u0430\u0433\u0440\u0430\u043C\u043C\u044B \u043A\u0430\u0442\u0435\u0433\u043E\u0440\u0438\u044F\u0433\u0440\u0443\u043F\u043F\u044B\u043A\u043E\u043C\u0430\u043D\u0434 \u043C\u0430\u043A\u0441\u0438\u043C\u0443\u043C\u0441\u0435\u0440\u0438\u0439 \u043D\u0430\u0447\u0430\u043B\u044C\u043D\u043E\u0435\u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435\u0434\u0435\u0440\u0435\u0432\u0430 \u043D\u0430\u0447\u0430\u043B\u044C\u043D\u043E\u0435\u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435\u0441\u043F\u0438\u0441\u043A\u0430 \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0435\u0442\u0435\u043A\u0441\u0442\u0430\u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u043E\u0440\u0438\u0435\u043D\u0442\u0430\u0446\u0438\u044F\u0434\u0435\u043D\u0434\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u044B \u043E\u0440\u0438\u0435\u043D\u0442\u0430\u0446\u0438\u044F\u0434\u0438\u0430\u0433\u0440\u0430\u043C\u043C\u044B \u043E\u0440\u0438\u0435\u043D\u0442\u0430\u0446\u0438\u044F\u043C\u0435\u0442\u043E\u043A\u0434\u0438\u0430\u0433\u0440\u0430\u043C\u043C\u044B \u043E\u0440\u0438\u0435\u043D\u0442\u0430\u0446\u0438\u044F\u043C\u0435\u0442\u043E\u043A\u0441\u0432\u043E\u0434\u043D\u043E\u0439\u0434\u0438\u0430\u0433\u0440\u0430\u043C\u043C\u044B \u043E\u0440\u0438\u0435\u043D\u0442\u0430\u0446\u0438\u044F\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\u0444\u043E\u0440\u043C\u044B \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435\u0432\u0434\u0438\u0430\u0433\u0440\u0430\u043C\u043C\u0435 \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435\u0432\u043B\u0435\u0433\u0435\u043D\u0434\u0435\u0434\u0438\u0430\u0433\u0440\u0430\u043C\u043C\u044B \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435\u0433\u0440\u0443\u043F\u043F\u044B\u043A\u043D\u043E\u043F\u043E\u043A \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435\u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0430\u0448\u043A\u0430\u043B\u044B\u0434\u0438\u0430\u0433\u0440\u0430\u043C\u043C\u044B \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0439\u0441\u0432\u043E\u0434\u043D\u043E\u0439\u0434\u0438\u0430\u0433\u0440\u0430\u043C\u043C\u044B \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F\u0438\u0437\u043C\u0435\u0440\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0439\u0434\u0438\u0430\u0433\u0440\u0430\u043C\u043C\u044B \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435\u0438\u043D\u0442\u0435\u0440\u0432\u0430\u043B\u0430\u0434\u0438\u0430\u0433\u0440\u0430\u043C\u043C\u044B\u0433\u0430\u043D\u0442\u0430 \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435\u043A\u043D\u043E\u043F\u043A\u0438 \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435\u043A\u043D\u043E\u043F\u043A\u0438\u0432\u044B\u0431\u043E\u0440\u0430 \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435\u043E\u0431\u0441\u0443\u0436\u0434\u0435\u043D\u0438\u0439\u0444\u043E\u0440\u043C\u044B \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435\u043E\u0431\u044B\u0447\u043D\u043E\u0439\u0433\u0440\u0443\u043F\u043F\u044B \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435\u043E\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043B\u044C\u043D\u044B\u0445\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0439\u043F\u0443\u0437\u044B\u0440\u044C\u043A\u043E\u0432\u043E\u0439\u0434\u0438\u0430\u0433\u0440\u0430\u043C\u043C\u044B \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435\u043F\u0430\u043D\u0435\u043B\u0438\u043F\u043E\u0438\u0441\u043A\u0430 \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435\u043F\u043E\u0434\u0441\u043A\u0430\u0437\u043A\u0438 \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435\u043F\u0440\u0435\u0434\u0443\u043F\u0440\u0435\u0436\u0434\u0435\u043D\u0438\u044F\u043F\u0440\u0438\u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0438 \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435\u0440\u0430\u0437\u043C\u0435\u0442\u043A\u0438\u043F\u043E\u043B\u043E\u0441\u044B\u0440\u0435\u0433\u0443\u043B\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435\u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0444\u043E\u0440\u043C\u044B \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435\u0442\u0430\u0431\u043B\u0438\u0446\u044B \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435\u0442\u0435\u043A\u0441\u0442\u0430\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F\u0434\u0438\u0430\u0433\u0440\u0430\u043C\u043C\u044B\u0433\u0430\u043D\u0442\u0430 \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435\u0443\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u044F\u043E\u0431\u044B\u0447\u043D\u043E\u0439\u0433\u0440\u0443\u043F\u043F\u044B \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435\u0444\u0438\u0433\u0443\u0440\u044B\u043A\u043D\u043E\u043F\u043A\u0438 \u043F\u0430\u043B\u0438\u0442\u0440\u0430\u0446\u0432\u0435\u0442\u043E\u0432\u0434\u0438\u0430\u0433\u0440\u0430\u043C\u043C\u044B \u043F\u043E\u0432\u0435\u0434\u0435\u043D\u0438\u0435\u043E\u0431\u044B\u0447\u043D\u043E\u0439\u0433\u0440\u0443\u043F\u043F\u044B \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u043A\u0430\u043C\u0430\u0441\u0448\u0442\u0430\u0431\u0430\u0434\u0435\u043D\u0434\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u044B \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u043A\u0430\u043C\u0430\u0441\u0448\u0442\u0430\u0431\u0430\u0434\u0438\u0430\u0433\u0440\u0430\u043C\u043C\u044B\u0433\u0430\u043D\u0442\u0430 \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u043A\u0430\u043C\u0430\u0441\u0448\u0442\u0430\u0431\u0430\u0441\u0432\u043E\u0434\u043D\u043E\u0439\u0434\u0438\u0430\u0433\u0440\u0430\u043C\u043C\u044B \u043F\u043E\u0438\u0441\u043A\u0432\u0442\u0430\u0431\u043B\u0438\u0446\u0435\u043F\u0440\u0438\u0432\u0432\u043E\u0434\u0435 \u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435\u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0430\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\u0444\u043E\u0440\u043C\u044B \u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435\u043A\u0430\u0440\u0442\u0438\u043D\u043A\u0438\u043A\u043D\u043E\u043F\u043A\u0438\u0444\u043E\u0440\u043C\u044B \u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435\u043A\u0430\u0440\u0442\u0438\u043D\u043A\u0438\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043A\u043E\u0439\u0441\u0445\u0435\u043C\u044B \u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435\u043A\u043E\u043C\u0430\u043D\u0434\u043D\u043E\u0439\u043F\u0430\u043D\u0435\u043B\u0438\u0444\u043E\u0440\u043C\u044B \u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435\u043A\u043E\u043C\u0430\u043D\u0434\u043D\u043E\u0439\u043F\u0430\u043D\u0435\u043B\u0438\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\u0444\u043E\u0440\u043C\u044B \u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435\u043E\u043F\u043E\u0440\u043D\u043E\u0439\u0442\u043E\u0447\u043A\u0438\u043E\u0442\u0440\u0438\u0441\u043E\u0432\u043A\u0438 \u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435\u043F\u043E\u0434\u043F\u0438\u0441\u0435\u0439\u043A\u0434\u0438\u0430\u0433\u0440\u0430\u043C\u043C\u0435 \u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435\u043F\u043E\u0434\u043F\u0438\u0441\u0435\u0439\u0448\u043A\u0430\u043B\u044B\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0439\u0438\u0437\u043C\u0435\u0440\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0439\u0434\u0438\u0430\u0433\u0440\u0430\u043C\u043C\u044B \u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435\u0441\u043E\u0441\u0442\u043E\u044F\u043D\u0438\u044F\u043F\u0440\u043E\u0441\u043C\u043E\u0442\u0440\u0430 \u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435\u0441\u0442\u0440\u043E\u043A\u0438\u043F\u043E\u0438\u0441\u043A\u0430 \u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435\u0442\u0435\u043A\u0441\u0442\u0430\u0441\u043E\u0435\u0434\u0438\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0439\u043B\u0438\u043D\u0438\u0438 \u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435\u0443\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u044F\u043F\u043E\u0438\u0441\u043A\u043E\u043C \u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435\u0448\u043A\u0430\u043B\u044B\u0432\u0440\u0435\u043C\u0435\u043D\u0438 \u043F\u043E\u0440\u044F\u0434\u043E\u043A\u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F\u0442\u043E\u0447\u0435\u043A\u0433\u043E\u0440\u0438\u0437\u043E\u043D\u0442\u0430\u043B\u044C\u043D\u043E\u0439\u0433\u0438\u0441\u0442\u043E\u0433\u0440\u0430\u043C\u043C\u044B \u043F\u043E\u0440\u044F\u0434\u043E\u043A\u0441\u0435\u0440\u0438\u0439\u0432\u043B\u0435\u0433\u0435\u043D\u0434\u0435\u0434\u0438\u0430\u0433\u0440\u0430\u043C\u043C\u044B \u0440\u0430\u0437\u043C\u0435\u0440\u043A\u0430\u0440\u0442\u0438\u043D\u043A\u0438 \u0440\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435\u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0430\u0448\u043A\u0430\u043B\u044B\u0434\u0438\u0430\u0433\u0440\u0430\u043C\u043C\u044B \u0440\u0430\u0441\u0442\u044F\u0433\u0438\u0432\u0430\u043D\u0438\u0435\u043F\u043E\u0432\u0435\u0440\u0442\u0438\u043A\u0430\u043B\u0438\u0434\u0438\u0430\u0433\u0440\u0430\u043C\u043C\u044B\u0433\u0430\u043D\u0442\u0430 \u0440\u0435\u0436\u0438\u043C\u0430\u0432\u0442\u043E\u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F\u0441\u043E\u0441\u0442\u043E\u044F\u043D\u0438\u044F \u0440\u0435\u0436\u0438\u043C\u0432\u0432\u043E\u0434\u0430\u0441\u0442\u0440\u043E\u043A\u0442\u0430\u0431\u043B\u0438\u0446\u044B \u0440\u0435\u0436\u0438\u043C\u0432\u044B\u0431\u043E\u0440\u0430\u043D\u0435\u0437\u0430\u043F\u043E\u043B\u043D\u0435\u043D\u043D\u043E\u0433\u043E \u0440\u0435\u0436\u0438\u043C\u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u044F\u0434\u0430\u0442\u044B \u0440\u0435\u0436\u0438\u043C\u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u044F\u0441\u0442\u0440\u043E\u043A\u0438\u0442\u0430\u0431\u043B\u0438\u0446\u044B \u0440\u0435\u0436\u0438\u043C\u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u044F\u0442\u0430\u0431\u043B\u0438\u0446\u044B \u0440\u0435\u0436\u0438\u043C\u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F\u0440\u0430\u0437\u043C\u0435\u0440\u0430 \u0440\u0435\u0436\u0438\u043C\u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F\u0441\u0432\u044F\u0437\u0430\u043D\u043D\u043E\u0433\u043E\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u0440\u0435\u0436\u0438\u043C\u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F\u0434\u0438\u0430\u043B\u043E\u0433\u0430\u043F\u0435\u0447\u0430\u0442\u0438 \u0440\u0435\u0436\u0438\u043C\u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F\u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u0430\u043A\u043E\u043C\u0430\u043D\u0434\u044B \u0440\u0435\u0436\u0438\u043C\u043C\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F\u043F\u0440\u043E\u0441\u043C\u043E\u0442\u0440\u0430 \u0440\u0435\u0436\u0438\u043C\u043E\u0441\u043D\u043E\u0432\u043D\u043E\u0433\u043E\u043E\u043A\u043D\u0430\u043A\u043B\u0438\u0435\u043D\u0442\u0441\u043A\u043E\u0433\u043E\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F \u0440\u0435\u0436\u0438\u043C\u043E\u0442\u043A\u0440\u044B\u0442\u0438\u044F\u043E\u043A\u043D\u0430\u0444\u043E\u0440\u043C\u044B \u0440\u0435\u0436\u0438\u043C\u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F\u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u044F \u0440\u0435\u0436\u0438\u043C\u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F\u0433\u0435\u043E\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043A\u043E\u0439\u0441\u0445\u0435\u043C\u044B \u0440\u0435\u0436\u0438\u043C\u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0439\u0441\u0435\u0440\u0438\u0438 \u0440\u0435\u0436\u0438\u043C\u043E\u0442\u0440\u0438\u0441\u043E\u0432\u043A\u0438\u0441\u0435\u0442\u043A\u0438\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043A\u043E\u0439\u0441\u0445\u0435\u043C\u044B \u0440\u0435\u0436\u0438\u043C\u043F\u043E\u043B\u0443\u043F\u0440\u043E\u0437\u0440\u0430\u0447\u043D\u043E\u0441\u0442\u0438\u0434\u0438\u0430\u0433\u0440\u0430\u043C\u043C\u044B \u0440\u0435\u0436\u0438\u043C\u043F\u0440\u043E\u0431\u0435\u043B\u043E\u0432\u0434\u0438\u0430\u0433\u0440\u0430\u043C\u043C\u044B \u0440\u0435\u0436\u0438\u043C\u0440\u0430\u0437\u043C\u0435\u0449\u0435\u043D\u0438\u044F\u043D\u0430\u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0435 \u0440\u0435\u0436\u0438\u043C\u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F\u043A\u043E\u043B\u043E\u043D\u043A\u0438 \u0440\u0435\u0436\u0438\u043C\u0441\u0433\u043B\u0430\u0436\u0438\u0432\u0430\u043D\u0438\u044F\u0434\u0438\u0430\u0433\u0440\u0430\u043C\u043C\u044B \u0440\u0435\u0436\u0438\u043C\u0441\u0433\u043B\u0430\u0436\u0438\u0432\u0430\u043D\u0438\u044F\u0438\u043D\u0434\u0438\u043A\u0430\u0442\u043E\u0440\u0430 \u0440\u0435\u0436\u0438\u043C\u0441\u043F\u0438\u0441\u043A\u0430\u0437\u0430\u0434\u0430\u0447 \u0441\u043A\u0432\u043E\u0437\u043D\u043E\u0435\u0432\u044B\u0440\u0430\u0432\u043D\u0438\u0432\u0430\u043D\u0438\u0435 \u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u0435\u0434\u0430\u043D\u043D\u044B\u0445\u0444\u043E\u0440\u043C\u044B\u0432\u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0430\u0445 \u0441\u043F\u043E\u0441\u043E\u0431\u0437\u0430\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u044F\u0442\u0435\u043A\u0441\u0442\u0430\u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0430\u0448\u043A\u0430\u043B\u044B\u0434\u0438\u0430\u0433\u0440\u0430\u043C\u043C\u044B \u0441\u043F\u043E\u0441\u043E\u0431\u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u044F\u043E\u0433\u0440\u0430\u043D\u0438\u0447\u0438\u0432\u0430\u044E\u0449\u0435\u0433\u043E\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F\u0434\u0438\u0430\u0433\u0440\u0430\u043C\u043C\u044B \u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u0430\u044F\u0433\u0440\u0443\u043F\u043F\u0430\u043A\u043E\u043C\u0430\u043D\u0434 \u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u043E\u0435\u043E\u0444\u043E\u0440\u043C\u043B\u0435\u043D\u0438\u0435 \u0441\u0442\u0430\u0442\u0443\u0441\u043E\u043F\u043E\u0432\u0435\u0449\u0435\u043D\u0438\u044F\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F \u0441\u0442\u0438\u043B\u044C\u0441\u0442\u0440\u0435\u043B\u043A\u0438 \u0442\u0438\u043F\u0430\u043F\u043F\u0440\u043E\u043A\u0441\u0438\u043C\u0430\u0446\u0438\u0438\u043B\u0438\u043D\u0438\u0438\u0442\u0440\u0435\u043D\u0434\u0430\u0434\u0438\u0430\u0433\u0440\u0430\u043C\u043C\u044B \u0442\u0438\u043F\u0434\u0438\u0430\u0433\u0440\u0430\u043C\u043C\u044B \u0442\u0438\u043F\u0435\u0434\u0438\u043D\u0438\u0446\u044B\u0448\u043A\u0430\u043B\u044B\u0432\u0440\u0435\u043C\u0435\u043D\u0438 \u0442\u0438\u043F\u0438\u043C\u043F\u043E\u0440\u0442\u0430\u0441\u0435\u0440\u0438\u0439\u0441\u043B\u043E\u044F\u0433\u0435\u043E\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043A\u043E\u0439\u0441\u0445\u0435\u043C\u044B \u0442\u0438\u043F\u043B\u0438\u043D\u0438\u0438\u0433\u0435\u043E\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043A\u043E\u0439\u0441\u0445\u0435\u043C\u044B \u0442\u0438\u043F\u043B\u0438\u043D\u0438\u0438\u0434\u0438\u0430\u0433\u0440\u0430\u043C\u043C\u044B \u0442\u0438\u043F\u043C\u0430\u0440\u043A\u0435\u0440\u0430\u0433\u0435\u043E\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043A\u043E\u0439\u0441\u0445\u0435\u043C\u044B \u0442\u0438\u043F\u043C\u0430\u0440\u043A\u0435\u0440\u0430\u0434\u0438\u0430\u0433\u0440\u0430\u043C\u043C\u044B \u0442\u0438\u043F\u043E\u0431\u043B\u0430\u0441\u0442\u0438\u043E\u0444\u043E\u0440\u043C\u043B\u0435\u043D\u0438\u044F \u0442\u0438\u043F\u043E\u0440\u0433\u0430\u043D\u0438\u0437\u0430\u0446\u0438\u0438\u0438\u0441\u0442\u043E\u0447\u043D\u0438\u043A\u0430\u0434\u0430\u043D\u043D\u044B\u0445\u0433\u0435\u043E\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043A\u043E\u0439\u0441\u0445\u0435\u043C\u044B \u0442\u0438\u043F\u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F\u0441\u0435\u0440\u0438\u0438\u0441\u043B\u043E\u044F\u0433\u0435\u043E\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043A\u043E\u0439\u0441\u0445\u0435\u043C\u044B \u0442\u0438\u043F\u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F\u0442\u043E\u0447\u0435\u0447\u043D\u043E\u0433\u043E\u043E\u0431\u044A\u0435\u043A\u0442\u0430\u0433\u0435\u043E\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043A\u043E\u0439\u0441\u0445\u0435\u043C\u044B \u0442\u0438\u043F\u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F\u0448\u043A\u0430\u043B\u044B\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\u043B\u0435\u0433\u0435\u043D\u0434\u044B\u0433\u0435\u043E\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043A\u043E\u0439\u0441\u0445\u0435\u043C\u044B \u0442\u0438\u043F\u043F\u043E\u0438\u0441\u043A\u0430\u043E\u0431\u044A\u0435\u043A\u0442\u043E\u0432\u0433\u0435\u043E\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043A\u043E\u0439\u0441\u0445\u0435\u043C\u044B \u0442\u0438\u043F\u043F\u0440\u043E\u0435\u043A\u0446\u0438\u0438\u0433\u0435\u043E\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043A\u043E\u0439\u0441\u0445\u0435\u043C\u044B \u0442\u0438\u043F\u0440\u0430\u0437\u043C\u0435\u0449\u0435\u043D\u0438\u044F\u0438\u0437\u043C\u0435\u0440\u0435\u043D\u0438\u0439 \u0442\u0438\u043F\u0440\u0430\u0437\u043C\u0435\u0449\u0435\u043D\u0438\u044F\u0440\u0435\u043A\u0432\u0438\u0437\u0438\u0442\u043E\u0432\u0438\u0437\u043C\u0435\u0440\u0435\u043D\u0438\u0439 \u0442\u0438\u043F\u0440\u0430\u043C\u043A\u0438\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\u0443\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u044F \u0442\u0438\u043F\u0441\u0432\u043E\u0434\u043D\u043E\u0439\u0434\u0438\u0430\u0433\u0440\u0430\u043C\u043C\u044B \u0442\u0438\u043F\u0441\u0432\u044F\u0437\u0438\u0434\u0438\u0430\u0433\u0440\u0430\u043C\u043C\u044B\u0433\u0430\u043D\u0442\u0430 \u0442\u0438\u043F\u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u044F\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0439\u043F\u043E\u0441\u0435\u0440\u0438\u044F\u043C\u0434\u0438\u0430\u0433\u0440\u0430\u043C\u043C\u044B \u0442\u0438\u043F\u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u044F\u0442\u043E\u0447\u0435\u043A\u0434\u0438\u0430\u0433\u0440\u0430\u043C\u043C\u044B \u0442\u0438\u043F\u0441\u043E\u0435\u0434\u0438\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u0439\u043B\u0438\u043D\u0438\u0438 \u0442\u0438\u043F\u0441\u0442\u043E\u0440\u043E\u043D\u044B\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043A\u043E\u0439\u0441\u0445\u0435\u043C\u044B \u0442\u0438\u043F\u0444\u043E\u0440\u043C\u044B\u043E\u0442\u0447\u0435\u0442\u0430 \u0442\u0438\u043F\u0448\u043A\u0430\u043B\u044B\u0440\u0430\u0434\u0430\u0440\u043D\u043E\u0439\u0434\u0438\u0430\u0433\u0440\u0430\u043C\u043C\u044B \u0444\u0430\u043A\u0442\u043E\u0440\u043B\u0438\u043D\u0438\u0438\u0442\u0440\u0435\u043D\u0434\u0430\u0434\u0438\u0430\u0433\u0440\u0430\u043C\u043C\u044B \u0444\u0438\u0433\u0443\u0440\u0430\u043A\u043D\u043E\u043F\u043A\u0438 \u0444\u0438\u0433\u0443\u0440\u044B\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043A\u043E\u0439\u0441\u0445\u0435\u043C\u044B \u0444\u0438\u043A\u0441\u0430\u0446\u0438\u044F\u0432\u0442\u0430\u0431\u043B\u0438\u0446\u0435 \u0444\u043E\u0440\u043C\u0430\u0442\u0434\u043D\u044F\u0448\u043A\u0430\u043B\u044B\u0432\u0440\u0435\u043C\u0435\u043D\u0438 \u0444\u043E\u0440\u043C\u0430\u0442\u043A\u0430\u0440\u0442\u0438\u043D\u043A\u0438 \u0448\u0438\u0440\u0438\u043D\u0430\u043F\u043E\u0434\u0447\u0438\u043D\u0435\u043D\u043D\u044B\u0445\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432\u0444\u043E\u0440\u043C\u044B "; + // v8 системные перечисления - свойства прикладных объектов ==> class + var v8_system_enums_objects_properties = "\u0432\u0438\u0434\u0434\u0432\u0438\u0436\u0435\u043D\u0438\u044F\u0431\u0443\u0445\u0433\u0430\u043B\u0442\u0435\u0440\u0438\u0438 \u0432\u0438\u0434\u0434\u0432\u0438\u0436\u0435\u043D\u0438\u044F\u043D\u0430\u043A\u043E\u043F\u043B\u0435\u043D\u0438\u044F \u0432\u0438\u0434\u043F\u0435\u0440\u0438\u043E\u0434\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u0432\u0438\u0434\u0441\u0447\u0435\u0442\u0430 \u0432\u0438\u0434\u0442\u043E\u0447\u043A\u0438\u043C\u0430\u0440\u0448\u0440\u0443\u0442\u0430\u0431\u0438\u0437\u043D\u0435\u0441\u043F\u0440\u043E\u0446\u0435\u0441\u0441\u0430 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0435\u0430\u0433\u0440\u0435\u0433\u0430\u0442\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043D\u0430\u043A\u043E\u043F\u043B\u0435\u043D\u0438\u044F \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0435\u0433\u0440\u0443\u043F\u043F\u0438\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0435\u0440\u0435\u0436\u0438\u043C\u0430\u043F\u0440\u043E\u0432\u0435\u0434\u0435\u043D\u0438\u044F \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0435\u0441\u0440\u0435\u0437\u0430 \u043F\u0435\u0440\u0438\u043E\u0434\u0438\u0447\u043D\u043E\u0441\u0442\u044C\u0430\u0433\u0440\u0435\u0433\u0430\u0442\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043D\u0430\u043A\u043E\u043F\u043B\u0435\u043D\u0438\u044F \u0440\u0435\u0436\u0438\u043C\u0430\u0432\u0442\u043E\u0432\u0440\u0435\u043C\u044F \u0440\u0435\u0436\u0438\u043C\u0437\u0430\u043F\u0438\u0441\u0438\u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430 \u0440\u0435\u0436\u0438\u043C\u043F\u0440\u043E\u0432\u0435\u0434\u0435\u043D\u0438\u044F\u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430 "; + // v8 системные перечисления - планы обмена ==> class + var v8_system_enums_exchange_plans = "\u0430\u0432\u0442\u043E\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044F\u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439 \u0434\u043E\u043F\u0443\u0441\u0442\u0438\u043C\u044B\u0439\u043D\u043E\u043C\u0435\u0440\u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F \u043E\u0442\u043F\u0440\u0430\u0432\u043A\u0430\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\u0434\u0430\u043D\u043D\u044B\u0445 \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u0438\u0435\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\u0434\u0430\u043D\u043D\u044B\u0445 "; + // v8 системные перечисления - табличный документ ==> class + var v8_system_enums_tabular_document = "\u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0435\u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043E\u0432\u043A\u0438\u0442\u0430\u0431\u043B\u0438\u0447\u043D\u043E\u0433\u043E\u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430 \u043E\u0440\u0438\u0435\u043D\u0442\u0430\u0446\u0438\u044F\u0441\u0442\u0440\u0430\u043D\u0438\u0446\u044B \u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435\u0438\u0442\u043E\u0433\u043E\u0432\u043A\u043E\u043B\u043E\u043D\u043E\u043A\u0441\u0432\u043E\u0434\u043D\u043E\u0439\u0442\u0430\u0431\u043B\u0438\u0446\u044B \u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435\u0438\u0442\u043E\u0433\u043E\u0432\u0441\u0442\u0440\u043E\u043A\u0441\u0432\u043E\u0434\u043D\u043E\u0439\u0442\u0430\u0431\u043B\u0438\u0446\u044B \u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435\u0442\u0435\u043A\u0441\u0442\u0430\u043E\u0442\u043D\u043E\u0441\u0438\u0442\u0435\u043B\u044C\u043D\u043E\u043A\u0430\u0440\u0442\u0438\u043D\u043A\u0438 \u0440\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435\u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0430\u0433\u0440\u0443\u043F\u043F\u0438\u0440\u043E\u0432\u043A\u0438\u0442\u0430\u0431\u043B\u0438\u0447\u043D\u043E\u0433\u043E\u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430 \u0441\u043F\u043E\u0441\u043E\u0431\u0447\u0442\u0435\u043D\u0438\u044F\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0439\u0442\u0430\u0431\u043B\u0438\u0447\u043D\u043E\u0433\u043E\u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430 \u0442\u0438\u043F\u0434\u0432\u0443\u0441\u0442\u043E\u0440\u043E\u043D\u043D\u0435\u0439\u043F\u0435\u0447\u0430\u0442\u0438 \u0442\u0438\u043F\u0437\u0430\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u044F\u043E\u0431\u043B\u0430\u0441\u0442\u0438\u0442\u0430\u0431\u043B\u0438\u0447\u043D\u043E\u0433\u043E\u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430 \u0442\u0438\u043F\u043A\u0443\u0440\u0441\u043E\u0440\u043E\u0432\u0442\u0430\u0431\u043B\u0438\u0447\u043D\u043E\u0433\u043E\u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430 \u0442\u0438\u043F\u043B\u0438\u043D\u0438\u0438\u0440\u0438\u0441\u0443\u043D\u043A\u0430\u0442\u0430\u0431\u043B\u0438\u0447\u043D\u043E\u0433\u043E\u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430 \u0442\u0438\u043F\u043B\u0438\u043D\u0438\u0438\u044F\u0447\u0435\u0439\u043A\u0438\u0442\u0430\u0431\u043B\u0438\u0447\u043D\u043E\u0433\u043E\u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430 \u0442\u0438\u043F\u043D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u044F\u043F\u0435\u0440\u0435\u0445\u043E\u0434\u0430\u0442\u0430\u0431\u043B\u0438\u0447\u043D\u043E\u0433\u043E\u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430 \u0442\u0438\u043F\u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F\u0432\u044B\u0434\u0435\u043B\u0435\u043D\u0438\u044F\u0442\u0430\u0431\u043B\u0438\u0447\u043D\u043E\u0433\u043E\u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430 \u0442\u0438\u043F\u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F\u043B\u0438\u043D\u0438\u0439\u0441\u0432\u043E\u0434\u043D\u043E\u0439\u0442\u0430\u0431\u043B\u0438\u0446\u044B \u0442\u0438\u043F\u0440\u0430\u0437\u043C\u0435\u0449\u0435\u043D\u0438\u044F\u0442\u0435\u043A\u0441\u0442\u0430\u0442\u0430\u0431\u043B\u0438\u0447\u043D\u043E\u0433\u043E\u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430 \u0442\u0438\u043F\u0440\u0438\u0441\u0443\u043D\u043A\u0430\u0442\u0430\u0431\u043B\u0438\u0447\u043D\u043E\u0433\u043E\u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430 \u0442\u0438\u043F\u0441\u043C\u0435\u0449\u0435\u043D\u0438\u044F\u0442\u0430\u0431\u043B\u0438\u0447\u043D\u043E\u0433\u043E\u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430 \u0442\u0438\u043F\u0443\u0437\u043E\u0440\u0430\u0442\u0430\u0431\u043B\u0438\u0447\u043D\u043E\u0433\u043E\u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430 \u0442\u0438\u043F\u0444\u0430\u0439\u043B\u0430\u0442\u0430\u0431\u043B\u0438\u0447\u043D\u043E\u0433\u043E\u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430 \u0442\u043E\u0447\u043D\u043E\u0441\u0442\u044C\u043F\u0435\u0447\u0430\u0442\u0438 \u0447\u0435\u0440\u0435\u0434\u043E\u0432\u0430\u043D\u0438\u0435\u0440\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u044F\u0441\u0442\u0440\u0430\u043D\u0438\u0446 "; + // v8 системные перечисления - планировщик ==> class + var v8_system_enums_sheduler = "\u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435\u0432\u0440\u0435\u043C\u0435\u043D\u0438\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432\u043F\u043B\u0430\u043D\u0438\u0440\u043E\u0432\u0449\u0438\u043A\u0430 "; + // v8 системные перечисления - форматированный документ ==> class + var v8_system_enums_formatted_document = "\u0442\u0438\u043F\u0444\u0430\u0439\u043B\u0430\u0444\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u043E\u0433\u043E\u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430 "; + // v8 системные перечисления - запрос ==> class + var v8_system_enums_query = "\u043E\u0431\u0445\u043E\u0434\u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u0430\u0437\u0430\u043F\u0440\u043E\u0441\u0430 \u0442\u0438\u043F\u0437\u0430\u043F\u0438\u0441\u0438\u0437\u0430\u043F\u0440\u043E\u0441\u0430 "; + // v8 системные перечисления - построитель отчета ==> class + var v8_system_enums_report_builder = "\u0432\u0438\u0434\u0437\u0430\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u044F\u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043E\u0432\u043A\u0438\u043F\u043E\u0441\u0442\u0440\u043E\u0438\u0442\u0435\u043B\u044F\u043E\u0442\u0447\u0435\u0442\u0430 \u0442\u0438\u043F\u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0438\u044F\u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0438\u0439 \u0442\u0438\u043F\u0438\u0437\u043C\u0435\u0440\u0435\u043D\u0438\u044F\u043F\u043E\u0441\u0442\u0440\u043E\u0438\u0442\u0435\u043B\u044F\u043E\u0442\u0447\u0435\u0442\u0430 \u0442\u0438\u043F\u0440\u0430\u0437\u043C\u0435\u0449\u0435\u043D\u0438\u044F\u0438\u0442\u043E\u0433\u043E\u0432 "; + // v8 системные перечисления - работа с файлами ==> class + var v8_system_enums_files = "\u0434\u043E\u0441\u0442\u0443\u043F\u043A\u0444\u0430\u0439\u043B\u0443 \u0440\u0435\u0436\u0438\u043C\u0434\u0438\u0430\u043B\u043E\u0433\u0430\u0432\u044B\u0431\u043E\u0440\u0430\u0444\u0430\u0439\u043B\u0430 \u0440\u0435\u0436\u0438\u043C\u043E\u0442\u043A\u0440\u044B\u0442\u0438\u044F\u0444\u0430\u0439\u043B\u0430 "; + // v8 системные перечисления - построитель запроса ==> class + var v8_system_enums_query_builder = "\u0442\u0438\u043F\u0438\u0437\u043C\u0435\u0440\u0435\u043D\u0438\u044F\u043F\u043E\u0441\u0442\u0440\u043E\u0438\u0442\u0435\u043B\u044F\u0437\u0430\u043F\u0440\u043E\u0441\u0430 "; + // v8 системные перечисления - анализ данных ==> class + var v8_system_enums_data_analysis = "\u0432\u0438\u0434\u0434\u0430\u043D\u043D\u044B\u0445\u0430\u043D\u0430\u043B\u0438\u0437\u0430 \u043C\u0435\u0442\u043E\u0434\u043A\u043B\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u0438\u043F\u0435\u0434\u0438\u043D\u0438\u0446\u044B\u0438\u043D\u0442\u0435\u0440\u0432\u0430\u043B\u0430\u0432\u0440\u0435\u043C\u0435\u043D\u0438\u0430\u043D\u0430\u043B\u0438\u0437\u0430\u0434\u0430\u043D\u043D\u044B\u0445 \u0442\u0438\u043F\u0437\u0430\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u044F\u0442\u0430\u0431\u043B\u0438\u0446\u044B\u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u0430\u0430\u043D\u0430\u043B\u0438\u0437\u0430\u0434\u0430\u043D\u043D\u044B\u0445 \u0442\u0438\u043F\u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F\u0447\u0438\u0441\u043B\u043E\u0432\u044B\u0445\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0439\u0430\u043D\u0430\u043B\u0438\u0437\u0430\u0434\u0430\u043D\u043D\u044B\u0445 \u0442\u0438\u043F\u0438\u0441\u0442\u043E\u0447\u043D\u0438\u043A\u0430\u0434\u0430\u043D\u043D\u044B\u0445\u043F\u043E\u0438\u0441\u043A\u0430\u0430\u0441\u0441\u043E\u0446\u0438\u0430\u0446\u0438\u0439 \u0442\u0438\u043F\u043A\u043E\u043B\u043E\u043D\u043A\u0438\u0430\u043D\u0430\u043B\u0438\u0437\u0430\u0434\u0430\u043D\u043D\u044B\u0445\u0434\u0435\u0440\u0435\u0432\u043E\u0440\u0435\u0448\u0435\u043D\u0438\u0439 \u0442\u0438\u043F\u043A\u043E\u043B\u043E\u043D\u043A\u0438\u0430\u043D\u0430\u043B\u0438\u0437\u0430\u0434\u0430\u043D\u043D\u044B\u0445\u043A\u043B\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u044F \u0442\u0438\u043F\u043A\u043E\u043B\u043E\u043D\u043A\u0438\u0430\u043D\u0430\u043B\u0438\u0437\u0430\u0434\u0430\u043D\u043D\u044B\u0445\u043E\u0431\u0449\u0430\u044F\u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043A\u0430 \u0442\u0438\u043F\u043A\u043E\u043B\u043E\u043D\u043A\u0438\u0430\u043D\u0430\u043B\u0438\u0437\u0430\u0434\u0430\u043D\u043D\u044B\u0445\u043F\u043E\u0438\u0441\u043A\u0430\u0441\u0441\u043E\u0446\u0438\u0430\u0446\u0438\u0439 \u0442\u0438\u043F\u043A\u043E\u043B\u043E\u043D\u043A\u0438\u0430\u043D\u0430\u043B\u0438\u0437\u0430\u0434\u0430\u043D\u043D\u044B\u0445\u043F\u043E\u0438\u0441\u043A\u043F\u043E\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u043D\u043E\u0441\u0442\u0435\u0439 \u0442\u0438\u043F\u043A\u043E\u043B\u043E\u043D\u043A\u0438\u043C\u043E\u0434\u0435\u043B\u0438\u043F\u0440\u043E\u0433\u043D\u043E\u0437\u0430 \u0442\u0438\u043F\u043C\u0435\u0440\u044B\u0440\u0430\u0441\u0441\u0442\u043E\u044F\u043D\u0438\u044F\u0430\u043D\u0430\u043B\u0438\u0437\u0430\u0434\u0430\u043D\u043D\u044B\u0445 \u0442\u0438\u043F\u043E\u0442\u0441\u0435\u0447\u0435\u043D\u0438\u044F\u043F\u0440\u0430\u0432\u0438\u043B\u0430\u0441\u0441\u043E\u0446\u0438\u0430\u0446\u0438\u0438 \u0442\u0438\u043F\u043F\u043E\u043B\u044F\u0430\u043D\u0430\u043B\u0438\u0437\u0430\u0434\u0430\u043D\u043D\u044B\u0445 \u0442\u0438\u043F\u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u0438\u0437\u0430\u0446\u0438\u0438\u0430\u043D\u0430\u043B\u0438\u0437\u0430\u0434\u0430\u043D\u043D\u044B\u0445 \u0442\u0438\u043F\u0443\u043F\u043E\u0440\u044F\u0434\u043E\u0447\u0438\u0432\u0430\u043D\u0438\u044F\u043F\u0440\u0430\u0432\u0438\u043B\u0430\u0441\u0441\u043E\u0446\u0438\u0430\u0446\u0438\u0438\u0430\u043D\u0430\u043B\u0438\u0437\u0430\u0434\u0430\u043D\u043D\u044B\u0445 \u0442\u0438\u043F\u0443\u043F\u043E\u0440\u044F\u0434\u043E\u0447\u0438\u0432\u0430\u043D\u0438\u044F\u0448\u0430\u0431\u043B\u043E\u043D\u043E\u0432\u043F\u043E\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u043D\u043E\u0441\u0442\u0435\u0439\u0430\u043D\u0430\u043B\u0438\u0437\u0430\u0434\u0430\u043D\u043D\u044B\u0445 \u0442\u0438\u043F\u0443\u043F\u0440\u043E\u0449\u0435\u043D\u0438\u044F\u0434\u0435\u0440\u0435\u0432\u0430\u0440\u0435\u0448\u0435\u043D\u0438\u0439 "; + // v8 системные перечисления - xml, json, xs, dom, xdto, web-сервисы ==> class + var v8_system_enums_xml_json_xs_dom_xdto_ws = "ws\u043D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435\u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u0430 \u0432\u0430\u0440\u0438\u0430\u043D\u0442xpathxs \u0432\u0430\u0440\u0438\u0430\u043D\u0442\u0437\u0430\u043F\u0438\u0441\u0438\u0434\u0430\u0442\u044Bjson \u0432\u0430\u0440\u0438\u0430\u043D\u0442\u043F\u0440\u043E\u0441\u0442\u043E\u0433\u043E\u0442\u0438\u043F\u0430xs \u0432\u0438\u0434\u0433\u0440\u0443\u043F\u043F\u044B\u043C\u043E\u0434\u0435\u043B\u0438xs \u0432\u0438\u0434\u0444\u0430\u0441\u0435\u0442\u0430xdto \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435\u043F\u043E\u0441\u0442\u0440\u043E\u0438\u0442\u0435\u043B\u044Fdom \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u043D\u043E\u0441\u0442\u044C\u043F\u0440\u043E\u0441\u0442\u043E\u0433\u043E\u0442\u0438\u043F\u0430xs \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u043D\u043E\u0441\u0442\u044C\u0441\u043E\u0441\u0442\u0430\u0432\u043D\u043E\u0433\u043E\u0442\u0438\u043F\u0430xs \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u043D\u043E\u0441\u0442\u044C\u0441\u0445\u0435\u043C\u044Bxs \u0437\u0430\u043F\u0440\u0435\u0449\u0435\u043D\u043D\u044B\u0435\u043F\u043E\u0434\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0438xs \u0438\u0441\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u044F\u0433\u0440\u0443\u043F\u043F\u043F\u043E\u0434\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0438xs \u043A\u0430\u0442\u0435\u0433\u043E\u0440\u0438\u044F\u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F\u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430xs \u043A\u0430\u0442\u0435\u0433\u043E\u0440\u0438\u044F\u043E\u0433\u0440\u0430\u043D\u0438\u0447\u0435\u043D\u0438\u044F\u0438\u0434\u0435\u043D\u0442\u0438\u0447\u043D\u043E\u0441\u0442\u0438xs \u043A\u0430\u0442\u0435\u0433\u043E\u0440\u0438\u044F\u043E\u0433\u0440\u0430\u043D\u0438\u0447\u0435\u043D\u0438\u044F\u043F\u0440\u043E\u0441\u0442\u0440\u0430\u043D\u0441\u0442\u0432\u0438\u043C\u0435\u043Dxs \u043C\u0435\u0442\u043E\u0434\u043D\u0430\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u043D\u0438\u044Fxs \u043C\u043E\u0434\u0435\u043B\u044C\u0441\u043E\u0434\u0435\u0440\u0436\u0438\u043C\u043E\u0433\u043Exs \u043D\u0430\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435\u0442\u0438\u043F\u0430xml \u043D\u0435\u0434\u043E\u043F\u0443\u0441\u0442\u0438\u043C\u044B\u0435\u043F\u043E\u0434\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0438xs \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0430\u043F\u0440\u043E\u0431\u0435\u043B\u044C\u043D\u044B\u0445\u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432xs \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0430\u0441\u043E\u0434\u0435\u0440\u0436\u0438\u043C\u043E\u0433\u043Exs \u043E\u0433\u0440\u0430\u043D\u0438\u0447\u0435\u043D\u0438\u0435\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044Fxs \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B\u043E\u0442\u0431\u043E\u0440\u0430\u0443\u0437\u043B\u043E\u0432dom \u043F\u0435\u0440\u0435\u043D\u043E\u0441\u0441\u0442\u0440\u043E\u043Ajson \u043F\u043E\u0437\u0438\u0446\u0438\u044F\u0432\u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0435dom \u043F\u0440\u043E\u0431\u0435\u043B\u044C\u043D\u044B\u0435\u0441\u0438\u043C\u0432\u043E\u043B\u044Bxml \u0442\u0438\u043F\u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430xml \u0442\u0438\u043F\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044Fjson \u0442\u0438\u043F\u043A\u0430\u043D\u043E\u043D\u0438\u0447\u0435\u0441\u043A\u043E\u0433\u043Exml \u0442\u0438\u043F\u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u044Bxs \u0442\u0438\u043F\u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0438xml \u0442\u0438\u043F\u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u0430domxpath \u0442\u0438\u043F\u0443\u0437\u043B\u0430dom \u0442\u0438\u043F\u0443\u0437\u043B\u0430xml \u0444\u043E\u0440\u043C\u0430xml \u0444\u043E\u0440\u043C\u0430\u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0438\u044Fxs \u0444\u043E\u0440\u043C\u0430\u0442\u0434\u0430\u0442\u044Bjson \u044D\u043A\u0440\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435\u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432json "; + // v8 системные перечисления - система компоновки данных ==> class + var v8_system_enums_data_composition_system = "\u0432\u0438\u0434\u0441\u0440\u0430\u0432\u043D\u0435\u043D\u0438\u044F\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435\u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0438\u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043E\u0432\u043A\u0438\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u043D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435\u0441\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u043A\u0438\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u0440\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435\u0432\u043B\u043E\u0436\u0435\u043D\u043D\u044B\u0445\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432\u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u0430\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u0440\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435\u0438\u0442\u043E\u0433\u043E\u0432\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u0440\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435\u0433\u0440\u0443\u043F\u043F\u0438\u0440\u043E\u0432\u043A\u0438\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u0440\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435\u043F\u043E\u043B\u0435\u0439\u0433\u0440\u0443\u043F\u043F\u0438\u0440\u043E\u0432\u043A\u0438\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u0440\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435\u043F\u043E\u043B\u044F\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u0440\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435\u0440\u0435\u043A\u0432\u0438\u0437\u0438\u0442\u043E\u0432\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u0440\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435\u0440\u0435\u0441\u0443\u0440\u0441\u043E\u0432\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u0442\u0438\u043F\u0431\u0443\u0445\u0433\u0430\u043B\u0442\u0435\u0440\u0441\u043A\u043E\u0433\u043E\u043E\u0441\u0442\u0430\u0442\u043A\u0430\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u0442\u0438\u043F\u0432\u044B\u0432\u043E\u0434\u0430\u0442\u0435\u043A\u0441\u0442\u0430\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u0442\u0438\u043F\u0433\u0440\u0443\u043F\u043F\u0438\u0440\u043E\u0432\u043A\u0438\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u0442\u0438\u043F\u0433\u0440\u0443\u043F\u043F\u044B\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432\u043E\u0442\u0431\u043E\u0440\u0430\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u0442\u0438\u043F\u0434\u043E\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u044F\u043F\u0435\u0440\u0438\u043E\u0434\u0430\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u0442\u0438\u043F\u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0430\u043F\u043E\u043B\u0435\u0439\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u0442\u0438\u043F\u043C\u0430\u043A\u0435\u0442\u0430\u0433\u0440\u0443\u043F\u043F\u0438\u0440\u043E\u0432\u043A\u0438\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u0442\u0438\u043F\u043C\u0430\u043A\u0435\u0442\u0430\u043E\u0431\u043B\u0430\u0441\u0442\u0438\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u0442\u0438\u043F\u043E\u0441\u0442\u0430\u0442\u043A\u0430\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u0442\u0438\u043F\u043F\u0435\u0440\u0438\u043E\u0434\u0430\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u0442\u0438\u043F\u0440\u0430\u0437\u043C\u0435\u0449\u0435\u043D\u0438\u044F\u0442\u0435\u043A\u0441\u0442\u0430\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u0442\u0438\u043F\u0441\u0432\u044F\u0437\u0438\u043D\u0430\u0431\u043E\u0440\u043E\u0432\u0434\u0430\u043D\u043D\u044B\u0445\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u0442\u0438\u043F\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u0430\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u0440\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435\u043B\u0435\u0433\u0435\u043D\u0434\u044B\u0434\u0438\u0430\u0433\u0440\u0430\u043C\u043C\u044B\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u0442\u0438\u043F\u043F\u0440\u0438\u043C\u0435\u043D\u0435\u043D\u0438\u044F\u043E\u0442\u0431\u043E\u0440\u0430\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u0440\u0435\u0436\u0438\u043C\u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u0440\u0435\u0436\u0438\u043C\u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F\u043D\u0430\u0441\u0442\u0440\u043E\u0435\u043A\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u0441\u043E\u0441\u0442\u043E\u044F\u043D\u0438\u0435\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u0441\u043F\u043E\u0441\u043E\u0431\u0432\u043E\u0441\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u044F\u043D\u0430\u0441\u0442\u0440\u043E\u0435\u043A\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u0440\u0435\u0436\u0438\u043C\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u0430 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0435\u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u0430\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u0430\u0432\u0442\u043E\u043F\u043E\u0437\u0438\u0446\u0438\u044F\u0440\u0435\u0441\u0443\u0440\u0441\u043E\u0432\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u0432\u0430\u0440\u0438\u0430\u043D\u0442\u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F\u0433\u0440\u0443\u043F\u043F\u0438\u0440\u043E\u0432\u043A\u0438\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u0440\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435\u0440\u0435\u0441\u0443\u0440\u0441\u043E\u0432\u0432\u0434\u0438\u0430\u0433\u0440\u0430\u043C\u043C\u0435\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u0444\u0438\u043A\u0441\u0430\u0446\u0438\u044F\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0435\u0443\u0441\u043B\u043E\u0432\u043D\u043E\u0433\u043E\u043E\u0444\u043E\u0440\u043C\u043B\u0435\u043D\u0438\u044F\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 "; + // v8 системные перечисления - почта ==> class + var v8_system_enums_email = "\u0432\u0430\u0436\u043D\u043E\u0441\u0442\u044C\u0438\u043D\u0442\u0435\u0440\u043D\u0435\u0442\u043F\u043E\u0447\u0442\u043E\u0432\u043E\u0433\u043E\u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0430\u0442\u0435\u043A\u0441\u0442\u0430\u0438\u043D\u0442\u0435\u0440\u043D\u0435\u0442\u043F\u043E\u0447\u0442\u043E\u0432\u043E\u0433\u043E\u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F \u0441\u043F\u043E\u0441\u043E\u0431\u043A\u043E\u0434\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F\u0438\u043D\u0442\u0435\u0440\u043D\u0435\u0442\u043F\u043E\u0447\u0442\u043E\u0432\u043E\u0433\u043E\u0432\u043B\u043E\u0436\u0435\u043D\u0438\u044F \u0441\u043F\u043E\u0441\u043E\u0431\u043A\u043E\u0434\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F\u043D\u0435ascii\u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432\u0438\u043D\u0442\u0435\u0440\u043D\u0435\u0442\u043F\u043E\u0447\u0442\u043E\u0432\u043E\u0433\u043E\u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F \u0442\u0438\u043F\u0442\u0435\u043A\u0441\u0442\u0430\u043F\u043E\u0447\u0442\u043E\u0432\u043E\u0433\u043E\u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F \u043F\u0440\u043E\u0442\u043E\u043A\u043E\u043B\u0438\u043D\u0442\u0435\u0440\u043D\u0435\u0442\u043F\u043E\u0447\u0442\u044B \u0441\u0442\u0430\u0442\u0443\u0441\u0440\u0430\u0437\u0431\u043E\u0440\u0430\u043F\u043E\u0447\u0442\u043E\u0432\u043E\u0433\u043E\u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F "; + // v8 системные перечисления - журнал регистрации ==> class + var v8_system_enums_logbook = "\u0440\u0435\u0436\u0438\u043C\u0442\u0440\u0430\u043D\u0437\u0430\u043A\u0446\u0438\u0438\u0437\u0430\u043F\u0438\u0441\u0438\u0436\u0443\u0440\u043D\u0430\u043B\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0441\u0442\u0430\u0442\u0443\u0441\u0442\u0440\u0430\u043D\u0437\u0430\u043A\u0446\u0438\u0438\u0437\u0430\u043F\u0438\u0441\u0438\u0436\u0443\u0440\u043D\u0430\u043B\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0443\u0440\u043E\u0432\u0435\u043D\u044C\u0436\u0443\u0440\u043D\u0430\u043B\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 "; + // v8 системные перечисления - криптография ==> class + var v8_system_enums_cryptography = "\u0440\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435\u0445\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0430\u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043A\u0430\u0442\u043E\u0432\u043A\u0440\u0438\u043F\u0442\u043E\u0433\u0440\u0430\u0444\u0438\u0438 \u0440\u0435\u0436\u0438\u043C\u0432\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u044F\u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043A\u0430\u0442\u043E\u0432\u043A\u0440\u0438\u043F\u0442\u043E\u0433\u0440\u0430\u0444\u0438\u0438 \u0440\u0435\u0436\u0438\u043C\u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0438\u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043A\u0430\u0442\u0430\u043A\u0440\u0438\u043F\u0442\u043E\u0433\u0440\u0430\u0444\u0438\u0438 \u0442\u0438\u043F\u0445\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0430\u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043A\u0430\u0442\u043E\u0432\u043A\u0440\u0438\u043F\u0442\u043E\u0433\u0440\u0430\u0444\u0438\u0438 "; + // v8 системные перечисления - ZIP ==> class + var v8_system_enums_zip = "\u043A\u043E\u0434\u0438\u0440\u043E\u0432\u043A\u0430\u0438\u043C\u0435\u043D\u0444\u0430\u0439\u043B\u043E\u0432\u0432zip\u0444\u0430\u0439\u043B\u0435 \u043C\u0435\u0442\u043E\u0434\u0441\u0436\u0430\u0442\u0438\u044Fzip \u043C\u0435\u0442\u043E\u0434\u0448\u0438\u0444\u0440\u043E\u0432\u0430\u043D\u0438\u044Fzip \u0440\u0435\u0436\u0438\u043C\u0432\u043E\u0441\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u044F\u043F\u0443\u0442\u0435\u0439\u0444\u0430\u0439\u043B\u043E\u0432zip \u0440\u0435\u0436\u0438\u043C\u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0438\u043F\u043E\u0434\u043A\u0430\u0442\u0430\u043B\u043E\u0433\u043E\u0432zip \u0440\u0435\u0436\u0438\u043C\u0441\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u044F\u043F\u0443\u0442\u0435\u0439zip \u0443\u0440\u043E\u0432\u0435\u043D\u044C\u0441\u0436\u0430\u0442\u0438\u044Fzip "; + // v8 системные перечисления - + // Блокировка данных, Фоновые задания, Автоматизированное тестирование, + // Доставляемые уведомления, Встроенные покупки, Интернет, Работа с двоичными данными ==> class + var v8_system_enums_other = "\u0437\u0432\u0443\u043A\u043E\u0432\u043E\u0435\u043E\u043F\u043E\u0432\u0435\u0449\u0435\u043D\u0438\u0435 \u043D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435\u043F\u0435\u0440\u0435\u0445\u043E\u0434\u0430\u043A\u0441\u0442\u0440\u043E\u043A\u0435 \u043F\u043E\u0437\u0438\u0446\u0438\u044F\u0432\u043F\u043E\u0442\u043E\u043A\u0435 \u043F\u043E\u0440\u044F\u0434\u043E\u043A\u0431\u0430\u0439\u0442\u043E\u0432 \u0440\u0435\u0436\u0438\u043C\u0431\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u0440\u0435\u0436\u0438\u043C\u0443\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u044F\u0431\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u043A\u043E\u0439\u0434\u0430\u043D\u043D\u044B\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u0432\u0441\u0442\u0440\u043E\u0435\u043D\u043D\u044B\u0445\u043F\u043E\u043A\u0443\u043F\u043E\u043A \u0441\u043E\u0441\u0442\u043E\u044F\u043D\u0438\u0435\u0444\u043E\u043D\u043E\u0432\u043E\u0433\u043E\u0437\u0430\u0434\u0430\u043D\u0438\u044F \u0442\u0438\u043F\u043F\u043E\u0434\u043F\u0438\u0441\u0447\u0438\u043A\u0430\u0434\u043E\u0441\u0442\u0430\u0432\u043B\u044F\u0435\u043C\u044B\u0445\u0443\u0432\u0435\u0434\u043E\u043C\u043B\u0435\u043D\u0438\u0439 \u0443\u0440\u043E\u0432\u0435\u043D\u044C\u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F\u0437\u0430\u0449\u0438\u0449\u0435\u043D\u043D\u043E\u0433\u043E\u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u044Fftp "; + // v8 системные перечисления - схема запроса ==> class + var v8_system_enums_request_schema = "\u043D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435\u043F\u043E\u0440\u044F\u0434\u043A\u0430\u0441\u0445\u0435\u043C\u044B\u0437\u0430\u043F\u0440\u043E\u0441\u0430 \u0442\u0438\u043F\u0434\u043E\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u044F\u043F\u0435\u0440\u0438\u043E\u0434\u0430\u043C\u0438\u0441\u0445\u0435\u043C\u044B\u0437\u0430\u043F\u0440\u043E\u0441\u0430 \u0442\u0438\u043F\u043A\u043E\u043D\u0442\u0440\u043E\u043B\u044C\u043D\u043E\u0439\u0442\u043E\u0447\u043A\u0438\u0441\u0445\u0435\u043C\u044B\u0437\u0430\u043F\u0440\u043E\u0441\u0430 \u0442\u0438\u043F\u043E\u0431\u044A\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u044F\u0441\u0445\u0435\u043C\u044B\u0437\u0430\u043F\u0440\u043E\u0441\u0430 \u0442\u0438\u043F\u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u0430\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u043E\u0439\u0442\u0430\u0431\u043B\u0438\u0446\u044B\u0441\u0445\u0435\u043C\u044B\u0437\u0430\u043F\u0440\u043E\u0441\u0430 \u0442\u0438\u043F\u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u044F\u0441\u0445\u0435\u043C\u044B\u0437\u0430\u043F\u0440\u043E\u0441\u0430 "; + // v8 системные перечисления - свойства объектов метаданных ==> class + var v8_system_enums_properties_of_metadata_objects = "http\u043C\u0435\u0442\u043E\u0434 \u0430\u0432\u0442\u043E\u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0435\u043E\u0431\u0449\u0435\u0433\u043E\u0440\u0435\u043A\u0432\u0438\u0437\u0438\u0442\u0430 \u0430\u0432\u0442\u043E\u043F\u0440\u0435\u0444\u0438\u043A\u0441\u043D\u043E\u043C\u0435\u0440\u0430\u0437\u0430\u0434\u0430\u0447\u0438 \u0432\u0430\u0440\u0438\u0430\u043D\u0442\u0432\u0441\u0442\u0440\u043E\u0435\u043D\u043D\u043E\u0433\u043E\u044F\u0437\u044B\u043A\u0430 \u0432\u0438\u0434\u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0438 \u0432\u0438\u0434\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043D\u0430\u043A\u043E\u043F\u043B\u0435\u043D\u0438\u044F \u0432\u0438\u0434\u0442\u0430\u0431\u043B\u0438\u0446\u044B\u0432\u043D\u0435\u0448\u043D\u0435\u0433\u043E\u0438\u0441\u0442\u043E\u0447\u043D\u0438\u043A\u0430\u0434\u0430\u043D\u043D\u044B\u0445 \u0437\u0430\u043F\u0438\u0441\u044C\u0434\u0432\u0438\u0436\u0435\u043D\u0438\u0439\u043F\u0440\u0438\u043F\u0440\u043E\u0432\u0435\u0434\u0435\u043D\u0438\u0438 \u0437\u0430\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u0435\u043F\u043E\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u043D\u043E\u0441\u0442\u0435\u0439 \u0438\u043D\u0434\u0435\u043A\u0441\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0435\u0431\u0430\u0437\u044B\u043F\u043B\u0430\u043D\u0430\u0432\u0438\u0434\u043E\u0432\u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0435\u0431\u044B\u0441\u0442\u0440\u043E\u0433\u043E\u0432\u044B\u0431\u043E\u0440\u0430 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0435\u043E\u0431\u0449\u0435\u0433\u043E\u0440\u0435\u043A\u0432\u0438\u0437\u0438\u0442\u0430 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0435\u043F\u043E\u0434\u0447\u0438\u043D\u0435\u043D\u0438\u044F \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0435\u043F\u043E\u043B\u043D\u043E\u0442\u0435\u043A\u0441\u0442\u043E\u0432\u043E\u0433\u043E\u043F\u043E\u0438\u0441\u043A\u0430 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0435\u0440\u0430\u0437\u0434\u0435\u043B\u044F\u0435\u043C\u044B\u0445\u0434\u0430\u043D\u043D\u044B\u0445\u043E\u0431\u0449\u0435\u0433\u043E\u0440\u0435\u043A\u0432\u0438\u0437\u0438\u0442\u0430 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0435\u0440\u0435\u043A\u0432\u0438\u0437\u0438\u0442\u0430 \u043D\u0430\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435\u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F \u043D\u0430\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u0438\u044F\u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435\u043F\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0435\u043F\u0440\u0435\u0434\u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0445\u0434\u0430\u043D\u043D\u044B\u0445 \u043E\u043F\u0435\u0440\u0430\u0442\u0438\u0432\u043D\u043E\u0435\u043F\u0440\u043E\u0432\u0435\u0434\u0435\u043D\u0438\u0435 \u043E\u0441\u043D\u043E\u0432\u043D\u043E\u0435\u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0438\u0435\u0432\u0438\u0434\u0430\u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u043E\u0441\u043D\u043E\u0432\u043D\u043E\u0435\u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0438\u0435\u0432\u0438\u0434\u0430\u0445\u0430\u0440\u0430\u043A\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043A\u0438 \u043E\u0441\u043D\u043E\u0432\u043D\u043E\u0435\u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0438\u0435\u0437\u0430\u0434\u0430\u0447\u0438 \u043E\u0441\u043D\u043E\u0432\u043D\u043E\u0435\u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0438\u0435\u043F\u043B\u0430\u043D\u0430\u043E\u0431\u043C\u0435\u043D\u0430 \u043E\u0441\u043D\u043E\u0432\u043D\u043E\u0435\u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0438\u0435\u0441\u043F\u0440\u0430\u0432\u043E\u0447\u043D\u0438\u043A\u0430 \u043E\u0441\u043D\u043E\u0432\u043D\u043E\u0435\u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0438\u0435\u0441\u0447\u0435\u0442\u0430 \u043F\u0435\u0440\u0435\u043C\u0435\u0449\u0435\u043D\u0438\u0435\u0433\u0440\u0430\u043D\u0438\u0446\u044B\u043F\u0440\u0438\u043F\u0440\u043E\u0432\u0435\u0434\u0435\u043D\u0438\u0438 \u043F\u0435\u0440\u0438\u043E\u0434\u0438\u0447\u043D\u043E\u0441\u0442\u044C\u043D\u043E\u043C\u0435\u0440\u0430\u0431\u0438\u0437\u043D\u0435\u0441\u043F\u0440\u043E\u0446\u0435\u0441\u0441\u0430 \u043F\u0435\u0440\u0438\u043E\u0434\u0438\u0447\u043D\u043E\u0441\u0442\u044C\u043D\u043E\u043C\u0435\u0440\u0430\u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430 \u043F\u0435\u0440\u0438\u043E\u0434\u0438\u0447\u043D\u043E\u0441\u0442\u044C\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u043F\u0435\u0440\u0438\u043E\u0434\u0438\u0447\u043D\u043E\u0441\u0442\u044C\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0441\u0432\u0435\u0434\u0435\u043D\u0438\u0439 \u043F\u043E\u0432\u0442\u043E\u0440\u043D\u043E\u0435\u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0435\u0432\u043E\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043C\u044B\u0445\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0439 \u043F\u043E\u043B\u043D\u043E\u0442\u0435\u043A\u0441\u0442\u043E\u0432\u044B\u0439\u043F\u043E\u0438\u0441\u043A\u043F\u0440\u0438\u0432\u0432\u043E\u0434\u0435\u043F\u043E\u0441\u0442\u0440\u043E\u043A\u0435 \u043F\u0440\u0438\u043D\u0430\u0434\u043B\u0435\u0436\u043D\u043E\u0441\u0442\u044C\u043E\u0431\u044A\u0435\u043A\u0442\u0430 \u043F\u0440\u043E\u0432\u0435\u0434\u0435\u043D\u0438\u0435 \u0440\u0430\u0437\u0434\u0435\u043B\u0435\u043D\u0438\u0435\u0430\u0443\u0442\u0435\u043D\u0442\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u0438\u043E\u0431\u0449\u0435\u0433\u043E\u0440\u0435\u043A\u0432\u0438\u0437\u0438\u0442\u0430 \u0440\u0430\u0437\u0434\u0435\u043B\u0435\u043D\u0438\u0435\u0434\u0430\u043D\u043D\u044B\u0445\u043E\u0431\u0449\u0435\u0433\u043E\u0440\u0435\u043A\u0432\u0438\u0437\u0438\u0442\u0430 \u0440\u0430\u0437\u0434\u0435\u043B\u0435\u043D\u0438\u0435\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u0438\u0439\u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438\u043E\u0431\u0449\u0435\u0433\u043E\u0440\u0435\u043A\u0432\u0438\u0437\u0438\u0442\u0430 \u0440\u0435\u0436\u0438\u043C\u0430\u0432\u0442\u043E\u043D\u0443\u043C\u0435\u0440\u0430\u0446\u0438\u0438\u043E\u0431\u044A\u0435\u043A\u0442\u043E\u0432 \u0440\u0435\u0436\u0438\u043C\u0437\u0430\u043F\u0438\u0441\u0438\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0440\u0435\u0436\u0438\u043C\u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F\u043C\u043E\u0434\u0430\u043B\u044C\u043D\u043E\u0441\u0442\u0438 \u0440\u0435\u0436\u0438\u043C\u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F\u0441\u0438\u043D\u0445\u0440\u043E\u043D\u043D\u044B\u0445\u0432\u044B\u0437\u043E\u0432\u043E\u0432\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u0438\u0439\u043F\u043B\u0430\u0442\u0444\u043E\u0440\u043C\u044B\u0438\u0432\u043D\u0435\u0448\u043D\u0438\u0445\u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442 \u0440\u0435\u0436\u0438\u043C\u043F\u043E\u0432\u0442\u043E\u0440\u043D\u043E\u0433\u043E\u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F\u0441\u0435\u0430\u043D\u0441\u043E\u0432 \u0440\u0435\u0436\u0438\u043C\u043F\u043E\u043B\u0443\u0447\u0435\u043D\u0438\u044F\u0434\u0430\u043D\u043D\u044B\u0445\u0432\u044B\u0431\u043E\u0440\u0430\u043F\u0440\u0438\u0432\u0432\u043E\u0434\u0435\u043F\u043E\u0441\u0442\u0440\u043E\u043A\u0435 \u0440\u0435\u0436\u0438\u043C\u0441\u043E\u0432\u043C\u0435\u0441\u0442\u0438\u043C\u043E\u0441\u0442\u0438 \u0440\u0435\u0436\u0438\u043C\u0441\u043E\u0432\u043C\u0435\u0441\u0442\u0438\u043C\u043E\u0441\u0442\u0438\u0438\u043D\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0440\u0435\u0436\u0438\u043C\u0443\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u044F\u0431\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u043A\u043E\u0439\u0434\u0430\u043D\u043D\u044B\u0445\u043F\u043E\u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E \u0441\u0435\u0440\u0438\u0438\u043A\u043E\u0434\u043E\u0432\u043F\u043B\u0430\u043D\u0430\u0432\u0438\u0434\u043E\u0432\u0445\u0430\u0440\u0430\u043A\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043A \u0441\u0435\u0440\u0438\u0438\u043A\u043E\u0434\u043E\u0432\u043F\u043B\u0430\u043D\u0430\u0441\u0447\u0435\u0442\u043E\u0432 \u0441\u0435\u0440\u0438\u0438\u043A\u043E\u0434\u043E\u0432\u0441\u043F\u0440\u0430\u0432\u043E\u0447\u043D\u0438\u043A\u0430 \u0441\u043E\u0437\u0434\u0430\u043D\u0438\u0435\u043F\u0440\u0438\u0432\u0432\u043E\u0434\u0435 \u0441\u043F\u043E\u0441\u043E\u0431\u0432\u044B\u0431\u043E\u0440\u0430 \u0441\u043F\u043E\u0441\u043E\u0431\u043F\u043E\u0438\u0441\u043A\u0430\u0441\u0442\u0440\u043E\u043A\u0438\u043F\u0440\u0438\u0432\u0432\u043E\u0434\u0435\u043F\u043E\u0441\u0442\u0440\u043E\u043A\u0435 \u0441\u043F\u043E\u0441\u043E\u0431\u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0442\u0438\u043F\u0434\u0430\u043D\u043D\u044B\u0445\u0442\u0430\u0431\u043B\u0438\u0446\u044B\u0432\u043D\u0435\u0448\u043D\u0435\u0433\u043E\u0438\u0441\u0442\u043E\u0447\u043D\u0438\u043A\u0430\u0434\u0430\u043D\u043D\u044B\u0445 \u0442\u0438\u043F\u043A\u043E\u0434\u0430\u043F\u043B\u0430\u043D\u0430\u0432\u0438\u0434\u043E\u0432\u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u0442\u0438\u043F\u043A\u043E\u0434\u0430\u0441\u043F\u0440\u0430\u0432\u043E\u0447\u043D\u0438\u043A\u0430 \u0442\u0438\u043F\u043C\u0430\u043A\u0435\u0442\u0430 \u0442\u0438\u043F\u043D\u043E\u043C\u0435\u0440\u0430\u0431\u0438\u0437\u043D\u0435\u0441\u043F\u0440\u043E\u0446\u0435\u0441\u0441\u0430 \u0442\u0438\u043F\u043D\u043E\u043C\u0435\u0440\u0430\u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430 \u0442\u0438\u043F\u043D\u043E\u043C\u0435\u0440\u0430\u0437\u0430\u0434\u0430\u0447\u0438 \u0442\u0438\u043F\u0444\u043E\u0440\u043C\u044B \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0435\u0434\u0432\u0438\u0436\u0435\u043D\u0438\u0439 "; + // v8 системные перечисления - разные ==> class + var v8_system_enums_differents = "\u0432\u0430\u0436\u043D\u043E\u0441\u0442\u044C\u043F\u0440\u043E\u0431\u043B\u0435\u043C\u044B\u043F\u0440\u0438\u043C\u0435\u043D\u0435\u043D\u0438\u044F\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u0438\u044F\u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0432\u0430\u0440\u0438\u0430\u043D\u0442\u0438\u043D\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430\u043A\u043B\u0438\u0435\u043D\u0442\u0441\u043A\u043E\u0433\u043E\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F \u0432\u0430\u0440\u0438\u0430\u043D\u0442\u043C\u0430\u0441\u0448\u0442\u0430\u0431\u0430\u0444\u043E\u0440\u043C\u043A\u043B\u0438\u0435\u043D\u0442\u0441\u043A\u043E\u0433\u043E\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F \u0432\u0430\u0440\u0438\u0430\u043D\u0442\u043E\u0441\u043D\u043E\u0432\u043D\u043E\u0433\u043E\u0448\u0440\u0438\u0444\u0442\u0430\u043A\u043B\u0438\u0435\u043D\u0442\u0441\u043A\u043E\u0433\u043E\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F \u0432\u0430\u0440\u0438\u0430\u043D\u0442\u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u043E\u0433\u043E\u043F\u0435\u0440\u0438\u043E\u0434\u0430 \u0432\u0430\u0440\u0438\u0430\u043D\u0442\u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u043E\u0439\u0434\u0430\u0442\u044B\u043D\u0430\u0447\u0430\u043B\u0430 \u0432\u0438\u0434\u0433\u0440\u0430\u043D\u0438\u0446\u044B \u0432\u0438\u0434\u043A\u0430\u0440\u0442\u0438\u043D\u043A\u0438 \u0432\u0438\u0434\u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F\u043F\u043E\u043B\u043D\u043E\u0442\u0435\u043A\u0441\u0442\u043E\u0432\u043E\u0433\u043E\u043F\u043E\u0438\u0441\u043A\u0430 \u0432\u0438\u0434\u0440\u0430\u043C\u043A\u0438 \u0432\u0438\u0434\u0441\u0440\u0430\u0432\u043D\u0435\u043D\u0438\u044F \u0432\u0438\u0434\u0446\u0432\u0435\u0442\u0430 \u0432\u0438\u0434\u0447\u0438\u0441\u043B\u043E\u0432\u043E\u0433\u043E\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u0432\u0438\u0434\u0448\u0440\u0438\u0444\u0442\u0430 \u0434\u043E\u043F\u0443\u0441\u0442\u0438\u043C\u0430\u044F\u0434\u043B\u0438\u043D\u0430 \u0434\u043E\u043F\u0443\u0441\u0442\u0438\u043C\u044B\u0439\u0437\u043D\u0430\u043A \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0435byteordermark \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0435\u043C\u0435\u0442\u0430\u0434\u0430\u043D\u043D\u044B\u0445\u043F\u043E\u043B\u043D\u043E\u0442\u0435\u043A\u0441\u0442\u043E\u0432\u043E\u0433\u043E\u043F\u043E\u0438\u0441\u043A\u0430 \u0438\u0441\u0442\u043E\u0447\u043D\u0438\u043A\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u0438\u0439\u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043A\u043B\u0430\u0432\u0438\u0448\u0430 \u043A\u043E\u0434\u0432\u043E\u0437\u0432\u0440\u0430\u0442\u0430\u0434\u0438\u0430\u043B\u043E\u0433\u0430 \u043A\u043E\u0434\u0438\u0440\u043E\u0432\u043A\u0430xbase \u043A\u043E\u0434\u0438\u0440\u043E\u0432\u043A\u0430\u0442\u0435\u043A\u0441\u0442\u0430 \u043D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435\u043F\u043E\u0438\u0441\u043A\u0430 \u043D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435\u0441\u043E\u0440\u0442\u0438\u0440\u043E\u0432\u043A\u0438 \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0435\u043F\u0440\u0435\u0434\u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u043D\u044B\u0445\u0434\u0430\u043D\u043D\u044B\u0445 \u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0435\u043F\u0440\u0438\u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u0435\u043F\u0430\u043D\u0435\u043B\u0438\u0440\u0430\u0437\u0434\u0435\u043B\u043E\u0432 \u043F\u0440\u043E\u0432\u0435\u0440\u043A\u0430\u0437\u0430\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u044F \u0440\u0435\u0436\u0438\u043C\u0434\u0438\u0430\u043B\u043E\u0433\u0430\u0432\u043E\u043F\u0440\u043E\u0441 \u0440\u0435\u0436\u0438\u043C\u0437\u0430\u043F\u0443\u0441\u043A\u0430\u043A\u043B\u0438\u0435\u043D\u0442\u0441\u043A\u043E\u0433\u043E\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F \u0440\u0435\u0436\u0438\u043C\u043E\u043A\u0440\u0443\u0433\u043B\u0435\u043D\u0438\u044F \u0440\u0435\u0436\u0438\u043C\u043E\u0442\u043A\u0440\u044B\u0442\u0438\u044F\u0444\u043E\u0440\u043C\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044F \u0440\u0435\u0436\u0438\u043C\u043F\u043E\u043B\u043D\u043E\u0442\u0435\u043A\u0441\u0442\u043E\u0432\u043E\u0433\u043E\u043F\u043E\u0438\u0441\u043A\u0430 \u0441\u043A\u043E\u0440\u043E\u0441\u0442\u044C\u043A\u043B\u0438\u0435\u043D\u0442\u0441\u043A\u043E\u0433\u043E\u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u044F \u0441\u043E\u0441\u0442\u043E\u044F\u043D\u0438\u0435\u0432\u043D\u0435\u0448\u043D\u0435\u0433\u043E\u0438\u0441\u0442\u043E\u0447\u043D\u0438\u043A\u0430\u0434\u0430\u043D\u043D\u044B\u0445 \u0441\u043E\u0441\u0442\u043E\u044F\u043D\u0438\u0435\u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u044F\u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438\u0431\u0430\u0437\u044B\u0434\u0430\u043D\u043D\u044B\u0445 \u0441\u043F\u043E\u0441\u043E\u0431\u0432\u044B\u0431\u043E\u0440\u0430\u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043A\u0430\u0442\u0430windows \u0441\u043F\u043E\u0441\u043E\u0431\u043A\u043E\u0434\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F\u0441\u0442\u0440\u043E\u043A\u0438 \u0441\u0442\u0430\u0442\u0443\u0441\u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F \u0442\u0438\u043F\u0432\u043D\u0435\u0448\u043D\u0435\u0439\u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u044B \u0442\u0438\u043F\u043F\u043B\u0430\u0442\u0444\u043E\u0440\u043C\u044B \u0442\u0438\u043F\u043F\u043E\u0432\u0435\u0434\u0435\u043D\u0438\u044F\u043A\u043B\u0430\u0432\u0438\u0448\u0438enter \u0442\u0438\u043F\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430\u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u0438\u043E\u0432\u044B\u043F\u043E\u043B\u043D\u0435\u043D\u0438\u0438\u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u044F\u043A\u043E\u043D\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438\u0431\u0430\u0437\u044B\u0434\u0430\u043D\u043D\u044B\u0445 \u0443\u0440\u043E\u0432\u0435\u043D\u044C\u0438\u0437\u043E\u043B\u044F\u0446\u0438\u0438\u0442\u0440\u0430\u043D\u0437\u0430\u043A\u0446\u0438\u0439 \u0445\u0435\u0448\u0444\u0443\u043D\u043A\u0446\u0438\u044F \u0447\u0430\u0441\u0442\u0438\u0434\u0430\u0442\u044B"; + // class: встроенные наборы значений, системные перечисления (содержат дочерние значения, обращения к которым через разыменование) + var CLASS = v8_system_sets_of_values + v8_system_enums_interface + v8_system_enums_objects_properties + v8_system_enums_exchange_plans + v8_system_enums_tabular_document + v8_system_enums_sheduler + v8_system_enums_formatted_document + v8_system_enums_query + v8_system_enums_report_builder + v8_system_enums_files + v8_system_enums_query_builder + v8_system_enums_data_analysis + v8_system_enums_xml_json_xs_dom_xdto_ws + v8_system_enums_data_composition_system + v8_system_enums_email + v8_system_enums_logbook + v8_system_enums_cryptography + v8_system_enums_zip + v8_system_enums_other + v8_system_enums_request_schema + v8_system_enums_properties_of_metadata_objects + v8_system_enums_differents; + // v8 общие объекты (у объектов есть конструктор, экземпляры создаются методом НОВЫЙ) ==> type + var v8_shared_object = "com\u043E\u0431\u044A\u0435\u043A\u0442 ftp\u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u0435 http\u0437\u0430\u043F\u0440\u043E\u0441 http\u0441\u0435\u0440\u0432\u0438\u0441\u043E\u0442\u0432\u0435\u0442 http\u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u0435 ws\u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u044F ws\u043F\u0440\u043E\u043A\u0441\u0438 xbase \u0430\u043D\u0430\u043B\u0438\u0437\u0434\u0430\u043D\u043D\u044B\u0445 \u0430\u043D\u043D\u043E\u0442\u0430\u0446\u0438\u044Fxs \u0431\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u043A\u0430\u0434\u0430\u043D\u043D\u044B\u0445 \u0431\u0443\u0444\u0435\u0440\u0434\u0432\u043E\u0438\u0447\u043D\u044B\u0445\u0434\u0430\u043D\u043D\u044B\u0445 \u0432\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0435xs \u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u0433\u0435\u043D\u0435\u0440\u0430\u0442\u043E\u0440\u0441\u043B\u0443\u0447\u0430\u0439\u043D\u044B\u0445\u0447\u0438\u0441\u0435\u043B \u0433\u0435\u043E\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043A\u0430\u044F\u0441\u0445\u0435\u043C\u0430 \u0433\u0435\u043E\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043A\u0438\u0435\u043A\u043E\u043E\u0440\u0434\u0438\u043D\u0430\u0442\u044B \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043A\u0430\u044F\u0441\u0445\u0435\u043C\u0430 \u0433\u0440\u0443\u043F\u043F\u0430\u043C\u043E\u0434\u0435\u043B\u0438xs \u0434\u0430\u043D\u043D\u044B\u0435\u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043E\u0432\u043A\u0438\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u0434\u0432\u043E\u0438\u0447\u043D\u044B\u0435\u0434\u0430\u043D\u043D\u044B\u0435 \u0434\u0435\u043D\u0434\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u0430 \u0434\u0438\u0430\u0433\u0440\u0430\u043C\u043C\u0430 \u0434\u0438\u0430\u0433\u0440\u0430\u043C\u043C\u0430\u0433\u0430\u043D\u0442\u0430 \u0434\u0438\u0430\u043B\u043E\u0433\u0432\u044B\u0431\u043E\u0440\u0430\u0444\u0430\u0439\u043B\u0430 \u0434\u0438\u0430\u043B\u043E\u0433\u0432\u044B\u0431\u043E\u0440\u0430\u0446\u0432\u0435\u0442\u0430 \u0434\u0438\u0430\u043B\u043E\u0433\u0432\u044B\u0431\u043E\u0440\u0430\u0448\u0440\u0438\u0444\u0442\u0430 \u0434\u0438\u0430\u043B\u043E\u0433\u0440\u0430\u0441\u043F\u0438\u0441\u0430\u043D\u0438\u044F\u0440\u0435\u0433\u043B\u0430\u043C\u0435\u043D\u0442\u043D\u043E\u0433\u043E\u0437\u0430\u0434\u0430\u043D\u0438\u044F \u0434\u0438\u0430\u043B\u043E\u0433\u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F\u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u043E\u0433\u043E\u043F\u0435\u0440\u0438\u043E\u0434\u0430 \u0434\u0438\u0430\u043F\u0430\u0437\u043E\u043D \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442dom \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442html \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430\u0446\u0438\u044Fxs \u0434\u043E\u0441\u0442\u0430\u0432\u043B\u044F\u0435\u043C\u043E\u0435\u0443\u0432\u0435\u0434\u043E\u043C\u043B\u0435\u043D\u0438\u0435 \u0437\u0430\u043F\u0438\u0441\u044Cdom \u0437\u0430\u043F\u0438\u0441\u044Cfastinfoset \u0437\u0430\u043F\u0438\u0441\u044Chtml \u0437\u0430\u043F\u0438\u0441\u044Cjson \u0437\u0430\u043F\u0438\u0441\u044Cxml \u0437\u0430\u043F\u0438\u0441\u044Czip\u0444\u0430\u0439\u043B\u0430 \u0437\u0430\u043F\u0438\u0441\u044C\u0434\u0430\u043D\u043D\u044B\u0445 \u0437\u0430\u043F\u0438\u0441\u044C\u0442\u0435\u043A\u0441\u0442\u0430 \u0437\u0430\u043F\u0438\u0441\u044C\u0443\u0437\u043B\u043E\u0432dom \u0437\u0430\u043F\u0440\u043E\u0441 \u0437\u0430\u0449\u0438\u0449\u0435\u043D\u043D\u043E\u0435\u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u0435openssl \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F\u043F\u043E\u043B\u0435\u0439\u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043E\u0432\u043A\u0438\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u0438\u0437\u0432\u043B\u0435\u0447\u0435\u043D\u0438\u0435\u0442\u0435\u043A\u0441\u0442\u0430 \u0438\u043C\u043F\u043E\u0440\u0442xs \u0438\u043D\u0442\u0435\u0440\u043D\u0435\u0442\u043F\u043E\u0447\u0442\u0430 \u0438\u043D\u0442\u0435\u0440\u043D\u0435\u0442\u043F\u043E\u0447\u0442\u043E\u0432\u043E\u0435\u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435 \u0438\u043D\u0442\u0435\u0440\u043D\u0435\u0442\u043F\u043E\u0447\u0442\u043E\u0432\u044B\u0439\u043F\u0440\u043E\u0444\u0438\u043B\u044C \u0438\u043D\u0442\u0435\u0440\u043D\u0435\u0442\u043F\u0440\u043E\u043A\u0441\u0438 \u0438\u043D\u0442\u0435\u0440\u043D\u0435\u0442\u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u0435 \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044F\u0434\u043B\u044F\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u044Fxs \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0435\u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430xs \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u0435\u0441\u043E\u0431\u044B\u0442\u0438\u044F\u0436\u0443\u0440\u043D\u0430\u043B\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0438\u0441\u0442\u043E\u0447\u043D\u0438\u043A\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u044B\u0445\u043D\u0430\u0441\u0442\u0440\u043E\u0435\u043A\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u0438\u0442\u0435\u0440\u0430\u0442\u043E\u0440\u0443\u0437\u043B\u043E\u0432dom \u043A\u0430\u0440\u0442\u0438\u043D\u043A\u0430 \u043A\u0432\u0430\u043B\u0438\u0444\u0438\u043A\u0430\u0442\u043E\u0440\u044B\u0434\u0430\u0442\u044B \u043A\u0432\u0430\u043B\u0438\u0444\u0438\u043A\u0430\u0442\u043E\u0440\u044B\u0434\u0432\u043E\u0438\u0447\u043D\u044B\u0445\u0434\u0430\u043D\u043D\u044B\u0445 \u043A\u0432\u0430\u043B\u0438\u0444\u0438\u043A\u0430\u0442\u043E\u0440\u044B\u0441\u0442\u0440\u043E\u043A\u0438 \u043A\u0432\u0430\u043B\u0438\u0444\u0438\u043A\u0430\u0442\u043E\u0440\u044B\u0447\u0438\u0441\u043B\u0430 \u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u0449\u0438\u043A\u043C\u0430\u043A\u0435\u0442\u0430\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u0449\u0438\u043A\u043D\u0430\u0441\u0442\u0440\u043E\u0435\u043A\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u043A\u043E\u043D\u0441\u0442\u0440\u0443\u043A\u0442\u043E\u0440\u043C\u0430\u043A\u0435\u0442\u0430\u043E\u0444\u043E\u0440\u043C\u043B\u0435\u043D\u0438\u044F\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u043A\u043E\u043D\u0441\u0442\u0440\u0443\u043A\u0442\u043E\u0440\u043D\u0430\u0441\u0442\u0440\u043E\u0435\u043A\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u043A\u043E\u043D\u0441\u0442\u0440\u0443\u043A\u0442\u043E\u0440\u0444\u043E\u0440\u043C\u0430\u0442\u043D\u043E\u0439\u0441\u0442\u0440\u043E\u043A\u0438 \u043B\u0438\u043D\u0438\u044F \u043C\u0430\u043A\u0435\u0442\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u043C\u0430\u043A\u0435\u0442\u043E\u0431\u043B\u0430\u0441\u0442\u0438\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u043C\u0430\u043A\u0435\u0442\u043E\u0444\u043E\u0440\u043C\u043B\u0435\u043D\u0438\u044F\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u043C\u0430\u0441\u043A\u0430xs \u043C\u0435\u043D\u0435\u0434\u0436\u0435\u0440\u043A\u0440\u0438\u043F\u0442\u043E\u0433\u0440\u0430\u0444\u0438\u0438 \u043D\u0430\u0431\u043E\u0440\u0441\u0445\u0435\u043Cxml \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438\u0441\u0435\u0440\u0438\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u0438json \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0430\u043A\u0430\u0440\u0442\u0438\u043D\u043E\u043A \u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0430\u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043E\u0432\u043A\u0438\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u043E\u0431\u0445\u043E\u0434\u0434\u0435\u0440\u0435\u0432\u0430dom \u043E\u0431\u044A\u044F\u0432\u043B\u0435\u043D\u0438\u0435\u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430xs \u043E\u0431\u044A\u044F\u0432\u043B\u0435\u043D\u0438\u0435\u043D\u043E\u0442\u0430\u0446\u0438\u0438xs \u043E\u0431\u044A\u044F\u0432\u043B\u0435\u043D\u0438\u0435\u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430xs \u043E\u043F\u0438\u0441\u0430\u043D\u0438\u0435\u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F\u0441\u043E\u0431\u044B\u0442\u0438\u044F\u0434\u043E\u0441\u0442\u0443\u043F\u0436\u0443\u0440\u043D\u0430\u043B\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043E\u043F\u0438\u0441\u0430\u043D\u0438\u0435\u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F\u0441\u043E\u0431\u044B\u0442\u0438\u044F\u043E\u0442\u043A\u0430\u0437\u0432\u0434\u043E\u0441\u0442\u0443\u043F\u0435\u0436\u0443\u0440\u043D\u0430\u043B\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043E\u043F\u0438\u0441\u0430\u043D\u0438\u0435\u043E\u0431\u0440\u0430\u0431\u043E\u0442\u043A\u0438\u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043E\u0432\u043A\u0438\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u043E\u043F\u0438\u0441\u0430\u043D\u0438\u0435\u043F\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043C\u043E\u0433\u043E\u0444\u0430\u0439\u043B\u0430 \u043E\u043F\u0438\u0441\u0430\u043D\u0438\u0435\u0442\u0438\u043F\u043E\u0432 \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u0435\u0433\u0440\u0443\u043F\u043F\u044B\u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043E\u0432xs \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u0435\u0433\u0440\u0443\u043F\u043F\u044B\u043C\u043E\u0434\u0435\u043B\u0438xs \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u0435\u043E\u0433\u0440\u0430\u043D\u0438\u0447\u0435\u043D\u0438\u044F\u0438\u0434\u0435\u043D\u0442\u0438\u0447\u043D\u043E\u0441\u0442\u0438xs \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u0435\u043F\u0440\u043E\u0441\u0442\u043E\u0433\u043E\u0442\u0438\u043F\u0430xs \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u0435\u0441\u043E\u0441\u0442\u0430\u0432\u043D\u043E\u0433\u043E\u0442\u0438\u043F\u0430xs \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u0435\u0442\u0438\u043F\u0430\u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430dom \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u044Fxpathxs \u043E\u0442\u0431\u043E\u0440\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u043F\u0430\u043A\u0435\u0442\u043E\u0442\u043E\u0431\u0440\u0430\u0436\u0430\u0435\u043C\u044B\u0445\u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u043E\u0432 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u0432\u044B\u0431\u043E\u0440\u0430 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B\u0437\u0430\u043F\u0438\u0441\u0438json \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B\u0437\u0430\u043F\u0438\u0441\u0438xml \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B\u0447\u0442\u0435\u043D\u0438\u044Fxml \u043F\u0435\u0440\u0435\u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u0438\u0435xs \u043F\u043B\u0430\u043D\u0438\u0440\u043E\u0432\u0449\u0438\u043A \u043F\u043E\u043B\u0435\u0430\u043D\u0430\u043B\u0438\u0437\u0430\u0434\u0430\u043D\u043D\u044B\u0445 \u043F\u043E\u043B\u0435\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u043F\u043E\u0441\u0442\u0440\u043E\u0438\u0442\u0435\u043B\u044Cdom \u043F\u043E\u0441\u0442\u0440\u043E\u0438\u0442\u0435\u043B\u044C\u0437\u0430\u043F\u0440\u043E\u0441\u0430 \u043F\u043E\u0441\u0442\u0440\u043E\u0438\u0442\u0435\u043B\u044C\u043E\u0442\u0447\u0435\u0442\u0430 \u043F\u043E\u0441\u0442\u0440\u043E\u0438\u0442\u0435\u043B\u044C\u043E\u0442\u0447\u0435\u0442\u0430\u0430\u043D\u0430\u043B\u0438\u0437\u0430\u0434\u0430\u043D\u043D\u044B\u0445 \u043F\u043E\u0441\u0442\u0440\u043E\u0438\u0442\u0435\u043B\u044C\u0441\u0445\u0435\u043Cxml \u043F\u043E\u0442\u043E\u043A \u043F\u043E\u0442\u043E\u043A\u0432\u043F\u0430\u043C\u044F\u0442\u0438 \u043F\u043E\u0447\u0442\u0430 \u043F\u043E\u0447\u0442\u043E\u0432\u043E\u0435\u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435 \u043F\u0440\u0435\u043E\u0431\u0440\u0430\u0437\u043E\u0432\u0430\u043D\u0438\u0435xsl \u043F\u0440\u0435\u043E\u0431\u0440\u0430\u0437\u043E\u0432\u0430\u043D\u0438\u0435\u043A\u043A\u0430\u043D\u043E\u043D\u0438\u0447\u0435\u0441\u043A\u043E\u043C\u0443xml \u043F\u0440\u043E\u0446\u0435\u0441\u0441\u043E\u0440\u0432\u044B\u0432\u043E\u0434\u0430\u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u0430\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445\u0432\u043A\u043E\u043B\u043B\u0435\u043A\u0446\u0438\u044E\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0439 \u043F\u0440\u043E\u0446\u0435\u0441\u0441\u043E\u0440\u0432\u044B\u0432\u043E\u0434\u0430\u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u0430\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445\u0432\u0442\u0430\u0431\u043B\u0438\u0447\u043D\u044B\u0439\u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442 \u043F\u0440\u043E\u0446\u0435\u0441\u0441\u043E\u0440\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u0440\u0430\u0437\u044B\u043C\u0435\u043D\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u043F\u0440\u043E\u0441\u0442\u0440\u0430\u043D\u0441\u0442\u0432\u0438\u043C\u0435\u043Ddom \u0440\u0430\u043C\u043A\u0430 \u0440\u0430\u0441\u043F\u0438\u0441\u0430\u043D\u0438\u0435\u0440\u0435\u0433\u043B\u0430\u043C\u0435\u043D\u0442\u043D\u043E\u0433\u043E\u0437\u0430\u0434\u0430\u043D\u0438\u044F \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043D\u043D\u043E\u0435\u0438\u043C\u044Fxml \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u0447\u0442\u0435\u043D\u0438\u044F\u0434\u0430\u043D\u043D\u044B\u0445 \u0441\u0432\u043E\u0434\u043D\u0430\u044F\u0434\u0438\u0430\u0433\u0440\u0430\u043C\u043C\u0430 \u0441\u0432\u044F\u0437\u044C\u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u0430\u0432\u044B\u0431\u043E\u0440\u0430 \u0441\u0432\u044F\u0437\u044C\u043F\u043E\u0442\u0438\u043F\u0443 \u0441\u0432\u044F\u0437\u044C\u043F\u043E\u0442\u0438\u043F\u0443\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u0441\u0435\u0440\u0438\u0430\u043B\u0438\u0437\u0430\u0442\u043E\u0440xdto \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043A\u0430\u0442\u043A\u043B\u0438\u0435\u043D\u0442\u0430windows \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043A\u0430\u0442\u043A\u043B\u0438\u0435\u043D\u0442\u0430\u0444\u0430\u0439\u043B \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043A\u0430\u0442\u043A\u0440\u0438\u043F\u0442\u043E\u0433\u0440\u0430\u0444\u0438\u0438 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043A\u0430\u0442\u044B\u0443\u0434\u043E\u0441\u0442\u043E\u0432\u0435\u0440\u044F\u044E\u0449\u0438\u0445\u0446\u0435\u043D\u0442\u0440\u043E\u0432windows \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043A\u0430\u0442\u044B\u0443\u0434\u043E\u0441\u0442\u043E\u0432\u0435\u0440\u044F\u044E\u0449\u0438\u0445\u0446\u0435\u043D\u0442\u0440\u043E\u0432\u0444\u0430\u0439\u043B \u0441\u0436\u0430\u0442\u0438\u0435\u0434\u0430\u043D\u043D\u044B\u0445 \u0441\u0438\u0441\u0442\u0435\u043C\u043D\u0430\u044F\u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044F \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044E \u0441\u043E\u0447\u0435\u0442\u0430\u043D\u0438\u0435\u043A\u043B\u0430\u0432\u0438\u0448 \u0441\u0440\u0430\u0432\u043D\u0435\u043D\u0438\u0435\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0439 \u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u0430\u044F\u0434\u0430\u0442\u0430\u043D\u0430\u0447\u0430\u043B\u0430 \u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u044B\u0439\u043F\u0435\u0440\u0438\u043E\u0434 \u0441\u0445\u0435\u043C\u0430xml \u0441\u0445\u0435\u043C\u0430\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 \u0442\u0430\u0431\u043B\u0438\u0447\u043D\u044B\u0439\u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442 \u0442\u0435\u043A\u0441\u0442\u043E\u0432\u044B\u0439\u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442 \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043C\u043E\u0435\u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0435 \u0442\u0438\u043F\u0434\u0430\u043D\u043D\u044B\u0445xml \u0443\u043D\u0438\u043A\u0430\u043B\u044C\u043D\u044B\u0439\u0438\u0434\u0435\u043D\u0442\u0438\u0444\u0438\u043A\u0430\u0442\u043E\u0440 \u0444\u0430\u0431\u0440\u0438\u043A\u0430xdto \u0444\u0430\u0439\u043B \u0444\u0430\u0439\u043B\u043E\u0432\u044B\u0439\u043F\u043E\u0442\u043E\u043A \u0444\u0430\u0441\u0435\u0442\u0434\u043B\u0438\u043D\u044Bxs \u0444\u0430\u0441\u0435\u0442\u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u0430\u0440\u0430\u0437\u0440\u044F\u0434\u043E\u0432\u0434\u0440\u043E\u0431\u043D\u043E\u0439\u0447\u0430\u0441\u0442\u0438xs \u0444\u0430\u0441\u0435\u0442\u043C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u043E\u0433\u043E\u0432\u043A\u043B\u044E\u0447\u0430\u044E\u0449\u0435\u0433\u043E\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044Fxs \u0444\u0430\u0441\u0435\u0442\u043C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u043E\u0433\u043E\u0438\u0441\u043A\u043B\u044E\u0447\u0430\u044E\u0449\u0435\u0433\u043E\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044Fxs \u0444\u0430\u0441\u0435\u0442\u043C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u043E\u0439\u0434\u043B\u0438\u043D\u044Bxs \u0444\u0430\u0441\u0435\u0442\u043C\u0438\u043D\u0438\u043C\u0430\u043B\u044C\u043D\u043E\u0433\u043E\u0432\u043A\u043B\u044E\u0447\u0430\u044E\u0449\u0435\u0433\u043E\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044Fxs \u0444\u0430\u0441\u0435\u0442\u043C\u0438\u043D\u0438\u043C\u0430\u043B\u044C\u043D\u043E\u0433\u043E\u0438\u0441\u043A\u043B\u044E\u0447\u0430\u044E\u0449\u0435\u0433\u043E\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044Fxs \u0444\u0430\u0441\u0435\u0442\u043C\u0438\u043D\u0438\u043C\u0430\u043B\u044C\u043D\u043E\u0439\u0434\u043B\u0438\u043D\u044Bxs \u0444\u0430\u0441\u0435\u0442\u043E\u0431\u0440\u0430\u0437\u0446\u0430xs \u0444\u0430\u0441\u0435\u0442\u043E\u0431\u0449\u0435\u0433\u043E\u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u0430\u0440\u0430\u0437\u0440\u044F\u0434\u043E\u0432xs \u0444\u0430\u0441\u0435\u0442\u043F\u0435\u0440\u0435\u0447\u0438\u0441\u043B\u0435\u043D\u0438\u044Fxs \u0444\u0430\u0441\u0435\u0442\u043F\u0440\u043E\u0431\u0435\u043B\u044C\u043D\u044B\u0445\u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432xs \u0444\u0438\u043B\u044C\u0442\u0440\u0443\u0437\u043B\u043E\u0432dom \u0444\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u0430\u044F\u0441\u0442\u0440\u043E\u043A\u0430 \u0444\u043E\u0440\u043C\u0430\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0439\u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442 \u0444\u0440\u0430\u0433\u043C\u0435\u043D\u0442xs \u0445\u0435\u0448\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435\u0434\u0430\u043D\u043D\u044B\u0445 \u0445\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0435\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u0446\u0432\u0435\u0442 \u0447\u0442\u0435\u043D\u0438\u0435fastinfoset \u0447\u0442\u0435\u043D\u0438\u0435html \u0447\u0442\u0435\u043D\u0438\u0435json \u0447\u0442\u0435\u043D\u0438\u0435xml \u0447\u0442\u0435\u043D\u0438\u0435zip\u0444\u0430\u0439\u043B\u0430 \u0447\u0442\u0435\u043D\u0438\u0435\u0434\u0430\u043D\u043D\u044B\u0445 \u0447\u0442\u0435\u043D\u0438\u0435\u0442\u0435\u043A\u0441\u0442\u0430 \u0447\u0442\u0435\u043D\u0438\u0435\u0443\u0437\u043B\u043E\u0432dom \u0448\u0440\u0438\u0444\u0442 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u0430\u043A\u043E\u043C\u043F\u043E\u043D\u043E\u0432\u043A\u0438\u0434\u0430\u043D\u043D\u044B\u0445 "; + // v8 универсальные коллекции значений ==> type + var v8_universal_collection = "comsafearray \u0434\u0435\u0440\u0435\u0432\u043E\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0439 \u043C\u0430\u0441\u0441\u0438\u0432 \u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u0441\u043F\u0438\u0441\u043E\u043A\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0439 \u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0430 \u0442\u0430\u0431\u043B\u0438\u0446\u0430\u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0439 \u0444\u0438\u043A\u0441\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u0430\u044F\u0441\u0442\u0440\u0443\u043A\u0442\u0443\u0440\u0430 \u0444\u0438\u043A\u0441\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u043E\u0435\u0441\u043E\u043E\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u0444\u0438\u043A\u0441\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0439\u043C\u0430\u0441\u0441\u0438\u0432 "; + // type : встроенные типы + var TYPE = v8_shared_object + v8_universal_collection; + // literal : примитивные типы + var LITERAL = "null \u0438\u0441\u0442\u0438\u043D\u0430 \u043B\u043E\u0436\u044C \u043D\u0435\u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u043E"; + // number : числа + var NUMBERS = hljs.inherit(hljs.NUMBER_MODE); + // string : строки + var STRINGS = { + className: 'string', + begin: '"|\\|', + end: '"|$', + contains: [ + { + begin: '""' + } + ] + }; + // number : даты + var DATE = { + begin: "'", + end: "'", + excludeBegin: true, + excludeEnd: true, + contains: [ + { + className: 'number', + begin: '\\d{4}([\\.\\\\/:-]?\\d{2}){0,5}' + } + ] + }; + // comment : комментарии + var COMMENTS = hljs.inherit(hljs.C_LINE_COMMENT_MODE); + // meta : инструкции препроцессора, директивы компиляции + var META = { + className: 'meta', + begin: '#|&', + end: '$', + keywords: { + $pattern: UNDERSCORE_IDENT_RE, + 'meta-keyword': KEYWORD + METAKEYWORD + }, + contains: [ + COMMENTS + ] + }; + // symbol : метка goto + var SYMBOL = { + className: 'symbol', + begin: '~', + end: ';|:', + excludeEnd: true + }; + // function : объявление процедур и функций + var FUNCTION = { + className: 'function', + variants: [ + { + begin: "\u043F\u0440\u043E\u0446\u0435\u0434\u0443\u0440\u0430|\u0444\u0443\u043D\u043A\u0446\u0438\u044F", + end: '\\)', + keywords: "\u043F\u0440\u043E\u0446\u0435\u0434\u0443\u0440\u0430 \u0444\u0443\u043D\u043A\u0446\u0438\u044F" + }, + { + begin: "\u043A\u043E\u043D\u0435\u0446\u043F\u0440\u043E\u0446\u0435\u0434\u0443\u0440\u044B|\u043A\u043E\u043D\u0435\u0446\u0444\u0443\u043D\u043A\u0446\u0438\u0438", + keywords: "\u043A\u043E\u043D\u0435\u0446\u043F\u0440\u043E\u0446\u0435\u0434\u0443\u0440\u044B \u043A\u043E\u043D\u0435\u0446\u0444\u0443\u043D\u043A\u0446\u0438\u0438" + } + ], + contains: [ + { + begin: '\\(', + end: '\\)', + endsParent: true, + contains: [ + { + className: 'params', + begin: UNDERSCORE_IDENT_RE, + end: ',', + excludeEnd: true, + endsWithParent: true, + keywords: { + $pattern: UNDERSCORE_IDENT_RE, + keyword: "\u0437\u043D\u0430\u0447", + literal: LITERAL + }, + contains: [ + NUMBERS, + STRINGS, + DATE + ] + }, + COMMENTS + ] + }, + hljs.inherit(hljs.TITLE_MODE, { + begin: UNDERSCORE_IDENT_RE + }) + ] + }; + return { + name: '1C:Enterprise', + case_insensitive: true, + keywords: { + $pattern: UNDERSCORE_IDENT_RE, + keyword: KEYWORD, + built_in: BUILTIN, + class: CLASS, + type: TYPE, + literal: LITERAL + }, + contains: [ + META, + FUNCTION, + COMMENTS, + SYMBOL, + NUMBERS, + STRINGS, + DATE + ] + }; +} +module.exports = $510de111102fdc7f$var$_1c; + +}); + +parcelRegister("doGEE", function(module, exports) { +/* +Language: Augmented Backus-Naur Form +Author: Alex McKibben +Website: https://tools.ietf.org/html/rfc5234 +*/ /** @type LanguageFn */ function $9c0e9a902c92408d$var$abnf(hljs) { + const regexes = { + ruleDeclaration: "^[a-zA-Z][a-zA-Z0-9-]*", + unexpectedChars: "[!@#$^&',?+~`|:]" + }; + const keywords = [ + "ALPHA", + "BIT", + "CHAR", + "CR", + "CRLF", + "CTL", + "DIGIT", + "DQUOTE", + "HEXDIG", + "HTAB", + "LF", + "LWSP", + "OCTET", + "SP", + "VCHAR", + "WSP" + ]; + const commentMode = hljs.COMMENT(";", "$"); + const terminalBinaryMode = { + className: "symbol", + begin: /%b[0-1]+(-[0-1]+|(\.[0-1]+)+){0,1}/ + }; + const terminalDecimalMode = { + className: "symbol", + begin: /%d[0-9]+(-[0-9]+|(\.[0-9]+)+){0,1}/ + }; + const terminalHexadecimalMode = { + className: "symbol", + begin: /%x[0-9A-F]+(-[0-9A-F]+|(\.[0-9A-F]+)+){0,1}/ + }; + const caseSensitivityIndicatorMode = { + className: "symbol", + begin: /%[si]/ + }; + const ruleDeclarationMode = { + className: "attribute", + begin: regexes.ruleDeclaration + '(?=\\s*=)' + }; + return { + name: 'Augmented Backus-Naur Form', + illegal: regexes.unexpectedChars, + keywords: keywords.join(" "), + contains: [ + ruleDeclarationMode, + commentMode, + terminalBinaryMode, + terminalDecimalMode, + terminalHexadecimalMode, + caseSensitivityIndicatorMode, + hljs.QUOTE_STRING_MODE, + hljs.NUMBER_MODE + ] + }; +} +module.exports = $9c0e9a902c92408d$var$abnf; + +}); + +parcelRegister("2qrWF", function(module, exports) { +/* + Language: Apache Access Log + Author: Oleg Efimov + Description: Apache/Nginx Access Logs + Website: https://httpd.apache.org/docs/2.4/logs.html#accesslog + */ /** @type LanguageFn */ function $1c43afd0745fc7ae$var$accesslog(hljs) { + // https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods + const HTTP_VERBS = [ + "GET", + "POST", + "HEAD", + "PUT", + "DELETE", + "CONNECT", + "OPTIONS", + "PATCH", + "TRACE" + ]; + return { + name: 'Apache Access Log', + contains: [ + // IP + { + className: 'number', + begin: '^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b', + relevance: 5 + }, + // Other numbers + { + className: 'number', + begin: '\\b\\d+\\b', + relevance: 0 + }, + // Requests + { + className: 'string', + begin: '"(' + HTTP_VERBS.join("|") + ')', + end: '"', + keywords: HTTP_VERBS.join(" "), + illegal: '\\n', + relevance: 5, + contains: [ + { + begin: 'HTTP/[12]\\.\\d', + relevance: 5 + } + ] + }, + // Dates + { + className: 'string', + // dates must have a certain length, this prevents matching + // simple array accesses a[123] and [] and other common patterns + // found in other languages + begin: /\[\d[^\]\n]{8,}\]/, + illegal: '\\n', + relevance: 1 + }, + { + className: 'string', + begin: /\[/, + end: /\]/, + illegal: '\\n', + relevance: 0 + }, + // User agent / relevance boost + { + className: 'string', + begin: '"Mozilla/\\d\\.\\d \\(', + end: '"', + illegal: '\\n', + relevance: 3 + }, + // Strings + { + className: 'string', + begin: '"', + end: '"', + illegal: '\\n', + relevance: 0 + } + ] + }; +} +module.exports = $1c43afd0745fc7ae$var$accesslog; + +}); + +parcelRegister("te5Iq", function(module, exports) { +/* +Language: ActionScript +Author: Alexander Myadzel +Category: scripting +*/ /** @type LanguageFn */ function $057da3c396032d4b$var$actionscript(hljs) { + const IDENT_RE = '[a-zA-Z_$][a-zA-Z0-9_$]*'; + const IDENT_FUNC_RETURN_TYPE_RE = '([*]|[a-zA-Z_$][a-zA-Z0-9_$]*)'; + const AS3_REST_ARG_MODE = { + className: 'rest_arg', + begin: '[.]{3}', + end: IDENT_RE, + relevance: 10 + }; + return { + name: 'ActionScript', + aliases: [ + 'as' + ], + keywords: { + keyword: "as break case catch class const continue default delete do dynamic each else extends final finally for function get if implements import in include instanceof interface internal is namespace native new override package private protected public return set static super switch this throw try typeof use var void while with", + literal: 'true false null undefined' + }, + contains: [ + hljs.APOS_STRING_MODE, + hljs.QUOTE_STRING_MODE, + hljs.C_LINE_COMMENT_MODE, + hljs.C_BLOCK_COMMENT_MODE, + hljs.C_NUMBER_MODE, + { + className: 'class', + beginKeywords: 'package', + end: /\{/, + contains: [ + hljs.TITLE_MODE + ] + }, + { + className: 'class', + beginKeywords: 'class interface', + end: /\{/, + excludeEnd: true, + contains: [ + { + beginKeywords: 'extends implements' + }, + hljs.TITLE_MODE + ] + }, + { + className: 'meta', + beginKeywords: 'import include', + end: ';', + keywords: { + 'meta-keyword': 'import include' + } + }, + { + className: 'function', + beginKeywords: 'function', + end: '[{;]', + excludeEnd: true, + illegal: '\\S', + contains: [ + hljs.TITLE_MODE, + { + className: 'params', + begin: '\\(', + end: '\\)', + contains: [ + hljs.APOS_STRING_MODE, + hljs.QUOTE_STRING_MODE, + hljs.C_LINE_COMMENT_MODE, + hljs.C_BLOCK_COMMENT_MODE, + AS3_REST_ARG_MODE + ] + }, + { + begin: ':\\s*' + IDENT_FUNC_RETURN_TYPE_RE + } + ] + }, + hljs.METHOD_GUARD + ], + illegal: /#/ + }; +} +module.exports = $057da3c396032d4b$var$actionscript; + +}); + +parcelRegister("9aZJW", function(module, exports) { +/* +Language: Ada +Author: Lars Schulna +Description: Ada is a general-purpose programming language that has great support for saftey critical and real-time applications. + It has been developed by the DoD and thus has been used in military and safety-critical applications (like civil aviation). + The first version appeared in the 80s, but it's still actively developed today with + the newest standard being Ada2012. +*/ // We try to support full Ada2012 +// +// We highlight all appearances of types, keywords, literals (string, char, number, bool) +// and titles (user defined function/procedure/package) +// CSS classes are set accordingly +// +// Languages causing problems for language detection: +// xml (broken by Foo : Bar type), elm (broken by Foo : Bar type), vbscript-html (broken by body keyword) +// sql (ada default.txt has a lot of sql keywords) +/** @type LanguageFn */ function $6ae4f082f6930f74$var$ada(hljs) { + // Regular expression for Ada numeric literals. + // stolen form the VHDL highlighter + // Decimal literal: + const INTEGER_RE = '\\d(_|\\d)*'; + const EXPONENT_RE = '[eE][-+]?' + INTEGER_RE; + const DECIMAL_LITERAL_RE = INTEGER_RE + '(\\.' + INTEGER_RE + ')?' + '(' + EXPONENT_RE + ')?'; + // Based literal: + const BASED_INTEGER_RE = '\\w+'; + const BASED_LITERAL_RE = INTEGER_RE + '#' + BASED_INTEGER_RE + '(\\.' + BASED_INTEGER_RE + ')?' + '#' + '(' + EXPONENT_RE + ')?'; + const NUMBER_RE = '\\b(' + BASED_LITERAL_RE + '|' + DECIMAL_LITERAL_RE + ')'; + // Identifier regex + const ID_REGEX = '[A-Za-z](_?[A-Za-z0-9.])*'; + // bad chars, only allowed in literals + const BAD_CHARS = `[]\\{\\}%#'"`; + // Ada doesn't have block comments, only line comments + const COMMENTS = hljs.COMMENT('--', '$'); + // variable declarations of the form + // Foo : Bar := Baz; + // where only Bar will be highlighted + const VAR_DECLS = { + // TODO: These spaces are not required by the Ada syntax + // however, I have yet to see handwritten Ada code where + // someone does not put spaces around : + begin: '\\s+:\\s+', + end: '\\s*(:=|;|\\)|=>|$)', + // endsWithParent: true, + // returnBegin: true, + illegal: BAD_CHARS, + contains: [ + { + // workaround to avoid highlighting + // named loops and declare blocks + beginKeywords: 'loop for declare others', + endsParent: true + }, + { + // properly highlight all modifiers + className: 'keyword', + beginKeywords: 'not null constant access function procedure in out aliased exception' + }, + { + className: 'type', + begin: ID_REGEX, + endsParent: true, + relevance: 0 + } + ] + }; + return { + name: 'Ada', + case_insensitive: true, + keywords: { + keyword: "abort else new return abs elsif not reverse abstract end accept entry select access exception of separate aliased exit or some all others subtype and for out synchronized array function overriding at tagged generic package task begin goto pragma terminate body private then if procedure type case in protected constant interface is raise use declare range delay limited record when delta loop rem while digits renames with do mod requeue xor", + literal: 'True False' + }, + contains: [ + COMMENTS, + // strings "foobar" + { + className: 'string', + begin: /"/, + end: /"/, + contains: [ + { + begin: /""/, + relevance: 0 + } + ] + }, + // characters '' + { + // character literals always contain one char + className: 'string', + begin: /'.'/ + }, + { + // number literals + className: 'number', + begin: NUMBER_RE, + relevance: 0 + }, + { + // Attributes + className: 'symbol', + begin: "'" + ID_REGEX + }, + { + // package definition, maybe inside generic + className: 'title', + begin: '(\\bwith\\s+)?(\\bprivate\\s+)?\\bpackage\\s+(\\bbody\\s+)?', + end: '(is|$)', + keywords: 'package body', + excludeBegin: true, + excludeEnd: true, + illegal: BAD_CHARS + }, + { + // function/procedure declaration/definition + // maybe inside generic + begin: '(\\b(with|overriding)\\s+)?\\b(function|procedure)\\s+', + end: '(\\bis|\\bwith|\\brenames|\\)\\s*;)', + keywords: 'overriding function procedure with is renames return', + // we need to re-match the 'function' keyword, so that + // the title mode below matches only exactly once + returnBegin: true, + contains: [ + COMMENTS, + { + // name of the function/procedure + className: 'title', + begin: '(\\bwith\\s+)?\\b(function|procedure)\\s+', + end: '(\\(|\\s+|$)', + excludeBegin: true, + excludeEnd: true, + illegal: BAD_CHARS + }, + // 'self' + // // parameter types + VAR_DECLS, + { + // return type + className: 'type', + begin: '\\breturn\\s+', + end: '(\\s+|;|$)', + keywords: 'return', + excludeBegin: true, + excludeEnd: true, + // we are done with functions + endsParent: true, + illegal: BAD_CHARS + } + ] + }, + { + // new type declarations + // maybe inside generic + className: 'type', + begin: '\\b(sub)?type\\s+', + end: '\\s+', + keywords: 'type', + excludeBegin: true, + illegal: BAD_CHARS + }, + // see comment above the definition + VAR_DECLS + ] + }; +} +module.exports = $6ae4f082f6930f74$var$ada; + +}); + +parcelRegister("l9dCP", function(module, exports) { +/* +Language: AngelScript +Author: Melissa Geels +Category: scripting +Website: https://www.angelcode.com/angelscript/ +*/ /** @type LanguageFn */ function $f65501f2cf238b98$var$angelscript(hljs) { + var builtInTypeMode = { + className: 'built_in', + begin: '\\b(void|bool|int|int8|int16|int32|int64|uint|uint8|uint16|uint32|uint64|string|ref|array|double|float|auto|dictionary)' + }; + var objectHandleMode = { + className: 'symbol', + begin: '[a-zA-Z0-9_]+@' + }; + var genericMode = { + className: 'keyword', + begin: '<', + end: '>', + contains: [ + builtInTypeMode, + objectHandleMode + ] + }; + builtInTypeMode.contains = [ + genericMode + ]; + objectHandleMode.contains = [ + genericMode + ]; + return { + name: 'AngelScript', + aliases: [ + 'asc' + ], + keywords: "for in|0 break continue while do|0 return if else case switch namespace is cast or and xor not get|0 in inout|10 out override set|0 private public const default|0 final shared external mixin|10 enum typedef funcdef this super import from interface abstract|0 try catch protected explicit property", + // avoid close detection with C# and JS + illegal: '(^using\\s+[A-Za-z0-9_\\.]+;$|\\bfunction\\s*[^\\(])', + contains: [ + { + className: 'string', + begin: '\'', + end: '\'', + illegal: '\\n', + contains: [ + hljs.BACKSLASH_ESCAPE + ], + relevance: 0 + }, + // """heredoc strings""" + { + className: 'string', + begin: '"""', + end: '"""' + }, + { + className: 'string', + begin: '"', + end: '"', + illegal: '\\n', + contains: [ + hljs.BACKSLASH_ESCAPE + ], + relevance: 0 + }, + hljs.C_LINE_COMMENT_MODE, + hljs.C_BLOCK_COMMENT_MODE, + { + className: 'string', + begin: '^\\s*\\[', + end: '\\]' + }, + { + beginKeywords: 'interface namespace', + end: /\{/, + illegal: '[;.\\-]', + contains: [ + { + className: 'symbol', + begin: '[a-zA-Z0-9_]+' + } + ] + }, + { + beginKeywords: 'class', + end: /\{/, + illegal: '[;.\\-]', + contains: [ + { + className: 'symbol', + begin: '[a-zA-Z0-9_]+', + contains: [ + { + begin: '[:,]\\s*', + contains: [ + { + className: 'symbol', + begin: '[a-zA-Z0-9_]+' + } + ] + } + ] + } + ] + }, + builtInTypeMode, + objectHandleMode, + { + className: 'literal', + begin: '\\b(null|true|false)' + }, + { + className: 'number', + relevance: 0, + begin: '(-?)(\\b0[xXbBoOdD][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?f?|\\.\\d+f?)([eE][-+]?\\d+f?)?)' + } + ] + }; +} +module.exports = $f65501f2cf238b98$var$angelscript; + +}); + +parcelRegister("d1PoR", function(module, exports) { +/* +Language: Apache config +Author: Ruslan Keba +Contributors: Ivan Sagalaev +Website: https://httpd.apache.org +Description: language definition for Apache configuration files (httpd.conf & .htaccess) +Category: common, config +*/ /** @type LanguageFn */ function $97c33d58af1d8618$var$apache(hljs) { + const NUMBER_REF = { + className: 'number', + begin: '[\\$%]\\d+' + }; + const NUMBER = { + className: 'number', + begin: '\\d+' + }; + const IP_ADDRESS = { + className: "number", + begin: '\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?' + }; + const PORT_NUMBER = { + className: "number", + begin: ":\\d{1,5}" + }; + return { + name: 'Apache config', + aliases: [ + 'apacheconf' + ], + case_insensitive: true, + contains: [ + hljs.HASH_COMMENT_MODE, + { + className: 'section', + begin: '', + contains: [ + IP_ADDRESS, + PORT_NUMBER, + // low relevance prevents us from claming XML/HTML where this rule would + // match strings inside of XML tags + hljs.inherit(hljs.QUOTE_STRING_MODE, { + relevance: 0 + }) + ] + }, + { + className: 'attribute', + begin: /\w+/, + relevance: 0, + // keywords aren’t needed for highlighting per se, they only boost relevance + // for a very generally defined mode (starts with a word, ends with line-end + keywords: { + nomarkup: "order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername" + }, + starts: { + end: /$/, + relevance: 0, + keywords: { + literal: 'on off all deny allow' + }, + contains: [ + { + className: 'meta', + begin: '\\s\\[', + end: '\\]$' + }, + { + className: 'variable', + begin: '[\\$%]\\{', + end: '\\}', + contains: [ + 'self', + NUMBER_REF + ] + }, + IP_ADDRESS, + NUMBER, + hljs.QUOTE_STRING_MODE + ] + } + } + ], + illegal: /\S/ + }; +} +module.exports = $97c33d58af1d8618$var$apache; + +}); + +parcelRegister("9L2ag", function(module, exports) { +/* +Language: AppleScript +Authors: Nathan Grigg , Dr. Drang +Category: scripting +Website: https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/introduction/ASLR_intro.html +*/ /** @type LanguageFn */ function $71aa2eada5e4ecbb$var$applescript(hljs) { + const STRING = hljs.inherit(hljs.QUOTE_STRING_MODE, { + illegal: '' + }); + const PARAMS = { + className: 'params', + begin: '\\(', + end: '\\)', + contains: [ + 'self', + hljs.C_NUMBER_MODE, + STRING + ] + }; + const COMMENT_MODE_1 = hljs.COMMENT('--', '$'); + const COMMENT_MODE_2 = hljs.COMMENT('\\(\\*', '\\*\\)', { + contains: [ + 'self', + COMMENT_MODE_1 + ] + }); + const COMMENTS = [ + COMMENT_MODE_1, + COMMENT_MODE_2, + hljs.HASH_COMMENT_MODE + ]; + return { + name: 'AppleScript', + aliases: [ + 'osascript' + ], + keywords: { + keyword: "about above after against and around as at back before beginning behind below beneath beside between but by considering contain contains continue copy div does eighth else end equal equals error every exit fifth first for fourth from front get given global if ignoring in into is it its last local me middle mod my ninth not of on onto or over prop property put ref reference repeat returning script second set seventh since sixth some tell tenth that the|0 then third through thru timeout times to transaction try until where while whose with without", + literal: 'AppleScript false linefeed return pi quote result space tab true', + built_in: "alias application boolean class constant date file integer list number real record string text activate beep count delay launch log offset read round run say summarize write character characters contents day frontmost id item length month name paragraph paragraphs rest reverse running time version weekday word words year" + }, + contains: [ + STRING, + hljs.C_NUMBER_MODE, + { + className: 'built_in', + begin: "\\b(clipboard info|the clipboard|info for|list (disks|folder)|mount volume|path to|(close|open for) access|(get|set) eof|current date|do shell script|get volume settings|random number|set volume|system attribute|system info|time to GMT|(load|run|store) script|scripting components|ASCII (character|number)|localized string|choose (application|color|file|file name|folder|from list|remote application|URL)|display (alert|dialog))\\b|^\\s*return\\b" + }, + { + className: 'literal', + begin: '\\b(text item delimiters|current application|missing value)\\b' + }, + { + className: 'keyword', + begin: "\\b(apart from|aside from|instead of|out of|greater than|isn't|(doesn't|does not) (equal|come before|come after|contain)|(greater|less) than( or equal)?|(starts?|ends|begins?) with|contained by|comes (before|after)|a (ref|reference)|POSIX file|POSIX path|(date|time) string|quoted form)\\b" + }, + { + beginKeywords: 'on', + illegal: '[${=;\\n]', + contains: [ + hljs.UNDERSCORE_TITLE_MODE, + PARAMS + ] + } + ].concat(COMMENTS), + illegal: '//|->|=>|\\[\\[' + }; +} +module.exports = $71aa2eada5e4ecbb$var$applescript; + +}); + +parcelRegister("atu6p", function(module, exports) { +/* + Language: ArcGIS Arcade + Category: scripting + Author: John Foster + Website: https://developers.arcgis.com/arcade/ + Description: ArcGIS Arcade is an expression language used in many Esri ArcGIS products such as Pro, Online, Server, Runtime, JavaScript, and Python +*/ /** @type LanguageFn */ function $7a03f6843aa1d6f8$var$arcade(hljs) { + const IDENT_RE = '[A-Za-z_][0-9A-Za-z_]*'; + const KEYWORDS = { + keyword: 'if for while var new function do return void else break', + literal: 'BackSlash DoubleQuote false ForwardSlash Infinity NaN NewLine null PI SingleQuote Tab TextFormatting true undefined', + built_in: "Abs Acos Angle Attachments Area AreaGeodetic Asin Atan Atan2 Average Bearing Boolean Buffer BufferGeodetic Ceil Centroid Clip Console Constrain Contains Cos Count Crosses Cut Date DateAdd DateDiff Day Decode DefaultValue Dictionary Difference Disjoint Distance DistanceGeodetic Distinct DomainCode DomainName Equals Exp Extent Feature FeatureSet FeatureSetByAssociation FeatureSetById FeatureSetByPortalItem FeatureSetByRelationshipName FeatureSetByTitle FeatureSetByUrl Filter First Floor Geometry GroupBy Guid HasKey Hour IIf IndexOf Intersection Intersects IsEmpty IsNan IsSelfIntersecting Length LengthGeodetic Log Max Mean Millisecond Min Minute Month MultiPartToSinglePart Multipoint NextSequenceValue Now Number OrderBy Overlaps Point Polygon Polyline Portal Pow Random Relate Reverse RingIsClockWise Round Second SetGeometry Sin Sort Sqrt Stdev Sum SymmetricDifference Tan Text Timestamp Today ToLocal Top Touches ToUTC TrackCurrentTime TrackGeometryWindow TrackIndex TrackStartTime TrackWindow TypeOf Union UrlEncode Variance Weekday When Within Year " + }; + const SYMBOL = { + className: 'symbol', + begin: '\\$[datastore|feature|layer|map|measure|sourcefeature|sourcelayer|targetfeature|targetlayer|value|view]+' + }; + const NUMBER = { + className: 'number', + variants: [ + { + begin: '\\b(0[bB][01]+)' + }, + { + begin: '\\b(0[oO][0-7]+)' + }, + { + begin: hljs.C_NUMBER_RE + } + ], + relevance: 0 + }; + const SUBST = { + className: 'subst', + begin: '\\$\\{', + end: '\\}', + keywords: KEYWORDS, + contains: [] // defined later + }; + const TEMPLATE_STRING = { + className: 'string', + begin: '`', + end: '`', + contains: [ + hljs.BACKSLASH_ESCAPE, + SUBST + ] + }; + SUBST.contains = [ + hljs.APOS_STRING_MODE, + hljs.QUOTE_STRING_MODE, + TEMPLATE_STRING, + NUMBER, + hljs.REGEXP_MODE + ]; + const PARAMS_CONTAINS = SUBST.contains.concat([ + hljs.C_BLOCK_COMMENT_MODE, + hljs.C_LINE_COMMENT_MODE + ]); + return { + name: 'ArcGIS Arcade', + aliases: [ + 'arcade' + ], + keywords: KEYWORDS, + contains: [ + hljs.APOS_STRING_MODE, + hljs.QUOTE_STRING_MODE, + TEMPLATE_STRING, + hljs.C_LINE_COMMENT_MODE, + hljs.C_BLOCK_COMMENT_MODE, + SYMBOL, + NUMBER, + { + begin: /[{,]\s*/, + relevance: 0, + contains: [ + { + begin: IDENT_RE + '\\s*:', + returnBegin: true, + relevance: 0, + contains: [ + { + className: 'attr', + begin: IDENT_RE, + relevance: 0 + } + ] + } + ] + }, + { + begin: '(' + hljs.RE_STARTERS_RE + '|\\b(return)\\b)\\s*', + keywords: 'return', + contains: [ + hljs.C_LINE_COMMENT_MODE, + hljs.C_BLOCK_COMMENT_MODE, + hljs.REGEXP_MODE, + { + className: 'function', + begin: '(\\(.*?\\)|' + IDENT_RE + ')\\s*=>', + returnBegin: true, + end: '\\s*=>', + contains: [ + { + className: 'params', + variants: [ + { + begin: IDENT_RE + }, + { + begin: /\(\s*\)/ + }, + { + begin: /\(/, + end: /\)/, + excludeBegin: true, + excludeEnd: true, + keywords: KEYWORDS, + contains: PARAMS_CONTAINS + } + ] + } + ] + } + ], + relevance: 0 + }, + { + className: 'function', + beginKeywords: 'function', + end: /\{/, + excludeEnd: true, + contains: [ + hljs.inherit(hljs.TITLE_MODE, { + begin: IDENT_RE + }), + { + className: 'params', + begin: /\(/, + end: /\)/, + excludeBegin: true, + excludeEnd: true, + contains: PARAMS_CONTAINS + } + ], + illegal: /\[|%/ + }, + { + begin: /\$[(.]/ + } + ], + illegal: /#(?!!)/ + }; +} +module.exports = $7a03f6843aa1d6f8$var$arcade; + +}); + +parcelRegister("gYQ45", function(module, exports) { +/** + * @param {string} value + * @returns {RegExp} + * */ /** + * @param {RegExp | string } re + * @returns {string} + */ function $c5caa2f394d41d81$var$source(re) { + if (!re) return null; + if (typeof re === "string") return re; + return re.source; +} +/** + * @param {RegExp | string } re + * @returns {string} + */ function $c5caa2f394d41d81$var$optional(re) { + return $c5caa2f394d41d81$var$concat('(', re, ')?'); +} +/** + * @param {...(RegExp | string) } args + * @returns {string} + */ function $c5caa2f394d41d81$var$concat(...args) { + const joined = args.map((x)=>$c5caa2f394d41d81$var$source(x)).join(""); + return joined; +} +/* +Language: C-like foundation grammar for C/C++ grammars +Author: Ivan Sagalaev +Contributors: Evgeny Stepanischev , Zaven Muradyan , Roel Deckers , Sam Wu , Jordi Petit , Pieter Vantorre , Google Inc. (David Benjamin) +*/ /** @type LanguageFn */ function $c5caa2f394d41d81$var$cLike(hljs) { + // added for historic reasons because `hljs.C_LINE_COMMENT_MODE` does + // not include such support nor can we be sure all the grammars depending + // on it would desire this behavior + const C_LINE_COMMENT_MODE = hljs.COMMENT('//', '$', { + contains: [ + { + begin: /\\\n/ + } + ] + }); + const DECLTYPE_AUTO_RE = 'decltype\\(auto\\)'; + const NAMESPACE_RE = '[a-zA-Z_]\\w*::'; + const TEMPLATE_ARGUMENT_RE = '<[^<>]+>'; + const FUNCTION_TYPE_RE = '(' + DECLTYPE_AUTO_RE + '|' + $c5caa2f394d41d81$var$optional(NAMESPACE_RE) + '[a-zA-Z_]\\w*' + $c5caa2f394d41d81$var$optional(TEMPLATE_ARGUMENT_RE) + ')'; + const CPP_PRIMITIVE_TYPES = { + className: 'keyword', + begin: '\\b[a-z\\d_]*_t\\b' + }; + // https://en.cppreference.com/w/cpp/language/escape + // \\ \x \xFF \u2837 \u00323747 \374 + const CHARACTER_ESCAPES = '\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)'; + const STRINGS = { + className: 'string', + variants: [ + { + begin: '(u8?|U|L)?"', + end: '"', + illegal: '\\n', + contains: [ + hljs.BACKSLASH_ESCAPE + ] + }, + { + begin: '(u8?|U|L)?\'(' + CHARACTER_ESCAPES + "|.)", + end: '\'', + illegal: '.' + }, + hljs.END_SAME_AS_BEGIN({ + begin: /(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/, + end: /\)([^()\\ ]{0,16})"/ + }) + ] + }; + const NUMBERS = { + className: 'number', + variants: [ + { + begin: '\\b(0b[01\']+)' + }, + { + begin: '(-?)\\b([\\d\']+(\\.[\\d\']*)?|\\.[\\d\']+)(u|U|l|L|ul|UL|f|F|b|B)' + }, + { + begin: '(-?)(\\b0[xX][a-fA-F0-9\']+|(\\b[\\d\']+(\\.[\\d\']*)?|\\.[\\d\']+)([eE][-+]?[\\d\']+)?)' + } + ], + relevance: 0 + }; + const PREPROCESSOR = { + className: 'meta', + begin: /#\s*[a-z]+\b/, + end: /$/, + keywords: { + 'meta-keyword': "if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include" + }, + contains: [ + { + begin: /\\\n/, + relevance: 0 + }, + hljs.inherit(STRINGS, { + className: 'meta-string' + }), + { + className: 'meta-string', + begin: /<.*?>/, + end: /$/, + illegal: '\\n' + }, + C_LINE_COMMENT_MODE, + hljs.C_BLOCK_COMMENT_MODE + ] + }; + const TITLE_MODE = { + className: 'title', + begin: $c5caa2f394d41d81$var$optional(NAMESPACE_RE) + hljs.IDENT_RE, + relevance: 0 + }; + const FUNCTION_TITLE = $c5caa2f394d41d81$var$optional(NAMESPACE_RE) + hljs.IDENT_RE + '\\s*\\('; + const CPP_KEYWORDS = { + keyword: "int float while private char char8_t char16_t char32_t catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid wchar_t short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignas alignof constexpr consteval constinit decltype concept co_await co_return co_yield requires noexcept static_assert thread_local restrict final override atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq", + built_in: "std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set pair bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap priority_queue make_pair array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr _Bool complex _Complex imaginary _Imaginary", + literal: 'true false nullptr NULL' + }; + const EXPRESSION_CONTAINS = [ + PREPROCESSOR, + CPP_PRIMITIVE_TYPES, + C_LINE_COMMENT_MODE, + hljs.C_BLOCK_COMMENT_MODE, + NUMBERS, + STRINGS + ]; + const EXPRESSION_CONTEXT = { + // This mode covers expression context where we can't expect a function + // definition and shouldn't highlight anything that looks like one: + // `return some()`, `else if()`, `(x*sum(1, 2))` + variants: [ + { + begin: /=/, + end: /;/ + }, + { + begin: /\(/, + end: /\)/ + }, + { + beginKeywords: 'new throw return else', + end: /;/ + } + ], + keywords: CPP_KEYWORDS, + contains: EXPRESSION_CONTAINS.concat([ + { + begin: /\(/, + end: /\)/, + keywords: CPP_KEYWORDS, + contains: EXPRESSION_CONTAINS.concat([ + 'self' + ]), + relevance: 0 + } + ]), + relevance: 0 + }; + const FUNCTION_DECLARATION = { + className: 'function', + begin: '(' + FUNCTION_TYPE_RE + '[\\*&\\s]+)+' + FUNCTION_TITLE, + returnBegin: true, + end: /[{;=]/, + excludeEnd: true, + keywords: CPP_KEYWORDS, + illegal: /[^\w\s\*&:<>]/, + contains: [ + { + begin: DECLTYPE_AUTO_RE, + keywords: CPP_KEYWORDS, + relevance: 0 + }, + { + begin: FUNCTION_TITLE, + returnBegin: true, + contains: [ + TITLE_MODE + ], + relevance: 0 + }, + { + className: 'params', + begin: /\(/, + end: /\)/, + keywords: CPP_KEYWORDS, + relevance: 0, + contains: [ + C_LINE_COMMENT_MODE, + hljs.C_BLOCK_COMMENT_MODE, + STRINGS, + NUMBERS, + CPP_PRIMITIVE_TYPES, + // Count matching parentheses. + { + begin: /\(/, + end: /\)/, + keywords: CPP_KEYWORDS, + relevance: 0, + contains: [ + 'self', + C_LINE_COMMENT_MODE, + hljs.C_BLOCK_COMMENT_MODE, + STRINGS, + NUMBERS, + CPP_PRIMITIVE_TYPES + ] + } + ] + }, + CPP_PRIMITIVE_TYPES, + C_LINE_COMMENT_MODE, + hljs.C_BLOCK_COMMENT_MODE, + PREPROCESSOR + ] + }; + return { + aliases: [ + 'c', + 'cc', + 'h', + 'c++', + 'h++', + 'hpp', + 'hh', + 'hxx', + 'cxx' + ], + keywords: CPP_KEYWORDS, + // the base c-like language will NEVER be auto-detected, rather the + // derivitives: c, c++, arduino turn auto-detect back on for themselves + disableAutodetect: true, + illegal: '', + keywords: CPP_KEYWORDS, + contains: [ + 'self', + CPP_PRIMITIVE_TYPES + ] + }, + { + begin: hljs.IDENT_RE + '::', + keywords: CPP_KEYWORDS + }, + { + className: 'class', + beginKeywords: 'enum class struct union', + end: /[{;:<>=]/, + contains: [ + { + beginKeywords: "final class struct" + }, + hljs.TITLE_MODE + ] + } + ]), + exports: { + preprocessor: PREPROCESSOR, + strings: STRINGS, + keywords: CPP_KEYWORDS + } + }; +} +/* +Language: C++ +Category: common, system +Website: https://isocpp.org +*/ /** @type LanguageFn */ function $c5caa2f394d41d81$var$cPlusPlus(hljs) { + const lang = $c5caa2f394d41d81$var$cLike(hljs); + // return auto-detection back on + lang.disableAutodetect = false; + lang.name = 'C++'; + lang.aliases = [ + 'cc', + 'c++', + 'h++', + 'hpp', + 'hh', + 'hxx', + 'cxx' + ]; + return lang; +} +/* +Language: Arduino +Author: Stefania Mellai +Description: The Arduino® Language is a superset of C++. This rules are designed to highlight the Arduino® source code. For info about language see http://www.arduino.cc. +Website: https://www.arduino.cc +*/ /** @type LanguageFn */ function $c5caa2f394d41d81$var$arduino(hljs) { + const ARDUINO_KW = { + keyword: 'boolean byte word String', + built_in: "setup loop KeyboardController MouseController SoftwareSerial EthernetServer EthernetClient LiquidCrystal RobotControl GSMVoiceCall EthernetUDP EsploraTFT HttpClient RobotMotor WiFiClient GSMScanner FileSystem Scheduler GSMServer YunClient YunServer IPAddress GSMClient GSMModem Keyboard Ethernet Console GSMBand Esplora Stepper Process WiFiUDP GSM_SMS Mailbox USBHost Firmata PImage Client Server GSMPIN FileIO Bridge Serial EEPROM Stream Mouse Audio Servo File Task GPRS WiFi Wire TFT GSM SPI SD runShellCommandAsynchronously analogWriteResolution retrieveCallingNumber printFirmwareVersion analogReadResolution sendDigitalPortPair noListenOnLocalhost readJoystickButton setFirmwareVersion readJoystickSwitch scrollDisplayRight getVoiceCallStatus scrollDisplayLeft writeMicroseconds delayMicroseconds beginTransmission getSignalStrength runAsynchronously getAsynchronously listenOnLocalhost getCurrentCarrier readAccelerometer messageAvailable sendDigitalPorts lineFollowConfig countryNameWrite runShellCommand readStringUntil rewindDirectory readTemperature setClockDivider readLightSensor endTransmission analogReference detachInterrupt countryNameRead attachInterrupt encryptionType readBytesUntil robotNameWrite readMicrophone robotNameRead cityNameWrite userNameWrite readJoystickY readJoystickX mouseReleased openNextFile scanNetworks noInterrupts digitalWrite beginSpeaker mousePressed isActionDone mouseDragged displayLogos noAutoscroll addParameter remoteNumber getModifiers keyboardRead userNameRead waitContinue processInput parseCommand printVersion readNetworks writeMessage blinkVersion cityNameRead readMessage setDataMode parsePacket isListening setBitOrder beginPacket isDirectory motorsWrite drawCompass digitalRead clearScreen serialEvent rightToLeft setTextSize leftToRight requestFrom keyReleased compassRead analogWrite interrupts WiFiServer disconnect playMelody parseFloat autoscroll getPINUsed setPINUsed setTimeout sendAnalog readSlider analogRead beginWrite createChar motorsStop keyPressed tempoWrite readButton subnetMask debugPrint macAddress writeGreen randomSeed attachGPRS readString sendString remotePort releaseAll mouseMoved background getXChange getYChange answerCall getResult voiceCall endPacket constrain getSocket writeJSON getButton available connected findUntil readBytes exitValue readGreen writeBlue startLoop IPAddress isPressed sendSysex pauseMode gatewayIP setCursor getOemKey tuneWrite noDisplay loadImage switchPIN onRequest onReceive changePIN playFile noBuffer parseInt overflow checkPIN knobRead beginTFT bitClear updateIR bitWrite position writeRGB highByte writeRed setSpeed readBlue noStroke remoteIP transfer shutdown hangCall beginSMS endWrite attached maintain noCursor checkReg checkPUK shiftOut isValid shiftIn pulseIn connect println localIP pinMode getIMEI display noBlink process getBand running beginSD drawBMP lowByte setBand release bitRead prepare pointTo readRed setMode noFill remove listen stroke detach attach noTone exists buffer height bitSet circle config cursor random IRread setDNS endSMS getKey micros millis begin print write ready flush width isPIN blink clear press mkdir rmdir close point yield image BSSID click delay read text move peek beep rect line open seek fill size turn stop home find step tone sqrt RSSI SSID end bit tan cos sin pow map abs max min get run put", + literal: "DIGITAL_MESSAGE FIRMATA_STRING ANALOG_MESSAGE REPORT_DIGITAL REPORT_ANALOG INPUT_PULLUP SET_PIN_MODE INTERNAL2V56 SYSTEM_RESET LED_BUILTIN INTERNAL1V1 SYSEX_START INTERNAL EXTERNAL DEFAULT OUTPUT INPUT HIGH LOW" + }; + const ARDUINO = $c5caa2f394d41d81$var$cPlusPlus(hljs); + const kws = /** @type {Record} */ ARDUINO.keywords; + kws.keyword += ' ' + ARDUINO_KW.keyword; + kws.literal += ' ' + ARDUINO_KW.literal; + kws.built_in += ' ' + ARDUINO_KW.built_in; + ARDUINO.name = 'Arduino'; + ARDUINO.aliases = [ + 'ino' + ]; + ARDUINO.supersetOf = "cpp"; + return ARDUINO; +} +module.exports = $c5caa2f394d41d81$var$arduino; + +}); + +parcelRegister("76R8c", function(module, exports) { +/* +Language: ARM Assembly +Author: Dan Panzarella +Description: ARM Assembly including Thumb and Thumb2 instructions +Category: assembler +*/ /** @type LanguageFn */ function $52d24eace7552b09$var$armasm(hljs) { + // local labels: %?[FB]?[AT]?\d{1,2}\w+ + const COMMENT = { + variants: [ + hljs.COMMENT('^[ \\t]*(?=#)', '$', { + relevance: 0, + excludeBegin: true + }), + hljs.COMMENT('[;@]', '$', { + relevance: 0 + }), + hljs.C_LINE_COMMENT_MODE, + hljs.C_BLOCK_COMMENT_MODE + ] + }; + return { + name: 'ARM Assembly', + case_insensitive: true, + aliases: [ + 'arm' + ], + keywords: { + $pattern: '\\.?' + hljs.IDENT_RE, + meta: // GNU preprocs + ".2byte .4byte .align .ascii .asciz .balign .byte .code .data .else .end .endif .endm .endr .equ .err .exitm .extern .global .hword .if .ifdef .ifndef .include .irp .long .macro .rept .req .section .set .skip .space .text .word .arm .thumb .code16 .code32 .force_thumb .thumb_func .ltorg ALIAS ALIGN ARM AREA ASSERT ATTR CN CODE CODE16 CODE32 COMMON CP DATA DCB DCD DCDU DCDO DCFD DCFDU DCI DCQ DCQU DCW DCWU DN ELIF ELSE END ENDFUNC ENDIF ENDP ENTRY EQU EXPORT EXPORTAS EXTERN FIELD FILL FUNCTION GBLA GBLL GBLS GET GLOBAL IF IMPORT INCBIN INCLUDE INFO KEEP LCLA LCLL LCLS LTORG MACRO MAP MEND MEXIT NOFP OPT PRESERVE8 PROC QN READONLY RELOC REQUIRE REQUIRE8 RLIST FN ROUT SETA SETL SETS SN SPACE SUBT THUMB THUMBX TTL WHILE WEND ", + built_in: "r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 pc lr sp ip sl sb fp a1 a2 a3 a4 v1 v2 v3 v4 v5 v6 v7 v8 f0 f1 f2 f3 f4 f5 f6 f7 p0 p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 q0 q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 q11 q12 q13 q14 q15 cpsr_c cpsr_x cpsr_s cpsr_f cpsr_cx cpsr_cxs cpsr_xs cpsr_xsf cpsr_sf cpsr_cxsf spsr_c spsr_x spsr_s spsr_f spsr_cx spsr_cxs spsr_xs spsr_xsf spsr_sf spsr_cxsf s0 s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14 s15 s16 s17 s18 s19 s20 s21 s22 s23 s24 s25 s26 s27 s28 s29 s30 s31 d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 d10 d11 d12 d13 d14 d15 d16 d17 d18 d19 d20 d21 d22 d23 d24 d25 d26 d27 d28 d29 d30 d31 {PC} {VAR} {TRUE} {FALSE} {OPT} {CONFIG} {ENDIAN} {CODESIZE} {CPU} {FPU} {ARCHITECTURE} {PCSTOREOFFSET} {ARMASM_VERSION} {INTER} {ROPI} {RWPI} {SWST} {NOSWST} . @" + }, + contains: [ + { + className: 'keyword', + begin: "\\b(adc|(qd?|sh?|u[qh]?)?add(8|16)?|usada?8|(q|sh?|u[qh]?)?(as|sa)x|and|adrl?|sbc|rs[bc]|asr|b[lx]?|blx|bxj|cbn?z|tb[bh]|bic|bfc|bfi|[su]bfx|bkpt|cdp2?|clz|clrex|cmp|cmn|cpsi[ed]|cps|setend|dbg|dmb|dsb|eor|isb|it[te]{0,3}|lsl|lsr|ror|rrx|ldm(([id][ab])|f[ds])?|ldr((s|ex)?[bhd])?|movt?|mvn|mra|mar|mul|[us]mull|smul[bwt][bt]|smu[as]d|smmul|smmla|mla|umlaal|smlal?([wbt][bt]|d)|mls|smlsl?[ds]|smc|svc|sev|mia([bt]{2}|ph)?|mrr?c2?|mcrr2?|mrs|msr|orr|orn|pkh(tb|bt)|rbit|rev(16|sh)?|sel|[su]sat(16)?|nop|pop|push|rfe([id][ab])?|stm([id][ab])?|str(ex)?[bhd]?|(qd?)?sub|(sh?|q|u[qh]?)?sub(8|16)|[su]xt(a?h|a?b(16)?)|srs([id][ab])?|swpb?|swi|smi|tst|teq|wfe|wfi|yield)(eq|ne|cs|cc|mi|pl|vs|vc|hi|ls|ge|lt|gt|le|al|hs|lo)?[sptrx]?(?=\\s)" // followed by space + }, + COMMENT, + hljs.QUOTE_STRING_MODE, + { + className: 'string', + begin: '\'', + end: '[^\\\\]\'', + relevance: 0 + }, + { + className: 'title', + begin: '\\|', + end: '\\|', + illegal: '\\n', + relevance: 0 + }, + { + className: 'number', + variants: [ + { + begin: '[#$=]?0x[0-9a-f]+' + }, + { + begin: '[#$=]?0b[01]+' + }, + { + begin: '[#$=]\\d+' + }, + { + begin: '\\b\\d+' + } + ], + relevance: 0 + }, + { + className: 'symbol', + variants: [ + { + begin: '^[ \\t]*[a-z_\\.\\$][a-z0-9_\\.\\$]+:' + }, + { + begin: '^[a-z_\\.\\$][a-z0-9_\\.\\$]+' + }, + { + begin: '[=#]\\w+' + } + ], + relevance: 0 + } + ] + }; +} +module.exports = $52d24eace7552b09$var$armasm; + +}); + +parcelRegister("dJIAp", function(module, exports) { +/** + * @param {string} value + * @returns {RegExp} + * */ /** + * @param {RegExp | string } re + * @returns {string} + */ function $a002103a94edb628$var$source(re) { + if (!re) return null; + if (typeof re === "string") return re; + return re.source; +} +/** + * @param {RegExp | string } re + * @returns {string} + */ function $a002103a94edb628$var$lookahead(re) { + return $a002103a94edb628$var$concat('(?=', re, ')'); +} +/** + * @param {RegExp | string } re + * @returns {string} + */ function $a002103a94edb628$var$optional(re) { + return $a002103a94edb628$var$concat('(', re, ')?'); +} +/** + * @param {...(RegExp | string) } args + * @returns {string} + */ function $a002103a94edb628$var$concat(...args) { + const joined = args.map((x)=>$a002103a94edb628$var$source(x)).join(""); + return joined; +} +/** + * Any of the passed expresssions may match + * + * Creates a huge this | this | that | that match + * @param {(RegExp | string)[] } args + * @returns {string} + */ function $a002103a94edb628$var$either(...args) { + const joined = '(' + args.map((x)=>$a002103a94edb628$var$source(x)).join("|") + ")"; + return joined; +} +/* +Language: HTML, XML +Website: https://www.w3.org/XML/ +Category: common +*/ /** @type LanguageFn */ function $a002103a94edb628$var$xml(hljs) { + // Element names can contain letters, digits, hyphens, underscores, and periods + const TAG_NAME_RE = $a002103a94edb628$var$concat(/[A-Z_]/, $a002103a94edb628$var$optional(/[A-Z0-9_.-]+:/), /[A-Z0-9_.-]*/); + const XML_IDENT_RE = '[A-Za-z0-9\\._:-]+'; + const XML_ENTITIES = { + className: 'symbol', + begin: '&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;' + }; + const XML_META_KEYWORDS = { + begin: '\\s', + contains: [ + { + className: 'meta-keyword', + begin: '#?[a-z_][a-z1-9_-]+', + illegal: '\\n' + } + ] + }; + const XML_META_PAR_KEYWORDS = hljs.inherit(XML_META_KEYWORDS, { + begin: '\\(', + end: '\\)' + }); + const APOS_META_STRING_MODE = hljs.inherit(hljs.APOS_STRING_MODE, { + className: 'meta-string' + }); + const QUOTE_META_STRING_MODE = hljs.inherit(hljs.QUOTE_STRING_MODE, { + className: 'meta-string' + }); + const TAG_INTERNALS = { + endsWithParent: true, + illegal: /`]+/ + } + ] + } + ] + } + ] + }; + return { + name: 'HTML, XML', + aliases: [ + 'html', + 'xhtml', + 'rss', + 'atom', + 'xjb', + 'xsd', + 'xsl', + 'plist', + 'wsf', + 'svg' + ], + case_insensitive: true, + contains: [ + { + className: 'meta', + begin: '', + relevance: 10, + contains: [ + XML_META_KEYWORDS, + QUOTE_META_STRING_MODE, + APOS_META_STRING_MODE, + XML_META_PAR_KEYWORDS, + { + begin: '\\[', + end: '\\]', + contains: [ + { + className: 'meta', + begin: '', + contains: [ + XML_META_KEYWORDS, + XML_META_PAR_KEYWORDS, + QUOTE_META_STRING_MODE, + APOS_META_STRING_MODE + ] + } + ] + } + ] + }, + hljs.COMMENT('', { + relevance: 10 + }), + { + begin: '', + relevance: 10 + }, + XML_ENTITIES, + { + className: 'meta', + begin: /<\?xml/, + end: /\?>/, + relevance: 10 + }, + { + className: 'tag', + /* + The lookahead pattern (?=...) ensures that 'begin' only matches + ')', + end: '>', + keywords: { + name: 'style' + }, + contains: [ + TAG_INTERNALS + ], + starts: { + end: '', + returnEnd: true, + subLanguage: [ + 'css', + 'xml' + ] + } + }, + { + className: 'tag', + // See the comment in the ',\n returnEnd: true,\n subLanguage: [\n 'css',\n 'xml'\n ]\n }\n },\n {\n className: 'tag',\n // See the comment in the

Index of  '; + var arr1 = it.paths; + if (arr1) { + var value, index = -1, l1 = arr1.length - 1; + while(index < l1){ + value = arr1[index += 1]; + out += ' ' + encodeHTML(value.name) + ' '; + } + } + out += '

    '; + var arr2 = it.files; + if (arr2) { + var value, index = -1, l2 = arr2.length - 1; + while(index < l2){ + value = arr2[index += 1]; + out += '
  • ' + encodeHTML(value.base) + '
  • '; + } + } + out += '
'; + return out; + } + var itself = directory, _encodeHTML = function(doNotSkipEncoded) { + var encodeHTMLRules = { + "&": "&", + "<": "<", + ">": ">", + '"': """, + "'": "'", + "/": "/" + }, matchHTML = doNotSkipEncoded ? /[&<>"'\/]/g : /&(?!#?\w+;)|<|>|"|'|\//g; + return function(code) { + return code ? code.toString().replace(matchHTML, function(m) { + return encodeHTMLRules[m] || m; + }) : ""; + }; + }(); + if (0, $d925f13fd6792cf1$exports) $d925f13fd6792cf1$exports = itself; + else if (typeof define === 'function') define(function() { + return itself; + }); + else { + window.render = window.render || {}; + window.render['directory'] = itself; + } +})(); + + +var $d64713dfb2ad0c8d$exports = {}; +(function() { + function error(it) { + var out = '
' + it.statusCode + '

' + it.message + '

'; + return out; + } + var itself = error, _encodeHTML = function(doNotSkipEncoded) { + var encodeHTMLRules = { + "&": "&", + "<": "<", + ">": ">", + '"': """, + "'": "'", + "/": "/" + }, matchHTML = doNotSkipEncoded ? /[&<>"'\/]/g : /&(?!#?\w+;)|<|>|"|'|\//g; + return function(code) { + return code ? code.toString().replace(matchHTML, function(m) { + return encodeHTMLRules[m] || m; + }) : ""; + }; + }(); + if (0, $d64713dfb2ad0c8d$exports) $d64713dfb2ad0c8d$exports = itself; + else if (typeof define === 'function') define(function() { + return itself; + }); + else { + window.render = window.render || {}; + window.render['error'] = itself; + } +})(); + + +const $b7b844cd6a6e3bc1$var$etags = new Map(); +const $b7b844cd6a6e3bc1$var$calculateSha = (handlers, absolutePath)=>new Promise((resolve, reject)=>{ + const hash = $b7b844cd6a6e3bc1$require$createHash('sha1'); + hash.update($4yQxV$path.extname(absolutePath)); + hash.update('-'); + const rs = handlers.createReadStream(absolutePath); + rs.on('error', reject); + rs.on('data', (buf)=>hash.update(buf)); + rs.on('end', ()=>{ + const sha = hash.digest('hex'); + resolve(sha); + }); + }); +const $b7b844cd6a6e3bc1$var$sourceMatches = (source, requestPath, allowSegments)=>{ + const keys = []; + const slashed = $289cfce35fc61883$exports(source); + const resolvedPath = $4yQxV$path.posix.resolve(requestPath); + let results = null; + if (allowSegments) { + const normalized = slashed.replace('*', '(.*)'); + const expression = $41b480d2737b4c6f$exports(normalized, keys); + results = expression.exec(resolvedPath); + if (!results) // clear keys so that they are not used + // later with empty results. this may + // happen if minimatch returns true + keys.length = 0; + } + if (results || $c3caf404640ee8c0$exports(resolvedPath, slashed)) return { + keys: keys, + results: results + }; + return null; +}; +const $b7b844cd6a6e3bc1$var$toTarget = (source, destination, previousPath)=>{ + const matches = $b7b844cd6a6e3bc1$var$sourceMatches(source, previousPath, true); + if (!matches) return null; + const { keys: keys, results: results } = matches; + const props = {}; + const { protocol: protocol } = $4yQxV$url.parse(destination); + const normalizedDest = protocol ? destination : $289cfce35fc61883$exports(destination); + const toPath = $41b480d2737b4c6f$exports.compile(normalizedDest); + for(let index = 0; index < keys.length; index++){ + const { name: name } = keys[index]; + props[name] = results[index + 1]; + } + return toPath(props); +}; +const $b7b844cd6a6e3bc1$var$applyRewrites = (requestPath, rewrites = [], repetitive)=>{ + // We need to copy the array, since we're going to modify it. + const rewritesCopy = rewrites.slice(); + // If the method was called again, the path was already rewritten + // so we need to make sure to return it. + const fallback = repetitive ? requestPath : null; + if (rewritesCopy.length === 0) return fallback; + for(let index = 0; index < rewritesCopy.length; index++){ + const { source: source, destination: destination } = rewrites[index]; + const target = $b7b844cd6a6e3bc1$var$toTarget(source, destination, requestPath); + if (target) { + // Remove rules that were already applied + rewritesCopy.splice(index, 1); + // Check if there are remaining ones to be applied + return $b7b844cd6a6e3bc1$var$applyRewrites($289cfce35fc61883$exports(target), rewritesCopy, true); + } + } + return fallback; +}; +const $b7b844cd6a6e3bc1$var$ensureSlashStart = (target)=>target.startsWith('/') ? target : `/${target}`; +const $b7b844cd6a6e3bc1$var$shouldRedirect = (decodedPath, { redirects: redirects = [], trailingSlash: trailingSlash }, cleanUrl)=>{ + const slashing = typeof trailingSlash === 'boolean'; + const defaultType = 301; + const matchHTML = /(\.html|\/index)$/g; + if (redirects.length === 0 && !slashing && !cleanUrl) return null; + // By stripping the HTML parts from the decoded + // path *before* handling the trailing slash, we make + // sure that only *one* redirect occurs if both + // config options are used. + if (cleanUrl && matchHTML.test(decodedPath)) { + decodedPath = decodedPath.replace(matchHTML, ''); + if (decodedPath.indexOf('//') > -1) decodedPath = decodedPath.replace(/\/+/g, '/'); + return { + target: $b7b844cd6a6e3bc1$var$ensureSlashStart(decodedPath), + statusCode: defaultType + }; + } + if (slashing) { + const { ext: ext, name: name } = $4yQxV$path.parse(decodedPath); + const isTrailed = decodedPath.endsWith('/'); + const isDotfile = name.startsWith('.'); + let target = null; + if (!trailingSlash && isTrailed) target = decodedPath.slice(0, -1); + else if (trailingSlash && !isTrailed && !ext && !isDotfile) target = `${decodedPath}/`; + if (decodedPath.indexOf('//') > -1) target = decodedPath.replace(/\/+/g, '/'); + if (target) return { + target: $b7b844cd6a6e3bc1$var$ensureSlashStart(target), + statusCode: defaultType + }; + } + // This is currently the fastest way to + // iterate over an array + for(let index = 0; index < redirects.length; index++){ + const { source: source, destination: destination, type: type } = redirects[index]; + const target = $b7b844cd6a6e3bc1$var$toTarget(source, destination, decodedPath); + if (target) return { + target: target, + statusCode: type || defaultType + }; + } + return null; +}; +const $b7b844cd6a6e3bc1$var$appendHeaders = (target, source)=>{ + for(let index = 0; index < source.length; index++){ + const { key: key, value: value } = source[index]; + target[key] = value; + } +}; +const $b7b844cd6a6e3bc1$var$getHeaders = async (handlers, config, current, absolutePath, stats)=>{ + const { headers: customHeaders = [], etag: etag = false } = config; + const related = {}; + const { base: base } = $4yQxV$path.parse(absolutePath); + const relativePath = $4yQxV$path.relative(current, absolutePath); + if (customHeaders.length > 0) // By iterating over all headers and never stopping, developers + // can specify multiple header sources in the config that + // might match a single path. + for(let index = 0; index < customHeaders.length; index++){ + const { source: source, headers: headers } = customHeaders[index]; + if ($b7b844cd6a6e3bc1$var$sourceMatches(source, $289cfce35fc61883$exports(relativePath))) $b7b844cd6a6e3bc1$var$appendHeaders(related, headers); + } + let defaultHeaders = {}; + if (stats) { + defaultHeaders = { + 'Content-Length': stats.size, + // Default to "inline", which always tries to render in the browser, + // if that's not working, it will save the file. But to be clear: This + // only happens if it cannot find a appropiate value. + 'Content-Disposition': $24a49f61351f636c$exports(base, { + type: 'inline' + }), + 'Accept-Ranges': 'bytes' + }; + if (etag) { + let [mtime, sha] = $b7b844cd6a6e3bc1$var$etags.get(absolutePath) || []; + if (Number(mtime) !== Number(stats.mtime)) { + sha = await $b7b844cd6a6e3bc1$var$calculateSha(handlers, absolutePath); + $b7b844cd6a6e3bc1$var$etags.set(absolutePath, [ + stats.mtime, + sha + ]); + } + defaultHeaders['ETag'] = `"${sha}"`; + } else defaultHeaders['Last-Modified'] = stats.mtime.toUTCString(); + const contentType = $fd57c6e6fdaab085$export$8019223850b8bf78(base); + if (contentType) defaultHeaders['Content-Type'] = contentType; + } + const headers = Object.assign(defaultHeaders, related); + for(const key in headers)if (headers.hasOwnProperty(key) && headers[key] === null) delete headers[key]; + return headers; +}; +const $b7b844cd6a6e3bc1$var$applicable = (decodedPath, configEntry)=>{ + if (typeof configEntry === 'boolean') return configEntry; + if (Array.isArray(configEntry)) { + for(let index = 0; index < configEntry.length; index++){ + const source = configEntry[index]; + if ($b7b844cd6a6e3bc1$var$sourceMatches(source, decodedPath)) return true; + } + return false; + } + return true; +}; +const $b7b844cd6a6e3bc1$var$getPossiblePaths = (relativePath, extension)=>[ + $4yQxV$path.join(relativePath, `index${extension}`), + relativePath.endsWith('/') ? relativePath.replace(/\/$/g, extension) : relativePath + extension + ].filter((item)=>$4yQxV$path.basename(item) !== extension); +const $b7b844cd6a6e3bc1$var$findRelated = async (current, relativePath, rewrittenPath, originalStat)=>{ + const possible = rewrittenPath ? [ + rewrittenPath + ] : $b7b844cd6a6e3bc1$var$getPossiblePaths(relativePath, '.html'); + let stats = null; + for(let index = 0; index < possible.length; index++){ + const related = possible[index]; + const absolutePath = $4yQxV$path.join(current, related); + try { + stats = await originalStat(absolutePath); + } catch (err) { + if (err.code !== 'ENOENT' && err.code !== 'ENOTDIR') throw err; + } + if (stats) return { + stats: stats, + absolutePath: absolutePath + }; + } + return null; +}; +const $b7b844cd6a6e3bc1$var$canBeListed = (excluded, file)=>{ + const slashed = $289cfce35fc61883$exports(file); + let whether = true; + for(let mark = 0; mark < excluded.length; mark++){ + const source = excluded[mark]; + if ($b7b844cd6a6e3bc1$var$sourceMatches(source, slashed)) { + whether = false; + break; + } + } + return whether; +}; +const $b7b844cd6a6e3bc1$var$renderDirectory = async (current, acceptsJSON, handlers, methods, config, paths)=>{ + const { directoryListing: directoryListing, trailingSlash: trailingSlash, unlisted: unlisted = [], renderSingle: renderSingle } = config; + const slashSuffix = typeof trailingSlash === 'boolean' ? trailingSlash ? '/' : '' : '/'; + const { relativePath: relativePath, absolutePath: absolutePath } = paths; + const excluded = [ + '.DS_Store', + '.git', + ...unlisted + ]; + if (!$b7b844cd6a6e3bc1$var$applicable(relativePath, directoryListing) && !renderSingle) return {}; + let files = await handlers.readdir(absolutePath); + const canRenderSingle = renderSingle && files.length === 1; + for(let index = 0; index < files.length; index++){ + const file = files[index]; + const filePath = $4yQxV$path.resolve(absolutePath, file); + const details = $4yQxV$path.parse(filePath); + // It's important to indicate that the `stat` call was + // spawned by the directory listing, as Now is + // simulating those calls and needs to special-case this. + let stats = null; + if (methods.lstat) stats = await handlers.lstat(filePath, true); + else stats = await handlers.lstat(filePath); + details.relative = $4yQxV$path.join(relativePath, details.base); + if (stats.isDirectory()) { + details.base += slashSuffix; + details.relative += slashSuffix; + details.type = 'folder'; + } else { + if (canRenderSingle) return { + singleFile: true, + absolutePath: filePath, + stats: stats + }; + details.ext = details.ext.split('.')[1] || 'txt'; + details.type = 'file'; + details.size = $892a5aef6a177b02$exports(stats.size, { + unitSeparator: ' ', + decimalPlaces: 0 + }); + } + details.title = details.base; + if ($b7b844cd6a6e3bc1$var$canBeListed(excluded, file)) files[index] = details; + else delete files[index]; + } + const toRoot = $4yQxV$path.relative(current, absolutePath); + const directory = $4yQxV$path.join($4yQxV$path.basename(current), toRoot, slashSuffix); + const pathParts = directory.split($4yQxV$path.sep).filter(Boolean); + // Sort to list directories first, then sort alphabetically + files = files.sort((a, b)=>{ + const aIsDir = a.type === 'directory'; + const bIsDir = b.type === 'directory'; + /* istanbul ignore next */ if (aIsDir && !bIsDir) return -1; + if (bIsDir && !aIsDir || a.base > b.base) return 1; + /* istanbul ignore next */ if (a.base < b.base) return -1; + /* istanbul ignore next */ return 0; + }).filter(Boolean); + // Add parent directory to the head of the sorted files array + if (toRoot.length > 0) { + const directoryPath = [ + ...pathParts + ].slice(1); + const relative = $4yQxV$path.join('/', ...directoryPath, '..', slashSuffix); + files.unshift({ + type: 'directory', + base: '..', + relative: relative, + title: relative, + ext: '' + }); + } + const subPaths = []; + for(let index = 0; index < pathParts.length; index++){ + const parents = []; + const isLast = index === pathParts.length - 1; + let before = 0; + while(before <= index){ + parents.push(pathParts[before]); + before++; + } + parents.shift(); + subPaths.push({ + name: pathParts[index] + (isLast ? slashSuffix : '/'), + url: index === 0 ? '' : parents.join('/') + slashSuffix + }); + } + const spec = { + files: files, + directory: directory, + paths: subPaths + }; + const output = acceptsJSON ? JSON.stringify(spec) : $d925f13fd6792cf1$exports(spec); + return { + directory: output + }; +}; +const $b7b844cd6a6e3bc1$var$sendError = async (absolutePath, response, acceptsJSON, current, handlers, config, spec)=>{ + const { err: original, message: message, code: code, statusCode: statusCode } = spec; + /* istanbul ignore next */ if (original && process.env.NODE_ENV !== 'test') console.error(original); + response.statusCode = statusCode; + if (acceptsJSON) { + response.setHeader('Content-Type', 'application/json; charset=utf-8'); + response.end(JSON.stringify({ + error: { + code: code, + message: message + } + })); + return; + } + let stats = null; + const errorPage = $4yQxV$path.join(current, `${statusCode}.html`); + try { + stats = await handlers.lstat(errorPage); + } catch (err) { + if (err.code !== 'ENOENT') console.error(err); + } + if (stats) { + let stream = null; + try { + stream = await handlers.createReadStream(errorPage); + const headers = await $b7b844cd6a6e3bc1$var$getHeaders(handlers, config, current, errorPage, stats); + response.writeHead(statusCode, headers); + stream.pipe(response); + return; + } catch (err) { + console.error(err); + } + } + const headers = await $b7b844cd6a6e3bc1$var$getHeaders(handlers, config, current, absolutePath, null); + headers['Content-Type'] = 'text/html; charset=utf-8'; + response.writeHead(statusCode, headers); + response.end($d64713dfb2ad0c8d$exports({ + statusCode: statusCode, + message: message + })); +}; +const $b7b844cd6a6e3bc1$var$internalError = async (...args)=>{ + const lastIndex = args.length - 1; + const err = args[lastIndex]; + args[lastIndex] = { + statusCode: 500, + code: 'internal_server_error', + message: 'A server error has occurred', + err: err + }; + return $b7b844cd6a6e3bc1$var$sendError(...args); +}; +const $b7b844cd6a6e3bc1$var$getHandlers = (methods)=>Object.assign({ + lstat: $b7b844cd6a6e3bc1$require$promisify($b7b844cd6a6e3bc1$require$lstat), + realpath: $b7b844cd6a6e3bc1$require$promisify($b7b844cd6a6e3bc1$require$realpath), + createReadStream: $b7b844cd6a6e3bc1$require$createReadStream, + readdir: $b7b844cd6a6e3bc1$require$promisify($b7b844cd6a6e3bc1$require$readdir), + sendError: $b7b844cd6a6e3bc1$var$sendError + }, methods); +$b7b844cd6a6e3bc1$exports = async (request, response, config = {}, methods = {})=>{ + const cwd = process.cwd(); + const current = config.public ? $4yQxV$path.resolve(cwd, config.public) : cwd; + const handlers = $b7b844cd6a6e3bc1$var$getHandlers(methods); + let relativePath = null; + let acceptsJSON = null; + if (request.headers.accept) acceptsJSON = request.headers.accept.includes('application/json'); + try { + relativePath = decodeURIComponent($4yQxV$url.parse(request.url).pathname); + } catch (err) { + return $b7b844cd6a6e3bc1$var$sendError('/', response, acceptsJSON, current, handlers, config, { + statusCode: 400, + code: 'bad_request', + message: 'Bad Request' + }); + } + let absolutePath = $4yQxV$path.join(current, relativePath); + // Prevent path traversal vulnerabilities. We could do this + // by ourselves, but using the package covers all the edge cases. + if (!$ce3a39e5e5c741f1$exports(absolutePath, current)) return $b7b844cd6a6e3bc1$var$sendError(absolutePath, response, acceptsJSON, current, handlers, config, { + statusCode: 400, + code: 'bad_request', + message: 'Bad Request' + }); + const cleanUrl = $b7b844cd6a6e3bc1$var$applicable(relativePath, config.cleanUrls); + const redirect = $b7b844cd6a6e3bc1$var$shouldRedirect(relativePath, config, cleanUrl); + if (redirect) { + response.writeHead(redirect.statusCode, { + Location: encodeURI(redirect.target) + }); + response.end(); + return; + } + let stats = null; + // It's extremely important that we're doing multiple stat calls. This one + // right here could technically be removed, but then the program + // would be slower. Because for directories, we always want to see if a related file + // exists and then (after that), fetch the directory itself if no + // related file was found. However (for files, of which most have extensions), we should + // always stat right away. + // + // When simulating a file system without directory indexes, calculating whether a + // directory exists requires loading all the file paths and then checking if + // one of them includes the path of the directory. As that's a very + // performance-expensive thing to do, we need to ensure it's not happening if not really necessary. + if ($4yQxV$path.extname(relativePath) !== '') try { + stats = await handlers.lstat(absolutePath); + } catch (err) { + if (err.code !== 'ENOENT' && err.code !== 'ENOTDIR') return $b7b844cd6a6e3bc1$var$internalError(absolutePath, response, acceptsJSON, current, handlers, config, err); + } + const rewrittenPath = $b7b844cd6a6e3bc1$var$applyRewrites(relativePath, config.rewrites); + if (!stats && (cleanUrl || rewrittenPath)) try { + const related = await $b7b844cd6a6e3bc1$var$findRelated(current, relativePath, rewrittenPath, handlers.lstat); + if (related) ({ stats: stats, absolutePath: absolutePath } = related); + } catch (err) { + if (err.code !== 'ENOENT' && err.code !== 'ENOTDIR') return $b7b844cd6a6e3bc1$var$internalError(absolutePath, response, acceptsJSON, current, handlers, config, err); + } + if (!stats) try { + stats = await handlers.lstat(absolutePath); + } catch (err) { + if (err.code !== 'ENOENT' && err.code !== 'ENOTDIR') return $b7b844cd6a6e3bc1$var$internalError(absolutePath, response, acceptsJSON, current, handlers, config, err); + } + if (stats && stats.isDirectory()) { + let directory = null; + let singleFile = null; + try { + const related = await $b7b844cd6a6e3bc1$var$renderDirectory(current, acceptsJSON, handlers, methods, config, { + relativePath: relativePath, + absolutePath: absolutePath + }); + if (related.singleFile) ({ stats: stats, absolutePath: absolutePath, singleFile: singleFile } = related); + else ({ directory: directory } = related); + } catch (err) { + if (err.code !== 'ENOENT') return $b7b844cd6a6e3bc1$var$internalError(absolutePath, response, acceptsJSON, current, handlers, config, err); + } + if (directory) { + const contentType = acceptsJSON ? 'application/json; charset=utf-8' : 'text/html; charset=utf-8'; + response.statusCode = 200; + response.setHeader('Content-Type', contentType); + response.end(directory); + return; + } + if (!singleFile) // The directory listing is disabled, so we want to + // render a 404 error. + stats = null; + } + const isSymLink = stats && stats.isSymbolicLink(); + // There are two scenarios in which we want to reply with + // a 404 error: Either the path does not exist, or it is a + // symlink while the `symlinks` option is disabled (which it is by default). + if (!stats || !config.symlinks && isSymLink) // allow for custom 404 handling + return handlers.sendError(absolutePath, response, acceptsJSON, current, handlers, config, { + statusCode: 404, + code: 'not_found', + message: 'The requested path could not be found' + }); + // If we figured out that the target is a symlink, we need to + // resolve the symlink and run a new `stat` call just for the + // target of that symlink. + if (isSymLink) { + try { + absolutePath = await handlers.realpath(absolutePath); + } catch (err) { + if (err.code !== 'ENOENT') throw err; + // The requested symlink is invalid + return handlers.sendError(absolutePath, response, acceptsJSON, current, handlers, config, { + statusCode: 404, + code: 'not_found', + message: 'The requested path could not be found' + }); + } + stats = await handlers.lstat(absolutePath); + } + const streamOpts = {}; + // TODO ? if-range + if (request.headers.range && stats.size) { + const range = $4c0377bb988aeb6b$exports(stats.size, request.headers.range); + if (typeof range === 'object' && range.type === 'bytes') { + const { start: start, end: end } = range[0]; + streamOpts.start = start; + streamOpts.end = end; + response.statusCode = 206; + } else { + response.statusCode = 416; + response.setHeader('Content-Range', `bytes */${stats.size}`); + } + } + // TODO ? multiple ranges + let stream = null; + try { + stream = await handlers.createReadStream(absolutePath, streamOpts); + } catch (err) { + return $b7b844cd6a6e3bc1$var$internalError(absolutePath, response, acceptsJSON, current, handlers, config, err); + } + const headers = await $b7b844cd6a6e3bc1$var$getHeaders(handlers, config, current, absolutePath, stats); + // eslint-disable-next-line no-undefined + if (streamOpts.start !== undefined && streamOpts.end !== undefined) { + headers['Content-Range'] = `bytes ${streamOpts.start}-${streamOpts.end}/${stats.size}`; + headers['Content-Length'] = streamOpts.end - streamOpts.start + 1; + } + // We need to check for `headers.ETag` being truthy first, otherwise it will + // match `undefined` being equal to `undefined`, which is true. + // + // Checking for `undefined` and `null` is also important, because `Range` can be `0`. + // + // eslint-disable-next-line no-eq-null + if (request.headers.range == null && headers.ETag && headers.ETag === request.headers['if-none-match']) { + response.statusCode = 304; + response.end(); + return; + } + response.writeHead(response.statusCode || 200, headers); + stream.pipe(response); +}; + + +var $e599b7a4408b07c2$exports = {}; +"use strict"; +var $e599b7a4408b07c2$var$__createBinding = $e599b7a4408b07c2$exports && $e599b7a4408b07c2$exports.__createBinding || (Object.create ? function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + Object.defineProperty(o, k2, { + enumerable: true, + get: function() { + return m[k]; + } + }); +} : function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +}); +var $e599b7a4408b07c2$var$__exportStar = $e599b7a4408b07c2$exports && $e599b7a4408b07c2$exports.__exportStar || function(m, exports1) { + for(var p in m)if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports1, p)) $e599b7a4408b07c2$var$__createBinding(exports1, m, p); +}; +Object.defineProperty($e599b7a4408b07c2$exports, "__esModule", { + value: true +}); +$e599b7a4408b07c2$exports.createProxyMiddleware = void 0; +var $75f447dfc39c1196$exports = {}; +"use strict"; +Object.defineProperty($75f447dfc39c1196$exports, "__esModule", { + value: true +}); +$75f447dfc39c1196$exports.HttpProxyMiddleware = void 0; +var $56b8dc392108367f$exports = {}; +/*! + * Caron dimonio, con occhi di bragia + * loro accennando, tutte le raccoglie; + * batte col remo qualunque s’adagia + * + * Charon the demon, with the eyes of glede, + * Beckoning to them, collects them all together, + * Beats with his oar whoever lags behind + * + * Dante - The Divine Comedy (Canto III) + */ +$56b8dc392108367f$exports = (parcelRequire("2Os6Y")); + + +var $0deefb8c20d65ae2$exports = {}; +"use strict"; +Object.defineProperty($0deefb8c20d65ae2$exports, "__esModule", { + value: true +}); +$0deefb8c20d65ae2$exports.createConfig = void 0; +var $07aaf79f8c423c10$exports = {}; +'use strict'; +$07aaf79f8c423c10$exports = (value)=>{ + if (Object.prototype.toString.call(value) !== '[object Object]') return false; + const prototype = Object.getPrototypeOf(value); + return prototype === null || prototype === Object.prototype; +}; + + + +var $43c887b2bd03c2ba$exports = {}; +"use strict"; +Object.defineProperty($43c887b2bd03c2ba$exports, "__esModule", { + value: true +}); +$43c887b2bd03c2ba$exports.ERRORS = void 0; +var $43c887b2bd03c2ba$var$ERRORS; +(function(ERRORS) { + ERRORS["ERR_CONFIG_FACTORY_TARGET_MISSING"] = "[HPM] Missing \"target\" option. Example: {target: \"http://www.example.org\"}"; + ERRORS["ERR_CONTEXT_MATCHER_GENERIC"] = "[HPM] Invalid context. Expecting something like: \"/api\" or [\"/api\", \"/ajax\"]"; + ERRORS["ERR_CONTEXT_MATCHER_INVALID_ARRAY"] = "[HPM] Invalid context. Expecting something like: [\"/api\", \"/ajax\"] or [\"/api/**\", \"!**.html\"]"; + ERRORS["ERR_PATH_REWRITER_CONFIG"] = "[HPM] Invalid pathRewrite config. Expecting object with pathRewrite config or a rewrite function"; +})($43c887b2bd03c2ba$var$ERRORS = $43c887b2bd03c2ba$exports.ERRORS || ($43c887b2bd03c2ba$exports.ERRORS = {})); + + +var $296a085284369343$exports = {}; +"use strict"; +/* eslint-disable prefer-rest-params */ Object.defineProperty($296a085284369343$exports, "__esModule", { + value: true +}); +$296a085284369343$exports.getArrow = $296a085284369343$exports.getInstance = void 0; + +let $296a085284369343$var$loggerInstance; +const $296a085284369343$var$defaultProvider = { + // tslint:disable: no-console + log: console.log, + debug: console.log, + info: console.info, + warn: console.warn, + error: console.error +}; +// log level 'weight' +var $296a085284369343$var$LEVELS; +(function(LEVELS) { + LEVELS[LEVELS["debug"] = 10] = "debug"; + LEVELS[LEVELS["info"] = 20] = "info"; + LEVELS[LEVELS["warn"] = 30] = "warn"; + LEVELS[LEVELS["error"] = 50] = "error"; + LEVELS[LEVELS["silent"] = 80] = "silent"; +})($296a085284369343$var$LEVELS || ($296a085284369343$var$LEVELS = {})); +function $296a085284369343$var$getInstance() { + if (!$296a085284369343$var$loggerInstance) $296a085284369343$var$loggerInstance = new $296a085284369343$var$Logger(); + return $296a085284369343$var$loggerInstance; +} +$296a085284369343$exports.getInstance = $296a085284369343$var$getInstance; +class $296a085284369343$var$Logger { + constructor(){ + this.setLevel('info'); + this.setProvider(()=>$296a085284369343$var$defaultProvider); + } + // log will log messages, regardless of logLevels + log() { + this.provider.log(this._interpolate.apply(null, arguments)); + } + debug() { + if (this._showLevel('debug')) this.provider.debug(this._interpolate.apply(null, arguments)); + } + info() { + if (this._showLevel('info')) this.provider.info(this._interpolate.apply(null, arguments)); + } + warn() { + if (this._showLevel('warn')) this.provider.warn(this._interpolate.apply(null, arguments)); + } + error() { + if (this._showLevel('error')) this.provider.error(this._interpolate.apply(null, arguments)); + } + setLevel(v) { + if (this.isValidLevel(v)) this.logLevel = v; + } + setProvider(fn) { + if (fn && this.isValidProvider(fn)) this.provider = fn($296a085284369343$var$defaultProvider); + } + isValidProvider(fnProvider) { + const result = true; + if (fnProvider && typeof fnProvider !== 'function') throw new Error('[HPM] Log provider config error. Expecting a function.'); + return result; + } + isValidLevel(levelName) { + const validLevels = Object.keys($296a085284369343$var$LEVELS); + const isValid = validLevels.includes(levelName); + if (!isValid) throw new Error('[HPM] Log level error. Invalid logLevel.'); + return isValid; + } + /** + * Decide to log or not to log, based on the log levels 'weight' + * @param {String} showLevel [debug, info, warn, error, silent] + * @return {Boolean} + */ _showLevel(showLevel) { + let result = false; + const currentLogLevel = $296a085284369343$var$LEVELS[this.logLevel]; + if (currentLogLevel && currentLogLevel <= $296a085284369343$var$LEVELS[showLevel]) result = true; + return result; + } + // make sure logged messages and its data are return interpolated + // make it possible for additional log data, such date/time or custom prefix. + _interpolate(format, ...args) { + const result = $4yQxV$util.format(format, ...args); + return result; + } +} +/** + * -> normal proxy + * => router + * ~> pathRewrite + * ≈> router + pathRewrite + * + * @param {String} originalPath + * @param {String} newPath + * @param {String} originalTarget + * @param {String} newTarget + * @return {String} + */ function $296a085284369343$var$getArrow(originalPath, newPath, originalTarget, newTarget) { + const arrow = [ + '>' + ]; + const isNewTarget = originalTarget !== newTarget; // router + const isNewPath = originalPath !== newPath; // pathRewrite + if (isNewPath && !isNewTarget) arrow.unshift('~'); + else if (!isNewPath && isNewTarget) arrow.unshift('='); + else if (isNewPath && isNewTarget) arrow.unshift("\u2248"); + else arrow.unshift('-'); + return arrow.join(''); +} +$296a085284369343$exports.getArrow = $296a085284369343$var$getArrow; + + +const $0deefb8c20d65ae2$var$logger = (0, $296a085284369343$exports.getInstance)(); +function $0deefb8c20d65ae2$var$createConfig(context, opts) { + // structure of config object to be returned + const config = { + context: undefined, + options: {} + }; + // app.use('/api', proxy({target:'http://localhost:9000'})); + if ($0deefb8c20d65ae2$var$isContextless(context, opts)) { + config.context = '/'; + config.options = Object.assign(config.options, context); + // app.use('/api', proxy('http://localhost:9000')); + // app.use(proxy('http://localhost:9000/api')); + } else if ($0deefb8c20d65ae2$var$isStringShortHand(context)) { + const oUrl = $4yQxV$url.parse(context); + const target = [ + oUrl.protocol, + '//', + oUrl.host + ].join(''); + config.context = oUrl.pathname || '/'; + config.options = Object.assign(config.options, { + target: target + }, opts); + if (oUrl.protocol === 'ws:' || oUrl.protocol === 'wss:') config.options.ws = true; + // app.use('/api', proxy({target:'http://localhost:9000'})); + } else { + config.context = context; + config.options = Object.assign(config.options, opts); + } + $0deefb8c20d65ae2$var$configureLogger(config.options); + if (!config.options.target && !config.options.router) throw new Error($43c887b2bd03c2ba$exports.ERRORS.ERR_CONFIG_FACTORY_TARGET_MISSING); + return config; +} +$0deefb8c20d65ae2$exports.createConfig = $0deefb8c20d65ae2$var$createConfig; +/** + * Checks if a String only target/config is provided. + * This can be just the host or with the optional path. + * + * @example + * app.use('/api', proxy('http://localhost:9000')); + * app.use(proxy('http://localhost:9000/api')); + * + * @param {String} context [description] + * @return {Boolean} [description] + */ function $0deefb8c20d65ae2$var$isStringShortHand(context) { + if (typeof context === 'string') return !!$4yQxV$url.parse(context).host; +} +/** + * Checks if a Object only config is provided, without a context. + * In this case the all paths will be proxied. + * + * @example + * app.use('/api', proxy({target:'http://localhost:9000'})); + * + * @param {Object} context [description] + * @param {*} opts [description] + * @return {Boolean} [description] + */ function $0deefb8c20d65ae2$var$isContextless(context, opts) { + return $07aaf79f8c423c10$exports(context) && (opts == null || Object.keys(opts).length === 0); +} +function $0deefb8c20d65ae2$var$configureLogger(options) { + if (options.logLevel) $0deefb8c20d65ae2$var$logger.setLevel(options.logLevel); + if (options.logProvider) $0deefb8c20d65ae2$var$logger.setProvider(options.logProvider); +} + + +var $681245173776109b$exports = {}; +"use strict"; +Object.defineProperty($681245173776109b$exports, "__esModule", { + value: true +}); +$681245173776109b$exports.match = void 0; +var $887a6a97fdc4ec01$exports = {}; +/*! + * is-glob + * + * Copyright (c) 2014-2017, Jon Schlinkert. + * Released under the MIT License. + */ var $0afd5a100f3bc065$exports = {}; +/*! + * is-extglob + * + * Copyright (c) 2014-2016, Jon Schlinkert. + * Licensed under the MIT License. + */ $0afd5a100f3bc065$exports = function isExtglob(str) { + if (typeof str !== 'string' || str === '') return false; + var match; + while(match = /(\\).|([@?!+*]\(.*\))/g.exec(str)){ + if (match[2]) return true; + str = str.slice(match.index + match[0].length); + } + return false; +}; + + +var $887a6a97fdc4ec01$var$chars = { + '{': '}', + '(': ')', + '[': ']' +}; +var $887a6a97fdc4ec01$var$strictCheck = function(str) { + if (str[0] === '!') return true; + var index = 0; + var pipeIndex = -2; + var closeSquareIndex = -2; + var closeCurlyIndex = -2; + var closeParenIndex = -2; + var backSlashIndex = -2; + while(index < str.length){ + if (str[index] === '*') return true; + if (str[index + 1] === '?' && /[\].+)]/.test(str[index])) return true; + if (closeSquareIndex !== -1 && str[index] === '[' && str[index + 1] !== ']') { + if (closeSquareIndex < index) closeSquareIndex = str.indexOf(']', index); + if (closeSquareIndex > index) { + if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) return true; + backSlashIndex = str.indexOf('\\', index); + if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) return true; + } + } + if (closeCurlyIndex !== -1 && str[index] === '{' && str[index + 1] !== '}') { + closeCurlyIndex = str.indexOf('}', index); + if (closeCurlyIndex > index) { + backSlashIndex = str.indexOf('\\', index); + if (backSlashIndex === -1 || backSlashIndex > closeCurlyIndex) return true; + } + } + if (closeParenIndex !== -1 && str[index] === '(' && str[index + 1] === '?' && /[:!=]/.test(str[index + 2]) && str[index + 3] !== ')') { + closeParenIndex = str.indexOf(')', index); + if (closeParenIndex > index) { + backSlashIndex = str.indexOf('\\', index); + if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) return true; + } + } + if (pipeIndex !== -1 && str[index] === '(' && str[index + 1] !== '|') { + if (pipeIndex < index) pipeIndex = str.indexOf('|', index); + if (pipeIndex !== -1 && str[pipeIndex + 1] !== ')') { + closeParenIndex = str.indexOf(')', pipeIndex); + if (closeParenIndex > pipeIndex) { + backSlashIndex = str.indexOf('\\', pipeIndex); + if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) return true; + } + } + } + if (str[index] === '\\') { + var open = str[index + 1]; + index += 2; + var close = $887a6a97fdc4ec01$var$chars[open]; + if (close) { + var n = str.indexOf(close, index); + if (n !== -1) index = n + 1; + } + if (str[index] === '!') return true; + } else index++; + } + return false; +}; +var $887a6a97fdc4ec01$var$relaxedCheck = function(str) { + if (str[0] === '!') return true; + var index = 0; + while(index < str.length){ + if (/[*?{}()[\]]/.test(str[index])) return true; + if (str[index] === '\\') { + var open = str[index + 1]; + index += 2; + var close = $887a6a97fdc4ec01$var$chars[open]; + if (close) { + var n = str.indexOf(close, index); + if (n !== -1) index = n + 1; + } + if (str[index] === '!') return true; + } else index++; + } + return false; +}; +$887a6a97fdc4ec01$exports = function isGlob(str, options) { + if (typeof str !== 'string' || str === '') return false; + if ($0afd5a100f3bc065$exports(str)) return true; + var check = $887a6a97fdc4ec01$var$strictCheck; + // optionally relax check + if (options && options.strict === false) check = $887a6a97fdc4ec01$var$relaxedCheck; + return check(str); +}; + + +var $beca2e1c9294f802$exports = {}; +'use strict'; + +var $a76b61c2cb786308$exports = {}; +'use strict'; +var $f136d766036b2471$exports = {}; +'use strict'; +var $11511dc37e1f6df2$export$a287f47fed4544b8; +/** + * Find a node of the given type + */ var $11511dc37e1f6df2$export$71aa6c912b956294; +/** + * Find a node of the given type + */ var $11511dc37e1f6df2$export$fbadac39f36b1e16; +/** + * Escape the given node with '\\' before node.value + */ var $11511dc37e1f6df2$export$92e39b1e2c1e6e56; +/** + * Returns true if the given brace node should be enclosed in literal braces + */ var $11511dc37e1f6df2$export$ea0f721b77fd5acc; +/** + * Returns true if a brace node is invalid. + */ var $11511dc37e1f6df2$export$25a78c310c11373f; +/** + * Returns true if a node is an open or close node + */ var $11511dc37e1f6df2$export$582fc44003e67ec6; +/** + * Reduce an array of text nodes. + */ var $11511dc37e1f6df2$export$533b26079ad0b4b; +/** + * Flatten an array + */ var $11511dc37e1f6df2$export$bffa455ba8c619a6; +'use strict'; +$11511dc37e1f6df2$export$a287f47fed4544b8 = (num)=>{ + if (typeof num === 'number') return Number.isInteger(num); + if (typeof num === 'string' && num.trim() !== '') return Number.isInteger(Number(num)); + return false; +}; +$11511dc37e1f6df2$export$71aa6c912b956294 = (node, type)=>node.nodes.find((node)=>node.type === type); +$11511dc37e1f6df2$export$fbadac39f36b1e16 = (min, max, step = 1, limit)=>{ + if (limit === false) return false; + if (!$11511dc37e1f6df2$export$a287f47fed4544b8(min) || !$11511dc37e1f6df2$export$a287f47fed4544b8(max)) return false; + return (Number(max) - Number(min)) / Number(step) >= limit; +}; +$11511dc37e1f6df2$export$92e39b1e2c1e6e56 = (block, n = 0, type)=>{ + const node = block.nodes[n]; + if (!node) return; + if (type && node.type === type || node.type === 'open' || node.type === 'close') { + if (node.escaped !== true) { + node.value = '\\' + node.value; + node.escaped = true; + } + } +}; +$11511dc37e1f6df2$export$ea0f721b77fd5acc = (node)=>{ + if (node.type !== 'brace') return false; + if (node.commas >> 0 + node.ranges >> 0 === 0) { + node.invalid = true; + return true; + } + return false; +}; +$11511dc37e1f6df2$export$25a78c310c11373f = (block)=>{ + if (block.type !== 'brace') return false; + if (block.invalid === true || block.dollar) return true; + if (block.commas >> 0 + block.ranges >> 0 === 0) { + block.invalid = true; + return true; + } + if (block.open !== true || block.close !== true) { + block.invalid = true; + return true; + } + return false; +}; +$11511dc37e1f6df2$export$582fc44003e67ec6 = (node)=>{ + if (node.type === 'open' || node.type === 'close') return true; + return node.open === true || node.close === true; +}; +$11511dc37e1f6df2$export$533b26079ad0b4b = (nodes)=>nodes.reduce((acc, node)=>{ + if (node.type === 'text') acc.push(node.value); + if (node.type === 'range') node.type = 'text'; + return acc; + }, []); +$11511dc37e1f6df2$export$bffa455ba8c619a6 = (...args)=>{ + const result = []; + const flat = (arr)=>{ + for(let i = 0; i < arr.length; i++){ + const ele = arr[i]; + if (Array.isArray(ele)) { + flat(ele); + continue; + } + if (ele !== undefined) result.push(ele); + } + return result; + }; + flat(args); + return result; +}; + + +$f136d766036b2471$exports = (ast, options = {})=>{ + const stringify = (node, parent = {})=>{ + const invalidBlock = options.escapeInvalid && $11511dc37e1f6df2$export$25a78c310c11373f(parent); + const invalidNode = node.invalid === true && options.escapeInvalid === true; + let output = ''; + if (node.value) { + if ((invalidBlock || invalidNode) && $11511dc37e1f6df2$export$582fc44003e67ec6(node)) return '\\' + node.value; + return node.value; + } + if (node.value) return node.value; + if (node.nodes) for (const child of node.nodes)output += stringify(child); + return output; + }; + return stringify(ast); +}; + + +var $e6e9a242c9883c1d$exports = {}; +'use strict'; +var $ee7a9b49330eb764$exports = {}; +/*! + * fill-range + * + * Copyright (c) 2014-present, Jon Schlinkert. + * Licensed under the MIT License. + */ 'use strict'; + +var $db91c2b415fdddb2$exports = {}; +/*! + * to-regex-range + * + * Copyright (c) 2015-present, Jon Schlinkert. + * Released under the MIT License. + */ 'use strict'; +var $3f56f5f62ef39f4d$exports = {}; +/*! + * is-number + * + * Copyright (c) 2014-present, Jon Schlinkert. + * Released under the MIT License. + */ 'use strict'; +$3f56f5f62ef39f4d$exports = function(num) { + if (typeof num === 'number') return num - num === 0; + if (typeof num === 'string' && num.trim() !== '') return Number.isFinite ? Number.isFinite(+num) : isFinite(+num); + return false; +}; + + +const $db91c2b415fdddb2$var$toRegexRange = (min, max, options)=>{ + if ($3f56f5f62ef39f4d$exports(min) === false) throw new TypeError('toRegexRange: expected the first argument to be a number'); + if (max === void 0 || min === max) return String(min); + if ($3f56f5f62ef39f4d$exports(max) === false) throw new TypeError('toRegexRange: expected the second argument to be a number.'); + let opts = { + relaxZeros: true, + ...options + }; + if (typeof opts.strictZeros === 'boolean') opts.relaxZeros = opts.strictZeros === false; + let relax = String(opts.relaxZeros); + let shorthand = String(opts.shorthand); + let capture = String(opts.capture); + let wrap = String(opts.wrap); + let cacheKey = min + ':' + max + '=' + relax + shorthand + capture + wrap; + if ($db91c2b415fdddb2$var$toRegexRange.cache.hasOwnProperty(cacheKey)) return $db91c2b415fdddb2$var$toRegexRange.cache[cacheKey].result; + let a = Math.min(min, max); + let b = Math.max(min, max); + if (Math.abs(a - b) === 1) { + let result = min + '|' + max; + if (opts.capture) return `(${result})`; + if (opts.wrap === false) return result; + return `(?:${result})`; + } + let isPadded = $db91c2b415fdddb2$var$hasPadding(min) || $db91c2b415fdddb2$var$hasPadding(max); + let state = { + min: min, + max: max, + a: a, + b: b + }; + let positives = []; + let negatives = []; + if (isPadded) { + state.isPadded = isPadded; + state.maxLen = String(state.max).length; + } + if (a < 0) { + let newMin = b < 0 ? Math.abs(b) : 1; + negatives = $db91c2b415fdddb2$var$splitToPatterns(newMin, Math.abs(a), state, opts); + a = state.a = 0; + } + if (b >= 0) positives = $db91c2b415fdddb2$var$splitToPatterns(a, b, state, opts); + state.negatives = negatives; + state.positives = positives; + state.result = $db91c2b415fdddb2$var$collatePatterns(negatives, positives, opts); + if (opts.capture === true) state.result = `(${state.result})`; + else if (opts.wrap !== false && positives.length + negatives.length > 1) state.result = `(?:${state.result})`; + $db91c2b415fdddb2$var$toRegexRange.cache[cacheKey] = state; + return state.result; +}; +function $db91c2b415fdddb2$var$collatePatterns(neg, pos, options) { + let onlyNegative = $db91c2b415fdddb2$var$filterPatterns(neg, pos, '-', false, options) || []; + let onlyPositive = $db91c2b415fdddb2$var$filterPatterns(pos, neg, '', false, options) || []; + let intersected = $db91c2b415fdddb2$var$filterPatterns(neg, pos, '-?', true, options) || []; + let subpatterns = onlyNegative.concat(intersected).concat(onlyPositive); + return subpatterns.join('|'); +} +function $db91c2b415fdddb2$var$splitToRanges(min, max) { + let nines = 1; + let zeros = 1; + let stop = $db91c2b415fdddb2$var$countNines(min, nines); + let stops = new Set([ + max + ]); + while(min <= stop && stop <= max){ + stops.add(stop); + nines += 1; + stop = $db91c2b415fdddb2$var$countNines(min, nines); + } + stop = $db91c2b415fdddb2$var$countZeros(max + 1, zeros) - 1; + while(min < stop && stop <= max){ + stops.add(stop); + zeros += 1; + stop = $db91c2b415fdddb2$var$countZeros(max + 1, zeros) - 1; + } + stops = [ + ...stops + ]; + stops.sort($db91c2b415fdddb2$var$compare); + return stops; +} +/** + * Convert a range to a regex pattern + * @param {Number} `start` + * @param {Number} `stop` + * @return {String} + */ function $db91c2b415fdddb2$var$rangeToPattern(start, stop, options) { + if (start === stop) return { + pattern: start, + count: [], + digits: 0 + }; + let zipped = $db91c2b415fdddb2$var$zip(start, stop); + let digits = zipped.length; + let pattern = ''; + let count = 0; + for(let i = 0; i < digits; i++){ + let [startDigit, stopDigit] = zipped[i]; + if (startDigit === stopDigit) pattern += startDigit; + else if (startDigit !== '0' || stopDigit !== '9') pattern += $db91c2b415fdddb2$var$toCharacterClass(startDigit, stopDigit, options); + else count++; + } + if (count) pattern += options.shorthand === true ? '\\d' : '[0-9]'; + return { + pattern: pattern, + count: [ + count + ], + digits: digits + }; +} +function $db91c2b415fdddb2$var$splitToPatterns(min, max, tok, options) { + let ranges = $db91c2b415fdddb2$var$splitToRanges(min, max); + let tokens = []; + let start = min; + let prev; + for(let i = 0; i < ranges.length; i++){ + let max = ranges[i]; + let obj = $db91c2b415fdddb2$var$rangeToPattern(String(start), String(max), options); + let zeros = ''; + if (!tok.isPadded && prev && prev.pattern === obj.pattern) { + if (prev.count.length > 1) prev.count.pop(); + prev.count.push(obj.count[0]); + prev.string = prev.pattern + $db91c2b415fdddb2$var$toQuantifier(prev.count); + start = max + 1; + continue; + } + if (tok.isPadded) zeros = $db91c2b415fdddb2$var$padZeros(max, tok, options); + obj.string = zeros + obj.pattern + $db91c2b415fdddb2$var$toQuantifier(obj.count); + tokens.push(obj); + start = max + 1; + prev = obj; + } + return tokens; +} +function $db91c2b415fdddb2$var$filterPatterns(arr, comparison, prefix, intersection, options) { + let result = []; + for (let ele of arr){ + let { string: string } = ele; + // only push if _both_ are negative... + if (!intersection && !$db91c2b415fdddb2$var$contains(comparison, 'string', string)) result.push(prefix + string); + // or _both_ are positive + if (intersection && $db91c2b415fdddb2$var$contains(comparison, 'string', string)) result.push(prefix + string); + } + return result; +} +/** + * Zip strings + */ function $db91c2b415fdddb2$var$zip(a, b) { + let arr = []; + for(let i = 0; i < a.length; i++)arr.push([ + a[i], + b[i] + ]); + return arr; +} +function $db91c2b415fdddb2$var$compare(a, b) { + return a > b ? 1 : b > a ? -1 : 0; +} +function $db91c2b415fdddb2$var$contains(arr, key, val) { + return arr.some((ele)=>ele[key] === val); +} +function $db91c2b415fdddb2$var$countNines(min, len) { + return Number(String(min).slice(0, -len) + '9'.repeat(len)); +} +function $db91c2b415fdddb2$var$countZeros(integer, zeros) { + return integer - integer % Math.pow(10, zeros); +} +function $db91c2b415fdddb2$var$toQuantifier(digits) { + let [start = 0, stop = ''] = digits; + if (stop || start > 1) return `{${start + (stop ? ',' + stop : '')}}`; + return ''; +} +function $db91c2b415fdddb2$var$toCharacterClass(a, b, options) { + return `[${a}${b - a === 1 ? '' : '-'}${b}]`; +} +function $db91c2b415fdddb2$var$hasPadding(str) { + return /^-?(0+)\d/.test(str); +} +function $db91c2b415fdddb2$var$padZeros(value, tok, options) { + if (!tok.isPadded) return value; + let diff = Math.abs(tok.maxLen - String(value).length); + let relax = options.relaxZeros !== false; + switch(diff){ + case 0: + return ''; + case 1: + return relax ? '0?' : '0'; + case 2: + return relax ? '0{0,2}' : '00'; + default: + return relax ? `0{0,${diff}}` : `0{${diff}}`; + } +} +/** + * Cache + */ $db91c2b415fdddb2$var$toRegexRange.cache = {}; +$db91c2b415fdddb2$var$toRegexRange.clearCache = ()=>$db91c2b415fdddb2$var$toRegexRange.cache = {}; +/** + * Expose `toRegexRange` + */ $db91c2b415fdddb2$exports = $db91c2b415fdddb2$var$toRegexRange; + + +const $ee7a9b49330eb764$var$isObject = (val)=>val !== null && typeof val === 'object' && !Array.isArray(val); +const $ee7a9b49330eb764$var$transform = (toNumber)=>{ + return (value)=>toNumber === true ? Number(value) : String(value); +}; +const $ee7a9b49330eb764$var$isValidValue = (value)=>{ + return typeof value === 'number' || typeof value === 'string' && value !== ''; +}; +const $ee7a9b49330eb764$var$isNumber = (num)=>Number.isInteger(+num); +const $ee7a9b49330eb764$var$zeros = (input)=>{ + let value = `${input}`; + let index = -1; + if (value[0] === '-') value = value.slice(1); + if (value === '0') return false; + while(value[++index] === '0'); + return index > 0; +}; +const $ee7a9b49330eb764$var$stringify = (start, end, options)=>{ + if (typeof start === 'string' || typeof end === 'string') return true; + return options.stringify === true; +}; +const $ee7a9b49330eb764$var$pad = (input, maxLength, toNumber)=>{ + if (maxLength > 0) { + let dash = input[0] === '-' ? '-' : ''; + if (dash) input = input.slice(1); + input = dash + input.padStart(dash ? maxLength - 1 : maxLength, '0'); + } + if (toNumber === false) return String(input); + return input; +}; +const $ee7a9b49330eb764$var$toMaxLen = (input, maxLength)=>{ + let negative = input[0] === '-' ? '-' : ''; + if (negative) { + input = input.slice(1); + maxLength--; + } + while(input.length < maxLength)input = '0' + input; + return negative ? '-' + input : input; +}; +const $ee7a9b49330eb764$var$toSequence = (parts, options, maxLen)=>{ + parts.negatives.sort((a, b)=>a < b ? -1 : a > b ? 1 : 0); + parts.positives.sort((a, b)=>a < b ? -1 : a > b ? 1 : 0); + let prefix = options.capture ? '' : '?:'; + let positives = ''; + let negatives = ''; + let result; + if (parts.positives.length) positives = parts.positives.map((v)=>$ee7a9b49330eb764$var$toMaxLen(String(v), maxLen)).join('|'); + if (parts.negatives.length) negatives = `-(${prefix}${parts.negatives.map((v)=>$ee7a9b49330eb764$var$toMaxLen(String(v), maxLen)).join('|')})`; + if (positives && negatives) result = `${positives}|${negatives}`; + else result = positives || negatives; + if (options.wrap) return `(${prefix}${result})`; + return result; +}; +const $ee7a9b49330eb764$var$toRange = (a, b, isNumbers, options)=>{ + if (isNumbers) return $db91c2b415fdddb2$exports(a, b, { + wrap: false, + ...options + }); + let start = String.fromCharCode(a); + if (a === b) return start; + let stop = String.fromCharCode(b); + return `[${start}-${stop}]`; +}; +const $ee7a9b49330eb764$var$toRegex = (start, end, options)=>{ + if (Array.isArray(start)) { + let wrap = options.wrap === true; + let prefix = options.capture ? '' : '?:'; + return wrap ? `(${prefix}${start.join('|')})` : start.join('|'); + } + return $db91c2b415fdddb2$exports(start, end, options); +}; +const $ee7a9b49330eb764$var$rangeError = (...args)=>{ + return new RangeError('Invalid range arguments: ' + $4yQxV$util.inspect(...args)); +}; +const $ee7a9b49330eb764$var$invalidRange = (start, end, options)=>{ + if (options.strictRanges === true) throw $ee7a9b49330eb764$var$rangeError([ + start, + end + ]); + return []; +}; +const $ee7a9b49330eb764$var$invalidStep = (step, options)=>{ + if (options.strictRanges === true) throw new TypeError(`Expected step "${step}" to be a number`); + return []; +}; +const $ee7a9b49330eb764$var$fillNumbers = (start, end, step = 1, options = {})=>{ + let a = Number(start); + let b = Number(end); + if (!Number.isInteger(a) || !Number.isInteger(b)) { + if (options.strictRanges === true) throw $ee7a9b49330eb764$var$rangeError([ + start, + end + ]); + return []; + } + // fix negative zero + if (a === 0) a = 0; + if (b === 0) b = 0; + let descending = a > b; + let startString = String(start); + let endString = String(end); + let stepString = String(step); + step = Math.max(Math.abs(step), 1); + let padded = $ee7a9b49330eb764$var$zeros(startString) || $ee7a9b49330eb764$var$zeros(endString) || $ee7a9b49330eb764$var$zeros(stepString); + let maxLen = padded ? Math.max(startString.length, endString.length, stepString.length) : 0; + let toNumber = padded === false && $ee7a9b49330eb764$var$stringify(start, end, options) === false; + let format = options.transform || $ee7a9b49330eb764$var$transform(toNumber); + if (options.toRegex && step === 1) return $ee7a9b49330eb764$var$toRange($ee7a9b49330eb764$var$toMaxLen(start, maxLen), $ee7a9b49330eb764$var$toMaxLen(end, maxLen), true, options); + let parts = { + negatives: [], + positives: [] + }; + let push = (num)=>parts[num < 0 ? 'negatives' : 'positives'].push(Math.abs(num)); + let range = []; + let index = 0; + while(descending ? a >= b : a <= b){ + if (options.toRegex === true && step > 1) push(a); + else range.push($ee7a9b49330eb764$var$pad(format(a, index), maxLen, toNumber)); + a = descending ? a - step : a + step; + index++; + } + if (options.toRegex === true) return step > 1 ? $ee7a9b49330eb764$var$toSequence(parts, options, maxLen) : $ee7a9b49330eb764$var$toRegex(range, null, { + wrap: false, + ...options + }); + return range; +}; +const $ee7a9b49330eb764$var$fillLetters = (start, end, step = 1, options = {})=>{ + if (!$ee7a9b49330eb764$var$isNumber(start) && start.length > 1 || !$ee7a9b49330eb764$var$isNumber(end) && end.length > 1) return $ee7a9b49330eb764$var$invalidRange(start, end, options); + let format = options.transform || ((val)=>String.fromCharCode(val)); + let a = `${start}`.charCodeAt(0); + let b = `${end}`.charCodeAt(0); + let descending = a > b; + let min = Math.min(a, b); + let max = Math.max(a, b); + if (options.toRegex && step === 1) return $ee7a9b49330eb764$var$toRange(min, max, false, options); + let range = []; + let index = 0; + while(descending ? a >= b : a <= b){ + range.push(format(a, index)); + a = descending ? a - step : a + step; + index++; + } + if (options.toRegex === true) return $ee7a9b49330eb764$var$toRegex(range, null, { + wrap: false, + options: options + }); + return range; +}; +const $ee7a9b49330eb764$var$fill = (start, end, step, options = {})=>{ + if (end == null && $ee7a9b49330eb764$var$isValidValue(start)) return [ + start + ]; + if (!$ee7a9b49330eb764$var$isValidValue(start) || !$ee7a9b49330eb764$var$isValidValue(end)) return $ee7a9b49330eb764$var$invalidRange(start, end, options); + if (typeof step === 'function') return $ee7a9b49330eb764$var$fill(start, end, 1, { + transform: step + }); + if ($ee7a9b49330eb764$var$isObject(step)) return $ee7a9b49330eb764$var$fill(start, end, 0, step); + let opts = { + ...options + }; + if (opts.capture === true) opts.wrap = true; + step = step || opts.step || 1; + if (!$ee7a9b49330eb764$var$isNumber(step)) { + if (step != null && !$ee7a9b49330eb764$var$isObject(step)) return $ee7a9b49330eb764$var$invalidStep(step, opts); + return $ee7a9b49330eb764$var$fill(start, end, 1, step); + } + if ($ee7a9b49330eb764$var$isNumber(start) && $ee7a9b49330eb764$var$isNumber(end)) return $ee7a9b49330eb764$var$fillNumbers(start, end, step, opts); + return $ee7a9b49330eb764$var$fillLetters(start, end, Math.max(Math.abs(step), 1), opts); +}; +$ee7a9b49330eb764$exports = $ee7a9b49330eb764$var$fill; + + + +const $e6e9a242c9883c1d$var$compile = (ast, options = {})=>{ + const walk = (node, parent = {})=>{ + const invalidBlock = $11511dc37e1f6df2$export$25a78c310c11373f(parent); + const invalidNode = node.invalid === true && options.escapeInvalid === true; + const invalid = invalidBlock === true || invalidNode === true; + const prefix = options.escapeInvalid === true ? '\\' : ''; + let output = ''; + if (node.isOpen === true) return prefix + node.value; + if (node.isClose === true) { + console.log('node.isClose', prefix, node.value); + return prefix + node.value; + } + if (node.type === 'open') return invalid ? prefix + node.value : '('; + if (node.type === 'close') return invalid ? prefix + node.value : ')'; + if (node.type === 'comma') return node.prev.type === 'comma' ? '' : invalid ? node.value : '|'; + if (node.value) return node.value; + if (node.nodes && node.ranges > 0) { + const args = $11511dc37e1f6df2$export$533b26079ad0b4b(node.nodes); + const range = $ee7a9b49330eb764$exports(...args, { + ...options, + wrap: false, + toRegex: true, + strictZeros: true + }); + if (range.length !== 0) return args.length > 1 && range.length > 1 ? `(${range})` : range; + } + if (node.nodes) for (const child of node.nodes)output += walk(child, node); + return output; + }; + return walk(ast); +}; +$e6e9a242c9883c1d$exports = $e6e9a242c9883c1d$var$compile; + + +var $b16a57ac8cd6b458$exports = {}; +'use strict'; + + + +const $b16a57ac8cd6b458$var$append = (queue = '', stash = '', enclose = false)=>{ + const result = []; + queue = [].concat(queue); + stash = [].concat(stash); + if (!stash.length) return queue; + if (!queue.length) return enclose ? $11511dc37e1f6df2$export$bffa455ba8c619a6(stash).map((ele)=>`{${ele}}`) : stash; + for (const item of queue){ + if (Array.isArray(item)) for (const value of item)result.push($b16a57ac8cd6b458$var$append(value, stash, enclose)); + else for (let ele of stash){ + if (enclose === true && typeof ele === 'string') ele = `{${ele}}`; + result.push(Array.isArray(ele) ? $b16a57ac8cd6b458$var$append(item, ele, enclose) : item + ele); + } + } + return $11511dc37e1f6df2$export$bffa455ba8c619a6(result); +}; +const $b16a57ac8cd6b458$var$expand = (ast, options = {})=>{ + const rangeLimit = options.rangeLimit === undefined ? 1000 : options.rangeLimit; + const walk = (node, parent = {})=>{ + node.queue = []; + let p = parent; + let q = parent.queue; + while(p.type !== 'brace' && p.type !== 'root' && p.parent){ + p = p.parent; + q = p.queue; + } + if (node.invalid || node.dollar) { + q.push($b16a57ac8cd6b458$var$append(q.pop(), $f136d766036b2471$exports(node, options))); + return; + } + if (node.type === 'brace' && node.invalid !== true && node.nodes.length === 2) { + q.push($b16a57ac8cd6b458$var$append(q.pop(), [ + '{}' + ])); + return; + } + if (node.nodes && node.ranges > 0) { + const args = $11511dc37e1f6df2$export$533b26079ad0b4b(node.nodes); + if ($11511dc37e1f6df2$export$fbadac39f36b1e16(...args, options.step, rangeLimit)) throw new RangeError('expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.'); + let range = $ee7a9b49330eb764$exports(...args, options); + if (range.length === 0) range = $f136d766036b2471$exports(node, options); + q.push($b16a57ac8cd6b458$var$append(q.pop(), range)); + node.nodes = []; + return; + } + const enclose = $11511dc37e1f6df2$export$ea0f721b77fd5acc(node); + let queue = node.queue; + let block = node; + while(block.type !== 'brace' && block.type !== 'root' && block.parent){ + block = block.parent; + queue = block.queue; + } + for(let i = 0; i < node.nodes.length; i++){ + const child = node.nodes[i]; + if (child.type === 'comma' && node.type === 'brace') { + if (i === 1) queue.push(''); + queue.push(''); + continue; + } + if (child.type === 'close') { + q.push($b16a57ac8cd6b458$var$append(q.pop(), queue, enclose)); + continue; + } + if (child.value && child.type !== 'open') { + queue.push($b16a57ac8cd6b458$var$append(queue.pop(), child.value)); + continue; + } + if (child.nodes) walk(child, node); + } + return queue; + }; + return $11511dc37e1f6df2$export$bffa455ba8c619a6(walk(ast)); +}; +$b16a57ac8cd6b458$exports = $b16a57ac8cd6b458$var$expand; + + +var $00d95304110d83c8$exports = {}; +'use strict'; + +var $92bbcf867877940a$exports = {}; +'use strict'; +$92bbcf867877940a$exports = { + MAX_LENGTH: 10000, + // Digits + CHAR_0: '0', + /* 0 */ CHAR_9: '9', + /* 9 */ // Alphabet chars. + CHAR_UPPERCASE_A: 'A', + /* A */ CHAR_LOWERCASE_A: 'a', + /* a */ CHAR_UPPERCASE_Z: 'Z', + /* Z */ CHAR_LOWERCASE_Z: 'z', + /* z */ CHAR_LEFT_PARENTHESES: '(', + /* ( */ CHAR_RIGHT_PARENTHESES: ')', + /* ) */ CHAR_ASTERISK: '*', + /* * */ // Non-alphabetic chars. + CHAR_AMPERSAND: '&', + /* & */ CHAR_AT: '@', + /* @ */ CHAR_BACKSLASH: '\\', + /* \ */ CHAR_BACKTICK: '`', + /* ` */ CHAR_CARRIAGE_RETURN: '\r', + /* \r */ CHAR_CIRCUMFLEX_ACCENT: '^', + /* ^ */ CHAR_COLON: ':', + /* : */ CHAR_COMMA: ',', + /* , */ CHAR_DOLLAR: '$', + /* . */ CHAR_DOT: '.', + /* . */ CHAR_DOUBLE_QUOTE: '"', + /* " */ CHAR_EQUAL: '=', + /* = */ CHAR_EXCLAMATION_MARK: '!', + /* ! */ CHAR_FORM_FEED: '\f', + /* \f */ CHAR_FORWARD_SLASH: '/', + /* / */ CHAR_HASH: '#', + /* # */ CHAR_HYPHEN_MINUS: '-', + /* - */ CHAR_LEFT_ANGLE_BRACKET: '<', + /* < */ CHAR_LEFT_CURLY_BRACE: '{', + /* { */ CHAR_LEFT_SQUARE_BRACKET: '[', + /* [ */ CHAR_LINE_FEED: '\n', + /* \n */ CHAR_NO_BREAK_SPACE: '\u00A0', + /* \u00A0 */ CHAR_PERCENT: '%', + /* % */ CHAR_PLUS: '+', + /* + */ CHAR_QUESTION_MARK: '?', + /* ? */ CHAR_RIGHT_ANGLE_BRACKET: '>', + /* > */ CHAR_RIGHT_CURLY_BRACE: '}', + /* } */ CHAR_RIGHT_SQUARE_BRACKET: ']', + /* ] */ CHAR_SEMICOLON: ';', + /* ; */ CHAR_SINGLE_QUOTE: '\'', + /* ' */ CHAR_SPACE: ' ', + /* */ CHAR_TAB: '\t', + /* \t */ CHAR_UNDERSCORE: '_', + /* _ */ CHAR_VERTICAL_LINE: '|', + /* | */ CHAR_ZERO_WIDTH_NOBREAK_SPACE: '\uFEFF' /* \uFEFF */ +}; + + +var $00d95304110d83c8$require$MAX_LENGTH = $92bbcf867877940a$exports.MAX_LENGTH; +var $00d95304110d83c8$require$CHAR_BACKSLASH = $92bbcf867877940a$exports.CHAR_BACKSLASH; +var $00d95304110d83c8$require$CHAR_BACKTICK = $92bbcf867877940a$exports.CHAR_BACKTICK; +var $00d95304110d83c8$require$CHAR_COMMA = $92bbcf867877940a$exports.CHAR_COMMA; +var $00d95304110d83c8$require$CHAR_DOT = $92bbcf867877940a$exports.CHAR_DOT; +var $00d95304110d83c8$require$CHAR_LEFT_PARENTHESES = $92bbcf867877940a$exports.CHAR_LEFT_PARENTHESES; +var $00d95304110d83c8$require$CHAR_RIGHT_PARENTHESES = $92bbcf867877940a$exports.CHAR_RIGHT_PARENTHESES; +var $00d95304110d83c8$require$CHAR_LEFT_CURLY_BRACE = $92bbcf867877940a$exports.CHAR_LEFT_CURLY_BRACE; +var $00d95304110d83c8$require$CHAR_RIGHT_CURLY_BRACE = $92bbcf867877940a$exports.CHAR_RIGHT_CURLY_BRACE; +var $00d95304110d83c8$require$CHAR_LEFT_SQUARE_BRACKET = $92bbcf867877940a$exports.CHAR_LEFT_SQUARE_BRACKET; +var $00d95304110d83c8$require$CHAR_RIGHT_SQUARE_BRACKET = $92bbcf867877940a$exports.CHAR_RIGHT_SQUARE_BRACKET; +var $00d95304110d83c8$require$CHAR_DOUBLE_QUOTE = $92bbcf867877940a$exports.CHAR_DOUBLE_QUOTE; +var $00d95304110d83c8$require$CHAR_SINGLE_QUOTE = $92bbcf867877940a$exports.CHAR_SINGLE_QUOTE; +var $00d95304110d83c8$require$CHAR_NO_BREAK_SPACE = $92bbcf867877940a$exports.CHAR_NO_BREAK_SPACE; +var $00d95304110d83c8$require$CHAR_ZERO_WIDTH_NOBREAK_SPACE = $92bbcf867877940a$exports.CHAR_ZERO_WIDTH_NOBREAK_SPACE; +/** + * parse + */ const $00d95304110d83c8$var$parse = (input, options = {})=>{ + if (typeof input !== 'string') throw new TypeError('Expected a string'); + const opts = options || {}; + const max = typeof opts.maxLength === 'number' ? Math.min($00d95304110d83c8$require$MAX_LENGTH, opts.maxLength) : $00d95304110d83c8$require$MAX_LENGTH; + if (input.length > max) throw new SyntaxError(`Input length (${input.length}), exceeds max characters (${max})`); + const ast = { + type: 'root', + input: input, + nodes: [] + }; + const stack = [ + ast + ]; + let block = ast; + let prev = ast; + let brackets = 0; + const length = input.length; + let index = 0; + let depth = 0; + let value; + /** + * Helpers + */ const advance = ()=>input[index++]; + const push = (node)=>{ + if (node.type === 'text' && prev.type === 'dot') prev.type = 'text'; + if (prev && prev.type === 'text' && node.type === 'text') { + prev.value += node.value; + return; + } + block.nodes.push(node); + node.parent = block; + node.prev = prev; + prev = node; + return node; + }; + push({ + type: 'bos' + }); + while(index < length){ + block = stack[stack.length - 1]; + value = advance(); + /** + * Invalid chars + */ if (value === $00d95304110d83c8$require$CHAR_ZERO_WIDTH_NOBREAK_SPACE || value === $00d95304110d83c8$require$CHAR_NO_BREAK_SPACE) continue; + /** + * Escaped chars + */ if (value === $00d95304110d83c8$require$CHAR_BACKSLASH) { + push({ + type: 'text', + value: (options.keepEscaping ? value : '') + advance() + }); + continue; + } + /** + * Right square bracket (literal): ']' + */ if (value === $00d95304110d83c8$require$CHAR_RIGHT_SQUARE_BRACKET) { + push({ + type: 'text', + value: '\\' + value + }); + continue; + } + /** + * Left square bracket: '[' + */ if (value === $00d95304110d83c8$require$CHAR_LEFT_SQUARE_BRACKET) { + brackets++; + let next; + while(index < length && (next = advance())){ + value += next; + if (next === $00d95304110d83c8$require$CHAR_LEFT_SQUARE_BRACKET) { + brackets++; + continue; + } + if (next === $00d95304110d83c8$require$CHAR_BACKSLASH) { + value += advance(); + continue; + } + if (next === $00d95304110d83c8$require$CHAR_RIGHT_SQUARE_BRACKET) { + brackets--; + if (brackets === 0) break; + } + } + push({ + type: 'text', + value: value + }); + continue; + } + /** + * Parentheses + */ if (value === $00d95304110d83c8$require$CHAR_LEFT_PARENTHESES) { + block = push({ + type: 'paren', + nodes: [] + }); + stack.push(block); + push({ + type: 'text', + value: value + }); + continue; + } + if (value === $00d95304110d83c8$require$CHAR_RIGHT_PARENTHESES) { + if (block.type !== 'paren') { + push({ + type: 'text', + value: value + }); + continue; + } + block = stack.pop(); + push({ + type: 'text', + value: value + }); + block = stack[stack.length - 1]; + continue; + } + /** + * Quotes: '|"|` + */ if (value === $00d95304110d83c8$require$CHAR_DOUBLE_QUOTE || value === $00d95304110d83c8$require$CHAR_SINGLE_QUOTE || value === $00d95304110d83c8$require$CHAR_BACKTICK) { + const open = value; + let next; + if (options.keepQuotes !== true) value = ''; + while(index < length && (next = advance())){ + if (next === $00d95304110d83c8$require$CHAR_BACKSLASH) { + value += next + advance(); + continue; + } + if (next === open) { + if (options.keepQuotes === true) value += next; + break; + } + value += next; + } + push({ + type: 'text', + value: value + }); + continue; + } + /** + * Left curly brace: '{' + */ if (value === $00d95304110d83c8$require$CHAR_LEFT_CURLY_BRACE) { + depth++; + const dollar = prev.value && prev.value.slice(-1) === '$' || block.dollar === true; + const brace = { + type: 'brace', + open: true, + close: false, + dollar: dollar, + depth: depth, + commas: 0, + ranges: 0, + nodes: [] + }; + block = push(brace); + stack.push(block); + push({ + type: 'open', + value: value + }); + continue; + } + /** + * Right curly brace: '}' + */ if (value === $00d95304110d83c8$require$CHAR_RIGHT_CURLY_BRACE) { + if (block.type !== 'brace') { + push({ + type: 'text', + value: value + }); + continue; + } + const type = 'close'; + block = stack.pop(); + block.close = true; + push({ + type: type, + value: value + }); + depth--; + block = stack[stack.length - 1]; + continue; + } + /** + * Comma: ',' + */ if (value === $00d95304110d83c8$require$CHAR_COMMA && depth > 0) { + if (block.ranges > 0) { + block.ranges = 0; + const open = block.nodes.shift(); + block.nodes = [ + open, + { + type: 'text', + value: $f136d766036b2471$exports(block) + } + ]; + } + push({ + type: 'comma', + value: value + }); + block.commas++; + continue; + } + /** + * Dot: '.' + */ if (value === $00d95304110d83c8$require$CHAR_DOT && depth > 0 && block.commas === 0) { + const siblings = block.nodes; + if (depth === 0 || siblings.length === 0) { + push({ + type: 'text', + value: value + }); + continue; + } + if (prev.type === 'dot') { + block.range = []; + prev.value += value; + prev.type = 'range'; + if (block.nodes.length !== 3 && block.nodes.length !== 5) { + block.invalid = true; + block.ranges = 0; + prev.type = 'text'; + continue; + } + block.ranges++; + block.args = []; + continue; + } + if (prev.type === 'range') { + siblings.pop(); + const before = siblings[siblings.length - 1]; + before.value += prev.value + value; + prev = before; + block.ranges--; + continue; + } + push({ + type: 'dot', + value: value + }); + continue; + } + /** + * Text + */ push({ + type: 'text', + value: value + }); + } + // Mark imbalanced braces and brackets as invalid + do { + block = stack.pop(); + if (block.type !== 'root') { + block.nodes.forEach((node)=>{ + if (!node.nodes) { + if (node.type === 'open') node.isOpen = true; + if (node.type === 'close') node.isClose = true; + if (!node.nodes) node.type = 'text'; + node.invalid = true; + } + }); + // get the location of the block on parent.nodes (block's siblings) + const parent = stack[stack.length - 1]; + const index = parent.nodes.indexOf(block); + // replace the (invalid) block with it's nodes + parent.nodes.splice(index, 1, ...block.nodes); + } + }while (stack.length > 0); + push({ + type: 'eos' + }); + return ast; +}; +$00d95304110d83c8$exports = $00d95304110d83c8$var$parse; + + +/** + * Expand the given pattern or create a regex-compatible string. + * + * ```js + * const braces = require('braces'); + * console.log(braces('{a,b,c}', { compile: true })); //=> ['(a|b|c)'] + * console.log(braces('{a,b,c}')); //=> ['a', 'b', 'c'] + * ``` + * @param {String} `str` + * @param {Object} `options` + * @return {String} + * @api public + */ const $a76b61c2cb786308$var$braces = (input, options = {})=>{ + let output = []; + if (Array.isArray(input)) for (const pattern of input){ + const result = $a76b61c2cb786308$var$braces.create(pattern, options); + if (Array.isArray(result)) output.push(...result); + else output.push(result); + } + else output = [].concat($a76b61c2cb786308$var$braces.create(input, options)); + if (options && options.expand === true && options.nodupes === true) output = [ + ...new Set(output) + ]; + return output; +}; +/** + * Parse the given `str` with the given `options`. + * + * ```js + * // braces.parse(pattern, [, options]); + * const ast = braces.parse('a/{b,c}/d'); + * console.log(ast); + * ``` + * @param {String} pattern Brace pattern to parse + * @param {Object} options + * @return {Object} Returns an AST + * @api public + */ $a76b61c2cb786308$var$braces.parse = (input, options = {})=>$00d95304110d83c8$exports(input, options); +/** + * Creates a braces string from an AST, or an AST node. + * + * ```js + * const braces = require('braces'); + * let ast = braces.parse('foo/{a,b}/bar'); + * console.log(stringify(ast.nodes[2])); //=> '{a,b}' + * ``` + * @param {String} `input` Brace pattern or AST. + * @param {Object} `options` + * @return {Array} Returns an array of expanded values. + * @api public + */ $a76b61c2cb786308$var$braces.stringify = (input, options = {})=>{ + if (typeof input === 'string') return $f136d766036b2471$exports($a76b61c2cb786308$var$braces.parse(input, options), options); + return $f136d766036b2471$exports(input, options); +}; +/** + * Compiles a brace pattern into a regex-compatible, optimized string. + * This method is called by the main [braces](#braces) function by default. + * + * ```js + * const braces = require('braces'); + * console.log(braces.compile('a/{b,c}/d')); + * //=> ['a/(b|c)/d'] + * ``` + * @param {String} `input` Brace pattern or AST. + * @param {Object} `options` + * @return {Array} Returns an array of expanded values. + * @api public + */ $a76b61c2cb786308$var$braces.compile = (input, options = {})=>{ + if (typeof input === 'string') input = $a76b61c2cb786308$var$braces.parse(input, options); + return $e6e9a242c9883c1d$exports(input, options); +}; +/** + * Expands a brace pattern into an array. This method is called by the + * main [braces](#braces) function when `options.expand` is true. Before + * using this method it's recommended that you read the [performance notes](#performance)) + * and advantages of using [.compile](#compile) instead. + * + * ```js + * const braces = require('braces'); + * console.log(braces.expand('a/{b,c}/d')); + * //=> ['a/b/d', 'a/c/d']; + * ``` + * @param {String} `pattern` Brace pattern + * @param {Object} `options` + * @return {Array} Returns an array of expanded values. + * @api public + */ $a76b61c2cb786308$var$braces.expand = (input, options = {})=>{ + if (typeof input === 'string') input = $a76b61c2cb786308$var$braces.parse(input, options); + let result = $b16a57ac8cd6b458$exports(input, options); + // filter out empty strings if specified + if (options.noempty === true) result = result.filter(Boolean); + // filter out duplicates if specified + if (options.nodupes === true) result = [ + ...new Set(result) + ]; + return result; +}; +/** + * Processes a brace pattern and returns either an expanded array + * (if `options.expand` is true), a highly optimized regex-compatible string. + * This method is called by the main [braces](#braces) function. + * + * ```js + * const braces = require('braces'); + * console.log(braces.create('user-{200..300}/project-{a,b,c}-{1..10}')) + * //=> 'user-(20[0-9]|2[1-9][0-9]|300)/project-(a|b|c)-([1-9]|10)' + * ``` + * @param {String} `pattern` Brace pattern + * @param {Object} `options` + * @return {Array} Returns an array of expanded values. + * @api public + */ $a76b61c2cb786308$var$braces.create = (input, options = {})=>{ + if (input === '' || input.length < 3) return [ + input + ]; + return options.expand !== true ? $a76b61c2cb786308$var$braces.compile(input, options) : $a76b61c2cb786308$var$braces.expand(input, options); +}; +/** + * Expose "braces" + */ $a76b61c2cb786308$exports = $a76b61c2cb786308$var$braces; + + +var $176d7f0a91c8994d$exports = {}; +'use strict'; + +$176d7f0a91c8994d$exports = (parcelRequire("3w2vC")); + + + +var $dsyAS = parcelRequire("dsyAS"); +const $beca2e1c9294f802$var$isEmptyString = (v)=>v === '' || v === './'; +const $beca2e1c9294f802$var$hasBraces = (v)=>{ + const index = v.indexOf('{'); + return index > -1 && v.indexOf('}', index) > -1; +}; +/** + * Returns an array of strings that match one or more glob patterns. + * + * ```js + * const mm = require('micromatch'); + * // mm(list, patterns[, options]); + * + * console.log(mm(['a.js', 'a.txt'], ['*.js'])); + * //=> [ 'a.js' ] + * ``` + * @param {String|Array} `list` List of strings to match. + * @param {String|Array} `patterns` One or more glob patterns to use for matching. + * @param {Object} `options` See available [options](#options) + * @return {Array} Returns an array of matches + * @summary false + * @api public + */ const $beca2e1c9294f802$var$micromatch = (list, patterns, options)=>{ + patterns = [].concat(patterns); + list = [].concat(list); + let omit = new Set(); + let keep = new Set(); + let items = new Set(); + let negatives = 0; + let onResult = (state)=>{ + items.add(state.output); + if (options && options.onResult) options.onResult(state); + }; + for(let i = 0; i < patterns.length; i++){ + let isMatch = $176d7f0a91c8994d$exports(String(patterns[i]), { + ...options, + onResult: onResult + }, true); + let negated = isMatch.state.negated || isMatch.state.negatedExtglob; + if (negated) negatives++; + for (let item of list){ + let matched = isMatch(item, true); + let match = negated ? !matched.isMatch : matched.isMatch; + if (!match) continue; + if (negated) omit.add(matched.output); + else { + omit.delete(matched.output); + keep.add(matched.output); + } + } + } + let result = negatives === patterns.length ? [ + ...items + ] : [ + ...keep + ]; + let matches = result.filter((item)=>!omit.has(item)); + if (options && matches.length === 0) { + if (options.failglob === true) throw new Error(`No matches found for "${patterns.join(', ')}"`); + if (options.nonull === true || options.nullglob === true) return options.unescape ? patterns.map((p)=>p.replace(/\\/g, '')) : patterns; + } + return matches; +}; +/** + * Backwards compatibility + */ $beca2e1c9294f802$var$micromatch.match = $beca2e1c9294f802$var$micromatch; +/** + * Returns a matcher function from the given glob `pattern` and `options`. + * The returned function takes a string to match as its only argument and returns + * true if the string is a match. + * + * ```js + * const mm = require('micromatch'); + * // mm.matcher(pattern[, options]); + * + * const isMatch = mm.matcher('*.!(*a)'); + * console.log(isMatch('a.a')); //=> false + * console.log(isMatch('a.b')); //=> true + * ``` + * @param {String} `pattern` Glob pattern + * @param {Object} `options` + * @return {Function} Returns a matcher function. + * @api public + */ $beca2e1c9294f802$var$micromatch.matcher = (pattern, options)=>$176d7f0a91c8994d$exports(pattern, options); +/** + * Returns true if **any** of the given glob `patterns` match the specified `string`. + * + * ```js + * const mm = require('micromatch'); + * // mm.isMatch(string, patterns[, options]); + * + * console.log(mm.isMatch('a.a', ['b.*', '*.a'])); //=> true + * console.log(mm.isMatch('a.a', 'b.*')); //=> false + * ``` + * @param {String} `str` The string to test. + * @param {String|Array} `patterns` One or more glob patterns to use for matching. + * @param {Object} `[options]` See available [options](#options). + * @return {Boolean} Returns true if any patterns match `str` + * @api public + */ $beca2e1c9294f802$var$micromatch.isMatch = (str, patterns, options)=>$176d7f0a91c8994d$exports(patterns, options)(str); +/** + * Backwards compatibility + */ $beca2e1c9294f802$var$micromatch.any = $beca2e1c9294f802$var$micromatch.isMatch; +/** + * Returns a list of strings that _**do not match any**_ of the given `patterns`. + * + * ```js + * const mm = require('micromatch'); + * // mm.not(list, patterns[, options]); + * + * console.log(mm.not(['a.a', 'b.b', 'c.c'], '*.a')); + * //=> ['b.b', 'c.c'] + * ``` + * @param {Array} `list` Array of strings to match. + * @param {String|Array} `patterns` One or more glob pattern to use for matching. + * @param {Object} `options` See available [options](#options) for changing how matches are performed + * @return {Array} Returns an array of strings that **do not match** the given patterns. + * @api public + */ $beca2e1c9294f802$var$micromatch.not = (list, patterns, options = {})=>{ + patterns = [].concat(patterns).map(String); + let result = new Set(); + let items = []; + let onResult = (state)=>{ + if (options.onResult) options.onResult(state); + items.push(state.output); + }; + let matches = new Set($beca2e1c9294f802$var$micromatch(list, patterns, { + ...options, + onResult: onResult + })); + for (let item of items)if (!matches.has(item)) result.add(item); + return [ + ...result + ]; +}; +/** + * Returns true if the given `string` contains the given pattern. Similar + * to [.isMatch](#isMatch) but the pattern can match any part of the string. + * + * ```js + * var mm = require('micromatch'); + * // mm.contains(string, pattern[, options]); + * + * console.log(mm.contains('aa/bb/cc', '*b')); + * //=> true + * console.log(mm.contains('aa/bb/cc', '*d')); + * //=> false + * ``` + * @param {String} `str` The string to match. + * @param {String|Array} `patterns` Glob pattern to use for matching. + * @param {Object} `options` See available [options](#options) for changing how matches are performed + * @return {Boolean} Returns true if any of the patterns matches any part of `str`. + * @api public + */ $beca2e1c9294f802$var$micromatch.contains = (str, pattern, options)=>{ + if (typeof str !== 'string') throw new TypeError(`Expected a string: "${$4yQxV$util.inspect(str)}"`); + if (Array.isArray(pattern)) return pattern.some((p)=>$beca2e1c9294f802$var$micromatch.contains(str, p, options)); + if (typeof pattern === 'string') { + if ($beca2e1c9294f802$var$isEmptyString(str) || $beca2e1c9294f802$var$isEmptyString(pattern)) return false; + if (str.includes(pattern) || str.startsWith('./') && str.slice(2).includes(pattern)) return true; + } + return $beca2e1c9294f802$var$micromatch.isMatch(str, pattern, { + ...options, + contains: true + }); +}; +/** + * Filter the keys of the given object with the given `glob` pattern + * and `options`. Does not attempt to match nested keys. If you need this feature, + * use [glob-object][] instead. + * + * ```js + * const mm = require('micromatch'); + * // mm.matchKeys(object, patterns[, options]); + * + * const obj = { aa: 'a', ab: 'b', ac: 'c' }; + * console.log(mm.matchKeys(obj, '*b')); + * //=> { ab: 'b' } + * ``` + * @param {Object} `object` The object with keys to filter. + * @param {String|Array} `patterns` One or more glob patterns to use for matching. + * @param {Object} `options` See available [options](#options) for changing how matches are performed + * @return {Object} Returns an object with only keys that match the given patterns. + * @api public + */ $beca2e1c9294f802$var$micromatch.matchKeys = (obj, patterns, options)=>{ + if (!$dsyAS.isObject(obj)) throw new TypeError('Expected the first argument to be an object'); + let keys = $beca2e1c9294f802$var$micromatch(Object.keys(obj), patterns, options); + let res = {}; + for (let key of keys)res[key] = obj[key]; + return res; +}; +/** + * Returns true if some of the strings in the given `list` match any of the given glob `patterns`. + * + * ```js + * const mm = require('micromatch'); + * // mm.some(list, patterns[, options]); + * + * console.log(mm.some(['foo.js', 'bar.js'], ['*.js', '!foo.js'])); + * // true + * console.log(mm.some(['foo.js'], ['*.js', '!foo.js'])); + * // false + * ``` + * @param {String|Array} `list` The string or array of strings to test. Returns as soon as the first match is found. + * @param {String|Array} `patterns` One or more glob patterns to use for matching. + * @param {Object} `options` See available [options](#options) for changing how matches are performed + * @return {Boolean} Returns true if any `patterns` matches any of the strings in `list` + * @api public + */ $beca2e1c9294f802$var$micromatch.some = (list, patterns, options)=>{ + let items = [].concat(list); + for (let pattern of [].concat(patterns)){ + let isMatch = $176d7f0a91c8994d$exports(String(pattern), options); + if (items.some((item)=>isMatch(item))) return true; + } + return false; +}; +/** + * Returns true if every string in the given `list` matches + * any of the given glob `patterns`. + * + * ```js + * const mm = require('micromatch'); + * // mm.every(list, patterns[, options]); + * + * console.log(mm.every('foo.js', ['foo.js'])); + * // true + * console.log(mm.every(['foo.js', 'bar.js'], ['*.js'])); + * // true + * console.log(mm.every(['foo.js', 'bar.js'], ['*.js', '!foo.js'])); + * // false + * console.log(mm.every(['foo.js'], ['*.js', '!foo.js'])); + * // false + * ``` + * @param {String|Array} `list` The string or array of strings to test. + * @param {String|Array} `patterns` One or more glob patterns to use for matching. + * @param {Object} `options` See available [options](#options) for changing how matches are performed + * @return {Boolean} Returns true if all `patterns` matches all of the strings in `list` + * @api public + */ $beca2e1c9294f802$var$micromatch.every = (list, patterns, options)=>{ + let items = [].concat(list); + for (let pattern of [].concat(patterns)){ + let isMatch = $176d7f0a91c8994d$exports(String(pattern), options); + if (!items.every((item)=>isMatch(item))) return false; + } + return true; +}; +/** + * Returns true if **all** of the given `patterns` match + * the specified string. + * + * ```js + * const mm = require('micromatch'); + * // mm.all(string, patterns[, options]); + * + * console.log(mm.all('foo.js', ['foo.js'])); + * // true + * + * console.log(mm.all('foo.js', ['*.js', '!foo.js'])); + * // false + * + * console.log(mm.all('foo.js', ['*.js', 'foo.js'])); + * // true + * + * console.log(mm.all('foo.js', ['*.js', 'f*', '*o*', '*o.js'])); + * // true + * ``` + * @param {String|Array} `str` The string to test. + * @param {String|Array} `patterns` One or more glob patterns to use for matching. + * @param {Object} `options` See available [options](#options) for changing how matches are performed + * @return {Boolean} Returns true if any patterns match `str` + * @api public + */ $beca2e1c9294f802$var$micromatch.all = (str, patterns, options)=>{ + if (typeof str !== 'string') throw new TypeError(`Expected a string: "${$4yQxV$util.inspect(str)}"`); + return [].concat(patterns).every((p)=>$176d7f0a91c8994d$exports(p, options)(str)); +}; +/** + * Returns an array of matches captured by `pattern` in `string, or `null` if the pattern did not match. + * + * ```js + * const mm = require('micromatch'); + * // mm.capture(pattern, string[, options]); + * + * console.log(mm.capture('test/*.js', 'test/foo.js')); + * //=> ['foo'] + * console.log(mm.capture('test/*.js', 'foo/bar.css')); + * //=> null + * ``` + * @param {String} `glob` Glob pattern to use for matching. + * @param {String} `input` String to match + * @param {Object} `options` See available [options](#options) for changing how matches are performed + * @return {Array|null} Returns an array of captures if the input matches the glob pattern, otherwise `null`. + * @api public + */ $beca2e1c9294f802$var$micromatch.capture = (glob, input, options)=>{ + let posix = $dsyAS.isWindows(options); + let regex = $176d7f0a91c8994d$exports.makeRe(String(glob), { + ...options, + capture: true + }); + let match = regex.exec(posix ? $dsyAS.toPosixSlashes(input) : input); + if (match) return match.slice(1).map((v)=>v === void 0 ? '' : v); +}; +/** + * Create a regular expression from the given glob `pattern`. + * + * ```js + * const mm = require('micromatch'); + * // mm.makeRe(pattern[, options]); + * + * console.log(mm.makeRe('*.js')); + * //=> /^(?:(\.[\\\/])?(?!\.)(?=.)[^\/]*?\.js)$/ + * ``` + * @param {String} `pattern` A glob pattern to convert to regex. + * @param {Object} `options` + * @return {RegExp} Returns a regex created from the given pattern. + * @api public + */ $beca2e1c9294f802$var$micromatch.makeRe = (...args)=>$176d7f0a91c8994d$exports.makeRe(...args); +/** + * Scan a glob pattern to separate the pattern into segments. Used + * by the [split](#split) method. + * + * ```js + * const mm = require('micromatch'); + * const state = mm.scan(pattern[, options]); + * ``` + * @param {String} `pattern` + * @param {Object} `options` + * @return {Object} Returns an object with + * @api public + */ $beca2e1c9294f802$var$micromatch.scan = (...args)=>$176d7f0a91c8994d$exports.scan(...args); +/** + * Parse a glob pattern to create the source string for a regular + * expression. + * + * ```js + * const mm = require('micromatch'); + * const state = mm.parse(pattern[, options]); + * ``` + * @param {String} `glob` + * @param {Object} `options` + * @return {Object} Returns an object with useful properties and output to be used as regex source string. + * @api public + */ $beca2e1c9294f802$var$micromatch.parse = (patterns, options)=>{ + let res = []; + for (let pattern of [].concat(patterns || []))for (let str of $a76b61c2cb786308$exports(String(pattern), options))res.push($176d7f0a91c8994d$exports.parse(str, options)); + return res; +}; +/** + * Process the given brace `pattern`. + * + * ```js + * const { braces } = require('micromatch'); + * console.log(braces('foo/{a,b,c}/bar')); + * //=> [ 'foo/(a|b|c)/bar' ] + * + * console.log(braces('foo/{a,b,c}/bar', { expand: true })); + * //=> [ 'foo/a/bar', 'foo/b/bar', 'foo/c/bar' ] + * ``` + * @param {String} `pattern` String with brace pattern to process. + * @param {Object} `options` Any [options](#options) to change how expansion is performed. See the [braces][] library for all available options. + * @return {Array} + * @api public + */ $beca2e1c9294f802$var$micromatch.braces = (pattern, options)=>{ + if (typeof pattern !== 'string') throw new TypeError('Expected a string'); + if (options && options.nobrace === true || !$beca2e1c9294f802$var$hasBraces(pattern)) return [ + pattern + ]; + return $a76b61c2cb786308$exports(pattern, options); +}; +/** + * Expand braces + */ $beca2e1c9294f802$var$micromatch.braceExpand = (pattern, options)=>{ + if (typeof pattern !== 'string') throw new TypeError('Expected a string'); + return $beca2e1c9294f802$var$micromatch.braces(pattern, { + ...options, + expand: true + }); +}; +/** + * Expose micromatch + */ // exposed for tests +$beca2e1c9294f802$var$micromatch.hasBraces = $beca2e1c9294f802$var$hasBraces; +$beca2e1c9294f802$exports = $beca2e1c9294f802$var$micromatch; + + + + +function $681245173776109b$var$match(context, uri, req) { + // single path + if ($681245173776109b$var$isStringPath(context)) return $681245173776109b$var$matchSingleStringPath(context, uri); + // single glob path + if ($681245173776109b$var$isGlobPath(context)) return $681245173776109b$var$matchSingleGlobPath(context, uri); + // multi path + if (Array.isArray(context)) { + if (context.every($681245173776109b$var$isStringPath)) return $681245173776109b$var$matchMultiPath(context, uri); + if (context.every($681245173776109b$var$isGlobPath)) return $681245173776109b$var$matchMultiGlobPath(context, uri); + throw new Error($43c887b2bd03c2ba$exports.ERRORS.ERR_CONTEXT_MATCHER_INVALID_ARRAY); + } + // custom matching + if (typeof context === 'function') { + const pathname = $681245173776109b$var$getUrlPathName(uri); + return context(pathname, req); + } + throw new Error($43c887b2bd03c2ba$exports.ERRORS.ERR_CONTEXT_MATCHER_GENERIC); +} +$681245173776109b$exports.match = $681245173776109b$var$match; +/** + * @param {String} context '/api' + * @param {String} uri 'http://example.org/api/b/c/d.html' + * @return {Boolean} + */ function $681245173776109b$var$matchSingleStringPath(context, uri) { + const pathname = $681245173776109b$var$getUrlPathName(uri); + return pathname.indexOf(context) === 0; +} +function $681245173776109b$var$matchSingleGlobPath(pattern, uri) { + const pathname = $681245173776109b$var$getUrlPathName(uri); + const matches = $beca2e1c9294f802$exports([ + pathname + ], pattern); + return matches && matches.length > 0; +} +function $681245173776109b$var$matchMultiGlobPath(patternList, uri) { + return $681245173776109b$var$matchSingleGlobPath(patternList, uri); +} +/** + * @param {String} contextList ['/api', '/ajax'] + * @param {String} uri 'http://example.org/api/b/c/d.html' + * @return {Boolean} + */ function $681245173776109b$var$matchMultiPath(contextList, uri) { + let isMultiPath = false; + for (const context of contextList)if ($681245173776109b$var$matchSingleStringPath(context, uri)) { + isMultiPath = true; + break; + } + return isMultiPath; +} +/** + * Parses URI and returns RFC 3986 path + * + * @param {String} uri from req.url + * @return {String} RFC 3986 path + */ function $681245173776109b$var$getUrlPathName(uri) { + return uri && $4yQxV$url.parse(uri).pathname; +} +function $681245173776109b$var$isStringPath(context) { + return typeof context === 'string' && !$887a6a97fdc4ec01$exports(context); +} +function $681245173776109b$var$isGlobPath(context) { + return $887a6a97fdc4ec01$exports(context); +} + + +var $3bac60141a1dd903$exports = {}; +"use strict"; +Object.defineProperty($3bac60141a1dd903$exports, "__esModule", { + value: true +}); +$3bac60141a1dd903$exports.getHandlers = $3bac60141a1dd903$exports.init = void 0; + +const $3bac60141a1dd903$var$logger = (0, $296a085284369343$exports.getInstance)(); +function $3bac60141a1dd903$var$init(proxy, option) { + const handlers = $3bac60141a1dd903$var$getHandlers(option); + for (const eventName of Object.keys(handlers))proxy.on(eventName, handlers[eventName]); + // https://github.com/webpack/webpack-dev-server/issues/1642 + proxy.on('econnreset', (error, req, res, target)=>{ + $3bac60141a1dd903$var$logger.error(`[HPM] ECONNRESET: %O`, error); + }); + // https://github.com/webpack/webpack-dev-server/issues/1642#issuecomment-1104325120 + proxy.on('proxyReqWs', (proxyReq, req, socket, options, head)=>{ + socket.on('error', (error)=>{ + $3bac60141a1dd903$var$logger.error(`[HPM] WebSocket error: %O`, error); + }); + }); + $3bac60141a1dd903$var$logger.debug('[HPM] Subscribed to http-proxy events:', Object.keys(handlers)); +} +$3bac60141a1dd903$exports.init = $3bac60141a1dd903$var$init; +function $3bac60141a1dd903$var$getHandlers(options) { + // https://github.com/nodejitsu/node-http-proxy#listening-for-proxy-events + const proxyEventsMap = { + error: 'onError', + proxyReq: 'onProxyReq', + proxyReqWs: 'onProxyReqWs', + proxyRes: 'onProxyRes', + open: 'onOpen', + close: 'onClose' + }; + const handlers = {}; + for (const [eventName, onEventName] of Object.entries(proxyEventsMap)){ + // all handlers for the http-proxy events are prefixed with 'on'. + // loop through options and try to find these handlers + // and add them to the handlers object for subscription in init(). + const fnHandler = options ? options[onEventName] : null; + if (typeof fnHandler === 'function') handlers[eventName] = fnHandler; + } + // add default error handler in absence of error handler + if (typeof handlers.error !== 'function') handlers.error = $3bac60141a1dd903$var$defaultErrorHandler; + // add default close handler in absence of close handler + if (typeof handlers.close !== 'function') handlers.close = $3bac60141a1dd903$var$logClose; + return handlers; +} +$3bac60141a1dd903$exports.getHandlers = $3bac60141a1dd903$var$getHandlers; +function $3bac60141a1dd903$var$defaultErrorHandler(err, req, res) { + // Re-throw error. Not recoverable since req & res are empty. + if (!req && !res) throw err; // "Error: Must provide a proper URL as target" + const host = req.headers && req.headers.host; + const code = err.code; + if (res.writeHead && !res.headersSent) { + if (/HPE_INVALID/.test(code)) res.writeHead(502); + else switch(code){ + case 'ECONNRESET': + case 'ENOTFOUND': + case 'ECONNREFUSED': + case 'ETIMEDOUT': + res.writeHead(504); + break; + default: + res.writeHead(500); + } + } + res.end(`Error occurred while trying to proxy: ${host}${req.url}`); +} +function $3bac60141a1dd903$var$logClose(req, socket, head) { + // view disconnected websocket connections + $3bac60141a1dd903$var$logger.info('[HPM] Client disconnected'); +} + + + +var $da37c7473d9ec235$exports = {}; +"use strict"; +Object.defineProperty($da37c7473d9ec235$exports, "__esModule", { + value: true +}); +$da37c7473d9ec235$exports.createPathRewriter = void 0; + + + +const $da37c7473d9ec235$var$logger = (0, $296a085284369343$exports.getInstance)(); +/** + * Create rewrite function, to cache parsed rewrite rules. + * + * @param {Object} rewriteConfig + * @return {Function} Function to rewrite paths; This function should accept `path` (request.url) as parameter + */ function $da37c7473d9ec235$var$createPathRewriter(rewriteConfig) { + let rulesCache; + if (!$da37c7473d9ec235$var$isValidRewriteConfig(rewriteConfig)) return; + if (typeof rewriteConfig === 'function') { + const customRewriteFn = rewriteConfig; + return customRewriteFn; + } else { + rulesCache = $da37c7473d9ec235$var$parsePathRewriteRules(rewriteConfig); + return rewritePath; + } + function rewritePath(path) { + let result = path; + for (const rule of rulesCache)if (rule.regex.test(path)) { + result = result.replace(rule.regex, rule.value); + $da37c7473d9ec235$var$logger.debug('[HPM] Rewriting path from "%s" to "%s"', path, result); + break; + } + return result; + } +} +$da37c7473d9ec235$exports.createPathRewriter = $da37c7473d9ec235$var$createPathRewriter; +function $da37c7473d9ec235$var$isValidRewriteConfig(rewriteConfig) { + if (typeof rewriteConfig === 'function') return true; + else if ($07aaf79f8c423c10$exports(rewriteConfig)) return Object.keys(rewriteConfig).length !== 0; + else if (rewriteConfig === undefined || rewriteConfig === null) return false; + else throw new Error($43c887b2bd03c2ba$exports.ERRORS.ERR_PATH_REWRITER_CONFIG); +} +function $da37c7473d9ec235$var$parsePathRewriteRules(rewriteConfig) { + const rules = []; + if ($07aaf79f8c423c10$exports(rewriteConfig)) for (const [key] of Object.entries(rewriteConfig)){ + rules.push({ + regex: new RegExp(key), + value: rewriteConfig[key] + }); + $da37c7473d9ec235$var$logger.info('[HPM] Proxy rewrite rule created: "%s" ~> "%s"', key, rewriteConfig[key]); + } + return rules; +} + + +var $2e06af82cbcf332d$exports = {}; +"use strict"; +Object.defineProperty($2e06af82cbcf332d$exports, "__esModule", { + value: true +}); +$2e06af82cbcf332d$exports.getTarget = void 0; + + +const $2e06af82cbcf332d$var$logger = (0, $296a085284369343$exports.getInstance)(); +async function $2e06af82cbcf332d$var$getTarget(req, config) { + let newTarget; + const router = config.router; + if ($07aaf79f8c423c10$exports(router)) newTarget = $2e06af82cbcf332d$var$getTargetFromProxyTable(req, router); + else if (typeof router === 'function') newTarget = await router(req); + return newTarget; +} +$2e06af82cbcf332d$exports.getTarget = $2e06af82cbcf332d$var$getTarget; +function $2e06af82cbcf332d$var$getTargetFromProxyTable(req, table) { + let result; + const host = req.headers.host; + const path = req.url; + const hostAndPath = host + path; + for (const [key] of Object.entries(table)){ + if ($2e06af82cbcf332d$var$containsPath(key)) { + if (hostAndPath.indexOf(key) > -1) { + // match 'localhost:3000/api' + result = table[key]; + $2e06af82cbcf332d$var$logger.debug('[HPM] Router table match: "%s"', key); + break; + } + } else if (key === host) { + // match 'localhost:3000' + result = table[key]; + $2e06af82cbcf332d$var$logger.debug('[HPM] Router table match: "%s"', host); + break; + } + } + return result; +} +function $2e06af82cbcf332d$var$containsPath(v) { + return v.indexOf('/') > -1; +} + + +class $75f447dfc39c1196$var$HttpProxyMiddleware { + constructor(context, opts){ + this.logger = (0, $296a085284369343$exports.getInstance)(); + this.wsInternalSubscribed = false; + this.serverOnCloseSubscribed = false; + // https://github.com/Microsoft/TypeScript/wiki/'this'-in-TypeScript#red-flags-for-this + this.middleware = async (req, res, next)=>{ + var _a, _b; + if (this.shouldProxy(this.config.context, req)) try { + const activeProxyOptions = await this.prepareProxyRequest(req); + this.proxy.web(req, res, activeProxyOptions); + } catch (err) { + next(err); + } + else next(); + /** + * Get the server object to subscribe to server events; + * 'upgrade' for websocket and 'close' for graceful shutdown + * + * NOTE: + * req.socket: node >= 13 + * req.connection: node < 13 (Remove this when node 12/13 support is dropped) + */ const server = (_b = (_a = req.socket) !== null && _a !== void 0 ? _a : req.connection) === null || _b === void 0 ? void 0 : _b.server; + if (server && !this.serverOnCloseSubscribed) { + server.on('close', ()=>{ + this.logger.info('[HPM] server close signal received: closing proxy server'); + this.proxy.close(); + }); + this.serverOnCloseSubscribed = true; + } + if (this.proxyOptions.ws === true) // use initial request to access the server object to subscribe to http upgrade event + this.catchUpgradeRequest(server); + }; + this.catchUpgradeRequest = (server)=>{ + if (!this.wsInternalSubscribed) { + server.on('upgrade', this.handleUpgrade); + // prevent duplicate upgrade handling; + // in case external upgrade is also configured + this.wsInternalSubscribed = true; + } + }; + this.handleUpgrade = async (req, socket, head)=>{ + if (this.shouldProxy(this.config.context, req)) { + const activeProxyOptions = await this.prepareProxyRequest(req); + this.proxy.ws(req, socket, head, activeProxyOptions); + this.logger.info('[HPM] Upgrading to WebSocket'); + } + }; + /** + * Determine whether request should be proxied. + * + * @private + * @param {String} context [description] + * @param {Object} req [description] + * @return {Boolean} + */ this.shouldProxy = (context, req)=>{ + try { + const path = req.originalUrl || req.url; + return $681245173776109b$exports.match(context, path, req); + } catch (error) { + this.logger.error(error); + return false; + } + }; + /** + * Apply option.router and option.pathRewrite + * Order matters: + * Router uses original path for routing; + * NOT the modified path, after it has been rewritten by pathRewrite + * @param {Object} req + * @return {Object} proxy options + */ this.prepareProxyRequest = async (req)=>{ + // https://github.com/chimurai/http-proxy-middleware/issues/17 + // https://github.com/chimurai/http-proxy-middleware/issues/94 + req.url = req.originalUrl || req.url; + // store uri before it gets rewritten for logging + const originalPath = req.url; + const newProxyOptions = Object.assign({}, this.proxyOptions); + // Apply in order: + // 1. option.router + // 2. option.pathRewrite + await this.applyRouter(req, newProxyOptions); + await this.applyPathRewrite(req, this.pathRewriter); + // debug logging for both http(s) and websockets + if (this.proxyOptions.logLevel === 'debug') { + const arrow = (0, $296a085284369343$exports.getArrow)(originalPath, req.url, this.proxyOptions.target, newProxyOptions.target); + this.logger.debug('[HPM] %s %s %s %s', req.method, originalPath, arrow, newProxyOptions.target); + } + return newProxyOptions; + }; + // Modify option.target when router present. + this.applyRouter = async (req, options)=>{ + let newTarget; + if (options.router) { + newTarget = await $2e06af82cbcf332d$exports.getTarget(req, options); + if (newTarget) { + this.logger.debug('[HPM] Router new target: %s -> "%s"', options.target, newTarget); + options.target = newTarget; + } + } + }; + // rewrite path + this.applyPathRewrite = async (req, pathRewriter)=>{ + if (pathRewriter) { + const path = await pathRewriter(req.url, req); + if (typeof path === 'string') req.url = path; + else this.logger.info('[HPM] pathRewrite: No rewritten path found. (%s)', req.url); + } + }; + this.logError = (err, req, res, target)=>{ + var _a; + const hostname = ((_a = req.headers) === null || _a === void 0 ? void 0 : _a.host) || req.hostname || req.host; // (websocket) || (node0.10 || node 4/5) + const requestHref = `${hostname}${req.url}`; + const targetHref = `${target === null || target === void 0 ? void 0 : target.href}`; // target is undefined when websocket errors + const errorMessage = '[HPM] Error occurred while proxying request %s to %s [%s] (%s)'; + const errReference = 'https://nodejs.org/api/errors.html#errors_common_system_errors'; // link to Node Common Systems Errors page + this.logger.error(errorMessage, requestHref, targetHref, err.code || err, errReference); + }; + this.config = (0, $0deefb8c20d65ae2$exports.createConfig)(context, opts); + this.proxyOptions = this.config.options; + // create proxy + this.proxy = $56b8dc392108367f$exports.createProxyServer({}); + this.logger.info(`[HPM] Proxy created: ${this.config.context} -> ${this.proxyOptions.target}`); + this.pathRewriter = $da37c7473d9ec235$exports.createPathRewriter(this.proxyOptions.pathRewrite); // returns undefined when "pathRewrite" is not provided + // attach handler to http-proxy events + $3bac60141a1dd903$exports.init(this.proxy, this.proxyOptions); + // log errors for debug purpose + this.proxy.on('error', this.logError); + // https://github.com/chimurai/http-proxy-middleware/issues/19 + // expose function to upgrade externally + this.middleware.upgrade = (req, socket, head)=>{ + if (!this.wsInternalSubscribed) this.handleUpgrade(req, socket, head); + }; + } +} +$75f447dfc39c1196$exports.HttpProxyMiddleware = $75f447dfc39c1196$var$HttpProxyMiddleware; + + +function $e599b7a4408b07c2$var$createProxyMiddleware(context, options) { + const { middleware: middleware } = new $75f447dfc39c1196$exports.HttpProxyMiddleware(context, options); + return middleware; +} +$e599b7a4408b07c2$exports.createProxyMiddleware = $e599b7a4408b07c2$var$createProxyMiddleware; + +$e599b7a4408b07c2$var$__exportStar((parcelRequire("gbd4W")), $e599b7a4408b07c2$exports); + + +var $d960254efe92554b$exports = {}; +/** + * Copyright (c) 2015-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file at + * https://github.com/facebookincubator/create-react-app/blob/master/LICENSE + * + * Modified by Yuxi Evan You + */ + + +var $22309bbe18a0f333$exports = {}; +let $22309bbe18a0f333$var$p = process || {}, $22309bbe18a0f333$var$argv = $22309bbe18a0f333$var$p.argv || [], $22309bbe18a0f333$var$env = $22309bbe18a0f333$var$p.env || {}; +let $22309bbe18a0f333$var$isColorSupported = !(!!$22309bbe18a0f333$var$env.NO_COLOR || $22309bbe18a0f333$var$argv.includes("--no-color")) && (!!$22309bbe18a0f333$var$env.FORCE_COLOR || $22309bbe18a0f333$var$argv.includes("--color") || $22309bbe18a0f333$var$p.platform === "win32" || ($22309bbe18a0f333$var$p.stdout || {}).isTTY && $22309bbe18a0f333$var$env.TERM !== "dumb" || !!$22309bbe18a0f333$var$env.CI); +let $22309bbe18a0f333$var$formatter = (open, close, replace = open)=>(input)=>{ + let string = "" + input, index = string.indexOf(close, open.length); + return ~index ? open + $22309bbe18a0f333$var$replaceClose(string, close, replace, index) + close : open + string + close; + }; +let $22309bbe18a0f333$var$replaceClose = (string, close, replace, index)=>{ + let result = "", cursor = 0; + do { + result += string.substring(cursor, index) + replace; + cursor = index + close.length; + index = string.indexOf(close, cursor); + }while (~index); + return result + string.substring(cursor); +}; +let $22309bbe18a0f333$var$createColors = (enabled = $22309bbe18a0f333$var$isColorSupported)=>{ + let f = enabled ? $22309bbe18a0f333$var$formatter : ()=>String; + return { + isColorSupported: enabled, + reset: f("\x1b[0m", "\x1b[0m"), + bold: f("\x1b[1m", "\x1b[22m", "\x1b[22m\x1b[1m"), + dim: f("\x1b[2m", "\x1b[22m", "\x1b[22m\x1b[2m"), + italic: f("\x1b[3m", "\x1b[23m"), + underline: f("\x1b[4m", "\x1b[24m"), + inverse: f("\x1b[7m", "\x1b[27m"), + hidden: f("\x1b[8m", "\x1b[28m"), + strikethrough: f("\x1b[9m", "\x1b[29m"), + black: f("\x1b[30m", "\x1b[39m"), + red: f("\x1b[31m", "\x1b[39m"), + green: f("\x1b[32m", "\x1b[39m"), + yellow: f("\x1b[33m", "\x1b[39m"), + blue: f("\x1b[34m", "\x1b[39m"), + magenta: f("\x1b[35m", "\x1b[39m"), + cyan: f("\x1b[36m", "\x1b[39m"), + white: f("\x1b[37m", "\x1b[39m"), + gray: f("\x1b[90m", "\x1b[39m"), + bgBlack: f("\x1b[40m", "\x1b[49m"), + bgRed: f("\x1b[41m", "\x1b[49m"), + bgGreen: f("\x1b[42m", "\x1b[49m"), + bgYellow: f("\x1b[43m", "\x1b[49m"), + bgBlue: f("\x1b[44m", "\x1b[49m"), + bgMagenta: f("\x1b[45m", "\x1b[49m"), + bgCyan: f("\x1b[46m", "\x1b[49m"), + bgWhite: f("\x1b[47m", "\x1b[49m"), + blackBright: f("\x1b[90m", "\x1b[39m"), + redBright: f("\x1b[91m", "\x1b[39m"), + greenBright: f("\x1b[92m", "\x1b[39m"), + yellowBright: f("\x1b[93m", "\x1b[39m"), + blueBright: f("\x1b[94m", "\x1b[39m"), + magentaBright: f("\x1b[95m", "\x1b[39m"), + cyanBright: f("\x1b[96m", "\x1b[39m"), + whiteBright: f("\x1b[97m", "\x1b[39m"), + bgBlackBright: f("\x1b[100m", "\x1b[49m"), + bgRedBright: f("\x1b[101m", "\x1b[49m"), + bgGreenBright: f("\x1b[102m", "\x1b[49m"), + bgYellowBright: f("\x1b[103m", "\x1b[49m"), + bgBlueBright: f("\x1b[104m", "\x1b[49m"), + bgMagentaBright: f("\x1b[105m", "\x1b[49m"), + bgCyanBright: f("\x1b[106m", "\x1b[49m"), + bgWhiteBright: f("\x1b[107m", "\x1b[49m") + }; +}; +$22309bbe18a0f333$exports = $22309bbe18a0f333$var$createColors(); +$22309bbe18a0f333$exports.createColors = $22309bbe18a0f333$var$createColors; + + + +var $1d46c7bf77481017$exports = {}; + +var $2d992ec766727019$export$ee7a15c61bfdeb11; +var $2d992ec766727019$export$98e6a39c04603d36; +'use strict'; + +$2d992ec766727019$export$ee7a15c61bfdeb11 = (parcelRequire("juIMp")); + +$2d992ec766727019$export$98e6a39c04603d36 = (parcelRequire("6w1LA")); + + + +var $28edcfac3f857c0a$exports = {}; +$28edcfac3f857c0a$exports = { + '/Applications/Atom.app/Contents/MacOS/Atom': 'atom', + '/Applications/Atom Beta.app/Contents/MacOS/Atom Beta': '/Applications/Atom Beta.app/Contents/MacOS/Atom Beta', + '/Applications/Brackets.app/Contents/MacOS/Brackets': 'brackets', + '/Applications/Sublime Text.app/Contents/MacOS/Sublime Text': '/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl', + '/Applications/Sublime Text.app/Contents/MacOS/sublime_text': '/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl', + '/Applications/Sublime Text 2.app/Contents/MacOS/Sublime Text 2': '/Applications/Sublime Text 2.app/Contents/SharedSupport/bin/subl', + '/Applications/Sublime Text Dev.app/Contents/MacOS/Sublime Text': '/Applications/Sublime Text Dev.app/Contents/SharedSupport/bin/subl', + '/Applications/Visual Studio Code.app/Contents/MacOS/Electron': 'code', + '/Applications/Visual Studio Code - Insiders.app/Contents/MacOS/Electron': 'code-insiders', + '/Applications/VSCodium.app/Contents/MacOS/Electron': 'codium', + '/Applications/Cursor.app/Contents/MacOS/Cursor': 'cursor', + '/Applications/AppCode.app/Contents/MacOS/appcode': '/Applications/AppCode.app/Contents/MacOS/appcode', + '/Applications/CLion.app/Contents/MacOS/clion': '/Applications/CLion.app/Contents/MacOS/clion', + '/Applications/IntelliJ IDEA.app/Contents/MacOS/idea': '/Applications/IntelliJ IDEA.app/Contents/MacOS/idea', + '/Applications/IntelliJ IDEA Ultimate.app/Contents/MacOS/idea': '/Applications/IntelliJ IDEA Ultimate.app/Contents/MacOS/idea', + '/Applications/IntelliJ IDEA Community Edition.app/Contents/MacOS/idea': '/Applications/IntelliJ IDEA Community Edition.app/Contents/MacOS/idea', + '/Applications/PhpStorm.app/Contents/MacOS/phpstorm': '/Applications/PhpStorm.app/Contents/MacOS/phpstorm', + '/Applications/PyCharm.app/Contents/MacOS/pycharm': '/Applications/PyCharm.app/Contents/MacOS/pycharm', + '/Applications/PyCharm CE.app/Contents/MacOS/pycharm': '/Applications/PyCharm CE.app/Contents/MacOS/pycharm', + '/Applications/RubyMine.app/Contents/MacOS/rubymine': '/Applications/RubyMine.app/Contents/MacOS/rubymine', + '/Applications/WebStorm.app/Contents/MacOS/webstorm': '/Applications/WebStorm.app/Contents/MacOS/webstorm', + '/Applications/MacVim.app/Contents/MacOS/MacVim': 'mvim', + '/Applications/GoLand.app/Contents/MacOS/goland': '/Applications/GoLand.app/Contents/MacOS/goland', + '/Applications/Rider.app/Contents/MacOS/rider': '/Applications/Rider.app/Contents/MacOS/rider', + '/Applications/Zed.app/Contents/MacOS/zed': 'zed' +}; + + +var $f54fa0d4230bc0b6$exports = {}; +$f54fa0d4230bc0b6$exports = { + atom: 'atom', + Brackets: 'brackets', + 'code-insiders': 'code-insiders', + code: 'code', + vscodium: 'vscodium', + codium: 'codium', + emacs: 'emacs', + gvim: 'gvim', + idea: 'idea', + 'idea.sh': 'idea', + phpstorm: 'phpstorm', + 'phpstorm.sh': 'phpstorm', + pycharm: 'pycharm', + 'pycharm.sh': 'pycharm', + rubymine: 'rubymine', + 'rubymine.sh': 'rubymine', + sublime_text: 'subl', + vim: 'vim', + webstorm: 'webstorm', + 'webstorm.sh': 'webstorm', + goland: 'goland', + 'goland.sh': 'goland', + rider: 'rider', + 'rider.sh': 'rider' +}; + + +var $7048ab267d7df7a4$exports = {}; +$7048ab267d7df7a4$exports = [ + 'Brackets.exe', + 'Code.exe', + 'Code - Insiders.exe', + 'VSCodium.exe', + 'atom.exe', + 'sublime_text.exe', + 'notepad++.exe', + 'clion.exe', + 'clion64.exe', + 'idea.exe', + 'idea64.exe', + 'phpstorm.exe', + 'phpstorm64.exe', + 'pycharm.exe', + 'pycharm64.exe', + 'rubymine.exe', + 'rubymine64.exe', + 'webstorm.exe', + 'webstorm64.exe', + 'goland.exe', + 'goland64.exe', + 'rider.exe', + 'rider64.exe' +]; + + +$1d46c7bf77481017$exports = function guessEditor(specifiedEditor) { + if (specifiedEditor) return $2d992ec766727019$export$98e6a39c04603d36(specifiedEditor); + if (process.env.LAUNCH_EDITOR) return [ + process.env.LAUNCH_EDITOR + ]; + if (process.versions.webcontainer) return [ + process.env.EDITOR || 'code' + ]; + // We can find out which editor is currently running by: + // `ps x` on macOS and Linux + // `Get-Process` on Windows + try { + if (process.platform === 'darwin') { + const output = $4yQxV$child_process.execSync('ps x -o comm=', { + stdio: [ + 'pipe', + 'pipe', + 'ignore' + ] + }).toString(); + const processNames = Object.keys($28edcfac3f857c0a$exports); + const processList = output.split('\n'); + for(let i = 0; i < processNames.length; i++){ + const processName = processNames[i]; + // Find editor by exact match. + if (processList.includes(processName)) return [ + $28edcfac3f857c0a$exports[processName] + ]; + const processNameWithoutApplications = processName.replace('/Applications', ''); + // Find editor installation not in /Applications. + if (output.indexOf(processNameWithoutApplications) !== -1) { + // Use the CLI command if one is specified + if (processName !== $28edcfac3f857c0a$exports[processName]) return [ + $28edcfac3f857c0a$exports[processName] + ]; + // Use a partial match to find the running process path. If one is found, use the + // existing path since it can be running from anywhere. + const runningProcess = processList.find((procName)=>procName.endsWith(processNameWithoutApplications)); + if (runningProcess !== undefined) return [ + runningProcess + ]; + } + } + } else if (process.platform === 'win32') { + const output = $4yQxV$child_process.execSync('powershell -NoProfile -Command "Get-CimInstance -Query \\"select executablepath from win32_process where executablepath is not null\\" | % { $_.ExecutablePath }"', { + stdio: [ + 'pipe', + 'pipe', + 'ignore' + ] + }).toString(); + const runningProcesses = output.split('\r\n'); + for(let i = 0; i < runningProcesses.length; i++){ + const fullProcessPath = runningProcesses[i].trim(); + const shortProcessName = $4yQxV$path.basename(fullProcessPath); + if ($7048ab267d7df7a4$exports.indexOf(shortProcessName) !== -1) return [ + fullProcessPath + ]; + } + } else if (process.platform === 'linux') { + // --no-heading No header line + // x List all processes owned by you + // -o comm Need only names column + const output = $4yQxV$child_process.execSync('ps x --no-heading -o comm --sort=comm', { + stdio: [ + 'pipe', + 'pipe', + 'ignore' + ] + }).toString(); + const processNames = Object.keys($f54fa0d4230bc0b6$exports); + for(let i = 0; i < processNames.length; i++){ + const processName = processNames[i]; + if (output.indexOf(processName) !== -1) return [ + $f54fa0d4230bc0b6$exports[processName] + ]; + } + } + } catch (ignoreError) { + // Ignore... + } + // Last resort, use old skool env vars + if (process.env.VISUAL) return [ + process.env.VISUAL + ]; + else if (process.env.EDITOR) return [ + process.env.EDITOR + ]; + return [ + null + ]; +}; + + +var $d56d3a88c93d6a61$exports = {}; + +// normalize file/line numbers into command line args for specific editors +$d56d3a88c93d6a61$exports = function getArgumentsForPosition(editor, fileName, lineNumber, columnNumber = 1) { + const editorBasename = $4yQxV$path.basename(editor).replace(/\.(exe|cmd|bat)$/i, ''); + switch(editorBasename){ + case 'atom': + case 'Atom': + case 'Atom Beta': + case 'subl': + case 'sublime': + case 'sublime_text': + case 'wstorm': + case 'charm': + case 'zed': + return [ + `${fileName}:${lineNumber}:${columnNumber}` + ]; + case 'notepad++': + return [ + '-n' + lineNumber, + '-c' + columnNumber, + fileName + ]; + case 'vim': + case 'mvim': + return [ + `+call cursor(${lineNumber}, ${columnNumber})`, + fileName + ]; + case 'joe': + case 'gvim': + return [ + '+' + `${lineNumber}`, + fileName + ]; + case 'emacs': + case 'emacsclient': + return [ + `+${lineNumber}:${columnNumber}`, + fileName + ]; + case 'rmate': + case 'mate': + case 'mine': + return [ + '--line', + lineNumber, + fileName + ]; + case 'code': + case 'Code': + case 'code-insiders': + case 'Code - Insiders': + case 'codium': + case 'cursor': + case 'vscodium': + case 'VSCodium': + return [ + '-r', + '-g', + `${fileName}:${lineNumber}:${columnNumber}` + ]; + case 'appcode': + case 'clion': + case 'clion64': + case 'idea': + case 'idea64': + case 'phpstorm': + case 'phpstorm64': + case 'pycharm': + case 'pycharm64': + case 'rubymine': + case 'rubymine64': + case 'webstorm': + case 'webstorm64': + case 'goland': + case 'goland64': + case 'rider': + case 'rider64': + return [ + '--line', + lineNumber, + '--column', + columnNumber, + fileName + ]; + } + if (process.env.LAUNCH_EDITOR) return [ + fileName, + lineNumber, + columnNumber + ]; + // For all others, drop the lineNumber until we have + // a mapping above, since providing the lineNumber incorrectly + // can result in errors or confusing behavior. + return [ + fileName + ]; +}; + + +function $d960254efe92554b$var$wrapErrorCallback(cb) { + return (fileName, errorMessage)=>{ + console.log(); + console.log($22309bbe18a0f333$exports.red('Could not open ' + $4yQxV$path.basename(fileName) + ' in the editor.')); + if (errorMessage) { + if (errorMessage[errorMessage.length - 1] !== '.') errorMessage += '.'; + console.log($22309bbe18a0f333$exports.red('The editor process exited with an error: ' + errorMessage)); + } + console.log(); + if (cb) cb(fileName, errorMessage); + }; +} +function $d960254efe92554b$var$isTerminalEditor(editor) { + switch(editor){ + case 'vim': + case 'emacs': + case 'nano': + return true; + } + return false; +} +const $d960254efe92554b$var$positionRE = /:(\d+)(:(\d+))?$/; +function $d960254efe92554b$var$parseFile(file) { + const fileName = file.replace($d960254efe92554b$var$positionRE, ''); + const match = file.match($d960254efe92554b$var$positionRE); + const lineNumber = match && match[1]; + const columnNumber = match && match[3]; + return { + fileName: fileName, + lineNumber: lineNumber, + columnNumber: columnNumber + }; +} +let $d960254efe92554b$var$_childProcess = null; +function $d960254efe92554b$var$launchEditor(file, specifiedEditor, onErrorCallback) { + const parsed = $d960254efe92554b$var$parseFile(file); + let { fileName: fileName } = parsed; + const { lineNumber: lineNumber, columnNumber: columnNumber } = parsed; + if (!$4yQxV$fs.existsSync(fileName)) return; + if (typeof specifiedEditor === 'function') { + onErrorCallback = specifiedEditor; + specifiedEditor = undefined; + } + onErrorCallback = $d960254efe92554b$var$wrapErrorCallback(onErrorCallback); + const [editor, ...args] = $1d46c7bf77481017$exports(specifiedEditor); + if (!editor) { + onErrorCallback(fileName, null); + return; + } + if (process.platform === 'linux' && fileName.startsWith('/mnt/') && /Microsoft/i.test($4yQxV$os.release())) // Assume WSL / "Bash on Ubuntu on Windows" is being used, and + // that the file exists on the Windows file system. + // `os.release()` is "4.4.0-43-Microsoft" in the current release + // build of WSL, see: https://github.com/Microsoft/BashOnWindows/issues/423#issuecomment-221627364 + // When a Windows editor is specified, interop functionality can + // handle the path translation, but only if a relative path is used. + fileName = $4yQxV$path.relative('', fileName); + if (lineNumber) { + const extraArgs = $d56d3a88c93d6a61$exports(editor, fileName, lineNumber, columnNumber); + args.push.apply(args, extraArgs); + } else args.push(fileName); + if ($d960254efe92554b$var$_childProcess && $d960254efe92554b$var$isTerminalEditor(editor)) // There's an existing editor process already and it's attached + // to the terminal, so go kill it. Otherwise two separate editor + // instances attach to the stdin/stdout which gets confusing. + $d960254efe92554b$var$_childProcess.kill('SIGKILL'); + if (process.platform === 'win32') { + // On Windows, we need to use `exec` with the `shell: true` option, + // and some more sanitization is required. + // However, CMD.exe on Windows is vulnerable to RCE attacks given a file name of the + // form "C:\Users\myusername\Downloads\& curl 172.21.93.52". + // `create-react-app` used a safe file name pattern to validate user-provided file names: + // - https://github.com/facebook/create-react-app/pull/4866 + // - https://github.com/facebook/create-react-app/pull/5431 + // But that's not a viable solution for this package because + // it's depended on by so many meta frameworks that heavily rely on + // special characters in file names for filesystem-based routing. + // We need to at least: + // - Support `+` because it's used in SvelteKit and Vike + // - Support `$` because it's used in Remix + // - Support `(` and `)` because they are used in Analog, SolidStart, and Vike + // - Support `@` because it's used in Vike + // - Support `[` and `]` because they are widely used for [slug] + // So here we choose to use `^` to escape special characters instead. + // According to https://ss64.com/nt/syntax-esc.html, + // we can use `^` to escape `&`, `<`, `>`, `|`, `%`, and `^` + // I'm not sure if we have to escape all of these, but let's do it anyway + function escapeCmdArgs(cmdArgs) { + return cmdArgs.replace(/([&|<>,;=^])/g, '^$1'); + } + // Need to double quote the editor path in case it contains spaces; + // If the fileName contains spaces, we also need to double quote it in the arguments + // However, there's a case that it's concatenated with line number and column number + // which is separated by `:`. We need to double quote the whole string in this case. + // Also, if the string contains the escape character `^`, it needs to be quoted, too. + function doubleQuoteIfNeeded(str) { + if (str.includes('^')) // If a string includes an escaped character, not only does it need to be quoted, + // but the quotes need to be escaped too. + return `^"${str}^"`; + else if (str.includes(' ')) return `"${str}"`; + return str; + } + const launchCommand = [ + editor, + ...args.map(escapeCmdArgs) + ].map(doubleQuoteIfNeeded).join(' '); + $d960254efe92554b$var$_childProcess = $4yQxV$child_process.exec(launchCommand, { + stdio: 'inherit', + shell: true + }); + } else $d960254efe92554b$var$_childProcess = $4yQxV$child_process.spawn(editor, args, { + stdio: 'inherit' + }); + $d960254efe92554b$var$_childProcess.on('exit', function(errorCode) { + $d960254efe92554b$var$_childProcess = null; + if (errorCode) onErrorCallback(fileName, '(code ' + errorCode + ')'); + }); + $d960254efe92554b$var$_childProcess.on('error', function(error) { + let { code: code, message: message } = error; + if ('ENOENT' === code) message = `${message} ('${editor}' command does not exist in 'PATH')`; + onErrorCallback(fileName, message); + }); +} +$d960254efe92554b$exports = $d960254efe92554b$var$launchEditor; + + +var $062af1b51565441f$exports = {}; +/*! + * fresh + * Copyright(c) 2012 TJ Holowaychuk + * Copyright(c) 2016-2017 Douglas Christopher Wilson + * MIT Licensed + */ 'use strict'; +/** + * RegExp to check for no-cache token in Cache-Control. + * @private + */ var $062af1b51565441f$var$CACHE_CONTROL_NO_CACHE_REGEXP = /(?:^|,)\s*?no-cache\s*?(?:,|$)/; +/** + * Module exports. + * @public + */ $062af1b51565441f$exports = $062af1b51565441f$var$fresh; +/** + * Check freshness of the response using request and response headers. + * + * @param {Object} reqHeaders + * @param {Object} resHeaders + * @return {Boolean} + * @public + */ function $062af1b51565441f$var$fresh(reqHeaders, resHeaders) { + // fields + var modifiedSince = reqHeaders['if-modified-since']; + var noneMatch = reqHeaders['if-none-match']; + // unconditional request + if (!modifiedSince && !noneMatch) return false; + // Always return stale when Cache-Control: no-cache + // to support end-to-end reload requests + // https://tools.ietf.org/html/rfc2616#section-14.9.4 + var cacheControl = reqHeaders['cache-control']; + if (cacheControl && $062af1b51565441f$var$CACHE_CONTROL_NO_CACHE_REGEXP.test(cacheControl)) return false; + // if-none-match + if (noneMatch && noneMatch !== '*') { + var etag = resHeaders['etag']; + if (!etag) return false; + var etagStale = true; + var matches = $062af1b51565441f$var$parseTokenList(noneMatch); + for(var i = 0; i < matches.length; i++){ + var match = matches[i]; + if (match === etag || match === 'W/' + etag || 'W/' + match === etag) { + etagStale = false; + break; + } + } + if (etagStale) return false; + } + // if-modified-since + if (modifiedSince) { + var lastModified = resHeaders['last-modified']; + var modifiedStale = !lastModified || !($062af1b51565441f$var$parseHttpDate(lastModified) <= $062af1b51565441f$var$parseHttpDate(modifiedSince)); + if (modifiedStale) return false; + } + return true; +} +/** + * Parse an HTTP Date into a number. + * + * @param {string} date + * @private + */ function $062af1b51565441f$var$parseHttpDate(date) { + var timestamp = date && Date.parse(date); + // istanbul ignore next: guard against date.js Date.parse patching + return typeof timestamp === 'number' ? timestamp : NaN; +} +/** + * Parse a HTTP token list. + * + * @param {string} str + * @private + */ function $062af1b51565441f$var$parseTokenList(str) { + var end = 0; + var list = []; + var start = 0; + // gather tokens + for(var i = 0, len = str.length; i < len; i++)switch(str.charCodeAt(i)){ + case 0x20: + /* */ if (start === end) start = end = i + 1; + break; + case 0x2c: + /* , */ list.push(str.substring(start, end)); + start = end = i + 1; + break; + default: + end = i + 1; + break; + } + // final token + list.push(str.substring(start, end)); + return list; +} + + + +var $de3fbb1228a4b58f$var$$parcel$__dirname = $4yQxV$path.resolve(__dirname, "../src"); +function $de3fbb1228a4b58f$export$1c94a12dbc96ed70(res) { + res.setHeader('Access-Control-Allow-Origin', '*'); + res.setHeader('Access-Control-Allow-Methods', 'GET, HEAD, PUT, PATCH, POST, DELETE'); + res.setHeader('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept, Content-Type'); + res.setHeader('Cache-Control', 'max-age=0, must-revalidate'); +} +const $de3fbb1228a4b58f$var$SLASH_REGEX = /\//g; +const $de3fbb1228a4b58f$export$48c584f74c55688f = '/__parcel_source_root'; +const $de3fbb1228a4b58f$var$EDITOR_ENDPOINT = '/__parcel_launch_editor'; +const $de3fbb1228a4b58f$var$TEMPLATE_404 = (0, ($parcel$interopDefault($4yQxV$fs))).readFileSync((0, ($parcel$interopDefault($4yQxV$path))).join($de3fbb1228a4b58f$var$$parcel$__dirname, 'templates/404.html'), 'utf8'); +const $de3fbb1228a4b58f$var$TEMPLATE_500 = (0, ($parcel$interopDefault($4yQxV$fs))).readFileSync((0, ($parcel$interopDefault($4yQxV$path))).join($de3fbb1228a4b58f$var$$parcel$__dirname, 'templates/500.html'), 'utf8'); +class $de3fbb1228a4b58f$export$2e2bcd8739ae039 { + constructor(options){ + this.options = options; + try { + this.rootPath = new (0, $4yQxV$url.URL)(options.publicUrl).pathname; + } catch (e) { + this.rootPath = options.publicUrl; + } + this.pending = true; + this.pendingRequests = []; + this.middleware = []; + this.bundleGraph = null; + this.requestBundle = null; + this.errors = null; + } + buildStart() { + this.pending = true; + } + buildSuccess(bundleGraph, requestBundle) { + this.bundleGraph = bundleGraph; + this.requestBundle = requestBundle; + this.errors = null; + this.pending = false; + if (this.pendingRequests.length > 0) { + let pendingRequests = this.pendingRequests; + this.pendingRequests = []; + for (let [req, res] of pendingRequests)this.respond(req, res); + } + } + async buildError(options, diagnostics) { + this.pending = false; + this.errors = await Promise.all(diagnostics.map(async (d)=>{ + let ansiDiagnostic = await (0, $4yQxV$parcelutils.prettyDiagnostic)(d, options); + return { + message: (0, $4yQxV$parcelutils.ansiHtml)(ansiDiagnostic.message), + stack: ansiDiagnostic.stack ? (0, $4yQxV$parcelutils.ansiHtml)(ansiDiagnostic.stack) : null, + frames: ansiDiagnostic.frames.map((f)=>({ + location: f.location, + code: (0, $4yQxV$parcelutils.ansiHtml)(f.code) + })), + hints: ansiDiagnostic.hints.map((hint)=>(0, $4yQxV$parcelutils.ansiHtml)(hint)), + documentation: d.documentationURL ?? '' + }; + })); + } + respond(req, res) { + if (this.middleware.some((handler)=>handler(req, res))) return; + let { pathname: pathname, search: search } = (0, ($parcel$interopDefault($4yQxV$url))).parse(req.originalUrl || req.url); + if (pathname == null) pathname = '/'; + if (pathname.startsWith($de3fbb1228a4b58f$var$EDITOR_ENDPOINT) && search) { + let query = new (0, $4yQxV$url.URLSearchParams)(search); + let file = query.get('file'); + if (file) { + // File location might start with /__parcel_source_root if it came from a source map. + if (file.startsWith($de3fbb1228a4b58f$export$48c584f74c55688f)) file = file.slice($de3fbb1228a4b58f$export$48c584f74c55688f.length + 1); + (0, (/*@__PURE__*/$parcel$interopDefault($d960254efe92554b$exports)))(file); + } + res.end(); + } else if (this.errors) return this.send500(req, res); + else if ((0, ($parcel$interopDefault($4yQxV$path))).extname(pathname) === '') // If the URL doesn't start with the public path, or the URL doesn't + // have a file extension, send the main HTML bundle. + return this.sendIndex(req, res); + else if (pathname.startsWith($de3fbb1228a4b58f$export$48c584f74c55688f)) { + req.url = pathname.slice($de3fbb1228a4b58f$export$48c584f74c55688f.length); + return this.serve(this.options.inputFS, this.options.projectRoot, req, res, ()=>this.send404(req, res)); + } else if (pathname.startsWith(this.rootPath)) { + // Otherwise, serve the file from the dist folder + req.url = this.rootPath === '/' ? pathname : pathname.slice(this.rootPath.length); + if (req.url[0] !== '/') req.url = '/' + req.url; + return this.serveBundle(req, res, ()=>this.sendIndex(req, res)); + } else return this.send404(req, res); + } + sendIndex(req, res) { + if (this.bundleGraph) { + // If the main asset is an HTML file, serve it + let htmlBundleFilePaths = this.bundleGraph.getBundles().filter((bundle)=>(0, ($parcel$interopDefault($4yQxV$path))).posix.extname(bundle.name) === '.html').map((bundle)=>{ + return `/${(0, $4yQxV$parcelutils.relativePath)(this.options.distDir, bundle.filePath, false)}`; + }); + let indexFilePath = null; + let { pathname: reqURL } = (0, ($parcel$interopDefault($4yQxV$url))).parse(req.originalUrl || req.url); + if (!reqURL) reqURL = '/'; + if (htmlBundleFilePaths.length === 1) indexFilePath = htmlBundleFilePaths[0]; + else { + let bestMatch = null; + for (let bundle of htmlBundleFilePaths){ + let bundleDir = (0, ($parcel$interopDefault($4yQxV$path))).posix.dirname(bundle); + let bundleDirSubdir = bundleDir === '/' ? bundleDir : bundleDir + '/'; + let withoutExtension = (0, ($parcel$interopDefault($4yQxV$path))).posix.basename(bundle, (0, ($parcel$interopDefault($4yQxV$path))).posix.extname(bundle)); + let matchesIsIndex = null; + if (withoutExtension === 'index' && (reqURL.startsWith(bundleDirSubdir) || reqURL === bundleDir)) // bundle is /bar/index.html and (/bar or something inside of /bar/** was requested was requested) + matchesIsIndex = true; + else if (reqURL == (0, ($parcel$interopDefault($4yQxV$path))).posix.join(bundleDir, withoutExtension)) // bundle is /bar/foo.html and /bar/foo was requested + matchesIsIndex = false; + if (matchesIsIndex != null) { + let depth = bundle.match($de3fbb1228a4b58f$var$SLASH_REGEX)?.length ?? 0; + if (bestMatch == null || // This one is more specific (deeper) + bestMatch.depth < depth || // This one is just as deep, but the bundle name matches and not just index.html + bestMatch.depth === depth && bestMatch.isIndex) bestMatch = { + bundle: bundle, + depth: depth, + isIndex: matchesIsIndex + }; + } + } + indexFilePath = bestMatch?.['bundle'] ?? htmlBundleFilePaths[0]; + } + if (indexFilePath) { + req.url = indexFilePath; + this.serveBundle(req, res, ()=>this.send404(req, res)); + } else this.send404(req, res); + } else this.send404(req, res); + } + async serveBundle(req, res, next) { + let bundleGraph = this.bundleGraph; + if (bundleGraph) { + let { pathname: pathname } = (0, ($parcel$interopDefault($4yQxV$url))).parse(req.url); + if (!pathname) { + this.send500(req, res); + return; + } + let requestedPath = (0, ($parcel$interopDefault($4yQxV$path))).normalize(pathname.slice(1)); + let bundle = bundleGraph.getBundles().find((b)=>(0, ($parcel$interopDefault($4yQxV$path))).relative(this.options.distDir, b.filePath) === requestedPath); + if (!bundle) { + this.serveDist(req, res, next); + return; + } + (0, ($parcel$interopDefault($4yQxV$assert)))(this.requestBundle != null); + try { + await this.requestBundle(bundle); + } catch (err) { + this.send500(req, res); + return; + } + this.serveDist(req, res, next); + } else this.send404(req, res); + } + serveDist(req, res, next) { + return this.serve(this.options.outputFS, this.options.distDir, req, res, next); + } + async serve(fs, root, req, res, next) { + if (req.method !== 'GET' && req.method !== 'HEAD') { + // method not allowed + res.statusCode = 405; + res.setHeader('Allow', 'GET, HEAD'); + res.setHeader('Content-Length', '0'); + res.end(); + return; + } + try { + var filePath = (0, ($parcel$interopDefault($4yQxV$url))).parse(req.url).pathname || ''; + filePath = decodeURIComponent(filePath); + } catch (err) { + return this.sendError(res, 400); + } + filePath = (0, ($parcel$interopDefault($4yQxV$path))).normalize('.' + (0, ($parcel$interopDefault($4yQxV$path))).sep + filePath); + // malicious path + if (filePath.includes((0, ($parcel$interopDefault($4yQxV$path))).sep + '..' + (0, ($parcel$interopDefault($4yQxV$path))).sep)) return this.sendError(res, 403); + // join / normalize from the root dir + if (!(0, ($parcel$interopDefault($4yQxV$path))).isAbsolute(filePath)) filePath = (0, ($parcel$interopDefault($4yQxV$path))).normalize((0, ($parcel$interopDefault($4yQxV$path))).join(root, filePath)); + try { + var stat = await fs.stat(filePath); + } catch (err) { + if (err.code === 'ENOENT') return next(req, res); + return this.sendError(res, 500); + } + // Fall back to next handler if not a file + if (!stat || !stat.isFile()) return next(req, res); + if ((0, (/*@__PURE__*/$parcel$interopDefault($062af1b51565441f$exports)))(req.headers, { + 'last-modified': stat.mtime.toUTCString() + })) { + res.statusCode = 304; + res.end(); + return; + } + return (0, (/*@__PURE__*/$parcel$interopDefault($b7b844cd6a6e3bc1$exports)))(req, res, { + public: root, + cleanUrls: false + }, { + lstat: (path)=>fs.stat(path), + realpath: (path)=>fs.realpath(path), + createReadStream: (path, options)=>fs.createReadStream(path, options), + readdir: (path)=>fs.readdir(path) + }); + } + sendError(res, statusCode) { + res.statusCode = statusCode; + res.end(); + } + send404(req, res) { + res.statusCode = 404; + res.end($de3fbb1228a4b58f$var$TEMPLATE_404); + } + send500(req, res) { + res.setHeader('Content-Type', 'text/html; charset=utf-8'); + res.writeHead(500); + if (this.errors) return res.end((0, (/*@__PURE__*/$parcel$interopDefault($356506a816c2f8ec$exports))).render($de3fbb1228a4b58f$var$TEMPLATE_500, { + errors: this.errors, + hmrOptions: this.options.hmrOptions + })); + } + logAccessIfVerbose(req) { + this.options.logger.verbose({ + message: `Request: ${req.headers.host}${req.originalUrl || req.url}` + }); + } + /** + * Load proxy table from package.json and apply them. + */ async applyProxyTable(app) { + // avoid skipping project root + const fileInRoot = (0, ($parcel$interopDefault($4yQxV$path))).join(this.options.projectRoot, 'index'); + const configFilePath = await (0, $4yQxV$parcelutils.resolveConfig)(this.options.inputFS, fileInRoot, [ + '.proxyrc.cts', + '.proxyrc.mts', + '.proxyrc.ts', + '.proxyrc.cjs', + '.proxyrc.mjs', + '.proxyrc.js', + '.proxyrc', + '.proxyrc.json' + ], this.options.projectRoot); + if (!configFilePath) return this; + const filename = (0, ($parcel$interopDefault($4yQxV$path))).basename(configFilePath); + if (filename === '.proxyrc' || filename === '.proxyrc.json') { + let conf = await (0, $4yQxV$parcelutils.readConfig)(this.options.inputFS, configFilePath); + if (!conf) return this; + let cfg = conf.config; + if (typeof cfg !== 'object') { + this.options.logger.warn({ + message: "Proxy table in '.proxyrc' should be of object type. Skipping..." + }); + return this; + } + for (const [context, options] of Object.entries(cfg))// each key is interpreted as context, and value as middleware options + app.use((0, $e599b7a4408b07c2$exports.createProxyMiddleware)(context, options)); + } else { + let cfg = await this.options.packageManager.require(configFilePath, fileInRoot); + if (// $FlowFixMe + Object.prototype.toString.call(cfg) === '[object Module]') cfg = cfg.default; + if (typeof cfg !== 'function') { + this.options.logger.warn({ + message: `Proxy configuration file '${filename}' should export a function. Skipping...` + }); + return this; + } + cfg(app); + } + return this; + } + async start() { + const finalHandler = (req, res)=>{ + this.logAccessIfVerbose(req); + // Wait for the parcelInstance to finish bundling if needed + if (this.pending) this.pendingRequests.push([ + req, + res + ]); + else this.respond(req, res); + }; + const app = (0, (/*@__PURE__*/$parcel$interopDefault($dfa5f5e530ed45ac$exports)))(); + app.use((req, res, next)=>{ + $de3fbb1228a4b58f$export$1c94a12dbc96ed70(res); + next(); + }); + app.use((req, res, next)=>{ + if (req.url === '/__parcel_healthcheck') { + res.statusCode = 200; + res.write(`${Date.now()}`); + res.end(); + } else next(); + }); + await this.applyProxyTable(app); + app.use(finalHandler); + let { server: server, stop: stop } = await (0, $4yQxV$parcelutils.createHTTPServer)({ + cacheDir: this.options.cacheDir, + https: this.options.https, + inputFS: this.options.inputFS, + listener: app, + outputFS: this.options.outputFS, + host: this.options.host + }); + this.stopServer = stop; + server.listen(this.options.port, this.options.host); + return new Promise((resolve, reject)=>{ + server.once('error', (err)=>{ + this.options.logger.error({ + message: (0, $ecdc8b3d26b5fae2$export$2e2bcd8739ae039)(err, this.options.port) + }); + reject(err); + }); + server.once('listening', ()=>{ + resolve(server); + }); + }); + } + async stop() { + (0, ($parcel$interopDefault($4yQxV$assert)))(this.stopServer != null); + await this.stopServer(); + this.stopServer = null; + } +} + + +var $3b5d99b28d3ffd27$exports = {}; +'use strict'; +function $3b5d99b28d3ffd27$var$nullthrows(x, message) { + if (x != null) return x; + var error = new Error(message !== undefined ? message : 'Got unexpected ' + x); + error.framesToPop = 1; // Skip nullthrows's own stack frame. + throw error; +} +$3b5d99b28d3ffd27$exports = $3b5d99b28d3ffd27$var$nullthrows; +$3b5d99b28d3ffd27$exports.default = $3b5d99b28d3ffd27$var$nullthrows; +Object.defineProperty($3b5d99b28d3ffd27$exports, '__esModule', { + value: true +}); + + + + +var $1f9060794a347cc7$exports = {}; +'use strict'; + +var $f0Ott = parcelRequire("f0Ott"); + +$f0Ott.createWebSocketStream = (parcelRequire("8T1AD")); + +$f0Ott.Server = (parcelRequire("jPjjg")); + +$f0Ott.Receiver = (parcelRequire("4X0bZ")); + +$f0Ott.Sender = (parcelRequire("2lJ4d")); +$f0Ott.WebSocket = $f0Ott; +$f0Ott.WebSocketServer = $f0Ott.Server; +$1f9060794a347cc7$exports = $f0Ott; + + + + +const $8c0145ac7fbc1eb2$var$FS_CONCURRENCY = 64; +const $8c0145ac7fbc1eb2$var$HMR_ENDPOINT = '/__parcel_hmr'; +const $8c0145ac7fbc1eb2$var$BROADCAST_MAX_ASSETS = 10000; +class $8c0145ac7fbc1eb2$export$2e2bcd8739ae039 { + unresolvedError = null; + bundleGraph = null; + constructor(options){ + this.options = options; + } + async start() { + let server = this.options.devServer; + if (!server) { + let result = await (0, $4yQxV$parcelutils.createHTTPServer)({ + https: this.options.https, + inputFS: this.options.inputFS, + outputFS: this.options.outputFS, + cacheDir: this.options.cacheDir, + listener: (req, res)=>{ + (0, $de3fbb1228a4b58f$export$1c94a12dbc96ed70)(res); + if (!this.handle(req, res)) { + res.statusCode = 404; + res.end(); + } + } + }); + server = result.server; + server.listen(this.options.port, this.options.host); + this.stopServer = result.stop; + } else this.options.addMiddleware?.((req, res)=>this.handle(req, res)); + this.wss = new (0, (/*@__PURE__*/$parcel$interopDefault($1f9060794a347cc7$exports))).Server({ + server: server + }); + this.wss.on('connection', (ws)=>{ + if (this.unresolvedError) ws.send(JSON.stringify(this.unresolvedError)); + }); + // $FlowFixMe[incompatible-exact] + this.wss.on('error', (err)=>this.handleSocketError(err)); + } + handle(req, res) { + let { pathname: pathname } = (0, ($parcel$interopDefault($4yQxV$url))).parse(req.originalUrl || req.url); + if (pathname != null && pathname.startsWith($8c0145ac7fbc1eb2$var$HMR_ENDPOINT)) { + let id = pathname.slice($8c0145ac7fbc1eb2$var$HMR_ENDPOINT.length + 1); + let bundleGraph = (0, (/*@__PURE__*/$parcel$interopDefault($3b5d99b28d3ffd27$exports)))(this.bundleGraph); + let asset = bundleGraph.getAssetById(id); + this.getHotAssetContents(asset).then((output)=>{ + res.setHeader('Content-Type', (0, (/*@__PURE__*/$parcel$interopDefault($fd57c6e6fdaab085$exports))).contentType(asset.type)); + res.end(output); + }); + return true; + } + return false; + } + async stop() { + if (this.stopServer != null) { + await this.stopServer(); + this.stopServer = null; + } + this.wss.close(); + for (const ws of this.wss.clients)ws.terminate(); + } + async emitError(options, diagnostics) { + let renderedDiagnostics = await Promise.all(diagnostics.map((d)=>(0, $4yQxV$parcelutils.prettyDiagnostic)(d, options))); + // store the most recent error so we can notify new connections + // and so we can broadcast when the error is resolved + this.unresolvedError = { + type: 'error', + diagnostics: { + ansi: renderedDiagnostics, + html: renderedDiagnostics.map((d, i)=>{ + return { + message: (0, $4yQxV$parcelutils.ansiHtml)(d.message), + stack: (0, $4yQxV$parcelutils.ansiHtml)(d.stack), + frames: d.frames.map((f)=>({ + location: f.location, + code: (0, $4yQxV$parcelutils.ansiHtml)(f.code) + })), + hints: d.hints.map((hint)=>(0, $4yQxV$parcelutils.ansiHtml)(hint)), + documentation: diagnostics[i].documentationURL ?? '' + }; + }) + } + }; + this.broadcast(this.unresolvedError); + } + async emitUpdate(event) { + this.unresolvedError = null; + this.bundleGraph = event.bundleGraph; + let changedAssets = new Set(event.changedAssets.values()); + if (changedAssets.size === 0) return; + let queue = new (0, $4yQxV$parcelutils.PromiseQueue)({ + maxConcurrent: $8c0145ac7fbc1eb2$var$FS_CONCURRENCY + }); + for (let asset of changedAssets){ + if (asset.type !== 'js' && asset.type !== 'css') { + // If all of the incoming dependencies of the asset actually resolve to a JS asset + // rather than the original, we can mark the runtimes as changed instead. URL runtimes + // have a cache busting query param added with HMR enabled which will trigger a reload. + let runtimes = new Set(); + let incomingDeps = event.bundleGraph.getIncomingDependencies(asset); + let isOnlyReferencedByRuntimes = incomingDeps.every((dep)=>{ + let resolved = event.bundleGraph.getResolvedAsset(dep); + let isRuntime = resolved?.type === 'js' && resolved !== asset; + if (resolved && isRuntime) runtimes.add(resolved); + return isRuntime; + }); + if (isOnlyReferencedByRuntimes) { + for (let runtime of runtimes)changedAssets.add(runtime); + continue; + } + } + queue.add(async ()=>{ + let dependencies = event.bundleGraph.getDependencies(asset); + let depsByBundle = {}; + for (let bundle of event.bundleGraph.getBundlesWithAsset(asset)){ + let deps = {}; + for (let dep of dependencies){ + let resolved = event.bundleGraph.getResolvedAsset(dep, bundle); + if (resolved) deps[$8c0145ac7fbc1eb2$var$getSpecifier(dep)] = event.bundleGraph.getAssetPublicId(resolved); + } + depsByBundle[bundle.id] = deps; + } + return { + id: event.bundleGraph.getAssetPublicId(asset), + url: this.getSourceURL(asset), + type: asset.type, + // No need to send the contents of non-JS assets to the client. + output: asset.type === 'js' ? await this.getHotAssetContents(asset) : '', + envHash: asset.env.id, + outputFormat: asset.env.outputFormat, + depsByBundle: depsByBundle + }; + }); + } + let assets = await queue.run(); + if (assets.length >= $8c0145ac7fbc1eb2$var$BROADCAST_MAX_ASSETS) // Too many assets to send via an update without errors, just reload instead + this.broadcast({ + type: 'reload' + }); + else this.broadcast({ + type: 'update', + assets: assets + }); + } + async getHotAssetContents(asset) { + let output = await asset.getCode(); + let bundleGraph = (0, (/*@__PURE__*/$parcel$interopDefault($3b5d99b28d3ffd27$exports)))(this.bundleGraph); + if (asset.type === 'js') { + let publicId = bundleGraph.getAssetPublicId(asset); + output = `parcelHotUpdate['${publicId}'] = function (require, module, exports) {${output}}`; + } + let sourcemap = await asset.getMap(); + if (sourcemap) { + let sourcemapStringified = await sourcemap.stringify({ + format: 'inline', + sourceRoot: (0, $de3fbb1228a4b58f$export$48c584f74c55688f) + '/', + // $FlowFixMe + fs: asset.fs + }); + (0, ($parcel$interopDefault($4yQxV$assert)))(typeof sourcemapStringified === 'string'); + output += `\n//# sourceMappingURL=${sourcemapStringified}`; + output += `\n//# sourceURL=${encodeURI(this.getSourceURL(asset))}\n`; + } + return output; + } + getSourceURL(asset) { + let origin = ''; + if (!this.options.devServer) origin = `http://${this.options.host || 'localhost'}:${this.options.port}`; + return origin + $8c0145ac7fbc1eb2$var$HMR_ENDPOINT + '/' + asset.id; + } + handleSocketError(err) { + if (err.code === 'ECONNRESET') // This gets triggered on page refresh, ignore this + return; + this.options.logger.warn({ + origin: '@parcel/reporter-dev-server', + message: `[${err.code}]: ${err.message}`, + stack: err.stack + }); + } + broadcast(msg) { + const json = JSON.stringify(msg); + for (let ws of this.wss.clients)ws.send(json); + } +} +function $8c0145ac7fbc1eb2$var$getSpecifier(dep) { + if (typeof dep.meta.placeholder === 'string') return dep.meta.placeholder; + return dep.specifier; +} + + + +let $aad48d9e82b141b2$var$servers = new Map(); +let $aad48d9e82b141b2$var$hmrServers = new Map(); +var $aad48d9e82b141b2$export$2e2bcd8739ae039 = new (0, $4yQxV$parcelplugin.Reporter)({ + async report ({ event: event, options: options, logger: logger }) { + let { serveOptions: serveOptions, hmrOptions: hmrOptions } = options; + let server = serveOptions ? $aad48d9e82b141b2$var$servers.get(serveOptions.port) : undefined; + let hmrPort = hmrOptions && hmrOptions.port || serveOptions && serveOptions.port; + let hmrServer = hmrPort ? $aad48d9e82b141b2$var$hmrServers.get(hmrPort) : undefined; + switch(event.type){ + case 'watchStart': + { + if (serveOptions) { + // If there's already a server when watching has just started, something + // is wrong. + if (server) return logger.warn({ + message: 'Trying to create the devserver but it already exists.' + }); + let serverOptions = { + ...serveOptions, + projectRoot: options.projectRoot, + cacheDir: options.cacheDir, + // Override the target's publicUrl as that is likely meant for production. + // This could be configurable in the future. + publicUrl: serveOptions.publicUrl ?? '/', + inputFS: options.inputFS, + outputFS: options.outputFS, + packageManager: options.packageManager, + logger: logger, + hmrOptions: hmrOptions + }; + server = new (0, $de3fbb1228a4b58f$export$2e2bcd8739ae039)(serverOptions); + $aad48d9e82b141b2$var$servers.set(serveOptions.port, server); + const devServer = await server.start(); + if (hmrOptions && hmrOptions.port === serveOptions.port) { + let hmrServerOptions = { + port: serveOptions.port, + host: hmrOptions.host, + devServer: devServer, + addMiddleware: (handler)=>{ + server?.middleware.push(handler); + }, + logger: logger, + https: options.serveOptions ? options.serveOptions.https : false, + cacheDir: options.cacheDir, + inputFS: options.inputFS, + outputFS: options.outputFS + }; + hmrServer = new (0, $8c0145ac7fbc1eb2$export$2e2bcd8739ae039)(hmrServerOptions); + $aad48d9e82b141b2$var$hmrServers.set(serveOptions.port, hmrServer); + await hmrServer.start(); + return; + } + } + let port = hmrOptions?.port; + if (typeof port === 'number') { + let hmrServerOptions = { + port: port, + host: hmrOptions?.host, + logger: logger, + https: options.serveOptions ? options.serveOptions.https : false, + cacheDir: options.cacheDir, + inputFS: options.inputFS, + outputFS: options.outputFS + }; + hmrServer = new (0, $8c0145ac7fbc1eb2$export$2e2bcd8739ae039)(hmrServerOptions); + $aad48d9e82b141b2$var$hmrServers.set(port, hmrServer); + await hmrServer.start(); + } + break; + } + case 'watchEnd': + if (serveOptions) { + if (!server) return logger.warn({ + message: 'Could not shutdown devserver because it does not exist.' + }); + await server.stop(); + $aad48d9e82b141b2$var$servers.delete(server.options.port); + } + if (hmrOptions && hmrServer) { + await hmrServer.stop(); + // $FlowFixMe[prop-missing] + $aad48d9e82b141b2$var$hmrServers.delete(hmrServer.wss.options.port); + } + break; + case 'buildStart': + if (server) server.buildStart(); + break; + case 'buildProgress': + if (event.phase === 'bundled' && hmrServer && // Only send HMR updates before packaging if the built in dev server is used to ensure that + // no stale bundles are served. Otherwise emit it for 'buildSuccess'. + options.serveOptions !== false) await hmrServer.emitUpdate(event); + break; + case 'buildSuccess': + if (serveOptions) { + if (!server) return logger.warn({ + message: 'Could not send success event to devserver because it does not exist.' + }); + server.buildSuccess(event.bundleGraph, event.requestBundle); + } + if (hmrServer && options.serveOptions === false) await hmrServer.emitUpdate(event); + break; + case 'buildFailure': + // On buildFailure watchStart sometimes has not been called yet + // do not throw an additional warning here + if (server) await server.buildError(options, event.diagnostics); + if (hmrServer) await hmrServer.emitError(options, event.diagnostics); + break; + } + } +}); + + +//# sourceMappingURL=ServerReporter.js.map diff --git a/node_modules/@parcel/reporter-dev-server/lib/ServerReporter.js.map b/node_modules/@parcel/reporter-dev-server/lib/ServerReporter.js.map new file mode 100644 index 00000000..780d7396 --- /dev/null +++ b/node_modules/@parcel/reporter-dev-server/lib/ServerReporter.js.map @@ -0,0 +1 @@ +{"mappings":"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","sources":["node_modules/connect/node_modules/debug/src/index.js","node_modules/connect/node_modules/debug/src/browser.js","node_modules/connect/node_modules/debug/src/debug.js","node_modules/connect/node_modules/ms/index.js","node_modules/connect/node_modules/debug/src/node.js","node_modules/finalhandler/node_modules/debug/src/index.js","node_modules/finalhandler/node_modules/debug/src/browser.js","node_modules/finalhandler/node_modules/debug/src/debug.js","node_modules/finalhandler/node_modules/ms/index.js","node_modules/finalhandler/node_modules/debug/src/node.js","node_modules/utils-merge/index.js","node_modules/mime-db/db.json","node_modules/http-proxy/lib/http-proxy.js","node_modules/http-proxy/lib/http-proxy/index.js","node_modules/eventemitter3/index.js","node_modules/http-proxy/lib/http-proxy/passes/web-incoming.js","node_modules/http-proxy/lib/http-proxy/passes/web-outgoing.js","node_modules/http-proxy/lib/http-proxy/common.js","node_modules/requires-port/index.js","node_modules/follow-redirects/index.js","node_modules/follow-redirects/debug.js","node_modules/debug/src/index.js","node_modules/debug/src/browser.js","node_modules/debug/src/common.js","node_modules/ms/index.js","node_modules/debug/src/node.js","node_modules/supports-color/index.js","node_modules/has-flag/index.js","node_modules/http-proxy/lib/http-proxy/passes/ws-incoming.js","node_modules/picomatch/lib/picomatch.js","node_modules/picomatch/lib/scan.js","node_modules/picomatch/lib/utils.js","node_modules/picomatch/lib/constants.js","node_modules/picomatch/lib/parse.js","node_modules/http-proxy-middleware/dist/handlers/index.js","node_modules/http-proxy-middleware/dist/handlers/public.js","node_modules/http-proxy-middleware/dist/handlers/response-interceptor.js","node_modules/http-proxy-middleware/dist/handlers/fix-request-body.js","node_modules/shell-quote/quote.js","node_modules/shell-quote/parse.js","node_modules/ws/lib/receiver.js","node_modules/ws/lib/permessage-deflate.js","node_modules/ws/lib/buffer-util.js","node_modules/ws/lib/constants.js","node_modules/ws/lib/limiter.js","node_modules/ws/lib/validation.js","node_modules/ws/lib/sender.js","node_modules/ws/lib/stream.js","node_modules/ws/lib/websocket-server.js","node_modules/ws/lib/extension.js","node_modules/ws/lib/subprotocol.js","node_modules/ws/lib/websocket.js","node_modules/ws/lib/event-target.js","packages/reporters/dev-server/src/ServerReporter.js","packages/reporters/dev-server/src/HMRServer.js","packages/reporters/dev-server/src/Server.js","packages/reporters/dev-server/src/serverErrors.js","node_modules/ejs/lib/ejs.js","node_modules/ejs/lib/utils.js","node_modules/ejs/package.json","node_modules/connect/index.js","node_modules/finalhandler/index.js","node_modules/encodeurl/index.js","node_modules/escape-html/index.js","node_modules/on-finished/index.js","node_modules/ee-first/index.js","node_modules/parseurl/index.js","node_modules/statuses/index.js","node_modules/statuses/codes.json","node_modules/unpipe/index.js","node_modules/serve-handler/src/index.js","node_modules/serve-handler/src/glob-slash.js","node_modules/minimatch/minimatch.js","node_modules/minimatch/node_modules/brace-expansion/index.js","node_modules/concat-map/index.js","node_modules/balanced-match/index.js","node_modules/path-to-regexp/index.js","node_modules/mime-types/index.js","node_modules/mime-db/index.js","node_modules/bytes/index.js","node_modules/content-disposition/index.js","node_modules/path-is-inside/lib/path-is-inside.js","node_modules/range-parser/index.js","node_modules/serve-handler/src/directory.js","node_modules/serve-handler/src/error.js","node_modules/http-proxy-middleware/dist/index.js","node_modules/http-proxy-middleware/dist/http-proxy-middleware.js","node_modules/http-proxy/index.js","node_modules/http-proxy-middleware/dist/config-factory.js","node_modules/http-proxy-middleware/node_modules/is-plain-obj/index.js","node_modules/http-proxy-middleware/dist/errors.js","node_modules/http-proxy-middleware/dist/logger.js","node_modules/http-proxy-middleware/dist/context-matcher.js","node_modules/is-glob/index.js","node_modules/is-extglob/index.js","node_modules/micromatch/index.js","node_modules/braces/index.js","node_modules/braces/lib/stringify.js","node_modules/braces/lib/utils.js","node_modules/braces/lib/compile.js","node_modules/fill-range/index.js","node_modules/to-regex-range/index.js","node_modules/to-regex-range/node_modules/is-number/index.js","node_modules/braces/lib/expand.js","node_modules/braces/lib/parse.js","node_modules/braces/lib/constants.js","node_modules/picomatch/index.js","node_modules/http-proxy-middleware/dist/_handlers.js","node_modules/http-proxy-middleware/dist/path-rewriter.js","node_modules/http-proxy-middleware/dist/router.js","node_modules/launch-editor/index.js","node_modules/picocolors/picocolors.js","node_modules/launch-editor/guess.js","node_modules/shell-quote/index.js","node_modules/launch-editor/editor-info/macos.js","node_modules/launch-editor/editor-info/linux.js","node_modules/launch-editor/editor-info/windows.js","node_modules/launch-editor/get-args.js","node_modules/fresh/index.js","node_modules/nullthrows/nullthrows.js","node_modules/ws/index.js"],"sourcesContent":["/**\n * Detect Electron renderer process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process !== 'undefined' && process.type === 'renderer') {\n module.exports = require('./browser.js');\n} else {\n module.exports = require('./node.js');\n}\n","/**\n * This is the web browser implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = 'undefined' != typeof chrome\n && 'undefined' != typeof chrome.storage\n ? chrome.storage.local\n : localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n 'lightseagreen',\n 'forestgreen',\n 'goldenrod',\n 'dodgerblue',\n 'darkorchid',\n 'crimson'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\nfunction useColors() {\n // NB: In an Electron preload script, document will be defined but not fully\n // initialized. Since we know we're in Chrome, we'll just detect this case\n // explicitly\n if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {\n return true;\n }\n\n // is webkit? http://stackoverflow.com/a/16459606/376773\n // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n // is firebug? http://stackoverflow.com/a/398120/376773\n (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n // is firefox >= v31?\n // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n // double check webkit in userAgent just in case we are in a worker\n (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nexports.formatters.j = function(v) {\n try {\n return JSON.stringify(v);\n } catch (err) {\n return '[UnexpectedJSONParseError]: ' + err.message;\n }\n};\n\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n var useColors = this.useColors;\n\n args[0] = (useColors ? '%c' : '')\n + this.namespace\n + (useColors ? ' %c' : ' ')\n + args[0]\n + (useColors ? '%c ' : ' ')\n + '+' + exports.humanize(this.diff);\n\n if (!useColors) return;\n\n var c = 'color: ' + this.color;\n args.splice(1, 0, c, 'color: inherit')\n\n // the final \"%c\" is somewhat tricky, because there could be other\n // arguments passed either before or after the %c, so we need to\n // figure out the correct index to insert the CSS into\n var index = 0;\n var lastC = 0;\n args[0].replace(/%[a-zA-Z%]/g, function(match) {\n if ('%%' === match) return;\n index++;\n if ('%c' === match) {\n // we only are interested in the *last* %c\n // (the user may have provided their own)\n lastC = index;\n }\n });\n\n args.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\nfunction log() {\n // this hackery is required for IE8/9, where\n // the `console.log` function doesn't have 'apply'\n return 'object' === typeof console\n && console.log\n && Function.prototype.apply.call(console.log, console, arguments);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n try {\n if (null == namespaces) {\n exports.storage.removeItem('debug');\n } else {\n exports.storage.debug = namespaces;\n }\n } catch(e) {}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n var r;\n try {\n r = exports.storage.debug;\n } catch(e) {}\n\n // If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n if (!r && typeof process !== 'undefined' && 'env' in process) {\n r = process.env.DEBUG;\n }\n\n return r;\n}\n\n/**\n * Enable namespaces listed in `localStorage.debug` initially.\n */\n\nexports.enable(load());\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n try {\n return window.localStorage;\n } catch (e) {}\n}\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = createDebug.debug = createDebug['default'] = createDebug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = require('ms');\n\n/**\n * The currently active debug mode names, and names to skip.\n */\n\nexports.names = [];\nexports.skips = [];\n\n/**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n */\n\nexports.formatters = {};\n\n/**\n * Previous log timestamp.\n */\n\nvar prevTime;\n\n/**\n * Select a color.\n * @param {String} namespace\n * @return {Number}\n * @api private\n */\n\nfunction selectColor(namespace) {\n var hash = 0, i;\n\n for (i in namespace) {\n hash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n hash |= 0; // Convert to 32bit integer\n }\n\n return exports.colors[Math.abs(hash) % exports.colors.length];\n}\n\n/**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\nfunction createDebug(namespace) {\n\n function debug() {\n // disabled?\n if (!debug.enabled) return;\n\n var self = debug;\n\n // set `diff` timestamp\n var curr = +new Date();\n var ms = curr - (prevTime || curr);\n self.diff = ms;\n self.prev = prevTime;\n self.curr = curr;\n prevTime = curr;\n\n // turn the `arguments` into a proper Array\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n\n args[0] = exports.coerce(args[0]);\n\n if ('string' !== typeof args[0]) {\n // anything else let's inspect with %O\n args.unshift('%O');\n }\n\n // apply any `formatters` transformations\n var index = 0;\n args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {\n // if we encounter an escaped % then don't increase the array index\n if (match === '%%') return match;\n index++;\n var formatter = exports.formatters[format];\n if ('function' === typeof formatter) {\n var val = args[index];\n match = formatter.call(self, val);\n\n // now we need to remove `args[index]` since it's inlined in the `format`\n args.splice(index, 1);\n index--;\n }\n return match;\n });\n\n // apply env-specific formatting (colors, etc.)\n exports.formatArgs.call(self, args);\n\n var logFn = debug.log || exports.log || console.log.bind(console);\n logFn.apply(self, args);\n }\n\n debug.namespace = namespace;\n debug.enabled = exports.enabled(namespace);\n debug.useColors = exports.useColors();\n debug.color = selectColor(namespace);\n\n // env-specific initialization logic for debug instances\n if ('function' === typeof exports.init) {\n exports.init(debug);\n }\n\n return debug;\n}\n\n/**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\nfunction enable(namespaces) {\n exports.save(namespaces);\n\n exports.names = [];\n exports.skips = [];\n\n var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n var len = split.length;\n\n for (var i = 0; i < len; i++) {\n if (!split[i]) continue; // ignore empty strings\n namespaces = split[i].replace(/\\*/g, '.*?');\n if (namespaces[0] === '-') {\n exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n } else {\n exports.names.push(new RegExp('^' + namespaces + '$'));\n }\n }\n}\n\n/**\n * Disable debug output.\n *\n * @api public\n */\n\nfunction disable() {\n exports.enable('');\n}\n\n/**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\nfunction enabled(name) {\n var i, len;\n for (i = 0, len = exports.skips.length; i < len; i++) {\n if (exports.skips[i].test(name)) {\n return false;\n }\n }\n for (i = 0, len = exports.names.length; i < len; i++) {\n if (exports.names[i].test(name)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\nfunction coerce(val) {\n if (val instanceof Error) return val.stack || val.message;\n return val;\n}\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isNaN(val) === false) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n if (ms >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (ms >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (ms >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (ms >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n return plural(ms, d, 'day') ||\n plural(ms, h, 'hour') ||\n plural(ms, m, 'minute') ||\n plural(ms, s, 'second') ||\n ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, n, name) {\n if (ms < n) {\n return;\n }\n if (ms < n * 1.5) {\n return Math.floor(ms / n) + ' ' + name;\n }\n return Math.ceil(ms / n) + ' ' + name + 's';\n}\n","/**\n * Module dependencies.\n */\n\nvar tty = require('tty');\nvar util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(function (key) {\n return /^debug_/i.test(key);\n}).reduce(function (obj, key) {\n // camel-case\n var prop = key\n .substring(6)\n .toLowerCase()\n .replace(/_([a-z])/g, function (_, k) { return k.toUpperCase() });\n\n // coerce string value into JS value\n var val = process.env[key];\n if (/^(yes|on|true|enabled)$/i.test(val)) val = true;\n else if (/^(no|off|false|disabled)$/i.test(val)) val = false;\n else if (val === 'null') val = null;\n else val = Number(val);\n\n obj[prop] = val;\n return obj;\n}, {});\n\n/**\n * The file descriptor to write the `debug()` calls to.\n * Set the `DEBUG_FD` env variable to override with another value. i.e.:\n *\n * $ DEBUG_FD=3 node script.js 3>debug.log\n */\n\nvar fd = parseInt(process.env.DEBUG_FD, 10) || 2;\n\nif (1 !== fd && 2 !== fd) {\n util.deprecate(function(){}, 'except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)')()\n}\n\nvar stream = 1 === fd ? process.stdout :\n 2 === fd ? process.stderr :\n createWritableStdioStream(fd);\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n return 'colors' in exports.inspectOpts\n ? Boolean(exports.inspectOpts.colors)\n : tty.isatty(fd);\n}\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nexports.formatters.o = function(v) {\n this.inspectOpts.colors = this.useColors;\n return util.inspect(v, this.inspectOpts)\n .split('\\n').map(function(str) {\n return str.trim()\n }).join(' ');\n};\n\n/**\n * Map %o to `util.inspect()`, allowing multiple lines if needed.\n */\n\nexports.formatters.O = function(v) {\n this.inspectOpts.colors = this.useColors;\n return util.inspect(v, this.inspectOpts);\n};\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n var name = this.namespace;\n var useColors = this.useColors;\n\n if (useColors) {\n var c = this.color;\n var prefix = ' \\u001b[3' + c + ';1m' + name + ' ' + '\\u001b[0m';\n\n args[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n args.push('\\u001b[3' + c + 'm+' + exports.humanize(this.diff) + '\\u001b[0m');\n } else {\n args[0] = new Date().toUTCString()\n + ' ' + name + ' ' + args[0];\n }\n}\n\n/**\n * Invokes `util.format()` with the specified arguments and writes to `stream`.\n */\n\nfunction log() {\n return stream.write(util.format.apply(util, arguments) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n if (null == namespaces) {\n // If you set a process.env field to null or undefined, it gets cast to the\n // string 'null' or 'undefined'. Just delete instead.\n delete process.env.DEBUG;\n } else {\n process.env.DEBUG = namespaces;\n }\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n return process.env.DEBUG;\n}\n\n/**\n * Copied from `node/src/node.js`.\n *\n * XXX: It's lame that node doesn't expose this API out-of-the-box. It also\n * relies on the undocumented `tty_wrap.guessHandleType()` which is also lame.\n */\n\nfunction createWritableStdioStream (fd) {\n var stream;\n var tty_wrap = process.binding('tty_wrap');\n\n // Note stream._type is used for test-module-load-list.js\n\n switch (tty_wrap.guessHandleType(fd)) {\n case 'TTY':\n stream = new tty.WriteStream(fd);\n stream._type = 'tty';\n\n // Hack to have stream not keep the event loop alive.\n // See https://github.com/joyent/node/issues/1726\n if (stream._handle && stream._handle.unref) {\n stream._handle.unref();\n }\n break;\n\n case 'FILE':\n var fs = require('fs');\n stream = new fs.SyncWriteStream(fd, { autoClose: false });\n stream._type = 'fs';\n break;\n\n case 'PIPE':\n case 'TCP':\n var net = require('net');\n stream = new net.Socket({\n fd: fd,\n readable: false,\n writable: true\n });\n\n // FIXME Should probably have an option in net.Socket to create a\n // stream from an existing fd which is writable only. But for now\n // we'll just add this hack and set the `readable` member to false.\n // Test: ./node test/fixtures/echo.js < /etc/passwd\n stream.readable = false;\n stream.read = null;\n stream._type = 'pipe';\n\n // FIXME Hack to have stream not keep the event loop alive.\n // See https://github.com/joyent/node/issues/1726\n if (stream._handle && stream._handle.unref) {\n stream._handle.unref();\n }\n break;\n\n default:\n // Probably an error on in uv_guess_handle()\n throw new Error('Implement me. Unknown stream file type!');\n }\n\n // For supporting legacy API we put the FD here.\n stream.fd = fd;\n\n stream._isStdio = true;\n\n return stream;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init (debug) {\n debug.inspectOpts = {};\n\n var keys = Object.keys(exports.inspectOpts);\n for (var i = 0; i < keys.length; i++) {\n debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n }\n}\n\n/**\n * Enable namespaces listed in `process.env.DEBUG` initially.\n */\n\nexports.enable(load());\n","/**\n * Detect Electron renderer process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process !== 'undefined' && process.type === 'renderer') {\n module.exports = require('./browser.js');\n} else {\n module.exports = require('./node.js');\n}\n","/**\n * This is the web browser implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = 'undefined' != typeof chrome\n && 'undefined' != typeof chrome.storage\n ? chrome.storage.local\n : localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n 'lightseagreen',\n 'forestgreen',\n 'goldenrod',\n 'dodgerblue',\n 'darkorchid',\n 'crimson'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\nfunction useColors() {\n // NB: In an Electron preload script, document will be defined but not fully\n // initialized. Since we know we're in Chrome, we'll just detect this case\n // explicitly\n if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {\n return true;\n }\n\n // is webkit? http://stackoverflow.com/a/16459606/376773\n // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n // is firebug? http://stackoverflow.com/a/398120/376773\n (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n // is firefox >= v31?\n // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n // double check webkit in userAgent just in case we are in a worker\n (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nexports.formatters.j = function(v) {\n try {\n return JSON.stringify(v);\n } catch (err) {\n return '[UnexpectedJSONParseError]: ' + err.message;\n }\n};\n\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n var useColors = this.useColors;\n\n args[0] = (useColors ? '%c' : '')\n + this.namespace\n + (useColors ? ' %c' : ' ')\n + args[0]\n + (useColors ? '%c ' : ' ')\n + '+' + exports.humanize(this.diff);\n\n if (!useColors) return;\n\n var c = 'color: ' + this.color;\n args.splice(1, 0, c, 'color: inherit')\n\n // the final \"%c\" is somewhat tricky, because there could be other\n // arguments passed either before or after the %c, so we need to\n // figure out the correct index to insert the CSS into\n var index = 0;\n var lastC = 0;\n args[0].replace(/%[a-zA-Z%]/g, function(match) {\n if ('%%' === match) return;\n index++;\n if ('%c' === match) {\n // we only are interested in the *last* %c\n // (the user may have provided their own)\n lastC = index;\n }\n });\n\n args.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\nfunction log() {\n // this hackery is required for IE8/9, where\n // the `console.log` function doesn't have 'apply'\n return 'object' === typeof console\n && console.log\n && Function.prototype.apply.call(console.log, console, arguments);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n try {\n if (null == namespaces) {\n exports.storage.removeItem('debug');\n } else {\n exports.storage.debug = namespaces;\n }\n } catch(e) {}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n var r;\n try {\n r = exports.storage.debug;\n } catch(e) {}\n\n // If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n if (!r && typeof process !== 'undefined' && 'env' in process) {\n r = process.env.DEBUG;\n }\n\n return r;\n}\n\n/**\n * Enable namespaces listed in `localStorage.debug` initially.\n */\n\nexports.enable(load());\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n try {\n return window.localStorage;\n } catch (e) {}\n}\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = createDebug.debug = createDebug['default'] = createDebug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = require('ms');\n\n/**\n * The currently active debug mode names, and names to skip.\n */\n\nexports.names = [];\nexports.skips = [];\n\n/**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n */\n\nexports.formatters = {};\n\n/**\n * Previous log timestamp.\n */\n\nvar prevTime;\n\n/**\n * Select a color.\n * @param {String} namespace\n * @return {Number}\n * @api private\n */\n\nfunction selectColor(namespace) {\n var hash = 0, i;\n\n for (i in namespace) {\n hash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n hash |= 0; // Convert to 32bit integer\n }\n\n return exports.colors[Math.abs(hash) % exports.colors.length];\n}\n\n/**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\nfunction createDebug(namespace) {\n\n function debug() {\n // disabled?\n if (!debug.enabled) return;\n\n var self = debug;\n\n // set `diff` timestamp\n var curr = +new Date();\n var ms = curr - (prevTime || curr);\n self.diff = ms;\n self.prev = prevTime;\n self.curr = curr;\n prevTime = curr;\n\n // turn the `arguments` into a proper Array\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n\n args[0] = exports.coerce(args[0]);\n\n if ('string' !== typeof args[0]) {\n // anything else let's inspect with %O\n args.unshift('%O');\n }\n\n // apply any `formatters` transformations\n var index = 0;\n args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {\n // if we encounter an escaped % then don't increase the array index\n if (match === '%%') return match;\n index++;\n var formatter = exports.formatters[format];\n if ('function' === typeof formatter) {\n var val = args[index];\n match = formatter.call(self, val);\n\n // now we need to remove `args[index]` since it's inlined in the `format`\n args.splice(index, 1);\n index--;\n }\n return match;\n });\n\n // apply env-specific formatting (colors, etc.)\n exports.formatArgs.call(self, args);\n\n var logFn = debug.log || exports.log || console.log.bind(console);\n logFn.apply(self, args);\n }\n\n debug.namespace = namespace;\n debug.enabled = exports.enabled(namespace);\n debug.useColors = exports.useColors();\n debug.color = selectColor(namespace);\n\n // env-specific initialization logic for debug instances\n if ('function' === typeof exports.init) {\n exports.init(debug);\n }\n\n return debug;\n}\n\n/**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\nfunction enable(namespaces) {\n exports.save(namespaces);\n\n exports.names = [];\n exports.skips = [];\n\n var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n var len = split.length;\n\n for (var i = 0; i < len; i++) {\n if (!split[i]) continue; // ignore empty strings\n namespaces = split[i].replace(/\\*/g, '.*?');\n if (namespaces[0] === '-') {\n exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n } else {\n exports.names.push(new RegExp('^' + namespaces + '$'));\n }\n }\n}\n\n/**\n * Disable debug output.\n *\n * @api public\n */\n\nfunction disable() {\n exports.enable('');\n}\n\n/**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\nfunction enabled(name) {\n var i, len;\n for (i = 0, len = exports.skips.length; i < len; i++) {\n if (exports.skips[i].test(name)) {\n return false;\n }\n }\n for (i = 0, len = exports.names.length; i < len; i++) {\n if (exports.names[i].test(name)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\nfunction coerce(val) {\n if (val instanceof Error) return val.stack || val.message;\n return val;\n}\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isNaN(val) === false) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n if (ms >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (ms >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (ms >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (ms >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n return plural(ms, d, 'day') ||\n plural(ms, h, 'hour') ||\n plural(ms, m, 'minute') ||\n plural(ms, s, 'second') ||\n ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, n, name) {\n if (ms < n) {\n return;\n }\n if (ms < n * 1.5) {\n return Math.floor(ms / n) + ' ' + name;\n }\n return Math.ceil(ms / n) + ' ' + name + 's';\n}\n","/**\n * Module dependencies.\n */\n\nvar tty = require('tty');\nvar util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(function (key) {\n return /^debug_/i.test(key);\n}).reduce(function (obj, key) {\n // camel-case\n var prop = key\n .substring(6)\n .toLowerCase()\n .replace(/_([a-z])/g, function (_, k) { return k.toUpperCase() });\n\n // coerce string value into JS value\n var val = process.env[key];\n if (/^(yes|on|true|enabled)$/i.test(val)) val = true;\n else if (/^(no|off|false|disabled)$/i.test(val)) val = false;\n else if (val === 'null') val = null;\n else val = Number(val);\n\n obj[prop] = val;\n return obj;\n}, {});\n\n/**\n * The file descriptor to write the `debug()` calls to.\n * Set the `DEBUG_FD` env variable to override with another value. i.e.:\n *\n * $ DEBUG_FD=3 node script.js 3>debug.log\n */\n\nvar fd = parseInt(process.env.DEBUG_FD, 10) || 2;\n\nif (1 !== fd && 2 !== fd) {\n util.deprecate(function(){}, 'except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)')()\n}\n\nvar stream = 1 === fd ? process.stdout :\n 2 === fd ? process.stderr :\n createWritableStdioStream(fd);\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n return 'colors' in exports.inspectOpts\n ? Boolean(exports.inspectOpts.colors)\n : tty.isatty(fd);\n}\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nexports.formatters.o = function(v) {\n this.inspectOpts.colors = this.useColors;\n return util.inspect(v, this.inspectOpts)\n .split('\\n').map(function(str) {\n return str.trim()\n }).join(' ');\n};\n\n/**\n * Map %o to `util.inspect()`, allowing multiple lines if needed.\n */\n\nexports.formatters.O = function(v) {\n this.inspectOpts.colors = this.useColors;\n return util.inspect(v, this.inspectOpts);\n};\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n var name = this.namespace;\n var useColors = this.useColors;\n\n if (useColors) {\n var c = this.color;\n var prefix = ' \\u001b[3' + c + ';1m' + name + ' ' + '\\u001b[0m';\n\n args[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n args.push('\\u001b[3' + c + 'm+' + exports.humanize(this.diff) + '\\u001b[0m');\n } else {\n args[0] = new Date().toUTCString()\n + ' ' + name + ' ' + args[0];\n }\n}\n\n/**\n * Invokes `util.format()` with the specified arguments and writes to `stream`.\n */\n\nfunction log() {\n return stream.write(util.format.apply(util, arguments) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n if (null == namespaces) {\n // If you set a process.env field to null or undefined, it gets cast to the\n // string 'null' or 'undefined'. Just delete instead.\n delete process.env.DEBUG;\n } else {\n process.env.DEBUG = namespaces;\n }\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n return process.env.DEBUG;\n}\n\n/**\n * Copied from `node/src/node.js`.\n *\n * XXX: It's lame that node doesn't expose this API out-of-the-box. It also\n * relies on the undocumented `tty_wrap.guessHandleType()` which is also lame.\n */\n\nfunction createWritableStdioStream (fd) {\n var stream;\n var tty_wrap = process.binding('tty_wrap');\n\n // Note stream._type is used for test-module-load-list.js\n\n switch (tty_wrap.guessHandleType(fd)) {\n case 'TTY':\n stream = new tty.WriteStream(fd);\n stream._type = 'tty';\n\n // Hack to have stream not keep the event loop alive.\n // See https://github.com/joyent/node/issues/1726\n if (stream._handle && stream._handle.unref) {\n stream._handle.unref();\n }\n break;\n\n case 'FILE':\n var fs = require('fs');\n stream = new fs.SyncWriteStream(fd, { autoClose: false });\n stream._type = 'fs';\n break;\n\n case 'PIPE':\n case 'TCP':\n var net = require('net');\n stream = new net.Socket({\n fd: fd,\n readable: false,\n writable: true\n });\n\n // FIXME Should probably have an option in net.Socket to create a\n // stream from an existing fd which is writable only. But for now\n // we'll just add this hack and set the `readable` member to false.\n // Test: ./node test/fixtures/echo.js < /etc/passwd\n stream.readable = false;\n stream.read = null;\n stream._type = 'pipe';\n\n // FIXME Hack to have stream not keep the event loop alive.\n // See https://github.com/joyent/node/issues/1726\n if (stream._handle && stream._handle.unref) {\n stream._handle.unref();\n }\n break;\n\n default:\n // Probably an error on in uv_guess_handle()\n throw new Error('Implement me. Unknown stream file type!');\n }\n\n // For supporting legacy API we put the FD here.\n stream.fd = fd;\n\n stream._isStdio = true;\n\n return stream;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init (debug) {\n debug.inspectOpts = {};\n\n var keys = Object.keys(exports.inspectOpts);\n for (var i = 0; i < keys.length; i++) {\n debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n }\n}\n\n/**\n * Enable namespaces listed in `process.env.DEBUG` initially.\n */\n\nexports.enable(load());\n","/**\n * Merge object b with object a.\n *\n * var a = { foo: 'bar' }\n * , b = { bar: 'baz' };\n *\n * merge(a, b);\n * // => { foo: 'bar', bar: 'baz' }\n *\n * @param {Object} a\n * @param {Object} b\n * @return {Object}\n * @api public\n */\n\nexports = module.exports = function(a, b){\n if (a && b) {\n for (var key in b) {\n a[key] = b[key];\n }\n }\n return a;\n};\n","{\n \"application/1d-interleaved-parityfec\": {\n \"source\": \"iana\"\n },\n \"application/3gpdash-qoe-report+xml\": {\n \"source\": \"iana\"\n },\n \"application/3gpp-ims+xml\": {\n \"source\": \"iana\"\n },\n \"application/a2l\": {\n \"source\": \"iana\"\n },\n \"application/activemessage\": {\n \"source\": \"iana\"\n },\n \"application/alto-costmap+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-costmapfilter+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-directory+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-endpointcost+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-endpointcostparams+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-endpointprop+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-endpointpropparams+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-error+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-networkmap+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/alto-networkmapfilter+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/aml\": {\n \"source\": \"iana\"\n },\n \"application/andrew-inset\": {\n \"source\": \"iana\",\n \"extensions\": [\"ez\"]\n },\n \"application/applefile\": {\n \"source\": \"iana\"\n },\n \"application/applixware\": {\n \"source\": \"apache\",\n \"extensions\": [\"aw\"]\n },\n \"application/atf\": {\n \"source\": \"iana\"\n },\n \"application/atfx\": {\n \"source\": \"iana\"\n },\n \"application/atom+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"atom\"]\n },\n \"application/atomcat+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"atomcat\"]\n },\n \"application/atomdeleted+xml\": {\n \"source\": \"iana\"\n },\n \"application/atomicmail\": {\n \"source\": \"iana\"\n },\n \"application/atomsvc+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"atomsvc\"]\n },\n \"application/atxml\": {\n \"source\": \"iana\"\n },\n \"application/auth-policy+xml\": {\n \"source\": \"iana\"\n },\n \"application/bacnet-xdd+zip\": {\n \"source\": \"iana\"\n },\n \"application/batch-smtp\": {\n \"source\": \"iana\"\n },\n \"application/bdoc\": {\n \"compressible\": false,\n \"extensions\": [\"bdoc\"]\n },\n \"application/beep+xml\": {\n \"source\": \"iana\"\n },\n \"application/calendar+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/calendar+xml\": {\n \"source\": \"iana\"\n },\n \"application/call-completion\": {\n \"source\": \"iana\"\n },\n \"application/cals-1840\": {\n \"source\": \"iana\"\n },\n \"application/cbor\": {\n \"source\": \"iana\"\n },\n \"application/cccex\": {\n \"source\": \"iana\"\n },\n \"application/ccmp+xml\": {\n \"source\": \"iana\"\n },\n \"application/ccxml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"ccxml\"]\n },\n \"application/cdfx+xml\": {\n \"source\": \"iana\"\n },\n \"application/cdmi-capability\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmia\"]\n },\n \"application/cdmi-container\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmic\"]\n },\n \"application/cdmi-domain\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmid\"]\n },\n \"application/cdmi-object\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmio\"]\n },\n \"application/cdmi-queue\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdmiq\"]\n },\n \"application/cdni\": {\n \"source\": \"iana\"\n },\n \"application/cea\": {\n \"source\": \"iana\"\n },\n \"application/cea-2018+xml\": {\n \"source\": \"iana\"\n },\n \"application/cellml+xml\": {\n \"source\": \"iana\"\n },\n \"application/cfw\": {\n \"source\": \"iana\"\n },\n \"application/clue_info+xml\": {\n \"source\": \"iana\"\n },\n \"application/cms\": {\n \"source\": \"iana\"\n },\n \"application/cnrp+xml\": {\n \"source\": \"iana\"\n },\n \"application/coap-group+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/coap-payload\": {\n \"source\": \"iana\"\n },\n \"application/commonground\": {\n \"source\": \"iana\"\n },\n \"application/conference-info+xml\": {\n \"source\": \"iana\"\n },\n \"application/cose\": {\n \"source\": \"iana\"\n },\n \"application/cose-key\": {\n \"source\": \"iana\"\n },\n \"application/cose-key-set\": {\n \"source\": \"iana\"\n },\n \"application/cpl+xml\": {\n \"source\": \"iana\"\n },\n \"application/csrattrs\": {\n \"source\": \"iana\"\n },\n \"application/csta+xml\": {\n \"source\": \"iana\"\n },\n \"application/cstadata+xml\": {\n \"source\": \"iana\"\n },\n \"application/csvm+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/cu-seeme\": {\n \"source\": \"apache\",\n \"extensions\": [\"cu\"]\n },\n \"application/cybercash\": {\n \"source\": \"iana\"\n },\n \"application/dart\": {\n \"compressible\": true\n },\n \"application/dash+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpd\"]\n },\n \"application/dashdelta\": {\n \"source\": \"iana\"\n },\n \"application/davmount+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"davmount\"]\n },\n \"application/dca-rft\": {\n \"source\": \"iana\"\n },\n \"application/dcd\": {\n \"source\": \"iana\"\n },\n \"application/dec-dx\": {\n \"source\": \"iana\"\n },\n \"application/dialog-info+xml\": {\n \"source\": \"iana\"\n },\n \"application/dicom\": {\n \"source\": \"iana\"\n },\n \"application/dicom+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/dicom+xml\": {\n \"source\": \"iana\"\n },\n \"application/dii\": {\n \"source\": \"iana\"\n },\n \"application/dit\": {\n \"source\": \"iana\"\n },\n \"application/dns\": {\n \"source\": \"iana\"\n },\n \"application/docbook+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"dbk\"]\n },\n \"application/dskpp+xml\": {\n \"source\": \"iana\"\n },\n \"application/dssc+der\": {\n \"source\": \"iana\",\n \"extensions\": [\"dssc\"]\n },\n \"application/dssc+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"xdssc\"]\n },\n \"application/dvcs\": {\n \"source\": \"iana\"\n },\n \"application/ecmascript\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ecma\"]\n },\n \"application/edi-consent\": {\n \"source\": \"iana\"\n },\n \"application/edi-x12\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/edifact\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"application/efi\": {\n \"source\": \"iana\"\n },\n \"application/emergencycalldata.comment+xml\": {\n \"source\": \"iana\"\n },\n \"application/emergencycalldata.control+xml\": {\n \"source\": \"iana\"\n },\n \"application/emergencycalldata.deviceinfo+xml\": {\n \"source\": \"iana\"\n },\n \"application/emergencycalldata.ecall.msd\": {\n \"source\": \"iana\"\n },\n \"application/emergencycalldata.providerinfo+xml\": {\n \"source\": \"iana\"\n },\n \"application/emergencycalldata.serviceinfo+xml\": {\n \"source\": \"iana\"\n },\n \"application/emergencycalldata.subscriberinfo+xml\": {\n \"source\": \"iana\"\n },\n \"application/emergencycalldata.veds+xml\": {\n \"source\": \"iana\"\n },\n \"application/emma+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"emma\"]\n },\n \"application/emotionml+xml\": {\n \"source\": \"iana\"\n },\n \"application/encaprtp\": {\n \"source\": \"iana\"\n },\n \"application/epp+xml\": {\n \"source\": \"iana\"\n },\n \"application/epub+zip\": {\n \"source\": \"iana\",\n \"extensions\": [\"epub\"]\n },\n \"application/eshop\": {\n \"source\": \"iana\"\n },\n \"application/exi\": {\n \"source\": \"iana\",\n \"extensions\": [\"exi\"]\n },\n \"application/fastinfoset\": {\n \"source\": \"iana\"\n },\n \"application/fastsoap\": {\n \"source\": \"iana\"\n },\n \"application/fdt+xml\": {\n \"source\": \"iana\"\n },\n \"application/fhir+xml\": {\n \"source\": \"iana\"\n },\n \"application/fido.trusted-apps+json\": {\n \"compressible\": true\n },\n \"application/fits\": {\n \"source\": \"iana\"\n },\n \"application/font-sfnt\": {\n \"source\": \"iana\"\n },\n \"application/font-tdpfr\": {\n \"source\": \"iana\",\n \"extensions\": [\"pfr\"]\n },\n \"application/font-woff\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"woff\"]\n },\n \"application/framework-attributes+xml\": {\n \"source\": \"iana\"\n },\n \"application/geo+json\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"geojson\"]\n },\n \"application/geo+json-seq\": {\n \"source\": \"iana\"\n },\n \"application/geoxacml+xml\": {\n \"source\": \"iana\"\n },\n \"application/gml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"gml\"]\n },\n \"application/gpx+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"gpx\"]\n },\n \"application/gxf\": {\n \"source\": \"apache\",\n \"extensions\": [\"gxf\"]\n },\n \"application/gzip\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"gz\"]\n },\n \"application/h224\": {\n \"source\": \"iana\"\n },\n \"application/held+xml\": {\n \"source\": \"iana\"\n },\n \"application/hjson\": {\n \"extensions\": [\"hjson\"]\n },\n \"application/http\": {\n \"source\": \"iana\"\n },\n \"application/hyperstudio\": {\n \"source\": \"iana\",\n \"extensions\": [\"stk\"]\n },\n \"application/ibe-key-request+xml\": {\n \"source\": \"iana\"\n },\n \"application/ibe-pkg-reply+xml\": {\n \"source\": \"iana\"\n },\n \"application/ibe-pp-data\": {\n \"source\": \"iana\"\n },\n \"application/iges\": {\n \"source\": \"iana\"\n },\n \"application/im-iscomposing+xml\": {\n \"source\": \"iana\"\n },\n \"application/index\": {\n \"source\": \"iana\"\n },\n \"application/index.cmd\": {\n \"source\": \"iana\"\n },\n \"application/index.obj\": {\n \"source\": \"iana\"\n },\n \"application/index.response\": {\n \"source\": \"iana\"\n },\n \"application/index.vnd\": {\n \"source\": \"iana\"\n },\n \"application/inkml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"ink\",\"inkml\"]\n },\n \"application/iotp\": {\n \"source\": \"iana\"\n },\n \"application/ipfix\": {\n \"source\": \"iana\",\n \"extensions\": [\"ipfix\"]\n },\n \"application/ipp\": {\n \"source\": \"iana\"\n },\n \"application/isup\": {\n \"source\": \"iana\"\n },\n \"application/its+xml\": {\n \"source\": \"iana\"\n },\n \"application/java-archive\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"jar\",\"war\",\"ear\"]\n },\n \"application/java-serialized-object\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"ser\"]\n },\n \"application/java-vm\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"class\"]\n },\n \"application/javascript\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"js\",\"mjs\"]\n },\n \"application/jf2feed+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/jose\": {\n \"source\": \"iana\"\n },\n \"application/jose+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/jrd+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/json\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"json\",\"map\"]\n },\n \"application/json-patch+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/json-seq\": {\n \"source\": \"iana\"\n },\n \"application/json5\": {\n \"extensions\": [\"json5\"]\n },\n \"application/jsonml+json\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"jsonml\"]\n },\n \"application/jwk+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/jwk-set+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/jwt\": {\n \"source\": \"iana\"\n },\n \"application/kpml-request+xml\": {\n \"source\": \"iana\"\n },\n \"application/kpml-response+xml\": {\n \"source\": \"iana\"\n },\n \"application/ld+json\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"jsonld\"]\n },\n \"application/lgr+xml\": {\n \"source\": \"iana\"\n },\n \"application/link-format\": {\n \"source\": \"iana\"\n },\n \"application/load-control+xml\": {\n \"source\": \"iana\"\n },\n \"application/lost+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"lostxml\"]\n },\n \"application/lostsync+xml\": {\n \"source\": \"iana\"\n },\n \"application/lxf\": {\n \"source\": \"iana\"\n },\n \"application/mac-binhex40\": {\n \"source\": \"iana\",\n \"extensions\": [\"hqx\"]\n },\n \"application/mac-compactpro\": {\n \"source\": \"apache\",\n \"extensions\": [\"cpt\"]\n },\n \"application/macwriteii\": {\n \"source\": \"iana\"\n },\n \"application/mads+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"mads\"]\n },\n \"application/manifest+json\": {\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"webmanifest\"]\n },\n \"application/marc\": {\n \"source\": \"iana\",\n \"extensions\": [\"mrc\"]\n },\n \"application/marcxml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"mrcx\"]\n },\n \"application/mathematica\": {\n \"source\": \"iana\",\n \"extensions\": [\"ma\",\"nb\",\"mb\"]\n },\n \"application/mathml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"mathml\"]\n },\n \"application/mathml-content+xml\": {\n \"source\": \"iana\"\n },\n \"application/mathml-presentation+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbms-associated-procedure-description+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbms-deregister+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbms-envelope+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbms-msk+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbms-msk-response+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbms-protection-description+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbms-reception-report+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbms-register+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbms-register-response+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbms-schedule+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbms-user-service-description+xml\": {\n \"source\": \"iana\"\n },\n \"application/mbox\": {\n \"source\": \"iana\",\n \"extensions\": [\"mbox\"]\n },\n \"application/media-policy-dataset+xml\": {\n \"source\": \"iana\"\n },\n \"application/media_control+xml\": {\n \"source\": \"iana\"\n },\n \"application/mediaservercontrol+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"mscml\"]\n },\n \"application/merge-patch+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/metalink+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"metalink\"]\n },\n \"application/metalink4+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"meta4\"]\n },\n \"application/mets+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"mets\"]\n },\n \"application/mf4\": {\n \"source\": \"iana\"\n },\n \"application/mikey\": {\n \"source\": \"iana\"\n },\n \"application/mmt-usd+xml\": {\n \"source\": \"iana\"\n },\n \"application/mods+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"mods\"]\n },\n \"application/moss-keys\": {\n \"source\": \"iana\"\n },\n \"application/moss-signature\": {\n \"source\": \"iana\"\n },\n \"application/mosskey-data\": {\n \"source\": \"iana\"\n },\n \"application/mosskey-request\": {\n \"source\": \"iana\"\n },\n \"application/mp21\": {\n \"source\": \"iana\",\n \"extensions\": [\"m21\",\"mp21\"]\n },\n \"application/mp4\": {\n \"source\": \"iana\",\n \"extensions\": [\"mp4s\",\"m4p\"]\n },\n \"application/mpeg4-generic\": {\n \"source\": \"iana\"\n },\n \"application/mpeg4-iod\": {\n \"source\": \"iana\"\n },\n \"application/mpeg4-iod-xmt\": {\n \"source\": \"iana\"\n },\n \"application/mrb-consumer+xml\": {\n \"source\": \"iana\"\n },\n \"application/mrb-publish+xml\": {\n \"source\": \"iana\"\n },\n \"application/msc-ivr+xml\": {\n \"source\": \"iana\"\n },\n \"application/msc-mixer+xml\": {\n \"source\": \"iana\"\n },\n \"application/msword\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"doc\",\"dot\"]\n },\n \"application/mud+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/mxf\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxf\"]\n },\n \"application/n-quads\": {\n \"source\": \"iana\"\n },\n \"application/n-triples\": {\n \"source\": \"iana\"\n },\n \"application/nasdata\": {\n \"source\": \"iana\"\n },\n \"application/news-checkgroups\": {\n \"source\": \"iana\"\n },\n \"application/news-groupinfo\": {\n \"source\": \"iana\"\n },\n \"application/news-transmission\": {\n \"source\": \"iana\"\n },\n \"application/nlsml+xml\": {\n \"source\": \"iana\"\n },\n \"application/node\": {\n \"source\": \"iana\"\n },\n \"application/nss\": {\n \"source\": \"iana\"\n },\n \"application/ocsp-request\": {\n \"source\": \"iana\"\n },\n \"application/ocsp-response\": {\n \"source\": \"iana\"\n },\n \"application/octet-stream\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"bin\",\"dms\",\"lrf\",\"mar\",\"so\",\"dist\",\"distz\",\"pkg\",\"bpk\",\"dump\",\"elc\",\"deploy\",\"exe\",\"dll\",\"deb\",\"dmg\",\"iso\",\"img\",\"msi\",\"msp\",\"msm\",\"buffer\"]\n },\n \"application/oda\": {\n \"source\": \"iana\",\n \"extensions\": [\"oda\"]\n },\n \"application/odx\": {\n \"source\": \"iana\"\n },\n \"application/oebps-package+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"opf\"]\n },\n \"application/ogg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"ogx\"]\n },\n \"application/omdoc+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"omdoc\"]\n },\n \"application/onenote\": {\n \"source\": \"apache\",\n \"extensions\": [\"onetoc\",\"onetoc2\",\"onetmp\",\"onepkg\"]\n },\n \"application/oxps\": {\n \"source\": \"iana\",\n \"extensions\": [\"oxps\"]\n },\n \"application/p2p-overlay+xml\": {\n \"source\": \"iana\"\n },\n \"application/parityfec\": {\n \"source\": \"iana\"\n },\n \"application/passport\": {\n \"source\": \"iana\"\n },\n \"application/patch-ops-error+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"xer\"]\n },\n \"application/pdf\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"pdf\"]\n },\n \"application/pdx\": {\n \"source\": \"iana\"\n },\n \"application/pgp-encrypted\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"pgp\"]\n },\n \"application/pgp-keys\": {\n \"source\": \"iana\"\n },\n \"application/pgp-signature\": {\n \"source\": \"iana\",\n \"extensions\": [\"asc\",\"sig\"]\n },\n \"application/pics-rules\": {\n \"source\": \"apache\",\n \"extensions\": [\"prf\"]\n },\n \"application/pidf+xml\": {\n \"source\": \"iana\"\n },\n \"application/pidf-diff+xml\": {\n \"source\": \"iana\"\n },\n \"application/pkcs10\": {\n \"source\": \"iana\",\n \"extensions\": [\"p10\"]\n },\n \"application/pkcs12\": {\n \"source\": \"iana\"\n },\n \"application/pkcs7-mime\": {\n \"source\": \"iana\",\n \"extensions\": [\"p7m\",\"p7c\"]\n },\n \"application/pkcs7-signature\": {\n \"source\": \"iana\",\n \"extensions\": [\"p7s\"]\n },\n \"application/pkcs8\": {\n \"source\": \"iana\",\n \"extensions\": [\"p8\"]\n },\n \"application/pkcs8-encrypted\": {\n \"source\": \"iana\"\n },\n \"application/pkix-attr-cert\": {\n \"source\": \"iana\",\n \"extensions\": [\"ac\"]\n },\n \"application/pkix-cert\": {\n \"source\": \"iana\",\n \"extensions\": [\"cer\"]\n },\n \"application/pkix-crl\": {\n \"source\": \"iana\",\n \"extensions\": [\"crl\"]\n },\n \"application/pkix-pkipath\": {\n \"source\": \"iana\",\n \"extensions\": [\"pkipath\"]\n },\n \"application/pkixcmp\": {\n \"source\": \"iana\",\n \"extensions\": [\"pki\"]\n },\n \"application/pls+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"pls\"]\n },\n \"application/poc-settings+xml\": {\n \"source\": \"iana\"\n },\n \"application/postscript\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"ai\",\"eps\",\"ps\"]\n },\n \"application/ppsp-tracker+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/problem+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/problem+xml\": {\n \"source\": \"iana\"\n },\n \"application/provenance+xml\": {\n \"source\": \"iana\"\n },\n \"application/prs.alvestrand.titrax-sheet\": {\n \"source\": \"iana\"\n },\n \"application/prs.cww\": {\n \"source\": \"iana\",\n \"extensions\": [\"cww\"]\n },\n \"application/prs.hpub+zip\": {\n \"source\": \"iana\"\n },\n \"application/prs.nprend\": {\n \"source\": \"iana\"\n },\n \"application/prs.plucker\": {\n \"source\": \"iana\"\n },\n \"application/prs.rdf-xml-crypt\": {\n \"source\": \"iana\"\n },\n \"application/prs.xsf+xml\": {\n \"source\": \"iana\"\n },\n \"application/pskc+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"pskcxml\"]\n },\n \"application/qsig\": {\n \"source\": \"iana\"\n },\n \"application/raml+yaml\": {\n \"compressible\": true,\n \"extensions\": [\"raml\"]\n },\n \"application/raptorfec\": {\n \"source\": \"iana\"\n },\n \"application/rdap+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/rdf+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rdf\"]\n },\n \"application/reginfo+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"rif\"]\n },\n \"application/relax-ng-compact-syntax\": {\n \"source\": \"iana\",\n \"extensions\": [\"rnc\"]\n },\n \"application/remote-printing\": {\n \"source\": \"iana\"\n },\n \"application/reputon+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/resource-lists+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"rl\"]\n },\n \"application/resource-lists-diff+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"rld\"]\n },\n \"application/rfc+xml\": {\n \"source\": \"iana\"\n },\n \"application/riscos\": {\n \"source\": \"iana\"\n },\n \"application/rlmi+xml\": {\n \"source\": \"iana\"\n },\n \"application/rls-services+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"rs\"]\n },\n \"application/route-apd+xml\": {\n \"source\": \"iana\"\n },\n \"application/route-s-tsid+xml\": {\n \"source\": \"iana\"\n },\n \"application/route-usd+xml\": {\n \"source\": \"iana\"\n },\n \"application/rpki-ghostbusters\": {\n \"source\": \"iana\",\n \"extensions\": [\"gbr\"]\n },\n \"application/rpki-manifest\": {\n \"source\": \"iana\",\n \"extensions\": [\"mft\"]\n },\n \"application/rpki-publication\": {\n \"source\": \"iana\"\n },\n \"application/rpki-roa\": {\n \"source\": \"iana\",\n \"extensions\": [\"roa\"]\n },\n \"application/rpki-updown\": {\n \"source\": \"iana\"\n },\n \"application/rsd+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"rsd\"]\n },\n \"application/rss+xml\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"rss\"]\n },\n \"application/rtf\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rtf\"]\n },\n \"application/rtploopback\": {\n \"source\": \"iana\"\n },\n \"application/rtx\": {\n \"source\": \"iana\"\n },\n \"application/samlassertion+xml\": {\n \"source\": \"iana\"\n },\n \"application/samlmetadata+xml\": {\n \"source\": \"iana\"\n },\n \"application/sbml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"sbml\"]\n },\n \"application/scaip+xml\": {\n \"source\": \"iana\"\n },\n \"application/scim+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/scvp-cv-request\": {\n \"source\": \"iana\",\n \"extensions\": [\"scq\"]\n },\n \"application/scvp-cv-response\": {\n \"source\": \"iana\",\n \"extensions\": [\"scs\"]\n },\n \"application/scvp-vp-request\": {\n \"source\": \"iana\",\n \"extensions\": [\"spq\"]\n },\n \"application/scvp-vp-response\": {\n \"source\": \"iana\",\n \"extensions\": [\"spp\"]\n },\n \"application/sdp\": {\n \"source\": \"iana\",\n \"extensions\": [\"sdp\"]\n },\n \"application/sep+xml\": {\n \"source\": \"iana\"\n },\n \"application/sep-exi\": {\n \"source\": \"iana\"\n },\n \"application/session-info\": {\n \"source\": \"iana\"\n },\n \"application/set-payment\": {\n \"source\": \"iana\"\n },\n \"application/set-payment-initiation\": {\n \"source\": \"iana\",\n \"extensions\": [\"setpay\"]\n },\n \"application/set-registration\": {\n \"source\": \"iana\"\n },\n \"application/set-registration-initiation\": {\n \"source\": \"iana\",\n \"extensions\": [\"setreg\"]\n },\n \"application/sgml\": {\n \"source\": \"iana\"\n },\n \"application/sgml-open-catalog\": {\n \"source\": \"iana\"\n },\n \"application/shf+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"shf\"]\n },\n \"application/sieve\": {\n \"source\": \"iana\"\n },\n \"application/simple-filter+xml\": {\n \"source\": \"iana\"\n },\n \"application/simple-message-summary\": {\n \"source\": \"iana\"\n },\n \"application/simplesymbolcontainer\": {\n \"source\": \"iana\"\n },\n \"application/slate\": {\n \"source\": \"iana\"\n },\n \"application/smil\": {\n \"source\": \"iana\"\n },\n \"application/smil+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"smi\",\"smil\"]\n },\n \"application/smpte336m\": {\n \"source\": \"iana\"\n },\n \"application/soap+fastinfoset\": {\n \"source\": \"iana\"\n },\n \"application/soap+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/sparql-query\": {\n \"source\": \"iana\",\n \"extensions\": [\"rq\"]\n },\n \"application/sparql-results+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"srx\"]\n },\n \"application/spirits-event+xml\": {\n \"source\": \"iana\"\n },\n \"application/sql\": {\n \"source\": \"iana\"\n },\n \"application/srgs\": {\n \"source\": \"iana\",\n \"extensions\": [\"gram\"]\n },\n \"application/srgs+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"grxml\"]\n },\n \"application/sru+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"sru\"]\n },\n \"application/ssdl+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"ssdl\"]\n },\n \"application/ssml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"ssml\"]\n },\n \"application/tamp-apex-update\": {\n \"source\": \"iana\"\n },\n \"application/tamp-apex-update-confirm\": {\n \"source\": \"iana\"\n },\n \"application/tamp-community-update\": {\n \"source\": \"iana\"\n },\n \"application/tamp-community-update-confirm\": {\n \"source\": \"iana\"\n },\n \"application/tamp-error\": {\n \"source\": \"iana\"\n },\n \"application/tamp-sequence-adjust\": {\n \"source\": \"iana\"\n },\n \"application/tamp-sequence-adjust-confirm\": {\n \"source\": \"iana\"\n },\n \"application/tamp-status-query\": {\n \"source\": \"iana\"\n },\n \"application/tamp-status-response\": {\n \"source\": \"iana\"\n },\n \"application/tamp-update\": {\n \"source\": \"iana\"\n },\n \"application/tamp-update-confirm\": {\n \"source\": \"iana\"\n },\n \"application/tar\": {\n \"compressible\": true\n },\n \"application/tei+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"tei\",\"teicorpus\"]\n },\n \"application/thraud+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"tfi\"]\n },\n \"application/timestamp-query\": {\n \"source\": \"iana\"\n },\n \"application/timestamp-reply\": {\n \"source\": \"iana\"\n },\n \"application/timestamped-data\": {\n \"source\": \"iana\",\n \"extensions\": [\"tsd\"]\n },\n \"application/tnauthlist\": {\n \"source\": \"iana\"\n },\n \"application/trig\": {\n \"source\": \"iana\"\n },\n \"application/ttml+xml\": {\n \"source\": \"iana\"\n },\n \"application/tve-trigger\": {\n \"source\": \"iana\"\n },\n \"application/ulpfec\": {\n \"source\": \"iana\"\n },\n \"application/urc-grpsheet+xml\": {\n \"source\": \"iana\"\n },\n \"application/urc-ressheet+xml\": {\n \"source\": \"iana\"\n },\n \"application/urc-targetdesc+xml\": {\n \"source\": \"iana\"\n },\n \"application/urc-uisocketdesc+xml\": {\n \"source\": \"iana\"\n },\n \"application/vcard+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vcard+xml\": {\n \"source\": \"iana\"\n },\n \"application/vemmi\": {\n \"source\": \"iana\"\n },\n \"application/vividence.scriptfile\": {\n \"source\": \"apache\"\n },\n \"application/vnd.1000minds.decision-model+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp-prose+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp-prose-pc3ch+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp-v2x-local-service-information\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.access-transfer-events+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.bsf+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.gmop+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mcptt-affiliation-command+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mcptt-floor-request+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mcptt-info+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mcptt-location-info+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mcptt-mbms-usage-info+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mcptt-signed+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.mid-call+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.pic-bw-large\": {\n \"source\": \"iana\",\n \"extensions\": [\"plb\"]\n },\n \"application/vnd.3gpp.pic-bw-small\": {\n \"source\": \"iana\",\n \"extensions\": [\"psb\"]\n },\n \"application/vnd.3gpp.pic-bw-var\": {\n \"source\": \"iana\",\n \"extensions\": [\"pvb\"]\n },\n \"application/vnd.3gpp.sms\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.sms+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.srvcc-ext+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.srvcc-info+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.state-and-event-info+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp.ussd+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp2.bcmcsinfo+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp2.sms\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3gpp2.tcap\": {\n \"source\": \"iana\",\n \"extensions\": [\"tcap\"]\n },\n \"application/vnd.3lightssoftware.imagescal\": {\n \"source\": \"iana\"\n },\n \"application/vnd.3m.post-it-notes\": {\n \"source\": \"iana\",\n \"extensions\": [\"pwn\"]\n },\n \"application/vnd.accpac.simply.aso\": {\n \"source\": \"iana\",\n \"extensions\": [\"aso\"]\n },\n \"application/vnd.accpac.simply.imp\": {\n \"source\": \"iana\",\n \"extensions\": [\"imp\"]\n },\n \"application/vnd.acucobol\": {\n \"source\": \"iana\",\n \"extensions\": [\"acu\"]\n },\n \"application/vnd.acucorp\": {\n \"source\": \"iana\",\n \"extensions\": [\"atc\",\"acutc\"]\n },\n \"application/vnd.adobe.air-application-installer-package+zip\": {\n \"source\": \"apache\",\n \"extensions\": [\"air\"]\n },\n \"application/vnd.adobe.flash.movie\": {\n \"source\": \"iana\"\n },\n \"application/vnd.adobe.formscentral.fcdt\": {\n \"source\": \"iana\",\n \"extensions\": [\"fcdt\"]\n },\n \"application/vnd.adobe.fxp\": {\n \"source\": \"iana\",\n \"extensions\": [\"fxp\",\"fxpl\"]\n },\n \"application/vnd.adobe.partial-upload\": {\n \"source\": \"iana\"\n },\n \"application/vnd.adobe.xdp+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"xdp\"]\n },\n \"application/vnd.adobe.xfdf\": {\n \"source\": \"iana\",\n \"extensions\": [\"xfdf\"]\n },\n \"application/vnd.aether.imp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ah-barcode\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ahead.space\": {\n \"source\": \"iana\",\n \"extensions\": [\"ahead\"]\n },\n \"application/vnd.airzip.filesecure.azf\": {\n \"source\": \"iana\",\n \"extensions\": [\"azf\"]\n },\n \"application/vnd.airzip.filesecure.azs\": {\n \"source\": \"iana\",\n \"extensions\": [\"azs\"]\n },\n \"application/vnd.amadeus+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.amazon.ebook\": {\n \"source\": \"apache\",\n \"extensions\": [\"azw\"]\n },\n \"application/vnd.amazon.mobi8-ebook\": {\n \"source\": \"iana\"\n },\n \"application/vnd.americandynamics.acc\": {\n \"source\": \"iana\",\n \"extensions\": [\"acc\"]\n },\n \"application/vnd.amiga.ami\": {\n \"source\": \"iana\",\n \"extensions\": [\"ami\"]\n },\n \"application/vnd.amundsen.maze+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.android.package-archive\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"apk\"]\n },\n \"application/vnd.anki\": {\n \"source\": \"iana\"\n },\n \"application/vnd.anser-web-certificate-issue-initiation\": {\n \"source\": \"iana\",\n \"extensions\": [\"cii\"]\n },\n \"application/vnd.anser-web-funds-transfer-initiation\": {\n \"source\": \"apache\",\n \"extensions\": [\"fti\"]\n },\n \"application/vnd.antix.game-component\": {\n \"source\": \"iana\",\n \"extensions\": [\"atx\"]\n },\n \"application/vnd.apache.thrift.binary\": {\n \"source\": \"iana\"\n },\n \"application/vnd.apache.thrift.compact\": {\n \"source\": \"iana\"\n },\n \"application/vnd.apache.thrift.json\": {\n \"source\": \"iana\"\n },\n \"application/vnd.api+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.apothekende.reservation+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.apple.installer+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpkg\"]\n },\n \"application/vnd.apple.mpegurl\": {\n \"source\": \"iana\",\n \"extensions\": [\"m3u8\"]\n },\n \"application/vnd.apple.pkpass\": {\n \"compressible\": false,\n \"extensions\": [\"pkpass\"]\n },\n \"application/vnd.arastra.swi\": {\n \"source\": \"iana\"\n },\n \"application/vnd.aristanetworks.swi\": {\n \"source\": \"iana\",\n \"extensions\": [\"swi\"]\n },\n \"application/vnd.artsquare\": {\n \"source\": \"iana\"\n },\n \"application/vnd.astraea-software.iota\": {\n \"source\": \"iana\",\n \"extensions\": [\"iota\"]\n },\n \"application/vnd.audiograph\": {\n \"source\": \"iana\",\n \"extensions\": [\"aep\"]\n },\n \"application/vnd.autopackage\": {\n \"source\": \"iana\"\n },\n \"application/vnd.avalon+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.avistar+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.balsamiq.bmml+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.balsamiq.bmpr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bbf.usp.msg\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bbf.usp.msg+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.bekitzur-stech+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.bint.med-content\": {\n \"source\": \"iana\"\n },\n \"application/vnd.biopax.rdf+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.blink-idb-value-wrapper\": {\n \"source\": \"iana\"\n },\n \"application/vnd.blueice.multipass\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpm\"]\n },\n \"application/vnd.bluetooth.ep.oob\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bluetooth.le.oob\": {\n \"source\": \"iana\"\n },\n \"application/vnd.bmi\": {\n \"source\": \"iana\",\n \"extensions\": [\"bmi\"]\n },\n \"application/vnd.businessobjects\": {\n \"source\": \"iana\",\n \"extensions\": [\"rep\"]\n },\n \"application/vnd.cab-jscript\": {\n \"source\": \"iana\"\n },\n \"application/vnd.canon-cpdl\": {\n \"source\": \"iana\"\n },\n \"application/vnd.canon-lips\": {\n \"source\": \"iana\"\n },\n \"application/vnd.capasystems-pg+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.cendio.thinlinc.clientconf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.century-systems.tcp_stream\": {\n \"source\": \"iana\"\n },\n \"application/vnd.chemdraw+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdxml\"]\n },\n \"application/vnd.chess-pgn\": {\n \"source\": \"iana\"\n },\n \"application/vnd.chipnuts.karaoke-mmd\": {\n \"source\": \"iana\",\n \"extensions\": [\"mmd\"]\n },\n \"application/vnd.cinderella\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdy\"]\n },\n \"application/vnd.cirpack.isdn-ext\": {\n \"source\": \"iana\"\n },\n \"application/vnd.citationstyles.style+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.claymore\": {\n \"source\": \"iana\",\n \"extensions\": [\"cla\"]\n },\n \"application/vnd.cloanto.rp9\": {\n \"source\": \"iana\",\n \"extensions\": [\"rp9\"]\n },\n \"application/vnd.clonk.c4group\": {\n \"source\": \"iana\",\n \"extensions\": [\"c4g\",\"c4d\",\"c4f\",\"c4p\",\"c4u\"]\n },\n \"application/vnd.cluetrust.cartomobile-config\": {\n \"source\": \"iana\",\n \"extensions\": [\"c11amc\"]\n },\n \"application/vnd.cluetrust.cartomobile-config-pkg\": {\n \"source\": \"iana\",\n \"extensions\": [\"c11amz\"]\n },\n \"application/vnd.coffeescript\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.document\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.document-template\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.presentation\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.presentation-template\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.spreadsheet\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collabio.xodocuments.spreadsheet-template\": {\n \"source\": \"iana\"\n },\n \"application/vnd.collection+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.collection.doc+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.collection.next+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.comicbook+zip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.comicbook-rar\": {\n \"source\": \"iana\"\n },\n \"application/vnd.commerce-battelle\": {\n \"source\": \"iana\"\n },\n \"application/vnd.commonspace\": {\n \"source\": \"iana\",\n \"extensions\": [\"csp\"]\n },\n \"application/vnd.contact.cmsg\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdbcmsg\"]\n },\n \"application/vnd.coreos.ignition+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.cosmocaller\": {\n \"source\": \"iana\",\n \"extensions\": [\"cmc\"]\n },\n \"application/vnd.crick.clicker\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkx\"]\n },\n \"application/vnd.crick.clicker.keyboard\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkk\"]\n },\n \"application/vnd.crick.clicker.palette\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkp\"]\n },\n \"application/vnd.crick.clicker.template\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkt\"]\n },\n \"application/vnd.crick.clicker.wordbank\": {\n \"source\": \"iana\",\n \"extensions\": [\"clkw\"]\n },\n \"application/vnd.criticaltools.wbs+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"wbs\"]\n },\n \"application/vnd.ctc-posml\": {\n \"source\": \"iana\",\n \"extensions\": [\"pml\"]\n },\n \"application/vnd.ctct.ws+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cups-pdf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cups-postscript\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cups-ppd\": {\n \"source\": \"iana\",\n \"extensions\": [\"ppd\"]\n },\n \"application/vnd.cups-raster\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cups-raw\": {\n \"source\": \"iana\"\n },\n \"application/vnd.curl\": {\n \"source\": \"iana\"\n },\n \"application/vnd.curl.car\": {\n \"source\": \"apache\",\n \"extensions\": [\"car\"]\n },\n \"application/vnd.curl.pcurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"pcurl\"]\n },\n \"application/vnd.cyan.dean.root+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.cybank\": {\n \"source\": \"iana\"\n },\n \"application/vnd.d2l.coursepackage1p0+zip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dart\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"dart\"]\n },\n \"application/vnd.data-vision.rdz\": {\n \"source\": \"iana\",\n \"extensions\": [\"rdz\"]\n },\n \"application/vnd.datapackage+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dataresource+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.debian.binary-package\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dece.data\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvf\",\"uvvf\",\"uvd\",\"uvvd\"]\n },\n \"application/vnd.dece.ttml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvt\",\"uvvt\"]\n },\n \"application/vnd.dece.unspecified\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvx\",\"uvvx\"]\n },\n \"application/vnd.dece.zip\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvz\",\"uvvz\"]\n },\n \"application/vnd.denovo.fcselayout-link\": {\n \"source\": \"iana\",\n \"extensions\": [\"fe_launch\"]\n },\n \"application/vnd.desmume-movie\": {\n \"source\": \"iana\"\n },\n \"application/vnd.desmume.movie\": {\n \"source\": \"apache\"\n },\n \"application/vnd.dir-bi.plate-dl-nosuffix\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dm.delegation+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dna\": {\n \"source\": \"iana\",\n \"extensions\": [\"dna\"]\n },\n \"application/vnd.document+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.dolby.mlp\": {\n \"source\": \"apache\",\n \"extensions\": [\"mlp\"]\n },\n \"application/vnd.dolby.mobile.1\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dolby.mobile.2\": {\n \"source\": \"iana\"\n },\n \"application/vnd.doremir.scorecloud-binary-document\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dpgraph\": {\n \"source\": \"iana\",\n \"extensions\": [\"dpg\"]\n },\n \"application/vnd.dreamfactory\": {\n \"source\": \"iana\",\n \"extensions\": [\"dfac\"]\n },\n \"application/vnd.drive+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ds-keypoint\": {\n \"source\": \"apache\",\n \"extensions\": [\"kpxx\"]\n },\n \"application/vnd.dtg.local\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dtg.local.flash\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dtg.local.html\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ait\": {\n \"source\": \"iana\",\n \"extensions\": [\"ait\"]\n },\n \"application/vnd.dvb.dvbj\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.esgcontainer\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcdftnotifaccess\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcesgaccess\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcesgaccess2\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcesgpdd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.ipdcroaming\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.iptv.alfec-base\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.iptv.alfec-enhancement\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.notif-aggregate-root+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.notif-container+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.notif-generic+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.notif-ia-msglist+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.notif-ia-registration-request+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.notif-ia-registration-response+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.notif-init+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.pfr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dvb.service\": {\n \"source\": \"iana\",\n \"extensions\": [\"svc\"]\n },\n \"application/vnd.dxr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.dynageo\": {\n \"source\": \"iana\",\n \"extensions\": [\"geo\"]\n },\n \"application/vnd.dzr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.easykaraoke.cdgdownload\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecdis-update\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecip.rlp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecowin.chart\": {\n \"source\": \"iana\",\n \"extensions\": [\"mag\"]\n },\n \"application/vnd.ecowin.filerequest\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecowin.fileupdate\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecowin.series\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecowin.seriesrequest\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ecowin.seriesupdate\": {\n \"source\": \"iana\"\n },\n \"application/vnd.efi.img\": {\n \"source\": \"iana\"\n },\n \"application/vnd.efi.iso\": {\n \"source\": \"iana\"\n },\n \"application/vnd.emclient.accessrequest+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.enliven\": {\n \"source\": \"iana\",\n \"extensions\": [\"nml\"]\n },\n \"application/vnd.enphase.envoy\": {\n \"source\": \"iana\"\n },\n \"application/vnd.eprints.data+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.epson.esf\": {\n \"source\": \"iana\",\n \"extensions\": [\"esf\"]\n },\n \"application/vnd.epson.msf\": {\n \"source\": \"iana\",\n \"extensions\": [\"msf\"]\n },\n \"application/vnd.epson.quickanime\": {\n \"source\": \"iana\",\n \"extensions\": [\"qam\"]\n },\n \"application/vnd.epson.salt\": {\n \"source\": \"iana\",\n \"extensions\": [\"slt\"]\n },\n \"application/vnd.epson.ssf\": {\n \"source\": \"iana\",\n \"extensions\": [\"ssf\"]\n },\n \"application/vnd.ericsson.quickcall\": {\n \"source\": \"iana\"\n },\n \"application/vnd.espass-espass+zip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.eszigno3+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"es3\",\"et3\"]\n },\n \"application/vnd.etsi.aoc+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.asic-e+zip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.asic-s+zip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.cug+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.iptvcommand+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.iptvdiscovery+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.iptvprofile+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.iptvsad-bc+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.iptvsad-cod+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.iptvsad-npvr+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.iptvservice+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.iptvsync+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.iptvueprofile+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.mcid+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.mheg5\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.overload-control-policy-dataset+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.pstn+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.sci+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.simservs+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.timestamp-token\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.tsl+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.etsi.tsl.der\": {\n \"source\": \"iana\"\n },\n \"application/vnd.eudora.data\": {\n \"source\": \"iana\"\n },\n \"application/vnd.evolv.ecig.profile\": {\n \"source\": \"iana\"\n },\n \"application/vnd.evolv.ecig.settings\": {\n \"source\": \"iana\"\n },\n \"application/vnd.evolv.ecig.theme\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ezpix-album\": {\n \"source\": \"iana\",\n \"extensions\": [\"ez2\"]\n },\n \"application/vnd.ezpix-package\": {\n \"source\": \"iana\",\n \"extensions\": [\"ez3\"]\n },\n \"application/vnd.f-secure.mobile\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fastcopy-disk-image\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fdf\": {\n \"source\": \"iana\",\n \"extensions\": [\"fdf\"]\n },\n \"application/vnd.fdsn.mseed\": {\n \"source\": \"iana\",\n \"extensions\": [\"mseed\"]\n },\n \"application/vnd.fdsn.seed\": {\n \"source\": \"iana\",\n \"extensions\": [\"seed\",\"dataless\"]\n },\n \"application/vnd.ffsns\": {\n \"source\": \"iana\"\n },\n \"application/vnd.filmit.zfc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fints\": {\n \"source\": \"iana\"\n },\n \"application/vnd.firemonkeys.cloudcell\": {\n \"source\": \"iana\"\n },\n \"application/vnd.flographit\": {\n \"source\": \"iana\",\n \"extensions\": [\"gph\"]\n },\n \"application/vnd.fluxtime.clip\": {\n \"source\": \"iana\",\n \"extensions\": [\"ftc\"]\n },\n \"application/vnd.font-fontforge-sfd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.framemaker\": {\n \"source\": \"iana\",\n \"extensions\": [\"fm\",\"frame\",\"maker\",\"book\"]\n },\n \"application/vnd.frogans.fnc\": {\n \"source\": \"iana\",\n \"extensions\": [\"fnc\"]\n },\n \"application/vnd.frogans.ltf\": {\n \"source\": \"iana\",\n \"extensions\": [\"ltf\"]\n },\n \"application/vnd.fsc.weblaunch\": {\n \"source\": \"iana\",\n \"extensions\": [\"fsc\"]\n },\n \"application/vnd.fujitsu.oasys\": {\n \"source\": \"iana\",\n \"extensions\": [\"oas\"]\n },\n \"application/vnd.fujitsu.oasys2\": {\n \"source\": \"iana\",\n \"extensions\": [\"oa2\"]\n },\n \"application/vnd.fujitsu.oasys3\": {\n \"source\": \"iana\",\n \"extensions\": [\"oa3\"]\n },\n \"application/vnd.fujitsu.oasysgp\": {\n \"source\": \"iana\",\n \"extensions\": [\"fg5\"]\n },\n \"application/vnd.fujitsu.oasysprs\": {\n \"source\": \"iana\",\n \"extensions\": [\"bh2\"]\n },\n \"application/vnd.fujixerox.art-ex\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fujixerox.art4\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fujixerox.ddd\": {\n \"source\": \"iana\",\n \"extensions\": [\"ddd\"]\n },\n \"application/vnd.fujixerox.docuworks\": {\n \"source\": \"iana\",\n \"extensions\": [\"xdw\"]\n },\n \"application/vnd.fujixerox.docuworks.binder\": {\n \"source\": \"iana\",\n \"extensions\": [\"xbd\"]\n },\n \"application/vnd.fujixerox.docuworks.container\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fujixerox.hbpl\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fut-misnet\": {\n \"source\": \"iana\"\n },\n \"application/vnd.fuzzysheet\": {\n \"source\": \"iana\",\n \"extensions\": [\"fzs\"]\n },\n \"application/vnd.genomatix.tuxedo\": {\n \"source\": \"iana\",\n \"extensions\": [\"txd\"]\n },\n \"application/vnd.geo+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.geocube+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.geogebra.file\": {\n \"source\": \"iana\",\n \"extensions\": [\"ggb\"]\n },\n \"application/vnd.geogebra.tool\": {\n \"source\": \"iana\",\n \"extensions\": [\"ggt\"]\n },\n \"application/vnd.geometry-explorer\": {\n \"source\": \"iana\",\n \"extensions\": [\"gex\",\"gre\"]\n },\n \"application/vnd.geonext\": {\n \"source\": \"iana\",\n \"extensions\": [\"gxt\"]\n },\n \"application/vnd.geoplan\": {\n \"source\": \"iana\",\n \"extensions\": [\"g2w\"]\n },\n \"application/vnd.geospace\": {\n \"source\": \"iana\",\n \"extensions\": [\"g3w\"]\n },\n \"application/vnd.gerber\": {\n \"source\": \"iana\"\n },\n \"application/vnd.globalplatform.card-content-mgt\": {\n \"source\": \"iana\"\n },\n \"application/vnd.globalplatform.card-content-mgt-response\": {\n \"source\": \"iana\"\n },\n \"application/vnd.gmx\": {\n \"source\": \"iana\",\n \"extensions\": [\"gmx\"]\n },\n \"application/vnd.google-apps.document\": {\n \"compressible\": false,\n \"extensions\": [\"gdoc\"]\n },\n \"application/vnd.google-apps.presentation\": {\n \"compressible\": false,\n \"extensions\": [\"gslides\"]\n },\n \"application/vnd.google-apps.spreadsheet\": {\n \"compressible\": false,\n \"extensions\": [\"gsheet\"]\n },\n \"application/vnd.google-earth.kml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"kml\"]\n },\n \"application/vnd.google-earth.kmz\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"kmz\"]\n },\n \"application/vnd.gov.sk.e-form+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.gov.sk.e-form+zip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.gov.sk.xmldatacontainer+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.grafeq\": {\n \"source\": \"iana\",\n \"extensions\": [\"gqf\",\"gqs\"]\n },\n \"application/vnd.gridmp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.groove-account\": {\n \"source\": \"iana\",\n \"extensions\": [\"gac\"]\n },\n \"application/vnd.groove-help\": {\n \"source\": \"iana\",\n \"extensions\": [\"ghf\"]\n },\n \"application/vnd.groove-identity-message\": {\n \"source\": \"iana\",\n \"extensions\": [\"gim\"]\n },\n \"application/vnd.groove-injector\": {\n \"source\": \"iana\",\n \"extensions\": [\"grv\"]\n },\n \"application/vnd.groove-tool-message\": {\n \"source\": \"iana\",\n \"extensions\": [\"gtm\"]\n },\n \"application/vnd.groove-tool-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"tpl\"]\n },\n \"application/vnd.groove-vcard\": {\n \"source\": \"iana\",\n \"extensions\": [\"vcg\"]\n },\n \"application/vnd.hal+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hal+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"hal\"]\n },\n \"application/vnd.handheld-entertainment+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"zmm\"]\n },\n \"application/vnd.hbci\": {\n \"source\": \"iana\",\n \"extensions\": [\"hbci\"]\n },\n \"application/vnd.hc+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hcl-bireports\": {\n \"source\": \"iana\"\n },\n \"application/vnd.hdt\": {\n \"source\": \"iana\"\n },\n \"application/vnd.heroku+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hhe.lesson-player\": {\n \"source\": \"iana\",\n \"extensions\": [\"les\"]\n },\n \"application/vnd.hp-hpgl\": {\n \"source\": \"iana\",\n \"extensions\": [\"hpgl\"]\n },\n \"application/vnd.hp-hpid\": {\n \"source\": \"iana\",\n \"extensions\": [\"hpid\"]\n },\n \"application/vnd.hp-hps\": {\n \"source\": \"iana\",\n \"extensions\": [\"hps\"]\n },\n \"application/vnd.hp-jlyt\": {\n \"source\": \"iana\",\n \"extensions\": [\"jlt\"]\n },\n \"application/vnd.hp-pcl\": {\n \"source\": \"iana\",\n \"extensions\": [\"pcl\"]\n },\n \"application/vnd.hp-pclxl\": {\n \"source\": \"iana\",\n \"extensions\": [\"pclxl\"]\n },\n \"application/vnd.httphone\": {\n \"source\": \"iana\"\n },\n \"application/vnd.hydrostatix.sof-data\": {\n \"source\": \"iana\",\n \"extensions\": [\"sfd-hdstx\"]\n },\n \"application/vnd.hyper-item+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hyperdrive+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.hzn-3d-crossword\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ibm.afplinedata\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ibm.electronic-media\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ibm.minipay\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpy\"]\n },\n \"application/vnd.ibm.modcap\": {\n \"source\": \"iana\",\n \"extensions\": [\"afp\",\"listafp\",\"list3820\"]\n },\n \"application/vnd.ibm.rights-management\": {\n \"source\": \"iana\",\n \"extensions\": [\"irm\"]\n },\n \"application/vnd.ibm.secure-container\": {\n \"source\": \"iana\",\n \"extensions\": [\"sc\"]\n },\n \"application/vnd.iccprofile\": {\n \"source\": \"iana\",\n \"extensions\": [\"icc\",\"icm\"]\n },\n \"application/vnd.ieee.1905\": {\n \"source\": \"iana\"\n },\n \"application/vnd.igloader\": {\n \"source\": \"iana\",\n \"extensions\": [\"igl\"]\n },\n \"application/vnd.imagemeter.folder+zip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.imagemeter.image+zip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.immervision-ivp\": {\n \"source\": \"iana\",\n \"extensions\": [\"ivp\"]\n },\n \"application/vnd.immervision-ivu\": {\n \"source\": \"iana\",\n \"extensions\": [\"ivu\"]\n },\n \"application/vnd.ims.imsccv1p1\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ims.imsccv1p2\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ims.imsccv1p3\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ims.lis.v2.result+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolconsumerprofile+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolproxy+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolproxy.id+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolsettings+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.ims.lti.v2.toolsettings.simple+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.informedcontrol.rms+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.informix-visionary\": {\n \"source\": \"iana\"\n },\n \"application/vnd.infotech.project\": {\n \"source\": \"iana\"\n },\n \"application/vnd.infotech.project+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.innopath.wamp.notification\": {\n \"source\": \"iana\"\n },\n \"application/vnd.insors.igm\": {\n \"source\": \"iana\",\n \"extensions\": [\"igm\"]\n },\n \"application/vnd.intercon.formnet\": {\n \"source\": \"iana\",\n \"extensions\": [\"xpw\",\"xpx\"]\n },\n \"application/vnd.intergeo\": {\n \"source\": \"iana\",\n \"extensions\": [\"i2g\"]\n },\n \"application/vnd.intertrust.digibox\": {\n \"source\": \"iana\"\n },\n \"application/vnd.intertrust.nncp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.intu.qbo\": {\n \"source\": \"iana\",\n \"extensions\": [\"qbo\"]\n },\n \"application/vnd.intu.qfx\": {\n \"source\": \"iana\",\n \"extensions\": [\"qfx\"]\n },\n \"application/vnd.iptc.g2.catalogitem+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.iptc.g2.conceptitem+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.iptc.g2.knowledgeitem+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.iptc.g2.newsitem+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.iptc.g2.newsmessage+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.iptc.g2.packageitem+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.iptc.g2.planningitem+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ipunplugged.rcprofile\": {\n \"source\": \"iana\",\n \"extensions\": [\"rcprofile\"]\n },\n \"application/vnd.irepository.package+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"irp\"]\n },\n \"application/vnd.is-xpr\": {\n \"source\": \"iana\",\n \"extensions\": [\"xpr\"]\n },\n \"application/vnd.isac.fcs\": {\n \"source\": \"iana\",\n \"extensions\": [\"fcs\"]\n },\n \"application/vnd.jam\": {\n \"source\": \"iana\",\n \"extensions\": [\"jam\"]\n },\n \"application/vnd.japannet-directory-service\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-jpnstore-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-payment-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-registration\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-registration-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-setstore-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-verification\": {\n \"source\": \"iana\"\n },\n \"application/vnd.japannet-verification-wakeup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.jcp.javame.midlet-rms\": {\n \"source\": \"iana\",\n \"extensions\": [\"rms\"]\n },\n \"application/vnd.jisp\": {\n \"source\": \"iana\",\n \"extensions\": [\"jisp\"]\n },\n \"application/vnd.joost.joda-archive\": {\n \"source\": \"iana\",\n \"extensions\": [\"joda\"]\n },\n \"application/vnd.jsk.isdn-ngn\": {\n \"source\": \"iana\"\n },\n \"application/vnd.kahootz\": {\n \"source\": \"iana\",\n \"extensions\": [\"ktz\",\"ktr\"]\n },\n \"application/vnd.kde.karbon\": {\n \"source\": \"iana\",\n \"extensions\": [\"karbon\"]\n },\n \"application/vnd.kde.kchart\": {\n \"source\": \"iana\",\n \"extensions\": [\"chrt\"]\n },\n \"application/vnd.kde.kformula\": {\n \"source\": \"iana\",\n \"extensions\": [\"kfo\"]\n },\n \"application/vnd.kde.kivio\": {\n \"source\": \"iana\",\n \"extensions\": [\"flw\"]\n },\n \"application/vnd.kde.kontour\": {\n \"source\": \"iana\",\n \"extensions\": [\"kon\"]\n },\n \"application/vnd.kde.kpresenter\": {\n \"source\": \"iana\",\n \"extensions\": [\"kpr\",\"kpt\"]\n },\n \"application/vnd.kde.kspread\": {\n \"source\": \"iana\",\n \"extensions\": [\"ksp\"]\n },\n \"application/vnd.kde.kword\": {\n \"source\": \"iana\",\n \"extensions\": [\"kwd\",\"kwt\"]\n },\n \"application/vnd.kenameaapp\": {\n \"source\": \"iana\",\n \"extensions\": [\"htke\"]\n },\n \"application/vnd.kidspiration\": {\n \"source\": \"iana\",\n \"extensions\": [\"kia\"]\n },\n \"application/vnd.kinar\": {\n \"source\": \"iana\",\n \"extensions\": [\"kne\",\"knp\"]\n },\n \"application/vnd.koan\": {\n \"source\": \"iana\",\n \"extensions\": [\"skp\",\"skd\",\"skt\",\"skm\"]\n },\n \"application/vnd.kodak-descriptor\": {\n \"source\": \"iana\",\n \"extensions\": [\"sse\"]\n },\n \"application/vnd.las.las+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.las.las+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"lasxml\"]\n },\n \"application/vnd.liberty-request+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.llamagraphics.life-balance.desktop\": {\n \"source\": \"iana\",\n \"extensions\": [\"lbd\"]\n },\n \"application/vnd.llamagraphics.life-balance.exchange+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"lbe\"]\n },\n \"application/vnd.lotus-1-2-3\": {\n \"source\": \"iana\",\n \"extensions\": [\"123\"]\n },\n \"application/vnd.lotus-approach\": {\n \"source\": \"iana\",\n \"extensions\": [\"apr\"]\n },\n \"application/vnd.lotus-freelance\": {\n \"source\": \"iana\",\n \"extensions\": [\"pre\"]\n },\n \"application/vnd.lotus-notes\": {\n \"source\": \"iana\",\n \"extensions\": [\"nsf\"]\n },\n \"application/vnd.lotus-organizer\": {\n \"source\": \"iana\",\n \"extensions\": [\"org\"]\n },\n \"application/vnd.lotus-screencam\": {\n \"source\": \"iana\",\n \"extensions\": [\"scm\"]\n },\n \"application/vnd.lotus-wordpro\": {\n \"source\": \"iana\",\n \"extensions\": [\"lwp\"]\n },\n \"application/vnd.macports.portpkg\": {\n \"source\": \"iana\",\n \"extensions\": [\"portpkg\"]\n },\n \"application/vnd.mapbox-vector-tile\": {\n \"source\": \"iana\"\n },\n \"application/vnd.marlin.drm.actiontoken+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.marlin.drm.conftoken+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.marlin.drm.license+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.marlin.drm.mdcf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mason+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.maxmind.maxmind-db\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mcd\": {\n \"source\": \"iana\",\n \"extensions\": [\"mcd\"]\n },\n \"application/vnd.medcalcdata\": {\n \"source\": \"iana\",\n \"extensions\": [\"mc1\"]\n },\n \"application/vnd.mediastation.cdkey\": {\n \"source\": \"iana\",\n \"extensions\": [\"cdkey\"]\n },\n \"application/vnd.meridian-slingshot\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mfer\": {\n \"source\": \"iana\",\n \"extensions\": [\"mwf\"]\n },\n \"application/vnd.mfmp\": {\n \"source\": \"iana\",\n \"extensions\": [\"mfm\"]\n },\n \"application/vnd.micro+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.micrografx.flo\": {\n \"source\": \"iana\",\n \"extensions\": [\"flo\"]\n },\n \"application/vnd.micrografx.igx\": {\n \"source\": \"iana\",\n \"extensions\": [\"igx\"]\n },\n \"application/vnd.microsoft.portable-executable\": {\n \"source\": \"iana\"\n },\n \"application/vnd.microsoft.windows.thumbnail-cache\": {\n \"source\": \"iana\"\n },\n \"application/vnd.miele+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.mif\": {\n \"source\": \"iana\",\n \"extensions\": [\"mif\"]\n },\n \"application/vnd.minisoft-hp3000-save\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mitsubishi.misty-guard.trustweb\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mobius.daf\": {\n \"source\": \"iana\",\n \"extensions\": [\"daf\"]\n },\n \"application/vnd.mobius.dis\": {\n \"source\": \"iana\",\n \"extensions\": [\"dis\"]\n },\n \"application/vnd.mobius.mbk\": {\n \"source\": \"iana\",\n \"extensions\": [\"mbk\"]\n },\n \"application/vnd.mobius.mqy\": {\n \"source\": \"iana\",\n \"extensions\": [\"mqy\"]\n },\n \"application/vnd.mobius.msl\": {\n \"source\": \"iana\",\n \"extensions\": [\"msl\"]\n },\n \"application/vnd.mobius.plc\": {\n \"source\": \"iana\",\n \"extensions\": [\"plc\"]\n },\n \"application/vnd.mobius.txf\": {\n \"source\": \"iana\",\n \"extensions\": [\"txf\"]\n },\n \"application/vnd.mophun.application\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpn\"]\n },\n \"application/vnd.mophun.certificate\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpc\"]\n },\n \"application/vnd.motorola.flexsuite\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.adsi\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.fis\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.gotap\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.kmr\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.ttc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.flexsuite.wem\": {\n \"source\": \"iana\"\n },\n \"application/vnd.motorola.iprm\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mozilla.xul+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xul\"]\n },\n \"application/vnd.ms-3mfdocument\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-artgalry\": {\n \"source\": \"iana\",\n \"extensions\": [\"cil\"]\n },\n \"application/vnd.ms-asf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-cab-compressed\": {\n \"source\": \"iana\",\n \"extensions\": [\"cab\"]\n },\n \"application/vnd.ms-color.iccprofile\": {\n \"source\": \"apache\"\n },\n \"application/vnd.ms-excel\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"xls\",\"xlm\",\"xla\",\"xlc\",\"xlt\",\"xlw\"]\n },\n \"application/vnd.ms-excel.addin.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"xlam\"]\n },\n \"application/vnd.ms-excel.sheet.binary.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"xlsb\"]\n },\n \"application/vnd.ms-excel.sheet.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"xlsm\"]\n },\n \"application/vnd.ms-excel.template.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"xltm\"]\n },\n \"application/vnd.ms-fontobject\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"eot\"]\n },\n \"application/vnd.ms-htmlhelp\": {\n \"source\": \"iana\",\n \"extensions\": [\"chm\"]\n },\n \"application/vnd.ms-ims\": {\n \"source\": \"iana\",\n \"extensions\": [\"ims\"]\n },\n \"application/vnd.ms-lrm\": {\n \"source\": \"iana\",\n \"extensions\": [\"lrm\"]\n },\n \"application/vnd.ms-office.activex+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-officetheme\": {\n \"source\": \"iana\",\n \"extensions\": [\"thmx\"]\n },\n \"application/vnd.ms-opentype\": {\n \"source\": \"apache\",\n \"compressible\": true\n },\n \"application/vnd.ms-outlook\": {\n \"compressible\": false,\n \"extensions\": [\"msg\"]\n },\n \"application/vnd.ms-package.obfuscated-opentype\": {\n \"source\": \"apache\"\n },\n \"application/vnd.ms-pki.seccat\": {\n \"source\": \"apache\",\n \"extensions\": [\"cat\"]\n },\n \"application/vnd.ms-pki.stl\": {\n \"source\": \"apache\",\n \"extensions\": [\"stl\"]\n },\n \"application/vnd.ms-playready.initiator+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-powerpoint\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"ppt\",\"pps\",\"pot\"]\n },\n \"application/vnd.ms-powerpoint.addin.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"ppam\"]\n },\n \"application/vnd.ms-powerpoint.presentation.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"pptm\"]\n },\n \"application/vnd.ms-powerpoint.slide.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"sldm\"]\n },\n \"application/vnd.ms-powerpoint.slideshow.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"ppsm\"]\n },\n \"application/vnd.ms-powerpoint.template.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"potm\"]\n },\n \"application/vnd.ms-printdevicecapabilities+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-printing.printticket+xml\": {\n \"source\": \"apache\"\n },\n \"application/vnd.ms-printschematicket+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-project\": {\n \"source\": \"iana\",\n \"extensions\": [\"mpp\",\"mpt\"]\n },\n \"application/vnd.ms-tnef\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-windows.devicepairing\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-windows.nwprinting.oob\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-windows.printerpairing\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-windows.wsd.oob\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-wmdrm.lic-chlg-req\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-wmdrm.lic-resp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-wmdrm.meter-chlg-req\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-wmdrm.meter-resp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ms-word.document.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"docm\"]\n },\n \"application/vnd.ms-word.template.macroenabled.12\": {\n \"source\": \"iana\",\n \"extensions\": [\"dotm\"]\n },\n \"application/vnd.ms-works\": {\n \"source\": \"iana\",\n \"extensions\": [\"wps\",\"wks\",\"wcm\",\"wdb\"]\n },\n \"application/vnd.ms-wpl\": {\n \"source\": \"iana\",\n \"extensions\": [\"wpl\"]\n },\n \"application/vnd.ms-xpsdocument\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"xps\"]\n },\n \"application/vnd.msa-disk-image\": {\n \"source\": \"iana\"\n },\n \"application/vnd.mseq\": {\n \"source\": \"iana\",\n \"extensions\": [\"mseq\"]\n },\n \"application/vnd.msign\": {\n \"source\": \"iana\"\n },\n \"application/vnd.multiad.creator\": {\n \"source\": \"iana\"\n },\n \"application/vnd.multiad.creator.cif\": {\n \"source\": \"iana\"\n },\n \"application/vnd.music-niff\": {\n \"source\": \"iana\"\n },\n \"application/vnd.musician\": {\n \"source\": \"iana\",\n \"extensions\": [\"mus\"]\n },\n \"application/vnd.muvee.style\": {\n \"source\": \"iana\",\n \"extensions\": [\"msty\"]\n },\n \"application/vnd.mynfc\": {\n \"source\": \"iana\",\n \"extensions\": [\"taglet\"]\n },\n \"application/vnd.ncd.control\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ncd.reference\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nearst.inv+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.nervana\": {\n \"source\": \"iana\"\n },\n \"application/vnd.netfpx\": {\n \"source\": \"iana\"\n },\n \"application/vnd.neurolanguage.nlu\": {\n \"source\": \"iana\",\n \"extensions\": [\"nlu\"]\n },\n \"application/vnd.nintendo.nitro.rom\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nintendo.snes.rom\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nitf\": {\n \"source\": \"iana\",\n \"extensions\": [\"ntf\",\"nitf\"]\n },\n \"application/vnd.noblenet-directory\": {\n \"source\": \"iana\",\n \"extensions\": [\"nnd\"]\n },\n \"application/vnd.noblenet-sealer\": {\n \"source\": \"iana\",\n \"extensions\": [\"nns\"]\n },\n \"application/vnd.noblenet-web\": {\n \"source\": \"iana\",\n \"extensions\": [\"nnw\"]\n },\n \"application/vnd.nokia.catalogs\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.conml+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.conml+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.iptv.config+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.isds-radio-presets\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.landmark+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.landmark+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.landmarkcollection+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.n-gage.ac+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.n-gage.data\": {\n \"source\": \"iana\",\n \"extensions\": [\"ngdat\"]\n },\n \"application/vnd.nokia.n-gage.symbian.install\": {\n \"source\": \"iana\",\n \"extensions\": [\"n-gage\"]\n },\n \"application/vnd.nokia.ncd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.pcd+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.pcd+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.nokia.radio-preset\": {\n \"source\": \"iana\",\n \"extensions\": [\"rpst\"]\n },\n \"application/vnd.nokia.radio-presets\": {\n \"source\": \"iana\",\n \"extensions\": [\"rpss\"]\n },\n \"application/vnd.novadigm.edm\": {\n \"source\": \"iana\",\n \"extensions\": [\"edm\"]\n },\n \"application/vnd.novadigm.edx\": {\n \"source\": \"iana\",\n \"extensions\": [\"edx\"]\n },\n \"application/vnd.novadigm.ext\": {\n \"source\": \"iana\",\n \"extensions\": [\"ext\"]\n },\n \"application/vnd.ntt-local.content-share\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ntt-local.file-transfer\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ntt-local.ogw_remote-access\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ntt-local.sip-ta_remote\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ntt-local.sip-ta_tcp_stream\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oasis.opendocument.chart\": {\n \"source\": \"iana\",\n \"extensions\": [\"odc\"]\n },\n \"application/vnd.oasis.opendocument.chart-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"otc\"]\n },\n \"application/vnd.oasis.opendocument.database\": {\n \"source\": \"iana\",\n \"extensions\": [\"odb\"]\n },\n \"application/vnd.oasis.opendocument.formula\": {\n \"source\": \"iana\",\n \"extensions\": [\"odf\"]\n },\n \"application/vnd.oasis.opendocument.formula-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"odft\"]\n },\n \"application/vnd.oasis.opendocument.graphics\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"odg\"]\n },\n \"application/vnd.oasis.opendocument.graphics-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"otg\"]\n },\n \"application/vnd.oasis.opendocument.image\": {\n \"source\": \"iana\",\n \"extensions\": [\"odi\"]\n },\n \"application/vnd.oasis.opendocument.image-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"oti\"]\n },\n \"application/vnd.oasis.opendocument.presentation\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"odp\"]\n },\n \"application/vnd.oasis.opendocument.presentation-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"otp\"]\n },\n \"application/vnd.oasis.opendocument.spreadsheet\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"ods\"]\n },\n \"application/vnd.oasis.opendocument.spreadsheet-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"ots\"]\n },\n \"application/vnd.oasis.opendocument.text\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"odt\"]\n },\n \"application/vnd.oasis.opendocument.text-master\": {\n \"source\": \"iana\",\n \"extensions\": [\"odm\"]\n },\n \"application/vnd.oasis.opendocument.text-template\": {\n \"source\": \"iana\",\n \"extensions\": [\"ott\"]\n },\n \"application/vnd.oasis.opendocument.text-web\": {\n \"source\": \"iana\",\n \"extensions\": [\"oth\"]\n },\n \"application/vnd.obn\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ocf+cbor\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oftn.l10n+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oipf.contentaccessdownload+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.contentaccessstreaming+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.cspg-hexbinary\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.dae.svg+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.dae.xhtml+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.mippvcontrolmessage+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.pae.gem\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.spdiscovery+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.spdlist+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.ueprofile+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oipf.userprofile+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.olpc-sugar\": {\n \"source\": \"iana\",\n \"extensions\": [\"xo\"]\n },\n \"application/vnd.oma-scws-config\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma-scws-http-request\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma-scws-http-response\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.associated-procedure-parameter+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.drm-trigger+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.imd+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.ltkm\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.notification+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.provisioningtrigger\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.sgboot\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.sgdd+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.sgdu\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.simple-symbol-container\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.smartcard-trigger+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.sprov+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.bcast.stkm\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.cab-address-book+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.cab-feature-handler+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.cab-pcc+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.cab-subs-invite+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.cab-user-prefs+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.dcd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.dcdc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.dd2+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"dd2\"]\n },\n \"application/vnd.oma.drm.risd+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.group-usage-list+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.lwm2m+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.oma.lwm2m+tlv\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.pal+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.poc.detailed-progress-report+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.poc.final-report+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.poc.groups+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.poc.invocation-descriptor+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.poc.optimized-progress-report+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.push\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.scidm.messages+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oma.xcap-directory+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.omads-email+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.omads-file+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.omads-folder+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.omaloc-supl-init\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepager\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertamp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertamx\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertat\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertatp\": {\n \"source\": \"iana\"\n },\n \"application/vnd.onepagertatx\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openblox.game+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openblox.game-binary\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openeye.oeb\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openofficeorg.extension\": {\n \"source\": \"apache\",\n \"extensions\": [\"oxt\"]\n },\n \"application/vnd.openstreetmap.data+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.custom-properties+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.customxmlproperties+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.drawing+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.extended-properties+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.comments+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"pptx\"]\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slide\": {\n \"source\": \"iana\",\n \"extensions\": [\"sldx\"]\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slide+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slideshow\": {\n \"source\": \"iana\",\n \"extensions\": [\"ppsx\"]\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.tags+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.template\": {\n \"source\": \"iana\",\n \"extensions\": [\"potx\"]\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"xlsx\"]\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.template\": {\n \"source\": \"iana\",\n \"extensions\": [\"xltx\"]\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.theme+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.themeoverride+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.vmldrawing\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"docx\"]\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.template\": {\n \"source\": \"iana\",\n \"extensions\": [\"dotx\"]\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-package.core-properties+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.openxmlformats-package.relationships+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oracle.resource+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.orange.indata\": {\n \"source\": \"iana\"\n },\n \"application/vnd.osa.netdeploy\": {\n \"source\": \"iana\"\n },\n \"application/vnd.osgeo.mapguide.package\": {\n \"source\": \"iana\",\n \"extensions\": [\"mgp\"]\n },\n \"application/vnd.osgi.bundle\": {\n \"source\": \"iana\"\n },\n \"application/vnd.osgi.dp\": {\n \"source\": \"iana\",\n \"extensions\": [\"dp\"]\n },\n \"application/vnd.osgi.subsystem\": {\n \"source\": \"iana\",\n \"extensions\": [\"esa\"]\n },\n \"application/vnd.otps.ct-kip+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.oxli.countgraph\": {\n \"source\": \"iana\"\n },\n \"application/vnd.pagerduty+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.palm\": {\n \"source\": \"iana\",\n \"extensions\": [\"pdb\",\"pqa\",\"oprc\"]\n },\n \"application/vnd.panoply\": {\n \"source\": \"iana\"\n },\n \"application/vnd.paos+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.paos.xml\": {\n \"source\": \"apache\"\n },\n \"application/vnd.patentdive\": {\n \"source\": \"iana\"\n },\n \"application/vnd.pawaafile\": {\n \"source\": \"iana\",\n \"extensions\": [\"paw\"]\n },\n \"application/vnd.pcos\": {\n \"source\": \"iana\"\n },\n \"application/vnd.pg.format\": {\n \"source\": \"iana\",\n \"extensions\": [\"str\"]\n },\n \"application/vnd.pg.osasli\": {\n \"source\": \"iana\",\n \"extensions\": [\"ei6\"]\n },\n \"application/vnd.piaccess.application-licence\": {\n \"source\": \"iana\"\n },\n \"application/vnd.picsel\": {\n \"source\": \"iana\",\n \"extensions\": [\"efif\"]\n },\n \"application/vnd.pmi.widget\": {\n \"source\": \"iana\",\n \"extensions\": [\"wg\"]\n },\n \"application/vnd.poc.group-advertisement+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.pocketlearn\": {\n \"source\": \"iana\",\n \"extensions\": [\"plf\"]\n },\n \"application/vnd.powerbuilder6\": {\n \"source\": \"iana\",\n \"extensions\": [\"pbd\"]\n },\n \"application/vnd.powerbuilder6-s\": {\n \"source\": \"iana\"\n },\n \"application/vnd.powerbuilder7\": {\n \"source\": \"iana\"\n },\n \"application/vnd.powerbuilder7-s\": {\n \"source\": \"iana\"\n },\n \"application/vnd.powerbuilder75\": {\n \"source\": \"iana\"\n },\n \"application/vnd.powerbuilder75-s\": {\n \"source\": \"iana\"\n },\n \"application/vnd.preminet\": {\n \"source\": \"iana\"\n },\n \"application/vnd.previewsystems.box\": {\n \"source\": \"iana\",\n \"extensions\": [\"box\"]\n },\n \"application/vnd.proteus.magazine\": {\n \"source\": \"iana\",\n \"extensions\": [\"mgz\"]\n },\n \"application/vnd.publishare-delta-tree\": {\n \"source\": \"iana\",\n \"extensions\": [\"qps\"]\n },\n \"application/vnd.pvi.ptid1\": {\n \"source\": \"iana\",\n \"extensions\": [\"ptid\"]\n },\n \"application/vnd.pwg-multiplexed\": {\n \"source\": \"iana\"\n },\n \"application/vnd.pwg-xhtml-print+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.qualcomm.brew-app-res\": {\n \"source\": \"iana\"\n },\n \"application/vnd.quarantainenet\": {\n \"source\": \"iana\"\n },\n \"application/vnd.quark.quarkxpress\": {\n \"source\": \"iana\",\n \"extensions\": [\"qxd\",\"qxt\",\"qwd\",\"qwt\",\"qxl\",\"qxb\"]\n },\n \"application/vnd.quobject-quoxdocument\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.moml+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-audit+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-audit-conf+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-audit-conn+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-audit-dialog+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-audit-stream+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-conf+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-dialog+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-dialog-base+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-dialog-fax-detect+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-dialog-fax-sendrecv+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-dialog-group+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-dialog-speech+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.radisys.msml-dialog-transform+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.rainstor.data\": {\n \"source\": \"iana\"\n },\n \"application/vnd.rapid\": {\n \"source\": \"iana\"\n },\n \"application/vnd.rar\": {\n \"source\": \"iana\"\n },\n \"application/vnd.realvnc.bed\": {\n \"source\": \"iana\",\n \"extensions\": [\"bed\"]\n },\n \"application/vnd.recordare.musicxml\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxl\"]\n },\n \"application/vnd.recordare.musicxml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"musicxml\"]\n },\n \"application/vnd.renlearn.rlprint\": {\n \"source\": \"iana\"\n },\n \"application/vnd.restful+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.rig.cryptonote\": {\n \"source\": \"iana\",\n \"extensions\": [\"cryptonote\"]\n },\n \"application/vnd.rim.cod\": {\n \"source\": \"apache\",\n \"extensions\": [\"cod\"]\n },\n \"application/vnd.rn-realmedia\": {\n \"source\": \"apache\",\n \"extensions\": [\"rm\"]\n },\n \"application/vnd.rn-realmedia-vbr\": {\n \"source\": \"apache\",\n \"extensions\": [\"rmvb\"]\n },\n \"application/vnd.route66.link66+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"link66\"]\n },\n \"application/vnd.rs-274x\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ruckus.download\": {\n \"source\": \"iana\"\n },\n \"application/vnd.s3sms\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sailingtracker.track\": {\n \"source\": \"iana\",\n \"extensions\": [\"st\"]\n },\n \"application/vnd.sbm.cid\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sbm.mid2\": {\n \"source\": \"iana\"\n },\n \"application/vnd.scribus\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.3df\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.csf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.doc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.eml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.mht\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.net\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.ppt\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.tiff\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealed.xls\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealedmedia.softseal.html\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sealedmedia.softseal.pdf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.seemail\": {\n \"source\": \"iana\",\n \"extensions\": [\"see\"]\n },\n \"application/vnd.sema\": {\n \"source\": \"iana\",\n \"extensions\": [\"sema\"]\n },\n \"application/vnd.semd\": {\n \"source\": \"iana\",\n \"extensions\": [\"semd\"]\n },\n \"application/vnd.semf\": {\n \"source\": \"iana\",\n \"extensions\": [\"semf\"]\n },\n \"application/vnd.shana.informed.formdata\": {\n \"source\": \"iana\",\n \"extensions\": [\"ifm\"]\n },\n \"application/vnd.shana.informed.formtemplate\": {\n \"source\": \"iana\",\n \"extensions\": [\"itp\"]\n },\n \"application/vnd.shana.informed.interchange\": {\n \"source\": \"iana\",\n \"extensions\": [\"iif\"]\n },\n \"application/vnd.shana.informed.package\": {\n \"source\": \"iana\",\n \"extensions\": [\"ipk\"]\n },\n \"application/vnd.sigrok.session\": {\n \"source\": \"iana\"\n },\n \"application/vnd.simtech-mindmapper\": {\n \"source\": \"iana\",\n \"extensions\": [\"twd\",\"twds\"]\n },\n \"application/vnd.siren+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.smaf\": {\n \"source\": \"iana\",\n \"extensions\": [\"mmf\"]\n },\n \"application/vnd.smart.notebook\": {\n \"source\": \"iana\"\n },\n \"application/vnd.smart.teacher\": {\n \"source\": \"iana\",\n \"extensions\": [\"teacher\"]\n },\n \"application/vnd.software602.filler.form+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.software602.filler.form-xml-zip\": {\n \"source\": \"iana\"\n },\n \"application/vnd.solent.sdkm+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"sdkm\",\"sdkd\"]\n },\n \"application/vnd.spotfire.dxp\": {\n \"source\": \"iana\",\n \"extensions\": [\"dxp\"]\n },\n \"application/vnd.spotfire.sfs\": {\n \"source\": \"iana\",\n \"extensions\": [\"sfs\"]\n },\n \"application/vnd.sqlite3\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sss-cod\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sss-dtf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sss-ntf\": {\n \"source\": \"iana\"\n },\n \"application/vnd.stardivision.calc\": {\n \"source\": \"apache\",\n \"extensions\": [\"sdc\"]\n },\n \"application/vnd.stardivision.draw\": {\n \"source\": \"apache\",\n \"extensions\": [\"sda\"]\n },\n \"application/vnd.stardivision.impress\": {\n \"source\": \"apache\",\n \"extensions\": [\"sdd\"]\n },\n \"application/vnd.stardivision.math\": {\n \"source\": \"apache\",\n \"extensions\": [\"smf\"]\n },\n \"application/vnd.stardivision.writer\": {\n \"source\": \"apache\",\n \"extensions\": [\"sdw\",\"vor\"]\n },\n \"application/vnd.stardivision.writer-global\": {\n \"source\": \"apache\",\n \"extensions\": [\"sgl\"]\n },\n \"application/vnd.stepmania.package\": {\n \"source\": \"iana\",\n \"extensions\": [\"smzip\"]\n },\n \"application/vnd.stepmania.stepchart\": {\n \"source\": \"iana\",\n \"extensions\": [\"sm\"]\n },\n \"application/vnd.street-stream\": {\n \"source\": \"iana\"\n },\n \"application/vnd.sun.wadl+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"wadl\"]\n },\n \"application/vnd.sun.xml.calc\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxc\"]\n },\n \"application/vnd.sun.xml.calc.template\": {\n \"source\": \"apache\",\n \"extensions\": [\"stc\"]\n },\n \"application/vnd.sun.xml.draw\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxd\"]\n },\n \"application/vnd.sun.xml.draw.template\": {\n \"source\": \"apache\",\n \"extensions\": [\"std\"]\n },\n \"application/vnd.sun.xml.impress\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxi\"]\n },\n \"application/vnd.sun.xml.impress.template\": {\n \"source\": \"apache\",\n \"extensions\": [\"sti\"]\n },\n \"application/vnd.sun.xml.math\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxm\"]\n },\n \"application/vnd.sun.xml.writer\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxw\"]\n },\n \"application/vnd.sun.xml.writer.global\": {\n \"source\": \"apache\",\n \"extensions\": [\"sxg\"]\n },\n \"application/vnd.sun.xml.writer.template\": {\n \"source\": \"apache\",\n \"extensions\": [\"stw\"]\n },\n \"application/vnd.sus-calendar\": {\n \"source\": \"iana\",\n \"extensions\": [\"sus\",\"susp\"]\n },\n \"application/vnd.svd\": {\n \"source\": \"iana\",\n \"extensions\": [\"svd\"]\n },\n \"application/vnd.swiftview-ics\": {\n \"source\": \"iana\"\n },\n \"application/vnd.symbian.install\": {\n \"source\": \"apache\",\n \"extensions\": [\"sis\",\"sisx\"]\n },\n \"application/vnd.syncml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"xsm\"]\n },\n \"application/vnd.syncml.dm+wbxml\": {\n \"source\": \"iana\",\n \"extensions\": [\"bdm\"]\n },\n \"application/vnd.syncml.dm+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"xdm\"]\n },\n \"application/vnd.syncml.dm.notification\": {\n \"source\": \"iana\"\n },\n \"application/vnd.syncml.dmddf+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.syncml.dmddf+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.syncml.dmtnds+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.syncml.dmtnds+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.syncml.ds.notification\": {\n \"source\": \"iana\"\n },\n \"application/vnd.tableschema+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.tao.intent-module-archive\": {\n \"source\": \"iana\",\n \"extensions\": [\"tao\"]\n },\n \"application/vnd.tcpdump.pcap\": {\n \"source\": \"iana\",\n \"extensions\": [\"pcap\",\"cap\",\"dmp\"]\n },\n \"application/vnd.tmd.mediaflex.api+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.tml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.tmobile-livetv\": {\n \"source\": \"iana\",\n \"extensions\": [\"tmo\"]\n },\n \"application/vnd.tri.onesource\": {\n \"source\": \"iana\"\n },\n \"application/vnd.trid.tpt\": {\n \"source\": \"iana\",\n \"extensions\": [\"tpt\"]\n },\n \"application/vnd.triscape.mxs\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxs\"]\n },\n \"application/vnd.trueapp\": {\n \"source\": \"iana\",\n \"extensions\": [\"tra\"]\n },\n \"application/vnd.truedoc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ubisoft.webplayer\": {\n \"source\": \"iana\"\n },\n \"application/vnd.ufdl\": {\n \"source\": \"iana\",\n \"extensions\": [\"ufd\",\"ufdl\"]\n },\n \"application/vnd.uiq.theme\": {\n \"source\": \"iana\",\n \"extensions\": [\"utz\"]\n },\n \"application/vnd.umajin\": {\n \"source\": \"iana\",\n \"extensions\": [\"umj\"]\n },\n \"application/vnd.unity\": {\n \"source\": \"iana\",\n \"extensions\": [\"unityweb\"]\n },\n \"application/vnd.uoml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"uoml\"]\n },\n \"application/vnd.uplanet.alert\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.alert-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.bearer-choice\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.bearer-choice-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.cacheop\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.cacheop-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.channel\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.channel-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.list\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.list-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.listcmd\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.listcmd-wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uplanet.signal\": {\n \"source\": \"iana\"\n },\n \"application/vnd.uri-map\": {\n \"source\": \"iana\"\n },\n \"application/vnd.valve.source.material\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vcx\": {\n \"source\": \"iana\",\n \"extensions\": [\"vcx\"]\n },\n \"application/vnd.vd-study\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vectorworks\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vel+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.verimatrix.vcas\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vidsoft.vidconference\": {\n \"source\": \"iana\"\n },\n \"application/vnd.visio\": {\n \"source\": \"iana\",\n \"extensions\": [\"vsd\",\"vst\",\"vss\",\"vsw\"]\n },\n \"application/vnd.visionary\": {\n \"source\": \"iana\",\n \"extensions\": [\"vis\"]\n },\n \"application/vnd.vividence.scriptfile\": {\n \"source\": \"iana\"\n },\n \"application/vnd.vsf\": {\n \"source\": \"iana\",\n \"extensions\": [\"vsf\"]\n },\n \"application/vnd.wap.sic\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wap.slc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wap.wbxml\": {\n \"source\": \"iana\",\n \"extensions\": [\"wbxml\"]\n },\n \"application/vnd.wap.wmlc\": {\n \"source\": \"iana\",\n \"extensions\": [\"wmlc\"]\n },\n \"application/vnd.wap.wmlscriptc\": {\n \"source\": \"iana\",\n \"extensions\": [\"wmlsc\"]\n },\n \"application/vnd.webturbo\": {\n \"source\": \"iana\",\n \"extensions\": [\"wtb\"]\n },\n \"application/vnd.wfa.p2p\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wfa.wsc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.windows.devicepairing\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wmc\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wmf.bootstrap\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wolfram.mathematica\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wolfram.mathematica.package\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wolfram.player\": {\n \"source\": \"iana\",\n \"extensions\": [\"nbp\"]\n },\n \"application/vnd.wordperfect\": {\n \"source\": \"iana\",\n \"extensions\": [\"wpd\"]\n },\n \"application/vnd.wqd\": {\n \"source\": \"iana\",\n \"extensions\": [\"wqd\"]\n },\n \"application/vnd.wrq-hp3000-labelled\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wt.stf\": {\n \"source\": \"iana\",\n \"extensions\": [\"stf\"]\n },\n \"application/vnd.wv.csp+wbxml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wv.csp+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.wv.ssp+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xacml+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vnd.xara\": {\n \"source\": \"iana\",\n \"extensions\": [\"xar\"]\n },\n \"application/vnd.xfdl\": {\n \"source\": \"iana\",\n \"extensions\": [\"xfdl\"]\n },\n \"application/vnd.xfdl.webform\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmi+xml\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmpie.cpkg\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmpie.dpkg\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmpie.plan\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmpie.ppkg\": {\n \"source\": \"iana\"\n },\n \"application/vnd.xmpie.xlim\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yamaha.hv-dic\": {\n \"source\": \"iana\",\n \"extensions\": [\"hvd\"]\n },\n \"application/vnd.yamaha.hv-script\": {\n \"source\": \"iana\",\n \"extensions\": [\"hvs\"]\n },\n \"application/vnd.yamaha.hv-voice\": {\n \"source\": \"iana\",\n \"extensions\": [\"hvp\"]\n },\n \"application/vnd.yamaha.openscoreformat\": {\n \"source\": \"iana\",\n \"extensions\": [\"osf\"]\n },\n \"application/vnd.yamaha.openscoreformat.osfpvg+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"osfpvg\"]\n },\n \"application/vnd.yamaha.remote-setup\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yamaha.smaf-audio\": {\n \"source\": \"iana\",\n \"extensions\": [\"saf\"]\n },\n \"application/vnd.yamaha.smaf-phrase\": {\n \"source\": \"iana\",\n \"extensions\": [\"spf\"]\n },\n \"application/vnd.yamaha.through-ngn\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yamaha.tunnel-udpencap\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yaoweme\": {\n \"source\": \"iana\"\n },\n \"application/vnd.yellowriver-custom-menu\": {\n \"source\": \"iana\",\n \"extensions\": [\"cmp\"]\n },\n \"application/vnd.youtube.yt\": {\n \"source\": \"iana\"\n },\n \"application/vnd.zul\": {\n \"source\": \"iana\",\n \"extensions\": [\"zir\",\"zirz\"]\n },\n \"application/vnd.zzazz.deck+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"zaz\"]\n },\n \"application/voicexml+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"vxml\"]\n },\n \"application/voucher-cms+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/vq-rtcpxr\": {\n \"source\": \"iana\"\n },\n \"application/wasm\": {\n \"compressible\": true,\n \"extensions\": [\"wasm\"]\n },\n \"application/watcherinfo+xml\": {\n \"source\": \"iana\"\n },\n \"application/webpush-options+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/whoispp-query\": {\n \"source\": \"iana\"\n },\n \"application/whoispp-response\": {\n \"source\": \"iana\"\n },\n \"application/widget\": {\n \"source\": \"iana\",\n \"extensions\": [\"wgt\"]\n },\n \"application/winhlp\": {\n \"source\": \"apache\",\n \"extensions\": [\"hlp\"]\n },\n \"application/wita\": {\n \"source\": \"iana\"\n },\n \"application/wordperfect5.1\": {\n \"source\": \"iana\"\n },\n \"application/wsdl+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"wsdl\"]\n },\n \"application/wspolicy+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"wspolicy\"]\n },\n \"application/x-7z-compressed\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"7z\"]\n },\n \"application/x-abiword\": {\n \"source\": \"apache\",\n \"extensions\": [\"abw\"]\n },\n \"application/x-ace-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"ace\"]\n },\n \"application/x-amf\": {\n \"source\": \"apache\"\n },\n \"application/x-apple-diskimage\": {\n \"source\": \"apache\",\n \"extensions\": [\"dmg\"]\n },\n \"application/x-arj\": {\n \"compressible\": false,\n \"extensions\": [\"arj\"]\n },\n \"application/x-authorware-bin\": {\n \"source\": \"apache\",\n \"extensions\": [\"aab\",\"x32\",\"u32\",\"vox\"]\n },\n \"application/x-authorware-map\": {\n \"source\": \"apache\",\n \"extensions\": [\"aam\"]\n },\n \"application/x-authorware-seg\": {\n \"source\": \"apache\",\n \"extensions\": [\"aas\"]\n },\n \"application/x-bcpio\": {\n \"source\": \"apache\",\n \"extensions\": [\"bcpio\"]\n },\n \"application/x-bdoc\": {\n \"compressible\": false,\n \"extensions\": [\"bdoc\"]\n },\n \"application/x-bittorrent\": {\n \"source\": \"apache\",\n \"extensions\": [\"torrent\"]\n },\n \"application/x-blorb\": {\n \"source\": \"apache\",\n \"extensions\": [\"blb\",\"blorb\"]\n },\n \"application/x-bzip\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"bz\"]\n },\n \"application/x-bzip2\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"bz2\",\"boz\"]\n },\n \"application/x-cbr\": {\n \"source\": \"apache\",\n \"extensions\": [\"cbr\",\"cba\",\"cbt\",\"cbz\",\"cb7\"]\n },\n \"application/x-cdlink\": {\n \"source\": \"apache\",\n \"extensions\": [\"vcd\"]\n },\n \"application/x-cfs-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"cfs\"]\n },\n \"application/x-chat\": {\n \"source\": \"apache\",\n \"extensions\": [\"chat\"]\n },\n \"application/x-chess-pgn\": {\n \"source\": \"apache\",\n \"extensions\": [\"pgn\"]\n },\n \"application/x-chrome-extension\": {\n \"extensions\": [\"crx\"]\n },\n \"application/x-cocoa\": {\n \"source\": \"nginx\",\n \"extensions\": [\"cco\"]\n },\n \"application/x-compress\": {\n \"source\": \"apache\"\n },\n \"application/x-conference\": {\n \"source\": \"apache\",\n \"extensions\": [\"nsc\"]\n },\n \"application/x-cpio\": {\n \"source\": \"apache\",\n \"extensions\": [\"cpio\"]\n },\n \"application/x-csh\": {\n \"source\": \"apache\",\n \"extensions\": [\"csh\"]\n },\n \"application/x-deb\": {\n \"compressible\": false\n },\n \"application/x-debian-package\": {\n \"source\": \"apache\",\n \"extensions\": [\"deb\",\"udeb\"]\n },\n \"application/x-dgc-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"dgc\"]\n },\n \"application/x-director\": {\n \"source\": \"apache\",\n \"extensions\": [\"dir\",\"dcr\",\"dxr\",\"cst\",\"cct\",\"cxt\",\"w3d\",\"fgd\",\"swa\"]\n },\n \"application/x-doom\": {\n \"source\": \"apache\",\n \"extensions\": [\"wad\"]\n },\n \"application/x-dtbncx+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"ncx\"]\n },\n \"application/x-dtbook+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"dtb\"]\n },\n \"application/x-dtbresource+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"res\"]\n },\n \"application/x-dvi\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"dvi\"]\n },\n \"application/x-envoy\": {\n \"source\": \"apache\",\n \"extensions\": [\"evy\"]\n },\n \"application/x-eva\": {\n \"source\": \"apache\",\n \"extensions\": [\"eva\"]\n },\n \"application/x-font-bdf\": {\n \"source\": \"apache\",\n \"extensions\": [\"bdf\"]\n },\n \"application/x-font-dos\": {\n \"source\": \"apache\"\n },\n \"application/x-font-framemaker\": {\n \"source\": \"apache\"\n },\n \"application/x-font-ghostscript\": {\n \"source\": \"apache\",\n \"extensions\": [\"gsf\"]\n },\n \"application/x-font-libgrx\": {\n \"source\": \"apache\"\n },\n \"application/x-font-linux-psf\": {\n \"source\": \"apache\",\n \"extensions\": [\"psf\"]\n },\n \"application/x-font-pcf\": {\n \"source\": \"apache\",\n \"extensions\": [\"pcf\"]\n },\n \"application/x-font-snf\": {\n \"source\": \"apache\",\n \"extensions\": [\"snf\"]\n },\n \"application/x-font-speedo\": {\n \"source\": \"apache\"\n },\n \"application/x-font-sunos-news\": {\n \"source\": \"apache\"\n },\n \"application/x-font-type1\": {\n \"source\": \"apache\",\n \"extensions\": [\"pfa\",\"pfb\",\"pfm\",\"afm\"]\n },\n \"application/x-font-vfont\": {\n \"source\": \"apache\"\n },\n \"application/x-freearc\": {\n \"source\": \"apache\",\n \"extensions\": [\"arc\"]\n },\n \"application/x-futuresplash\": {\n \"source\": \"apache\",\n \"extensions\": [\"spl\"]\n },\n \"application/x-gca-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"gca\"]\n },\n \"application/x-glulx\": {\n \"source\": \"apache\",\n \"extensions\": [\"ulx\"]\n },\n \"application/x-gnumeric\": {\n \"source\": \"apache\",\n \"extensions\": [\"gnumeric\"]\n },\n \"application/x-gramps-xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"gramps\"]\n },\n \"application/x-gtar\": {\n \"source\": \"apache\",\n \"extensions\": [\"gtar\"]\n },\n \"application/x-gzip\": {\n \"source\": \"apache\"\n },\n \"application/x-hdf\": {\n \"source\": \"apache\",\n \"extensions\": [\"hdf\"]\n },\n \"application/x-httpd-php\": {\n \"compressible\": true,\n \"extensions\": [\"php\"]\n },\n \"application/x-install-instructions\": {\n \"source\": \"apache\",\n \"extensions\": [\"install\"]\n },\n \"application/x-iso9660-image\": {\n \"source\": \"apache\",\n \"extensions\": [\"iso\"]\n },\n \"application/x-java-archive-diff\": {\n \"source\": \"nginx\",\n \"extensions\": [\"jardiff\"]\n },\n \"application/x-java-jnlp-file\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"jnlp\"]\n },\n \"application/x-javascript\": {\n \"compressible\": true\n },\n \"application/x-latex\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"latex\"]\n },\n \"application/x-lua-bytecode\": {\n \"extensions\": [\"luac\"]\n },\n \"application/x-lzh-compressed\": {\n \"source\": \"apache\",\n \"extensions\": [\"lzh\",\"lha\"]\n },\n \"application/x-makeself\": {\n \"source\": \"nginx\",\n \"extensions\": [\"run\"]\n },\n \"application/x-mie\": {\n \"source\": \"apache\",\n \"extensions\": [\"mie\"]\n },\n \"application/x-mobipocket-ebook\": {\n \"source\": \"apache\",\n \"extensions\": [\"prc\",\"mobi\"]\n },\n \"application/x-mpegurl\": {\n \"compressible\": false\n },\n \"application/x-ms-application\": {\n \"source\": \"apache\",\n \"extensions\": [\"application\"]\n },\n \"application/x-ms-shortcut\": {\n \"source\": \"apache\",\n \"extensions\": [\"lnk\"]\n },\n \"application/x-ms-wmd\": {\n \"source\": \"apache\",\n \"extensions\": [\"wmd\"]\n },\n \"application/x-ms-wmz\": {\n \"source\": \"apache\",\n \"extensions\": [\"wmz\"]\n },\n \"application/x-ms-xbap\": {\n \"source\": \"apache\",\n \"extensions\": [\"xbap\"]\n },\n \"application/x-msaccess\": {\n \"source\": \"apache\",\n \"extensions\": [\"mdb\"]\n },\n \"application/x-msbinder\": {\n \"source\": \"apache\",\n \"extensions\": [\"obd\"]\n },\n \"application/x-mscardfile\": {\n \"source\": \"apache\",\n \"extensions\": [\"crd\"]\n },\n \"application/x-msclip\": {\n \"source\": \"apache\",\n \"extensions\": [\"clp\"]\n },\n \"application/x-msdos-program\": {\n \"extensions\": [\"exe\"]\n },\n \"application/x-msdownload\": {\n \"source\": \"apache\",\n \"extensions\": [\"exe\",\"dll\",\"com\",\"bat\",\"msi\"]\n },\n \"application/x-msmediaview\": {\n \"source\": \"apache\",\n \"extensions\": [\"mvb\",\"m13\",\"m14\"]\n },\n \"application/x-msmetafile\": {\n \"source\": \"apache\",\n \"extensions\": [\"wmf\",\"wmz\",\"emf\",\"emz\"]\n },\n \"application/x-msmoney\": {\n \"source\": \"apache\",\n \"extensions\": [\"mny\"]\n },\n \"application/x-mspublisher\": {\n \"source\": \"apache\",\n \"extensions\": [\"pub\"]\n },\n \"application/x-msschedule\": {\n \"source\": \"apache\",\n \"extensions\": [\"scd\"]\n },\n \"application/x-msterminal\": {\n \"source\": \"apache\",\n \"extensions\": [\"trm\"]\n },\n \"application/x-mswrite\": {\n \"source\": \"apache\",\n \"extensions\": [\"wri\"]\n },\n \"application/x-netcdf\": {\n \"source\": \"apache\",\n \"extensions\": [\"nc\",\"cdf\"]\n },\n \"application/x-ns-proxy-autoconfig\": {\n \"compressible\": true,\n \"extensions\": [\"pac\"]\n },\n \"application/x-nzb\": {\n \"source\": \"apache\",\n \"extensions\": [\"nzb\"]\n },\n \"application/x-perl\": {\n \"source\": \"nginx\",\n \"extensions\": [\"pl\",\"pm\"]\n },\n \"application/x-pilot\": {\n \"source\": \"nginx\",\n \"extensions\": [\"prc\",\"pdb\"]\n },\n \"application/x-pkcs12\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"p12\",\"pfx\"]\n },\n \"application/x-pkcs7-certificates\": {\n \"source\": \"apache\",\n \"extensions\": [\"p7b\",\"spc\"]\n },\n \"application/x-pkcs7-certreqresp\": {\n \"source\": \"apache\",\n \"extensions\": [\"p7r\"]\n },\n \"application/x-rar-compressed\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"rar\"]\n },\n \"application/x-redhat-package-manager\": {\n \"source\": \"nginx\",\n \"extensions\": [\"rpm\"]\n },\n \"application/x-research-info-systems\": {\n \"source\": \"apache\",\n \"extensions\": [\"ris\"]\n },\n \"application/x-sea\": {\n \"source\": \"nginx\",\n \"extensions\": [\"sea\"]\n },\n \"application/x-sh\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"sh\"]\n },\n \"application/x-shar\": {\n \"source\": \"apache\",\n \"extensions\": [\"shar\"]\n },\n \"application/x-shockwave-flash\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"swf\"]\n },\n \"application/x-silverlight-app\": {\n \"source\": \"apache\",\n \"extensions\": [\"xap\"]\n },\n \"application/x-sql\": {\n \"source\": \"apache\",\n \"extensions\": [\"sql\"]\n },\n \"application/x-stuffit\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"sit\"]\n },\n \"application/x-stuffitx\": {\n \"source\": \"apache\",\n \"extensions\": [\"sitx\"]\n },\n \"application/x-subrip\": {\n \"source\": \"apache\",\n \"extensions\": [\"srt\"]\n },\n \"application/x-sv4cpio\": {\n \"source\": \"apache\",\n \"extensions\": [\"sv4cpio\"]\n },\n \"application/x-sv4crc\": {\n \"source\": \"apache\",\n \"extensions\": [\"sv4crc\"]\n },\n \"application/x-t3vm-image\": {\n \"source\": \"apache\",\n \"extensions\": [\"t3\"]\n },\n \"application/x-tads\": {\n \"source\": \"apache\",\n \"extensions\": [\"gam\"]\n },\n \"application/x-tar\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"tar\"]\n },\n \"application/x-tcl\": {\n \"source\": \"apache\",\n \"extensions\": [\"tcl\",\"tk\"]\n },\n \"application/x-tex\": {\n \"source\": \"apache\",\n \"extensions\": [\"tex\"]\n },\n \"application/x-tex-tfm\": {\n \"source\": \"apache\",\n \"extensions\": [\"tfm\"]\n },\n \"application/x-texinfo\": {\n \"source\": \"apache\",\n \"extensions\": [\"texinfo\",\"texi\"]\n },\n \"application/x-tgif\": {\n \"source\": \"apache\",\n \"extensions\": [\"obj\"]\n },\n \"application/x-ustar\": {\n \"source\": \"apache\",\n \"extensions\": [\"ustar\"]\n },\n \"application/x-virtualbox-hdd\": {\n \"compressible\": true,\n \"extensions\": [\"hdd\"]\n },\n \"application/x-virtualbox-ova\": {\n \"compressible\": true,\n \"extensions\": [\"ova\"]\n },\n \"application/x-virtualbox-ovf\": {\n \"compressible\": true,\n \"extensions\": [\"ovf\"]\n },\n \"application/x-virtualbox-vbox\": {\n \"compressible\": true,\n \"extensions\": [\"vbox\"]\n },\n \"application/x-virtualbox-vbox-extpack\": {\n \"compressible\": false,\n \"extensions\": [\"vbox-extpack\"]\n },\n \"application/x-virtualbox-vdi\": {\n \"compressible\": true,\n \"extensions\": [\"vdi\"]\n },\n \"application/x-virtualbox-vhd\": {\n \"compressible\": true,\n \"extensions\": [\"vhd\"]\n },\n \"application/x-virtualbox-vmdk\": {\n \"compressible\": true,\n \"extensions\": [\"vmdk\"]\n },\n \"application/x-wais-source\": {\n \"source\": \"apache\",\n \"extensions\": [\"src\"]\n },\n \"application/x-web-app-manifest+json\": {\n \"compressible\": true,\n \"extensions\": [\"webapp\"]\n },\n \"application/x-www-form-urlencoded\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/x-x509-ca-cert\": {\n \"source\": \"apache\",\n \"extensions\": [\"der\",\"crt\",\"pem\"]\n },\n \"application/x-xfig\": {\n \"source\": \"apache\",\n \"extensions\": [\"fig\"]\n },\n \"application/x-xliff+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"xlf\"]\n },\n \"application/x-xpinstall\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"xpi\"]\n },\n \"application/x-xz\": {\n \"source\": \"apache\",\n \"extensions\": [\"xz\"]\n },\n \"application/x-zmachine\": {\n \"source\": \"apache\",\n \"extensions\": [\"z1\",\"z2\",\"z3\",\"z4\",\"z5\",\"z6\",\"z7\",\"z8\"]\n },\n \"application/x400-bp\": {\n \"source\": \"iana\"\n },\n \"application/xacml+xml\": {\n \"source\": \"iana\"\n },\n \"application/xaml+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"xaml\"]\n },\n \"application/xcap-att+xml\": {\n \"source\": \"iana\"\n },\n \"application/xcap-caps+xml\": {\n \"source\": \"iana\"\n },\n \"application/xcap-diff+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"xdf\"]\n },\n \"application/xcap-el+xml\": {\n \"source\": \"iana\"\n },\n \"application/xcap-error+xml\": {\n \"source\": \"iana\"\n },\n \"application/xcap-ns+xml\": {\n \"source\": \"iana\"\n },\n \"application/xcon-conference-info+xml\": {\n \"source\": \"iana\"\n },\n \"application/xcon-conference-info-diff+xml\": {\n \"source\": \"iana\"\n },\n \"application/xenc+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"xenc\"]\n },\n \"application/xhtml+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xhtml\",\"xht\"]\n },\n \"application/xhtml-voice+xml\": {\n \"source\": \"apache\"\n },\n \"application/xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xml\",\"xsl\",\"xsd\",\"rng\"]\n },\n \"application/xml-dtd\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"dtd\"]\n },\n \"application/xml-external-parsed-entity\": {\n \"source\": \"iana\"\n },\n \"application/xml-patch+xml\": {\n \"source\": \"iana\"\n },\n \"application/xmpp+xml\": {\n \"source\": \"iana\"\n },\n \"application/xop+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xop\"]\n },\n \"application/xproc+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"xpl\"]\n },\n \"application/xslt+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"xslt\"]\n },\n \"application/xspf+xml\": {\n \"source\": \"apache\",\n \"extensions\": [\"xspf\"]\n },\n \"application/xv+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxml\",\"xhvml\",\"xvml\",\"xvm\"]\n },\n \"application/yang\": {\n \"source\": \"iana\",\n \"extensions\": [\"yang\"]\n },\n \"application/yang-data+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/yang-data+xml\": {\n \"source\": \"iana\"\n },\n \"application/yang-patch+json\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"application/yang-patch+xml\": {\n \"source\": \"iana\"\n },\n \"application/yin+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"yin\"]\n },\n \"application/zip\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"zip\"]\n },\n \"application/zlib\": {\n \"source\": \"iana\"\n },\n \"audio/1d-interleaved-parityfec\": {\n \"source\": \"iana\"\n },\n \"audio/32kadpcm\": {\n \"source\": \"iana\"\n },\n \"audio/3gpp\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"3gpp\"]\n },\n \"audio/3gpp2\": {\n \"source\": \"iana\"\n },\n \"audio/ac3\": {\n \"source\": \"iana\"\n },\n \"audio/adpcm\": {\n \"source\": \"apache\",\n \"extensions\": [\"adp\"]\n },\n \"audio/amr\": {\n \"source\": \"iana\"\n },\n \"audio/amr-wb\": {\n \"source\": \"iana\"\n },\n \"audio/amr-wb+\": {\n \"source\": \"iana\"\n },\n \"audio/aptx\": {\n \"source\": \"iana\"\n },\n \"audio/asc\": {\n \"source\": \"iana\"\n },\n \"audio/atrac-advanced-lossless\": {\n \"source\": \"iana\"\n },\n \"audio/atrac-x\": {\n \"source\": \"iana\"\n },\n \"audio/atrac3\": {\n \"source\": \"iana\"\n },\n \"audio/basic\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"au\",\"snd\"]\n },\n \"audio/bv16\": {\n \"source\": \"iana\"\n },\n \"audio/bv32\": {\n \"source\": \"iana\"\n },\n \"audio/clearmode\": {\n \"source\": \"iana\"\n },\n \"audio/cn\": {\n \"source\": \"iana\"\n },\n \"audio/dat12\": {\n \"source\": \"iana\"\n },\n \"audio/dls\": {\n \"source\": \"iana\"\n },\n \"audio/dsr-es201108\": {\n \"source\": \"iana\"\n },\n \"audio/dsr-es202050\": {\n \"source\": \"iana\"\n },\n \"audio/dsr-es202211\": {\n \"source\": \"iana\"\n },\n \"audio/dsr-es202212\": {\n \"source\": \"iana\"\n },\n \"audio/dv\": {\n \"source\": \"iana\"\n },\n \"audio/dvi4\": {\n \"source\": \"iana\"\n },\n \"audio/eac3\": {\n \"source\": \"iana\"\n },\n \"audio/encaprtp\": {\n \"source\": \"iana\"\n },\n \"audio/evrc\": {\n \"source\": \"iana\"\n },\n \"audio/evrc-qcp\": {\n \"source\": \"iana\"\n },\n \"audio/evrc0\": {\n \"source\": \"iana\"\n },\n \"audio/evrc1\": {\n \"source\": \"iana\"\n },\n \"audio/evrcb\": {\n \"source\": \"iana\"\n },\n \"audio/evrcb0\": {\n \"source\": \"iana\"\n },\n \"audio/evrcb1\": {\n \"source\": \"iana\"\n },\n \"audio/evrcnw\": {\n \"source\": \"iana\"\n },\n \"audio/evrcnw0\": {\n \"source\": \"iana\"\n },\n \"audio/evrcnw1\": {\n \"source\": \"iana\"\n },\n \"audio/evrcwb\": {\n \"source\": \"iana\"\n },\n \"audio/evrcwb0\": {\n \"source\": \"iana\"\n },\n \"audio/evrcwb1\": {\n \"source\": \"iana\"\n },\n \"audio/evs\": {\n \"source\": \"iana\"\n },\n \"audio/fwdred\": {\n \"source\": \"iana\"\n },\n \"audio/g711-0\": {\n \"source\": \"iana\"\n },\n \"audio/g719\": {\n \"source\": \"iana\"\n },\n \"audio/g722\": {\n \"source\": \"iana\"\n },\n \"audio/g7221\": {\n \"source\": \"iana\"\n },\n \"audio/g723\": {\n \"source\": \"iana\"\n },\n \"audio/g726-16\": {\n \"source\": \"iana\"\n },\n \"audio/g726-24\": {\n \"source\": \"iana\"\n },\n \"audio/g726-32\": {\n \"source\": \"iana\"\n },\n \"audio/g726-40\": {\n \"source\": \"iana\"\n },\n \"audio/g728\": {\n \"source\": \"iana\"\n },\n \"audio/g729\": {\n \"source\": \"iana\"\n },\n \"audio/g7291\": {\n \"source\": \"iana\"\n },\n \"audio/g729d\": {\n \"source\": \"iana\"\n },\n \"audio/g729e\": {\n \"source\": \"iana\"\n },\n \"audio/gsm\": {\n \"source\": \"iana\"\n },\n \"audio/gsm-efr\": {\n \"source\": \"iana\"\n },\n \"audio/gsm-hr-08\": {\n \"source\": \"iana\"\n },\n \"audio/ilbc\": {\n \"source\": \"iana\"\n },\n \"audio/ip-mr_v2.5\": {\n \"source\": \"iana\"\n },\n \"audio/isac\": {\n \"source\": \"apache\"\n },\n \"audio/l16\": {\n \"source\": \"iana\"\n },\n \"audio/l20\": {\n \"source\": \"iana\"\n },\n \"audio/l24\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"audio/l8\": {\n \"source\": \"iana\"\n },\n \"audio/lpc\": {\n \"source\": \"iana\"\n },\n \"audio/melp\": {\n \"source\": \"iana\"\n },\n \"audio/melp1200\": {\n \"source\": \"iana\"\n },\n \"audio/melp2400\": {\n \"source\": \"iana\"\n },\n \"audio/melp600\": {\n \"source\": \"iana\"\n },\n \"audio/midi\": {\n \"source\": \"apache\",\n \"extensions\": [\"mid\",\"midi\",\"kar\",\"rmi\"]\n },\n \"audio/mobile-xmf\": {\n \"source\": \"iana\"\n },\n \"audio/mp3\": {\n \"compressible\": false,\n \"extensions\": [\"mp3\"]\n },\n \"audio/mp4\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"m4a\",\"mp4a\"]\n },\n \"audio/mp4a-latm\": {\n \"source\": \"iana\"\n },\n \"audio/mpa\": {\n \"source\": \"iana\"\n },\n \"audio/mpa-robust\": {\n \"source\": \"iana\"\n },\n \"audio/mpeg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"mpga\",\"mp2\",\"mp2a\",\"mp3\",\"m2a\",\"m3a\"]\n },\n \"audio/mpeg4-generic\": {\n \"source\": \"iana\"\n },\n \"audio/musepack\": {\n \"source\": \"apache\"\n },\n \"audio/ogg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"oga\",\"ogg\",\"spx\"]\n },\n \"audio/opus\": {\n \"source\": \"iana\"\n },\n \"audio/parityfec\": {\n \"source\": \"iana\"\n },\n \"audio/pcma\": {\n \"source\": \"iana\"\n },\n \"audio/pcma-wb\": {\n \"source\": \"iana\"\n },\n \"audio/pcmu\": {\n \"source\": \"iana\"\n },\n \"audio/pcmu-wb\": {\n \"source\": \"iana\"\n },\n \"audio/prs.sid\": {\n \"source\": \"iana\"\n },\n \"audio/qcelp\": {\n \"source\": \"iana\"\n },\n \"audio/raptorfec\": {\n \"source\": \"iana\"\n },\n \"audio/red\": {\n \"source\": \"iana\"\n },\n \"audio/rtp-enc-aescm128\": {\n \"source\": \"iana\"\n },\n \"audio/rtp-midi\": {\n \"source\": \"iana\"\n },\n \"audio/rtploopback\": {\n \"source\": \"iana\"\n },\n \"audio/rtx\": {\n \"source\": \"iana\"\n },\n \"audio/s3m\": {\n \"source\": \"apache\",\n \"extensions\": [\"s3m\"]\n },\n \"audio/silk\": {\n \"source\": \"apache\",\n \"extensions\": [\"sil\"]\n },\n \"audio/smv\": {\n \"source\": \"iana\"\n },\n \"audio/smv-qcp\": {\n \"source\": \"iana\"\n },\n \"audio/smv0\": {\n \"source\": \"iana\"\n },\n \"audio/sp-midi\": {\n \"source\": \"iana\"\n },\n \"audio/speex\": {\n \"source\": \"iana\"\n },\n \"audio/t140c\": {\n \"source\": \"iana\"\n },\n \"audio/t38\": {\n \"source\": \"iana\"\n },\n \"audio/telephone-event\": {\n \"source\": \"iana\"\n },\n \"audio/tone\": {\n \"source\": \"iana\"\n },\n \"audio/uemclip\": {\n \"source\": \"iana\"\n },\n \"audio/ulpfec\": {\n \"source\": \"iana\"\n },\n \"audio/vdvi\": {\n \"source\": \"iana\"\n },\n \"audio/vmr-wb\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.3gpp.iufp\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.4sb\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.audiokoz\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.celp\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.cisco.nse\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.cmles.radio-events\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.cns.anp1\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.cns.inf1\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dece.audio\": {\n \"source\": \"iana\",\n \"extensions\": [\"uva\",\"uvva\"]\n },\n \"audio/vnd.digital-winds\": {\n \"source\": \"iana\",\n \"extensions\": [\"eol\"]\n },\n \"audio/vnd.dlna.adts\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.heaac.1\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.heaac.2\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.mlp\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.mps\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.pl2\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.pl2x\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.pl2z\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dolby.pulse.1\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.dra\": {\n \"source\": \"iana\",\n \"extensions\": [\"dra\"]\n },\n \"audio/vnd.dts\": {\n \"source\": \"iana\",\n \"extensions\": [\"dts\"]\n },\n \"audio/vnd.dts.hd\": {\n \"source\": \"iana\",\n \"extensions\": [\"dtshd\"]\n },\n \"audio/vnd.dvb.file\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.everad.plj\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.hns.audio\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.lucent.voice\": {\n \"source\": \"iana\",\n \"extensions\": [\"lvp\"]\n },\n \"audio/vnd.ms-playready.media.pya\": {\n \"source\": \"iana\",\n \"extensions\": [\"pya\"]\n },\n \"audio/vnd.nokia.mobile-xmf\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.nortel.vbk\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.nuera.ecelp4800\": {\n \"source\": \"iana\",\n \"extensions\": [\"ecelp4800\"]\n },\n \"audio/vnd.nuera.ecelp7470\": {\n \"source\": \"iana\",\n \"extensions\": [\"ecelp7470\"]\n },\n \"audio/vnd.nuera.ecelp9600\": {\n \"source\": \"iana\",\n \"extensions\": [\"ecelp9600\"]\n },\n \"audio/vnd.octel.sbc\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.presonus.multitrack\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.qcelp\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.rhetorex.32kadpcm\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.rip\": {\n \"source\": \"iana\",\n \"extensions\": [\"rip\"]\n },\n \"audio/vnd.rn-realaudio\": {\n \"compressible\": false\n },\n \"audio/vnd.sealedmedia.softseal.mpeg\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.vmx.cvsd\": {\n \"source\": \"iana\"\n },\n \"audio/vnd.wave\": {\n \"compressible\": false\n },\n \"audio/vorbis\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"audio/vorbis-config\": {\n \"source\": \"iana\"\n },\n \"audio/wav\": {\n \"compressible\": false,\n \"extensions\": [\"wav\"]\n },\n \"audio/wave\": {\n \"compressible\": false,\n \"extensions\": [\"wav\"]\n },\n \"audio/webm\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"weba\"]\n },\n \"audio/x-aac\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"aac\"]\n },\n \"audio/x-aiff\": {\n \"source\": \"apache\",\n \"extensions\": [\"aif\",\"aiff\",\"aifc\"]\n },\n \"audio/x-caf\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"caf\"]\n },\n \"audio/x-flac\": {\n \"source\": \"apache\",\n \"extensions\": [\"flac\"]\n },\n \"audio/x-m4a\": {\n \"source\": \"nginx\",\n \"extensions\": [\"m4a\"]\n },\n \"audio/x-matroska\": {\n \"source\": \"apache\",\n \"extensions\": [\"mka\"]\n },\n \"audio/x-mpegurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"m3u\"]\n },\n \"audio/x-ms-wax\": {\n \"source\": \"apache\",\n \"extensions\": [\"wax\"]\n },\n \"audio/x-ms-wma\": {\n \"source\": \"apache\",\n \"extensions\": [\"wma\"]\n },\n \"audio/x-pn-realaudio\": {\n \"source\": \"apache\",\n \"extensions\": [\"ram\",\"ra\"]\n },\n \"audio/x-pn-realaudio-plugin\": {\n \"source\": \"apache\",\n \"extensions\": [\"rmp\"]\n },\n \"audio/x-realaudio\": {\n \"source\": \"nginx\",\n \"extensions\": [\"ra\"]\n },\n \"audio/x-tta\": {\n \"source\": \"apache\"\n },\n \"audio/x-wav\": {\n \"source\": \"apache\",\n \"extensions\": [\"wav\"]\n },\n \"audio/xm\": {\n \"source\": \"apache\",\n \"extensions\": [\"xm\"]\n },\n \"chemical/x-cdx\": {\n \"source\": \"apache\",\n \"extensions\": [\"cdx\"]\n },\n \"chemical/x-cif\": {\n \"source\": \"apache\",\n \"extensions\": [\"cif\"]\n },\n \"chemical/x-cmdf\": {\n \"source\": \"apache\",\n \"extensions\": [\"cmdf\"]\n },\n \"chemical/x-cml\": {\n \"source\": \"apache\",\n \"extensions\": [\"cml\"]\n },\n \"chemical/x-csml\": {\n \"source\": \"apache\",\n \"extensions\": [\"csml\"]\n },\n \"chemical/x-pdb\": {\n \"source\": \"apache\"\n },\n \"chemical/x-xyz\": {\n \"source\": \"apache\",\n \"extensions\": [\"xyz\"]\n },\n \"font/collection\": {\n \"source\": \"iana\",\n \"extensions\": [\"ttc\"]\n },\n \"font/otf\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"otf\"]\n },\n \"font/sfnt\": {\n \"source\": \"iana\"\n },\n \"font/ttf\": {\n \"source\": \"iana\",\n \"extensions\": [\"ttf\"]\n },\n \"font/woff\": {\n \"source\": \"iana\",\n \"extensions\": [\"woff\"]\n },\n \"font/woff2\": {\n \"source\": \"iana\",\n \"extensions\": [\"woff2\"]\n },\n \"image/aces\": {\n \"source\": \"iana\"\n },\n \"image/apng\": {\n \"compressible\": false,\n \"extensions\": [\"apng\"]\n },\n \"image/bmp\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"bmp\"]\n },\n \"image/cgm\": {\n \"source\": \"iana\",\n \"extensions\": [\"cgm\"]\n },\n \"image/dicom-rle\": {\n \"source\": \"iana\"\n },\n \"image/emf\": {\n \"source\": \"iana\"\n },\n \"image/fits\": {\n \"source\": \"iana\"\n },\n \"image/g3fax\": {\n \"source\": \"iana\",\n \"extensions\": [\"g3\"]\n },\n \"image/gif\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"gif\"]\n },\n \"image/ief\": {\n \"source\": \"iana\",\n \"extensions\": [\"ief\"]\n },\n \"image/jls\": {\n \"source\": \"iana\"\n },\n \"image/jp2\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"jp2\",\"jpg2\"]\n },\n \"image/jpeg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"jpeg\",\"jpg\",\"jpe\"]\n },\n \"image/jpm\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"jpm\"]\n },\n \"image/jpx\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"jpx\",\"jpf\"]\n },\n \"image/ktx\": {\n \"source\": \"iana\",\n \"extensions\": [\"ktx\"]\n },\n \"image/naplps\": {\n \"source\": \"iana\"\n },\n \"image/pjpeg\": {\n \"compressible\": false\n },\n \"image/png\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"png\"]\n },\n \"image/prs.btif\": {\n \"source\": \"iana\",\n \"extensions\": [\"btif\"]\n },\n \"image/prs.pti\": {\n \"source\": \"iana\"\n },\n \"image/pwg-raster\": {\n \"source\": \"iana\"\n },\n \"image/sgi\": {\n \"source\": \"apache\",\n \"extensions\": [\"sgi\"]\n },\n \"image/svg+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"svg\",\"svgz\"]\n },\n \"image/t38\": {\n \"source\": \"iana\"\n },\n \"image/tiff\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"tiff\",\"tif\"]\n },\n \"image/tiff-fx\": {\n \"source\": \"iana\"\n },\n \"image/vnd.adobe.photoshop\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"psd\"]\n },\n \"image/vnd.airzip.accelerator.azv\": {\n \"source\": \"iana\"\n },\n \"image/vnd.cns.inf2\": {\n \"source\": \"iana\"\n },\n \"image/vnd.dece.graphic\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvi\",\"uvvi\",\"uvg\",\"uvvg\"]\n },\n \"image/vnd.djvu\": {\n \"source\": \"iana\",\n \"extensions\": [\"djvu\",\"djv\"]\n },\n \"image/vnd.dvb.subtitle\": {\n \"source\": \"iana\",\n \"extensions\": [\"sub\"]\n },\n \"image/vnd.dwg\": {\n \"source\": \"iana\",\n \"extensions\": [\"dwg\"]\n },\n \"image/vnd.dxf\": {\n \"source\": \"iana\",\n \"extensions\": [\"dxf\"]\n },\n \"image/vnd.fastbidsheet\": {\n \"source\": \"iana\",\n \"extensions\": [\"fbs\"]\n },\n \"image/vnd.fpx\": {\n \"source\": \"iana\",\n \"extensions\": [\"fpx\"]\n },\n \"image/vnd.fst\": {\n \"source\": \"iana\",\n \"extensions\": [\"fst\"]\n },\n \"image/vnd.fujixerox.edmics-mmr\": {\n \"source\": \"iana\",\n \"extensions\": [\"mmr\"]\n },\n \"image/vnd.fujixerox.edmics-rlc\": {\n \"source\": \"iana\",\n \"extensions\": [\"rlc\"]\n },\n \"image/vnd.globalgraphics.pgb\": {\n \"source\": \"iana\"\n },\n \"image/vnd.microsoft.icon\": {\n \"source\": \"iana\"\n },\n \"image/vnd.mix\": {\n \"source\": \"iana\"\n },\n \"image/vnd.mozilla.apng\": {\n \"source\": \"iana\"\n },\n \"image/vnd.ms-modi\": {\n \"source\": \"iana\",\n \"extensions\": [\"mdi\"]\n },\n \"image/vnd.ms-photo\": {\n \"source\": \"apache\",\n \"extensions\": [\"wdp\"]\n },\n \"image/vnd.net-fpx\": {\n \"source\": \"iana\",\n \"extensions\": [\"npx\"]\n },\n \"image/vnd.radiance\": {\n \"source\": \"iana\"\n },\n \"image/vnd.sealed.png\": {\n \"source\": \"iana\"\n },\n \"image/vnd.sealedmedia.softseal.gif\": {\n \"source\": \"iana\"\n },\n \"image/vnd.sealedmedia.softseal.jpg\": {\n \"source\": \"iana\"\n },\n \"image/vnd.svf\": {\n \"source\": \"iana\"\n },\n \"image/vnd.tencent.tap\": {\n \"source\": \"iana\"\n },\n \"image/vnd.valve.source.texture\": {\n \"source\": \"iana\"\n },\n \"image/vnd.wap.wbmp\": {\n \"source\": \"iana\",\n \"extensions\": [\"wbmp\"]\n },\n \"image/vnd.xiff\": {\n \"source\": \"iana\",\n \"extensions\": [\"xif\"]\n },\n \"image/vnd.zbrush.pcx\": {\n \"source\": \"iana\"\n },\n \"image/webp\": {\n \"source\": \"apache\",\n \"extensions\": [\"webp\"]\n },\n \"image/wmf\": {\n \"source\": \"iana\"\n },\n \"image/x-3ds\": {\n \"source\": \"apache\",\n \"extensions\": [\"3ds\"]\n },\n \"image/x-cmu-raster\": {\n \"source\": \"apache\",\n \"extensions\": [\"ras\"]\n },\n \"image/x-cmx\": {\n \"source\": \"apache\",\n \"extensions\": [\"cmx\"]\n },\n \"image/x-freehand\": {\n \"source\": \"apache\",\n \"extensions\": [\"fh\",\"fhc\",\"fh4\",\"fh5\",\"fh7\"]\n },\n \"image/x-icon\": {\n \"source\": \"apache\",\n \"compressible\": true,\n \"extensions\": [\"ico\"]\n },\n \"image/x-jng\": {\n \"source\": \"nginx\",\n \"extensions\": [\"jng\"]\n },\n \"image/x-mrsid-image\": {\n \"source\": \"apache\",\n \"extensions\": [\"sid\"]\n },\n \"image/x-ms-bmp\": {\n \"source\": \"nginx\",\n \"compressible\": true,\n \"extensions\": [\"bmp\"]\n },\n \"image/x-pcx\": {\n \"source\": \"apache\",\n \"extensions\": [\"pcx\"]\n },\n \"image/x-pict\": {\n \"source\": \"apache\",\n \"extensions\": [\"pic\",\"pct\"]\n },\n \"image/x-portable-anymap\": {\n \"source\": \"apache\",\n \"extensions\": [\"pnm\"]\n },\n \"image/x-portable-bitmap\": {\n \"source\": \"apache\",\n \"extensions\": [\"pbm\"]\n },\n \"image/x-portable-graymap\": {\n \"source\": \"apache\",\n \"extensions\": [\"pgm\"]\n },\n \"image/x-portable-pixmap\": {\n \"source\": \"apache\",\n \"extensions\": [\"ppm\"]\n },\n \"image/x-rgb\": {\n \"source\": \"apache\",\n \"extensions\": [\"rgb\"]\n },\n \"image/x-tga\": {\n \"source\": \"apache\",\n \"extensions\": [\"tga\"]\n },\n \"image/x-xbitmap\": {\n \"source\": \"apache\",\n \"extensions\": [\"xbm\"]\n },\n \"image/x-xcf\": {\n \"compressible\": false\n },\n \"image/x-xpixmap\": {\n \"source\": \"apache\",\n \"extensions\": [\"xpm\"]\n },\n \"image/x-xwindowdump\": {\n \"source\": \"apache\",\n \"extensions\": [\"xwd\"]\n },\n \"message/cpim\": {\n \"source\": \"iana\"\n },\n \"message/delivery-status\": {\n \"source\": \"iana\"\n },\n \"message/disposition-notification\": {\n \"source\": \"iana\",\n \"extensions\": [\n \"disposition-notification\"\n ]\n },\n \"message/external-body\": {\n \"source\": \"iana\"\n },\n \"message/feedback-report\": {\n \"source\": \"iana\"\n },\n \"message/global\": {\n \"source\": \"iana\",\n \"extensions\": [\"u8msg\"]\n },\n \"message/global-delivery-status\": {\n \"source\": \"iana\",\n \"extensions\": [\"u8dsn\"]\n },\n \"message/global-disposition-notification\": {\n \"source\": \"iana\",\n \"extensions\": [\"u8mdn\"]\n },\n \"message/global-headers\": {\n \"source\": \"iana\",\n \"extensions\": [\"u8hdr\"]\n },\n \"message/http\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"message/imdn+xml\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"message/news\": {\n \"source\": \"iana\"\n },\n \"message/partial\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"message/rfc822\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"eml\",\"mime\"]\n },\n \"message/s-http\": {\n \"source\": \"iana\"\n },\n \"message/sip\": {\n \"source\": \"iana\"\n },\n \"message/sipfrag\": {\n \"source\": \"iana\"\n },\n \"message/tracking-status\": {\n \"source\": \"iana\"\n },\n \"message/vnd.si.simp\": {\n \"source\": \"iana\"\n },\n \"message/vnd.wfa.wsc\": {\n \"source\": \"iana\",\n \"extensions\": [\"wsc\"]\n },\n \"model/3mf\": {\n \"source\": \"iana\"\n },\n \"model/gltf+json\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"gltf\"]\n },\n \"model/gltf-binary\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"glb\"]\n },\n \"model/iges\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"igs\",\"iges\"]\n },\n \"model/mesh\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"msh\",\"mesh\",\"silo\"]\n },\n \"model/vnd.collada+xml\": {\n \"source\": \"iana\",\n \"extensions\": [\"dae\"]\n },\n \"model/vnd.dwf\": {\n \"source\": \"iana\",\n \"extensions\": [\"dwf\"]\n },\n \"model/vnd.flatland.3dml\": {\n \"source\": \"iana\"\n },\n \"model/vnd.gdl\": {\n \"source\": \"iana\",\n \"extensions\": [\"gdl\"]\n },\n \"model/vnd.gs-gdl\": {\n \"source\": \"apache\"\n },\n \"model/vnd.gs.gdl\": {\n \"source\": \"iana\"\n },\n \"model/vnd.gtw\": {\n \"source\": \"iana\",\n \"extensions\": [\"gtw\"]\n },\n \"model/vnd.moml+xml\": {\n \"source\": \"iana\"\n },\n \"model/vnd.mts\": {\n \"source\": \"iana\",\n \"extensions\": [\"mts\"]\n },\n \"model/vnd.opengex\": {\n \"source\": \"iana\"\n },\n \"model/vnd.parasolid.transmit.binary\": {\n \"source\": \"iana\"\n },\n \"model/vnd.parasolid.transmit.text\": {\n \"source\": \"iana\"\n },\n \"model/vnd.rosette.annotated-data-model\": {\n \"source\": \"iana\"\n },\n \"model/vnd.valve.source.compiled-map\": {\n \"source\": \"iana\"\n },\n \"model/vnd.vtu\": {\n \"source\": \"iana\",\n \"extensions\": [\"vtu\"]\n },\n \"model/vrml\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"wrl\",\"vrml\"]\n },\n \"model/x3d+binary\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"x3db\",\"x3dbz\"]\n },\n \"model/x3d+fastinfoset\": {\n \"source\": \"iana\"\n },\n \"model/x3d+vrml\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"x3dv\",\"x3dvz\"]\n },\n \"model/x3d+xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"x3d\",\"x3dz\"]\n },\n \"model/x3d-vrml\": {\n \"source\": \"iana\"\n },\n \"multipart/alternative\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/appledouble\": {\n \"source\": \"iana\"\n },\n \"multipart/byteranges\": {\n \"source\": \"iana\"\n },\n \"multipart/digest\": {\n \"source\": \"iana\"\n },\n \"multipart/encrypted\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/form-data\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/header-set\": {\n \"source\": \"iana\"\n },\n \"multipart/mixed\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/multilingual\": {\n \"source\": \"iana\"\n },\n \"multipart/parallel\": {\n \"source\": \"iana\"\n },\n \"multipart/related\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/report\": {\n \"source\": \"iana\"\n },\n \"multipart/signed\": {\n \"source\": \"iana\",\n \"compressible\": false\n },\n \"multipart/vnd.bint.med-plus\": {\n \"source\": \"iana\"\n },\n \"multipart/voice-message\": {\n \"source\": \"iana\"\n },\n \"multipart/x-mixed-replace\": {\n \"source\": \"iana\"\n },\n \"text/1d-interleaved-parityfec\": {\n \"source\": \"iana\"\n },\n \"text/cache-manifest\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"appcache\",\"manifest\"]\n },\n \"text/calendar\": {\n \"source\": \"iana\",\n \"extensions\": [\"ics\",\"ifb\"]\n },\n \"text/calender\": {\n \"compressible\": true\n },\n \"text/cmd\": {\n \"compressible\": true\n },\n \"text/coffeescript\": {\n \"extensions\": [\"coffee\",\"litcoffee\"]\n },\n \"text/css\": {\n \"source\": \"iana\",\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"css\"]\n },\n \"text/csv\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"csv\"]\n },\n \"text/csv-schema\": {\n \"source\": \"iana\"\n },\n \"text/directory\": {\n \"source\": \"iana\"\n },\n \"text/dns\": {\n \"source\": \"iana\"\n },\n \"text/ecmascript\": {\n \"source\": \"iana\"\n },\n \"text/encaprtp\": {\n \"source\": \"iana\"\n },\n \"text/enriched\": {\n \"source\": \"iana\"\n },\n \"text/fwdred\": {\n \"source\": \"iana\"\n },\n \"text/grammar-ref-list\": {\n \"source\": \"iana\"\n },\n \"text/html\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"html\",\"htm\",\"shtml\"]\n },\n \"text/jade\": {\n \"extensions\": [\"jade\"]\n },\n \"text/javascript\": {\n \"source\": \"iana\",\n \"compressible\": true\n },\n \"text/jcr-cnd\": {\n \"source\": \"iana\"\n },\n \"text/jsx\": {\n \"compressible\": true,\n \"extensions\": [\"jsx\"]\n },\n \"text/less\": {\n \"extensions\": [\"less\"]\n },\n \"text/markdown\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"markdown\",\"md\"]\n },\n \"text/mathml\": {\n \"source\": \"nginx\",\n \"extensions\": [\"mml\"]\n },\n \"text/mizar\": {\n \"source\": \"iana\"\n },\n \"text/n3\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"n3\"]\n },\n \"text/parameters\": {\n \"source\": \"iana\"\n },\n \"text/parityfec\": {\n \"source\": \"iana\"\n },\n \"text/plain\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"txt\",\"text\",\"conf\",\"def\",\"list\",\"log\",\"in\",\"ini\"]\n },\n \"text/provenance-notation\": {\n \"source\": \"iana\"\n },\n \"text/prs.fallenstein.rst\": {\n \"source\": \"iana\"\n },\n \"text/prs.lines.tag\": {\n \"source\": \"iana\",\n \"extensions\": [\"dsc\"]\n },\n \"text/prs.prop.logic\": {\n \"source\": \"iana\"\n },\n \"text/raptorfec\": {\n \"source\": \"iana\"\n },\n \"text/red\": {\n \"source\": \"iana\"\n },\n \"text/rfc822-headers\": {\n \"source\": \"iana\"\n },\n \"text/richtext\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rtx\"]\n },\n \"text/rtf\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"rtf\"]\n },\n \"text/rtp-enc-aescm128\": {\n \"source\": \"iana\"\n },\n \"text/rtploopback\": {\n \"source\": \"iana\"\n },\n \"text/rtx\": {\n \"source\": \"iana\"\n },\n \"text/sgml\": {\n \"source\": \"iana\",\n \"extensions\": [\"sgml\",\"sgm\"]\n },\n \"text/shex\": {\n \"extensions\": [\"shex\"]\n },\n \"text/slim\": {\n \"extensions\": [\"slim\",\"slm\"]\n },\n \"text/strings\": {\n \"source\": \"iana\"\n },\n \"text/stylus\": {\n \"extensions\": [\"stylus\",\"styl\"]\n },\n \"text/t140\": {\n \"source\": \"iana\"\n },\n \"text/tab-separated-values\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"tsv\"]\n },\n \"text/troff\": {\n \"source\": \"iana\",\n \"extensions\": [\"t\",\"tr\",\"roff\",\"man\",\"me\",\"ms\"]\n },\n \"text/turtle\": {\n \"source\": \"iana\",\n \"extensions\": [\"ttl\"]\n },\n \"text/ulpfec\": {\n \"source\": \"iana\"\n },\n \"text/uri-list\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"uri\",\"uris\",\"urls\"]\n },\n \"text/vcard\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"vcard\"]\n },\n \"text/vnd.a\": {\n \"source\": \"iana\"\n },\n \"text/vnd.abc\": {\n \"source\": \"iana\"\n },\n \"text/vnd.ascii-art\": {\n \"source\": \"iana\"\n },\n \"text/vnd.curl\": {\n \"source\": \"iana\",\n \"extensions\": [\"curl\"]\n },\n \"text/vnd.curl.dcurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"dcurl\"]\n },\n \"text/vnd.curl.mcurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"mcurl\"]\n },\n \"text/vnd.curl.scurl\": {\n \"source\": \"apache\",\n \"extensions\": [\"scurl\"]\n },\n \"text/vnd.debian.copyright\": {\n \"source\": \"iana\"\n },\n \"text/vnd.dmclientscript\": {\n \"source\": \"iana\"\n },\n \"text/vnd.dvb.subtitle\": {\n \"source\": \"iana\",\n \"extensions\": [\"sub\"]\n },\n \"text/vnd.esmertec.theme-descriptor\": {\n \"source\": \"iana\"\n },\n \"text/vnd.fly\": {\n \"source\": \"iana\",\n \"extensions\": [\"fly\"]\n },\n \"text/vnd.fmi.flexstor\": {\n \"source\": \"iana\",\n \"extensions\": [\"flx\"]\n },\n \"text/vnd.graphviz\": {\n \"source\": \"iana\",\n \"extensions\": [\"gv\"]\n },\n \"text/vnd.in3d.3dml\": {\n \"source\": \"iana\",\n \"extensions\": [\"3dml\"]\n },\n \"text/vnd.in3d.spot\": {\n \"source\": \"iana\",\n \"extensions\": [\"spot\"]\n },\n \"text/vnd.iptc.newsml\": {\n \"source\": \"iana\"\n },\n \"text/vnd.iptc.nitf\": {\n \"source\": \"iana\"\n },\n \"text/vnd.latex-z\": {\n \"source\": \"iana\"\n },\n \"text/vnd.motorola.reflex\": {\n \"source\": \"iana\"\n },\n \"text/vnd.ms-mediapackage\": {\n \"source\": \"iana\"\n },\n \"text/vnd.net2phone.commcenter.command\": {\n \"source\": \"iana\"\n },\n \"text/vnd.radisys.msml-basic-layout\": {\n \"source\": \"iana\"\n },\n \"text/vnd.si.uricatalogue\": {\n \"source\": \"iana\"\n },\n \"text/vnd.sun.j2me.app-descriptor\": {\n \"source\": \"iana\",\n \"extensions\": [\"jad\"]\n },\n \"text/vnd.trolltech.linguist\": {\n \"source\": \"iana\"\n },\n \"text/vnd.wap.si\": {\n \"source\": \"iana\"\n },\n \"text/vnd.wap.sl\": {\n \"source\": \"iana\"\n },\n \"text/vnd.wap.wml\": {\n \"source\": \"iana\",\n \"extensions\": [\"wml\"]\n },\n \"text/vnd.wap.wmlscript\": {\n \"source\": \"iana\",\n \"extensions\": [\"wmls\"]\n },\n \"text/vtt\": {\n \"charset\": \"UTF-8\",\n \"compressible\": true,\n \"extensions\": [\"vtt\"]\n },\n \"text/x-asm\": {\n \"source\": \"apache\",\n \"extensions\": [\"s\",\"asm\"]\n },\n \"text/x-c\": {\n \"source\": \"apache\",\n \"extensions\": [\"c\",\"cc\",\"cxx\",\"cpp\",\"h\",\"hh\",\"dic\"]\n },\n \"text/x-component\": {\n \"source\": \"nginx\",\n \"extensions\": [\"htc\"]\n },\n \"text/x-fortran\": {\n \"source\": \"apache\",\n \"extensions\": [\"f\",\"for\",\"f77\",\"f90\"]\n },\n \"text/x-gwt-rpc\": {\n \"compressible\": true\n },\n \"text/x-handlebars-template\": {\n \"extensions\": [\"hbs\"]\n },\n \"text/x-java-source\": {\n \"source\": \"apache\",\n \"extensions\": [\"java\"]\n },\n \"text/x-jquery-tmpl\": {\n \"compressible\": true\n },\n \"text/x-lua\": {\n \"extensions\": [\"lua\"]\n },\n \"text/x-markdown\": {\n \"compressible\": true,\n \"extensions\": [\"mkd\"]\n },\n \"text/x-nfo\": {\n \"source\": \"apache\",\n \"extensions\": [\"nfo\"]\n },\n \"text/x-opml\": {\n \"source\": \"apache\",\n \"extensions\": [\"opml\"]\n },\n \"text/x-org\": {\n \"compressible\": true,\n \"extensions\": [\"org\"]\n },\n \"text/x-pascal\": {\n \"source\": \"apache\",\n \"extensions\": [\"p\",\"pas\"]\n },\n \"text/x-processing\": {\n \"compressible\": true,\n \"extensions\": [\"pde\"]\n },\n \"text/x-sass\": {\n \"extensions\": [\"sass\"]\n },\n \"text/x-scss\": {\n \"extensions\": [\"scss\"]\n },\n \"text/x-setext\": {\n \"source\": \"apache\",\n \"extensions\": [\"etx\"]\n },\n \"text/x-sfv\": {\n \"source\": \"apache\",\n \"extensions\": [\"sfv\"]\n },\n \"text/x-suse-ymp\": {\n \"compressible\": true,\n \"extensions\": [\"ymp\"]\n },\n \"text/x-uuencode\": {\n \"source\": \"apache\",\n \"extensions\": [\"uu\"]\n },\n \"text/x-vcalendar\": {\n \"source\": \"apache\",\n \"extensions\": [\"vcs\"]\n },\n \"text/x-vcard\": {\n \"source\": \"apache\",\n \"extensions\": [\"vcf\"]\n },\n \"text/xml\": {\n \"source\": \"iana\",\n \"compressible\": true,\n \"extensions\": [\"xml\"]\n },\n \"text/xml-external-parsed-entity\": {\n \"source\": \"iana\"\n },\n \"text/yaml\": {\n \"extensions\": [\"yaml\",\"yml\"]\n },\n \"video/1d-interleaved-parityfec\": {\n \"source\": \"iana\"\n },\n \"video/3gpp\": {\n \"source\": \"iana\",\n \"extensions\": [\"3gp\",\"3gpp\"]\n },\n \"video/3gpp-tt\": {\n \"source\": \"iana\"\n },\n \"video/3gpp2\": {\n \"source\": \"iana\",\n \"extensions\": [\"3g2\"]\n },\n \"video/bmpeg\": {\n \"source\": \"iana\"\n },\n \"video/bt656\": {\n \"source\": \"iana\"\n },\n \"video/celb\": {\n \"source\": \"iana\"\n },\n \"video/dv\": {\n \"source\": \"iana\"\n },\n \"video/encaprtp\": {\n \"source\": \"iana\"\n },\n \"video/h261\": {\n \"source\": \"iana\",\n \"extensions\": [\"h261\"]\n },\n \"video/h263\": {\n \"source\": \"iana\",\n \"extensions\": [\"h263\"]\n },\n \"video/h263-1998\": {\n \"source\": \"iana\"\n },\n \"video/h263-2000\": {\n \"source\": \"iana\"\n },\n \"video/h264\": {\n \"source\": \"iana\",\n \"extensions\": [\"h264\"]\n },\n \"video/h264-rcdo\": {\n \"source\": \"iana\"\n },\n \"video/h264-svc\": {\n \"source\": \"iana\"\n },\n \"video/h265\": {\n \"source\": \"iana\"\n },\n \"video/iso.segment\": {\n \"source\": \"iana\"\n },\n \"video/jpeg\": {\n \"source\": \"iana\",\n \"extensions\": [\"jpgv\"]\n },\n \"video/jpeg2000\": {\n \"source\": \"iana\"\n },\n \"video/jpm\": {\n \"source\": \"apache\",\n \"extensions\": [\"jpm\",\"jpgm\"]\n },\n \"video/mj2\": {\n \"source\": \"iana\",\n \"extensions\": [\"mj2\",\"mjp2\"]\n },\n \"video/mp1s\": {\n \"source\": \"iana\"\n },\n \"video/mp2p\": {\n \"source\": \"iana\"\n },\n \"video/mp2t\": {\n \"source\": \"iana\",\n \"extensions\": [\"ts\"]\n },\n \"video/mp4\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"mp4\",\"mp4v\",\"mpg4\"]\n },\n \"video/mp4v-es\": {\n \"source\": \"iana\"\n },\n \"video/mpeg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"mpeg\",\"mpg\",\"mpe\",\"m1v\",\"m2v\"]\n },\n \"video/mpeg4-generic\": {\n \"source\": \"iana\"\n },\n \"video/mpv\": {\n \"source\": \"iana\"\n },\n \"video/nv\": {\n \"source\": \"iana\"\n },\n \"video/ogg\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"ogv\"]\n },\n \"video/parityfec\": {\n \"source\": \"iana\"\n },\n \"video/pointer\": {\n \"source\": \"iana\"\n },\n \"video/quicktime\": {\n \"source\": \"iana\",\n \"compressible\": false,\n \"extensions\": [\"qt\",\"mov\"]\n },\n \"video/raptorfec\": {\n \"source\": \"iana\"\n },\n \"video/raw\": {\n \"source\": \"iana\"\n },\n \"video/rtp-enc-aescm128\": {\n \"source\": \"iana\"\n },\n \"video/rtploopback\": {\n \"source\": \"iana\"\n },\n \"video/rtx\": {\n \"source\": \"iana\"\n },\n \"video/smpte291\": {\n \"source\": \"iana\"\n },\n \"video/smpte292m\": {\n \"source\": \"iana\"\n },\n \"video/ulpfec\": {\n \"source\": \"iana\"\n },\n \"video/vc1\": {\n \"source\": \"iana\"\n },\n \"video/vnd.cctv\": {\n \"source\": \"iana\"\n },\n \"video/vnd.dece.hd\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvh\",\"uvvh\"]\n },\n \"video/vnd.dece.mobile\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvm\",\"uvvm\"]\n },\n \"video/vnd.dece.mp4\": {\n \"source\": \"iana\"\n },\n \"video/vnd.dece.pd\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvp\",\"uvvp\"]\n },\n \"video/vnd.dece.sd\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvs\",\"uvvs\"]\n },\n \"video/vnd.dece.video\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvv\",\"uvvv\"]\n },\n \"video/vnd.directv.mpeg\": {\n \"source\": \"iana\"\n },\n \"video/vnd.directv.mpeg-tts\": {\n \"source\": \"iana\"\n },\n \"video/vnd.dlna.mpeg-tts\": {\n \"source\": \"iana\"\n },\n \"video/vnd.dvb.file\": {\n \"source\": \"iana\",\n \"extensions\": [\"dvb\"]\n },\n \"video/vnd.fvt\": {\n \"source\": \"iana\",\n \"extensions\": [\"fvt\"]\n },\n \"video/vnd.hns.video\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.1dparityfec-1010\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.1dparityfec-2005\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.2dparityfec-1010\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.2dparityfec-2005\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.ttsavc\": {\n \"source\": \"iana\"\n },\n \"video/vnd.iptvforum.ttsmpeg2\": {\n \"source\": \"iana\"\n },\n \"video/vnd.motorola.video\": {\n \"source\": \"iana\"\n },\n \"video/vnd.motorola.videop\": {\n \"source\": \"iana\"\n },\n \"video/vnd.mpegurl\": {\n \"source\": \"iana\",\n \"extensions\": [\"mxu\",\"m4u\"]\n },\n \"video/vnd.ms-playready.media.pyv\": {\n \"source\": \"iana\",\n \"extensions\": [\"pyv\"]\n },\n \"video/vnd.nokia.interleaved-multimedia\": {\n \"source\": \"iana\"\n },\n \"video/vnd.nokia.mp4vr\": {\n \"source\": \"iana\"\n },\n \"video/vnd.nokia.videovoip\": {\n \"source\": \"iana\"\n },\n \"video/vnd.objectvideo\": {\n \"source\": \"iana\"\n },\n \"video/vnd.radgamettools.bink\": {\n \"source\": \"iana\"\n },\n \"video/vnd.radgamettools.smacker\": {\n \"source\": \"iana\"\n },\n \"video/vnd.sealed.mpeg1\": {\n \"source\": \"iana\"\n },\n \"video/vnd.sealed.mpeg4\": {\n \"source\": \"iana\"\n },\n \"video/vnd.sealed.swf\": {\n \"source\": \"iana\"\n },\n \"video/vnd.sealedmedia.softseal.mov\": {\n \"source\": \"iana\"\n },\n \"video/vnd.uvvu.mp4\": {\n \"source\": \"iana\",\n \"extensions\": [\"uvu\",\"uvvu\"]\n },\n \"video/vnd.vivo\": {\n \"source\": \"iana\",\n \"extensions\": [\"viv\"]\n },\n \"video/vp8\": {\n \"source\": \"iana\"\n },\n \"video/webm\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"webm\"]\n },\n \"video/x-f4v\": {\n \"source\": \"apache\",\n \"extensions\": [\"f4v\"]\n },\n \"video/x-fli\": {\n \"source\": \"apache\",\n \"extensions\": [\"fli\"]\n },\n \"video/x-flv\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"flv\"]\n },\n \"video/x-m4v\": {\n \"source\": \"apache\",\n \"extensions\": [\"m4v\"]\n },\n \"video/x-matroska\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"mkv\",\"mk3d\",\"mks\"]\n },\n \"video/x-mng\": {\n \"source\": \"apache\",\n \"extensions\": [\"mng\"]\n },\n \"video/x-ms-asf\": {\n \"source\": \"apache\",\n \"extensions\": [\"asf\",\"asx\"]\n },\n \"video/x-ms-vob\": {\n \"source\": \"apache\",\n \"extensions\": [\"vob\"]\n },\n \"video/x-ms-wm\": {\n \"source\": \"apache\",\n \"extensions\": [\"wm\"]\n },\n \"video/x-ms-wmv\": {\n \"source\": \"apache\",\n \"compressible\": false,\n \"extensions\": [\"wmv\"]\n },\n \"video/x-ms-wmx\": {\n \"source\": \"apache\",\n \"extensions\": [\"wmx\"]\n },\n \"video/x-ms-wvx\": {\n \"source\": \"apache\",\n \"extensions\": [\"wvx\"]\n },\n \"video/x-msvideo\": {\n \"source\": \"apache\",\n \"extensions\": [\"avi\"]\n },\n \"video/x-sgi-movie\": {\n \"source\": \"apache\",\n \"extensions\": [\"movie\"]\n },\n \"video/x-smv\": {\n \"source\": \"apache\",\n \"extensions\": [\"smv\"]\n },\n \"x-conference/x-cooltalk\": {\n \"source\": \"apache\",\n \"extensions\": [\"ice\"]\n },\n \"x-shader/x-fragment\": {\n \"compressible\": true\n },\n \"x-shader/x-vertex\": {\n \"compressible\": true\n }\n}\n"," // Use explicit /index.js to help browserify negociation in require '/lib/http-proxy' (!)\nvar ProxyServer = require('./http-proxy/index.js').Server;\n\n\n/**\n * Creates the proxy server.\n *\n * Examples:\n *\n * httpProxy.createProxyServer({ .. }, 8000)\n * // => '{ web: [Function], ws: [Function] ... }'\n *\n * @param {Object} Options Config object passed to the proxy\n *\n * @return {Object} Proxy Proxy object with handlers for `ws` and `web` requests\n *\n * @api public\n */\n\n\nfunction createProxyServer(options) {\n /*\n * `options` is needed and it must have the following layout:\n *\n * {\n * target : \n * forward: \n * agent : \n * ssl : \n * ws : \n * xfwd : \n * secure : \n * toProxy: \n * prependPath: \n * ignorePath: \n * localAddress : \n * changeOrigin: \n * preserveHeaderKeyCase: \n * auth : Basic authentication i.e. 'user:password' to compute an Authorization header.\n * hostRewrite: rewrites the location hostname on (201/301/302/307/308) redirects, Default: null.\n * autoRewrite: rewrites the location host/port on (201/301/302/307/308) redirects based on requested host/port. Default: false.\n * protocolRewrite: rewrites the location protocol on (201/301/302/307/308) redirects to 'http' or 'https'. Default: null.\n * }\n *\n * NOTE: `options.ws` and `options.ssl` are optional.\n * `options.target and `options.forward` cannot be\n * both missing\n * }\n */\n\n return new ProxyServer(options);\n}\n\n\nProxyServer.createProxyServer = createProxyServer;\nProxyServer.createServer = createProxyServer;\nProxyServer.createProxy = createProxyServer;\n\n\n\n\n/**\n * Export the proxy \"Server\" as the main export.\n */\nmodule.exports = ProxyServer;\n\n","var httpProxy = module.exports,\n extend = require('util')._extend,\n parse_url = require('url').parse,\n EE3 = require('eventemitter3'),\n http = require('http'),\n https = require('https'),\n web = require('./passes/web-incoming'),\n ws = require('./passes/ws-incoming');\n\nhttpProxy.Server = ProxyServer;\n\n/**\n * Returns a function that creates the loader for\n * either `ws` or `web`'s passes.\n *\n * Examples:\n *\n * httpProxy.createRightProxy('ws')\n * // => [Function]\n *\n * @param {String} Type Either 'ws' or 'web'\n * \n * @return {Function} Loader Function that when called returns an iterator for the right passes\n *\n * @api private\n */\n\nfunction createRightProxy(type) {\n\n return function(options) {\n return function(req, res /*, [head], [opts] */) {\n var passes = (type === 'ws') ? this.wsPasses : this.webPasses,\n args = [].slice.call(arguments),\n cntr = args.length - 1,\n head, cbl;\n\n /* optional args parse begin */\n if(typeof args[cntr] === 'function') {\n cbl = args[cntr];\n\n cntr--;\n }\n\n var requestOptions = options;\n if(\n !(args[cntr] instanceof Buffer) &&\n args[cntr] !== res\n ) {\n //Copy global options\n requestOptions = extend({}, options);\n //Overwrite with request options\n extend(requestOptions, args[cntr]);\n\n cntr--;\n }\n\n if(args[cntr] instanceof Buffer) {\n head = args[cntr];\n }\n\n /* optional args parse end */\n\n ['target', 'forward'].forEach(function(e) {\n if (typeof requestOptions[e] === 'string')\n requestOptions[e] = parse_url(requestOptions[e]);\n });\n\n if (!requestOptions.target && !requestOptions.forward) {\n return this.emit('error', new Error('Must provide a proper URL as target'));\n }\n\n for(var i=0; i < passes.length; i++) {\n /**\n * Call of passes functions\n * pass(req, res, options, head)\n *\n * In WebSockets case the `res` variable\n * refer to the connection socket\n * pass(req, socket, options, head)\n */\n if(passes[i](req, res, requestOptions, head, this, cbl)) { // passes can return a truthy value to halt the loop\n break;\n }\n }\n };\n };\n}\nhttpProxy.createRightProxy = createRightProxy;\n\nfunction ProxyServer(options) {\n EE3.call(this);\n\n options = options || {};\n options.prependPath = options.prependPath === false ? false : true;\n\n this.web = this.proxyRequest = createRightProxy('web')(options);\n this.ws = this.proxyWebsocketRequest = createRightProxy('ws')(options);\n this.options = options;\n\n this.webPasses = Object.keys(web).map(function(pass) {\n return web[pass];\n });\n\n this.wsPasses = Object.keys(ws).map(function(pass) {\n return ws[pass];\n });\n\n this.on('error', this.onError, this);\n\n}\n\nrequire('util').inherits(ProxyServer, EE3);\n\nProxyServer.prototype.onError = function (err) {\n //\n // Remark: Replicate node core behavior using EE3\n // so we force people to handle their own errors\n //\n if(this.listeners('error').length === 1) {\n throw err;\n }\n};\n\nProxyServer.prototype.listen = function(port, hostname) {\n var self = this,\n closure = function(req, res) { self.web(req, res); };\n\n this._server = this.options.ssl ?\n https.createServer(this.options.ssl, closure) :\n http.createServer(closure);\n\n if(this.options.ws) {\n this._server.on('upgrade', function(req, socket, head) { self.ws(req, socket, head); });\n }\n\n this._server.listen(port, hostname);\n\n return this;\n};\n\nProxyServer.prototype.close = function(callback) {\n var self = this;\n if (this._server) {\n this._server.close(done);\n }\n\n // Wrap callback to nullify server after all open connections are closed.\n function done() {\n self._server = null;\n if (callback) {\n callback.apply(null, arguments);\n }\n };\n};\n\nProxyServer.prototype.before = function(type, passName, callback) {\n if (type !== 'ws' && type !== 'web') {\n throw new Error('type must be `web` or `ws`');\n }\n var passes = (type === 'ws') ? this.wsPasses : this.webPasses,\n i = false;\n\n passes.forEach(function(v, idx) {\n if(v.name === passName) i = idx;\n })\n\n if(i === false) throw new Error('No such pass');\n\n passes.splice(i, 0, callback);\n};\nProxyServer.prototype.after = function(type, passName, callback) {\n if (type !== 'ws' && type !== 'web') {\n throw new Error('type must be `web` or `ws`');\n }\n var passes = (type === 'ws') ? this.wsPasses : this.webPasses,\n i = false;\n\n passes.forEach(function(v, idx) {\n if(v.name === passName) i = idx;\n })\n\n if(i === false) throw new Error('No such pass');\n\n passes.splice(i++, 0, callback);\n};\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","var httpNative = require('http'),\n httpsNative = require('https'),\n web_o = require('./web-outgoing'),\n common = require('../common'),\n followRedirects = require('follow-redirects');\n\nweb_o = Object.keys(web_o).map(function(pass) {\n return web_o[pass];\n});\n\nvar nativeAgents = { http: httpNative, https: httpsNative };\n\n/*!\n * Array of passes.\n *\n * A `pass` is just a function that is executed on `req, res, options`\n * so that you can easily add new checks while still keeping the base\n * flexible.\n */\n\n\nmodule.exports = {\n\n /**\n * Sets `content-length` to '0' if request is of DELETE type.\n *\n * @param {ClientRequest} Req Request object\n * @param {IncomingMessage} Res Response object\n * @param {Object} Options Config object passed to the proxy\n *\n * @api private\n */\n\n deleteLength: function deleteLength(req, res, options) {\n if((req.method === 'DELETE' || req.method === 'OPTIONS')\n && !req.headers['content-length']) {\n req.headers['content-length'] = '0';\n delete req.headers['transfer-encoding'];\n }\n },\n\n /**\n * Sets timeout in request socket if it was specified in options.\n *\n * @param {ClientRequest} Req Request object\n * @param {IncomingMessage} Res Response object\n * @param {Object} Options Config object passed to the proxy\n *\n * @api private\n */\n\n timeout: function timeout(req, res, options) {\n if(options.timeout) {\n req.socket.setTimeout(options.timeout);\n }\n },\n\n /**\n * Sets `x-forwarded-*` headers if specified in config.\n *\n * @param {ClientRequest} Req Request object\n * @param {IncomingMessage} Res Response object\n * @param {Object} Options Config object passed to the proxy\n *\n * @api private\n */\n\n XHeaders: function XHeaders(req, res, options) {\n if(!options.xfwd) return;\n\n var encrypted = req.isSpdy || common.hasEncryptedConnection(req);\n var values = {\n for : req.connection.remoteAddress || req.socket.remoteAddress,\n port : common.getPort(req),\n proto: encrypted ? 'https' : 'http'\n };\n\n ['for', 'port', 'proto'].forEach(function(header) {\n req.headers['x-forwarded-' + header] =\n (req.headers['x-forwarded-' + header] || '') +\n (req.headers['x-forwarded-' + header] ? ',' : '') +\n values[header];\n });\n\n req.headers['x-forwarded-host'] = req.headers['x-forwarded-host'] || req.headers['host'] || '';\n },\n\n /**\n * Does the actual proxying. If `forward` is enabled fires up\n * a ForwardStream, same happens for ProxyStream. The request\n * just dies otherwise.\n *\n * @param {ClientRequest} Req Request object\n * @param {IncomingMessage} Res Response object\n * @param {Object} Options Config object passed to the proxy\n *\n * @api private\n */\n\n stream: function stream(req, res, options, _, server, clb) {\n\n // And we begin!\n server.emit('start', req, res, options.target || options.forward);\n\n var agents = options.followRedirects ? followRedirects : nativeAgents;\n var http = agents.http;\n var https = agents.https;\n\n if(options.forward) {\n // If forward enable, so just pipe the request\n var forwardReq = (options.forward.protocol === 'https:' ? https : http).request(\n common.setupOutgoing(options.ssl || {}, options, req, 'forward')\n );\n\n // error handler (e.g. ECONNRESET, ECONNREFUSED)\n // Handle errors on incoming request as well as it makes sense to\n var forwardError = createErrorHandler(forwardReq, options.forward);\n req.on('error', forwardError);\n forwardReq.on('error', forwardError);\n\n (options.buffer || req).pipe(forwardReq);\n if(!options.target) { return res.end(); }\n }\n\n // Request initalization\n var proxyReq = (options.target.protocol === 'https:' ? https : http).request(\n common.setupOutgoing(options.ssl || {}, options, req)\n );\n\n // Enable developers to modify the proxyReq before headers are sent\n proxyReq.on('socket', function(socket) {\n if(server && !proxyReq.getHeader('expect')) {\n server.emit('proxyReq', proxyReq, req, res, options);\n }\n });\n\n // allow outgoing socket to timeout so that we could\n // show an error page at the initial request\n if(options.proxyTimeout) {\n proxyReq.setTimeout(options.proxyTimeout, function() {\n proxyReq.abort();\n });\n }\n\n // Ensure we abort proxy if request is aborted\n req.on('aborted', function () {\n proxyReq.abort();\n });\n\n // handle errors in proxy and incoming request, just like for forward proxy\n var proxyError = createErrorHandler(proxyReq, options.target);\n req.on('error', proxyError);\n proxyReq.on('error', proxyError);\n\n function createErrorHandler(proxyReq, url) {\n return function proxyError(err) {\n if (req.socket.destroyed && err.code === 'ECONNRESET') {\n server.emit('econnreset', err, req, res, url);\n return proxyReq.abort();\n }\n\n if (clb) {\n clb(err, req, res, url);\n } else {\n server.emit('error', err, req, res, url);\n }\n }\n }\n\n (options.buffer || req).pipe(proxyReq);\n\n proxyReq.on('response', function(proxyRes) {\n if(server) { server.emit('proxyRes', proxyRes, req, res); }\n\n if(!res.headersSent && !options.selfHandleResponse) {\n for(var i=0; i < web_o.length; i++) {\n if(web_o[i](req, res, proxyRes, options)) { break; }\n }\n }\n\n if (!res.finished) {\n // Allow us to listen when the proxy has completed\n proxyRes.on('end', function () {\n if (server) server.emit('end', req, res, proxyRes);\n });\n // We pipe to the response unless its expected to be handled by the user\n if (!options.selfHandleResponse) proxyRes.pipe(res);\n } else {\n if (server) server.emit('end', req, res, proxyRes);\n }\n });\n }\n\n};\n","var url = require('url'),\n common = require('../common');\n\n\nvar redirectRegex = /^201|30(1|2|7|8)$/;\n\n/*!\n * Array of passes.\n *\n * A `pass` is just a function that is executed on `req, res, options`\n * so that you can easily add new checks while still keeping the base\n * flexible.\n */\n\nmodule.exports = { // <--\n\n /**\n * If is a HTTP 1.0 request, remove chunk headers\n *\n * @param {ClientRequest} Req Request object\n * @param {IncomingMessage} Res Response object\n * @param {proxyResponse} Res Response object from the proxy request\n *\n * @api private\n */\n removeChunked: function removeChunked(req, res, proxyRes) {\n if (req.httpVersion === '1.0') {\n delete proxyRes.headers['transfer-encoding'];\n }\n },\n\n /**\n * If is a HTTP 1.0 request, set the correct connection header\n * or if connection header not present, then use `keep-alive`\n *\n * @param {ClientRequest} Req Request object\n * @param {IncomingMessage} Res Response object\n * @param {proxyResponse} Res Response object from the proxy request\n *\n * @api private\n */\n setConnection: function setConnection(req, res, proxyRes) {\n if (req.httpVersion === '1.0') {\n proxyRes.headers.connection = req.headers.connection || 'close';\n } else if (req.httpVersion !== '2.0' && !proxyRes.headers.connection) {\n proxyRes.headers.connection = req.headers.connection || 'keep-alive';\n }\n },\n\n setRedirectHostRewrite: function setRedirectHostRewrite(req, res, proxyRes, options) {\n if ((options.hostRewrite || options.autoRewrite || options.protocolRewrite)\n && proxyRes.headers['location']\n && redirectRegex.test(proxyRes.statusCode)) {\n var target = url.parse(options.target);\n var u = url.parse(proxyRes.headers['location']);\n\n // make sure the redirected host matches the target host before rewriting\n if (target.host != u.host) {\n return;\n }\n\n if (options.hostRewrite) {\n u.host = options.hostRewrite;\n } else if (options.autoRewrite) {\n u.host = req.headers['host'];\n }\n if (options.protocolRewrite) {\n u.protocol = options.protocolRewrite;\n }\n\n proxyRes.headers['location'] = u.format();\n }\n },\n /**\n * Copy headers from proxyResponse to response\n * set each header in response object.\n *\n * @param {ClientRequest} Req Request object\n * @param {IncomingMessage} Res Response object\n * @param {proxyResponse} Res Response object from the proxy request\n * @param {Object} Options options.cookieDomainRewrite: Config to rewrite cookie domain\n *\n * @api private\n */\n writeHeaders: function writeHeaders(req, res, proxyRes, options) {\n var rewriteCookieDomainConfig = options.cookieDomainRewrite,\n rewriteCookiePathConfig = options.cookiePathRewrite,\n preserveHeaderKeyCase = options.preserveHeaderKeyCase,\n rawHeaderKeyMap,\n setHeader = function(key, header) {\n if (header == undefined) return;\n if (rewriteCookieDomainConfig && key.toLowerCase() === 'set-cookie') {\n header = common.rewriteCookieProperty(header, rewriteCookieDomainConfig, 'domain');\n }\n if (rewriteCookiePathConfig && key.toLowerCase() === 'set-cookie') {\n header = common.rewriteCookieProperty(header, rewriteCookiePathConfig, 'path');\n }\n res.setHeader(String(key).trim(), header);\n };\n\n if (typeof rewriteCookieDomainConfig === 'string') { //also test for ''\n rewriteCookieDomainConfig = { '*': rewriteCookieDomainConfig };\n }\n\n if (typeof rewriteCookiePathConfig === 'string') { //also test for ''\n rewriteCookiePathConfig = { '*': rewriteCookiePathConfig };\n }\n\n // message.rawHeaders is added in: v0.11.6\n // https://nodejs.org/api/http.html#http_message_rawheaders\n if (preserveHeaderKeyCase && proxyRes.rawHeaders != undefined) {\n rawHeaderKeyMap = {};\n for (var i = 0; i < proxyRes.rawHeaders.length; i += 2) {\n var key = proxyRes.rawHeaders[i];\n rawHeaderKeyMap[key.toLowerCase()] = key;\n }\n }\n\n Object.keys(proxyRes.headers).forEach(function(key) {\n var header = proxyRes.headers[key];\n if (preserveHeaderKeyCase && rawHeaderKeyMap) {\n key = rawHeaderKeyMap[key] || key;\n }\n setHeader(key, header);\n });\n },\n\n /**\n * Set the statusCode from the proxyResponse\n *\n * @param {ClientRequest} Req Request object\n * @param {IncomingMessage} Res Response object\n * @param {proxyResponse} Res Response object from the proxy request\n *\n * @api private\n */\n writeStatusCode: function writeStatusCode(req, res, proxyRes) {\n // From Node.js docs: response.writeHead(statusCode[, statusMessage][, headers])\n if(proxyRes.statusMessage) {\n res.statusCode = proxyRes.statusCode;\n res.statusMessage = proxyRes.statusMessage;\n } else {\n res.statusCode = proxyRes.statusCode;\n }\n }\n\n};\n","var common = exports,\n url = require('url'),\n extend = require('util')._extend,\n required = require('requires-port');\n\nvar upgradeHeader = /(^|,)\\s*upgrade\\s*($|,)/i,\n isSSL = /^https|wss/;\n\n/**\n * Simple Regex for testing if protocol is https\n */\ncommon.isSSL = isSSL;\n/**\n * Copies the right headers from `options` and `req` to\n * `outgoing` which is then used to fire the proxied\n * request.\n *\n * Examples:\n *\n * common.setupOutgoing(outgoing, options, req)\n * // => { host: ..., hostname: ...}\n *\n * @param {Object} Outgoing Base object to be filled with required properties\n * @param {Object} Options Config object passed to the proxy\n * @param {ClientRequest} Req Request Object\n * @param {String} Forward String to select forward or target\n * \n * @return {Object} Outgoing Object with all required properties set\n *\n * @api private\n */\n\ncommon.setupOutgoing = function(outgoing, options, req, forward) {\n outgoing.port = options[forward || 'target'].port ||\n (isSSL.test(options[forward || 'target'].protocol) ? 443 : 80);\n\n ['host', 'hostname', 'socketPath', 'pfx', 'key',\n 'passphrase', 'cert', 'ca', 'ciphers', 'secureProtocol'].forEach(\n function(e) { outgoing[e] = options[forward || 'target'][e]; }\n );\n\n outgoing.method = options.method || req.method;\n outgoing.headers = extend({}, req.headers);\n\n if (options.headers){\n extend(outgoing.headers, options.headers);\n }\n\n if (options.auth) {\n outgoing.auth = options.auth;\n }\n \n if (options.ca) {\n outgoing.ca = options.ca;\n }\n\n if (isSSL.test(options[forward || 'target'].protocol)) {\n outgoing.rejectUnauthorized = (typeof options.secure === \"undefined\") ? true : options.secure;\n }\n\n\n outgoing.agent = options.agent || false;\n outgoing.localAddress = options.localAddress;\n\n //\n // Remark: If we are false and not upgrading, set the connection: close. This is the right thing to do\n // as node core doesn't handle this COMPLETELY properly yet.\n //\n if (!outgoing.agent) {\n outgoing.headers = outgoing.headers || {};\n if (typeof outgoing.headers.connection !== 'string'\n || !upgradeHeader.test(outgoing.headers.connection)\n ) { outgoing.headers.connection = 'close'; }\n }\n\n\n // the final path is target path + relative path requested by user:\n var target = options[forward || 'target'];\n var targetPath = target && options.prependPath !== false\n ? (target.path || '')\n : '';\n\n //\n // Remark: Can we somehow not use url.parse as a perf optimization?\n //\n var outgoingPath = !options.toProxy\n ? (url.parse(req.url).path || '')\n : req.url;\n\n //\n // Remark: ignorePath will just straight up ignore whatever the request's\n // path is. This can be labeled as FOOT-GUN material if you do not know what\n // you are doing and are using conflicting options.\n //\n outgoingPath = !options.ignorePath ? outgoingPath : '';\n\n outgoing.path = common.urlJoin(targetPath, outgoingPath);\n\n if (options.changeOrigin) {\n outgoing.headers.host =\n required(outgoing.port, options[forward || 'target'].protocol) && !hasPort(outgoing.host)\n ? outgoing.host + ':' + outgoing.port\n : outgoing.host;\n }\n return outgoing;\n};\n\n/**\n * Set the proper configuration for sockets,\n * set no delay and set keep alive, also set\n * the timeout to 0.\n *\n * Examples:\n *\n * common.setupSocket(socket)\n * // => Socket\n *\n * @param {Socket} Socket instance to setup\n * \n * @return {Socket} Return the configured socket.\n *\n * @api private\n */\n\ncommon.setupSocket = function(socket) {\n socket.setTimeout(0);\n socket.setNoDelay(true);\n\n socket.setKeepAlive(true, 0);\n\n return socket;\n};\n\n/**\n * Get the port number from the host. Or guess it based on the connection type.\n *\n * @param {Request} req Incoming HTTP request.\n *\n * @return {String} The port number.\n *\n * @api private\n */\ncommon.getPort = function(req) {\n var res = req.headers.host ? req.headers.host.match(/:(\\d+)/) : '';\n\n return res ?\n res[1] :\n common.hasEncryptedConnection(req) ? '443' : '80';\n};\n\n/**\n * Check if the request has an encrypted connection.\n *\n * @param {Request} req Incoming HTTP request.\n *\n * @return {Boolean} Whether the connection is encrypted or not.\n *\n * @api private\n */\ncommon.hasEncryptedConnection = function(req) {\n return Boolean(req.connection.encrypted || req.connection.pair);\n};\n\n/**\n * OS-agnostic join (doesn't break on URLs like path.join does on Windows)>\n *\n * @return {String} The generated path.\n *\n * @api private\n */\n\ncommon.urlJoin = function() {\n //\n // We do not want to mess with the query string. All we want to touch is the path.\n //\n var args = Array.prototype.slice.call(arguments),\n lastIndex = args.length - 1,\n last = args[lastIndex],\n lastSegs = last.split('?'),\n retSegs;\n\n args[lastIndex] = lastSegs.shift();\n\n //\n // Join all strings, but remove empty strings so we don't get extra slashes from\n // joining e.g. ['', 'am']\n //\n retSegs = [\n args.filter(Boolean).join('/')\n .replace(/\\/+/g, '/')\n .replace('http:/', 'http://')\n .replace('https:/', 'https://')\n ];\n\n // Only join the query string if it exists so we don't have trailing a '?'\n // on every request\n\n // Handle case where there could be multiple ? in the URL.\n retSegs.push.apply(retSegs, lastSegs);\n\n return retSegs.join('?')\n};\n\n/**\n * Rewrites or removes the domain of a cookie header\n *\n * @param {String|Array} Header\n * @param {Object} Config, mapping of domain to rewritten domain.\n * '*' key to match any domain, null value to remove the domain.\n *\n * @api private\n */\ncommon.rewriteCookieProperty = function rewriteCookieProperty(header, config, property) {\n if (Array.isArray(header)) {\n return header.map(function (headerElement) {\n return rewriteCookieProperty(headerElement, config, property);\n });\n }\n return header.replace(new RegExp(\"(;\\\\s*\" + property + \"=)([^;]+)\", 'i'), function(match, prefix, previousValue) {\n var newValue;\n if (previousValue in config) {\n newValue = config[previousValue];\n } else if ('*' in config) {\n newValue = config['*'];\n } else {\n //no match, return previous value\n return match;\n }\n if (newValue) {\n //replace value\n return prefix + newValue;\n } else {\n //remove value\n return '';\n }\n });\n};\n\n/**\n * Check the host and see if it potentially has a port in it (keep it simple)\n *\n * @returns {Boolean} Whether we have one or not\n *\n * @api private\n */\nfunction hasPort(host) {\n return !!~host.indexOf(':');\n};\n","'use strict';\n\n/**\n * Check if we're required to add a port number.\n *\n * @see https://url.spec.whatwg.org/#default-port\n * @param {Number|String} port Port number we need to check\n * @param {String} protocol Protocol we need to check against.\n * @returns {Boolean} Is it a default port for the given protocol\n * @api private\n */\nmodule.exports = function required(port, protocol) {\n protocol = protocol.split(':')[0];\n port = +port;\n\n if (!port) return false;\n\n switch (protocol) {\n case 'http':\n case 'ws':\n return port !== 80;\n\n case 'https':\n case 'wss':\n return port !== 443;\n\n case 'ftp':\n return port !== 21;\n\n case 'gopher':\n return port !== 70;\n\n case 'file':\n return false;\n }\n\n return port !== 0;\n};\n","var url = require(\"url\");\nvar URL = url.URL;\nvar http = require(\"http\");\nvar https = require(\"https\");\nvar Writable = require(\"stream\").Writable;\nvar assert = require(\"assert\");\nvar debug = require(\"./debug\");\n\n// Preventive platform detection\n// istanbul ignore next\n(function detectUnsupportedEnvironment() {\n var looksLikeNode = typeof process !== \"undefined\";\n var looksLikeBrowser = typeof window !== \"undefined\" && typeof document !== \"undefined\";\n var looksLikeV8 = isFunction(Error.captureStackTrace);\n if (!looksLikeNode && (looksLikeBrowser || !looksLikeV8)) {\n console.warn(\"The follow-redirects package should be excluded from browser builds.\");\n }\n}());\n\n// Whether to use the native URL object or the legacy url module\nvar useNativeURL = false;\ntry {\n assert(new URL(\"\"));\n}\ncatch (error) {\n useNativeURL = error.code === \"ERR_INVALID_URL\";\n}\n\n// URL fields to preserve in copy operations\nvar preservedUrlFields = [\n \"auth\",\n \"host\",\n \"hostname\",\n \"href\",\n \"path\",\n \"pathname\",\n \"port\",\n \"protocol\",\n \"query\",\n \"search\",\n \"hash\",\n];\n\n// Create handlers that pass events from native requests\nvar events = [\"abort\", \"aborted\", \"connect\", \"error\", \"socket\", \"timeout\"];\nvar eventHandlers = Object.create(null);\nevents.forEach(function (event) {\n eventHandlers[event] = function (arg1, arg2, arg3) {\n this._redirectable.emit(event, arg1, arg2, arg3);\n };\n});\n\n// Error types with codes\nvar InvalidUrlError = createErrorType(\n \"ERR_INVALID_URL\",\n \"Invalid URL\",\n TypeError\n);\nvar RedirectionError = createErrorType(\n \"ERR_FR_REDIRECTION_FAILURE\",\n \"Redirected request failed\"\n);\nvar TooManyRedirectsError = createErrorType(\n \"ERR_FR_TOO_MANY_REDIRECTS\",\n \"Maximum number of redirects exceeded\",\n RedirectionError\n);\nvar MaxBodyLengthExceededError = createErrorType(\n \"ERR_FR_MAX_BODY_LENGTH_EXCEEDED\",\n \"Request body larger than maxBodyLength limit\"\n);\nvar WriteAfterEndError = createErrorType(\n \"ERR_STREAM_WRITE_AFTER_END\",\n \"write after end\"\n);\n\n// istanbul ignore next\nvar destroy = Writable.prototype.destroy || noop;\n\n// An HTTP(S) request that can be redirected\nfunction RedirectableRequest(options, responseCallback) {\n // Initialize the request\n Writable.call(this);\n this._sanitizeOptions(options);\n this._options = options;\n this._ended = false;\n this._ending = false;\n this._redirectCount = 0;\n this._redirects = [];\n this._requestBodyLength = 0;\n this._requestBodyBuffers = [];\n\n // Attach a callback if passed\n if (responseCallback) {\n this.on(\"response\", responseCallback);\n }\n\n // React to responses of native requests\n var self = this;\n this._onNativeResponse = function (response) {\n try {\n self._processResponse(response);\n }\n catch (cause) {\n self.emit(\"error\", cause instanceof RedirectionError ?\n cause : new RedirectionError({ cause: cause }));\n }\n };\n\n // Perform the first request\n this._performRequest();\n}\nRedirectableRequest.prototype = Object.create(Writable.prototype);\n\nRedirectableRequest.prototype.abort = function () {\n destroyRequest(this._currentRequest);\n this._currentRequest.abort();\n this.emit(\"abort\");\n};\n\nRedirectableRequest.prototype.destroy = function (error) {\n destroyRequest(this._currentRequest, error);\n destroy.call(this, error);\n return this;\n};\n\n// Writes buffered data to the current native request\nRedirectableRequest.prototype.write = function (data, encoding, callback) {\n // Writing is not allowed if end has been called\n if (this._ending) {\n throw new WriteAfterEndError();\n }\n\n // Validate input and shift parameters if necessary\n if (!isString(data) && !isBuffer(data)) {\n throw new TypeError(\"data should be a string, Buffer or Uint8Array\");\n }\n if (isFunction(encoding)) {\n callback = encoding;\n encoding = null;\n }\n\n // Ignore empty buffers, since writing them doesn't invoke the callback\n // https://github.com/nodejs/node/issues/22066\n if (data.length === 0) {\n if (callback) {\n callback();\n }\n return;\n }\n // Only write when we don't exceed the maximum body length\n if (this._requestBodyLength + data.length <= this._options.maxBodyLength) {\n this._requestBodyLength += data.length;\n this._requestBodyBuffers.push({ data: data, encoding: encoding });\n this._currentRequest.write(data, encoding, callback);\n }\n // Error when we exceed the maximum body length\n else {\n this.emit(\"error\", new MaxBodyLengthExceededError());\n this.abort();\n }\n};\n\n// Ends the current native request\nRedirectableRequest.prototype.end = function (data, encoding, callback) {\n // Shift parameters if necessary\n if (isFunction(data)) {\n callback = data;\n data = encoding = null;\n }\n else if (isFunction(encoding)) {\n callback = encoding;\n encoding = null;\n }\n\n // Write data if needed and end\n if (!data) {\n this._ended = this._ending = true;\n this._currentRequest.end(null, null, callback);\n }\n else {\n var self = this;\n var currentRequest = this._currentRequest;\n this.write(data, encoding, function () {\n self._ended = true;\n currentRequest.end(null, null, callback);\n });\n this._ending = true;\n }\n};\n\n// Sets a header value on the current native request\nRedirectableRequest.prototype.setHeader = function (name, value) {\n this._options.headers[name] = value;\n this._currentRequest.setHeader(name, value);\n};\n\n// Clears a header value on the current native request\nRedirectableRequest.prototype.removeHeader = function (name) {\n delete this._options.headers[name];\n this._currentRequest.removeHeader(name);\n};\n\n// Global timeout for all underlying requests\nRedirectableRequest.prototype.setTimeout = function (msecs, callback) {\n var self = this;\n\n // Destroys the socket on timeout\n function destroyOnTimeout(socket) {\n socket.setTimeout(msecs);\n socket.removeListener(\"timeout\", socket.destroy);\n socket.addListener(\"timeout\", socket.destroy);\n }\n\n // Sets up a timer to trigger a timeout event\n function startTimer(socket) {\n if (self._timeout) {\n clearTimeout(self._timeout);\n }\n self._timeout = setTimeout(function () {\n self.emit(\"timeout\");\n clearTimer();\n }, msecs);\n destroyOnTimeout(socket);\n }\n\n // Stops a timeout from triggering\n function clearTimer() {\n // Clear the timeout\n if (self._timeout) {\n clearTimeout(self._timeout);\n self._timeout = null;\n }\n\n // Clean up all attached listeners\n self.removeListener(\"abort\", clearTimer);\n self.removeListener(\"error\", clearTimer);\n self.removeListener(\"response\", clearTimer);\n self.removeListener(\"close\", clearTimer);\n if (callback) {\n self.removeListener(\"timeout\", callback);\n }\n if (!self.socket) {\n self._currentRequest.removeListener(\"socket\", startTimer);\n }\n }\n\n // Attach callback if passed\n if (callback) {\n this.on(\"timeout\", callback);\n }\n\n // Start the timer if or when the socket is opened\n if (this.socket) {\n startTimer(this.socket);\n }\n else {\n this._currentRequest.once(\"socket\", startTimer);\n }\n\n // Clean up on events\n this.on(\"socket\", destroyOnTimeout);\n this.on(\"abort\", clearTimer);\n this.on(\"error\", clearTimer);\n this.on(\"response\", clearTimer);\n this.on(\"close\", clearTimer);\n\n return this;\n};\n\n// Proxy all other public ClientRequest methods\n[\n \"flushHeaders\", \"getHeader\",\n \"setNoDelay\", \"setSocketKeepAlive\",\n].forEach(function (method) {\n RedirectableRequest.prototype[method] = function (a, b) {\n return this._currentRequest[method](a, b);\n };\n});\n\n// Proxy all public ClientRequest properties\n[\"aborted\", \"connection\", \"socket\"].forEach(function (property) {\n Object.defineProperty(RedirectableRequest.prototype, property, {\n get: function () { return this._currentRequest[property]; },\n });\n});\n\nRedirectableRequest.prototype._sanitizeOptions = function (options) {\n // Ensure headers are always present\n if (!options.headers) {\n options.headers = {};\n }\n\n // Since http.request treats host as an alias of hostname,\n // but the url module interprets host as hostname plus port,\n // eliminate the host property to avoid confusion.\n if (options.host) {\n // Use hostname if set, because it has precedence\n if (!options.hostname) {\n options.hostname = options.host;\n }\n delete options.host;\n }\n\n // Complete the URL object when necessary\n if (!options.pathname && options.path) {\n var searchPos = options.path.indexOf(\"?\");\n if (searchPos < 0) {\n options.pathname = options.path;\n }\n else {\n options.pathname = options.path.substring(0, searchPos);\n options.search = options.path.substring(searchPos);\n }\n }\n};\n\n\n// Executes the next native request (initial or redirect)\nRedirectableRequest.prototype._performRequest = function () {\n // Load the native protocol\n var protocol = this._options.protocol;\n var nativeProtocol = this._options.nativeProtocols[protocol];\n if (!nativeProtocol) {\n throw new TypeError(\"Unsupported protocol \" + protocol);\n }\n\n // If specified, use the agent corresponding to the protocol\n // (HTTP and HTTPS use different types of agents)\n if (this._options.agents) {\n var scheme = protocol.slice(0, -1);\n this._options.agent = this._options.agents[scheme];\n }\n\n // Create the native request and set up its event handlers\n var request = this._currentRequest =\n nativeProtocol.request(this._options, this._onNativeResponse);\n request._redirectable = this;\n for (var event of events) {\n request.on(event, eventHandlers[event]);\n }\n\n // RFC7230§5.3.1: When making a request directly to an origin server, […]\n // a client MUST send only the absolute path […] as the request-target.\n this._currentUrl = /^\\//.test(this._options.path) ?\n url.format(this._options) :\n // When making a request to a proxy, […]\n // a client MUST send the target URI in absolute-form […].\n this._options.path;\n\n // End a redirected request\n // (The first request must be ended explicitly with RedirectableRequest#end)\n if (this._isRedirect) {\n // Write the request entity and end\n var i = 0;\n var self = this;\n var buffers = this._requestBodyBuffers;\n (function writeNext(error) {\n // Only write if this request has not been redirected yet\n // istanbul ignore else\n if (request === self._currentRequest) {\n // Report any write errors\n // istanbul ignore if\n if (error) {\n self.emit(\"error\", error);\n }\n // Write the next buffer if there are still left\n else if (i < buffers.length) {\n var buffer = buffers[i++];\n // istanbul ignore else\n if (!request.finished) {\n request.write(buffer.data, buffer.encoding, writeNext);\n }\n }\n // End the request if `end` has been called on us\n else if (self._ended) {\n request.end();\n }\n }\n }());\n }\n};\n\n// Processes a response from the current native request\nRedirectableRequest.prototype._processResponse = function (response) {\n // Store the redirected response\n var statusCode = response.statusCode;\n if (this._options.trackRedirects) {\n this._redirects.push({\n url: this._currentUrl,\n headers: response.headers,\n statusCode: statusCode,\n });\n }\n\n // RFC7231§6.4: The 3xx (Redirection) class of status code indicates\n // that further action needs to be taken by the user agent in order to\n // fulfill the request. If a Location header field is provided,\n // the user agent MAY automatically redirect its request to the URI\n // referenced by the Location field value,\n // even if the specific status code is not understood.\n\n // If the response is not a redirect; return it as-is\n var location = response.headers.location;\n if (!location || this._options.followRedirects === false ||\n statusCode < 300 || statusCode >= 400) {\n response.responseUrl = this._currentUrl;\n response.redirects = this._redirects;\n this.emit(\"response\", response);\n\n // Clean up\n this._requestBodyBuffers = [];\n return;\n }\n\n // The response is a redirect, so abort the current request\n destroyRequest(this._currentRequest);\n // Discard the remainder of the response to avoid waiting for data\n response.destroy();\n\n // RFC7231§6.4: A client SHOULD detect and intervene\n // in cyclical redirections (i.e., \"infinite\" redirection loops).\n if (++this._redirectCount > this._options.maxRedirects) {\n throw new TooManyRedirectsError();\n }\n\n // Store the request headers if applicable\n var requestHeaders;\n var beforeRedirect = this._options.beforeRedirect;\n if (beforeRedirect) {\n requestHeaders = Object.assign({\n // The Host header was set by nativeProtocol.request\n Host: response.req.getHeader(\"host\"),\n }, this._options.headers);\n }\n\n // RFC7231§6.4: Automatic redirection needs to done with\n // care for methods not known to be safe, […]\n // RFC7231§6.4.2–3: For historical reasons, a user agent MAY change\n // the request method from POST to GET for the subsequent request.\n var method = this._options.method;\n if ((statusCode === 301 || statusCode === 302) && this._options.method === \"POST\" ||\n // RFC7231§6.4.4: The 303 (See Other) status code indicates that\n // the server is redirecting the user agent to a different resource […]\n // A user agent can perform a retrieval request targeting that URI\n // (a GET or HEAD request if using HTTP) […]\n (statusCode === 303) && !/^(?:GET|HEAD)$/.test(this._options.method)) {\n this._options.method = \"GET\";\n // Drop a possible entity and headers related to it\n this._requestBodyBuffers = [];\n removeMatchingHeaders(/^content-/i, this._options.headers);\n }\n\n // Drop the Host header, as the redirect might lead to a different host\n var currentHostHeader = removeMatchingHeaders(/^host$/i, this._options.headers);\n\n // If the redirect is relative, carry over the host of the last request\n var currentUrlParts = parseUrl(this._currentUrl);\n var currentHost = currentHostHeader || currentUrlParts.host;\n var currentUrl = /^\\w+:/.test(location) ? this._currentUrl :\n url.format(Object.assign(currentUrlParts, { host: currentHost }));\n\n // Create the redirected request\n var redirectUrl = resolveUrl(location, currentUrl);\n debug(\"redirecting to\", redirectUrl.href);\n this._isRedirect = true;\n spreadUrlObject(redirectUrl, this._options);\n\n // Drop confidential headers when redirecting to a less secure protocol\n // or to a different domain that is not a superdomain\n if (redirectUrl.protocol !== currentUrlParts.protocol &&\n redirectUrl.protocol !== \"https:\" ||\n redirectUrl.host !== currentHost &&\n !isSubdomain(redirectUrl.host, currentHost)) {\n removeMatchingHeaders(/^(?:(?:proxy-)?authorization|cookie)$/i, this._options.headers);\n }\n\n // Evaluate the beforeRedirect callback\n if (isFunction(beforeRedirect)) {\n var responseDetails = {\n headers: response.headers,\n statusCode: statusCode,\n };\n var requestDetails = {\n url: currentUrl,\n method: method,\n headers: requestHeaders,\n };\n beforeRedirect(this._options, responseDetails, requestDetails);\n this._sanitizeOptions(this._options);\n }\n\n // Perform the redirected request\n this._performRequest();\n};\n\n// Wraps the key/value object of protocols with redirect functionality\nfunction wrap(protocols) {\n // Default settings\n var exports = {\n maxRedirects: 21,\n maxBodyLength: 10 * 1024 * 1024,\n };\n\n // Wrap each protocol\n var nativeProtocols = {};\n Object.keys(protocols).forEach(function (scheme) {\n var protocol = scheme + \":\";\n var nativeProtocol = nativeProtocols[protocol] = protocols[scheme];\n var wrappedProtocol = exports[scheme] = Object.create(nativeProtocol);\n\n // Executes a request, following redirects\n function request(input, options, callback) {\n // Parse parameters, ensuring that input is an object\n if (isURL(input)) {\n input = spreadUrlObject(input);\n }\n else if (isString(input)) {\n input = spreadUrlObject(parseUrl(input));\n }\n else {\n callback = options;\n options = validateUrl(input);\n input = { protocol: protocol };\n }\n if (isFunction(options)) {\n callback = options;\n options = null;\n }\n\n // Set defaults\n options = Object.assign({\n maxRedirects: exports.maxRedirects,\n maxBodyLength: exports.maxBodyLength,\n }, input, options);\n options.nativeProtocols = nativeProtocols;\n if (!isString(options.host) && !isString(options.hostname)) {\n options.hostname = \"::1\";\n }\n\n assert.equal(options.protocol, protocol, \"protocol mismatch\");\n debug(\"options\", options);\n return new RedirectableRequest(options, callback);\n }\n\n // Executes a GET request, following redirects\n function get(input, options, callback) {\n var wrappedRequest = wrappedProtocol.request(input, options, callback);\n wrappedRequest.end();\n return wrappedRequest;\n }\n\n // Expose the properties on the wrapped protocol\n Object.defineProperties(wrappedProtocol, {\n request: { value: request, configurable: true, enumerable: true, writable: true },\n get: { value: get, configurable: true, enumerable: true, writable: true },\n });\n });\n return exports;\n}\n\nfunction noop() { /* empty */ }\n\nfunction parseUrl(input) {\n var parsed;\n // istanbul ignore else\n if (useNativeURL) {\n parsed = new URL(input);\n }\n else {\n // Ensure the URL is valid and absolute\n parsed = validateUrl(url.parse(input));\n if (!isString(parsed.protocol)) {\n throw new InvalidUrlError({ input });\n }\n }\n return parsed;\n}\n\nfunction resolveUrl(relative, base) {\n // istanbul ignore next\n return useNativeURL ? new URL(relative, base) : parseUrl(url.resolve(base, relative));\n}\n\nfunction validateUrl(input) {\n if (/^\\[/.test(input.hostname) && !/^\\[[:0-9a-f]+\\]$/i.test(input.hostname)) {\n throw new InvalidUrlError({ input: input.href || input });\n }\n if (/^\\[/.test(input.host) && !/^\\[[:0-9a-f]+\\](:\\d+)?$/i.test(input.host)) {\n throw new InvalidUrlError({ input: input.href || input });\n }\n return input;\n}\n\nfunction spreadUrlObject(urlObject, target) {\n var spread = target || {};\n for (var key of preservedUrlFields) {\n spread[key] = urlObject[key];\n }\n\n // Fix IPv6 hostname\n if (spread.hostname.startsWith(\"[\")) {\n spread.hostname = spread.hostname.slice(1, -1);\n }\n // Ensure port is a number\n if (spread.port !== \"\") {\n spread.port = Number(spread.port);\n }\n // Concatenate path\n spread.path = spread.search ? spread.pathname + spread.search : spread.pathname;\n\n return spread;\n}\n\nfunction removeMatchingHeaders(regex, headers) {\n var lastValue;\n for (var header in headers) {\n if (regex.test(header)) {\n lastValue = headers[header];\n delete headers[header];\n }\n }\n return (lastValue === null || typeof lastValue === \"undefined\") ?\n undefined : String(lastValue).trim();\n}\n\nfunction createErrorType(code, message, baseClass) {\n // Create constructor\n function CustomError(properties) {\n // istanbul ignore else\n if (isFunction(Error.captureStackTrace)) {\n Error.captureStackTrace(this, this.constructor);\n }\n Object.assign(this, properties || {});\n this.code = code;\n this.message = this.cause ? message + \": \" + this.cause.message : message;\n }\n\n // Attach constructor and set default properties\n CustomError.prototype = new (baseClass || Error)();\n Object.defineProperties(CustomError.prototype, {\n constructor: {\n value: CustomError,\n enumerable: false,\n },\n name: {\n value: \"Error [\" + code + \"]\",\n enumerable: false,\n },\n });\n return CustomError;\n}\n\nfunction destroyRequest(request, error) {\n for (var event of events) {\n request.removeListener(event, eventHandlers[event]);\n }\n request.on(\"error\", noop);\n request.destroy(error);\n}\n\nfunction isSubdomain(subdomain, domain) {\n assert(isString(subdomain) && isString(domain));\n var dot = subdomain.length - domain.length - 1;\n return dot > 0 && subdomain[dot] === \".\" && subdomain.endsWith(domain);\n}\n\nfunction isString(value) {\n return typeof value === \"string\" || value instanceof String;\n}\n\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\n\nfunction isBuffer(value) {\n return typeof value === \"object\" && (\"length\" in value);\n}\n\nfunction isURL(value) {\n return URL && value instanceof URL;\n}\n\n// Exports\nmodule.exports = wrap({ http: http, https: https });\nmodule.exports.wrap = wrap;\n","var debug;\n\nmodule.exports = function () {\n if (!debug) {\n try {\n /* eslint global-require: off */\n debug = require(\"debug\")(\"follow-redirects\");\n }\n catch (error) { /* */ }\n if (typeof debug !== \"function\") {\n debug = function () { /* */ };\n }\n }\n debug.apply(null, arguments);\n};\n","/**\n * Detect Electron renderer / nwjs process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) {\n\tmodule.exports = require('./browser.js');\n} else {\n\tmodule.exports = require('./node.js');\n}\n","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\tlet m;\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)) && parseInt(m[1], 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug');\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tlet i;\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n\t\tconst len = split.length;\n\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tif (!split[i]) {\n\t\t\t\t// ignore empty strings\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tnamespaces = split[i].replace(/\\*/g, '.*?');\n\n\t\t\tif (namespaces[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(new RegExp('^' + namespaces.slice(1) + '$'));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(new RegExp('^' + namespaces + '$'));\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names.map(toNamespace),\n\t\t\t...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tif (name[name.length - 1] === '*') {\n\t\t\treturn true;\n\t\t}\n\n\t\tlet i;\n\t\tlet len;\n\n\t\tfor (i = 0, len = createDebug.skips.length; i < len; i++) {\n\t\t\tif (createDebug.skips[i].test(name)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0, len = createDebug.names.length; i < len; i++) {\n\t\t\tif (createDebug.names[i].test(name)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Convert regexp to namespace\n\t*\n\t* @param {RegExp} regxep\n\t* @return {String} namespace\n\t* @api private\n\t*/\n\tfunction toNamespace(regexp) {\n\t\treturn regexp.toString()\n\t\t\t.substring(2, regexp.toString().length - 2)\n\t\t\t.replace(/\\.\\*\\?$/, '*');\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","/**\n * Module dependencies.\n */\n\nconst tty = require('tty');\nconst util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n */\n\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.destroy = util.deprecate(\n\t() => {},\n\t'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'\n);\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\ntry {\n\t// Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json)\n\t// eslint-disable-next-line import/no-extraneous-dependencies\n\tconst supportsColor = require('supports-color');\n\n\tif (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) {\n\t\texports.colors = [\n\t\t\t20,\n\t\t\t21,\n\t\t\t26,\n\t\t\t27,\n\t\t\t32,\n\t\t\t33,\n\t\t\t38,\n\t\t\t39,\n\t\t\t40,\n\t\t\t41,\n\t\t\t42,\n\t\t\t43,\n\t\t\t44,\n\t\t\t45,\n\t\t\t56,\n\t\t\t57,\n\t\t\t62,\n\t\t\t63,\n\t\t\t68,\n\t\t\t69,\n\t\t\t74,\n\t\t\t75,\n\t\t\t76,\n\t\t\t77,\n\t\t\t78,\n\t\t\t79,\n\t\t\t80,\n\t\t\t81,\n\t\t\t92,\n\t\t\t93,\n\t\t\t98,\n\t\t\t99,\n\t\t\t112,\n\t\t\t113,\n\t\t\t128,\n\t\t\t129,\n\t\t\t134,\n\t\t\t135,\n\t\t\t148,\n\t\t\t149,\n\t\t\t160,\n\t\t\t161,\n\t\t\t162,\n\t\t\t163,\n\t\t\t164,\n\t\t\t165,\n\t\t\t166,\n\t\t\t167,\n\t\t\t168,\n\t\t\t169,\n\t\t\t170,\n\t\t\t171,\n\t\t\t172,\n\t\t\t173,\n\t\t\t178,\n\t\t\t179,\n\t\t\t184,\n\t\t\t185,\n\t\t\t196,\n\t\t\t197,\n\t\t\t198,\n\t\t\t199,\n\t\t\t200,\n\t\t\t201,\n\t\t\t202,\n\t\t\t203,\n\t\t\t204,\n\t\t\t205,\n\t\t\t206,\n\t\t\t207,\n\t\t\t208,\n\t\t\t209,\n\t\t\t214,\n\t\t\t215,\n\t\t\t220,\n\t\t\t221\n\t\t];\n\t}\n} catch (error) {\n\t// Swallow - we only care if `supports-color` is available; it doesn't have to be.\n}\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(key => {\n\treturn /^debug_/i.test(key);\n}).reduce((obj, key) => {\n\t// Camel-case\n\tconst prop = key\n\t\t.substring(6)\n\t\t.toLowerCase()\n\t\t.replace(/_([a-z])/g, (_, k) => {\n\t\t\treturn k.toUpperCase();\n\t\t});\n\n\t// Coerce string value into JS value\n\tlet val = process.env[key];\n\tif (/^(yes|on|true|enabled)$/i.test(val)) {\n\t\tval = true;\n\t} else if (/^(no|off|false|disabled)$/i.test(val)) {\n\t\tval = false;\n\t} else if (val === 'null') {\n\t\tval = null;\n\t} else {\n\t\tval = Number(val);\n\t}\n\n\tobj[prop] = val;\n\treturn obj;\n}, {});\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n\treturn 'colors' in exports.inspectOpts ?\n\t\tBoolean(exports.inspectOpts.colors) :\n\t\ttty.isatty(process.stderr.fd);\n}\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\tconst {namespace: name, useColors} = this;\n\n\tif (useColors) {\n\t\tconst c = this.color;\n\t\tconst colorCode = '\\u001B[3' + (c < 8 ? c : '8;5;' + c);\n\t\tconst prefix = ` ${colorCode};1m${name} \\u001B[0m`;\n\n\t\targs[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n\t\targs.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\\u001B[0m');\n\t} else {\n\t\targs[0] = getDate() + name + ' ' + args[0];\n\t}\n}\n\nfunction getDate() {\n\tif (exports.inspectOpts.hideDate) {\n\t\treturn '';\n\t}\n\treturn new Date().toISOString() + ' ';\n}\n\n/**\n * Invokes `util.formatWithOptions()` with the specified arguments and writes to stderr.\n */\n\nfunction log(...args) {\n\treturn process.stderr.write(util.formatWithOptions(exports.inspectOpts, ...args) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\tif (namespaces) {\n\t\tprocess.env.DEBUG = namespaces;\n\t} else {\n\t\t// If you set a process.env field to null or undefined, it gets cast to the\n\t\t// string 'null' or 'undefined'. Just delete instead.\n\t\tdelete process.env.DEBUG;\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n\treturn process.env.DEBUG;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init(debug) {\n\tdebug.inspectOpts = {};\n\n\tconst keys = Object.keys(exports.inspectOpts);\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tdebug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nformatters.o = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts)\n\t\t.split('\\n')\n\t\t.map(str => str.trim())\n\t\t.join(' ');\n};\n\n/**\n * Map %O to `util.inspect()`, allowing multiple lines if needed.\n */\n\nformatters.O = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts);\n};\n","'use strict';\nconst os = require('os');\nconst tty = require('tty');\nconst hasFlag = require('has-flag');\n\nconst {env} = process;\n\nlet forceColor;\nif (hasFlag('no-color') ||\n\thasFlag('no-colors') ||\n\thasFlag('color=false') ||\n\thasFlag('color=never')) {\n\tforceColor = 0;\n} else if (hasFlag('color') ||\n\thasFlag('colors') ||\n\thasFlag('color=true') ||\n\thasFlag('color=always')) {\n\tforceColor = 1;\n}\n\nif ('FORCE_COLOR' in env) {\n\tif (env.FORCE_COLOR === 'true') {\n\t\tforceColor = 1;\n\t} else if (env.FORCE_COLOR === 'false') {\n\t\tforceColor = 0;\n\t} else {\n\t\tforceColor = env.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env.FORCE_COLOR, 10), 3);\n\t}\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3\n\t};\n}\n\nfunction supportsColor(haveStream, streamIsTTY) {\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (hasFlag('color=16m') ||\n\t\thasFlag('color=full') ||\n\t\thasFlag('color=truecolor')) {\n\t\treturn 3;\n\t}\n\n\tif (hasFlag('color=256')) {\n\t\treturn 2;\n\t}\n\n\tif (haveStream && !streamIsTTY && forceColor === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor || 0;\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\t// Windows 10 build 10586 is the first Windows release that supports 256 colors.\n\t\t// Windows 10 build 14931 is the first release that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(osRelease[0]) >= 10 &&\n\t\t\tNumber(osRelease[2]) >= 10586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'GITHUB_ACTIONS', 'BUILDKITE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app':\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\tcase 'Apple_Terminal':\n\t\t\t\treturn 2;\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\treturn min;\n}\n\nfunction getSupportLevel(stream) {\n\tconst level = supportsColor(stream, stream && stream.isTTY);\n\treturn translateLevel(level);\n}\n\nmodule.exports = {\n\tsupportsColor: getSupportLevel,\n\tstdout: translateLevel(supportsColor(true, tty.isatty(1))),\n\tstderr: translateLevel(supportsColor(true, tty.isatty(2)))\n};\n","'use strict';\n\nmodule.exports = (flag, argv = process.argv) => {\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst position = argv.indexOf(prefix + flag);\n\tconst terminatorPosition = argv.indexOf('--');\n\treturn position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);\n};\n","var http = require('http'),\n https = require('https'),\n common = require('../common');\n\n/*!\n * Array of passes.\n *\n * A `pass` is just a function that is executed on `req, socket, options`\n * so that you can easily add new checks while still keeping the base\n * flexible.\n */\n\n/*\n * Websockets Passes\n *\n */\n\n\nmodule.exports = {\n /**\n * WebSocket requests must have the `GET` method and\n * the `upgrade:websocket` header\n *\n * @param {ClientRequest} Req Request object\n * @param {Socket} Websocket\n *\n * @api private\n */\n\n checkMethodAndHeader : function checkMethodAndHeader(req, socket) {\n if (req.method !== 'GET' || !req.headers.upgrade) {\n socket.destroy();\n return true;\n }\n\n if (req.headers.upgrade.toLowerCase() !== 'websocket') {\n socket.destroy();\n return true;\n }\n },\n\n /**\n * Sets `x-forwarded-*` headers if specified in config.\n *\n * @param {ClientRequest} Req Request object\n * @param {Socket} Websocket\n * @param {Object} Options Config object passed to the proxy\n *\n * @api private\n */\n\n XHeaders : function XHeaders(req, socket, options) {\n if(!options.xfwd) return;\n\n var values = {\n for : req.connection.remoteAddress || req.socket.remoteAddress,\n port : common.getPort(req),\n proto: common.hasEncryptedConnection(req) ? 'wss' : 'ws'\n };\n\n ['for', 'port', 'proto'].forEach(function(header) {\n req.headers['x-forwarded-' + header] =\n (req.headers['x-forwarded-' + header] || '') +\n (req.headers['x-forwarded-' + header] ? ',' : '') +\n values[header];\n });\n },\n\n /**\n * Does the actual proxying. Make the request and upgrade it\n * send the Switching Protocols request and pipe the sockets.\n *\n * @param {ClientRequest} Req Request object\n * @param {Socket} Websocket\n * @param {Object} Options Config object passed to the proxy\n *\n * @api private\n */\n stream : function stream(req, socket, options, head, server, clb) {\n\n var createHttpHeader = function(line, headers) {\n return Object.keys(headers).reduce(function (head, key) {\n var value = headers[key];\n\n if (!Array.isArray(value)) {\n head.push(key + ': ' + value);\n return head;\n }\n\n for (var i = 0; i < value.length; i++) {\n head.push(key + ': ' + value[i]);\n }\n return head;\n }, [line])\n .join('\\r\\n') + '\\r\\n\\r\\n';\n }\n\n common.setupSocket(socket);\n\n if (head && head.length) socket.unshift(head);\n\n\n var proxyReq = (common.isSSL.test(options.target.protocol) ? https : http).request(\n common.setupOutgoing(options.ssl || {}, options, req)\n );\n\n // Enable developers to modify the proxyReq before headers are sent\n if (server) { server.emit('proxyReqWs', proxyReq, req, socket, options, head); }\n\n // Error Handler\n proxyReq.on('error', onOutgoingError);\n proxyReq.on('response', function (res) {\n // if upgrade event isn't going to happen, close the socket\n if (!res.upgrade) {\n socket.write(createHttpHeader('HTTP/' + res.httpVersion + ' ' + res.statusCode + ' ' + res.statusMessage, res.headers));\n res.pipe(socket);\n }\n });\n\n proxyReq.on('upgrade', function(proxyRes, proxySocket, proxyHead) {\n proxySocket.on('error', onOutgoingError);\n\n // Allow us to listen when the websocket has completed\n proxySocket.on('end', function () {\n server.emit('close', proxyRes, proxySocket, proxyHead);\n });\n\n // The pipe below will end proxySocket if socket closes cleanly, but not\n // if it errors (eg, vanishes from the net and starts returning\n // EHOSTUNREACH). We need to do that explicitly.\n socket.on('error', function () {\n proxySocket.end();\n });\n\n common.setupSocket(proxySocket);\n\n if (proxyHead && proxyHead.length) proxySocket.unshift(proxyHead);\n\n //\n // Remark: Handle writing the headers to the socket when switching protocols\n // Also handles when a header is an array\n //\n socket.write(createHttpHeader('HTTP/1.1 101 Switching Protocols', proxyRes.headers));\n\n proxySocket.pipe(socket).pipe(proxySocket);\n\n server.emit('open', proxySocket);\n server.emit('proxySocket', proxySocket); //DEPRECATED.\n });\n\n return proxyReq.end(); // XXX: CHECK IF THIS IS THIS CORRECT\n\n function onOutgoingError(err) {\n if (clb) {\n clb(err, req, socket);\n } else {\n server.emit('error', err, req, socket);\n }\n socket.end();\n }\n }\n};\n","'use strict';\n\nconst path = require('path');\nconst scan = require('./scan');\nconst parse = require('./parse');\nconst utils = require('./utils');\nconst constants = require('./constants');\nconst isObject = val => val && typeof val === 'object' && !Array.isArray(val);\n\n/**\n * Creates a matcher function from one or more glob patterns. The\n * returned function takes a string to match as its first argument,\n * and returns true if the string is a match. The returned matcher\n * function also takes a boolean as the second argument that, when true,\n * returns an object with additional information.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch(glob[, options]);\n *\n * const isMatch = picomatch('*.!(*a)');\n * console.log(isMatch('a.a')); //=> false\n * console.log(isMatch('a.b')); //=> true\n * ```\n * @name picomatch\n * @param {String|Array} `globs` One or more glob patterns.\n * @param {Object=} `options`\n * @return {Function=} Returns a matcher function.\n * @api public\n */\n\nconst picomatch = (glob, options, returnState = false) => {\n if (Array.isArray(glob)) {\n const fns = glob.map(input => picomatch(input, options, returnState));\n const arrayMatcher = str => {\n for (const isMatch of fns) {\n const state = isMatch(str);\n if (state) return state;\n }\n return false;\n };\n return arrayMatcher;\n }\n\n const isState = isObject(glob) && glob.tokens && glob.input;\n\n if (glob === '' || (typeof glob !== 'string' && !isState)) {\n throw new TypeError('Expected pattern to be a non-empty string');\n }\n\n const opts = options || {};\n const posix = utils.isWindows(options);\n const regex = isState\n ? picomatch.compileRe(glob, options)\n : picomatch.makeRe(glob, options, false, true);\n\n const state = regex.state;\n delete regex.state;\n\n let isIgnored = () => false;\n if (opts.ignore) {\n const ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null };\n isIgnored = picomatch(opts.ignore, ignoreOpts, returnState);\n }\n\n const matcher = (input, returnObject = false) => {\n const { isMatch, match, output } = picomatch.test(input, regex, options, { glob, posix });\n const result = { glob, state, regex, posix, input, output, match, isMatch };\n\n if (typeof opts.onResult === 'function') {\n opts.onResult(result);\n }\n\n if (isMatch === false) {\n result.isMatch = false;\n return returnObject ? result : false;\n }\n\n if (isIgnored(input)) {\n if (typeof opts.onIgnore === 'function') {\n opts.onIgnore(result);\n }\n result.isMatch = false;\n return returnObject ? result : false;\n }\n\n if (typeof opts.onMatch === 'function') {\n opts.onMatch(result);\n }\n return returnObject ? result : true;\n };\n\n if (returnState) {\n matcher.state = state;\n }\n\n return matcher;\n};\n\n/**\n * Test `input` with the given `regex`. This is used by the main\n * `picomatch()` function to test the input string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.test(input, regex[, options]);\n *\n * console.log(picomatch.test('foo/bar', /^(?:([^/]*?)\\/([^/]*?))$/));\n * // { isMatch: true, match: [ 'foo/', 'foo', 'bar' ], output: 'foo/bar' }\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp} `regex`\n * @return {Object} Returns an object with matching info.\n * @api public\n */\n\npicomatch.test = (input, regex, options, { glob, posix } = {}) => {\n if (typeof input !== 'string') {\n throw new TypeError('Expected input to be a string');\n }\n\n if (input === '') {\n return { isMatch: false, output: '' };\n }\n\n const opts = options || {};\n const format = opts.format || (posix ? utils.toPosixSlashes : null);\n let match = input === glob;\n let output = (match && format) ? format(input) : input;\n\n if (match === false) {\n output = format ? format(input) : input;\n match = output === glob;\n }\n\n if (match === false || opts.capture === true) {\n if (opts.matchBase === true || opts.basename === true) {\n match = picomatch.matchBase(input, regex, options, posix);\n } else {\n match = regex.exec(output);\n }\n }\n\n return { isMatch: Boolean(match), match, output };\n};\n\n/**\n * Match the basename of a filepath.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.matchBase(input, glob[, options]);\n * console.log(picomatch.matchBase('foo/bar.js', '*.js'); // true\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp|String} `glob` Glob pattern or regex created by [.makeRe](#makeRe).\n * @return {Boolean}\n * @api public\n */\n\npicomatch.matchBase = (input, glob, options, posix = utils.isWindows(options)) => {\n const regex = glob instanceof RegExp ? glob : picomatch.makeRe(glob, options);\n return regex.test(path.basename(input));\n};\n\n/**\n * Returns true if **any** of the given glob `patterns` match the specified `string`.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.isMatch(string, patterns[, options]);\n *\n * console.log(picomatch.isMatch('a.a', ['b.*', '*.a'])); //=> true\n * console.log(picomatch.isMatch('a.a', 'b.*')); //=> false\n * ```\n * @param {String|Array} str The string to test.\n * @param {String|Array} patterns One or more glob patterns to use for matching.\n * @param {Object} [options] See available [options](#options).\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\npicomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);\n\n/**\n * Parse a glob pattern to create the source string for a regular\n * expression.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const result = picomatch.parse(pattern[, options]);\n * ```\n * @param {String} `pattern`\n * @param {Object} `options`\n * @return {Object} Returns an object with useful properties and output to be used as a regex source string.\n * @api public\n */\n\npicomatch.parse = (pattern, options) => {\n if (Array.isArray(pattern)) return pattern.map(p => picomatch.parse(p, options));\n return parse(pattern, { ...options, fastpaths: false });\n};\n\n/**\n * Scan a glob pattern to separate the pattern into segments.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.scan(input[, options]);\n *\n * const result = picomatch.scan('!./foo/*.js');\n * console.log(result);\n * { prefix: '!./',\n * input: '!./foo/*.js',\n * start: 3,\n * base: 'foo',\n * glob: '*.js',\n * isBrace: false,\n * isBracket: false,\n * isGlob: true,\n * isExtglob: false,\n * isGlobstar: false,\n * negated: true }\n * ```\n * @param {String} `input` Glob pattern to scan.\n * @param {Object} `options`\n * @return {Object} Returns an object with\n * @api public\n */\n\npicomatch.scan = (input, options) => scan(input, options);\n\n/**\n * Compile a regular expression from the `state` object returned by the\n * [parse()](#parse) method.\n *\n * @param {Object} `state`\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Intended for implementors, this argument allows you to return the raw output from the parser.\n * @param {Boolean} `returnState` Adds the state to a `state` property on the returned regex. Useful for implementors and debugging.\n * @return {RegExp}\n * @api public\n */\n\npicomatch.compileRe = (state, options, returnOutput = false, returnState = false) => {\n if (returnOutput === true) {\n return state.output;\n }\n\n const opts = options || {};\n const prepend = opts.contains ? '' : '^';\n const append = opts.contains ? '' : '$';\n\n let source = `${prepend}(?:${state.output})${append}`;\n if (state && state.negated === true) {\n source = `^(?!${source}).*$`;\n }\n\n const regex = picomatch.toRegex(source, options);\n if (returnState === true) {\n regex.state = state;\n }\n\n return regex;\n};\n\n/**\n * Create a regular expression from a parsed glob pattern.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const state = picomatch.parse('*.js');\n * // picomatch.compileRe(state[, options]);\n *\n * console.log(picomatch.compileRe(state));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `state` The object returned from the `.parse` method.\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Implementors may use this argument to return the compiled output, instead of a regular expression. This is not exposed on the options to prevent end-users from mutating the result.\n * @param {Boolean} `returnState` Implementors may use this argument to return the state from the parsed glob with the returned regular expression.\n * @return {RegExp} Returns a regex created from the given pattern.\n * @api public\n */\n\npicomatch.makeRe = (input, options = {}, returnOutput = false, returnState = false) => {\n if (!input || typeof input !== 'string') {\n throw new TypeError('Expected a non-empty string');\n }\n\n let parsed = { negated: false, fastpaths: true };\n\n if (options.fastpaths !== false && (input[0] === '.' || input[0] === '*')) {\n parsed.output = parse.fastpaths(input, options);\n }\n\n if (!parsed.output) {\n parsed = parse(input, options);\n }\n\n return picomatch.compileRe(parsed, options, returnOutput, returnState);\n};\n\n/**\n * Create a regular expression from the given regex source string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.toRegex(source[, options]);\n *\n * const { output } = picomatch.parse('*.js');\n * console.log(picomatch.toRegex(output));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `source` Regular expression source string.\n * @param {Object} `options`\n * @return {RegExp}\n * @api public\n */\n\npicomatch.toRegex = (source, options) => {\n try {\n const opts = options || {};\n return new RegExp(source, opts.flags || (opts.nocase ? 'i' : ''));\n } catch (err) {\n if (options && options.debug === true) throw err;\n return /$^/;\n }\n};\n\n/**\n * Picomatch constants.\n * @return {Object}\n */\n\npicomatch.constants = constants;\n\n/**\n * Expose \"picomatch\"\n */\n\nmodule.exports = picomatch;\n","'use strict';\n\nconst utils = require('./utils');\nconst {\n CHAR_ASTERISK, /* * */\n CHAR_AT, /* @ */\n CHAR_BACKWARD_SLASH, /* \\ */\n CHAR_COMMA, /* , */\n CHAR_DOT, /* . */\n CHAR_EXCLAMATION_MARK, /* ! */\n CHAR_FORWARD_SLASH, /* / */\n CHAR_LEFT_CURLY_BRACE, /* { */\n CHAR_LEFT_PARENTHESES, /* ( */\n CHAR_LEFT_SQUARE_BRACKET, /* [ */\n CHAR_PLUS, /* + */\n CHAR_QUESTION_MARK, /* ? */\n CHAR_RIGHT_CURLY_BRACE, /* } */\n CHAR_RIGHT_PARENTHESES, /* ) */\n CHAR_RIGHT_SQUARE_BRACKET /* ] */\n} = require('./constants');\n\nconst isPathSeparator = code => {\n return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;\n};\n\nconst depth = token => {\n if (token.isPrefix !== true) {\n token.depth = token.isGlobstar ? Infinity : 1;\n }\n};\n\n/**\n * Quickly scans a glob pattern and returns an object with a handful of\n * useful properties, like `isGlob`, `path` (the leading non-glob, if it exists),\n * `glob` (the actual pattern), `negated` (true if the path starts with `!` but not\n * with `!(`) and `negatedExtglob` (true if the path starts with `!(`).\n *\n * ```js\n * const pm = require('picomatch');\n * console.log(pm.scan('foo/bar/*.js'));\n * { isGlob: true, input: 'foo/bar/*.js', base: 'foo/bar', glob: '*.js' }\n * ```\n * @param {String} `str`\n * @param {Object} `options`\n * @return {Object} Returns an object with tokens and regex source string.\n * @api public\n */\n\nconst scan = (input, options) => {\n const opts = options || {};\n\n const length = input.length - 1;\n const scanToEnd = opts.parts === true || opts.scanToEnd === true;\n const slashes = [];\n const tokens = [];\n const parts = [];\n\n let str = input;\n let index = -1;\n let start = 0;\n let lastIndex = 0;\n let isBrace = false;\n let isBracket = false;\n let isGlob = false;\n let isExtglob = false;\n let isGlobstar = false;\n let braceEscaped = false;\n let backslashes = false;\n let negated = false;\n let negatedExtglob = false;\n let finished = false;\n let braces = 0;\n let prev;\n let code;\n let token = { value: '', depth: 0, isGlob: false };\n\n const eos = () => index >= length;\n const peek = () => str.charCodeAt(index + 1);\n const advance = () => {\n prev = code;\n return str.charCodeAt(++index);\n };\n\n while (index < length) {\n code = advance();\n let next;\n\n if (code === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n code = advance();\n\n if (code === CHAR_LEFT_CURLY_BRACE) {\n braceEscaped = true;\n }\n continue;\n }\n\n if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE) {\n braces++;\n\n while (eos() !== true && (code = advance())) {\n if (code === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n advance();\n continue;\n }\n\n if (code === CHAR_LEFT_CURLY_BRACE) {\n braces++;\n continue;\n }\n\n if (braceEscaped !== true && code === CHAR_DOT && (code = advance()) === CHAR_DOT) {\n isBrace = token.isBrace = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (braceEscaped !== true && code === CHAR_COMMA) {\n isBrace = token.isBrace = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (code === CHAR_RIGHT_CURLY_BRACE) {\n braces--;\n\n if (braces === 0) {\n braceEscaped = false;\n isBrace = token.isBrace = true;\n finished = true;\n break;\n }\n }\n }\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (code === CHAR_FORWARD_SLASH) {\n slashes.push(index);\n tokens.push(token);\n token = { value: '', depth: 0, isGlob: false };\n\n if (finished === true) continue;\n if (prev === CHAR_DOT && index === (start + 1)) {\n start += 2;\n continue;\n }\n\n lastIndex = index + 1;\n continue;\n }\n\n if (opts.noext !== true) {\n const isExtglobChar = code === CHAR_PLUS\n || code === CHAR_AT\n || code === CHAR_ASTERISK\n || code === CHAR_QUESTION_MARK\n || code === CHAR_EXCLAMATION_MARK;\n\n if (isExtglobChar === true && peek() === CHAR_LEFT_PARENTHESES) {\n isGlob = token.isGlob = true;\n isExtglob = token.isExtglob = true;\n finished = true;\n if (code === CHAR_EXCLAMATION_MARK && index === start) {\n negatedExtglob = true;\n }\n\n if (scanToEnd === true) {\n while (eos() !== true && (code = advance())) {\n if (code === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n code = advance();\n continue;\n }\n\n if (code === CHAR_RIGHT_PARENTHESES) {\n isGlob = token.isGlob = true;\n finished = true;\n break;\n }\n }\n continue;\n }\n break;\n }\n }\n\n if (code === CHAR_ASTERISK) {\n if (prev === CHAR_ASTERISK) isGlobstar = token.isGlobstar = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n break;\n }\n\n if (code === CHAR_QUESTION_MARK) {\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n break;\n }\n\n if (code === CHAR_LEFT_SQUARE_BRACKET) {\n while (eos() !== true && (next = advance())) {\n if (next === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n advance();\n continue;\n }\n\n if (next === CHAR_RIGHT_SQUARE_BRACKET) {\n isBracket = token.isBracket = true;\n isGlob = token.isGlob = true;\n finished = true;\n break;\n }\n }\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (opts.nonegate !== true && code === CHAR_EXCLAMATION_MARK && index === start) {\n negated = token.negated = true;\n start++;\n continue;\n }\n\n if (opts.noparen !== true && code === CHAR_LEFT_PARENTHESES) {\n isGlob = token.isGlob = true;\n\n if (scanToEnd === true) {\n while (eos() !== true && (code = advance())) {\n if (code === CHAR_LEFT_PARENTHESES) {\n backslashes = token.backslashes = true;\n code = advance();\n continue;\n }\n\n if (code === CHAR_RIGHT_PARENTHESES) {\n finished = true;\n break;\n }\n }\n continue;\n }\n break;\n }\n\n if (isGlob === true) {\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n }\n\n if (opts.noext === true) {\n isExtglob = false;\n isGlob = false;\n }\n\n let base = str;\n let prefix = '';\n let glob = '';\n\n if (start > 0) {\n prefix = str.slice(0, start);\n str = str.slice(start);\n lastIndex -= start;\n }\n\n if (base && isGlob === true && lastIndex > 0) {\n base = str.slice(0, lastIndex);\n glob = str.slice(lastIndex);\n } else if (isGlob === true) {\n base = '';\n glob = str;\n } else {\n base = str;\n }\n\n if (base && base !== '' && base !== '/' && base !== str) {\n if (isPathSeparator(base.charCodeAt(base.length - 1))) {\n base = base.slice(0, -1);\n }\n }\n\n if (opts.unescape === true) {\n if (glob) glob = utils.removeBackslashes(glob);\n\n if (base && backslashes === true) {\n base = utils.removeBackslashes(base);\n }\n }\n\n const state = {\n prefix,\n input,\n start,\n base,\n glob,\n isBrace,\n isBracket,\n isGlob,\n isExtglob,\n isGlobstar,\n negated,\n negatedExtglob\n };\n\n if (opts.tokens === true) {\n state.maxDepth = 0;\n if (!isPathSeparator(code)) {\n tokens.push(token);\n }\n state.tokens = tokens;\n }\n\n if (opts.parts === true || opts.tokens === true) {\n let prevIndex;\n\n for (let idx = 0; idx < slashes.length; idx++) {\n const n = prevIndex ? prevIndex + 1 : start;\n const i = slashes[idx];\n const value = input.slice(n, i);\n if (opts.tokens) {\n if (idx === 0 && start !== 0) {\n tokens[idx].isPrefix = true;\n tokens[idx].value = prefix;\n } else {\n tokens[idx].value = value;\n }\n depth(tokens[idx]);\n state.maxDepth += tokens[idx].depth;\n }\n if (idx !== 0 || value !== '') {\n parts.push(value);\n }\n prevIndex = i;\n }\n\n if (prevIndex && prevIndex + 1 < input.length) {\n const value = input.slice(prevIndex + 1);\n parts.push(value);\n\n if (opts.tokens) {\n tokens[tokens.length - 1].value = value;\n depth(tokens[tokens.length - 1]);\n state.maxDepth += tokens[tokens.length - 1].depth;\n }\n }\n\n state.slashes = slashes;\n state.parts = parts;\n }\n\n return state;\n};\n\nmodule.exports = scan;\n","'use strict';\n\nconst path = require('path');\nconst win32 = process.platform === 'win32';\nconst {\n REGEX_BACKSLASH,\n REGEX_REMOVE_BACKSLASH,\n REGEX_SPECIAL_CHARS,\n REGEX_SPECIAL_CHARS_GLOBAL\n} = require('./constants');\n\nexports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);\nexports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str);\nexports.isRegexChar = str => str.length === 1 && exports.hasRegexChars(str);\nexports.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\\\$1');\nexports.toPosixSlashes = str => str.replace(REGEX_BACKSLASH, '/');\n\nexports.removeBackslashes = str => {\n return str.replace(REGEX_REMOVE_BACKSLASH, match => {\n return match === '\\\\' ? '' : match;\n });\n};\n\nexports.supportsLookbehinds = () => {\n const segs = process.version.slice(1).split('.').map(Number);\n if (segs.length === 3 && segs[0] >= 9 || (segs[0] === 8 && segs[1] >= 10)) {\n return true;\n }\n return false;\n};\n\nexports.isWindows = options => {\n if (options && typeof options.windows === 'boolean') {\n return options.windows;\n }\n return win32 === true || path.sep === '\\\\';\n};\n\nexports.escapeLast = (input, char, lastIdx) => {\n const idx = input.lastIndexOf(char, lastIdx);\n if (idx === -1) return input;\n if (input[idx - 1] === '\\\\') return exports.escapeLast(input, char, idx - 1);\n return `${input.slice(0, idx)}\\\\${input.slice(idx)}`;\n};\n\nexports.removePrefix = (input, state = {}) => {\n let output = input;\n if (output.startsWith('./')) {\n output = output.slice(2);\n state.prefix = './';\n }\n return output;\n};\n\nexports.wrapOutput = (input, state = {}, options = {}) => {\n const prepend = options.contains ? '' : '^';\n const append = options.contains ? '' : '$';\n\n let output = `${prepend}(?:${input})${append}`;\n if (state.negated === true) {\n output = `(?:^(?!${output}).*$)`;\n }\n return output;\n};\n","'use strict';\n\nconst path = require('path');\nconst WIN_SLASH = '\\\\\\\\/';\nconst WIN_NO_SLASH = `[^${WIN_SLASH}]`;\n\n/**\n * Posix glob regex\n */\n\nconst DOT_LITERAL = '\\\\.';\nconst PLUS_LITERAL = '\\\\+';\nconst QMARK_LITERAL = '\\\\?';\nconst SLASH_LITERAL = '\\\\/';\nconst ONE_CHAR = '(?=.)';\nconst QMARK = '[^/]';\nconst END_ANCHOR = `(?:${SLASH_LITERAL}|$)`;\nconst START_ANCHOR = `(?:^|${SLASH_LITERAL})`;\nconst DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`;\nconst NO_DOT = `(?!${DOT_LITERAL})`;\nconst NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`;\nconst NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`;\nconst NO_DOTS_SLASH = `(?!${DOTS_SLASH})`;\nconst QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`;\nconst STAR = `${QMARK}*?`;\n\nconst POSIX_CHARS = {\n DOT_LITERAL,\n PLUS_LITERAL,\n QMARK_LITERAL,\n SLASH_LITERAL,\n ONE_CHAR,\n QMARK,\n END_ANCHOR,\n DOTS_SLASH,\n NO_DOT,\n NO_DOTS,\n NO_DOT_SLASH,\n NO_DOTS_SLASH,\n QMARK_NO_DOT,\n STAR,\n START_ANCHOR\n};\n\n/**\n * Windows glob regex\n */\n\nconst WINDOWS_CHARS = {\n ...POSIX_CHARS,\n\n SLASH_LITERAL: `[${WIN_SLASH}]`,\n QMARK: WIN_NO_SLASH,\n STAR: `${WIN_NO_SLASH}*?`,\n DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`,\n NO_DOT: `(?!${DOT_LITERAL})`,\n NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`,\n NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n QMARK_NO_DOT: `[^.${WIN_SLASH}]`,\n START_ANCHOR: `(?:^|[${WIN_SLASH}])`,\n END_ANCHOR: `(?:[${WIN_SLASH}]|$)`\n};\n\n/**\n * POSIX Bracket Regex\n */\n\nconst POSIX_REGEX_SOURCE = {\n alnum: 'a-zA-Z0-9',\n alpha: 'a-zA-Z',\n ascii: '\\\\x00-\\\\x7F',\n blank: ' \\\\t',\n cntrl: '\\\\x00-\\\\x1F\\\\x7F',\n digit: '0-9',\n graph: '\\\\x21-\\\\x7E',\n lower: 'a-z',\n print: '\\\\x20-\\\\x7E ',\n punct: '\\\\-!\"#$%&\\'()\\\\*+,./:;<=>?@[\\\\]^_`{|}~',\n space: ' \\\\t\\\\r\\\\n\\\\v\\\\f',\n upper: 'A-Z',\n word: 'A-Za-z0-9_',\n xdigit: 'A-Fa-f0-9'\n};\n\nmodule.exports = {\n MAX_LENGTH: 1024 * 64,\n POSIX_REGEX_SOURCE,\n\n // regular expressions\n REGEX_BACKSLASH: /\\\\(?![*+?^${}(|)[\\]])/g,\n REGEX_NON_SPECIAL_CHARS: /^[^@![\\].,$*+?^{}()|\\\\/]+/,\n REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\\]]/,\n REGEX_SPECIAL_CHARS_BACKREF: /(\\\\?)((\\W)(\\3*))/g,\n REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\\]])/g,\n REGEX_REMOVE_BACKSLASH: /(?:\\[.*?[^\\\\]\\]|\\\\(?=.))/g,\n\n // Replace globs with equivalent patterns to reduce parsing time.\n REPLACEMENTS: {\n '***': '*',\n '**/**': '**',\n '**/**/**': '**'\n },\n\n // Digits\n CHAR_0: 48, /* 0 */\n CHAR_9: 57, /* 9 */\n\n // Alphabet chars.\n CHAR_UPPERCASE_A: 65, /* A */\n CHAR_LOWERCASE_A: 97, /* a */\n CHAR_UPPERCASE_Z: 90, /* Z */\n CHAR_LOWERCASE_Z: 122, /* z */\n\n CHAR_LEFT_PARENTHESES: 40, /* ( */\n CHAR_RIGHT_PARENTHESES: 41, /* ) */\n\n CHAR_ASTERISK: 42, /* * */\n\n // Non-alphabetic chars.\n CHAR_AMPERSAND: 38, /* & */\n CHAR_AT: 64, /* @ */\n CHAR_BACKWARD_SLASH: 92, /* \\ */\n CHAR_CARRIAGE_RETURN: 13, /* \\r */\n CHAR_CIRCUMFLEX_ACCENT: 94, /* ^ */\n CHAR_COLON: 58, /* : */\n CHAR_COMMA: 44, /* , */\n CHAR_DOT: 46, /* . */\n CHAR_DOUBLE_QUOTE: 34, /* \" */\n CHAR_EQUAL: 61, /* = */\n CHAR_EXCLAMATION_MARK: 33, /* ! */\n CHAR_FORM_FEED: 12, /* \\f */\n CHAR_FORWARD_SLASH: 47, /* / */\n CHAR_GRAVE_ACCENT: 96, /* ` */\n CHAR_HASH: 35, /* # */\n CHAR_HYPHEN_MINUS: 45, /* - */\n CHAR_LEFT_ANGLE_BRACKET: 60, /* < */\n CHAR_LEFT_CURLY_BRACE: 123, /* { */\n CHAR_LEFT_SQUARE_BRACKET: 91, /* [ */\n CHAR_LINE_FEED: 10, /* \\n */\n CHAR_NO_BREAK_SPACE: 160, /* \\u00A0 */\n CHAR_PERCENT: 37, /* % */\n CHAR_PLUS: 43, /* + */\n CHAR_QUESTION_MARK: 63, /* ? */\n CHAR_RIGHT_ANGLE_BRACKET: 62, /* > */\n CHAR_RIGHT_CURLY_BRACE: 125, /* } */\n CHAR_RIGHT_SQUARE_BRACKET: 93, /* ] */\n CHAR_SEMICOLON: 59, /* ; */\n CHAR_SINGLE_QUOTE: 39, /* ' */\n CHAR_SPACE: 32, /* */\n CHAR_TAB: 9, /* \\t */\n CHAR_UNDERSCORE: 95, /* _ */\n CHAR_VERTICAL_LINE: 124, /* | */\n CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279, /* \\uFEFF */\n\n SEP: path.sep,\n\n /**\n * Create EXTGLOB_CHARS\n */\n\n extglobChars(chars) {\n return {\n '!': { type: 'negate', open: '(?:(?!(?:', close: `))${chars.STAR})` },\n '?': { type: 'qmark', open: '(?:', close: ')?' },\n '+': { type: 'plus', open: '(?:', close: ')+' },\n '*': { type: 'star', open: '(?:', close: ')*' },\n '@': { type: 'at', open: '(?:', close: ')' }\n };\n },\n\n /**\n * Create GLOB_CHARS\n */\n\n globChars(win32) {\n return win32 === true ? WINDOWS_CHARS : POSIX_CHARS;\n }\n};\n","'use strict';\n\nconst constants = require('./constants');\nconst utils = require('./utils');\n\n/**\n * Constants\n */\n\nconst {\n MAX_LENGTH,\n POSIX_REGEX_SOURCE,\n REGEX_NON_SPECIAL_CHARS,\n REGEX_SPECIAL_CHARS_BACKREF,\n REPLACEMENTS\n} = constants;\n\n/**\n * Helpers\n */\n\nconst expandRange = (args, options) => {\n if (typeof options.expandRange === 'function') {\n return options.expandRange(...args, options);\n }\n\n args.sort();\n const value = `[${args.join('-')}]`;\n\n try {\n /* eslint-disable-next-line no-new */\n new RegExp(value);\n } catch (ex) {\n return args.map(v => utils.escapeRegex(v)).join('..');\n }\n\n return value;\n};\n\n/**\n * Create the message for a syntax error\n */\n\nconst syntaxError = (type, char) => {\n return `Missing ${type}: \"${char}\" - use \"\\\\\\\\${char}\" to match literal characters`;\n};\n\n/**\n * Parse the given input string.\n * @param {String} input\n * @param {Object} options\n * @return {Object}\n */\n\nconst parse = (input, options) => {\n if (typeof input !== 'string') {\n throw new TypeError('Expected a string');\n }\n\n input = REPLACEMENTS[input] || input;\n\n const opts = { ...options };\n const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n\n let len = input.length;\n if (len > max) {\n throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n }\n\n const bos = { type: 'bos', value: '', output: opts.prepend || '' };\n const tokens = [bos];\n\n const capture = opts.capture ? '' : '?:';\n const win32 = utils.isWindows(options);\n\n // create constants based on platform, for windows or posix\n const PLATFORM_CHARS = constants.globChars(win32);\n const EXTGLOB_CHARS = constants.extglobChars(PLATFORM_CHARS);\n\n const {\n DOT_LITERAL,\n PLUS_LITERAL,\n SLASH_LITERAL,\n ONE_CHAR,\n DOTS_SLASH,\n NO_DOT,\n NO_DOT_SLASH,\n NO_DOTS_SLASH,\n QMARK,\n QMARK_NO_DOT,\n STAR,\n START_ANCHOR\n } = PLATFORM_CHARS;\n\n const globstar = opts => {\n return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n };\n\n const nodot = opts.dot ? '' : NO_DOT;\n const qmarkNoDot = opts.dot ? QMARK : QMARK_NO_DOT;\n let star = opts.bash === true ? globstar(opts) : STAR;\n\n if (opts.capture) {\n star = `(${star})`;\n }\n\n // minimatch options support\n if (typeof opts.noext === 'boolean') {\n opts.noextglob = opts.noext;\n }\n\n const state = {\n input,\n index: -1,\n start: 0,\n dot: opts.dot === true,\n consumed: '',\n output: '',\n prefix: '',\n backtrack: false,\n negated: false,\n brackets: 0,\n braces: 0,\n parens: 0,\n quotes: 0,\n globstar: false,\n tokens\n };\n\n input = utils.removePrefix(input, state);\n len = input.length;\n\n const extglobs = [];\n const braces = [];\n const stack = [];\n let prev = bos;\n let value;\n\n /**\n * Tokenizing helpers\n */\n\n const eos = () => state.index === len - 1;\n const peek = state.peek = (n = 1) => input[state.index + n];\n const advance = state.advance = () => input[++state.index] || '';\n const remaining = () => input.slice(state.index + 1);\n const consume = (value = '', num = 0) => {\n state.consumed += value;\n state.index += num;\n };\n\n const append = token => {\n state.output += token.output != null ? token.output : token.value;\n consume(token.value);\n };\n\n const negate = () => {\n let count = 1;\n\n while (peek() === '!' && (peek(2) !== '(' || peek(3) === '?')) {\n advance();\n state.start++;\n count++;\n }\n\n if (count % 2 === 0) {\n return false;\n }\n\n state.negated = true;\n state.start++;\n return true;\n };\n\n const increment = type => {\n state[type]++;\n stack.push(type);\n };\n\n const decrement = type => {\n state[type]--;\n stack.pop();\n };\n\n /**\n * Push tokens onto the tokens array. This helper speeds up\n * tokenizing by 1) helping us avoid backtracking as much as possible,\n * and 2) helping us avoid creating extra tokens when consecutive\n * characters are plain text. This improves performance and simplifies\n * lookbehinds.\n */\n\n const push = tok => {\n if (prev.type === 'globstar') {\n const isBrace = state.braces > 0 && (tok.type === 'comma' || tok.type === 'brace');\n const isExtglob = tok.extglob === true || (extglobs.length && (tok.type === 'pipe' || tok.type === 'paren'));\n\n if (tok.type !== 'slash' && tok.type !== 'paren' && !isBrace && !isExtglob) {\n state.output = state.output.slice(0, -prev.output.length);\n prev.type = 'star';\n prev.value = '*';\n prev.output = star;\n state.output += prev.output;\n }\n }\n\n if (extglobs.length && tok.type !== 'paren') {\n extglobs[extglobs.length - 1].inner += tok.value;\n }\n\n if (tok.value || tok.output) append(tok);\n if (prev && prev.type === 'text' && tok.type === 'text') {\n prev.value += tok.value;\n prev.output = (prev.output || '') + tok.value;\n return;\n }\n\n tok.prev = prev;\n tokens.push(tok);\n prev = tok;\n };\n\n const extglobOpen = (type, value) => {\n const token = { ...EXTGLOB_CHARS[value], conditions: 1, inner: '' };\n\n token.prev = prev;\n token.parens = state.parens;\n token.output = state.output;\n const output = (opts.capture ? '(' : '') + token.open;\n\n increment('parens');\n push({ type, value, output: state.output ? '' : ONE_CHAR });\n push({ type: 'paren', extglob: true, value: advance(), output });\n extglobs.push(token);\n };\n\n const extglobClose = token => {\n let output = token.close + (opts.capture ? ')' : '');\n let rest;\n\n if (token.type === 'negate') {\n let extglobStar = star;\n\n if (token.inner && token.inner.length > 1 && token.inner.includes('/')) {\n extglobStar = globstar(opts);\n }\n\n if (extglobStar !== star || eos() || /^\\)+$/.test(remaining())) {\n output = token.close = `)$))${extglobStar}`;\n }\n\n if (token.inner.includes('*') && (rest = remaining()) && /^\\.[^\\\\/.]+$/.test(rest)) {\n // Any non-magical string (`.ts`) or even nested expression (`.{ts,tsx}`) can follow after the closing parenthesis.\n // In this case, we need to parse the string and use it in the output of the original pattern.\n // Suitable patterns: `/!(*.d).ts`, `/!(*.d).{ts,tsx}`, `**/!(*-dbg).@(js)`.\n //\n // Disabling the `fastpaths` option due to a problem with parsing strings as `.ts` in the pattern like `**/!(*.d).ts`.\n const expression = parse(rest, { ...options, fastpaths: false }).output;\n\n output = token.close = `)${expression})${extglobStar})`;\n }\n\n if (token.prev.type === 'bos') {\n state.negatedExtglob = true;\n }\n }\n\n push({ type: 'paren', extglob: true, value, output });\n decrement('parens');\n };\n\n /**\n * Fast paths\n */\n\n if (opts.fastpaths !== false && !/(^[*!]|[/()[\\]{}\"])/.test(input)) {\n let backslashes = false;\n\n let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => {\n if (first === '\\\\') {\n backslashes = true;\n return m;\n }\n\n if (first === '?') {\n if (esc) {\n return esc + first + (rest ? QMARK.repeat(rest.length) : '');\n }\n if (index === 0) {\n return qmarkNoDot + (rest ? QMARK.repeat(rest.length) : '');\n }\n return QMARK.repeat(chars.length);\n }\n\n if (first === '.') {\n return DOT_LITERAL.repeat(chars.length);\n }\n\n if (first === '*') {\n if (esc) {\n return esc + first + (rest ? star : '');\n }\n return star;\n }\n return esc ? m : `\\\\${m}`;\n });\n\n if (backslashes === true) {\n if (opts.unescape === true) {\n output = output.replace(/\\\\/g, '');\n } else {\n output = output.replace(/\\\\+/g, m => {\n return m.length % 2 === 0 ? '\\\\\\\\' : (m ? '\\\\' : '');\n });\n }\n }\n\n if (output === input && opts.contains === true) {\n state.output = input;\n return state;\n }\n\n state.output = utils.wrapOutput(output, state, options);\n return state;\n }\n\n /**\n * Tokenize input until we reach end-of-string\n */\n\n while (!eos()) {\n value = advance();\n\n if (value === '\\u0000') {\n continue;\n }\n\n /**\n * Escaped characters\n */\n\n if (value === '\\\\') {\n const next = peek();\n\n if (next === '/' && opts.bash !== true) {\n continue;\n }\n\n if (next === '.' || next === ';') {\n continue;\n }\n\n if (!next) {\n value += '\\\\';\n push({ type: 'text', value });\n continue;\n }\n\n // collapse slashes to reduce potential for exploits\n const match = /^\\\\+/.exec(remaining());\n let slashes = 0;\n\n if (match && match[0].length > 2) {\n slashes = match[0].length;\n state.index += slashes;\n if (slashes % 2 !== 0) {\n value += '\\\\';\n }\n }\n\n if (opts.unescape === true) {\n value = advance();\n } else {\n value += advance();\n }\n\n if (state.brackets === 0) {\n push({ type: 'text', value });\n continue;\n }\n }\n\n /**\n * If we're inside a regex character class, continue\n * until we reach the closing bracket.\n */\n\n if (state.brackets > 0 && (value !== ']' || prev.value === '[' || prev.value === '[^')) {\n if (opts.posix !== false && value === ':') {\n const inner = prev.value.slice(1);\n if (inner.includes('[')) {\n prev.posix = true;\n\n if (inner.includes(':')) {\n const idx = prev.value.lastIndexOf('[');\n const pre = prev.value.slice(0, idx);\n const rest = prev.value.slice(idx + 2);\n const posix = POSIX_REGEX_SOURCE[rest];\n if (posix) {\n prev.value = pre + posix;\n state.backtrack = true;\n advance();\n\n if (!bos.output && tokens.indexOf(prev) === 1) {\n bos.output = ONE_CHAR;\n }\n continue;\n }\n }\n }\n }\n\n if ((value === '[' && peek() !== ':') || (value === '-' && peek() === ']')) {\n value = `\\\\${value}`;\n }\n\n if (value === ']' && (prev.value === '[' || prev.value === '[^')) {\n value = `\\\\${value}`;\n }\n\n if (opts.posix === true && value === '!' && prev.value === '[') {\n value = '^';\n }\n\n prev.value += value;\n append({ value });\n continue;\n }\n\n /**\n * If we're inside a quoted string, continue\n * until we reach the closing double quote.\n */\n\n if (state.quotes === 1 && value !== '\"') {\n value = utils.escapeRegex(value);\n prev.value += value;\n append({ value });\n continue;\n }\n\n /**\n * Double quotes\n */\n\n if (value === '\"') {\n state.quotes = state.quotes === 1 ? 0 : 1;\n if (opts.keepQuotes === true) {\n push({ type: 'text', value });\n }\n continue;\n }\n\n /**\n * Parentheses\n */\n\n if (value === '(') {\n increment('parens');\n push({ type: 'paren', value });\n continue;\n }\n\n if (value === ')') {\n if (state.parens === 0 && opts.strictBrackets === true) {\n throw new SyntaxError(syntaxError('opening', '('));\n }\n\n const extglob = extglobs[extglobs.length - 1];\n if (extglob && state.parens === extglob.parens + 1) {\n extglobClose(extglobs.pop());\n continue;\n }\n\n push({ type: 'paren', value, output: state.parens ? ')' : '\\\\)' });\n decrement('parens');\n continue;\n }\n\n /**\n * Square brackets\n */\n\n if (value === '[') {\n if (opts.nobracket === true || !remaining().includes(']')) {\n if (opts.nobracket !== true && opts.strictBrackets === true) {\n throw new SyntaxError(syntaxError('closing', ']'));\n }\n\n value = `\\\\${value}`;\n } else {\n increment('brackets');\n }\n\n push({ type: 'bracket', value });\n continue;\n }\n\n if (value === ']') {\n if (opts.nobracket === true || (prev && prev.type === 'bracket' && prev.value.length === 1)) {\n push({ type: 'text', value, output: `\\\\${value}` });\n continue;\n }\n\n if (state.brackets === 0) {\n if (opts.strictBrackets === true) {\n throw new SyntaxError(syntaxError('opening', '['));\n }\n\n push({ type: 'text', value, output: `\\\\${value}` });\n continue;\n }\n\n decrement('brackets');\n\n const prevValue = prev.value.slice(1);\n if (prev.posix !== true && prevValue[0] === '^' && !prevValue.includes('/')) {\n value = `/${value}`;\n }\n\n prev.value += value;\n append({ value });\n\n // when literal brackets are explicitly disabled\n // assume we should match with a regex character class\n if (opts.literalBrackets === false || utils.hasRegexChars(prevValue)) {\n continue;\n }\n\n const escaped = utils.escapeRegex(prev.value);\n state.output = state.output.slice(0, -prev.value.length);\n\n // when literal brackets are explicitly enabled\n // assume we should escape the brackets to match literal characters\n if (opts.literalBrackets === true) {\n state.output += escaped;\n prev.value = escaped;\n continue;\n }\n\n // when the user specifies nothing, try to match both\n prev.value = `(${capture}${escaped}|${prev.value})`;\n state.output += prev.value;\n continue;\n }\n\n /**\n * Braces\n */\n\n if (value === '{' && opts.nobrace !== true) {\n increment('braces');\n\n const open = {\n type: 'brace',\n value,\n output: '(',\n outputIndex: state.output.length,\n tokensIndex: state.tokens.length\n };\n\n braces.push(open);\n push(open);\n continue;\n }\n\n if (value === '}') {\n const brace = braces[braces.length - 1];\n\n if (opts.nobrace === true || !brace) {\n push({ type: 'text', value, output: value });\n continue;\n }\n\n let output = ')';\n\n if (brace.dots === true) {\n const arr = tokens.slice();\n const range = [];\n\n for (let i = arr.length - 1; i >= 0; i--) {\n tokens.pop();\n if (arr[i].type === 'brace') {\n break;\n }\n if (arr[i].type !== 'dots') {\n range.unshift(arr[i].value);\n }\n }\n\n output = expandRange(range, opts);\n state.backtrack = true;\n }\n\n if (brace.comma !== true && brace.dots !== true) {\n const out = state.output.slice(0, brace.outputIndex);\n const toks = state.tokens.slice(brace.tokensIndex);\n brace.value = brace.output = '\\\\{';\n value = output = '\\\\}';\n state.output = out;\n for (const t of toks) {\n state.output += (t.output || t.value);\n }\n }\n\n push({ type: 'brace', value, output });\n decrement('braces');\n braces.pop();\n continue;\n }\n\n /**\n * Pipes\n */\n\n if (value === '|') {\n if (extglobs.length > 0) {\n extglobs[extglobs.length - 1].conditions++;\n }\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Commas\n */\n\n if (value === ',') {\n let output = value;\n\n const brace = braces[braces.length - 1];\n if (brace && stack[stack.length - 1] === 'braces') {\n brace.comma = true;\n output = '|';\n }\n\n push({ type: 'comma', value, output });\n continue;\n }\n\n /**\n * Slashes\n */\n\n if (value === '/') {\n // if the beginning of the glob is \"./\", advance the start\n // to the current index, and don't add the \"./\" characters\n // to the state. This greatly simplifies lookbehinds when\n // checking for BOS characters like \"!\" and \".\" (not \"./\")\n if (prev.type === 'dot' && state.index === state.start + 1) {\n state.start = state.index + 1;\n state.consumed = '';\n state.output = '';\n tokens.pop();\n prev = bos; // reset \"prev\" to the first token\n continue;\n }\n\n push({ type: 'slash', value, output: SLASH_LITERAL });\n continue;\n }\n\n /**\n * Dots\n */\n\n if (value === '.') {\n if (state.braces > 0 && prev.type === 'dot') {\n if (prev.value === '.') prev.output = DOT_LITERAL;\n const brace = braces[braces.length - 1];\n prev.type = 'dots';\n prev.output += value;\n prev.value += value;\n brace.dots = true;\n continue;\n }\n\n if ((state.braces + state.parens) === 0 && prev.type !== 'bos' && prev.type !== 'slash') {\n push({ type: 'text', value, output: DOT_LITERAL });\n continue;\n }\n\n push({ type: 'dot', value, output: DOT_LITERAL });\n continue;\n }\n\n /**\n * Question marks\n */\n\n if (value === '?') {\n const isGroup = prev && prev.value === '(';\n if (!isGroup && opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n extglobOpen('qmark', value);\n continue;\n }\n\n if (prev && prev.type === 'paren') {\n const next = peek();\n let output = value;\n\n if (next === '<' && !utils.supportsLookbehinds()) {\n throw new Error('Node.js v10 or higher is required for regex lookbehinds');\n }\n\n if ((prev.value === '(' && !/[!=<:]/.test(next)) || (next === '<' && !/<([!=]|\\w+>)/.test(remaining()))) {\n output = `\\\\${value}`;\n }\n\n push({ type: 'text', value, output });\n continue;\n }\n\n if (opts.dot !== true && (prev.type === 'slash' || prev.type === 'bos')) {\n push({ type: 'qmark', value, output: QMARK_NO_DOT });\n continue;\n }\n\n push({ type: 'qmark', value, output: QMARK });\n continue;\n }\n\n /**\n * Exclamation\n */\n\n if (value === '!') {\n if (opts.noextglob !== true && peek() === '(') {\n if (peek(2) !== '?' || !/[!=<:]/.test(peek(3))) {\n extglobOpen('negate', value);\n continue;\n }\n }\n\n if (opts.nonegate !== true && state.index === 0) {\n negate();\n continue;\n }\n }\n\n /**\n * Plus\n */\n\n if (value === '+') {\n if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n extglobOpen('plus', value);\n continue;\n }\n\n if ((prev && prev.value === '(') || opts.regex === false) {\n push({ type: 'plus', value, output: PLUS_LITERAL });\n continue;\n }\n\n if ((prev && (prev.type === 'bracket' || prev.type === 'paren' || prev.type === 'brace')) || state.parens > 0) {\n push({ type: 'plus', value });\n continue;\n }\n\n push({ type: 'plus', value: PLUS_LITERAL });\n continue;\n }\n\n /**\n * Plain text\n */\n\n if (value === '@') {\n if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n push({ type: 'at', extglob: true, value, output: '' });\n continue;\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Plain text\n */\n\n if (value !== '*') {\n if (value === '$' || value === '^') {\n value = `\\\\${value}`;\n }\n\n const match = REGEX_NON_SPECIAL_CHARS.exec(remaining());\n if (match) {\n value += match[0];\n state.index += match[0].length;\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Stars\n */\n\n if (prev && (prev.type === 'globstar' || prev.star === true)) {\n prev.type = 'star';\n prev.star = true;\n prev.value += value;\n prev.output = star;\n state.backtrack = true;\n state.globstar = true;\n consume(value);\n continue;\n }\n\n let rest = remaining();\n if (opts.noextglob !== true && /^\\([^?]/.test(rest)) {\n extglobOpen('star', value);\n continue;\n }\n\n if (prev.type === 'star') {\n if (opts.noglobstar === true) {\n consume(value);\n continue;\n }\n\n const prior = prev.prev;\n const before = prior.prev;\n const isStart = prior.type === 'slash' || prior.type === 'bos';\n const afterStar = before && (before.type === 'star' || before.type === 'globstar');\n\n if (opts.bash === true && (!isStart || (rest[0] && rest[0] !== '/'))) {\n push({ type: 'star', value, output: '' });\n continue;\n }\n\n const isBrace = state.braces > 0 && (prior.type === 'comma' || prior.type === 'brace');\n const isExtglob = extglobs.length && (prior.type === 'pipe' || prior.type === 'paren');\n if (!isStart && prior.type !== 'paren' && !isBrace && !isExtglob) {\n push({ type: 'star', value, output: '' });\n continue;\n }\n\n // strip consecutive `/**/`\n while (rest.slice(0, 3) === '/**') {\n const after = input[state.index + 4];\n if (after && after !== '/') {\n break;\n }\n rest = rest.slice(3);\n consume('/**', 3);\n }\n\n if (prior.type === 'bos' && eos()) {\n prev.type = 'globstar';\n prev.value += value;\n prev.output = globstar(opts);\n state.output = prev.output;\n state.globstar = true;\n consume(value);\n continue;\n }\n\n if (prior.type === 'slash' && prior.prev.type !== 'bos' && !afterStar && eos()) {\n state.output = state.output.slice(0, -(prior.output + prev.output).length);\n prior.output = `(?:${prior.output}`;\n\n prev.type = 'globstar';\n prev.output = globstar(opts) + (opts.strictSlashes ? ')' : '|$)');\n prev.value += value;\n state.globstar = true;\n state.output += prior.output + prev.output;\n consume(value);\n continue;\n }\n\n if (prior.type === 'slash' && prior.prev.type !== 'bos' && rest[0] === '/') {\n const end = rest[1] !== void 0 ? '|$' : '';\n\n state.output = state.output.slice(0, -(prior.output + prev.output).length);\n prior.output = `(?:${prior.output}`;\n\n prev.type = 'globstar';\n prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`;\n prev.value += value;\n\n state.output += prior.output + prev.output;\n state.globstar = true;\n\n consume(value + advance());\n\n push({ type: 'slash', value: '/', output: '' });\n continue;\n }\n\n if (prior.type === 'bos' && rest[0] === '/') {\n prev.type = 'globstar';\n prev.value += value;\n prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`;\n state.output = prev.output;\n state.globstar = true;\n consume(value + advance());\n push({ type: 'slash', value: '/', output: '' });\n continue;\n }\n\n // remove single star from output\n state.output = state.output.slice(0, -prev.output.length);\n\n // reset previous token to globstar\n prev.type = 'globstar';\n prev.output = globstar(opts);\n prev.value += value;\n\n // reset output with globstar\n state.output += prev.output;\n state.globstar = true;\n consume(value);\n continue;\n }\n\n const token = { type: 'star', value, output: star };\n\n if (opts.bash === true) {\n token.output = '.*?';\n if (prev.type === 'bos' || prev.type === 'slash') {\n token.output = nodot + token.output;\n }\n push(token);\n continue;\n }\n\n if (prev && (prev.type === 'bracket' || prev.type === 'paren') && opts.regex === true) {\n token.output = value;\n push(token);\n continue;\n }\n\n if (state.index === state.start || prev.type === 'slash' || prev.type === 'dot') {\n if (prev.type === 'dot') {\n state.output += NO_DOT_SLASH;\n prev.output += NO_DOT_SLASH;\n\n } else if (opts.dot === true) {\n state.output += NO_DOTS_SLASH;\n prev.output += NO_DOTS_SLASH;\n\n } else {\n state.output += nodot;\n prev.output += nodot;\n }\n\n if (peek() !== '*') {\n state.output += ONE_CHAR;\n prev.output += ONE_CHAR;\n }\n }\n\n push(token);\n }\n\n while (state.brackets > 0) {\n if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ']'));\n state.output = utils.escapeLast(state.output, '[');\n decrement('brackets');\n }\n\n while (state.parens > 0) {\n if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ')'));\n state.output = utils.escapeLast(state.output, '(');\n decrement('parens');\n }\n\n while (state.braces > 0) {\n if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', '}'));\n state.output = utils.escapeLast(state.output, '{');\n decrement('braces');\n }\n\n if (opts.strictSlashes !== true && (prev.type === 'star' || prev.type === 'bracket')) {\n push({ type: 'maybe_slash', value: '', output: `${SLASH_LITERAL}?` });\n }\n\n // rebuild the output if we had to backtrack at any point\n if (state.backtrack === true) {\n state.output = '';\n\n for (const token of state.tokens) {\n state.output += token.output != null ? token.output : token.value;\n\n if (token.suffix) {\n state.output += token.suffix;\n }\n }\n }\n\n return state;\n};\n\n/**\n * Fast paths for creating regular expressions for common glob patterns.\n * This can significantly speed up processing and has very little downside\n * impact when none of the fast paths match.\n */\n\nparse.fastpaths = (input, options) => {\n const opts = { ...options };\n const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n const len = input.length;\n if (len > max) {\n throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n }\n\n input = REPLACEMENTS[input] || input;\n const win32 = utils.isWindows(options);\n\n // create constants based on platform, for windows or posix\n const {\n DOT_LITERAL,\n SLASH_LITERAL,\n ONE_CHAR,\n DOTS_SLASH,\n NO_DOT,\n NO_DOTS,\n NO_DOTS_SLASH,\n STAR,\n START_ANCHOR\n } = constants.globChars(win32);\n\n const nodot = opts.dot ? NO_DOTS : NO_DOT;\n const slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT;\n const capture = opts.capture ? '' : '?:';\n const state = { negated: false, prefix: '' };\n let star = opts.bash === true ? '.*?' : STAR;\n\n if (opts.capture) {\n star = `(${star})`;\n }\n\n const globstar = opts => {\n if (opts.noglobstar === true) return star;\n return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n };\n\n const create = str => {\n switch (str) {\n case '*':\n return `${nodot}${ONE_CHAR}${star}`;\n\n case '.*':\n return `${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n case '*.*':\n return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n case '*/*':\n return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`;\n\n case '**':\n return nodot + globstar(opts);\n\n case '**/*':\n return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`;\n\n case '**/*.*':\n return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n case '**/.*':\n return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n default: {\n const match = /^(.*?)\\.(\\w+)$/.exec(str);\n if (!match) return;\n\n const source = create(match[1]);\n if (!source) return;\n\n return source + DOT_LITERAL + match[2];\n }\n }\n };\n\n const output = utils.removePrefix(input, state);\n let source = create(output);\n\n if (source && opts.strictSlashes !== true) {\n source += `${SLASH_LITERAL}?`;\n }\n\n return source;\n};\n\nmodule.exports = parse;\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./public\"), exports);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fixRequestBody = exports.responseInterceptor = void 0;\nvar response_interceptor_1 = require(\"./response-interceptor\");\nObject.defineProperty(exports, \"responseInterceptor\", { enumerable: true, get: function () { return response_interceptor_1.responseInterceptor; } });\nvar fix_request_body_1 = require(\"./fix-request-body\");\nObject.defineProperty(exports, \"fixRequestBody\", { enumerable: true, get: function () { return fix_request_body_1.fixRequestBody; } });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.responseInterceptor = void 0;\nconst zlib = require(\"zlib\");\n/**\n * Intercept responses from upstream.\n * Automatically decompress (deflate, gzip, brotli).\n * Give developer the opportunity to modify intercepted Buffer and http.ServerResponse\n *\n * NOTE: must set options.selfHandleResponse=true (prevent automatic call of res.end())\n */\nfunction responseInterceptor(interceptor) {\n return async function proxyRes(proxyRes, req, res) {\n const originalProxyRes = proxyRes;\n let buffer = Buffer.from('', 'utf8');\n // decompress proxy response\n const _proxyRes = decompress(proxyRes, proxyRes.headers['content-encoding']);\n // concat data stream\n _proxyRes.on('data', (chunk) => (buffer = Buffer.concat([buffer, chunk])));\n _proxyRes.on('end', async () => {\n // copy original headers\n copyHeaders(proxyRes, res);\n // call interceptor with intercepted response (buffer)\n const interceptedBuffer = Buffer.from(await interceptor(buffer, originalProxyRes, req, res));\n // set correct content-length (with double byte character support)\n res.setHeader('content-length', Buffer.byteLength(interceptedBuffer, 'utf8'));\n res.write(interceptedBuffer);\n res.end();\n });\n _proxyRes.on('error', (error) => {\n res.end(`Error fetching proxied request: ${error.message}`);\n });\n };\n}\nexports.responseInterceptor = responseInterceptor;\n/**\n * Streaming decompression of proxy response\n * source: https://github.com/apache/superset/blob/9773aba522e957ed9423045ca153219638a85d2f/superset-frontend/webpack.proxy-config.js#L116\n */\nfunction decompress(proxyRes, contentEncoding) {\n let _proxyRes = proxyRes;\n let decompress;\n switch (contentEncoding) {\n case 'gzip':\n decompress = zlib.createGunzip();\n break;\n case 'br':\n decompress = zlib.createBrotliDecompress();\n break;\n case 'deflate':\n decompress = zlib.createInflate();\n break;\n default:\n break;\n }\n if (decompress) {\n _proxyRes.pipe(decompress);\n _proxyRes = decompress;\n }\n return _proxyRes;\n}\n/**\n * Copy original headers\n * https://github.com/apache/superset/blob/9773aba522e957ed9423045ca153219638a85d2f/superset-frontend/webpack.proxy-config.js#L78\n */\nfunction copyHeaders(originalResponse, response) {\n response.statusCode = originalResponse.statusCode;\n response.statusMessage = originalResponse.statusMessage;\n if (response.setHeader) {\n let keys = Object.keys(originalResponse.headers);\n // ignore chunked, brotli, gzip, deflate headers\n keys = keys.filter((key) => !['content-encoding', 'transfer-encoding'].includes(key));\n keys.forEach((key) => {\n let value = originalResponse.headers[key];\n if (key === 'set-cookie') {\n // remove cookie domain\n value = Array.isArray(value) ? value : [value];\n value = value.map((x) => x.replace(/Domain=[^;]+?/i, ''));\n }\n response.setHeader(key, value);\n });\n }\n else {\n response.headers = originalResponse.headers;\n }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fixRequestBody = void 0;\nconst querystring = require(\"querystring\");\n/**\n * Fix proxied body if bodyParser is involved.\n */\nfunction fixRequestBody(proxyReq, req) {\n const requestBody = req.body;\n if (!requestBody) {\n return;\n }\n const contentType = proxyReq.getHeader('Content-Type');\n const writeBody = (bodyData) => {\n // deepcode ignore ContentLengthInCode: bodyParser fix\n proxyReq.setHeader('Content-Length', Buffer.byteLength(bodyData));\n proxyReq.write(bodyData);\n };\n if (contentType && contentType.includes('application/json')) {\n writeBody(JSON.stringify(requestBody));\n }\n if (contentType && contentType.includes('application/x-www-form-urlencoded')) {\n writeBody(querystring.stringify(requestBody));\n }\n}\nexports.fixRequestBody = fixRequestBody;\n","'use strict';\n\nmodule.exports = function quote(xs) {\n\treturn xs.map(function (s) {\n\t\tif (s && typeof s === 'object') {\n\t\t\treturn s.op.replace(/(.)/g, '\\\\$1');\n\t\t}\n\t\tif ((/[\"\\s]/).test(s) && !(/'/).test(s)) {\n\t\t\treturn \"'\" + s.replace(/(['\\\\])/g, '\\\\$1') + \"'\";\n\t\t}\n\t\tif ((/[\"'\\s]/).test(s)) {\n\t\t\treturn '\"' + s.replace(/([\"\\\\$`!])/g, '\\\\$1') + '\"';\n\t\t}\n\t\treturn String(s).replace(/([A-Za-z]:)?([#!\"$&'()*,:;<=>?@[\\\\\\]^`{|}])/g, '$1\\\\$2');\n\t}).join(' ');\n};\n","'use strict';\n\n// '<(' is process substitution operator and\n// can be parsed the same as control operator\nvar CONTROL = '(?:' + [\n\t'\\\\|\\\\|',\n\t'\\\\&\\\\&',\n\t';;',\n\t'\\\\|\\\\&',\n\t'\\\\<\\\\(',\n\t'\\\\<\\\\<\\\\<',\n\t'>>',\n\t'>\\\\&',\n\t'<\\\\&',\n\t'[&;()|<>]'\n].join('|') + ')';\nvar controlRE = new RegExp('^' + CONTROL + '$');\nvar META = '|&;()<> \\\\t';\nvar SINGLE_QUOTE = '\"((\\\\\\\\\"|[^\"])*?)\"';\nvar DOUBLE_QUOTE = '\\'((\\\\\\\\\\'|[^\\'])*?)\\'';\nvar hash = /^#$/;\n\nvar SQ = \"'\";\nvar DQ = '\"';\nvar DS = '$';\n\nvar TOKEN = '';\nvar mult = 0x100000000; // Math.pow(16, 8);\nfor (var i = 0; i < 4; i++) {\n\tTOKEN += (mult * Math.random()).toString(16);\n}\nvar startsWithToken = new RegExp('^' + TOKEN);\n\nfunction matchAll(s, r) {\n\tvar origIndex = r.lastIndex;\n\n\tvar matches = [];\n\tvar matchObj;\n\n\twhile ((matchObj = r.exec(s))) {\n\t\tmatches.push(matchObj);\n\t\tif (r.lastIndex === matchObj.index) {\n\t\t\tr.lastIndex += 1;\n\t\t}\n\t}\n\n\tr.lastIndex = origIndex;\n\n\treturn matches;\n}\n\nfunction getVar(env, pre, key) {\n\tvar r = typeof env === 'function' ? env(key) : env[key];\n\tif (typeof r === 'undefined' && key != '') {\n\t\tr = '';\n\t} else if (typeof r === 'undefined') {\n\t\tr = '$';\n\t}\n\n\tif (typeof r === 'object') {\n\t\treturn pre + TOKEN + JSON.stringify(r) + TOKEN;\n\t}\n\treturn pre + r;\n}\n\nfunction parseInternal(string, env, opts) {\n\tif (!opts) {\n\t\topts = {};\n\t}\n\tvar BS = opts.escape || '\\\\';\n\tvar BAREWORD = '(\\\\' + BS + '[\\'\"' + META + ']|[^\\\\s\\'\"' + META + '])+';\n\n\tvar chunker = new RegExp([\n\t\t'(' + CONTROL + ')', // control chars\n\t\t'(' + BAREWORD + '|' + SINGLE_QUOTE + '|' + DOUBLE_QUOTE + ')+'\n\t].join('|'), 'g');\n\n\tvar matches = matchAll(string, chunker);\n\n\tif (matches.length === 0) {\n\t\treturn [];\n\t}\n\tif (!env) {\n\t\tenv = {};\n\t}\n\n\tvar commented = false;\n\n\treturn matches.map(function (match) {\n\t\tvar s = match[0];\n\t\tif (!s || commented) {\n\t\t\treturn void undefined;\n\t\t}\n\t\tif (controlRE.test(s)) {\n\t\t\treturn { op: s };\n\t\t}\n\n\t\t// Hand-written scanner/parser for Bash quoting rules:\n\t\t//\n\t\t// 1. inside single quotes, all characters are printed literally.\n\t\t// 2. inside double quotes, all characters are printed literally\n\t\t// except variables prefixed by '$' and backslashes followed by\n\t\t// either a double quote or another backslash.\n\t\t// 3. outside of any quotes, backslashes are treated as escape\n\t\t// characters and not printed (unless they are themselves escaped)\n\t\t// 4. quote context can switch mid-token if there is no whitespace\n\t\t// between the two quote contexts (e.g. all'one'\"token\" parses as\n\t\t// \"allonetoken\")\n\t\tvar quote = false;\n\t\tvar esc = false;\n\t\tvar out = '';\n\t\tvar isGlob = false;\n\t\tvar i;\n\n\t\tfunction parseEnvVar() {\n\t\t\ti += 1;\n\t\t\tvar varend;\n\t\t\tvar varname;\n\t\t\tvar char = s.charAt(i);\n\n\t\t\tif (char === '{') {\n\t\t\t\ti += 1;\n\t\t\t\tif (s.charAt(i) === '}') {\n\t\t\t\t\tthrow new Error('Bad substitution: ' + s.slice(i - 2, i + 1));\n\t\t\t\t}\n\t\t\t\tvarend = s.indexOf('}', i);\n\t\t\t\tif (varend < 0) {\n\t\t\t\t\tthrow new Error('Bad substitution: ' + s.slice(i));\n\t\t\t\t}\n\t\t\t\tvarname = s.slice(i, varend);\n\t\t\t\ti = varend;\n\t\t\t} else if ((/[*@#?$!_-]/).test(char)) {\n\t\t\t\tvarname = char;\n\t\t\t\ti += 1;\n\t\t\t} else {\n\t\t\t\tvar slicedFromI = s.slice(i);\n\t\t\t\tvarend = slicedFromI.match(/[^\\w\\d_]/);\n\t\t\t\tif (!varend) {\n\t\t\t\t\tvarname = slicedFromI;\n\t\t\t\t\ti = s.length;\n\t\t\t\t} else {\n\t\t\t\t\tvarname = slicedFromI.slice(0, varend.index);\n\t\t\t\t\ti += varend.index - 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn getVar(env, '', varname);\n\t\t}\n\n\t\tfor (i = 0; i < s.length; i++) {\n\t\t\tvar c = s.charAt(i);\n\t\t\tisGlob = isGlob || (!quote && (c === '*' || c === '?'));\n\t\t\tif (esc) {\n\t\t\t\tout += c;\n\t\t\t\tesc = false;\n\t\t\t} else if (quote) {\n\t\t\t\tif (c === quote) {\n\t\t\t\t\tquote = false;\n\t\t\t\t} else if (quote == SQ) {\n\t\t\t\t\tout += c;\n\t\t\t\t} else { // Double quote\n\t\t\t\t\tif (c === BS) {\n\t\t\t\t\t\ti += 1;\n\t\t\t\t\t\tc = s.charAt(i);\n\t\t\t\t\t\tif (c === DQ || c === BS || c === DS) {\n\t\t\t\t\t\t\tout += c;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tout += BS + c;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (c === DS) {\n\t\t\t\t\t\tout += parseEnvVar();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tout += c;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (c === DQ || c === SQ) {\n\t\t\t\tquote = c;\n\t\t\t} else if (controlRE.test(c)) {\n\t\t\t\treturn { op: s };\n\t\t\t} else if (hash.test(c)) {\n\t\t\t\tcommented = true;\n\t\t\t\tvar commentObj = { comment: string.slice(match.index + i + 1) };\n\t\t\t\tif (out.length) {\n\t\t\t\t\treturn [out, commentObj];\n\t\t\t\t}\n\t\t\t\treturn [commentObj];\n\t\t\t} else if (c === BS) {\n\t\t\t\tesc = true;\n\t\t\t} else if (c === DS) {\n\t\t\t\tout += parseEnvVar();\n\t\t\t} else {\n\t\t\t\tout += c;\n\t\t\t}\n\t\t}\n\n\t\tif (isGlob) {\n\t\t\treturn { op: 'glob', pattern: out };\n\t\t}\n\n\t\treturn out;\n\t}).reduce(function (prev, arg) { // finalize parsed arguments\n\t\t// TODO: replace this whole reduce with a concat\n\t\treturn typeof arg === 'undefined' ? prev : prev.concat(arg);\n\t}, []);\n}\n\nmodule.exports = function parse(s, env, opts) {\n\tvar mapped = parseInternal(s, env, opts);\n\tif (typeof env !== 'function') {\n\t\treturn mapped;\n\t}\n\treturn mapped.reduce(function (acc, s) {\n\t\tif (typeof s === 'object') {\n\t\t\treturn acc.concat(s);\n\t\t}\n\t\tvar xs = s.split(RegExp('(' + TOKEN + '.*?' + TOKEN + ')', 'g'));\n\t\tif (xs.length === 1) {\n\t\t\treturn acc.concat(xs[0]);\n\t\t}\n\t\treturn acc.concat(xs.filter(Boolean).map(function (x) {\n\t\t\tif (startsWithToken.test(x)) {\n\t\t\t\treturn JSON.parse(x.split(TOKEN)[1]);\n\t\t\t}\n\t\t\treturn x;\n\t\t}));\n\t}, []);\n};\n","'use strict';\n\nconst { Writable } = require('stream');\n\nconst PerMessageDeflate = require('./permessage-deflate');\nconst {\n BINARY_TYPES,\n EMPTY_BUFFER,\n kStatusCode,\n kWebSocket\n} = require('./constants');\nconst { concat, toArrayBuffer, unmask } = require('./buffer-util');\nconst { isValidStatusCode, isValidUTF8 } = require('./validation');\n\nconst FastBuffer = Buffer[Symbol.species];\n\nconst GET_INFO = 0;\nconst GET_PAYLOAD_LENGTH_16 = 1;\nconst GET_PAYLOAD_LENGTH_64 = 2;\nconst GET_MASK = 3;\nconst GET_DATA = 4;\nconst INFLATING = 5;\nconst DEFER_EVENT = 6;\n\n/**\n * HyBi Receiver implementation.\n *\n * @extends Writable\n */\nclass Receiver extends Writable {\n /**\n * Creates a Receiver instance.\n *\n * @param {Object} [options] Options object\n * @param {Boolean} [options.allowSynchronousEvents=true] Specifies whether\n * any of the `'message'`, `'ping'`, and `'pong'` events can be emitted\n * multiple times in the same tick\n * @param {String} [options.binaryType=nodebuffer] The type for binary data\n * @param {Object} [options.extensions] An object containing the negotiated\n * extensions\n * @param {Boolean} [options.isServer=false] Specifies whether to operate in\n * client or server mode\n * @param {Number} [options.maxPayload=0] The maximum allowed message length\n * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or\n * not to skip UTF-8 validation for text and close messages\n */\n constructor(options = {}) {\n super();\n\n this._allowSynchronousEvents =\n options.allowSynchronousEvents !== undefined\n ? options.allowSynchronousEvents\n : true;\n this._binaryType = options.binaryType || BINARY_TYPES[0];\n this._extensions = options.extensions || {};\n this._isServer = !!options.isServer;\n this._maxPayload = options.maxPayload | 0;\n this._skipUTF8Validation = !!options.skipUTF8Validation;\n this[kWebSocket] = undefined;\n\n this._bufferedBytes = 0;\n this._buffers = [];\n\n this._compressed = false;\n this._payloadLength = 0;\n this._mask = undefined;\n this._fragmented = 0;\n this._masked = false;\n this._fin = false;\n this._opcode = 0;\n\n this._totalPayloadLength = 0;\n this._messageLength = 0;\n this._fragments = [];\n\n this._errored = false;\n this._loop = false;\n this._state = GET_INFO;\n }\n\n /**\n * Implements `Writable.prototype._write()`.\n *\n * @param {Buffer} chunk The chunk of data to write\n * @param {String} encoding The character encoding of `chunk`\n * @param {Function} cb Callback\n * @private\n */\n _write(chunk, encoding, cb) {\n if (this._opcode === 0x08 && this._state == GET_INFO) return cb();\n\n this._bufferedBytes += chunk.length;\n this._buffers.push(chunk);\n this.startLoop(cb);\n }\n\n /**\n * Consumes `n` bytes from the buffered data.\n *\n * @param {Number} n The number of bytes to consume\n * @return {Buffer} The consumed bytes\n * @private\n */\n consume(n) {\n this._bufferedBytes -= n;\n\n if (n === this._buffers[0].length) return this._buffers.shift();\n\n if (n < this._buffers[0].length) {\n const buf = this._buffers[0];\n this._buffers[0] = new FastBuffer(\n buf.buffer,\n buf.byteOffset + n,\n buf.length - n\n );\n\n return new FastBuffer(buf.buffer, buf.byteOffset, n);\n }\n\n const dst = Buffer.allocUnsafe(n);\n\n do {\n const buf = this._buffers[0];\n const offset = dst.length - n;\n\n if (n >= buf.length) {\n dst.set(this._buffers.shift(), offset);\n } else {\n dst.set(new Uint8Array(buf.buffer, buf.byteOffset, n), offset);\n this._buffers[0] = new FastBuffer(\n buf.buffer,\n buf.byteOffset + n,\n buf.length - n\n );\n }\n\n n -= buf.length;\n } while (n > 0);\n\n return dst;\n }\n\n /**\n * Starts the parsing loop.\n *\n * @param {Function} cb Callback\n * @private\n */\n startLoop(cb) {\n this._loop = true;\n\n do {\n switch (this._state) {\n case GET_INFO:\n this.getInfo(cb);\n break;\n case GET_PAYLOAD_LENGTH_16:\n this.getPayloadLength16(cb);\n break;\n case GET_PAYLOAD_LENGTH_64:\n this.getPayloadLength64(cb);\n break;\n case GET_MASK:\n this.getMask();\n break;\n case GET_DATA:\n this.getData(cb);\n break;\n case INFLATING:\n case DEFER_EVENT:\n this._loop = false;\n return;\n }\n } while (this._loop);\n\n if (!this._errored) cb();\n }\n\n /**\n * Reads the first two bytes of a frame.\n *\n * @param {Function} cb Callback\n * @private\n */\n getInfo(cb) {\n if (this._bufferedBytes < 2) {\n this._loop = false;\n return;\n }\n\n const buf = this.consume(2);\n\n if ((buf[0] & 0x30) !== 0x00) {\n const error = this.createError(\n RangeError,\n 'RSV2 and RSV3 must be clear',\n true,\n 1002,\n 'WS_ERR_UNEXPECTED_RSV_2_3'\n );\n\n cb(error);\n return;\n }\n\n const compressed = (buf[0] & 0x40) === 0x40;\n\n if (compressed && !this._extensions[PerMessageDeflate.extensionName]) {\n const error = this.createError(\n RangeError,\n 'RSV1 must be clear',\n true,\n 1002,\n 'WS_ERR_UNEXPECTED_RSV_1'\n );\n\n cb(error);\n return;\n }\n\n this._fin = (buf[0] & 0x80) === 0x80;\n this._opcode = buf[0] & 0x0f;\n this._payloadLength = buf[1] & 0x7f;\n\n if (this._opcode === 0x00) {\n if (compressed) {\n const error = this.createError(\n RangeError,\n 'RSV1 must be clear',\n true,\n 1002,\n 'WS_ERR_UNEXPECTED_RSV_1'\n );\n\n cb(error);\n return;\n }\n\n if (!this._fragmented) {\n const error = this.createError(\n RangeError,\n 'invalid opcode 0',\n true,\n 1002,\n 'WS_ERR_INVALID_OPCODE'\n );\n\n cb(error);\n return;\n }\n\n this._opcode = this._fragmented;\n } else if (this._opcode === 0x01 || this._opcode === 0x02) {\n if (this._fragmented) {\n const error = this.createError(\n RangeError,\n `invalid opcode ${this._opcode}`,\n true,\n 1002,\n 'WS_ERR_INVALID_OPCODE'\n );\n\n cb(error);\n return;\n }\n\n this._compressed = compressed;\n } else if (this._opcode > 0x07 && this._opcode < 0x0b) {\n if (!this._fin) {\n const error = this.createError(\n RangeError,\n 'FIN must be set',\n true,\n 1002,\n 'WS_ERR_EXPECTED_FIN'\n );\n\n cb(error);\n return;\n }\n\n if (compressed) {\n const error = this.createError(\n RangeError,\n 'RSV1 must be clear',\n true,\n 1002,\n 'WS_ERR_UNEXPECTED_RSV_1'\n );\n\n cb(error);\n return;\n }\n\n if (\n this._payloadLength > 0x7d ||\n (this._opcode === 0x08 && this._payloadLength === 1)\n ) {\n const error = this.createError(\n RangeError,\n `invalid payload length ${this._payloadLength}`,\n true,\n 1002,\n 'WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH'\n );\n\n cb(error);\n return;\n }\n } else {\n const error = this.createError(\n RangeError,\n `invalid opcode ${this._opcode}`,\n true,\n 1002,\n 'WS_ERR_INVALID_OPCODE'\n );\n\n cb(error);\n return;\n }\n\n if (!this._fin && !this._fragmented) this._fragmented = this._opcode;\n this._masked = (buf[1] & 0x80) === 0x80;\n\n if (this._isServer) {\n if (!this._masked) {\n const error = this.createError(\n RangeError,\n 'MASK must be set',\n true,\n 1002,\n 'WS_ERR_EXPECTED_MASK'\n );\n\n cb(error);\n return;\n }\n } else if (this._masked) {\n const error = this.createError(\n RangeError,\n 'MASK must be clear',\n true,\n 1002,\n 'WS_ERR_UNEXPECTED_MASK'\n );\n\n cb(error);\n return;\n }\n\n if (this._payloadLength === 126) this._state = GET_PAYLOAD_LENGTH_16;\n else if (this._payloadLength === 127) this._state = GET_PAYLOAD_LENGTH_64;\n else this.haveLength(cb);\n }\n\n /**\n * Gets extended payload length (7+16).\n *\n * @param {Function} cb Callback\n * @private\n */\n getPayloadLength16(cb) {\n if (this._bufferedBytes < 2) {\n this._loop = false;\n return;\n }\n\n this._payloadLength = this.consume(2).readUInt16BE(0);\n this.haveLength(cb);\n }\n\n /**\n * Gets extended payload length (7+64).\n *\n * @param {Function} cb Callback\n * @private\n */\n getPayloadLength64(cb) {\n if (this._bufferedBytes < 8) {\n this._loop = false;\n return;\n }\n\n const buf = this.consume(8);\n const num = buf.readUInt32BE(0);\n\n //\n // The maximum safe integer in JavaScript is 2^53 - 1. An error is returned\n // if payload length is greater than this number.\n //\n if (num > Math.pow(2, 53 - 32) - 1) {\n const error = this.createError(\n RangeError,\n 'Unsupported WebSocket frame: payload length > 2^53 - 1',\n false,\n 1009,\n 'WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH'\n );\n\n cb(error);\n return;\n }\n\n this._payloadLength = num * Math.pow(2, 32) + buf.readUInt32BE(4);\n this.haveLength(cb);\n }\n\n /**\n * Payload length has been read.\n *\n * @param {Function} cb Callback\n * @private\n */\n haveLength(cb) {\n if (this._payloadLength && this._opcode < 0x08) {\n this._totalPayloadLength += this._payloadLength;\n if (this._totalPayloadLength > this._maxPayload && this._maxPayload > 0) {\n const error = this.createError(\n RangeError,\n 'Max payload size exceeded',\n false,\n 1009,\n 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH'\n );\n\n cb(error);\n return;\n }\n }\n\n if (this._masked) this._state = GET_MASK;\n else this._state = GET_DATA;\n }\n\n /**\n * Reads mask bytes.\n *\n * @private\n */\n getMask() {\n if (this._bufferedBytes < 4) {\n this._loop = false;\n return;\n }\n\n this._mask = this.consume(4);\n this._state = GET_DATA;\n }\n\n /**\n * Reads data bytes.\n *\n * @param {Function} cb Callback\n * @private\n */\n getData(cb) {\n let data = EMPTY_BUFFER;\n\n if (this._payloadLength) {\n if (this._bufferedBytes < this._payloadLength) {\n this._loop = false;\n return;\n }\n\n data = this.consume(this._payloadLength);\n\n if (\n this._masked &&\n (this._mask[0] | this._mask[1] | this._mask[2] | this._mask[3]) !== 0\n ) {\n unmask(data, this._mask);\n }\n }\n\n if (this._opcode > 0x07) {\n this.controlMessage(data, cb);\n return;\n }\n\n if (this._compressed) {\n this._state = INFLATING;\n this.decompress(data, cb);\n return;\n }\n\n if (data.length) {\n //\n // This message is not compressed so its length is the sum of the payload\n // length of all fragments.\n //\n this._messageLength = this._totalPayloadLength;\n this._fragments.push(data);\n }\n\n this.dataMessage(cb);\n }\n\n /**\n * Decompresses data.\n *\n * @param {Buffer} data Compressed data\n * @param {Function} cb Callback\n * @private\n */\n decompress(data, cb) {\n const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];\n\n perMessageDeflate.decompress(data, this._fin, (err, buf) => {\n if (err) return cb(err);\n\n if (buf.length) {\n this._messageLength += buf.length;\n if (this._messageLength > this._maxPayload && this._maxPayload > 0) {\n const error = this.createError(\n RangeError,\n 'Max payload size exceeded',\n false,\n 1009,\n 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH'\n );\n\n cb(error);\n return;\n }\n\n this._fragments.push(buf);\n }\n\n this.dataMessage(cb);\n if (this._state === GET_INFO) this.startLoop(cb);\n });\n }\n\n /**\n * Handles a data message.\n *\n * @param {Function} cb Callback\n * @private\n */\n dataMessage(cb) {\n if (!this._fin) {\n this._state = GET_INFO;\n return;\n }\n\n const messageLength = this._messageLength;\n const fragments = this._fragments;\n\n this._totalPayloadLength = 0;\n this._messageLength = 0;\n this._fragmented = 0;\n this._fragments = [];\n\n if (this._opcode === 2) {\n let data;\n\n if (this._binaryType === 'nodebuffer') {\n data = concat(fragments, messageLength);\n } else if (this._binaryType === 'arraybuffer') {\n data = toArrayBuffer(concat(fragments, messageLength));\n } else if (this._binaryType === 'blob') {\n data = new Blob(fragments);\n } else {\n data = fragments;\n }\n\n if (this._allowSynchronousEvents) {\n this.emit('message', data, true);\n this._state = GET_INFO;\n } else {\n this._state = DEFER_EVENT;\n setImmediate(() => {\n this.emit('message', data, true);\n this._state = GET_INFO;\n this.startLoop(cb);\n });\n }\n } else {\n const buf = concat(fragments, messageLength);\n\n if (!this._skipUTF8Validation && !isValidUTF8(buf)) {\n const error = this.createError(\n Error,\n 'invalid UTF-8 sequence',\n true,\n 1007,\n 'WS_ERR_INVALID_UTF8'\n );\n\n cb(error);\n return;\n }\n\n if (this._state === INFLATING || this._allowSynchronousEvents) {\n this.emit('message', buf, false);\n this._state = GET_INFO;\n } else {\n this._state = DEFER_EVENT;\n setImmediate(() => {\n this.emit('message', buf, false);\n this._state = GET_INFO;\n this.startLoop(cb);\n });\n }\n }\n }\n\n /**\n * Handles a control message.\n *\n * @param {Buffer} data Data to handle\n * @return {(Error|RangeError|undefined)} A possible error\n * @private\n */\n controlMessage(data, cb) {\n if (this._opcode === 0x08) {\n if (data.length === 0) {\n this._loop = false;\n this.emit('conclude', 1005, EMPTY_BUFFER);\n this.end();\n } else {\n const code = data.readUInt16BE(0);\n\n if (!isValidStatusCode(code)) {\n const error = this.createError(\n RangeError,\n `invalid status code ${code}`,\n true,\n 1002,\n 'WS_ERR_INVALID_CLOSE_CODE'\n );\n\n cb(error);\n return;\n }\n\n const buf = new FastBuffer(\n data.buffer,\n data.byteOffset + 2,\n data.length - 2\n );\n\n if (!this._skipUTF8Validation && !isValidUTF8(buf)) {\n const error = this.createError(\n Error,\n 'invalid UTF-8 sequence',\n true,\n 1007,\n 'WS_ERR_INVALID_UTF8'\n );\n\n cb(error);\n return;\n }\n\n this._loop = false;\n this.emit('conclude', code, buf);\n this.end();\n }\n\n this._state = GET_INFO;\n return;\n }\n\n if (this._allowSynchronousEvents) {\n this.emit(this._opcode === 0x09 ? 'ping' : 'pong', data);\n this._state = GET_INFO;\n } else {\n this._state = DEFER_EVENT;\n setImmediate(() => {\n this.emit(this._opcode === 0x09 ? 'ping' : 'pong', data);\n this._state = GET_INFO;\n this.startLoop(cb);\n });\n }\n }\n\n /**\n * Builds an error object.\n *\n * @param {function(new:Error|RangeError)} ErrorCtor The error constructor\n * @param {String} message The error message\n * @param {Boolean} prefix Specifies whether or not to add a default prefix to\n * `message`\n * @param {Number} statusCode The status code\n * @param {String} errorCode The exposed error code\n * @return {(Error|RangeError)} The error\n * @private\n */\n createError(ErrorCtor, message, prefix, statusCode, errorCode) {\n this._loop = false;\n this._errored = true;\n\n const err = new ErrorCtor(\n prefix ? `Invalid WebSocket frame: ${message}` : message\n );\n\n Error.captureStackTrace(err, this.createError);\n err.code = errorCode;\n err[kStatusCode] = statusCode;\n return err;\n }\n}\n\nmodule.exports = Receiver;\n","'use strict';\n\nconst zlib = require('zlib');\n\nconst bufferUtil = require('./buffer-util');\nconst Limiter = require('./limiter');\nconst { kStatusCode } = require('./constants');\n\nconst FastBuffer = Buffer[Symbol.species];\nconst TRAILER = Buffer.from([0x00, 0x00, 0xff, 0xff]);\nconst kPerMessageDeflate = Symbol('permessage-deflate');\nconst kTotalLength = Symbol('total-length');\nconst kCallback = Symbol('callback');\nconst kBuffers = Symbol('buffers');\nconst kError = Symbol('error');\n\n//\n// We limit zlib concurrency, which prevents severe memory fragmentation\n// as documented in https://github.com/nodejs/node/issues/8871#issuecomment-250915913\n// and https://github.com/websockets/ws/issues/1202\n//\n// Intentionally global; it's the global thread pool that's an issue.\n//\nlet zlibLimiter;\n\n/**\n * permessage-deflate implementation.\n */\nclass PerMessageDeflate {\n /**\n * Creates a PerMessageDeflate instance.\n *\n * @param {Object} [options] Configuration options\n * @param {(Boolean|Number)} [options.clientMaxWindowBits] Advertise support\n * for, or request, a custom client window size\n * @param {Boolean} [options.clientNoContextTakeover=false] Advertise/\n * acknowledge disabling of client context takeover\n * @param {Number} [options.concurrencyLimit=10] The number of concurrent\n * calls to zlib\n * @param {(Boolean|Number)} [options.serverMaxWindowBits] Request/confirm the\n * use of a custom server window size\n * @param {Boolean} [options.serverNoContextTakeover=false] Request/accept\n * disabling of server context takeover\n * @param {Number} [options.threshold=1024] Size (in bytes) below which\n * messages should not be compressed if context takeover is disabled\n * @param {Object} [options.zlibDeflateOptions] Options to pass to zlib on\n * deflate\n * @param {Object} [options.zlibInflateOptions] Options to pass to zlib on\n * inflate\n * @param {Boolean} [isServer=false] Create the instance in either server or\n * client mode\n * @param {Number} [maxPayload=0] The maximum allowed message length\n */\n constructor(options, isServer, maxPayload) {\n this._maxPayload = maxPayload | 0;\n this._options = options || {};\n this._threshold =\n this._options.threshold !== undefined ? this._options.threshold : 1024;\n this._isServer = !!isServer;\n this._deflate = null;\n this._inflate = null;\n\n this.params = null;\n\n if (!zlibLimiter) {\n const concurrency =\n this._options.concurrencyLimit !== undefined\n ? this._options.concurrencyLimit\n : 10;\n zlibLimiter = new Limiter(concurrency);\n }\n }\n\n /**\n * @type {String}\n */\n static get extensionName() {\n return 'permessage-deflate';\n }\n\n /**\n * Create an extension negotiation offer.\n *\n * @return {Object} Extension parameters\n * @public\n */\n offer() {\n const params = {};\n\n if (this._options.serverNoContextTakeover) {\n params.server_no_context_takeover = true;\n }\n if (this._options.clientNoContextTakeover) {\n params.client_no_context_takeover = true;\n }\n if (this._options.serverMaxWindowBits) {\n params.server_max_window_bits = this._options.serverMaxWindowBits;\n }\n if (this._options.clientMaxWindowBits) {\n params.client_max_window_bits = this._options.clientMaxWindowBits;\n } else if (this._options.clientMaxWindowBits == null) {\n params.client_max_window_bits = true;\n }\n\n return params;\n }\n\n /**\n * Accept an extension negotiation offer/response.\n *\n * @param {Array} configurations The extension negotiation offers/reponse\n * @return {Object} Accepted configuration\n * @public\n */\n accept(configurations) {\n configurations = this.normalizeParams(configurations);\n\n this.params = this._isServer\n ? this.acceptAsServer(configurations)\n : this.acceptAsClient(configurations);\n\n return this.params;\n }\n\n /**\n * Releases all resources used by the extension.\n *\n * @public\n */\n cleanup() {\n if (this._inflate) {\n this._inflate.close();\n this._inflate = null;\n }\n\n if (this._deflate) {\n const callback = this._deflate[kCallback];\n\n this._deflate.close();\n this._deflate = null;\n\n if (callback) {\n callback(\n new Error(\n 'The deflate stream was closed while data was being processed'\n )\n );\n }\n }\n }\n\n /**\n * Accept an extension negotiation offer.\n *\n * @param {Array} offers The extension negotiation offers\n * @return {Object} Accepted configuration\n * @private\n */\n acceptAsServer(offers) {\n const opts = this._options;\n const accepted = offers.find((params) => {\n if (\n (opts.serverNoContextTakeover === false &&\n params.server_no_context_takeover) ||\n (params.server_max_window_bits &&\n (opts.serverMaxWindowBits === false ||\n (typeof opts.serverMaxWindowBits === 'number' &&\n opts.serverMaxWindowBits > params.server_max_window_bits))) ||\n (typeof opts.clientMaxWindowBits === 'number' &&\n !params.client_max_window_bits)\n ) {\n return false;\n }\n\n return true;\n });\n\n if (!accepted) {\n throw new Error('None of the extension offers can be accepted');\n }\n\n if (opts.serverNoContextTakeover) {\n accepted.server_no_context_takeover = true;\n }\n if (opts.clientNoContextTakeover) {\n accepted.client_no_context_takeover = true;\n }\n if (typeof opts.serverMaxWindowBits === 'number') {\n accepted.server_max_window_bits = opts.serverMaxWindowBits;\n }\n if (typeof opts.clientMaxWindowBits === 'number') {\n accepted.client_max_window_bits = opts.clientMaxWindowBits;\n } else if (\n accepted.client_max_window_bits === true ||\n opts.clientMaxWindowBits === false\n ) {\n delete accepted.client_max_window_bits;\n }\n\n return accepted;\n }\n\n /**\n * Accept the extension negotiation response.\n *\n * @param {Array} response The extension negotiation response\n * @return {Object} Accepted configuration\n * @private\n */\n acceptAsClient(response) {\n const params = response[0];\n\n if (\n this._options.clientNoContextTakeover === false &&\n params.client_no_context_takeover\n ) {\n throw new Error('Unexpected parameter \"client_no_context_takeover\"');\n }\n\n if (!params.client_max_window_bits) {\n if (typeof this._options.clientMaxWindowBits === 'number') {\n params.client_max_window_bits = this._options.clientMaxWindowBits;\n }\n } else if (\n this._options.clientMaxWindowBits === false ||\n (typeof this._options.clientMaxWindowBits === 'number' &&\n params.client_max_window_bits > this._options.clientMaxWindowBits)\n ) {\n throw new Error(\n 'Unexpected or invalid parameter \"client_max_window_bits\"'\n );\n }\n\n return params;\n }\n\n /**\n * Normalize parameters.\n *\n * @param {Array} configurations The extension negotiation offers/reponse\n * @return {Array} The offers/response with normalized parameters\n * @private\n */\n normalizeParams(configurations) {\n configurations.forEach((params) => {\n Object.keys(params).forEach((key) => {\n let value = params[key];\n\n if (value.length > 1) {\n throw new Error(`Parameter \"${key}\" must have only a single value`);\n }\n\n value = value[0];\n\n if (key === 'client_max_window_bits') {\n if (value !== true) {\n const num = +value;\n if (!Number.isInteger(num) || num < 8 || num > 15) {\n throw new TypeError(\n `Invalid value for parameter \"${key}\": ${value}`\n );\n }\n value = num;\n } else if (!this._isServer) {\n throw new TypeError(\n `Invalid value for parameter \"${key}\": ${value}`\n );\n }\n } else if (key === 'server_max_window_bits') {\n const num = +value;\n if (!Number.isInteger(num) || num < 8 || num > 15) {\n throw new TypeError(\n `Invalid value for parameter \"${key}\": ${value}`\n );\n }\n value = num;\n } else if (\n key === 'client_no_context_takeover' ||\n key === 'server_no_context_takeover'\n ) {\n if (value !== true) {\n throw new TypeError(\n `Invalid value for parameter \"${key}\": ${value}`\n );\n }\n } else {\n throw new Error(`Unknown parameter \"${key}\"`);\n }\n\n params[key] = value;\n });\n });\n\n return configurations;\n }\n\n /**\n * Decompress data. Concurrency limited.\n *\n * @param {Buffer} data Compressed data\n * @param {Boolean} fin Specifies whether or not this is the last fragment\n * @param {Function} callback Callback\n * @public\n */\n decompress(data, fin, callback) {\n zlibLimiter.add((done) => {\n this._decompress(data, fin, (err, result) => {\n done();\n callback(err, result);\n });\n });\n }\n\n /**\n * Compress data. Concurrency limited.\n *\n * @param {(Buffer|String)} data Data to compress\n * @param {Boolean} fin Specifies whether or not this is the last fragment\n * @param {Function} callback Callback\n * @public\n */\n compress(data, fin, callback) {\n zlibLimiter.add((done) => {\n this._compress(data, fin, (err, result) => {\n done();\n callback(err, result);\n });\n });\n }\n\n /**\n * Decompress data.\n *\n * @param {Buffer} data Compressed data\n * @param {Boolean} fin Specifies whether or not this is the last fragment\n * @param {Function} callback Callback\n * @private\n */\n _decompress(data, fin, callback) {\n const endpoint = this._isServer ? 'client' : 'server';\n\n if (!this._inflate) {\n const key = `${endpoint}_max_window_bits`;\n const windowBits =\n typeof this.params[key] !== 'number'\n ? zlib.Z_DEFAULT_WINDOWBITS\n : this.params[key];\n\n this._inflate = zlib.createInflateRaw({\n ...this._options.zlibInflateOptions,\n windowBits\n });\n this._inflate[kPerMessageDeflate] = this;\n this._inflate[kTotalLength] = 0;\n this._inflate[kBuffers] = [];\n this._inflate.on('error', inflateOnError);\n this._inflate.on('data', inflateOnData);\n }\n\n this._inflate[kCallback] = callback;\n\n this._inflate.write(data);\n if (fin) this._inflate.write(TRAILER);\n\n this._inflate.flush(() => {\n const err = this._inflate[kError];\n\n if (err) {\n this._inflate.close();\n this._inflate = null;\n callback(err);\n return;\n }\n\n const data = bufferUtil.concat(\n this._inflate[kBuffers],\n this._inflate[kTotalLength]\n );\n\n if (this._inflate._readableState.endEmitted) {\n this._inflate.close();\n this._inflate = null;\n } else {\n this._inflate[kTotalLength] = 0;\n this._inflate[kBuffers] = [];\n\n if (fin && this.params[`${endpoint}_no_context_takeover`]) {\n this._inflate.reset();\n }\n }\n\n callback(null, data);\n });\n }\n\n /**\n * Compress data.\n *\n * @param {(Buffer|String)} data Data to compress\n * @param {Boolean} fin Specifies whether or not this is the last fragment\n * @param {Function} callback Callback\n * @private\n */\n _compress(data, fin, callback) {\n const endpoint = this._isServer ? 'server' : 'client';\n\n if (!this._deflate) {\n const key = `${endpoint}_max_window_bits`;\n const windowBits =\n typeof this.params[key] !== 'number'\n ? zlib.Z_DEFAULT_WINDOWBITS\n : this.params[key];\n\n this._deflate = zlib.createDeflateRaw({\n ...this._options.zlibDeflateOptions,\n windowBits\n });\n\n this._deflate[kTotalLength] = 0;\n this._deflate[kBuffers] = [];\n\n this._deflate.on('data', deflateOnData);\n }\n\n this._deflate[kCallback] = callback;\n\n this._deflate.write(data);\n this._deflate.flush(zlib.Z_SYNC_FLUSH, () => {\n if (!this._deflate) {\n //\n // The deflate stream was closed while data was being processed.\n //\n return;\n }\n\n let data = bufferUtil.concat(\n this._deflate[kBuffers],\n this._deflate[kTotalLength]\n );\n\n if (fin) {\n data = new FastBuffer(data.buffer, data.byteOffset, data.length - 4);\n }\n\n //\n // Ensure that the callback will not be called again in\n // `PerMessageDeflate#cleanup()`.\n //\n this._deflate[kCallback] = null;\n\n this._deflate[kTotalLength] = 0;\n this._deflate[kBuffers] = [];\n\n if (fin && this.params[`${endpoint}_no_context_takeover`]) {\n this._deflate.reset();\n }\n\n callback(null, data);\n });\n }\n}\n\nmodule.exports = PerMessageDeflate;\n\n/**\n * The listener of the `zlib.DeflateRaw` stream `'data'` event.\n *\n * @param {Buffer} chunk A chunk of data\n * @private\n */\nfunction deflateOnData(chunk) {\n this[kBuffers].push(chunk);\n this[kTotalLength] += chunk.length;\n}\n\n/**\n * The listener of the `zlib.InflateRaw` stream `'data'` event.\n *\n * @param {Buffer} chunk A chunk of data\n * @private\n */\nfunction inflateOnData(chunk) {\n this[kTotalLength] += chunk.length;\n\n if (\n this[kPerMessageDeflate]._maxPayload < 1 ||\n this[kTotalLength] <= this[kPerMessageDeflate]._maxPayload\n ) {\n this[kBuffers].push(chunk);\n return;\n }\n\n this[kError] = new RangeError('Max payload size exceeded');\n this[kError].code = 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH';\n this[kError][kStatusCode] = 1009;\n this.removeListener('data', inflateOnData);\n this.reset();\n}\n\n/**\n * The listener of the `zlib.InflateRaw` stream `'error'` event.\n *\n * @param {Error} err The emitted error\n * @private\n */\nfunction inflateOnError(err) {\n //\n // There is no need to call `Zlib#close()` as the handle is automatically\n // closed when an error is emitted.\n //\n this[kPerMessageDeflate]._inflate = null;\n err[kStatusCode] = 1007;\n this[kCallback](err);\n}\n","'use strict';\n\nconst { EMPTY_BUFFER } = require('./constants');\n\nconst FastBuffer = Buffer[Symbol.species];\n\n/**\n * Merges an array of buffers into a new buffer.\n *\n * @param {Buffer[]} list The array of buffers to concat\n * @param {Number} totalLength The total length of buffers in the list\n * @return {Buffer} The resulting buffer\n * @public\n */\nfunction concat(list, totalLength) {\n if (list.length === 0) return EMPTY_BUFFER;\n if (list.length === 1) return list[0];\n\n const target = Buffer.allocUnsafe(totalLength);\n let offset = 0;\n\n for (let i = 0; i < list.length; i++) {\n const buf = list[i];\n target.set(buf, offset);\n offset += buf.length;\n }\n\n if (offset < totalLength) {\n return new FastBuffer(target.buffer, target.byteOffset, offset);\n }\n\n return target;\n}\n\n/**\n * Masks a buffer using the given mask.\n *\n * @param {Buffer} source The buffer to mask\n * @param {Buffer} mask The mask to use\n * @param {Buffer} output The buffer where to store the result\n * @param {Number} offset The offset at which to start writing\n * @param {Number} length The number of bytes to mask.\n * @public\n */\nfunction _mask(source, mask, output, offset, length) {\n for (let i = 0; i < length; i++) {\n output[offset + i] = source[i] ^ mask[i & 3];\n }\n}\n\n/**\n * Unmasks a buffer using the given mask.\n *\n * @param {Buffer} buffer The buffer to unmask\n * @param {Buffer} mask The mask to use\n * @public\n */\nfunction _unmask(buffer, mask) {\n for (let i = 0; i < buffer.length; i++) {\n buffer[i] ^= mask[i & 3];\n }\n}\n\n/**\n * Converts a buffer to an `ArrayBuffer`.\n *\n * @param {Buffer} buf The buffer to convert\n * @return {ArrayBuffer} Converted buffer\n * @public\n */\nfunction toArrayBuffer(buf) {\n if (buf.length === buf.buffer.byteLength) {\n return buf.buffer;\n }\n\n return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.length);\n}\n\n/**\n * Converts `data` to a `Buffer`.\n *\n * @param {*} data The data to convert\n * @return {Buffer} The buffer\n * @throws {TypeError}\n * @public\n */\nfunction toBuffer(data) {\n toBuffer.readOnly = true;\n\n if (Buffer.isBuffer(data)) return data;\n\n let buf;\n\n if (data instanceof ArrayBuffer) {\n buf = new FastBuffer(data);\n } else if (ArrayBuffer.isView(data)) {\n buf = new FastBuffer(data.buffer, data.byteOffset, data.byteLength);\n } else {\n buf = Buffer.from(data);\n toBuffer.readOnly = false;\n }\n\n return buf;\n}\n\nmodule.exports = {\n concat,\n mask: _mask,\n toArrayBuffer,\n toBuffer,\n unmask: _unmask\n};\n\n/* istanbul ignore else */\nif (!process.env.WS_NO_BUFFER_UTIL) {\n try {\n const bufferUtil = require('bufferutil');\n\n module.exports.mask = function (source, mask, output, offset, length) {\n if (length < 48) _mask(source, mask, output, offset, length);\n else bufferUtil.mask(source, mask, output, offset, length);\n };\n\n module.exports.unmask = function (buffer, mask) {\n if (buffer.length < 32) _unmask(buffer, mask);\n else bufferUtil.unmask(buffer, mask);\n };\n } catch (e) {\n // Continue regardless of the error.\n }\n}\n","'use strict';\n\nconst BINARY_TYPES = ['nodebuffer', 'arraybuffer', 'fragments'];\nconst hasBlob = typeof Blob !== 'undefined';\n\nif (hasBlob) BINARY_TYPES.push('blob');\n\nmodule.exports = {\n BINARY_TYPES,\n EMPTY_BUFFER: Buffer.alloc(0),\n GUID: '258EAFA5-E914-47DA-95CA-C5AB0DC85B11',\n hasBlob,\n kForOnEventAttribute: Symbol('kIsForOnEventAttribute'),\n kListener: Symbol('kListener'),\n kStatusCode: Symbol('status-code'),\n kWebSocket: Symbol('websocket'),\n NOOP: () => {}\n};\n","'use strict';\n\nconst kDone = Symbol('kDone');\nconst kRun = Symbol('kRun');\n\n/**\n * A very simple job queue with adjustable concurrency. Adapted from\n * https://github.com/STRML/async-limiter\n */\nclass Limiter {\n /**\n * Creates a new `Limiter`.\n *\n * @param {Number} [concurrency=Infinity] The maximum number of jobs allowed\n * to run concurrently\n */\n constructor(concurrency) {\n this[kDone] = () => {\n this.pending--;\n this[kRun]();\n };\n this.concurrency = concurrency || Infinity;\n this.jobs = [];\n this.pending = 0;\n }\n\n /**\n * Adds a job to the queue.\n *\n * @param {Function} job The job to run\n * @public\n */\n add(job) {\n this.jobs.push(job);\n this[kRun]();\n }\n\n /**\n * Removes a job from the queue and runs it if possible.\n *\n * @private\n */\n [kRun]() {\n if (this.pending === this.concurrency) return;\n\n if (this.jobs.length) {\n const job = this.jobs.shift();\n\n this.pending++;\n job(this[kDone]);\n }\n }\n}\n\nmodule.exports = Limiter;\n","'use strict';\n\nconst { isUtf8 } = require('buffer');\n\nconst { hasBlob } = require('./constants');\n\n//\n// Allowed token characters:\n//\n// '!', '#', '$', '%', '&', ''', '*', '+', '-',\n// '.', 0-9, A-Z, '^', '_', '`', a-z, '|', '~'\n//\n// tokenChars[32] === 0 // ' '\n// tokenChars[33] === 1 // '!'\n// tokenChars[34] === 0 // '\"'\n// ...\n//\n// prettier-ignore\nconst tokenChars = [\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0 - 15\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 16 - 31\n 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, // 32 - 47\n 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, // 48 - 63\n 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 64 - 79\n 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, // 80 - 95\n 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 96 - 111\n 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0 // 112 - 127\n];\n\n/**\n * Checks if a status code is allowed in a close frame.\n *\n * @param {Number} code The status code\n * @return {Boolean} `true` if the status code is valid, else `false`\n * @public\n */\nfunction isValidStatusCode(code) {\n return (\n (code >= 1000 &&\n code <= 1014 &&\n code !== 1004 &&\n code !== 1005 &&\n code !== 1006) ||\n (code >= 3000 && code <= 4999)\n );\n}\n\n/**\n * Checks if a given buffer contains only correct UTF-8.\n * Ported from https://www.cl.cam.ac.uk/%7Emgk25/ucs/utf8_check.c by\n * Markus Kuhn.\n *\n * @param {Buffer} buf The buffer to check\n * @return {Boolean} `true` if `buf` contains only correct UTF-8, else `false`\n * @public\n */\nfunction _isValidUTF8(buf) {\n const len = buf.length;\n let i = 0;\n\n while (i < len) {\n if ((buf[i] & 0x80) === 0) {\n // 0xxxxxxx\n i++;\n } else if ((buf[i] & 0xe0) === 0xc0) {\n // 110xxxxx 10xxxxxx\n if (\n i + 1 === len ||\n (buf[i + 1] & 0xc0) !== 0x80 ||\n (buf[i] & 0xfe) === 0xc0 // Overlong\n ) {\n return false;\n }\n\n i += 2;\n } else if ((buf[i] & 0xf0) === 0xe0) {\n // 1110xxxx 10xxxxxx 10xxxxxx\n if (\n i + 2 >= len ||\n (buf[i + 1] & 0xc0) !== 0x80 ||\n (buf[i + 2] & 0xc0) !== 0x80 ||\n (buf[i] === 0xe0 && (buf[i + 1] & 0xe0) === 0x80) || // Overlong\n (buf[i] === 0xed && (buf[i + 1] & 0xe0) === 0xa0) // Surrogate (U+D800 - U+DFFF)\n ) {\n return false;\n }\n\n i += 3;\n } else if ((buf[i] & 0xf8) === 0xf0) {\n // 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx\n if (\n i + 3 >= len ||\n (buf[i + 1] & 0xc0) !== 0x80 ||\n (buf[i + 2] & 0xc0) !== 0x80 ||\n (buf[i + 3] & 0xc0) !== 0x80 ||\n (buf[i] === 0xf0 && (buf[i + 1] & 0xf0) === 0x80) || // Overlong\n (buf[i] === 0xf4 && buf[i + 1] > 0x8f) ||\n buf[i] > 0xf4 // > U+10FFFF\n ) {\n return false;\n }\n\n i += 4;\n } else {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Determines whether a value is a `Blob`.\n *\n * @param {*} value The value to be tested\n * @return {Boolean} `true` if `value` is a `Blob`, else `false`\n * @private\n */\nfunction isBlob(value) {\n return (\n hasBlob &&\n typeof value === 'object' &&\n typeof value.arrayBuffer === 'function' &&\n typeof value.type === 'string' &&\n typeof value.stream === 'function' &&\n (value[Symbol.toStringTag] === 'Blob' ||\n value[Symbol.toStringTag] === 'File')\n );\n}\n\nmodule.exports = {\n isBlob,\n isValidStatusCode,\n isValidUTF8: _isValidUTF8,\n tokenChars\n};\n\nif (isUtf8) {\n module.exports.isValidUTF8 = function (buf) {\n return buf.length < 24 ? _isValidUTF8(buf) : isUtf8(buf);\n };\n} /* istanbul ignore else */ else if (!process.env.WS_NO_UTF_8_VALIDATE) {\n try {\n const isValidUTF8 = require('utf-8-validate');\n\n module.exports.isValidUTF8 = function (buf) {\n return buf.length < 32 ? _isValidUTF8(buf) : isValidUTF8(buf);\n };\n } catch (e) {\n // Continue regardless of the error.\n }\n}\n","/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^Duplex\" }] */\n\n'use strict';\n\nconst { Duplex } = require('stream');\nconst { randomFillSync } = require('crypto');\n\nconst PerMessageDeflate = require('./permessage-deflate');\nconst { EMPTY_BUFFER, kWebSocket, NOOP } = require('./constants');\nconst { isBlob, isValidStatusCode } = require('./validation');\nconst { mask: applyMask, toBuffer } = require('./buffer-util');\n\nconst kByteLength = Symbol('kByteLength');\nconst maskBuffer = Buffer.alloc(4);\nconst RANDOM_POOL_SIZE = 8 * 1024;\nlet randomPool;\nlet randomPoolPointer = RANDOM_POOL_SIZE;\n\nconst DEFAULT = 0;\nconst DEFLATING = 1;\nconst GET_BLOB_DATA = 2;\n\n/**\n * HyBi Sender implementation.\n */\nclass Sender {\n /**\n * Creates a Sender instance.\n *\n * @param {Duplex} socket The connection socket\n * @param {Object} [extensions] An object containing the negotiated extensions\n * @param {Function} [generateMask] The function used to generate the masking\n * key\n */\n constructor(socket, extensions, generateMask) {\n this._extensions = extensions || {};\n\n if (generateMask) {\n this._generateMask = generateMask;\n this._maskBuffer = Buffer.alloc(4);\n }\n\n this._socket = socket;\n\n this._firstFragment = true;\n this._compress = false;\n\n this._bufferedBytes = 0;\n this._queue = [];\n this._state = DEFAULT;\n this.onerror = NOOP;\n this[kWebSocket] = undefined;\n }\n\n /**\n * Frames a piece of data according to the HyBi WebSocket protocol.\n *\n * @param {(Buffer|String)} data The data to frame\n * @param {Object} options Options object\n * @param {Boolean} [options.fin=false] Specifies whether or not to set the\n * FIN bit\n * @param {Function} [options.generateMask] The function used to generate the\n * masking key\n * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n * `data`\n * @param {Buffer} [options.maskBuffer] The buffer used to store the masking\n * key\n * @param {Number} options.opcode The opcode\n * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be\n * modified\n * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the\n * RSV1 bit\n * @return {(Buffer|String)[]} The framed data\n * @public\n */\n static frame(data, options) {\n let mask;\n let merge = false;\n let offset = 2;\n let skipMasking = false;\n\n if (options.mask) {\n mask = options.maskBuffer || maskBuffer;\n\n if (options.generateMask) {\n options.generateMask(mask);\n } else {\n if (randomPoolPointer === RANDOM_POOL_SIZE) {\n /* istanbul ignore else */\n if (randomPool === undefined) {\n //\n // This is lazily initialized because server-sent frames must not\n // be masked so it may never be used.\n //\n randomPool = Buffer.alloc(RANDOM_POOL_SIZE);\n }\n\n randomFillSync(randomPool, 0, RANDOM_POOL_SIZE);\n randomPoolPointer = 0;\n }\n\n mask[0] = randomPool[randomPoolPointer++];\n mask[1] = randomPool[randomPoolPointer++];\n mask[2] = randomPool[randomPoolPointer++];\n mask[3] = randomPool[randomPoolPointer++];\n }\n\n skipMasking = (mask[0] | mask[1] | mask[2] | mask[3]) === 0;\n offset = 6;\n }\n\n let dataLength;\n\n if (typeof data === 'string') {\n if (\n (!options.mask || skipMasking) &&\n options[kByteLength] !== undefined\n ) {\n dataLength = options[kByteLength];\n } else {\n data = Buffer.from(data);\n dataLength = data.length;\n }\n } else {\n dataLength = data.length;\n merge = options.mask && options.readOnly && !skipMasking;\n }\n\n let payloadLength = dataLength;\n\n if (dataLength >= 65536) {\n offset += 8;\n payloadLength = 127;\n } else if (dataLength > 125) {\n offset += 2;\n payloadLength = 126;\n }\n\n const target = Buffer.allocUnsafe(merge ? dataLength + offset : offset);\n\n target[0] = options.fin ? options.opcode | 0x80 : options.opcode;\n if (options.rsv1) target[0] |= 0x40;\n\n target[1] = payloadLength;\n\n if (payloadLength === 126) {\n target.writeUInt16BE(dataLength, 2);\n } else if (payloadLength === 127) {\n target[2] = target[3] = 0;\n target.writeUIntBE(dataLength, 4, 6);\n }\n\n if (!options.mask) return [target, data];\n\n target[1] |= 0x80;\n target[offset - 4] = mask[0];\n target[offset - 3] = mask[1];\n target[offset - 2] = mask[2];\n target[offset - 1] = mask[3];\n\n if (skipMasking) return [target, data];\n\n if (merge) {\n applyMask(data, mask, target, offset, dataLength);\n return [target];\n }\n\n applyMask(data, mask, data, 0, dataLength);\n return [target, data];\n }\n\n /**\n * Sends a close message to the other peer.\n *\n * @param {Number} [code] The status code component of the body\n * @param {(String|Buffer)} [data] The message component of the body\n * @param {Boolean} [mask=false] Specifies whether or not to mask the message\n * @param {Function} [cb] Callback\n * @public\n */\n close(code, data, mask, cb) {\n let buf;\n\n if (code === undefined) {\n buf = EMPTY_BUFFER;\n } else if (typeof code !== 'number' || !isValidStatusCode(code)) {\n throw new TypeError('First argument must be a valid error code number');\n } else if (data === undefined || !data.length) {\n buf = Buffer.allocUnsafe(2);\n buf.writeUInt16BE(code, 0);\n } else {\n const length = Buffer.byteLength(data);\n\n if (length > 123) {\n throw new RangeError('The message must not be greater than 123 bytes');\n }\n\n buf = Buffer.allocUnsafe(2 + length);\n buf.writeUInt16BE(code, 0);\n\n if (typeof data === 'string') {\n buf.write(data, 2);\n } else {\n buf.set(data, 2);\n }\n }\n\n const options = {\n [kByteLength]: buf.length,\n fin: true,\n generateMask: this._generateMask,\n mask,\n maskBuffer: this._maskBuffer,\n opcode: 0x08,\n readOnly: false,\n rsv1: false\n };\n\n if (this._state !== DEFAULT) {\n this.enqueue([this.dispatch, buf, false, options, cb]);\n } else {\n this.sendFrame(Sender.frame(buf, options), cb);\n }\n }\n\n /**\n * Sends a ping message to the other peer.\n *\n * @param {*} data The message to send\n * @param {Boolean} [mask=false] Specifies whether or not to mask `data`\n * @param {Function} [cb] Callback\n * @public\n */\n ping(data, mask, cb) {\n let byteLength;\n let readOnly;\n\n if (typeof data === 'string') {\n byteLength = Buffer.byteLength(data);\n readOnly = false;\n } else if (isBlob(data)) {\n byteLength = data.size;\n readOnly = false;\n } else {\n data = toBuffer(data);\n byteLength = data.length;\n readOnly = toBuffer.readOnly;\n }\n\n if (byteLength > 125) {\n throw new RangeError('The data size must not be greater than 125 bytes');\n }\n\n const options = {\n [kByteLength]: byteLength,\n fin: true,\n generateMask: this._generateMask,\n mask,\n maskBuffer: this._maskBuffer,\n opcode: 0x09,\n readOnly,\n rsv1: false\n };\n\n if (isBlob(data)) {\n if (this._state !== DEFAULT) {\n this.enqueue([this.getBlobData, data, false, options, cb]);\n } else {\n this.getBlobData(data, false, options, cb);\n }\n } else if (this._state !== DEFAULT) {\n this.enqueue([this.dispatch, data, false, options, cb]);\n } else {\n this.sendFrame(Sender.frame(data, options), cb);\n }\n }\n\n /**\n * Sends a pong message to the other peer.\n *\n * @param {*} data The message to send\n * @param {Boolean} [mask=false] Specifies whether or not to mask `data`\n * @param {Function} [cb] Callback\n * @public\n */\n pong(data, mask, cb) {\n let byteLength;\n let readOnly;\n\n if (typeof data === 'string') {\n byteLength = Buffer.byteLength(data);\n readOnly = false;\n } else if (isBlob(data)) {\n byteLength = data.size;\n readOnly = false;\n } else {\n data = toBuffer(data);\n byteLength = data.length;\n readOnly = toBuffer.readOnly;\n }\n\n if (byteLength > 125) {\n throw new RangeError('The data size must not be greater than 125 bytes');\n }\n\n const options = {\n [kByteLength]: byteLength,\n fin: true,\n generateMask: this._generateMask,\n mask,\n maskBuffer: this._maskBuffer,\n opcode: 0x0a,\n readOnly,\n rsv1: false\n };\n\n if (isBlob(data)) {\n if (this._state !== DEFAULT) {\n this.enqueue([this.getBlobData, data, false, options, cb]);\n } else {\n this.getBlobData(data, false, options, cb);\n }\n } else if (this._state !== DEFAULT) {\n this.enqueue([this.dispatch, data, false, options, cb]);\n } else {\n this.sendFrame(Sender.frame(data, options), cb);\n }\n }\n\n /**\n * Sends a data message to the other peer.\n *\n * @param {*} data The message to send\n * @param {Object} options Options object\n * @param {Boolean} [options.binary=false] Specifies whether `data` is binary\n * or text\n * @param {Boolean} [options.compress=false] Specifies whether or not to\n * compress `data`\n * @param {Boolean} [options.fin=false] Specifies whether the fragment is the\n * last one\n * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n * `data`\n * @param {Function} [cb] Callback\n * @public\n */\n send(data, options, cb) {\n const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];\n let opcode = options.binary ? 2 : 1;\n let rsv1 = options.compress;\n\n let byteLength;\n let readOnly;\n\n if (typeof data === 'string') {\n byteLength = Buffer.byteLength(data);\n readOnly = false;\n } else if (isBlob(data)) {\n byteLength = data.size;\n readOnly = false;\n } else {\n data = toBuffer(data);\n byteLength = data.length;\n readOnly = toBuffer.readOnly;\n }\n\n if (this._firstFragment) {\n this._firstFragment = false;\n if (\n rsv1 &&\n perMessageDeflate &&\n perMessageDeflate.params[\n perMessageDeflate._isServer\n ? 'server_no_context_takeover'\n : 'client_no_context_takeover'\n ]\n ) {\n rsv1 = byteLength >= perMessageDeflate._threshold;\n }\n this._compress = rsv1;\n } else {\n rsv1 = false;\n opcode = 0;\n }\n\n if (options.fin) this._firstFragment = true;\n\n const opts = {\n [kByteLength]: byteLength,\n fin: options.fin,\n generateMask: this._generateMask,\n mask: options.mask,\n maskBuffer: this._maskBuffer,\n opcode,\n readOnly,\n rsv1\n };\n\n if (isBlob(data)) {\n if (this._state !== DEFAULT) {\n this.enqueue([this.getBlobData, data, this._compress, opts, cb]);\n } else {\n this.getBlobData(data, this._compress, opts, cb);\n }\n } else if (this._state !== DEFAULT) {\n this.enqueue([this.dispatch, data, this._compress, opts, cb]);\n } else {\n this.dispatch(data, this._compress, opts, cb);\n }\n }\n\n /**\n * Gets the contents of a blob as binary data.\n *\n * @param {Blob} blob The blob\n * @param {Boolean} [compress=false] Specifies whether or not to compress\n * the data\n * @param {Object} options Options object\n * @param {Boolean} [options.fin=false] Specifies whether or not to set the\n * FIN bit\n * @param {Function} [options.generateMask] The function used to generate the\n * masking key\n * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n * `data`\n * @param {Buffer} [options.maskBuffer] The buffer used to store the masking\n * key\n * @param {Number} options.opcode The opcode\n * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be\n * modified\n * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the\n * RSV1 bit\n * @param {Function} [cb] Callback\n * @private\n */\n getBlobData(blob, compress, options, cb) {\n this._bufferedBytes += options[kByteLength];\n this._state = GET_BLOB_DATA;\n\n blob\n .arrayBuffer()\n .then((arrayBuffer) => {\n if (this._socket.destroyed) {\n const err = new Error(\n 'The socket was closed while the blob was being read'\n );\n\n //\n // `callCallbacks` is called in the next tick to ensure that errors\n // that might be thrown in the callbacks behave like errors thrown\n // outside the promise chain.\n //\n process.nextTick(callCallbacks, this, err, cb);\n return;\n }\n\n this._bufferedBytes -= options[kByteLength];\n const data = toBuffer(arrayBuffer);\n\n if (!compress) {\n this._state = DEFAULT;\n this.sendFrame(Sender.frame(data, options), cb);\n this.dequeue();\n } else {\n this.dispatch(data, compress, options, cb);\n }\n })\n .catch((err) => {\n //\n // `onError` is called in the next tick for the same reason that\n // `callCallbacks` above is.\n //\n process.nextTick(onError, this, err, cb);\n });\n }\n\n /**\n * Dispatches a message.\n *\n * @param {(Buffer|String)} data The message to send\n * @param {Boolean} [compress=false] Specifies whether or not to compress\n * `data`\n * @param {Object} options Options object\n * @param {Boolean} [options.fin=false] Specifies whether or not to set the\n * FIN bit\n * @param {Function} [options.generateMask] The function used to generate the\n * masking key\n * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n * `data`\n * @param {Buffer} [options.maskBuffer] The buffer used to store the masking\n * key\n * @param {Number} options.opcode The opcode\n * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be\n * modified\n * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the\n * RSV1 bit\n * @param {Function} [cb] Callback\n * @private\n */\n dispatch(data, compress, options, cb) {\n if (!compress) {\n this.sendFrame(Sender.frame(data, options), cb);\n return;\n }\n\n const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];\n\n this._bufferedBytes += options[kByteLength];\n this._state = DEFLATING;\n perMessageDeflate.compress(data, options.fin, (_, buf) => {\n if (this._socket.destroyed) {\n const err = new Error(\n 'The socket was closed while data was being compressed'\n );\n\n callCallbacks(this, err, cb);\n return;\n }\n\n this._bufferedBytes -= options[kByteLength];\n this._state = DEFAULT;\n options.readOnly = false;\n this.sendFrame(Sender.frame(buf, options), cb);\n this.dequeue();\n });\n }\n\n /**\n * Executes queued send operations.\n *\n * @private\n */\n dequeue() {\n while (this._state === DEFAULT && this._queue.length) {\n const params = this._queue.shift();\n\n this._bufferedBytes -= params[3][kByteLength];\n Reflect.apply(params[0], this, params.slice(1));\n }\n }\n\n /**\n * Enqueues a send operation.\n *\n * @param {Array} params Send operation parameters.\n * @private\n */\n enqueue(params) {\n this._bufferedBytes += params[3][kByteLength];\n this._queue.push(params);\n }\n\n /**\n * Sends a frame.\n *\n * @param {Buffer[]} list The frame to send\n * @param {Function} [cb] Callback\n * @private\n */\n sendFrame(list, cb) {\n if (list.length === 2) {\n this._socket.cork();\n this._socket.write(list[0]);\n this._socket.write(list[1], cb);\n this._socket.uncork();\n } else {\n this._socket.write(list[0], cb);\n }\n }\n}\n\nmodule.exports = Sender;\n\n/**\n * Calls queued callbacks with an error.\n *\n * @param {Sender} sender The `Sender` instance\n * @param {Error} err The error to call the callbacks with\n * @param {Function} [cb] The first callback\n * @private\n */\nfunction callCallbacks(sender, err, cb) {\n if (typeof cb === 'function') cb(err);\n\n for (let i = 0; i < sender._queue.length; i++) {\n const params = sender._queue[i];\n const callback = params[params.length - 1];\n\n if (typeof callback === 'function') callback(err);\n }\n}\n\n/**\n * Handles a `Sender` error.\n *\n * @param {Sender} sender The `Sender` instance\n * @param {Error} err The error\n * @param {Function} [cb] The first pending callback\n * @private\n */\nfunction onError(sender, err, cb) {\n callCallbacks(sender, err, cb);\n sender.onerror(err);\n}\n","'use strict';\n\nconst { Duplex } = require('stream');\n\n/**\n * Emits the `'close'` event on a stream.\n *\n * @param {Duplex} stream The stream.\n * @private\n */\nfunction emitClose(stream) {\n stream.emit('close');\n}\n\n/**\n * The listener of the `'end'` event.\n *\n * @private\n */\nfunction duplexOnEnd() {\n if (!this.destroyed && this._writableState.finished) {\n this.destroy();\n }\n}\n\n/**\n * The listener of the `'error'` event.\n *\n * @param {Error} err The error\n * @private\n */\nfunction duplexOnError(err) {\n this.removeListener('error', duplexOnError);\n this.destroy();\n if (this.listenerCount('error') === 0) {\n // Do not suppress the throwing behavior.\n this.emit('error', err);\n }\n}\n\n/**\n * Wraps a `WebSocket` in a duplex stream.\n *\n * @param {WebSocket} ws The `WebSocket` to wrap\n * @param {Object} [options] The options for the `Duplex` constructor\n * @return {Duplex} The duplex stream\n * @public\n */\nfunction createWebSocketStream(ws, options) {\n let terminateOnDestroy = true;\n\n const duplex = new Duplex({\n ...options,\n autoDestroy: false,\n emitClose: false,\n objectMode: false,\n writableObjectMode: false\n });\n\n ws.on('message', function message(msg, isBinary) {\n const data =\n !isBinary && duplex._readableState.objectMode ? msg.toString() : msg;\n\n if (!duplex.push(data)) ws.pause();\n });\n\n ws.once('error', function error(err) {\n if (duplex.destroyed) return;\n\n // Prevent `ws.terminate()` from being called by `duplex._destroy()`.\n //\n // - If the `'error'` event is emitted before the `'open'` event, then\n // `ws.terminate()` is a noop as no socket is assigned.\n // - Otherwise, the error is re-emitted by the listener of the `'error'`\n // event of the `Receiver` object. The listener already closes the\n // connection by calling `ws.close()`. This allows a close frame to be\n // sent to the other peer. If `ws.terminate()` is called right after this,\n // then the close frame might not be sent.\n terminateOnDestroy = false;\n duplex.destroy(err);\n });\n\n ws.once('close', function close() {\n if (duplex.destroyed) return;\n\n duplex.push(null);\n });\n\n duplex._destroy = function (err, callback) {\n if (ws.readyState === ws.CLOSED) {\n callback(err);\n process.nextTick(emitClose, duplex);\n return;\n }\n\n let called = false;\n\n ws.once('error', function error(err) {\n called = true;\n callback(err);\n });\n\n ws.once('close', function close() {\n if (!called) callback(err);\n process.nextTick(emitClose, duplex);\n });\n\n if (terminateOnDestroy) ws.terminate();\n };\n\n duplex._final = function (callback) {\n if (ws.readyState === ws.CONNECTING) {\n ws.once('open', function open() {\n duplex._final(callback);\n });\n return;\n }\n\n // If the value of the `_socket` property is `null` it means that `ws` is a\n // client websocket and the handshake failed. In fact, when this happens, a\n // socket is never assigned to the websocket. Wait for the `'error'` event\n // that will be emitted by the websocket.\n if (ws._socket === null) return;\n\n if (ws._socket._writableState.finished) {\n callback();\n if (duplex._readableState.endEmitted) duplex.destroy();\n } else {\n ws._socket.once('finish', function finish() {\n // `duplex` is not destroyed here because the `'end'` event will be\n // emitted on `duplex` after this `'finish'` event. The EOF signaling\n // `null` chunk is, in fact, pushed when the websocket emits `'close'`.\n callback();\n });\n ws.close();\n }\n };\n\n duplex._read = function () {\n if (ws.isPaused) ws.resume();\n };\n\n duplex._write = function (chunk, encoding, callback) {\n if (ws.readyState === ws.CONNECTING) {\n ws.once('open', function open() {\n duplex._write(chunk, encoding, callback);\n });\n return;\n }\n\n ws.send(chunk, callback);\n };\n\n duplex.on('end', duplexOnEnd);\n duplex.on('error', duplexOnError);\n return duplex;\n}\n\nmodule.exports = createWebSocketStream;\n","/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^Duplex$\", \"caughtErrors\": \"none\" }] */\n\n'use strict';\n\nconst EventEmitter = require('events');\nconst http = require('http');\nconst { Duplex } = require('stream');\nconst { createHash } = require('crypto');\n\nconst extension = require('./extension');\nconst PerMessageDeflate = require('./permessage-deflate');\nconst subprotocol = require('./subprotocol');\nconst WebSocket = require('./websocket');\nconst { GUID, kWebSocket } = require('./constants');\n\nconst keyRegex = /^[+/0-9A-Za-z]{22}==$/;\n\nconst RUNNING = 0;\nconst CLOSING = 1;\nconst CLOSED = 2;\n\n/**\n * Class representing a WebSocket server.\n *\n * @extends EventEmitter\n */\nclass WebSocketServer extends EventEmitter {\n /**\n * Create a `WebSocketServer` instance.\n *\n * @param {Object} options Configuration options\n * @param {Boolean} [options.allowSynchronousEvents=true] Specifies whether\n * any of the `'message'`, `'ping'`, and `'pong'` events can be emitted\n * multiple times in the same tick\n * @param {Boolean} [options.autoPong=true] Specifies whether or not to\n * automatically send a pong in response to a ping\n * @param {Number} [options.backlog=511] The maximum length of the queue of\n * pending connections\n * @param {Boolean} [options.clientTracking=true] Specifies whether or not to\n * track clients\n * @param {Function} [options.handleProtocols] A hook to handle protocols\n * @param {String} [options.host] The hostname where to bind the server\n * @param {Number} [options.maxPayload=104857600] The maximum allowed message\n * size\n * @param {Boolean} [options.noServer=false] Enable no server mode\n * @param {String} [options.path] Accept only connections matching this path\n * @param {(Boolean|Object)} [options.perMessageDeflate=false] Enable/disable\n * permessage-deflate\n * @param {Number} [options.port] The port where to bind the server\n * @param {(http.Server|https.Server)} [options.server] A pre-created HTTP/S\n * server to use\n * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or\n * not to skip UTF-8 validation for text and close messages\n * @param {Function} [options.verifyClient] A hook to reject connections\n * @param {Function} [options.WebSocket=WebSocket] Specifies the `WebSocket`\n * class to use. It must be the `WebSocket` class or class that extends it\n * @param {Function} [callback] A listener for the `listening` event\n */\n constructor(options, callback) {\n super();\n\n options = {\n allowSynchronousEvents: true,\n autoPong: true,\n maxPayload: 100 * 1024 * 1024,\n skipUTF8Validation: false,\n perMessageDeflate: false,\n handleProtocols: null,\n clientTracking: true,\n verifyClient: null,\n noServer: false,\n backlog: null, // use default (511 as implemented in net.js)\n server: null,\n host: null,\n path: null,\n port: null,\n WebSocket,\n ...options\n };\n\n if (\n (options.port == null && !options.server && !options.noServer) ||\n (options.port != null && (options.server || options.noServer)) ||\n (options.server && options.noServer)\n ) {\n throw new TypeError(\n 'One and only one of the \"port\", \"server\", or \"noServer\" options ' +\n 'must be specified'\n );\n }\n\n if (options.port != null) {\n this._server = http.createServer((req, res) => {\n const body = http.STATUS_CODES[426];\n\n res.writeHead(426, {\n 'Content-Length': body.length,\n 'Content-Type': 'text/plain'\n });\n res.end(body);\n });\n this._server.listen(\n options.port,\n options.host,\n options.backlog,\n callback\n );\n } else if (options.server) {\n this._server = options.server;\n }\n\n if (this._server) {\n const emitConnection = this.emit.bind(this, 'connection');\n\n this._removeListeners = addListeners(this._server, {\n listening: this.emit.bind(this, 'listening'),\n error: this.emit.bind(this, 'error'),\n upgrade: (req, socket, head) => {\n this.handleUpgrade(req, socket, head, emitConnection);\n }\n });\n }\n\n if (options.perMessageDeflate === true) options.perMessageDeflate = {};\n if (options.clientTracking) {\n this.clients = new Set();\n this._shouldEmitClose = false;\n }\n\n this.options = options;\n this._state = RUNNING;\n }\n\n /**\n * Returns the bound address, the address family name, and port of the server\n * as reported by the operating system if listening on an IP socket.\n * If the server is listening on a pipe or UNIX domain socket, the name is\n * returned as a string.\n *\n * @return {(Object|String|null)} The address of the server\n * @public\n */\n address() {\n if (this.options.noServer) {\n throw new Error('The server is operating in \"noServer\" mode');\n }\n\n if (!this._server) return null;\n return this._server.address();\n }\n\n /**\n * Stop the server from accepting new connections and emit the `'close'` event\n * when all existing connections are closed.\n *\n * @param {Function} [cb] A one-time listener for the `'close'` event\n * @public\n */\n close(cb) {\n if (this._state === CLOSED) {\n if (cb) {\n this.once('close', () => {\n cb(new Error('The server is not running'));\n });\n }\n\n process.nextTick(emitClose, this);\n return;\n }\n\n if (cb) this.once('close', cb);\n\n if (this._state === CLOSING) return;\n this._state = CLOSING;\n\n if (this.options.noServer || this.options.server) {\n if (this._server) {\n this._removeListeners();\n this._removeListeners = this._server = null;\n }\n\n if (this.clients) {\n if (!this.clients.size) {\n process.nextTick(emitClose, this);\n } else {\n this._shouldEmitClose = true;\n }\n } else {\n process.nextTick(emitClose, this);\n }\n } else {\n const server = this._server;\n\n this._removeListeners();\n this._removeListeners = this._server = null;\n\n //\n // The HTTP/S server was created internally. Close it, and rely on its\n // `'close'` event.\n //\n server.close(() => {\n emitClose(this);\n });\n }\n }\n\n /**\n * See if a given request should be handled by this server instance.\n *\n * @param {http.IncomingMessage} req Request object to inspect\n * @return {Boolean} `true` if the request is valid, else `false`\n * @public\n */\n shouldHandle(req) {\n if (this.options.path) {\n const index = req.url.indexOf('?');\n const pathname = index !== -1 ? req.url.slice(0, index) : req.url;\n\n if (pathname !== this.options.path) return false;\n }\n\n return true;\n }\n\n /**\n * Handle a HTTP Upgrade request.\n *\n * @param {http.IncomingMessage} req The request object\n * @param {Duplex} socket The network socket between the server and client\n * @param {Buffer} head The first packet of the upgraded stream\n * @param {Function} cb Callback\n * @public\n */\n handleUpgrade(req, socket, head, cb) {\n socket.on('error', socketOnError);\n\n const key = req.headers['sec-websocket-key'];\n const upgrade = req.headers.upgrade;\n const version = +req.headers['sec-websocket-version'];\n\n if (req.method !== 'GET') {\n const message = 'Invalid HTTP method';\n abortHandshakeOrEmitwsClientError(this, req, socket, 405, message);\n return;\n }\n\n if (upgrade === undefined || upgrade.toLowerCase() !== 'websocket') {\n const message = 'Invalid Upgrade header';\n abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n return;\n }\n\n if (key === undefined || !keyRegex.test(key)) {\n const message = 'Missing or invalid Sec-WebSocket-Key header';\n abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n return;\n }\n\n if (version !== 8 && version !== 13) {\n const message = 'Missing or invalid Sec-WebSocket-Version header';\n abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n return;\n }\n\n if (!this.shouldHandle(req)) {\n abortHandshake(socket, 400);\n return;\n }\n\n const secWebSocketProtocol = req.headers['sec-websocket-protocol'];\n let protocols = new Set();\n\n if (secWebSocketProtocol !== undefined) {\n try {\n protocols = subprotocol.parse(secWebSocketProtocol);\n } catch (err) {\n const message = 'Invalid Sec-WebSocket-Protocol header';\n abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n return;\n }\n }\n\n const secWebSocketExtensions = req.headers['sec-websocket-extensions'];\n const extensions = {};\n\n if (\n this.options.perMessageDeflate &&\n secWebSocketExtensions !== undefined\n ) {\n const perMessageDeflate = new PerMessageDeflate(\n this.options.perMessageDeflate,\n true,\n this.options.maxPayload\n );\n\n try {\n const offers = extension.parse(secWebSocketExtensions);\n\n if (offers[PerMessageDeflate.extensionName]) {\n perMessageDeflate.accept(offers[PerMessageDeflate.extensionName]);\n extensions[PerMessageDeflate.extensionName] = perMessageDeflate;\n }\n } catch (err) {\n const message =\n 'Invalid or unacceptable Sec-WebSocket-Extensions header';\n abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n return;\n }\n }\n\n //\n // Optionally call external client verification handler.\n //\n if (this.options.verifyClient) {\n const info = {\n origin:\n req.headers[`${version === 8 ? 'sec-websocket-origin' : 'origin'}`],\n secure: !!(req.socket.authorized || req.socket.encrypted),\n req\n };\n\n if (this.options.verifyClient.length === 2) {\n this.options.verifyClient(info, (verified, code, message, headers) => {\n if (!verified) {\n return abortHandshake(socket, code || 401, message, headers);\n }\n\n this.completeUpgrade(\n extensions,\n key,\n protocols,\n req,\n socket,\n head,\n cb\n );\n });\n return;\n }\n\n if (!this.options.verifyClient(info)) return abortHandshake(socket, 401);\n }\n\n this.completeUpgrade(extensions, key, protocols, req, socket, head, cb);\n }\n\n /**\n * Upgrade the connection to WebSocket.\n *\n * @param {Object} extensions The accepted extensions\n * @param {String} key The value of the `Sec-WebSocket-Key` header\n * @param {Set} protocols The subprotocols\n * @param {http.IncomingMessage} req The request object\n * @param {Duplex} socket The network socket between the server and client\n * @param {Buffer} head The first packet of the upgraded stream\n * @param {Function} cb Callback\n * @throws {Error} If called more than once with the same socket\n * @private\n */\n completeUpgrade(extensions, key, protocols, req, socket, head, cb) {\n //\n // Destroy the socket if the client has already sent a FIN packet.\n //\n if (!socket.readable || !socket.writable) return socket.destroy();\n\n if (socket[kWebSocket]) {\n throw new Error(\n 'server.handleUpgrade() was called more than once with the same ' +\n 'socket, possibly due to a misconfiguration'\n );\n }\n\n if (this._state > RUNNING) return abortHandshake(socket, 503);\n\n const digest = createHash('sha1')\n .update(key + GUID)\n .digest('base64');\n\n const headers = [\n 'HTTP/1.1 101 Switching Protocols',\n 'Upgrade: websocket',\n 'Connection: Upgrade',\n `Sec-WebSocket-Accept: ${digest}`\n ];\n\n const ws = new this.options.WebSocket(null, undefined, this.options);\n\n if (protocols.size) {\n //\n // Optionally call external protocol selection handler.\n //\n const protocol = this.options.handleProtocols\n ? this.options.handleProtocols(protocols, req)\n : protocols.values().next().value;\n\n if (protocol) {\n headers.push(`Sec-WebSocket-Protocol: ${protocol}`);\n ws._protocol = protocol;\n }\n }\n\n if (extensions[PerMessageDeflate.extensionName]) {\n const params = extensions[PerMessageDeflate.extensionName].params;\n const value = extension.format({\n [PerMessageDeflate.extensionName]: [params]\n });\n headers.push(`Sec-WebSocket-Extensions: ${value}`);\n ws._extensions = extensions;\n }\n\n //\n // Allow external modification/inspection of handshake headers.\n //\n this.emit('headers', headers, req);\n\n socket.write(headers.concat('\\r\\n').join('\\r\\n'));\n socket.removeListener('error', socketOnError);\n\n ws.setSocket(socket, head, {\n allowSynchronousEvents: this.options.allowSynchronousEvents,\n maxPayload: this.options.maxPayload,\n skipUTF8Validation: this.options.skipUTF8Validation\n });\n\n if (this.clients) {\n this.clients.add(ws);\n ws.on('close', () => {\n this.clients.delete(ws);\n\n if (this._shouldEmitClose && !this.clients.size) {\n process.nextTick(emitClose, this);\n }\n });\n }\n\n cb(ws, req);\n }\n}\n\nmodule.exports = WebSocketServer;\n\n/**\n * Add event listeners on an `EventEmitter` using a map of \n * pairs.\n *\n * @param {EventEmitter} server The event emitter\n * @param {Object.} map The listeners to add\n * @return {Function} A function that will remove the added listeners when\n * called\n * @private\n */\nfunction addListeners(server, map) {\n for (const event of Object.keys(map)) server.on(event, map[event]);\n\n return function removeListeners() {\n for (const event of Object.keys(map)) {\n server.removeListener(event, map[event]);\n }\n };\n}\n\n/**\n * Emit a `'close'` event on an `EventEmitter`.\n *\n * @param {EventEmitter} server The event emitter\n * @private\n */\nfunction emitClose(server) {\n server._state = CLOSED;\n server.emit('close');\n}\n\n/**\n * Handle socket errors.\n *\n * @private\n */\nfunction socketOnError() {\n this.destroy();\n}\n\n/**\n * Close the connection when preconditions are not fulfilled.\n *\n * @param {Duplex} socket The socket of the upgrade request\n * @param {Number} code The HTTP response status code\n * @param {String} [message] The HTTP response body\n * @param {Object} [headers] Additional HTTP response headers\n * @private\n */\nfunction abortHandshake(socket, code, message, headers) {\n //\n // The socket is writable unless the user destroyed or ended it before calling\n // `server.handleUpgrade()` or in the `verifyClient` function, which is a user\n // error. Handling this does not make much sense as the worst that can happen\n // is that some of the data written by the user might be discarded due to the\n // call to `socket.end()` below, which triggers an `'error'` event that in\n // turn causes the socket to be destroyed.\n //\n message = message || http.STATUS_CODES[code];\n headers = {\n Connection: 'close',\n 'Content-Type': 'text/html',\n 'Content-Length': Buffer.byteLength(message),\n ...headers\n };\n\n socket.once('finish', socket.destroy);\n\n socket.end(\n `HTTP/1.1 ${code} ${http.STATUS_CODES[code]}\\r\\n` +\n Object.keys(headers)\n .map((h) => `${h}: ${headers[h]}`)\n .join('\\r\\n') +\n '\\r\\n\\r\\n' +\n message\n );\n}\n\n/**\n * Emit a `'wsClientError'` event on a `WebSocketServer` if there is at least\n * one listener for it, otherwise call `abortHandshake()`.\n *\n * @param {WebSocketServer} server The WebSocket server\n * @param {http.IncomingMessage} req The request object\n * @param {Duplex} socket The socket of the upgrade request\n * @param {Number} code The HTTP response status code\n * @param {String} message The HTTP response body\n * @private\n */\nfunction abortHandshakeOrEmitwsClientError(server, req, socket, code, message) {\n if (server.listenerCount('wsClientError')) {\n const err = new Error(message);\n Error.captureStackTrace(err, abortHandshakeOrEmitwsClientError);\n\n server.emit('wsClientError', err, socket, req);\n } else {\n abortHandshake(socket, code, message);\n }\n}\n","'use strict';\n\nconst { tokenChars } = require('./validation');\n\n/**\n * Adds an offer to the map of extension offers or a parameter to the map of\n * parameters.\n *\n * @param {Object} dest The map of extension offers or parameters\n * @param {String} name The extension or parameter name\n * @param {(Object|Boolean|String)} elem The extension parameters or the\n * parameter value\n * @private\n */\nfunction push(dest, name, elem) {\n if (dest[name] === undefined) dest[name] = [elem];\n else dest[name].push(elem);\n}\n\n/**\n * Parses the `Sec-WebSocket-Extensions` header into an object.\n *\n * @param {String} header The field value of the header\n * @return {Object} The parsed object\n * @public\n */\nfunction parse(header) {\n const offers = Object.create(null);\n let params = Object.create(null);\n let mustUnescape = false;\n let isEscaping = false;\n let inQuotes = false;\n let extensionName;\n let paramName;\n let start = -1;\n let code = -1;\n let end = -1;\n let i = 0;\n\n for (; i < header.length; i++) {\n code = header.charCodeAt(i);\n\n if (extensionName === undefined) {\n if (end === -1 && tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (\n i !== 0 &&\n (code === 0x20 /* ' ' */ || code === 0x09) /* '\\t' */\n ) {\n if (end === -1 && start !== -1) end = i;\n } else if (code === 0x3b /* ';' */ || code === 0x2c /* ',' */) {\n if (start === -1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n\n if (end === -1) end = i;\n const name = header.slice(start, end);\n if (code === 0x2c) {\n push(offers, name, params);\n params = Object.create(null);\n } else {\n extensionName = name;\n }\n\n start = end = -1;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n } else if (paramName === undefined) {\n if (end === -1 && tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (code === 0x20 || code === 0x09) {\n if (end === -1 && start !== -1) end = i;\n } else if (code === 0x3b || code === 0x2c) {\n if (start === -1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n\n if (end === -1) end = i;\n push(params, header.slice(start, end), true);\n if (code === 0x2c) {\n push(offers, extensionName, params);\n params = Object.create(null);\n extensionName = undefined;\n }\n\n start = end = -1;\n } else if (code === 0x3d /* '=' */ && start !== -1 && end === -1) {\n paramName = header.slice(start, i);\n start = end = -1;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n } else {\n //\n // The value of a quoted-string after unescaping must conform to the\n // token ABNF, so only token characters are valid.\n // Ref: https://tools.ietf.org/html/rfc6455#section-9.1\n //\n if (isEscaping) {\n if (tokenChars[code] !== 1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n if (start === -1) start = i;\n else if (!mustUnescape) mustUnescape = true;\n isEscaping = false;\n } else if (inQuotes) {\n if (tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (code === 0x22 /* '\"' */ && start !== -1) {\n inQuotes = false;\n end = i;\n } else if (code === 0x5c /* '\\' */) {\n isEscaping = true;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n } else if (code === 0x22 && header.charCodeAt(i - 1) === 0x3d) {\n inQuotes = true;\n } else if (end === -1 && tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (start !== -1 && (code === 0x20 || code === 0x09)) {\n if (end === -1) end = i;\n } else if (code === 0x3b || code === 0x2c) {\n if (start === -1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n\n if (end === -1) end = i;\n let value = header.slice(start, end);\n if (mustUnescape) {\n value = value.replace(/\\\\/g, '');\n mustUnescape = false;\n }\n push(params, paramName, value);\n if (code === 0x2c) {\n push(offers, extensionName, params);\n params = Object.create(null);\n extensionName = undefined;\n }\n\n paramName = undefined;\n start = end = -1;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n }\n }\n\n if (start === -1 || inQuotes || code === 0x20 || code === 0x09) {\n throw new SyntaxError('Unexpected end of input');\n }\n\n if (end === -1) end = i;\n const token = header.slice(start, end);\n if (extensionName === undefined) {\n push(offers, token, params);\n } else {\n if (paramName === undefined) {\n push(params, token, true);\n } else if (mustUnescape) {\n push(params, paramName, token.replace(/\\\\/g, ''));\n } else {\n push(params, paramName, token);\n }\n push(offers, extensionName, params);\n }\n\n return offers;\n}\n\n/**\n * Builds the `Sec-WebSocket-Extensions` header field value.\n *\n * @param {Object} extensions The map of extensions and parameters to format\n * @return {String} A string representing the given object\n * @public\n */\nfunction format(extensions) {\n return Object.keys(extensions)\n .map((extension) => {\n let configurations = extensions[extension];\n if (!Array.isArray(configurations)) configurations = [configurations];\n return configurations\n .map((params) => {\n return [extension]\n .concat(\n Object.keys(params).map((k) => {\n let values = params[k];\n if (!Array.isArray(values)) values = [values];\n return values\n .map((v) => (v === true ? k : `${k}=${v}`))\n .join('; ');\n })\n )\n .join('; ');\n })\n .join(', ');\n })\n .join(', ');\n}\n\nmodule.exports = { format, parse };\n","'use strict';\n\nconst { tokenChars } = require('./validation');\n\n/**\n * Parses the `Sec-WebSocket-Protocol` header into a set of subprotocol names.\n *\n * @param {String} header The field value of the header\n * @return {Set} The subprotocol names\n * @public\n */\nfunction parse(header) {\n const protocols = new Set();\n let start = -1;\n let end = -1;\n let i = 0;\n\n for (i; i < header.length; i++) {\n const code = header.charCodeAt(i);\n\n if (end === -1 && tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (\n i !== 0 &&\n (code === 0x20 /* ' ' */ || code === 0x09) /* '\\t' */\n ) {\n if (end === -1 && start !== -1) end = i;\n } else if (code === 0x2c /* ',' */) {\n if (start === -1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n\n if (end === -1) end = i;\n\n const protocol = header.slice(start, end);\n\n if (protocols.has(protocol)) {\n throw new SyntaxError(`The \"${protocol}\" subprotocol is duplicated`);\n }\n\n protocols.add(protocol);\n start = end = -1;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n }\n\n if (start === -1 || end !== -1) {\n throw new SyntaxError('Unexpected end of input');\n }\n\n const protocol = header.slice(start, i);\n\n if (protocols.has(protocol)) {\n throw new SyntaxError(`The \"${protocol}\" subprotocol is duplicated`);\n }\n\n protocols.add(protocol);\n return protocols;\n}\n\nmodule.exports = { parse };\n","/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^Duplex|Readable$\", \"caughtErrors\": \"none\" }] */\n\n'use strict';\n\nconst EventEmitter = require('events');\nconst https = require('https');\nconst http = require('http');\nconst net = require('net');\nconst tls = require('tls');\nconst { randomBytes, createHash } = require('crypto');\nconst { Duplex, Readable } = require('stream');\nconst { URL } = require('url');\n\nconst PerMessageDeflate = require('./permessage-deflate');\nconst Receiver = require('./receiver');\nconst Sender = require('./sender');\nconst { isBlob } = require('./validation');\n\nconst {\n BINARY_TYPES,\n EMPTY_BUFFER,\n GUID,\n kForOnEventAttribute,\n kListener,\n kStatusCode,\n kWebSocket,\n NOOP\n} = require('./constants');\nconst {\n EventTarget: { addEventListener, removeEventListener }\n} = require('./event-target');\nconst { format, parse } = require('./extension');\nconst { toBuffer } = require('./buffer-util');\n\nconst closeTimeout = 30 * 1000;\nconst kAborted = Symbol('kAborted');\nconst protocolVersions = [8, 13];\nconst readyStates = ['CONNECTING', 'OPEN', 'CLOSING', 'CLOSED'];\nconst subprotocolRegex = /^[!#$%&'*+\\-.0-9A-Z^_`|a-z~]+$/;\n\n/**\n * Class representing a WebSocket.\n *\n * @extends EventEmitter\n */\nclass WebSocket extends EventEmitter {\n /**\n * Create a new `WebSocket`.\n *\n * @param {(String|URL)} address The URL to which to connect\n * @param {(String|String[])} [protocols] The subprotocols\n * @param {Object} [options] Connection options\n */\n constructor(address, protocols, options) {\n super();\n\n this._binaryType = BINARY_TYPES[0];\n this._closeCode = 1006;\n this._closeFrameReceived = false;\n this._closeFrameSent = false;\n this._closeMessage = EMPTY_BUFFER;\n this._closeTimer = null;\n this._errorEmitted = false;\n this._extensions = {};\n this._paused = false;\n this._protocol = '';\n this._readyState = WebSocket.CONNECTING;\n this._receiver = null;\n this._sender = null;\n this._socket = null;\n\n if (address !== null) {\n this._bufferedAmount = 0;\n this._isServer = false;\n this._redirects = 0;\n\n if (protocols === undefined) {\n protocols = [];\n } else if (!Array.isArray(protocols)) {\n if (typeof protocols === 'object' && protocols !== null) {\n options = protocols;\n protocols = [];\n } else {\n protocols = [protocols];\n }\n }\n\n initAsClient(this, address, protocols, options);\n } else {\n this._autoPong = options.autoPong;\n this._isServer = true;\n }\n }\n\n /**\n * For historical reasons, the custom \"nodebuffer\" type is used by the default\n * instead of \"blob\".\n *\n * @type {String}\n */\n get binaryType() {\n return this._binaryType;\n }\n\n set binaryType(type) {\n if (!BINARY_TYPES.includes(type)) return;\n\n this._binaryType = type;\n\n //\n // Allow to change `binaryType` on the fly.\n //\n if (this._receiver) this._receiver._binaryType = type;\n }\n\n /**\n * @type {Number}\n */\n get bufferedAmount() {\n if (!this._socket) return this._bufferedAmount;\n\n return this._socket._writableState.length + this._sender._bufferedBytes;\n }\n\n /**\n * @type {String}\n */\n get extensions() {\n return Object.keys(this._extensions).join();\n }\n\n /**\n * @type {Boolean}\n */\n get isPaused() {\n return this._paused;\n }\n\n /**\n * @type {Function}\n */\n /* istanbul ignore next */\n get onclose() {\n return null;\n }\n\n /**\n * @type {Function}\n */\n /* istanbul ignore next */\n get onerror() {\n return null;\n }\n\n /**\n * @type {Function}\n */\n /* istanbul ignore next */\n get onopen() {\n return null;\n }\n\n /**\n * @type {Function}\n */\n /* istanbul ignore next */\n get onmessage() {\n return null;\n }\n\n /**\n * @type {String}\n */\n get protocol() {\n return this._protocol;\n }\n\n /**\n * @type {Number}\n */\n get readyState() {\n return this._readyState;\n }\n\n /**\n * @type {String}\n */\n get url() {\n return this._url;\n }\n\n /**\n * Set up the socket and the internal resources.\n *\n * @param {Duplex} socket The network socket between the server and client\n * @param {Buffer} head The first packet of the upgraded stream\n * @param {Object} options Options object\n * @param {Boolean} [options.allowSynchronousEvents=false] Specifies whether\n * any of the `'message'`, `'ping'`, and `'pong'` events can be emitted\n * multiple times in the same tick\n * @param {Function} [options.generateMask] The function used to generate the\n * masking key\n * @param {Number} [options.maxPayload=0] The maximum allowed message size\n * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or\n * not to skip UTF-8 validation for text and close messages\n * @private\n */\n setSocket(socket, head, options) {\n const receiver = new Receiver({\n allowSynchronousEvents: options.allowSynchronousEvents,\n binaryType: this.binaryType,\n extensions: this._extensions,\n isServer: this._isServer,\n maxPayload: options.maxPayload,\n skipUTF8Validation: options.skipUTF8Validation\n });\n\n const sender = new Sender(socket, this._extensions, options.generateMask);\n\n this._receiver = receiver;\n this._sender = sender;\n this._socket = socket;\n\n receiver[kWebSocket] = this;\n sender[kWebSocket] = this;\n socket[kWebSocket] = this;\n\n receiver.on('conclude', receiverOnConclude);\n receiver.on('drain', receiverOnDrain);\n receiver.on('error', receiverOnError);\n receiver.on('message', receiverOnMessage);\n receiver.on('ping', receiverOnPing);\n receiver.on('pong', receiverOnPong);\n\n sender.onerror = senderOnError;\n\n //\n // These methods may not be available if `socket` is just a `Duplex`.\n //\n if (socket.setTimeout) socket.setTimeout(0);\n if (socket.setNoDelay) socket.setNoDelay();\n\n if (head.length > 0) socket.unshift(head);\n\n socket.on('close', socketOnClose);\n socket.on('data', socketOnData);\n socket.on('end', socketOnEnd);\n socket.on('error', socketOnError);\n\n this._readyState = WebSocket.OPEN;\n this.emit('open');\n }\n\n /**\n * Emit the `'close'` event.\n *\n * @private\n */\n emitClose() {\n if (!this._socket) {\n this._readyState = WebSocket.CLOSED;\n this.emit('close', this._closeCode, this._closeMessage);\n return;\n }\n\n if (this._extensions[PerMessageDeflate.extensionName]) {\n this._extensions[PerMessageDeflate.extensionName].cleanup();\n }\n\n this._receiver.removeAllListeners();\n this._readyState = WebSocket.CLOSED;\n this.emit('close', this._closeCode, this._closeMessage);\n }\n\n /**\n * Start a closing handshake.\n *\n * +----------+ +-----------+ +----------+\n * - - -|ws.close()|-->|close frame|-->|ws.close()|- - -\n * | +----------+ +-----------+ +----------+ |\n * +----------+ +-----------+ |\n * CLOSING |ws.close()|<--|close frame|<--+-----+ CLOSING\n * +----------+ +-----------+ |\n * | | | +---+ |\n * +------------------------+-->|fin| - - - -\n * | +---+ | +---+\n * - - - - -|fin|<---------------------+\n * +---+\n *\n * @param {Number} [code] Status code explaining why the connection is closing\n * @param {(String|Buffer)} [data] The reason why the connection is\n * closing\n * @public\n */\n close(code, data) {\n if (this.readyState === WebSocket.CLOSED) return;\n if (this.readyState === WebSocket.CONNECTING) {\n const msg = 'WebSocket was closed before the connection was established';\n abortHandshake(this, this._req, msg);\n return;\n }\n\n if (this.readyState === WebSocket.CLOSING) {\n if (\n this._closeFrameSent &&\n (this._closeFrameReceived || this._receiver._writableState.errorEmitted)\n ) {\n this._socket.end();\n }\n\n return;\n }\n\n this._readyState = WebSocket.CLOSING;\n this._sender.close(code, data, !this._isServer, (err) => {\n //\n // This error is handled by the `'error'` listener on the socket. We only\n // want to know if the close frame has been sent here.\n //\n if (err) return;\n\n this._closeFrameSent = true;\n\n if (\n this._closeFrameReceived ||\n this._receiver._writableState.errorEmitted\n ) {\n this._socket.end();\n }\n });\n\n setCloseTimer(this);\n }\n\n /**\n * Pause the socket.\n *\n * @public\n */\n pause() {\n if (\n this.readyState === WebSocket.CONNECTING ||\n this.readyState === WebSocket.CLOSED\n ) {\n return;\n }\n\n this._paused = true;\n this._socket.pause();\n }\n\n /**\n * Send a ping.\n *\n * @param {*} [data] The data to send\n * @param {Boolean} [mask] Indicates whether or not to mask `data`\n * @param {Function} [cb] Callback which is executed when the ping is sent\n * @public\n */\n ping(data, mask, cb) {\n if (this.readyState === WebSocket.CONNECTING) {\n throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');\n }\n\n if (typeof data === 'function') {\n cb = data;\n data = mask = undefined;\n } else if (typeof mask === 'function') {\n cb = mask;\n mask = undefined;\n }\n\n if (typeof data === 'number') data = data.toString();\n\n if (this.readyState !== WebSocket.OPEN) {\n sendAfterClose(this, data, cb);\n return;\n }\n\n if (mask === undefined) mask = !this._isServer;\n this._sender.ping(data || EMPTY_BUFFER, mask, cb);\n }\n\n /**\n * Send a pong.\n *\n * @param {*} [data] The data to send\n * @param {Boolean} [mask] Indicates whether or not to mask `data`\n * @param {Function} [cb] Callback which is executed when the pong is sent\n * @public\n */\n pong(data, mask, cb) {\n if (this.readyState === WebSocket.CONNECTING) {\n throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');\n }\n\n if (typeof data === 'function') {\n cb = data;\n data = mask = undefined;\n } else if (typeof mask === 'function') {\n cb = mask;\n mask = undefined;\n }\n\n if (typeof data === 'number') data = data.toString();\n\n if (this.readyState !== WebSocket.OPEN) {\n sendAfterClose(this, data, cb);\n return;\n }\n\n if (mask === undefined) mask = !this._isServer;\n this._sender.pong(data || EMPTY_BUFFER, mask, cb);\n }\n\n /**\n * Resume the socket.\n *\n * @public\n */\n resume() {\n if (\n this.readyState === WebSocket.CONNECTING ||\n this.readyState === WebSocket.CLOSED\n ) {\n return;\n }\n\n this._paused = false;\n if (!this._receiver._writableState.needDrain) this._socket.resume();\n }\n\n /**\n * Send a data message.\n *\n * @param {*} data The message to send\n * @param {Object} [options] Options object\n * @param {Boolean} [options.binary] Specifies whether `data` is binary or\n * text\n * @param {Boolean} [options.compress] Specifies whether or not to compress\n * `data`\n * @param {Boolean} [options.fin=true] Specifies whether the fragment is the\n * last one\n * @param {Boolean} [options.mask] Specifies whether or not to mask `data`\n * @param {Function} [cb] Callback which is executed when data is written out\n * @public\n */\n send(data, options, cb) {\n if (this.readyState === WebSocket.CONNECTING) {\n throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');\n }\n\n if (typeof options === 'function') {\n cb = options;\n options = {};\n }\n\n if (typeof data === 'number') data = data.toString();\n\n if (this.readyState !== WebSocket.OPEN) {\n sendAfterClose(this, data, cb);\n return;\n }\n\n const opts = {\n binary: typeof data !== 'string',\n mask: !this._isServer,\n compress: true,\n fin: true,\n ...options\n };\n\n if (!this._extensions[PerMessageDeflate.extensionName]) {\n opts.compress = false;\n }\n\n this._sender.send(data || EMPTY_BUFFER, opts, cb);\n }\n\n /**\n * Forcibly close the connection.\n *\n * @public\n */\n terminate() {\n if (this.readyState === WebSocket.CLOSED) return;\n if (this.readyState === WebSocket.CONNECTING) {\n const msg = 'WebSocket was closed before the connection was established';\n abortHandshake(this, this._req, msg);\n return;\n }\n\n if (this._socket) {\n this._readyState = WebSocket.CLOSING;\n this._socket.destroy();\n }\n }\n}\n\n/**\n * @constant {Number} CONNECTING\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'CONNECTING', {\n enumerable: true,\n value: readyStates.indexOf('CONNECTING')\n});\n\n/**\n * @constant {Number} CONNECTING\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'CONNECTING', {\n enumerable: true,\n value: readyStates.indexOf('CONNECTING')\n});\n\n/**\n * @constant {Number} OPEN\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'OPEN', {\n enumerable: true,\n value: readyStates.indexOf('OPEN')\n});\n\n/**\n * @constant {Number} OPEN\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'OPEN', {\n enumerable: true,\n value: readyStates.indexOf('OPEN')\n});\n\n/**\n * @constant {Number} CLOSING\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'CLOSING', {\n enumerable: true,\n value: readyStates.indexOf('CLOSING')\n});\n\n/**\n * @constant {Number} CLOSING\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'CLOSING', {\n enumerable: true,\n value: readyStates.indexOf('CLOSING')\n});\n\n/**\n * @constant {Number} CLOSED\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'CLOSED', {\n enumerable: true,\n value: readyStates.indexOf('CLOSED')\n});\n\n/**\n * @constant {Number} CLOSED\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'CLOSED', {\n enumerable: true,\n value: readyStates.indexOf('CLOSED')\n});\n\n[\n 'binaryType',\n 'bufferedAmount',\n 'extensions',\n 'isPaused',\n 'protocol',\n 'readyState',\n 'url'\n].forEach((property) => {\n Object.defineProperty(WebSocket.prototype, property, { enumerable: true });\n});\n\n//\n// Add the `onopen`, `onerror`, `onclose`, and `onmessage` attributes.\n// See https://html.spec.whatwg.org/multipage/comms.html#the-websocket-interface\n//\n['open', 'error', 'close', 'message'].forEach((method) => {\n Object.defineProperty(WebSocket.prototype, `on${method}`, {\n enumerable: true,\n get() {\n for (const listener of this.listeners(method)) {\n if (listener[kForOnEventAttribute]) return listener[kListener];\n }\n\n return null;\n },\n set(handler) {\n for (const listener of this.listeners(method)) {\n if (listener[kForOnEventAttribute]) {\n this.removeListener(method, listener);\n break;\n }\n }\n\n if (typeof handler !== 'function') return;\n\n this.addEventListener(method, handler, {\n [kForOnEventAttribute]: true\n });\n }\n });\n});\n\nWebSocket.prototype.addEventListener = addEventListener;\nWebSocket.prototype.removeEventListener = removeEventListener;\n\nmodule.exports = WebSocket;\n\n/**\n * Initialize a WebSocket client.\n *\n * @param {WebSocket} websocket The client to initialize\n * @param {(String|URL)} address The URL to which to connect\n * @param {Array} protocols The subprotocols\n * @param {Object} [options] Connection options\n * @param {Boolean} [options.allowSynchronousEvents=true] Specifies whether any\n * of the `'message'`, `'ping'`, and `'pong'` events can be emitted multiple\n * times in the same tick\n * @param {Boolean} [options.autoPong=true] Specifies whether or not to\n * automatically send a pong in response to a ping\n * @param {Function} [options.finishRequest] A function which can be used to\n * customize the headers of each http request before it is sent\n * @param {Boolean} [options.followRedirects=false] Whether or not to follow\n * redirects\n * @param {Function} [options.generateMask] The function used to generate the\n * masking key\n * @param {Number} [options.handshakeTimeout] Timeout in milliseconds for the\n * handshake request\n * @param {Number} [options.maxPayload=104857600] The maximum allowed message\n * size\n * @param {Number} [options.maxRedirects=10] The maximum number of redirects\n * allowed\n * @param {String} [options.origin] Value of the `Origin` or\n * `Sec-WebSocket-Origin` header\n * @param {(Boolean|Object)} [options.perMessageDeflate=true] Enable/disable\n * permessage-deflate\n * @param {Number} [options.protocolVersion=13] Value of the\n * `Sec-WebSocket-Version` header\n * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or\n * not to skip UTF-8 validation for text and close messages\n * @private\n */\nfunction initAsClient(websocket, address, protocols, options) {\n const opts = {\n allowSynchronousEvents: true,\n autoPong: true,\n protocolVersion: protocolVersions[1],\n maxPayload: 100 * 1024 * 1024,\n skipUTF8Validation: false,\n perMessageDeflate: true,\n followRedirects: false,\n maxRedirects: 10,\n ...options,\n socketPath: undefined,\n hostname: undefined,\n protocol: undefined,\n timeout: undefined,\n method: 'GET',\n host: undefined,\n path: undefined,\n port: undefined\n };\n\n websocket._autoPong = opts.autoPong;\n\n if (!protocolVersions.includes(opts.protocolVersion)) {\n throw new RangeError(\n `Unsupported protocol version: ${opts.protocolVersion} ` +\n `(supported versions: ${protocolVersions.join(', ')})`\n );\n }\n\n let parsedUrl;\n\n if (address instanceof URL) {\n parsedUrl = address;\n } else {\n try {\n parsedUrl = new URL(address);\n } catch (e) {\n throw new SyntaxError(`Invalid URL: ${address}`);\n }\n }\n\n if (parsedUrl.protocol === 'http:') {\n parsedUrl.protocol = 'ws:';\n } else if (parsedUrl.protocol === 'https:') {\n parsedUrl.protocol = 'wss:';\n }\n\n websocket._url = parsedUrl.href;\n\n const isSecure = parsedUrl.protocol === 'wss:';\n const isIpcUrl = parsedUrl.protocol === 'ws+unix:';\n let invalidUrlMessage;\n\n if (parsedUrl.protocol !== 'ws:' && !isSecure && !isIpcUrl) {\n invalidUrlMessage =\n 'The URL\\'s protocol must be one of \"ws:\", \"wss:\", ' +\n '\"http:\", \"https\", or \"ws+unix:\"';\n } else if (isIpcUrl && !parsedUrl.pathname) {\n invalidUrlMessage = \"The URL's pathname is empty\";\n } else if (parsedUrl.hash) {\n invalidUrlMessage = 'The URL contains a fragment identifier';\n }\n\n if (invalidUrlMessage) {\n const err = new SyntaxError(invalidUrlMessage);\n\n if (websocket._redirects === 0) {\n throw err;\n } else {\n emitErrorAndClose(websocket, err);\n return;\n }\n }\n\n const defaultPort = isSecure ? 443 : 80;\n const key = randomBytes(16).toString('base64');\n const request = isSecure ? https.request : http.request;\n const protocolSet = new Set();\n let perMessageDeflate;\n\n opts.createConnection =\n opts.createConnection || (isSecure ? tlsConnect : netConnect);\n opts.defaultPort = opts.defaultPort || defaultPort;\n opts.port = parsedUrl.port || defaultPort;\n opts.host = parsedUrl.hostname.startsWith('[')\n ? parsedUrl.hostname.slice(1, -1)\n : parsedUrl.hostname;\n opts.headers = {\n ...opts.headers,\n 'Sec-WebSocket-Version': opts.protocolVersion,\n 'Sec-WebSocket-Key': key,\n Connection: 'Upgrade',\n Upgrade: 'websocket'\n };\n opts.path = parsedUrl.pathname + parsedUrl.search;\n opts.timeout = opts.handshakeTimeout;\n\n if (opts.perMessageDeflate) {\n perMessageDeflate = new PerMessageDeflate(\n opts.perMessageDeflate !== true ? opts.perMessageDeflate : {},\n false,\n opts.maxPayload\n );\n opts.headers['Sec-WebSocket-Extensions'] = format({\n [PerMessageDeflate.extensionName]: perMessageDeflate.offer()\n });\n }\n if (protocols.length) {\n for (const protocol of protocols) {\n if (\n typeof protocol !== 'string' ||\n !subprotocolRegex.test(protocol) ||\n protocolSet.has(protocol)\n ) {\n throw new SyntaxError(\n 'An invalid or duplicated subprotocol was specified'\n );\n }\n\n protocolSet.add(protocol);\n }\n\n opts.headers['Sec-WebSocket-Protocol'] = protocols.join(',');\n }\n if (opts.origin) {\n if (opts.protocolVersion < 13) {\n opts.headers['Sec-WebSocket-Origin'] = opts.origin;\n } else {\n opts.headers.Origin = opts.origin;\n }\n }\n if (parsedUrl.username || parsedUrl.password) {\n opts.auth = `${parsedUrl.username}:${parsedUrl.password}`;\n }\n\n if (isIpcUrl) {\n const parts = opts.path.split(':');\n\n opts.socketPath = parts[0];\n opts.path = parts[1];\n }\n\n let req;\n\n if (opts.followRedirects) {\n if (websocket._redirects === 0) {\n websocket._originalIpc = isIpcUrl;\n websocket._originalSecure = isSecure;\n websocket._originalHostOrSocketPath = isIpcUrl\n ? opts.socketPath\n : parsedUrl.host;\n\n const headers = options && options.headers;\n\n //\n // Shallow copy the user provided options so that headers can be changed\n // without mutating the original object.\n //\n options = { ...options, headers: {} };\n\n if (headers) {\n for (const [key, value] of Object.entries(headers)) {\n options.headers[key.toLowerCase()] = value;\n }\n }\n } else if (websocket.listenerCount('redirect') === 0) {\n const isSameHost = isIpcUrl\n ? websocket._originalIpc\n ? opts.socketPath === websocket._originalHostOrSocketPath\n : false\n : websocket._originalIpc\n ? false\n : parsedUrl.host === websocket._originalHostOrSocketPath;\n\n if (!isSameHost || (websocket._originalSecure && !isSecure)) {\n //\n // Match curl 7.77.0 behavior and drop the following headers. These\n // headers are also dropped when following a redirect to a subdomain.\n //\n delete opts.headers.authorization;\n delete opts.headers.cookie;\n\n if (!isSameHost) delete opts.headers.host;\n\n opts.auth = undefined;\n }\n }\n\n //\n // Match curl 7.77.0 behavior and make the first `Authorization` header win.\n // If the `Authorization` header is set, then there is nothing to do as it\n // will take precedence.\n //\n if (opts.auth && !options.headers.authorization) {\n options.headers.authorization =\n 'Basic ' + Buffer.from(opts.auth).toString('base64');\n }\n\n req = websocket._req = request(opts);\n\n if (websocket._redirects) {\n //\n // Unlike what is done for the `'upgrade'` event, no early exit is\n // triggered here if the user calls `websocket.close()` or\n // `websocket.terminate()` from a listener of the `'redirect'` event. This\n // is because the user can also call `request.destroy()` with an error\n // before calling `websocket.close()` or `websocket.terminate()` and this\n // would result in an error being emitted on the `request` object with no\n // `'error'` event listeners attached.\n //\n websocket.emit('redirect', websocket.url, req);\n }\n } else {\n req = websocket._req = request(opts);\n }\n\n if (opts.timeout) {\n req.on('timeout', () => {\n abortHandshake(websocket, req, 'Opening handshake has timed out');\n });\n }\n\n req.on('error', (err) => {\n if (req === null || req[kAborted]) return;\n\n req = websocket._req = null;\n emitErrorAndClose(websocket, err);\n });\n\n req.on('response', (res) => {\n const location = res.headers.location;\n const statusCode = res.statusCode;\n\n if (\n location &&\n opts.followRedirects &&\n statusCode >= 300 &&\n statusCode < 400\n ) {\n if (++websocket._redirects > opts.maxRedirects) {\n abortHandshake(websocket, req, 'Maximum redirects exceeded');\n return;\n }\n\n req.abort();\n\n let addr;\n\n try {\n addr = new URL(location, address);\n } catch (e) {\n const err = new SyntaxError(`Invalid URL: ${location}`);\n emitErrorAndClose(websocket, err);\n return;\n }\n\n initAsClient(websocket, addr, protocols, options);\n } else if (!websocket.emit('unexpected-response', req, res)) {\n abortHandshake(\n websocket,\n req,\n `Unexpected server response: ${res.statusCode}`\n );\n }\n });\n\n req.on('upgrade', (res, socket, head) => {\n websocket.emit('upgrade', res);\n\n //\n // The user may have closed the connection from a listener of the\n // `'upgrade'` event.\n //\n if (websocket.readyState !== WebSocket.CONNECTING) return;\n\n req = websocket._req = null;\n\n const upgrade = res.headers.upgrade;\n\n if (upgrade === undefined || upgrade.toLowerCase() !== 'websocket') {\n abortHandshake(websocket, socket, 'Invalid Upgrade header');\n return;\n }\n\n const digest = createHash('sha1')\n .update(key + GUID)\n .digest('base64');\n\n if (res.headers['sec-websocket-accept'] !== digest) {\n abortHandshake(websocket, socket, 'Invalid Sec-WebSocket-Accept header');\n return;\n }\n\n const serverProt = res.headers['sec-websocket-protocol'];\n let protError;\n\n if (serverProt !== undefined) {\n if (!protocolSet.size) {\n protError = 'Server sent a subprotocol but none was requested';\n } else if (!protocolSet.has(serverProt)) {\n protError = 'Server sent an invalid subprotocol';\n }\n } else if (protocolSet.size) {\n protError = 'Server sent no subprotocol';\n }\n\n if (protError) {\n abortHandshake(websocket, socket, protError);\n return;\n }\n\n if (serverProt) websocket._protocol = serverProt;\n\n const secWebSocketExtensions = res.headers['sec-websocket-extensions'];\n\n if (secWebSocketExtensions !== undefined) {\n if (!perMessageDeflate) {\n const message =\n 'Server sent a Sec-WebSocket-Extensions header but no extension ' +\n 'was requested';\n abortHandshake(websocket, socket, message);\n return;\n }\n\n let extensions;\n\n try {\n extensions = parse(secWebSocketExtensions);\n } catch (err) {\n const message = 'Invalid Sec-WebSocket-Extensions header';\n abortHandshake(websocket, socket, message);\n return;\n }\n\n const extensionNames = Object.keys(extensions);\n\n if (\n extensionNames.length !== 1 ||\n extensionNames[0] !== PerMessageDeflate.extensionName\n ) {\n const message = 'Server indicated an extension that was not requested';\n abortHandshake(websocket, socket, message);\n return;\n }\n\n try {\n perMessageDeflate.accept(extensions[PerMessageDeflate.extensionName]);\n } catch (err) {\n const message = 'Invalid Sec-WebSocket-Extensions header';\n abortHandshake(websocket, socket, message);\n return;\n }\n\n websocket._extensions[PerMessageDeflate.extensionName] =\n perMessageDeflate;\n }\n\n websocket.setSocket(socket, head, {\n allowSynchronousEvents: opts.allowSynchronousEvents,\n generateMask: opts.generateMask,\n maxPayload: opts.maxPayload,\n skipUTF8Validation: opts.skipUTF8Validation\n });\n });\n\n if (opts.finishRequest) {\n opts.finishRequest(req, websocket);\n } else {\n req.end();\n }\n}\n\n/**\n * Emit the `'error'` and `'close'` events.\n *\n * @param {WebSocket} websocket The WebSocket instance\n * @param {Error} The error to emit\n * @private\n */\nfunction emitErrorAndClose(websocket, err) {\n websocket._readyState = WebSocket.CLOSING;\n //\n // The following assignment is practically useless and is done only for\n // consistency.\n //\n websocket._errorEmitted = true;\n websocket.emit('error', err);\n websocket.emitClose();\n}\n\n/**\n * Create a `net.Socket` and initiate a connection.\n *\n * @param {Object} options Connection options\n * @return {net.Socket} The newly created socket used to start the connection\n * @private\n */\nfunction netConnect(options) {\n options.path = options.socketPath;\n return net.connect(options);\n}\n\n/**\n * Create a `tls.TLSSocket` and initiate a connection.\n *\n * @param {Object} options Connection options\n * @return {tls.TLSSocket} The newly created socket used to start the connection\n * @private\n */\nfunction tlsConnect(options) {\n options.path = undefined;\n\n if (!options.servername && options.servername !== '') {\n options.servername = net.isIP(options.host) ? '' : options.host;\n }\n\n return tls.connect(options);\n}\n\n/**\n * Abort the handshake and emit an error.\n *\n * @param {WebSocket} websocket The WebSocket instance\n * @param {(http.ClientRequest|net.Socket|tls.Socket)} stream The request to\n * abort or the socket to destroy\n * @param {String} message The error message\n * @private\n */\nfunction abortHandshake(websocket, stream, message) {\n websocket._readyState = WebSocket.CLOSING;\n\n const err = new Error(message);\n Error.captureStackTrace(err, abortHandshake);\n\n if (stream.setHeader) {\n stream[kAborted] = true;\n stream.abort();\n\n if (stream.socket && !stream.socket.destroyed) {\n //\n // On Node.js >= 14.3.0 `request.abort()` does not destroy the socket if\n // called after the request completed. See\n // https://github.com/websockets/ws/issues/1869.\n //\n stream.socket.destroy();\n }\n\n process.nextTick(emitErrorAndClose, websocket, err);\n } else {\n stream.destroy(err);\n stream.once('error', websocket.emit.bind(websocket, 'error'));\n stream.once('close', websocket.emitClose.bind(websocket));\n }\n}\n\n/**\n * Handle cases where the `ping()`, `pong()`, or `send()` methods are called\n * when the `readyState` attribute is `CLOSING` or `CLOSED`.\n *\n * @param {WebSocket} websocket The WebSocket instance\n * @param {*} [data] The data to send\n * @param {Function} [cb] Callback\n * @private\n */\nfunction sendAfterClose(websocket, data, cb) {\n if (data) {\n const length = isBlob(data) ? data.size : toBuffer(data).length;\n\n //\n // The `_bufferedAmount` property is used only when the peer is a client and\n // the opening handshake fails. Under these circumstances, in fact, the\n // `setSocket()` method is not called, so the `_socket` and `_sender`\n // properties are set to `null`.\n //\n if (websocket._socket) websocket._sender._bufferedBytes += length;\n else websocket._bufferedAmount += length;\n }\n\n if (cb) {\n const err = new Error(\n `WebSocket is not open: readyState ${websocket.readyState} ` +\n `(${readyStates[websocket.readyState]})`\n );\n process.nextTick(cb, err);\n }\n}\n\n/**\n * The listener of the `Receiver` `'conclude'` event.\n *\n * @param {Number} code The status code\n * @param {Buffer} reason The reason for closing\n * @private\n */\nfunction receiverOnConclude(code, reason) {\n const websocket = this[kWebSocket];\n\n websocket._closeFrameReceived = true;\n websocket._closeMessage = reason;\n websocket._closeCode = code;\n\n if (websocket._socket[kWebSocket] === undefined) return;\n\n websocket._socket.removeListener('data', socketOnData);\n process.nextTick(resume, websocket._socket);\n\n if (code === 1005) websocket.close();\n else websocket.close(code, reason);\n}\n\n/**\n * The listener of the `Receiver` `'drain'` event.\n *\n * @private\n */\nfunction receiverOnDrain() {\n const websocket = this[kWebSocket];\n\n if (!websocket.isPaused) websocket._socket.resume();\n}\n\n/**\n * The listener of the `Receiver` `'error'` event.\n *\n * @param {(RangeError|Error)} err The emitted error\n * @private\n */\nfunction receiverOnError(err) {\n const websocket = this[kWebSocket];\n\n if (websocket._socket[kWebSocket] !== undefined) {\n websocket._socket.removeListener('data', socketOnData);\n\n //\n // On Node.js < 14.0.0 the `'error'` event is emitted synchronously. See\n // https://github.com/websockets/ws/issues/1940.\n //\n process.nextTick(resume, websocket._socket);\n\n websocket.close(err[kStatusCode]);\n }\n\n if (!websocket._errorEmitted) {\n websocket._errorEmitted = true;\n websocket.emit('error', err);\n }\n}\n\n/**\n * The listener of the `Receiver` `'finish'` event.\n *\n * @private\n */\nfunction receiverOnFinish() {\n this[kWebSocket].emitClose();\n}\n\n/**\n * The listener of the `Receiver` `'message'` event.\n *\n * @param {Buffer|ArrayBuffer|Buffer[])} data The message\n * @param {Boolean} isBinary Specifies whether the message is binary or not\n * @private\n */\nfunction receiverOnMessage(data, isBinary) {\n this[kWebSocket].emit('message', data, isBinary);\n}\n\n/**\n * The listener of the `Receiver` `'ping'` event.\n *\n * @param {Buffer} data The data included in the ping frame\n * @private\n */\nfunction receiverOnPing(data) {\n const websocket = this[kWebSocket];\n\n if (websocket._autoPong) websocket.pong(data, !this._isServer, NOOP);\n websocket.emit('ping', data);\n}\n\n/**\n * The listener of the `Receiver` `'pong'` event.\n *\n * @param {Buffer} data The data included in the pong frame\n * @private\n */\nfunction receiverOnPong(data) {\n this[kWebSocket].emit('pong', data);\n}\n\n/**\n * Resume a readable stream\n *\n * @param {Readable} stream The readable stream\n * @private\n */\nfunction resume(stream) {\n stream.resume();\n}\n\n/**\n * The `Sender` error event handler.\n *\n * @param {Error} The error\n * @private\n */\nfunction senderOnError(err) {\n const websocket = this[kWebSocket];\n\n if (websocket.readyState === WebSocket.CLOSED) return;\n if (websocket.readyState === WebSocket.OPEN) {\n websocket._readyState = WebSocket.CLOSING;\n setCloseTimer(websocket);\n }\n\n //\n // `socket.end()` is used instead of `socket.destroy()` to allow the other\n // peer to finish sending queued data. There is no need to set a timer here\n // because `CLOSING` means that it is already set or not needed.\n //\n this._socket.end();\n\n if (!websocket._errorEmitted) {\n websocket._errorEmitted = true;\n websocket.emit('error', err);\n }\n}\n\n/**\n * Set a timer to destroy the underlying raw socket of a WebSocket.\n *\n * @param {WebSocket} websocket The WebSocket instance\n * @private\n */\nfunction setCloseTimer(websocket) {\n websocket._closeTimer = setTimeout(\n websocket._socket.destroy.bind(websocket._socket),\n closeTimeout\n );\n}\n\n/**\n * The listener of the socket `'close'` event.\n *\n * @private\n */\nfunction socketOnClose() {\n const websocket = this[kWebSocket];\n\n this.removeListener('close', socketOnClose);\n this.removeListener('data', socketOnData);\n this.removeListener('end', socketOnEnd);\n\n websocket._readyState = WebSocket.CLOSING;\n\n let chunk;\n\n //\n // The close frame might not have been received or the `'end'` event emitted,\n // for example, if the socket was destroyed due to an error. Ensure that the\n // `receiver` stream is closed after writing any remaining buffered data to\n // it. If the readable side of the socket is in flowing mode then there is no\n // buffered data as everything has been already written and `readable.read()`\n // will return `null`. If instead, the socket is paused, any possible buffered\n // data will be read as a single chunk.\n //\n if (\n !this._readableState.endEmitted &&\n !websocket._closeFrameReceived &&\n !websocket._receiver._writableState.errorEmitted &&\n (chunk = websocket._socket.read()) !== null\n ) {\n websocket._receiver.write(chunk);\n }\n\n websocket._receiver.end();\n\n this[kWebSocket] = undefined;\n\n clearTimeout(websocket._closeTimer);\n\n if (\n websocket._receiver._writableState.finished ||\n websocket._receiver._writableState.errorEmitted\n ) {\n websocket.emitClose();\n } else {\n websocket._receiver.on('error', receiverOnFinish);\n websocket._receiver.on('finish', receiverOnFinish);\n }\n}\n\n/**\n * The listener of the socket `'data'` event.\n *\n * @param {Buffer} chunk A chunk of data\n * @private\n */\nfunction socketOnData(chunk) {\n if (!this[kWebSocket]._receiver.write(chunk)) {\n this.pause();\n }\n}\n\n/**\n * The listener of the socket `'end'` event.\n *\n * @private\n */\nfunction socketOnEnd() {\n const websocket = this[kWebSocket];\n\n websocket._readyState = WebSocket.CLOSING;\n websocket._receiver.end();\n this.end();\n}\n\n/**\n * The listener of the socket `'error'` event.\n *\n * @private\n */\nfunction socketOnError() {\n const websocket = this[kWebSocket];\n\n this.removeListener('error', socketOnError);\n this.on('error', NOOP);\n\n if (websocket) {\n websocket._readyState = WebSocket.CLOSING;\n this.destroy();\n }\n}\n","'use strict';\n\nconst { kForOnEventAttribute, kListener } = require('./constants');\n\nconst kCode = Symbol('kCode');\nconst kData = Symbol('kData');\nconst kError = Symbol('kError');\nconst kMessage = Symbol('kMessage');\nconst kReason = Symbol('kReason');\nconst kTarget = Symbol('kTarget');\nconst kType = Symbol('kType');\nconst kWasClean = Symbol('kWasClean');\n\n/**\n * Class representing an event.\n */\nclass Event {\n /**\n * Create a new `Event`.\n *\n * @param {String} type The name of the event\n * @throws {TypeError} If the `type` argument is not specified\n */\n constructor(type) {\n this[kTarget] = null;\n this[kType] = type;\n }\n\n /**\n * @type {*}\n */\n get target() {\n return this[kTarget];\n }\n\n /**\n * @type {String}\n */\n get type() {\n return this[kType];\n }\n}\n\nObject.defineProperty(Event.prototype, 'target', { enumerable: true });\nObject.defineProperty(Event.prototype, 'type', { enumerable: true });\n\n/**\n * Class representing a close event.\n *\n * @extends Event\n */\nclass CloseEvent extends Event {\n /**\n * Create a new `CloseEvent`.\n *\n * @param {String} type The name of the event\n * @param {Object} [options] A dictionary object that allows for setting\n * attributes via object members of the same name\n * @param {Number} [options.code=0] The status code explaining why the\n * connection was closed\n * @param {String} [options.reason=''] A human-readable string explaining why\n * the connection was closed\n * @param {Boolean} [options.wasClean=false] Indicates whether or not the\n * connection was cleanly closed\n */\n constructor(type, options = {}) {\n super(type);\n\n this[kCode] = options.code === undefined ? 0 : options.code;\n this[kReason] = options.reason === undefined ? '' : options.reason;\n this[kWasClean] = options.wasClean === undefined ? false : options.wasClean;\n }\n\n /**\n * @type {Number}\n */\n get code() {\n return this[kCode];\n }\n\n /**\n * @type {String}\n */\n get reason() {\n return this[kReason];\n }\n\n /**\n * @type {Boolean}\n */\n get wasClean() {\n return this[kWasClean];\n }\n}\n\nObject.defineProperty(CloseEvent.prototype, 'code', { enumerable: true });\nObject.defineProperty(CloseEvent.prototype, 'reason', { enumerable: true });\nObject.defineProperty(CloseEvent.prototype, 'wasClean', { enumerable: true });\n\n/**\n * Class representing an error event.\n *\n * @extends Event\n */\nclass ErrorEvent extends Event {\n /**\n * Create a new `ErrorEvent`.\n *\n * @param {String} type The name of the event\n * @param {Object} [options] A dictionary object that allows for setting\n * attributes via object members of the same name\n * @param {*} [options.error=null] The error that generated this event\n * @param {String} [options.message=''] The error message\n */\n constructor(type, options = {}) {\n super(type);\n\n this[kError] = options.error === undefined ? null : options.error;\n this[kMessage] = options.message === undefined ? '' : options.message;\n }\n\n /**\n * @type {*}\n */\n get error() {\n return this[kError];\n }\n\n /**\n * @type {String}\n */\n get message() {\n return this[kMessage];\n }\n}\n\nObject.defineProperty(ErrorEvent.prototype, 'error', { enumerable: true });\nObject.defineProperty(ErrorEvent.prototype, 'message', { enumerable: true });\n\n/**\n * Class representing a message event.\n *\n * @extends Event\n */\nclass MessageEvent extends Event {\n /**\n * Create a new `MessageEvent`.\n *\n * @param {String} type The name of the event\n * @param {Object} [options] A dictionary object that allows for setting\n * attributes via object members of the same name\n * @param {*} [options.data=null] The message content\n */\n constructor(type, options = {}) {\n super(type);\n\n this[kData] = options.data === undefined ? null : options.data;\n }\n\n /**\n * @type {*}\n */\n get data() {\n return this[kData];\n }\n}\n\nObject.defineProperty(MessageEvent.prototype, 'data', { enumerable: true });\n\n/**\n * This provides methods for emulating the `EventTarget` interface. It's not\n * meant to be used directly.\n *\n * @mixin\n */\nconst EventTarget = {\n /**\n * Register an event listener.\n *\n * @param {String} type A string representing the event type to listen for\n * @param {(Function|Object)} handler The listener to add\n * @param {Object} [options] An options object specifies characteristics about\n * the event listener\n * @param {Boolean} [options.once=false] A `Boolean` indicating that the\n * listener should be invoked at most once after being added. If `true`,\n * the listener would be automatically removed when invoked.\n * @public\n */\n addEventListener(type, handler, options = {}) {\n for (const listener of this.listeners(type)) {\n if (\n !options[kForOnEventAttribute] &&\n listener[kListener] === handler &&\n !listener[kForOnEventAttribute]\n ) {\n return;\n }\n }\n\n let wrapper;\n\n if (type === 'message') {\n wrapper = function onMessage(data, isBinary) {\n const event = new MessageEvent('message', {\n data: isBinary ? data : data.toString()\n });\n\n event[kTarget] = this;\n callListener(handler, this, event);\n };\n } else if (type === 'close') {\n wrapper = function onClose(code, message) {\n const event = new CloseEvent('close', {\n code,\n reason: message.toString(),\n wasClean: this._closeFrameReceived && this._closeFrameSent\n });\n\n event[kTarget] = this;\n callListener(handler, this, event);\n };\n } else if (type === 'error') {\n wrapper = function onError(error) {\n const event = new ErrorEvent('error', {\n error,\n message: error.message\n });\n\n event[kTarget] = this;\n callListener(handler, this, event);\n };\n } else if (type === 'open') {\n wrapper = function onOpen() {\n const event = new Event('open');\n\n event[kTarget] = this;\n callListener(handler, this, event);\n };\n } else {\n return;\n }\n\n wrapper[kForOnEventAttribute] = !!options[kForOnEventAttribute];\n wrapper[kListener] = handler;\n\n if (options.once) {\n this.once(type, wrapper);\n } else {\n this.on(type, wrapper);\n }\n },\n\n /**\n * Remove an event listener.\n *\n * @param {String} type A string representing the event type to remove\n * @param {(Function|Object)} handler The listener to remove\n * @public\n */\n removeEventListener(type, handler) {\n for (const listener of this.listeners(type)) {\n if (listener[kListener] === handler && !listener[kForOnEventAttribute]) {\n this.removeListener(type, listener);\n break;\n }\n }\n }\n};\n\nmodule.exports = {\n CloseEvent,\n ErrorEvent,\n Event,\n EventTarget,\n MessageEvent\n};\n\n/**\n * Call an event listener\n *\n * @param {(Function|Object)} listener The listener to call\n * @param {*} thisArg The value to use as `this`` when calling the listener\n * @param {Event} event The event to pass to the listener\n * @private\n */\nfunction callListener(listener, thisArg, event) {\n if (typeof listener === 'object' && listener.handleEvent) {\n listener.handleEvent.call(listener, event);\n } else {\n listener.call(thisArg, event);\n }\n}\n","// @flow\n\nimport {Reporter} from '@parcel/plugin';\nimport HMRServer from './HMRServer';\nimport Server from './Server';\n\nlet servers: Map = new Map();\nlet hmrServers: Map = new Map();\nexport default (new Reporter({\n async report({event, options, logger}) {\n let {serveOptions, hmrOptions} = options;\n let server = serveOptions ? servers.get(serveOptions.port) : undefined;\n let hmrPort =\n (hmrOptions && hmrOptions.port) || (serveOptions && serveOptions.port);\n let hmrServer = hmrPort ? hmrServers.get(hmrPort) : undefined;\n switch (event.type) {\n case 'watchStart': {\n if (serveOptions) {\n // If there's already a server when watching has just started, something\n // is wrong.\n if (server) {\n return logger.warn({\n message: 'Trying to create the devserver but it already exists.',\n });\n }\n\n let serverOptions = {\n ...serveOptions,\n projectRoot: options.projectRoot,\n cacheDir: options.cacheDir,\n // Override the target's publicUrl as that is likely meant for production.\n // This could be configurable in the future.\n publicUrl: serveOptions.publicUrl ?? '/',\n inputFS: options.inputFS,\n outputFS: options.outputFS,\n packageManager: options.packageManager,\n logger,\n hmrOptions,\n };\n\n server = new Server(serverOptions);\n servers.set(serveOptions.port, server);\n const devServer = await server.start();\n\n if (hmrOptions && hmrOptions.port === serveOptions.port) {\n let hmrServerOptions = {\n port: serveOptions.port,\n host: hmrOptions.host,\n devServer,\n addMiddleware: handler => {\n server?.middleware.push(handler);\n },\n logger,\n https: options.serveOptions ? options.serveOptions.https : false,\n cacheDir: options.cacheDir,\n inputFS: options.inputFS,\n outputFS: options.outputFS,\n };\n hmrServer = new HMRServer(hmrServerOptions);\n hmrServers.set(serveOptions.port, hmrServer);\n await hmrServer.start();\n return;\n }\n }\n\n let port = hmrOptions?.port;\n if (typeof port === 'number') {\n let hmrServerOptions = {\n port,\n host: hmrOptions?.host,\n logger,\n https: options.serveOptions ? options.serveOptions.https : false,\n cacheDir: options.cacheDir,\n inputFS: options.inputFS,\n outputFS: options.outputFS,\n };\n hmrServer = new HMRServer(hmrServerOptions);\n hmrServers.set(port, hmrServer);\n await hmrServer.start();\n }\n break;\n }\n case 'watchEnd':\n if (serveOptions) {\n if (!server) {\n return logger.warn({\n message:\n 'Could not shutdown devserver because it does not exist.',\n });\n }\n await server.stop();\n servers.delete(server.options.port);\n }\n if (hmrOptions && hmrServer) {\n await hmrServer.stop();\n // $FlowFixMe[prop-missing]\n hmrServers.delete(hmrServer.wss.options.port);\n }\n break;\n case 'buildStart':\n if (server) {\n server.buildStart();\n }\n break;\n case 'buildProgress':\n if (\n event.phase === 'bundled' &&\n hmrServer &&\n // Only send HMR updates before packaging if the built in dev server is used to ensure that\n // no stale bundles are served. Otherwise emit it for 'buildSuccess'.\n options.serveOptions !== false\n ) {\n await hmrServer.emitUpdate(event);\n }\n break;\n case 'buildSuccess':\n if (serveOptions) {\n if (!server) {\n return logger.warn({\n message:\n 'Could not send success event to devserver because it does not exist.',\n });\n }\n\n server.buildSuccess(event.bundleGraph, event.requestBundle);\n }\n if (hmrServer && options.serveOptions === false) {\n await hmrServer.emitUpdate(event);\n }\n break;\n case 'buildFailure':\n // On buildFailure watchStart sometimes has not been called yet\n // do not throw an additional warning here\n if (server) {\n await server.buildError(options, event.diagnostics);\n }\n if (hmrServer) {\n await hmrServer.emitError(options, event.diagnostics);\n }\n break;\n }\n },\n}): Reporter);\n","// @flow\nimport type {\n Asset,\n BundleGraph,\n Dependency,\n NamedBundle,\n PackagedBundle,\n PluginOptions,\n} from '@parcel/types';\nimport type {Diagnostic} from '@parcel/diagnostic';\nimport type {AnsiDiagnosticResult} from '@parcel/utils';\nimport type {\n ServerError,\n HMRServerOptions,\n Request,\n Response,\n} from './types.js.flow';\nimport {setHeaders, SOURCES_ENDPOINT} from './Server';\n\nimport nullthrows from 'nullthrows';\nimport url from 'url';\nimport mime from 'mime-types';\nimport WebSocket from 'ws';\nimport invariant from 'assert';\nimport {\n ansiHtml,\n createHTTPServer,\n prettyDiagnostic,\n PromiseQueue,\n} from '@parcel/utils';\n\nexport type HMRAsset = {|\n id: string,\n url: string,\n type: string,\n output: string,\n envHash: string,\n outputFormat: string,\n depsByBundle: {[string]: {[string]: string, ...}, ...},\n|};\n\nexport type HMRMessage =\n | {|\n type: 'update',\n assets: Array,\n |}\n | {|\n type: 'reload',\n |}\n | {|\n type: 'error',\n diagnostics: {|\n ansi: Array,\n html: Array<$Rest>,\n |},\n |};\n\nconst FS_CONCURRENCY = 64;\nconst HMR_ENDPOINT = '/__parcel_hmr';\nconst BROADCAST_MAX_ASSETS = 10000;\n\nexport default class HMRServer {\n wss: WebSocket.Server;\n unresolvedError: HMRMessage | null = null;\n options: HMRServerOptions;\n bundleGraph: BundleGraph | BundleGraph | null =\n null;\n stopServer: ?() => Promise;\n\n constructor(options: HMRServerOptions) {\n this.options = options;\n }\n\n async start() {\n let server = this.options.devServer;\n if (!server) {\n let result = await createHTTPServer({\n https: this.options.https,\n inputFS: this.options.inputFS,\n outputFS: this.options.outputFS,\n cacheDir: this.options.cacheDir,\n listener: (req, res) => {\n setHeaders(res);\n if (!this.handle(req, res)) {\n res.statusCode = 404;\n res.end();\n }\n },\n });\n server = result.server;\n server.listen(this.options.port, this.options.host);\n this.stopServer = result.stop;\n } else {\n this.options.addMiddleware?.((req, res) => this.handle(req, res));\n }\n this.wss = new WebSocket.Server({server});\n\n this.wss.on('connection', ws => {\n if (this.unresolvedError) {\n ws.send(JSON.stringify(this.unresolvedError));\n }\n });\n\n // $FlowFixMe[incompatible-exact]\n this.wss.on('error', err => this.handleSocketError(err));\n }\n\n handle(req: Request, res: Response): boolean {\n let {pathname} = url.parse(req.originalUrl || req.url);\n if (pathname != null && pathname.startsWith(HMR_ENDPOINT)) {\n let id = pathname.slice(HMR_ENDPOINT.length + 1);\n let bundleGraph = nullthrows(this.bundleGraph);\n let asset = bundleGraph.getAssetById(id);\n this.getHotAssetContents(asset).then(output => {\n res.setHeader('Content-Type', mime.contentType(asset.type));\n res.end(output);\n });\n return true;\n }\n return false;\n }\n\n async stop() {\n if (this.stopServer != null) {\n await this.stopServer();\n this.stopServer = null;\n }\n this.wss.close();\n for (const ws of this.wss.clients) {\n ws.terminate();\n }\n }\n\n async emitError(options: PluginOptions, diagnostics: Array) {\n let renderedDiagnostics = await Promise.all(\n diagnostics.map(d => prettyDiagnostic(d, options)),\n );\n\n // store the most recent error so we can notify new connections\n // and so we can broadcast when the error is resolved\n this.unresolvedError = {\n type: 'error',\n diagnostics: {\n ansi: renderedDiagnostics,\n html: renderedDiagnostics.map((d, i) => {\n return {\n message: ansiHtml(d.message),\n stack: ansiHtml(d.stack),\n frames: d.frames.map(f => ({\n location: f.location,\n code: ansiHtml(f.code),\n })),\n hints: d.hints.map(hint => ansiHtml(hint)),\n documentation: diagnostics[i].documentationURL ?? '',\n };\n }),\n },\n };\n\n this.broadcast(this.unresolvedError);\n }\n\n async emitUpdate(event: {\n +bundleGraph: BundleGraph | BundleGraph,\n +changedAssets: Map,\n ...\n }) {\n this.unresolvedError = null;\n this.bundleGraph = event.bundleGraph;\n\n let changedAssets = new Set(event.changedAssets.values());\n if (changedAssets.size === 0) return;\n\n let queue = new PromiseQueue({maxConcurrent: FS_CONCURRENCY});\n for (let asset of changedAssets) {\n if (asset.type !== 'js' && asset.type !== 'css') {\n // If all of the incoming dependencies of the asset actually resolve to a JS asset\n // rather than the original, we can mark the runtimes as changed instead. URL runtimes\n // have a cache busting query param added with HMR enabled which will trigger a reload.\n let runtimes = new Set();\n let incomingDeps = event.bundleGraph.getIncomingDependencies(asset);\n let isOnlyReferencedByRuntimes = incomingDeps.every(dep => {\n let resolved = event.bundleGraph.getResolvedAsset(dep);\n let isRuntime = resolved?.type === 'js' && resolved !== asset;\n if (resolved && isRuntime) {\n runtimes.add(resolved);\n }\n return isRuntime;\n });\n\n if (isOnlyReferencedByRuntimes) {\n for (let runtime of runtimes) {\n changedAssets.add(runtime);\n }\n\n continue;\n }\n }\n\n queue.add(async () => {\n let dependencies = event.bundleGraph.getDependencies(asset);\n let depsByBundle = {};\n for (let bundle of event.bundleGraph.getBundlesWithAsset(asset)) {\n let deps = {};\n for (let dep of dependencies) {\n let resolved = event.bundleGraph.getResolvedAsset(dep, bundle);\n if (resolved) {\n deps[getSpecifier(dep)] =\n event.bundleGraph.getAssetPublicId(resolved);\n }\n }\n depsByBundle[bundle.id] = deps;\n }\n\n return {\n id: event.bundleGraph.getAssetPublicId(asset),\n url: this.getSourceURL(asset),\n type: asset.type,\n // No need to send the contents of non-JS assets to the client.\n output:\n asset.type === 'js' ? await this.getHotAssetContents(asset) : '',\n envHash: asset.env.id,\n outputFormat: asset.env.outputFormat,\n depsByBundle,\n };\n });\n }\n\n let assets = await queue.run();\n\n if (assets.length >= BROADCAST_MAX_ASSETS) {\n // Too many assets to send via an update without errors, just reload instead\n this.broadcast({type: 'reload'});\n } else {\n this.broadcast({\n type: 'update',\n assets,\n });\n }\n }\n\n async getHotAssetContents(asset: Asset): Promise {\n let output = await asset.getCode();\n let bundleGraph = nullthrows(this.bundleGraph);\n if (asset.type === 'js') {\n let publicId = bundleGraph.getAssetPublicId(asset);\n output = `parcelHotUpdate['${publicId}'] = function (require, module, exports) {${output}}`;\n }\n\n let sourcemap = await asset.getMap();\n if (sourcemap) {\n let sourcemapStringified = await sourcemap.stringify({\n format: 'inline',\n sourceRoot: SOURCES_ENDPOINT + '/',\n // $FlowFixMe\n fs: asset.fs,\n });\n\n invariant(typeof sourcemapStringified === 'string');\n output += `\\n//# sourceMappingURL=${sourcemapStringified}`;\n output += `\\n//# sourceURL=${encodeURI(this.getSourceURL(asset))}\\n`;\n }\n\n return output;\n }\n\n getSourceURL(asset: Asset): string {\n let origin = '';\n if (!this.options.devServer) {\n origin = `http://${this.options.host || 'localhost'}:${\n this.options.port\n }`;\n }\n return origin + HMR_ENDPOINT + '/' + asset.id;\n }\n\n handleSocketError(err: ServerError) {\n if (err.code === 'ECONNRESET') {\n // This gets triggered on page refresh, ignore this\n return;\n }\n\n this.options.logger.warn({\n origin: '@parcel/reporter-dev-server',\n message: `[${err.code}]: ${err.message}`,\n stack: err.stack,\n });\n }\n\n broadcast(msg: HMRMessage) {\n const json = JSON.stringify(msg);\n for (let ws of this.wss.clients) {\n ws.send(json);\n }\n }\n}\n\nfunction getSpecifier(dep: Dependency): string {\n if (typeof dep.meta.placeholder === 'string') {\n return dep.meta.placeholder;\n }\n\n return dep.specifier;\n}\n","// @flow\n\nimport type {DevServerOptions, Request, Response} from './types.js.flow';\nimport type {\n BuildSuccessEvent,\n BundleGraph,\n FilePath,\n PluginOptions,\n PackagedBundle,\n} from '@parcel/types';\nimport type {Diagnostic} from '@parcel/diagnostic';\nimport type {FileSystem} from '@parcel/fs';\nimport type {HTTPServer, FormattedCodeFrame} from '@parcel/utils';\n\nimport invariant from 'assert';\nimport path from 'path';\nimport url from 'url';\nimport {\n ansiHtml,\n createHTTPServer,\n resolveConfig,\n readConfig,\n prettyDiagnostic,\n relativePath,\n} from '@parcel/utils';\nimport serverErrors from './serverErrors';\nimport fs from 'fs';\nimport ejs from 'ejs';\nimport connect from 'connect';\nimport serveHandler from 'serve-handler';\nimport {createProxyMiddleware} from 'http-proxy-middleware';\nimport {URL, URLSearchParams} from 'url';\nimport launchEditor from 'launch-editor';\nimport fresh from 'fresh';\n\nexport function setHeaders(res: Response) {\n res.setHeader('Access-Control-Allow-Origin', '*');\n res.setHeader(\n 'Access-Control-Allow-Methods',\n 'GET, HEAD, PUT, PATCH, POST, DELETE',\n );\n res.setHeader(\n 'Access-Control-Allow-Headers',\n 'Origin, X-Requested-With, Content-Type, Accept, Content-Type',\n );\n res.setHeader('Cache-Control', 'max-age=0, must-revalidate');\n}\n\nconst SLASH_REGEX = /\\//g;\n\nexport const SOURCES_ENDPOINT = '/__parcel_source_root';\nconst EDITOR_ENDPOINT = '/__parcel_launch_editor';\nconst TEMPLATE_404 = fs.readFileSync(\n path.join(__dirname, 'templates/404.html'),\n 'utf8',\n);\n\nconst TEMPLATE_500 = fs.readFileSync(\n path.join(__dirname, 'templates/500.html'),\n 'utf8',\n);\ntype NextFunction = (req: Request, res: Response, next?: (any) => any) => any;\n\nexport default class Server {\n pending: boolean;\n pendingRequests: Array<[Request, Response]>;\n middleware: Array<(req: Request, res: Response) => boolean>;\n options: DevServerOptions;\n rootPath: string;\n bundleGraph: BundleGraph | null;\n requestBundle: ?(bundle: PackagedBundle) => Promise;\n errors: Array<{|\n message: string,\n stack: ?string,\n frames: Array,\n hints: Array,\n documentation: string,\n |}> | null;\n stopServer: ?() => Promise;\n\n constructor(options: DevServerOptions) {\n this.options = options;\n try {\n this.rootPath = new URL(options.publicUrl).pathname;\n } catch (e) {\n this.rootPath = options.publicUrl;\n }\n this.pending = true;\n this.pendingRequests = [];\n this.middleware = [];\n this.bundleGraph = null;\n this.requestBundle = null;\n this.errors = null;\n }\n\n buildStart() {\n this.pending = true;\n }\n\n buildSuccess(\n bundleGraph: BundleGraph,\n requestBundle: (bundle: PackagedBundle) => Promise,\n ) {\n this.bundleGraph = bundleGraph;\n this.requestBundle = requestBundle;\n this.errors = null;\n this.pending = false;\n\n if (this.pendingRequests.length > 0) {\n let pendingRequests = this.pendingRequests;\n this.pendingRequests = [];\n for (let [req, res] of pendingRequests) {\n this.respond(req, res);\n }\n }\n }\n\n async buildError(options: PluginOptions, diagnostics: Array) {\n this.pending = false;\n this.errors = await Promise.all(\n diagnostics.map(async d => {\n let ansiDiagnostic = await prettyDiagnostic(d, options);\n\n return {\n message: ansiHtml(ansiDiagnostic.message),\n stack: ansiDiagnostic.stack ? ansiHtml(ansiDiagnostic.stack) : null,\n frames: ansiDiagnostic.frames.map(f => ({\n location: f.location,\n code: ansiHtml(f.code),\n })),\n hints: ansiDiagnostic.hints.map(hint => ansiHtml(hint)),\n documentation: d.documentationURL ?? '',\n };\n }),\n );\n }\n\n respond(req: Request, res: Response): mixed {\n if (this.middleware.some(handler => handler(req, res))) return;\n let {pathname, search} = url.parse(req.originalUrl || req.url);\n if (pathname == null) {\n pathname = '/';\n }\n\n if (pathname.startsWith(EDITOR_ENDPOINT) && search) {\n let query = new URLSearchParams(search);\n let file = query.get('file');\n if (file) {\n // File location might start with /__parcel_source_root if it came from a source map.\n if (file.startsWith(SOURCES_ENDPOINT)) {\n file = file.slice(SOURCES_ENDPOINT.length + 1);\n }\n launchEditor(file);\n }\n res.end();\n } else if (this.errors) {\n return this.send500(req, res);\n } else if (path.extname(pathname) === '') {\n // If the URL doesn't start with the public path, or the URL doesn't\n // have a file extension, send the main HTML bundle.\n return this.sendIndex(req, res);\n } else if (pathname.startsWith(SOURCES_ENDPOINT)) {\n req.url = pathname.slice(SOURCES_ENDPOINT.length);\n return this.serve(\n this.options.inputFS,\n this.options.projectRoot,\n req,\n res,\n () => this.send404(req, res),\n );\n } else if (pathname.startsWith(this.rootPath)) {\n // Otherwise, serve the file from the dist folder\n req.url =\n this.rootPath === '/' ? pathname : pathname.slice(this.rootPath.length);\n if (req.url[0] !== '/') {\n req.url = '/' + req.url;\n }\n return this.serveBundle(req, res, () => this.sendIndex(req, res));\n } else {\n return this.send404(req, res);\n }\n }\n\n sendIndex(req: Request, res: Response) {\n if (this.bundleGraph) {\n // If the main asset is an HTML file, serve it\n let htmlBundleFilePaths = this.bundleGraph\n .getBundles()\n .filter(bundle => path.posix.extname(bundle.name) === '.html')\n .map(bundle => {\n return `/${relativePath(\n this.options.distDir,\n bundle.filePath,\n false,\n )}`;\n });\n\n let indexFilePath = null;\n let {pathname: reqURL} = url.parse(req.originalUrl || req.url);\n\n if (!reqURL) {\n reqURL = '/';\n }\n\n if (htmlBundleFilePaths.length === 1) {\n indexFilePath = htmlBundleFilePaths[0];\n } else {\n let bestMatch = null;\n for (let bundle of htmlBundleFilePaths) {\n let bundleDir = path.posix.dirname(bundle);\n let bundleDirSubdir = bundleDir === '/' ? bundleDir : bundleDir + '/';\n let withoutExtension = path.posix.basename(\n bundle,\n path.posix.extname(bundle),\n );\n let isIndex = withoutExtension === 'index';\n\n let matchesIsIndex = null;\n if (\n isIndex &&\n (reqURL.startsWith(bundleDirSubdir) || reqURL === bundleDir)\n ) {\n // bundle is /bar/index.html and (/bar or something inside of /bar/** was requested was requested)\n matchesIsIndex = true;\n } else if (reqURL == path.posix.join(bundleDir, withoutExtension)) {\n // bundle is /bar/foo.html and /bar/foo was requested\n matchesIsIndex = false;\n }\n if (matchesIsIndex != null) {\n let depth = bundle.match(SLASH_REGEX)?.length ?? 0;\n if (\n bestMatch == null ||\n // This one is more specific (deeper)\n bestMatch.depth < depth ||\n // This one is just as deep, but the bundle name matches and not just index.html\n (bestMatch.depth === depth && bestMatch.isIndex)\n ) {\n bestMatch = {bundle, depth, isIndex: matchesIsIndex};\n }\n }\n }\n indexFilePath = bestMatch?.['bundle'] ?? htmlBundleFilePaths[0];\n }\n\n if (indexFilePath) {\n req.url = indexFilePath;\n this.serveBundle(req, res, () => this.send404(req, res));\n } else {\n this.send404(req, res);\n }\n } else {\n this.send404(req, res);\n }\n }\n\n async serveBundle(\n req: Request,\n res: Response,\n next: NextFunction,\n ): Promise {\n let bundleGraph = this.bundleGraph;\n if (bundleGraph) {\n let {pathname} = url.parse(req.url);\n if (!pathname) {\n this.send500(req, res);\n return;\n }\n\n let requestedPath = path.normalize(pathname.slice(1));\n let bundle = bundleGraph\n .getBundles()\n .find(\n b =>\n path.relative(this.options.distDir, b.filePath) === requestedPath,\n );\n if (!bundle) {\n this.serveDist(req, res, next);\n return;\n }\n\n invariant(this.requestBundle != null);\n try {\n await this.requestBundle(bundle);\n } catch (err) {\n this.send500(req, res);\n return;\n }\n\n this.serveDist(req, res, next);\n } else {\n this.send404(req, res);\n }\n }\n\n serveDist(\n req: Request,\n res: Response,\n next: NextFunction,\n ): Promise | Promise {\n return this.serve(\n this.options.outputFS,\n this.options.distDir,\n req,\n res,\n next,\n );\n }\n\n async serve(\n fs: FileSystem,\n root: FilePath,\n req: Request,\n res: Response,\n next: NextFunction,\n ): Promise {\n if (req.method !== 'GET' && req.method !== 'HEAD') {\n // method not allowed\n res.statusCode = 405;\n res.setHeader('Allow', 'GET, HEAD');\n res.setHeader('Content-Length', '0');\n res.end();\n return;\n }\n\n try {\n var filePath = url.parse(req.url).pathname || '';\n filePath = decodeURIComponent(filePath);\n } catch (err) {\n return this.sendError(res, 400);\n }\n\n filePath = path.normalize('.' + path.sep + filePath);\n\n // malicious path\n if (filePath.includes(path.sep + '..' + path.sep)) {\n return this.sendError(res, 403);\n }\n\n // join / normalize from the root dir\n if (!path.isAbsolute(filePath)) {\n filePath = path.normalize(path.join(root, filePath));\n }\n\n try {\n var stat = await fs.stat(filePath);\n } catch (err) {\n if (err.code === 'ENOENT') {\n return next(req, res);\n }\n\n return this.sendError(res, 500);\n }\n\n // Fall back to next handler if not a file\n if (!stat || !stat.isFile()) {\n return next(req, res);\n }\n\n if (fresh(req.headers, {'last-modified': stat.mtime.toUTCString()})) {\n res.statusCode = 304;\n res.end();\n return;\n }\n\n return serveHandler(\n req,\n res,\n {\n public: root,\n cleanUrls: false,\n },\n {\n lstat: path => fs.stat(path),\n realpath: path => fs.realpath(path),\n createReadStream: (path, options) => fs.createReadStream(path, options),\n readdir: path => fs.readdir(path),\n },\n );\n }\n\n sendError(res: Response, statusCode: number) {\n res.statusCode = statusCode;\n res.end();\n }\n\n send404(req: Request, res: Response) {\n res.statusCode = 404;\n res.end(TEMPLATE_404);\n }\n\n send500(req: Request, res: Response): void | Response {\n res.setHeader('Content-Type', 'text/html; charset=utf-8');\n res.writeHead(500);\n\n if (this.errors) {\n return res.end(\n ejs.render(TEMPLATE_500, {\n errors: this.errors,\n hmrOptions: this.options.hmrOptions,\n }),\n );\n }\n }\n\n logAccessIfVerbose(req: Request) {\n this.options.logger.verbose({\n message: `Request: ${req.headers.host}${req.originalUrl || req.url}`,\n });\n }\n\n /**\n * Load proxy table from package.json and apply them.\n */\n async applyProxyTable(app: any): Promise {\n // avoid skipping project root\n const fileInRoot: string = path.join(this.options.projectRoot, 'index');\n\n const configFilePath = await resolveConfig(\n this.options.inputFS,\n fileInRoot,\n [\n '.proxyrc.cts',\n '.proxyrc.mts',\n '.proxyrc.ts',\n '.proxyrc.cjs',\n '.proxyrc.mjs',\n '.proxyrc.js',\n '.proxyrc',\n '.proxyrc.json',\n ],\n this.options.projectRoot,\n );\n\n if (!configFilePath) {\n return this;\n }\n\n const filename = path.basename(configFilePath);\n\n if (filename === '.proxyrc' || filename === '.proxyrc.json') {\n let conf = await readConfig(this.options.inputFS, configFilePath);\n if (!conf) {\n return this;\n }\n let cfg = conf.config;\n if (typeof cfg !== 'object') {\n this.options.logger.warn({\n message:\n \"Proxy table in '.proxyrc' should be of object type. Skipping...\",\n });\n return this;\n }\n for (const [context, options] of Object.entries(cfg)) {\n // each key is interpreted as context, and value as middleware options\n app.use(createProxyMiddleware(context, options));\n }\n } else {\n let cfg = await this.options.packageManager.require(\n configFilePath,\n fileInRoot,\n );\n if (\n // $FlowFixMe\n Object.prototype.toString.call(cfg) === '[object Module]'\n ) {\n cfg = cfg.default;\n }\n\n if (typeof cfg !== 'function') {\n this.options.logger.warn({\n message: `Proxy configuration file '${filename}' should export a function. Skipping...`,\n });\n return this;\n }\n cfg(app);\n }\n\n return this;\n }\n\n async start(): Promise {\n const finalHandler = (req: Request, res: Response) => {\n this.logAccessIfVerbose(req);\n\n // Wait for the parcelInstance to finish bundling if needed\n if (this.pending) {\n this.pendingRequests.push([req, res]);\n } else {\n this.respond(req, res);\n }\n };\n\n const app = connect();\n app.use((req, res, next) => {\n setHeaders(res);\n next();\n });\n\n app.use((req, res, next) => {\n if (req.url === '/__parcel_healthcheck') {\n res.statusCode = 200;\n res.write(`${Date.now()}`);\n res.end();\n } else {\n next();\n }\n });\n\n await this.applyProxyTable(app);\n app.use(finalHandler);\n\n let {server, stop} = await createHTTPServer({\n cacheDir: this.options.cacheDir,\n https: this.options.https,\n inputFS: this.options.inputFS,\n listener: app,\n outputFS: this.options.outputFS,\n host: this.options.host,\n });\n this.stopServer = stop;\n\n server.listen(this.options.port, this.options.host);\n return new Promise((resolve, reject) => {\n server.once('error', err => {\n this.options.logger.error(\n ({\n message: serverErrors(err, this.options.port),\n }: Diagnostic),\n );\n reject(err);\n });\n\n server.once('listening', () => {\n resolve(server);\n });\n });\n }\n\n async stop(): Promise {\n invariant(this.stopServer != null);\n await this.stopServer();\n this.stopServer = null;\n }\n}\n","// @flow\nexport type ServerError = Error & {|\n code: string,\n|};\n\nconst serverErrorList = {\n EACCES: \"You don't have access to bind the server to port {port}.\",\n EADDRINUSE: 'There is already a process listening on port {port}.',\n};\n\nexport default function serverErrors(err: ServerError, port: number): string {\n let desc = `Error: ${\n err.code\n } occurred while setting up server on port ${port.toString()}.`;\n\n if (serverErrorList[err.code]) {\n desc = serverErrorList[err.code].replace(/{port}/g, port);\n }\n\n return desc;\n}\n","/*\n * EJS Embedded JavaScript templates\n * Copyright 2112 Matthew Eernisse (mde@fleegix.org)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n*/\n\n'use strict';\n\n/**\n * @file Embedded JavaScript templating engine. {@link http://ejs.co}\n * @author Matthew Eernisse \n * @author Tiancheng \"Timothy\" Gu \n * @project EJS\n * @license {@link http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0}\n */\n\n/**\n * EJS internal functions.\n *\n * Technically this \"module\" lies in the same file as {@link module:ejs}, for\n * the sake of organization all the private functions re grouped into this\n * module.\n *\n * @module ejs-internal\n * @private\n */\n\n/**\n * Embedded JavaScript templating engine.\n *\n * @module ejs\n * @public\n */\n\n\nvar fs = require('fs');\nvar path = require('path');\nvar utils = require('./utils');\n\nvar scopeOptionWarned = false;\n/** @type {string} */\nvar _VERSION_STRING = require('../package.json').version;\nvar _DEFAULT_OPEN_DELIMITER = '<';\nvar _DEFAULT_CLOSE_DELIMITER = '>';\nvar _DEFAULT_DELIMITER = '%';\nvar _DEFAULT_LOCALS_NAME = 'locals';\nvar _NAME = 'ejs';\nvar _REGEX_STRING = '(<%%|%%>|<%=|<%-|<%_|<%#|<%|%>|-%>|_%>)';\nvar _OPTS_PASSABLE_WITH_DATA = ['delimiter', 'scope', 'context', 'debug', 'compileDebug',\n 'client', '_with', 'rmWhitespace', 'strict', 'filename', 'async'];\n// We don't allow 'cache' option to be passed in the data obj for\n// the normal `render` call, but this is where Express 2 & 3 put it\n// so we make an exception for `renderFile`\nvar _OPTS_PASSABLE_WITH_DATA_EXPRESS = _OPTS_PASSABLE_WITH_DATA.concat('cache');\nvar _BOM = /^\\uFEFF/;\nvar _JS_IDENTIFIER = /^[a-zA-Z_$][0-9a-zA-Z_$]*$/;\n\n/**\n * EJS template function cache. This can be a LRU object from lru-cache NPM\n * module. By default, it is {@link module:utils.cache}, a simple in-process\n * cache that grows continuously.\n *\n * @type {Cache}\n */\n\nexports.cache = utils.cache;\n\n/**\n * Custom file loader. Useful for template preprocessing or restricting access\n * to a certain part of the filesystem.\n *\n * @type {fileLoader}\n */\n\nexports.fileLoader = fs.readFileSync;\n\n/**\n * Name of the object containing the locals.\n *\n * This variable is overridden by {@link Options}`.localsName` if it is not\n * `undefined`.\n *\n * @type {String}\n * @public\n */\n\nexports.localsName = _DEFAULT_LOCALS_NAME;\n\n/**\n * Promise implementation -- defaults to the native implementation if available\n * This is mostly just for testability\n *\n * @type {PromiseConstructorLike}\n * @public\n */\n\nexports.promiseImpl = (new Function('return this;'))().Promise;\n\n/**\n * Get the path to the included file from the parent file path and the\n * specified path.\n *\n * @param {String} name specified path\n * @param {String} filename parent file path\n * @param {Boolean} [isDir=false] whether the parent file path is a directory\n * @return {String}\n */\nexports.resolveInclude = function(name, filename, isDir) {\n var dirname = path.dirname;\n var extname = path.extname;\n var resolve = path.resolve;\n var includePath = resolve(isDir ? filename : dirname(filename), name);\n var ext = extname(name);\n if (!ext) {\n includePath += '.ejs';\n }\n return includePath;\n};\n\n/**\n * Try to resolve file path on multiple directories\n *\n * @param {String} name specified path\n * @param {Array} paths list of possible parent directory paths\n * @return {String}\n */\nfunction resolvePaths(name, paths) {\n var filePath;\n if (paths.some(function (v) {\n filePath = exports.resolveInclude(name, v, true);\n return fs.existsSync(filePath);\n })) {\n return filePath;\n }\n}\n\n/**\n * Get the path to the included file by Options\n *\n * @param {String} path specified path\n * @param {Options} options compilation options\n * @return {String}\n */\nfunction getIncludePath(path, options) {\n var includePath;\n var filePath;\n var views = options.views;\n var match = /^[A-Za-z]+:\\\\|^\\//.exec(path);\n\n // Abs path\n if (match && match.length) {\n path = path.replace(/^\\/*/, '');\n if (Array.isArray(options.root)) {\n includePath = resolvePaths(path, options.root);\n } else {\n includePath = exports.resolveInclude(path, options.root || '/', true);\n }\n }\n // Relative paths\n else {\n // Look relative to a passed filename first\n if (options.filename) {\n filePath = exports.resolveInclude(path, options.filename);\n if (fs.existsSync(filePath)) {\n includePath = filePath;\n }\n }\n // Then look in any views directories\n if (!includePath && Array.isArray(views)) {\n includePath = resolvePaths(path, views);\n }\n if (!includePath && typeof options.includer !== 'function') {\n throw new Error('Could not find the include file \"' +\n options.escapeFunction(path) + '\"');\n }\n }\n return includePath;\n}\n\n/**\n * Get the template from a string or a file, either compiled on-the-fly or\n * read from cache (if enabled), and cache the template if needed.\n *\n * If `template` is not set, the file specified in `options.filename` will be\n * read.\n *\n * If `options.cache` is true, this function reads the file from\n * `options.filename` so it must be set prior to calling this function.\n *\n * @memberof module:ejs-internal\n * @param {Options} options compilation options\n * @param {String} [template] template source\n * @return {(TemplateFunction|ClientFunction)}\n * Depending on the value of `options.client`, either type might be returned.\n * @static\n */\n\nfunction handleCache(options, template) {\n var func;\n var filename = options.filename;\n var hasTemplate = arguments.length > 1;\n\n if (options.cache) {\n if (!filename) {\n throw new Error('cache option requires a filename');\n }\n func = exports.cache.get(filename);\n if (func) {\n return func;\n }\n if (!hasTemplate) {\n template = fileLoader(filename).toString().replace(_BOM, '');\n }\n }\n else if (!hasTemplate) {\n // istanbul ignore if: should not happen at all\n if (!filename) {\n throw new Error('Internal EJS error: no file name or template '\n + 'provided');\n }\n template = fileLoader(filename).toString().replace(_BOM, '');\n }\n func = exports.compile(template, options);\n if (options.cache) {\n exports.cache.set(filename, func);\n }\n return func;\n}\n\n/**\n * Try calling handleCache with the given options and data and call the\n * callback with the result. If an error occurs, call the callback with\n * the error. Used by renderFile().\n *\n * @memberof module:ejs-internal\n * @param {Options} options compilation options\n * @param {Object} data template data\n * @param {RenderFileCallback} cb callback\n * @static\n */\n\nfunction tryHandleCache(options, data, cb) {\n var result;\n if (!cb) {\n if (typeof exports.promiseImpl == 'function') {\n return new exports.promiseImpl(function (resolve, reject) {\n try {\n result = handleCache(options)(data);\n resolve(result);\n }\n catch (err) {\n reject(err);\n }\n });\n }\n else {\n throw new Error('Please provide a callback function');\n }\n }\n else {\n try {\n result = handleCache(options)(data);\n }\n catch (err) {\n return cb(err);\n }\n\n cb(null, result);\n }\n}\n\n/**\n * fileLoader is independent\n *\n * @param {String} filePath ejs file path.\n * @return {String} The contents of the specified file.\n * @static\n */\n\nfunction fileLoader(filePath){\n return exports.fileLoader(filePath);\n}\n\n/**\n * Get the template function.\n *\n * If `options.cache` is `true`, then the template is cached.\n *\n * @memberof module:ejs-internal\n * @param {String} path path for the specified file\n * @param {Options} options compilation options\n * @return {(TemplateFunction|ClientFunction)}\n * Depending on the value of `options.client`, either type might be returned\n * @static\n */\n\nfunction includeFile(path, options) {\n var opts = utils.shallowCopy(utils.createNullProtoObjWherePossible(), options);\n opts.filename = getIncludePath(path, opts);\n if (typeof options.includer === 'function') {\n var includerResult = options.includer(path, opts.filename);\n if (includerResult) {\n if (includerResult.filename) {\n opts.filename = includerResult.filename;\n }\n if (includerResult.template) {\n return handleCache(opts, includerResult.template);\n }\n }\n }\n return handleCache(opts);\n}\n\n/**\n * Re-throw the given `err` in context to the `str` of ejs, `filename`, and\n * `lineno`.\n *\n * @implements {RethrowCallback}\n * @memberof module:ejs-internal\n * @param {Error} err Error object\n * @param {String} str EJS source\n * @param {String} flnm file name of the EJS file\n * @param {Number} lineno line number of the error\n * @param {EscapeCallback} esc\n * @static\n */\n\nfunction rethrow(err, str, flnm, lineno, esc) {\n var lines = str.split('\\n');\n var start = Math.max(lineno - 3, 0);\n var end = Math.min(lines.length, lineno + 3);\n var filename = esc(flnm);\n // Error context\n var context = lines.slice(start, end).map(function (line, i){\n var curr = i + start + 1;\n return (curr == lineno ? ' >> ' : ' ')\n + curr\n + '| '\n + line;\n }).join('\\n');\n\n // Alter exception message\n err.path = filename;\n err.message = (filename || 'ejs') + ':'\n + lineno + '\\n'\n + context + '\\n\\n'\n + err.message;\n\n throw err;\n}\n\nfunction stripSemi(str){\n return str.replace(/;(\\s*$)/, '$1');\n}\n\n/**\n * Compile the given `str` of ejs into a template function.\n *\n * @param {String} template EJS template\n *\n * @param {Options} [opts] compilation options\n *\n * @return {(TemplateFunction|ClientFunction)}\n * Depending on the value of `opts.client`, either type might be returned.\n * Note that the return type of the function also depends on the value of `opts.async`.\n * @public\n */\n\nexports.compile = function compile(template, opts) {\n var templ;\n\n // v1 compat\n // 'scope' is 'context'\n // FIXME: Remove this in a future version\n if (opts && opts.scope) {\n if (!scopeOptionWarned){\n console.warn('`scope` option is deprecated and will be removed in EJS 3');\n scopeOptionWarned = true;\n }\n if (!opts.context) {\n opts.context = opts.scope;\n }\n delete opts.scope;\n }\n templ = new Template(template, opts);\n return templ.compile();\n};\n\n/**\n * Render the given `template` of ejs.\n *\n * If you would like to include options but not data, you need to explicitly\n * call this function with `data` being an empty object or `null`.\n *\n * @param {String} template EJS template\n * @param {Object} [data={}] template data\n * @param {Options} [opts={}] compilation and rendering options\n * @return {(String|Promise)}\n * Return value type depends on `opts.async`.\n * @public\n */\n\nexports.render = function (template, d, o) {\n var data = d || utils.createNullProtoObjWherePossible();\n var opts = o || utils.createNullProtoObjWherePossible();\n\n // No options object -- if there are optiony names\n // in the data, copy them to options\n if (arguments.length == 2) {\n utils.shallowCopyFromList(opts, data, _OPTS_PASSABLE_WITH_DATA);\n }\n\n return handleCache(opts, template)(data);\n};\n\n/**\n * Render an EJS file at the given `path` and callback `cb(err, str)`.\n *\n * If you would like to include options but not data, you need to explicitly\n * call this function with `data` being an empty object or `null`.\n *\n * @param {String} path path to the EJS file\n * @param {Object} [data={}] template data\n * @param {Options} [opts={}] compilation and rendering options\n * @param {RenderFileCallback} cb callback\n * @public\n */\n\nexports.renderFile = function () {\n var args = Array.prototype.slice.call(arguments);\n var filename = args.shift();\n var cb;\n var opts = {filename: filename};\n var data;\n var viewOpts;\n\n // Do we have a callback?\n if (typeof arguments[arguments.length - 1] == 'function') {\n cb = args.pop();\n }\n // Do we have data/opts?\n if (args.length) {\n // Should always have data obj\n data = args.shift();\n // Normal passed opts (data obj + opts obj)\n if (args.length) {\n // Use shallowCopy so we don't pollute passed in opts obj with new vals\n utils.shallowCopy(opts, args.pop());\n }\n // Special casing for Express (settings + opts-in-data)\n else {\n // Express 3 and 4\n if (data.settings) {\n // Pull a few things from known locations\n if (data.settings.views) {\n opts.views = data.settings.views;\n }\n if (data.settings['view cache']) {\n opts.cache = true;\n }\n // Undocumented after Express 2, but still usable, esp. for\n // items that are unsafe to be passed along with data, like `root`\n viewOpts = data.settings['view options'];\n if (viewOpts) {\n utils.shallowCopy(opts, viewOpts);\n }\n }\n // Express 2 and lower, values set in app.locals, or people who just\n // want to pass options in their data. NOTE: These values will override\n // anything previously set in settings or settings['view options']\n utils.shallowCopyFromList(opts, data, _OPTS_PASSABLE_WITH_DATA_EXPRESS);\n }\n opts.filename = filename;\n }\n else {\n data = utils.createNullProtoObjWherePossible();\n }\n\n return tryHandleCache(opts, data, cb);\n};\n\n/**\n * Clear intermediate JavaScript cache. Calls {@link Cache#reset}.\n * @public\n */\n\n/**\n * EJS template class\n * @public\n */\nexports.Template = Template;\n\nexports.clearCache = function () {\n exports.cache.reset();\n};\n\nfunction Template(text, optsParam) {\n var opts = utils.hasOwnOnlyObject(optsParam);\n var options = utils.createNullProtoObjWherePossible();\n this.templateText = text;\n /** @type {string | null} */\n this.mode = null;\n this.truncate = false;\n this.currentLine = 1;\n this.source = '';\n options.client = opts.client || false;\n options.escapeFunction = opts.escape || opts.escapeFunction || utils.escapeXML;\n options.compileDebug = opts.compileDebug !== false;\n options.debug = !!opts.debug;\n options.filename = opts.filename;\n options.openDelimiter = opts.openDelimiter || exports.openDelimiter || _DEFAULT_OPEN_DELIMITER;\n options.closeDelimiter = opts.closeDelimiter || exports.closeDelimiter || _DEFAULT_CLOSE_DELIMITER;\n options.delimiter = opts.delimiter || exports.delimiter || _DEFAULT_DELIMITER;\n options.strict = opts.strict || false;\n options.context = opts.context;\n options.cache = opts.cache || false;\n options.rmWhitespace = opts.rmWhitespace;\n options.root = opts.root;\n options.includer = opts.includer;\n options.outputFunctionName = opts.outputFunctionName;\n options.localsName = opts.localsName || exports.localsName || _DEFAULT_LOCALS_NAME;\n options.views = opts.views;\n options.async = opts.async;\n options.destructuredLocals = opts.destructuredLocals;\n options.legacyInclude = typeof opts.legacyInclude != 'undefined' ? !!opts.legacyInclude : true;\n\n if (options.strict) {\n options._with = false;\n }\n else {\n options._with = typeof opts._with != 'undefined' ? opts._with : true;\n }\n\n this.opts = options;\n\n this.regex = this.createRegex();\n}\n\nTemplate.modes = {\n EVAL: 'eval',\n ESCAPED: 'escaped',\n RAW: 'raw',\n COMMENT: 'comment',\n LITERAL: 'literal'\n};\n\nTemplate.prototype = {\n createRegex: function () {\n var str = _REGEX_STRING;\n var delim = utils.escapeRegExpChars(this.opts.delimiter);\n var open = utils.escapeRegExpChars(this.opts.openDelimiter);\n var close = utils.escapeRegExpChars(this.opts.closeDelimiter);\n str = str.replace(/%/g, delim)\n .replace(//g, close);\n return new RegExp(str);\n },\n\n compile: function () {\n /** @type {string} */\n var src;\n /** @type {ClientFunction} */\n var fn;\n var opts = this.opts;\n var prepended = '';\n var appended = '';\n /** @type {EscapeCallback} */\n var escapeFn = opts.escapeFunction;\n /** @type {FunctionConstructor} */\n var ctor;\n /** @type {string} */\n var sanitizedFilename = opts.filename ? JSON.stringify(opts.filename) : 'undefined';\n\n if (!this.source) {\n this.generateSource();\n prepended +=\n ' var __output = \"\";\\n' +\n ' function __append(s) { if (s !== undefined && s !== null) __output += s }\\n';\n if (opts.outputFunctionName) {\n if (!_JS_IDENTIFIER.test(opts.outputFunctionName)) {\n throw new Error('outputFunctionName is not a valid JS identifier.');\n }\n prepended += ' var ' + opts.outputFunctionName + ' = __append;' + '\\n';\n }\n if (opts.localsName && !_JS_IDENTIFIER.test(opts.localsName)) {\n throw new Error('localsName is not a valid JS identifier.');\n }\n if (opts.destructuredLocals && opts.destructuredLocals.length) {\n var destructuring = ' var __locals = (' + opts.localsName + ' || {}),\\n';\n for (var i = 0; i < opts.destructuredLocals.length; i++) {\n var name = opts.destructuredLocals[i];\n if (!_JS_IDENTIFIER.test(name)) {\n throw new Error('destructuredLocals[' + i + '] is not a valid JS identifier.');\n }\n if (i > 0) {\n destructuring += ',\\n ';\n }\n destructuring += name + ' = __locals.' + name;\n }\n prepended += destructuring + ';\\n';\n }\n if (opts._with !== false) {\n prepended += ' with (' + opts.localsName + ' || {}) {' + '\\n';\n appended += ' }' + '\\n';\n }\n appended += ' return __output;' + '\\n';\n this.source = prepended + this.source + appended;\n }\n\n if (opts.compileDebug) {\n src = 'var __line = 1' + '\\n'\n + ' , __lines = ' + JSON.stringify(this.templateText) + '\\n'\n + ' , __filename = ' + sanitizedFilename + ';' + '\\n'\n + 'try {' + '\\n'\n + this.source\n + '} catch (e) {' + '\\n'\n + ' rethrow(e, __lines, __filename, __line, escapeFn);' + '\\n'\n + '}' + '\\n';\n }\n else {\n src = this.source;\n }\n\n if (opts.client) {\n src = 'escapeFn = escapeFn || ' + escapeFn.toString() + ';' + '\\n' + src;\n if (opts.compileDebug) {\n src = 'rethrow = rethrow || ' + rethrow.toString() + ';' + '\\n' + src;\n }\n }\n\n if (opts.strict) {\n src = '\"use strict\";\\n' + src;\n }\n if (opts.debug) {\n console.log(src);\n }\n if (opts.compileDebug && opts.filename) {\n src = src + '\\n'\n + '//# sourceURL=' + sanitizedFilename + '\\n';\n }\n\n try {\n if (opts.async) {\n // Have to use generated function for this, since in envs without support,\n // it breaks in parsing\n try {\n ctor = (new Function('return (async function(){}).constructor;'))();\n }\n catch(e) {\n if (e instanceof SyntaxError) {\n throw new Error('This environment does not support async/await');\n }\n else {\n throw e;\n }\n }\n }\n else {\n ctor = Function;\n }\n fn = new ctor(opts.localsName + ', escapeFn, include, rethrow', src);\n }\n catch(e) {\n // istanbul ignore else\n if (e instanceof SyntaxError) {\n if (opts.filename) {\n e.message += ' in ' + opts.filename;\n }\n e.message += ' while compiling ejs\\n\\n';\n e.message += 'If the above error is not helpful, you may want to try EJS-Lint:\\n';\n e.message += 'https://github.com/RyanZim/EJS-Lint';\n if (!opts.async) {\n e.message += '\\n';\n e.message += 'Or, if you meant to create an async function, pass `async: true` as an option.';\n }\n }\n throw e;\n }\n\n // Return a callable function which will execute the function\n // created by the source-code, with the passed data as locals\n // Adds a local `include` function which allows full recursive include\n var returnedFn = opts.client ? fn : function anonymous(data) {\n var include = function (path, includeData) {\n var d = utils.shallowCopy(utils.createNullProtoObjWherePossible(), data);\n if (includeData) {\n d = utils.shallowCopy(d, includeData);\n }\n return includeFile(path, opts)(d);\n };\n return fn.apply(opts.context,\n [data || utils.createNullProtoObjWherePossible(), escapeFn, include, rethrow]);\n };\n if (opts.filename && typeof Object.defineProperty === 'function') {\n var filename = opts.filename;\n var basename = path.basename(filename, path.extname(filename));\n try {\n Object.defineProperty(returnedFn, 'name', {\n value: basename,\n writable: false,\n enumerable: false,\n configurable: true\n });\n } catch (e) {/* ignore */}\n }\n return returnedFn;\n },\n\n generateSource: function () {\n var opts = this.opts;\n\n if (opts.rmWhitespace) {\n // Have to use two separate replace here as `^` and `$` operators don't\n // work well with `\\r` and empty lines don't work well with the `m` flag.\n this.templateText =\n this.templateText.replace(/[\\r\\n]+/g, '\\n').replace(/^\\s+|\\s+$/gm, '');\n }\n\n // Slurp spaces and tabs before <%_ and after _%>\n this.templateText =\n this.templateText.replace(/[ \\t]*<%_/gm, '<%_').replace(/_%>[ \\t]*/gm, '_%>');\n\n var self = this;\n var matches = this.parseTemplateText();\n var d = this.opts.delimiter;\n var o = this.opts.openDelimiter;\n var c = this.opts.closeDelimiter;\n\n if (matches && matches.length) {\n matches.forEach(function (line, index) {\n var closing;\n // If this is an opening tag, check for closing tags\n // FIXME: May end up with some false positives here\n // Better to store modes as k/v with openDelimiter + delimiter as key\n // Then this can simply check against the map\n if ( line.indexOf(o + d) === 0 // If it is a tag\n && line.indexOf(o + d + d) !== 0) { // and is not escaped\n closing = matches[index + 2];\n if (!(closing == d + c || closing == '-' + d + c || closing == '_' + d + c)) {\n throw new Error('Could not find matching close tag for \"' + line + '\".');\n }\n }\n self.scanLine(line);\n });\n }\n\n },\n\n parseTemplateText: function () {\n var str = this.templateText;\n var pat = this.regex;\n var result = pat.exec(str);\n var arr = [];\n var firstPos;\n\n while (result) {\n firstPos = result.index;\n\n if (firstPos !== 0) {\n arr.push(str.substring(0, firstPos));\n str = str.slice(firstPos);\n }\n\n arr.push(result[0]);\n str = str.slice(result[0].length);\n result = pat.exec(str);\n }\n\n if (str) {\n arr.push(str);\n }\n\n return arr;\n },\n\n _addOutput: function (line) {\n if (this.truncate) {\n // Only replace single leading linebreak in the line after\n // -%> tag -- this is the single, trailing linebreak\n // after the tag that the truncation mode replaces\n // Handle Win / Unix / old Mac linebreaks -- do the \\r\\n\n // combo first in the regex-or\n line = line.replace(/^(?:\\r\\n|\\r|\\n)/, '');\n this.truncate = false;\n }\n if (!line) {\n return line;\n }\n\n // Preserve literal slashes\n line = line.replace(/\\\\/g, '\\\\\\\\');\n\n // Convert linebreaks\n line = line.replace(/\\n/g, '\\\\n');\n line = line.replace(/\\r/g, '\\\\r');\n\n // Escape double-quotes\n // - this will be the delimiter during execution\n line = line.replace(/\"/g, '\\\\\"');\n this.source += ' ; __append(\"' + line + '\")' + '\\n';\n },\n\n scanLine: function (line) {\n var self = this;\n var d = this.opts.delimiter;\n var o = this.opts.openDelimiter;\n var c = this.opts.closeDelimiter;\n var newLineCount = 0;\n\n newLineCount = (line.split('\\n').length - 1);\n\n switch (line) {\n case o + d:\n case o + d + '_':\n this.mode = Template.modes.EVAL;\n break;\n case o + d + '=':\n this.mode = Template.modes.ESCAPED;\n break;\n case o + d + '-':\n this.mode = Template.modes.RAW;\n break;\n case o + d + '#':\n this.mode = Template.modes.COMMENT;\n break;\n case o + d + d:\n this.mode = Template.modes.LITERAL;\n this.source += ' ; __append(\"' + line.replace(o + d + d, o + d) + '\")' + '\\n';\n break;\n case d + d + c:\n this.mode = Template.modes.LITERAL;\n this.source += ' ; __append(\"' + line.replace(d + d + c, d + c) + '\")' + '\\n';\n break;\n case d + c:\n case '-' + d + c:\n case '_' + d + c:\n if (this.mode == Template.modes.LITERAL) {\n this._addOutput(line);\n }\n\n this.mode = null;\n this.truncate = line.indexOf('-') === 0 || line.indexOf('_') === 0;\n break;\n default:\n // In script mode, depends on type of tag\n if (this.mode) {\n // If '//' is found without a line break, add a line break.\n switch (this.mode) {\n case Template.modes.EVAL:\n case Template.modes.ESCAPED:\n case Template.modes.RAW:\n if (line.lastIndexOf('//') > line.lastIndexOf('\\n')) {\n line += '\\n';\n }\n }\n switch (this.mode) {\n // Just executing code\n case Template.modes.EVAL:\n this.source += ' ; ' + line + '\\n';\n break;\n // Exec, esc, and output\n case Template.modes.ESCAPED:\n this.source += ' ; __append(escapeFn(' + stripSemi(line) + '))' + '\\n';\n break;\n // Exec and output\n case Template.modes.RAW:\n this.source += ' ; __append(' + stripSemi(line) + ')' + '\\n';\n break;\n case Template.modes.COMMENT:\n // Do nothing\n break;\n // Literal <%% mode, append as raw output\n case Template.modes.LITERAL:\n this._addOutput(line);\n break;\n }\n }\n // In string mode, just add the output\n else {\n this._addOutput(line);\n }\n }\n\n if (self.opts.compileDebug && newLineCount) {\n this.currentLine += newLineCount;\n this.source += ' ; __line = ' + this.currentLine + '\\n';\n }\n }\n};\n\n/**\n * Escape characters reserved in XML.\n *\n * This is simply an export of {@link module:utils.escapeXML}.\n *\n * If `markup` is `undefined` or `null`, the empty string is returned.\n *\n * @param {String} markup Input string\n * @return {String} Escaped string\n * @public\n * @func\n * */\nexports.escapeXML = utils.escapeXML;\n\n/**\n * Express.js support.\n *\n * This is an alias for {@link module:ejs.renderFile}, in order to support\n * Express.js out-of-the-box.\n *\n * @func\n */\n\nexports.__express = exports.renderFile;\n\n/**\n * Version of EJS.\n *\n * @readonly\n * @type {String}\n * @public\n */\n\nexports.VERSION = _VERSION_STRING;\n\n/**\n * Name for detection of EJS.\n *\n * @readonly\n * @type {String}\n * @public\n */\n\nexports.name = _NAME;\n\n/* istanbul ignore if */\nif (typeof window != 'undefined') {\n window.ejs = exports;\n}\n\n","/*\n * EJS Embedded JavaScript templates\n * Copyright 2112 Matthew Eernisse (mde@fleegix.org)\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n*/\n\n/**\n * Private utility functions\n * @module utils\n * @private\n */\n\n'use strict';\n\nvar regExpChars = /[|\\\\{}()[\\]^$+*?.]/g;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar hasOwn = function (obj, key) { return hasOwnProperty.apply(obj, [key]); };\n\n/**\n * Escape characters reserved in regular expressions.\n *\n * If `string` is `undefined` or `null`, the empty string is returned.\n *\n * @param {String} string Input string\n * @return {String} Escaped string\n * @static\n * @private\n */\nexports.escapeRegExpChars = function (string) {\n // istanbul ignore if\n if (!string) {\n return '';\n }\n return String(string).replace(regExpChars, '\\\\$&');\n};\n\nvar _ENCODE_HTML_RULES = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n};\nvar _MATCH_HTML = /[&<>'\"]/g;\n\nfunction encode_char(c) {\n return _ENCODE_HTML_RULES[c] || c;\n}\n\n/**\n * Stringified version of constants used by {@link module:utils.escapeXML}.\n *\n * It is used in the process of generating {@link ClientFunction}s.\n *\n * @readonly\n * @type {String}\n */\n\nvar escapeFuncStr =\n 'var _ENCODE_HTML_RULES = {\\n'\n+ ' \"&\": \"&\"\\n'\n+ ' , \"<\": \"<\"\\n'\n+ ' , \">\": \">\"\\n'\n+ ' , \\'\"\\': \""\"\\n'\n+ ' , \"\\'\": \"'\"\\n'\n+ ' }\\n'\n+ ' , _MATCH_HTML = /[&<>\\'\"]/g;\\n'\n+ 'function encode_char(c) {\\n'\n+ ' return _ENCODE_HTML_RULES[c] || c;\\n'\n+ '};\\n';\n\n/**\n * Escape characters reserved in XML.\n *\n * If `markup` is `undefined` or `null`, the empty string is returned.\n *\n * @implements {EscapeCallback}\n * @param {String} markup Input string\n * @return {String} Escaped string\n * @static\n * @private\n */\n\nexports.escapeXML = function (markup) {\n return markup == undefined\n ? ''\n : String(markup)\n .replace(_MATCH_HTML, encode_char);\n};\n\nfunction escapeXMLToString() {\n return Function.prototype.toString.call(this) + ';\\n' + escapeFuncStr;\n}\n\ntry {\n if (typeof Object.defineProperty === 'function') {\n // If the Function prototype is frozen, the \"toString\" property is non-writable. This means that any objects which inherit this property\n // cannot have the property changed using an assignment. If using strict mode, attempting that will cause an error. If not using strict\n // mode, attempting that will be silently ignored.\n // However, we can still explicitly shadow the prototype's \"toString\" property by defining a new \"toString\" property on this object.\n Object.defineProperty(exports.escapeXML, 'toString', { value: escapeXMLToString });\n } else {\n // If Object.defineProperty() doesn't exist, attempt to shadow this property using the assignment operator.\n exports.escapeXML.toString = escapeXMLToString;\n }\n} catch (err) {\n console.warn('Unable to set escapeXML.toString (is the Function prototype frozen?)');\n}\n\n/**\n * Naive copy of properties from one object to another.\n * Does not recurse into non-scalar properties\n * Does not check to see if the property has a value before copying\n *\n * @param {Object} to Destination object\n * @param {Object} from Source object\n * @return {Object} Destination object\n * @static\n * @private\n */\nexports.shallowCopy = function (to, from) {\n from = from || {};\n if ((to !== null) && (to !== undefined)) {\n for (var p in from) {\n if (!hasOwn(from, p)) {\n continue;\n }\n if (p === '__proto__' || p === 'constructor') {\n continue;\n }\n to[p] = from[p];\n }\n }\n return to;\n};\n\n/**\n * Naive copy of a list of key names, from one object to another.\n * Only copies property if it is actually defined\n * Does not recurse into non-scalar properties\n *\n * @param {Object} to Destination object\n * @param {Object} from Source object\n * @param {Array} list List of properties to copy\n * @return {Object} Destination object\n * @static\n * @private\n */\nexports.shallowCopyFromList = function (to, from, list) {\n list = list || [];\n from = from || {};\n if ((to !== null) && (to !== undefined)) {\n for (var i = 0; i < list.length; i++) {\n var p = list[i];\n if (typeof from[p] != 'undefined') {\n if (!hasOwn(from, p)) {\n continue;\n }\n if (p === '__proto__' || p === 'constructor') {\n continue;\n }\n to[p] = from[p];\n }\n }\n }\n return to;\n};\n\n/**\n * Simple in-process cache implementation. Does not implement limits of any\n * sort.\n *\n * @implements {Cache}\n * @static\n * @private\n */\nexports.cache = {\n _data: {},\n set: function (key, val) {\n this._data[key] = val;\n },\n get: function (key) {\n return this._data[key];\n },\n remove: function (key) {\n delete this._data[key];\n },\n reset: function () {\n this._data = {};\n }\n};\n\n/**\n * Transforms hyphen case variable into camel case.\n *\n * @param {String} string Hyphen case string\n * @return {String} Camel case string\n * @static\n * @private\n */\nexports.hyphenToCamel = function (str) {\n return str.replace(/-[a-z]/g, function (match) { return match[1].toUpperCase(); });\n};\n\n/**\n * Returns a null-prototype object in runtimes that support it\n *\n * @return {Object} Object, prototype will be set to null where possible\n * @static\n * @private\n */\nexports.createNullProtoObjWherePossible = (function () {\n if (typeof Object.create == 'function') {\n return function () {\n return Object.create(null);\n };\n }\n if (!({__proto__: null} instanceof Object)) {\n return function () {\n return {__proto__: null};\n };\n }\n // Not possible, just pass through\n return function () {\n return {};\n };\n})();\n\nexports.hasOwnOnlyObject = function (obj) {\n var o = exports.createNullProtoObjWherePossible();\n for (var p in obj) {\n if (hasOwn(obj, p)) {\n o[p] = obj[p];\n }\n }\n return o;\n};\n\n","{\n \"name\": \"ejs\",\n \"description\": \"Embedded JavaScript templates\",\n \"keywords\": [\n \"template\",\n \"engine\",\n \"ejs\"\n ],\n \"version\": \"3.1.10\",\n \"author\": \"Matthew Eernisse (http://fleegix.org)\",\n \"license\": \"Apache-2.0\",\n \"bin\": {\n \"ejs\": \"./bin/cli.js\"\n },\n \"main\": \"./lib/ejs.js\",\n \"jsdelivr\": \"ejs.min.js\",\n \"unpkg\": \"ejs.min.js\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git://github.com/mde/ejs.git\"\n },\n \"bugs\": \"https://github.com/mde/ejs/issues\",\n \"homepage\": \"https://github.com/mde/ejs\",\n \"dependencies\": {\n \"jake\": \"^10.8.5\"\n },\n \"devDependencies\": {\n \"browserify\": \"^16.5.1\",\n \"eslint\": \"^6.8.0\",\n \"git-directory-deploy\": \"^1.5.1\",\n \"jsdoc\": \"^4.0.2\",\n \"lru-cache\": \"^4.0.1\",\n \"mocha\": \"^10.2.0\",\n \"uglify-js\": \"^3.3.16\"\n },\n \"engines\": {\n \"node\": \">=0.10.0\"\n },\n \"scripts\": {\n \"test\": \"npx jake test\"\n }\n}\n","/*!\n * connect\n * Copyright(c) 2010 Sencha Inc.\n * Copyright(c) 2011 TJ Holowaychuk\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar debug = require('debug')('connect:dispatcher');\nvar EventEmitter = require('events').EventEmitter;\nvar finalhandler = require('finalhandler');\nvar http = require('http');\nvar merge = require('utils-merge');\nvar parseUrl = require('parseurl');\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = createServer;\n\n/**\n * Module variables.\n * @private\n */\n\nvar env = process.env.NODE_ENV || 'development';\nvar proto = {};\n\n/* istanbul ignore next */\nvar defer = typeof setImmediate === 'function'\n ? setImmediate\n : function(fn){ process.nextTick(fn.bind.apply(fn, arguments)) }\n\n/**\n * Create a new connect server.\n *\n * @return {function}\n * @public\n */\n\nfunction createServer() {\n function app(req, res, next){ app.handle(req, res, next); }\n merge(app, proto);\n merge(app, EventEmitter.prototype);\n app.route = '/';\n app.stack = [];\n return app;\n}\n\n/**\n * Utilize the given middleware `handle` to the given `route`,\n * defaulting to _/_. This \"route\" is the mount-point for the\n * middleware, when given a value other than _/_ the middleware\n * is only effective when that segment is present in the request's\n * pathname.\n *\n * For example if we were to mount a function at _/admin_, it would\n * be invoked on _/admin_, and _/admin/settings_, however it would\n * not be invoked for _/_, or _/posts_.\n *\n * @param {String|Function|Server} route, callback or server\n * @param {Function|Server} callback or server\n * @return {Server} for chaining\n * @public\n */\n\nproto.use = function use(route, fn) {\n var handle = fn;\n var path = route;\n\n // default route to '/'\n if (typeof route !== 'string') {\n handle = route;\n path = '/';\n }\n\n // wrap sub-apps\n if (typeof handle.handle === 'function') {\n var server = handle;\n server.route = path;\n handle = function (req, res, next) {\n server.handle(req, res, next);\n };\n }\n\n // wrap vanilla http.Servers\n if (handle instanceof http.Server) {\n handle = handle.listeners('request')[0];\n }\n\n // strip trailing slash\n if (path[path.length - 1] === '/') {\n path = path.slice(0, -1);\n }\n\n // add the middleware\n debug('use %s %s', path || '/', handle.name || 'anonymous');\n this.stack.push({ route: path, handle: handle });\n\n return this;\n};\n\n/**\n * Handle server requests, punting them down\n * the middleware stack.\n *\n * @private\n */\n\nproto.handle = function handle(req, res, out) {\n var index = 0;\n var protohost = getProtohost(req.url) || '';\n var removed = '';\n var slashAdded = false;\n var stack = this.stack;\n\n // final function handler\n var done = out || finalhandler(req, res, {\n env: env,\n onerror: logerror\n });\n\n // store the original URL\n req.originalUrl = req.originalUrl || req.url;\n\n function next(err) {\n if (slashAdded) {\n req.url = req.url.substr(1);\n slashAdded = false;\n }\n\n if (removed.length !== 0) {\n req.url = protohost + removed + req.url.substr(protohost.length);\n removed = '';\n }\n\n // next callback\n var layer = stack[index++];\n\n // all done\n if (!layer) {\n defer(done, err);\n return;\n }\n\n // route data\n var path = parseUrl(req).pathname || '/';\n var route = layer.route;\n\n // skip this layer if the route doesn't match\n if (path.toLowerCase().substr(0, route.length) !== route.toLowerCase()) {\n return next(err);\n }\n\n // skip if route match does not border \"/\", \".\", or end\n var c = path.length > route.length && path[route.length];\n if (c && c !== '/' && c !== '.') {\n return next(err);\n }\n\n // trim off the part of the url that matches the route\n if (route.length !== 0 && route !== '/') {\n removed = route;\n req.url = protohost + req.url.substr(protohost.length + removed.length);\n\n // ensure leading slash\n if (!protohost && req.url[0] !== '/') {\n req.url = '/' + req.url;\n slashAdded = true;\n }\n }\n\n // call the layer handle\n call(layer.handle, route, err, req, res, next);\n }\n\n next();\n};\n\n/**\n * Listen for connections.\n *\n * This method takes the same arguments\n * as node's `http.Server#listen()`.\n *\n * HTTP and HTTPS:\n *\n * If you run your application both as HTTP\n * and HTTPS you may wrap them individually,\n * since your Connect \"server\" is really just\n * a JavaScript `Function`.\n *\n * var connect = require('connect')\n * , http = require('http')\n * , https = require('https');\n *\n * var app = connect();\n *\n * http.createServer(app).listen(80);\n * https.createServer(options, app).listen(443);\n *\n * @return {http.Server}\n * @api public\n */\n\nproto.listen = function listen() {\n var server = http.createServer(this);\n return server.listen.apply(server, arguments);\n};\n\n/**\n * Invoke a route handle.\n * @private\n */\n\nfunction call(handle, route, err, req, res, next) {\n var arity = handle.length;\n var error = err;\n var hasError = Boolean(err);\n\n debug('%s %s : %s', handle.name || '', route, req.originalUrl);\n\n try {\n if (hasError && arity === 4) {\n // error-handling middleware\n handle(err, req, res, next);\n return;\n } else if (!hasError && arity < 4) {\n // request-handling middleware\n handle(req, res, next);\n return;\n }\n } catch (e) {\n // replace the error\n error = e;\n }\n\n // continue\n next(error);\n}\n\n/**\n * Log error using console.error.\n *\n * @param {Error} err\n * @private\n */\n\nfunction logerror(err) {\n if (env !== 'test') console.error(err.stack || err.toString());\n}\n\n/**\n * Get get protocol + host for a URL.\n *\n * @param {string} url\n * @private\n */\n\nfunction getProtohost(url) {\n if (url.length === 0 || url[0] === '/') {\n return undefined;\n }\n\n var fqdnIndex = url.indexOf('://')\n\n return fqdnIndex !== -1 && url.lastIndexOf('?', fqdnIndex) === -1\n ? url.substr(0, url.indexOf('/', 3 + fqdnIndex))\n : undefined;\n}\n","/*!\n * finalhandler\n * Copyright(c) 2014-2017 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar debug = require('debug')('finalhandler')\nvar encodeUrl = require('encodeurl')\nvar escapeHtml = require('escape-html')\nvar onFinished = require('on-finished')\nvar parseUrl = require('parseurl')\nvar statuses = require('statuses')\nvar unpipe = require('unpipe')\n\n/**\n * Module variables.\n * @private\n */\n\nvar DOUBLE_SPACE_REGEXP = /\\x20{2}/g\nvar NEWLINE_REGEXP = /\\n/g\n\n/* istanbul ignore next */\nvar defer = typeof setImmediate === 'function'\n ? setImmediate\n : function (fn) { process.nextTick(fn.bind.apply(fn, arguments)) }\nvar isFinished = onFinished.isFinished\n\n/**\n * Create a minimal HTML document.\n *\n * @param {string} message\n * @private\n */\n\nfunction createHtmlDocument (message) {\n var body = escapeHtml(message)\n .replace(NEWLINE_REGEXP, '
')\n .replace(DOUBLE_SPACE_REGEXP, '  ')\n\n return '\\n' +\n '\\n' +\n '\\n' +\n '\\n' +\n 'Error\\n' +\n '\\n' +\n '\\n' +\n '
' + body + '
\\n' +\n '\\n' +\n '\\n'\n}\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = finalhandler\n\n/**\n * Create a function to handle the final response.\n *\n * @param {Request} req\n * @param {Response} res\n * @param {Object} [options]\n * @return {Function}\n * @public\n */\n\nfunction finalhandler (req, res, options) {\n var opts = options || {}\n\n // get environment\n var env = opts.env || process.env.NODE_ENV || 'development'\n\n // get error callback\n var onerror = opts.onerror\n\n return function (err) {\n var headers\n var msg\n var status\n\n // ignore 404 on in-flight response\n if (!err && headersSent(res)) {\n debug('cannot 404 after headers sent')\n return\n }\n\n // unhandled error\n if (err) {\n // respect status code from error\n status = getErrorStatusCode(err)\n\n if (status === undefined) {\n // fallback to status code on response\n status = getResponseStatusCode(res)\n } else {\n // respect headers from error\n headers = getErrorHeaders(err)\n }\n\n // get error message\n msg = getErrorMessage(err, status, env)\n } else {\n // not found\n status = 404\n msg = 'Cannot ' + req.method + ' ' + encodeUrl(getResourceName(req))\n }\n\n debug('default %s', status)\n\n // schedule onerror callback\n if (err && onerror) {\n defer(onerror, err, req, res)\n }\n\n // cannot actually respond\n if (headersSent(res)) {\n debug('cannot %d after headers sent', status)\n req.socket.destroy()\n return\n }\n\n // send response\n send(req, res, status, headers, msg)\n }\n}\n\n/**\n * Get headers from Error object.\n *\n * @param {Error} err\n * @return {object}\n * @private\n */\n\nfunction getErrorHeaders (err) {\n if (!err.headers || typeof err.headers !== 'object') {\n return undefined\n }\n\n var headers = Object.create(null)\n var keys = Object.keys(err.headers)\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i]\n headers[key] = err.headers[key]\n }\n\n return headers\n}\n\n/**\n * Get message from Error object, fallback to status message.\n *\n * @param {Error} err\n * @param {number} status\n * @param {string} env\n * @return {string}\n * @private\n */\n\nfunction getErrorMessage (err, status, env) {\n var msg\n\n if (env !== 'production') {\n // use err.stack, which typically includes err.message\n msg = err.stack\n\n // fallback to err.toString() when possible\n if (!msg && typeof err.toString === 'function') {\n msg = err.toString()\n }\n }\n\n return msg || statuses[status]\n}\n\n/**\n * Get status code from Error object.\n *\n * @param {Error} err\n * @return {number}\n * @private\n */\n\nfunction getErrorStatusCode (err) {\n // check err.status\n if (typeof err.status === 'number' && err.status >= 400 && err.status < 600) {\n return err.status\n }\n\n // check err.statusCode\n if (typeof err.statusCode === 'number' && err.statusCode >= 400 && err.statusCode < 600) {\n return err.statusCode\n }\n\n return undefined\n}\n\n/**\n * Get resource name for the request.\n *\n * This is typically just the original pathname of the request\n * but will fallback to \"resource\" is that cannot be determined.\n *\n * @param {IncomingMessage} req\n * @return {string}\n * @private\n */\n\nfunction getResourceName (req) {\n try {\n return parseUrl.original(req).pathname\n } catch (e) {\n return 'resource'\n }\n}\n\n/**\n * Get status code from response.\n *\n * @param {OutgoingMessage} res\n * @return {number}\n * @private\n */\n\nfunction getResponseStatusCode (res) {\n var status = res.statusCode\n\n // default status code to 500 if outside valid range\n if (typeof status !== 'number' || status < 400 || status > 599) {\n status = 500\n }\n\n return status\n}\n\n/**\n * Determine if the response headers have been sent.\n *\n * @param {object} res\n * @returns {boolean}\n * @private\n */\n\nfunction headersSent (res) {\n return typeof res.headersSent !== 'boolean'\n ? Boolean(res._header)\n : res.headersSent\n}\n\n/**\n * Send response.\n *\n * @param {IncomingMessage} req\n * @param {OutgoingMessage} res\n * @param {number} status\n * @param {object} headers\n * @param {string} message\n * @private\n */\n\nfunction send (req, res, status, headers, message) {\n function write () {\n // response body\n var body = createHtmlDocument(message)\n\n // response status\n res.statusCode = status\n res.statusMessage = statuses[status]\n\n // response headers\n setHeaders(res, headers)\n\n // security headers\n res.setHeader('Content-Security-Policy', \"default-src 'none'\")\n res.setHeader('X-Content-Type-Options', 'nosniff')\n\n // standard headers\n res.setHeader('Content-Type', 'text/html; charset=utf-8')\n res.setHeader('Content-Length', Buffer.byteLength(body, 'utf8'))\n\n if (req.method === 'HEAD') {\n res.end()\n return\n }\n\n res.end(body, 'utf8')\n }\n\n if (isFinished(req)) {\n write()\n return\n }\n\n // unpipe everything from the request\n unpipe(req)\n\n // flush the request\n onFinished(req, write)\n req.resume()\n}\n\n/**\n * Set response headers from an object.\n *\n * @param {OutgoingMessage} res\n * @param {object} headers\n * @private\n */\n\nfunction setHeaders (res, headers) {\n if (!headers) {\n return\n }\n\n var keys = Object.keys(headers)\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i]\n res.setHeader(key, headers[key])\n }\n}\n","/*!\n * encodeurl\n * Copyright(c) 2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = encodeUrl\n\n/**\n * RegExp to match non-URL code points, *after* encoding (i.e. not including \"%\")\n * and including invalid escape sequences.\n * @private\n */\n\nvar ENCODE_CHARS_REGEXP = /(?:[^\\x21\\x25\\x26-\\x3B\\x3D\\x3F-\\x5B\\x5D\\x5F\\x61-\\x7A\\x7E]|%(?:[^0-9A-Fa-f]|[0-9A-Fa-f][^0-9A-Fa-f]|$))+/g\n\n/**\n * RegExp to match unmatched surrogate pair.\n * @private\n */\n\nvar UNMATCHED_SURROGATE_PAIR_REGEXP = /(^|[^\\uD800-\\uDBFF])[\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF]([^\\uDC00-\\uDFFF]|$)/g\n\n/**\n * String to replace unmatched surrogate pair with.\n * @private\n */\n\nvar UNMATCHED_SURROGATE_PAIR_REPLACE = '$1\\uFFFD$2'\n\n/**\n * Encode a URL to a percent-encoded form, excluding already-encoded sequences.\n *\n * This function will take an already-encoded URL and encode all the non-URL\n * code points. This function will not encode the \"%\" character unless it is\n * not part of a valid sequence (`%20` will be left as-is, but `%foo` will\n * be encoded as `%25foo`).\n *\n * This encode is meant to be \"safe\" and does not throw errors. It will try as\n * hard as it can to properly encode the given URL, including replacing any raw,\n * unpaired surrogate pairs with the Unicode replacement character prior to\n * encoding.\n *\n * @param {string} url\n * @return {string}\n * @public\n */\n\nfunction encodeUrl (url) {\n return String(url)\n .replace(UNMATCHED_SURROGATE_PAIR_REGEXP, UNMATCHED_SURROGATE_PAIR_REPLACE)\n .replace(ENCODE_CHARS_REGEXP, encodeURI)\n}\n","/*!\n * escape-html\n * Copyright(c) 2012-2013 TJ Holowaychuk\n * Copyright(c) 2015 Andreas Lubbe\n * Copyright(c) 2015 Tiancheng \"Timothy\" Gu\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module variables.\n * @private\n */\n\nvar matchHtmlRegExp = /[\"'&<>]/;\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = escapeHtml;\n\n/**\n * Escape special characters in the given string of html.\n *\n * @param {string} string The string to escape for inserting into HTML\n * @return {string}\n * @public\n */\n\nfunction escapeHtml(string) {\n var str = '' + string;\n var match = matchHtmlRegExp.exec(str);\n\n if (!match) {\n return str;\n }\n\n var escape;\n var html = '';\n var index = 0;\n var lastIndex = 0;\n\n for (index = match.index; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34: // \"\n escape = '"';\n break;\n case 38: // &\n escape = '&';\n break;\n case 39: // '\n escape = ''';\n break;\n case 60: // <\n escape = '<';\n break;\n case 62: // >\n escape = '>';\n break;\n default:\n continue;\n }\n\n if (lastIndex !== index) {\n html += str.substring(lastIndex, index);\n }\n\n lastIndex = index + 1;\n html += escape;\n }\n\n return lastIndex !== index\n ? html + str.substring(lastIndex, index)\n : html;\n}\n","/*!\n * on-finished\n * Copyright(c) 2013 Jonathan Ong\n * Copyright(c) 2014 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = onFinished\nmodule.exports.isFinished = isFinished\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar first = require('ee-first')\n\n/**\n * Variables.\n * @private\n */\n\n/* istanbul ignore next */\nvar defer = typeof setImmediate === 'function'\n ? setImmediate\n : function(fn){ process.nextTick(fn.bind.apply(fn, arguments)) }\n\n/**\n * Invoke callback when the response has finished, useful for\n * cleaning up resources afterwards.\n *\n * @param {object} msg\n * @param {function} listener\n * @return {object}\n * @public\n */\n\nfunction onFinished(msg, listener) {\n if (isFinished(msg) !== false) {\n defer(listener, null, msg)\n return msg\n }\n\n // attach the listener to the message\n attachListener(msg, listener)\n\n return msg\n}\n\n/**\n * Determine if message is already finished.\n *\n * @param {object} msg\n * @return {boolean}\n * @public\n */\n\nfunction isFinished(msg) {\n var socket = msg.socket\n\n if (typeof msg.finished === 'boolean') {\n // OutgoingMessage\n return Boolean(msg.finished || (socket && !socket.writable))\n }\n\n if (typeof msg.complete === 'boolean') {\n // IncomingMessage\n return Boolean(msg.upgrade || !socket || !socket.readable || (msg.complete && !msg.readable))\n }\n\n // don't know\n return undefined\n}\n\n/**\n * Attach a finished listener to the message.\n *\n * @param {object} msg\n * @param {function} callback\n * @private\n */\n\nfunction attachFinishedListener(msg, callback) {\n var eeMsg\n var eeSocket\n var finished = false\n\n function onFinish(error) {\n eeMsg.cancel()\n eeSocket.cancel()\n\n finished = true\n callback(error)\n }\n\n // finished on first message event\n eeMsg = eeSocket = first([[msg, 'end', 'finish']], onFinish)\n\n function onSocket(socket) {\n // remove listener\n msg.removeListener('socket', onSocket)\n\n if (finished) return\n if (eeMsg !== eeSocket) return\n\n // finished on first socket event\n eeSocket = first([[socket, 'error', 'close']], onFinish)\n }\n\n if (msg.socket) {\n // socket already assigned\n onSocket(msg.socket)\n return\n }\n\n // wait for socket to be assigned\n msg.on('socket', onSocket)\n\n if (msg.socket === undefined) {\n // node.js 0.8 patch\n patchAssignSocket(msg, onSocket)\n }\n}\n\n/**\n * Attach the listener to the message.\n *\n * @param {object} msg\n * @return {function}\n * @private\n */\n\nfunction attachListener(msg, listener) {\n var attached = msg.__onFinished\n\n // create a private single listener with queue\n if (!attached || !attached.queue) {\n attached = msg.__onFinished = createListener(msg)\n attachFinishedListener(msg, attached)\n }\n\n attached.queue.push(listener)\n}\n\n/**\n * Create listener on message.\n *\n * @param {object} msg\n * @return {function}\n * @private\n */\n\nfunction createListener(msg) {\n function listener(err) {\n if (msg.__onFinished === listener) msg.__onFinished = null\n if (!listener.queue) return\n\n var queue = listener.queue\n listener.queue = null\n\n for (var i = 0; i < queue.length; i++) {\n queue[i](err, msg)\n }\n }\n\n listener.queue = []\n\n return listener\n}\n\n/**\n * Patch ServerResponse.prototype.assignSocket for node.js 0.8.\n *\n * @param {ServerResponse} res\n * @param {function} callback\n * @private\n */\n\nfunction patchAssignSocket(res, callback) {\n var assignSocket = res.assignSocket\n\n if (typeof assignSocket !== 'function') return\n\n // res.on('socket', callback) is broken in 0.8\n res.assignSocket = function _assignSocket(socket) {\n assignSocket.call(this, socket)\n callback(socket)\n }\n}\n","/*!\n * ee-first\n * Copyright(c) 2014 Jonathan Ong\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = first\n\n/**\n * Get the first event in a set of event emitters and event pairs.\n *\n * @param {array} stuff\n * @param {function} done\n * @public\n */\n\nfunction first(stuff, done) {\n if (!Array.isArray(stuff))\n throw new TypeError('arg must be an array of [ee, events...] arrays')\n\n var cleanups = []\n\n for (var i = 0; i < stuff.length; i++) {\n var arr = stuff[i]\n\n if (!Array.isArray(arr) || arr.length < 2)\n throw new TypeError('each array member must be [ee, events...]')\n\n var ee = arr[0]\n\n for (var j = 1; j < arr.length; j++) {\n var event = arr[j]\n var fn = listener(event, callback)\n\n // listen to the event\n ee.on(event, fn)\n // push this listener to the list of cleanups\n cleanups.push({\n ee: ee,\n event: event,\n fn: fn,\n })\n }\n }\n\n function callback() {\n cleanup()\n done.apply(null, arguments)\n }\n\n function cleanup() {\n var x\n for (var i = 0; i < cleanups.length; i++) {\n x = cleanups[i]\n x.ee.removeListener(x.event, x.fn)\n }\n }\n\n function thunk(fn) {\n done = fn\n }\n\n thunk.cancel = cleanup\n\n return thunk\n}\n\n/**\n * Create the event listener.\n * @private\n */\n\nfunction listener(event, done) {\n return function onevent(arg1) {\n var args = new Array(arguments.length)\n var ee = this\n var err = event === 'error'\n ? arg1\n : null\n\n // copy args to prevent arguments escaping scope\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i]\n }\n\n done(err, ee, event, args)\n }\n}\n","/*!\n * parseurl\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2014-2017 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar url = require('url')\nvar parse = url.parse\nvar Url = url.Url\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = parseurl\nmodule.exports.original = originalurl\n\n/**\n * Parse the `req` url with memoization.\n *\n * @param {ServerRequest} req\n * @return {Object}\n * @public\n */\n\nfunction parseurl (req) {\n var url = req.url\n\n if (url === undefined) {\n // URL is undefined\n return undefined\n }\n\n var parsed = req._parsedUrl\n\n if (fresh(url, parsed)) {\n // Return cached URL parse\n return parsed\n }\n\n // Parse the URL\n parsed = fastparse(url)\n parsed._raw = url\n\n return (req._parsedUrl = parsed)\n};\n\n/**\n * Parse the `req` original url with fallback and memoization.\n *\n * @param {ServerRequest} req\n * @return {Object}\n * @public\n */\n\nfunction originalurl (req) {\n var url = req.originalUrl\n\n if (typeof url !== 'string') {\n // Fallback\n return parseurl(req)\n }\n\n var parsed = req._parsedOriginalUrl\n\n if (fresh(url, parsed)) {\n // Return cached URL parse\n return parsed\n }\n\n // Parse the URL\n parsed = fastparse(url)\n parsed._raw = url\n\n return (req._parsedOriginalUrl = parsed)\n};\n\n/**\n * Parse the `str` url with fast-path short-cut.\n *\n * @param {string} str\n * @return {Object}\n * @private\n */\n\nfunction fastparse (str) {\n if (typeof str !== 'string' || str.charCodeAt(0) !== 0x2f /* / */) {\n return parse(str)\n }\n\n var pathname = str\n var query = null\n var search = null\n\n // This takes the regexp from https://github.com/joyent/node/pull/7878\n // Which is /^(\\/[^?#\\s]*)(\\?[^#\\s]*)?$/\n // And unrolls it into a for loop\n for (var i = 1; i < str.length; i++) {\n switch (str.charCodeAt(i)) {\n case 0x3f: /* ? */\n if (search === null) {\n pathname = str.substring(0, i)\n query = str.substring(i + 1)\n search = str.substring(i)\n }\n break\n case 0x09: /* \\t */\n case 0x0a: /* \\n */\n case 0x0c: /* \\f */\n case 0x0d: /* \\r */\n case 0x20: /* */\n case 0x23: /* # */\n case 0xa0:\n case 0xfeff:\n return parse(str)\n }\n }\n\n var url = Url !== undefined\n ? new Url()\n : {}\n\n url.path = str\n url.href = str\n url.pathname = pathname\n\n if (search !== null) {\n url.query = query\n url.search = search\n }\n\n return url\n}\n\n/**\n * Determine if parsed is still fresh for url.\n *\n * @param {string} url\n * @param {object} parsedUrl\n * @return {boolean}\n * @private\n */\n\nfunction fresh (url, parsedUrl) {\n return typeof parsedUrl === 'object' &&\n parsedUrl !== null &&\n (Url === undefined || parsedUrl instanceof Url) &&\n parsedUrl._raw === url\n}\n","/*!\n * statuses\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar codes = require('./codes.json')\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = status\n\n// status code to message map\nstatus.STATUS_CODES = codes\n\n// array of status codes\nstatus.codes = populateStatusesMap(status, codes)\n\n// status codes for redirects\nstatus.redirect = {\n 300: true,\n 301: true,\n 302: true,\n 303: true,\n 305: true,\n 307: true,\n 308: true\n}\n\n// status codes for empty bodies\nstatus.empty = {\n 204: true,\n 205: true,\n 304: true\n}\n\n// status codes for when you should retry the request\nstatus.retry = {\n 502: true,\n 503: true,\n 504: true\n}\n\n/**\n * Populate the statuses map for given codes.\n * @private\n */\n\nfunction populateStatusesMap (statuses, codes) {\n var arr = []\n\n Object.keys(codes).forEach(function forEachCode (code) {\n var message = codes[code]\n var status = Number(code)\n\n // Populate properties\n statuses[status] = message\n statuses[message] = status\n statuses[message.toLowerCase()] = status\n\n // Add to array\n arr.push(status)\n })\n\n return arr\n}\n\n/**\n * Get the status code.\n *\n * Given a number, this will throw if it is not a known status\n * code, otherwise the code will be returned. Given a string,\n * the string will be parsed for a number and return the code\n * if valid, otherwise will lookup the code assuming this is\n * the status message.\n *\n * @param {string|number} code\n * @returns {number}\n * @public\n */\n\nfunction status (code) {\n if (typeof code === 'number') {\n if (!status[code]) throw new Error('invalid status code: ' + code)\n return code\n }\n\n if (typeof code !== 'string') {\n throw new TypeError('code must be a number or string')\n }\n\n // '403'\n var n = parseInt(code, 10)\n if (!isNaN(n)) {\n if (!status[n]) throw new Error('invalid status code: ' + n)\n return n\n }\n\n n = status[code.toLowerCase()]\n if (!n) throw new Error('invalid status message: \"' + code + '\"')\n return n\n}\n","{\n \"100\": \"Continue\",\n \"101\": \"Switching Protocols\",\n \"102\": \"Processing\",\n \"103\": \"Early Hints\",\n \"200\": \"OK\",\n \"201\": \"Created\",\n \"202\": \"Accepted\",\n \"203\": \"Non-Authoritative Information\",\n \"204\": \"No Content\",\n \"205\": \"Reset Content\",\n \"206\": \"Partial Content\",\n \"207\": \"Multi-Status\",\n \"208\": \"Already Reported\",\n \"226\": \"IM Used\",\n \"300\": \"Multiple Choices\",\n \"301\": \"Moved Permanently\",\n \"302\": \"Found\",\n \"303\": \"See Other\",\n \"304\": \"Not Modified\",\n \"305\": \"Use Proxy\",\n \"306\": \"(Unused)\",\n \"307\": \"Temporary Redirect\",\n \"308\": \"Permanent Redirect\",\n \"400\": \"Bad Request\",\n \"401\": \"Unauthorized\",\n \"402\": \"Payment Required\",\n \"403\": \"Forbidden\",\n \"404\": \"Not Found\",\n \"405\": \"Method Not Allowed\",\n \"406\": \"Not Acceptable\",\n \"407\": \"Proxy Authentication Required\",\n \"408\": \"Request Timeout\",\n \"409\": \"Conflict\",\n \"410\": \"Gone\",\n \"411\": \"Length Required\",\n \"412\": \"Precondition Failed\",\n \"413\": \"Payload Too Large\",\n \"414\": \"URI Too Long\",\n \"415\": \"Unsupported Media Type\",\n \"416\": \"Range Not Satisfiable\",\n \"417\": \"Expectation Failed\",\n \"418\": \"I'm a teapot\",\n \"421\": \"Misdirected Request\",\n \"422\": \"Unprocessable Entity\",\n \"423\": \"Locked\",\n \"424\": \"Failed Dependency\",\n \"425\": \"Unordered Collection\",\n \"426\": \"Upgrade Required\",\n \"428\": \"Precondition Required\",\n \"429\": \"Too Many Requests\",\n \"431\": \"Request Header Fields Too Large\",\n \"451\": \"Unavailable For Legal Reasons\",\n \"500\": \"Internal Server Error\",\n \"501\": \"Not Implemented\",\n \"502\": \"Bad Gateway\",\n \"503\": \"Service Unavailable\",\n \"504\": \"Gateway Timeout\",\n \"505\": \"HTTP Version Not Supported\",\n \"506\": \"Variant Also Negotiates\",\n \"507\": \"Insufficient Storage\",\n \"508\": \"Loop Detected\",\n \"509\": \"Bandwidth Limit Exceeded\",\n \"510\": \"Not Extended\",\n \"511\": \"Network Authentication Required\"\n}\n","/*!\n * unpipe\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = unpipe\n\n/**\n * Determine if there are Node.js pipe-like data listeners.\n * @private\n */\n\nfunction hasPipeDataListeners(stream) {\n var listeners = stream.listeners('data')\n\n for (var i = 0; i < listeners.length; i++) {\n if (listeners[i].name === 'ondata') {\n return true\n }\n }\n\n return false\n}\n\n/**\n * Unpipe a stream from all destinations.\n *\n * @param {object} stream\n * @public\n */\n\nfunction unpipe(stream) {\n if (!stream) {\n throw new TypeError('argument stream is required')\n }\n\n if (typeof stream.unpipe === 'function') {\n // new-style\n stream.unpipe()\n return\n }\n\n // Node.js 0.8 hack\n if (!hasPipeDataListeners(stream)) {\n return\n }\n\n var listener\n var listeners = stream.listeners('close')\n\n for (var i = 0; i < listeners.length; i++) {\n listener = listeners[i]\n\n if (listener.name !== 'cleanup' && listener.name !== 'onclose') {\n continue\n }\n\n // invoke the listener\n listener.call(stream)\n }\n}\n","// Native\nconst {promisify} = require('util');\nconst path = require('path');\nconst {createHash} = require('crypto');\nconst {realpath, lstat, createReadStream, readdir} = require('fs');\n\n// Packages\nconst url = require('url');\nconst slasher = require('./glob-slash');\nconst minimatch = require('minimatch');\nconst pathToRegExp = require('path-to-regexp');\nconst mime = require('mime-types');\nconst bytes = require('bytes');\nconst contentDisposition = require('content-disposition');\nconst isPathInside = require('path-is-inside');\nconst parseRange = require('range-parser');\n\n// Other\nconst directoryTemplate = require('./directory');\nconst errorTemplate = require('./error');\n\nconst etags = new Map();\n\nconst calculateSha = (handlers, absolutePath) =>\n\tnew Promise((resolve, reject) => {\n\t\tconst hash = createHash('sha1');\n\t\thash.update(path.extname(absolutePath));\n\t\thash.update('-');\n\t\tconst rs = handlers.createReadStream(absolutePath);\n\t\trs.on('error', reject);\n\t\trs.on('data', buf => hash.update(buf));\n\t\trs.on('end', () => {\n\t\t\tconst sha = hash.digest('hex');\n\t\t\tresolve(sha);\n\t\t});\n\t});\n\nconst sourceMatches = (source, requestPath, allowSegments) => {\n\tconst keys = [];\n\tconst slashed = slasher(source);\n\tconst resolvedPath = path.posix.resolve(requestPath);\n\n\tlet results = null;\n\n\tif (allowSegments) {\n\t\tconst normalized = slashed.replace('*', '(.*)');\n\t\tconst expression = pathToRegExp(normalized, keys);\n\n\t\tresults = expression.exec(resolvedPath);\n\n\t\tif (!results) {\n\t\t\t// clear keys so that they are not used\n\t\t\t// later with empty results. this may\n\t\t\t// happen if minimatch returns true\n\t\t\tkeys.length = 0;\n\t\t}\n\t}\n\n\tif (results || minimatch(resolvedPath, slashed)) {\n\t\treturn {\n\t\t\tkeys,\n\t\t\tresults\n\t\t};\n\t}\n\n\treturn null;\n};\n\nconst toTarget = (source, destination, previousPath) => {\n\tconst matches = sourceMatches(source, previousPath, true);\n\n\tif (!matches) {\n\t\treturn null;\n\t}\n\n\tconst {keys, results} = matches;\n\n\tconst props = {};\n\tconst {protocol} = url.parse(destination);\n\tconst normalizedDest = protocol ? destination : slasher(destination);\n\tconst toPath = pathToRegExp.compile(normalizedDest);\n\n\tfor (let index = 0; index < keys.length; index++) {\n\t\tconst {name} = keys[index];\n\t\tprops[name] = results[index + 1];\n\t}\n\n\treturn toPath(props);\n};\n\nconst applyRewrites = (requestPath, rewrites = [], repetitive) => {\n\t// We need to copy the array, since we're going to modify it.\n\tconst rewritesCopy = rewrites.slice();\n\n\t// If the method was called again, the path was already rewritten\n\t// so we need to make sure to return it.\n\tconst fallback = repetitive ? requestPath : null;\n\n\tif (rewritesCopy.length === 0) {\n\t\treturn fallback;\n\t}\n\n\tfor (let index = 0; index < rewritesCopy.length; index++) {\n\t\tconst {source, destination} = rewrites[index];\n\t\tconst target = toTarget(source, destination, requestPath);\n\n\t\tif (target) {\n\t\t\t// Remove rules that were already applied\n\t\t\trewritesCopy.splice(index, 1);\n\n\t\t\t// Check if there are remaining ones to be applied\n\t\t\treturn applyRewrites(slasher(target), rewritesCopy, true);\n\t\t}\n\t}\n\n\treturn fallback;\n};\n\nconst ensureSlashStart = target => (target.startsWith('/') ? target : `/${target}`);\n\nconst shouldRedirect = (decodedPath, {redirects = [], trailingSlash}, cleanUrl) => {\n\tconst slashing = typeof trailingSlash === 'boolean';\n\tconst defaultType = 301;\n\tconst matchHTML = /(\\.html|\\/index)$/g;\n\n\tif (redirects.length === 0 && !slashing && !cleanUrl) {\n\t\treturn null;\n\t}\n\n\t// By stripping the HTML parts from the decoded\n\t// path *before* handling the trailing slash, we make\n\t// sure that only *one* redirect occurs if both\n\t// config options are used.\n\tif (cleanUrl && matchHTML.test(decodedPath)) {\n\t\tdecodedPath = decodedPath.replace(matchHTML, '');\n\t\tif (decodedPath.indexOf('//') > -1) {\n\t\t\tdecodedPath = decodedPath.replace(/\\/+/g, '/');\n\t\t}\n\t\treturn {\n\t\t\ttarget: ensureSlashStart(decodedPath),\n\t\t\tstatusCode: defaultType\n\t\t};\n\t}\n\n\tif (slashing) {\n\t\tconst {ext, name} = path.parse(decodedPath);\n\t\tconst isTrailed = decodedPath.endsWith('/');\n\t\tconst isDotfile = name.startsWith('.');\n\n\t\tlet target = null;\n\n\t\tif (!trailingSlash && isTrailed) {\n\t\t\ttarget = decodedPath.slice(0, -1);\n\t\t} else if (trailingSlash && !isTrailed && !ext && !isDotfile) {\n\t\t\ttarget = `${decodedPath}/`;\n\t\t}\n\n\t\tif (decodedPath.indexOf('//') > -1) {\n\t\t\ttarget = decodedPath.replace(/\\/+/g, '/');\n\t\t}\n\n\t\tif (target) {\n\t\t\treturn {\n\t\t\t\ttarget: ensureSlashStart(target),\n\t\t\t\tstatusCode: defaultType\n\t\t\t};\n\t\t}\n\t}\n\n\t// This is currently the fastest way to\n\t// iterate over an array\n\tfor (let index = 0; index < redirects.length; index++) {\n\t\tconst {source, destination, type} = redirects[index];\n\t\tconst target = toTarget(source, destination, decodedPath);\n\n\t\tif (target) {\n\t\t\treturn {\n\t\t\t\ttarget,\n\t\t\t\tstatusCode: type || defaultType\n\t\t\t};\n\t\t}\n\t}\n\n\treturn null;\n};\n\nconst appendHeaders = (target, source) => {\n\tfor (let index = 0; index < source.length; index++) {\n\t\tconst {key, value} = source[index];\n\t\ttarget[key] = value;\n\t}\n};\n\nconst getHeaders = async (handlers, config, current, absolutePath, stats) => {\n\tconst {headers: customHeaders = [], etag = false} = config;\n\tconst related = {};\n\tconst {base} = path.parse(absolutePath);\n\tconst relativePath = path.relative(current, absolutePath);\n\n\tif (customHeaders.length > 0) {\n\t\t// By iterating over all headers and never stopping, developers\n\t\t// can specify multiple header sources in the config that\n\t\t// might match a single path.\n\t\tfor (let index = 0; index < customHeaders.length; index++) {\n\t\t\tconst {source, headers} = customHeaders[index];\n\n\t\t\tif (sourceMatches(source, slasher(relativePath))) {\n\t\t\t\tappendHeaders(related, headers);\n\t\t\t}\n\t\t}\n\t}\n\n\tlet defaultHeaders = {};\n\n\tif (stats) {\n\t\tdefaultHeaders = {\n\t\t\t'Content-Length': stats.size,\n\t\t\t// Default to \"inline\", which always tries to render in the browser,\n\t\t\t// if that's not working, it will save the file. But to be clear: This\n\t\t\t// only happens if it cannot find a appropiate value.\n\t\t\t'Content-Disposition': contentDisposition(base, {\n\t\t\t\ttype: 'inline'\n\t\t\t}),\n\t\t\t'Accept-Ranges': 'bytes'\n\t\t};\n\n\t\tif (etag) {\n\t\t\tlet [mtime, sha] = etags.get(absolutePath) || [];\n\t\t\tif (Number(mtime) !== Number(stats.mtime)) {\n\t\t\t\tsha = await calculateSha(handlers, absolutePath);\n\t\t\t\tetags.set(absolutePath, [stats.mtime, sha]);\n\t\t\t}\n\t\t\tdefaultHeaders['ETag'] = `\"${sha}\"`;\n\t\t} else {\n\t\t\tdefaultHeaders['Last-Modified'] = stats.mtime.toUTCString();\n\t\t}\n\n\t\tconst contentType = mime.contentType(base);\n\n\t\tif (contentType) {\n\t\t\tdefaultHeaders['Content-Type'] = contentType;\n\t\t}\n\t}\n\n\tconst headers = Object.assign(defaultHeaders, related);\n\n\tfor (const key in headers) {\n\t\tif (headers.hasOwnProperty(key) && headers[key] === null) {\n\t\t\tdelete headers[key];\n\t\t}\n\t}\n\n\treturn headers;\n};\n\nconst applicable = (decodedPath, configEntry) => {\n\tif (typeof configEntry === 'boolean') {\n\t\treturn configEntry;\n\t}\n\n\tif (Array.isArray(configEntry)) {\n\t\tfor (let index = 0; index < configEntry.length; index++) {\n\t\t\tconst source = configEntry[index];\n\n\t\t\tif (sourceMatches(source, decodedPath)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n\nconst getPossiblePaths = (relativePath, extension) => [\n\tpath.join(relativePath, `index${extension}`),\n\trelativePath.endsWith('/') ? relativePath.replace(/\\/$/g, extension) : (relativePath + extension)\n].filter(item => path.basename(item) !== extension);\n\nconst findRelated = async (current, relativePath, rewrittenPath, originalStat) => {\n\tconst possible = rewrittenPath ? [rewrittenPath] : getPossiblePaths(relativePath, '.html');\n\n\tlet stats = null;\n\n\tfor (let index = 0; index < possible.length; index++) {\n\t\tconst related = possible[index];\n\t\tconst absolutePath = path.join(current, related);\n\n\t\ttry {\n\t\t\tstats = await originalStat(absolutePath);\n\t\t} catch (err) {\n\t\t\tif (err.code !== 'ENOENT' && err.code !== 'ENOTDIR') {\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t}\n\n\t\tif (stats) {\n\t\t\treturn {\n\t\t\t\tstats,\n\t\t\t\tabsolutePath\n\t\t\t};\n\t\t}\n\t}\n\n\treturn null;\n};\n\nconst canBeListed = (excluded, file) => {\n\tconst slashed = slasher(file);\n\tlet whether = true;\n\n\tfor (let mark = 0; mark < excluded.length; mark++) {\n\t\tconst source = excluded[mark];\n\n\t\tif (sourceMatches(source, slashed)) {\n\t\t\twhether = false;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn whether;\n};\n\nconst renderDirectory = async (current, acceptsJSON, handlers, methods, config, paths) => {\n\tconst {directoryListing, trailingSlash, unlisted = [], renderSingle} = config;\n\tconst slashSuffix = typeof trailingSlash === 'boolean' ? (trailingSlash ? '/' : '') : '/';\n\tconst {relativePath, absolutePath} = paths;\n\n\tconst excluded = [\n\t\t'.DS_Store',\n\t\t'.git',\n\t\t...unlisted\n\t];\n\n\tif (!applicable(relativePath, directoryListing) && !renderSingle) {\n\t\treturn {};\n\t}\n\n\tlet files = await handlers.readdir(absolutePath);\n\n\tconst canRenderSingle = renderSingle && (files.length === 1);\n\n\tfor (let index = 0; index < files.length; index++) {\n\t\tconst file = files[index];\n\n\t\tconst filePath = path.resolve(absolutePath, file);\n\t\tconst details = path.parse(filePath);\n\n\t\t// It's important to indicate that the `stat` call was\n\t\t// spawned by the directory listing, as Now is\n\t\t// simulating those calls and needs to special-case this.\n\t\tlet stats = null;\n\n\t\tif (methods.lstat) {\n\t\t\tstats = await handlers.lstat(filePath, true);\n\t\t} else {\n\t\t\tstats = await handlers.lstat(filePath);\n\t\t}\n\n\t\tdetails.relative = path.join(relativePath, details.base);\n\n\t\tif (stats.isDirectory()) {\n\t\t\tdetails.base += slashSuffix;\n\t\t\tdetails.relative += slashSuffix;\n\t\t\tdetails.type = 'folder';\n\t\t} else {\n\t\t\tif (canRenderSingle) {\n\t\t\t\treturn {\n\t\t\t\t\tsingleFile: true,\n\t\t\t\t\tabsolutePath: filePath,\n\t\t\t\t\tstats\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tdetails.ext = details.ext.split('.')[1] || 'txt';\n\t\t\tdetails.type = 'file';\n\n\t\t\tdetails.size = bytes(stats.size, {\n\t\t\t\tunitSeparator: ' ',\n\t\t\t\tdecimalPlaces: 0\n\t\t\t});\n\t\t}\n\n\t\tdetails.title = details.base;\n\n\t\tif (canBeListed(excluded, file)) {\n\t\t\tfiles[index] = details;\n\t\t} else {\n\t\t\tdelete files[index];\n\t\t}\n\t}\n\n\tconst toRoot = path.relative(current, absolutePath);\n\tconst directory = path.join(path.basename(current), toRoot, slashSuffix);\n\tconst pathParts = directory.split(path.sep).filter(Boolean);\n\n\t// Sort to list directories first, then sort alphabetically\n\tfiles = files.sort((a, b) => {\n\t\tconst aIsDir = a.type === 'directory';\n\t\tconst bIsDir = b.type === 'directory';\n\n\t\t/* istanbul ignore next */\n\t\tif (aIsDir && !bIsDir) {\n\t\t\treturn -1;\n\t\t}\n\n\t\tif ((bIsDir && !aIsDir) || (a.base > b.base)) {\n\t\t\treturn 1;\n\t\t}\n\n\t\t/* istanbul ignore next */\n\t\tif (a.base < b.base) {\n\t\t\treturn -1;\n\t\t}\n\n\t\t/* istanbul ignore next */\n\t\treturn 0;\n\t}).filter(Boolean);\n\n\t// Add parent directory to the head of the sorted files array\n\tif (toRoot.length > 0) {\n\t\tconst directoryPath = [...pathParts].slice(1);\n\t\tconst relative = path.join('/', ...directoryPath, '..', slashSuffix);\n\n\t\tfiles.unshift({\n\t\t\ttype: 'directory',\n\t\t\tbase: '..',\n\t\t\trelative,\n\t\t\ttitle: relative,\n\t\t\text: ''\n\t\t});\n\t}\n\n\tconst subPaths = [];\n\n\tfor (let index = 0; index < pathParts.length; index++) {\n\t\tconst parents = [];\n\t\tconst isLast = index === (pathParts.length - 1);\n\n\t\tlet before = 0;\n\n\t\twhile (before <= index) {\n\t\t\tparents.push(pathParts[before]);\n\t\t\tbefore++;\n\t\t}\n\n\t\tparents.shift();\n\n\t\tsubPaths.push({\n\t\t\tname: pathParts[index] + (isLast ? slashSuffix : '/'),\n\t\t\turl: index === 0 ? '' : parents.join('/') + slashSuffix\n\t\t});\n\t}\n\n\tconst spec = {\n\t\tfiles,\n\t\tdirectory,\n\t\tpaths: subPaths\n\t};\n\n\tconst output = acceptsJSON ? JSON.stringify(spec) : directoryTemplate(spec);\n\n\treturn {directory: output};\n};\n\nconst sendError = async (absolutePath, response, acceptsJSON, current, handlers, config, spec) => {\n\tconst {err: original, message, code, statusCode} = spec;\n\n\t/* istanbul ignore next */\n\tif (original && process.env.NODE_ENV !== 'test') {\n\t\tconsole.error(original);\n\t}\n\n\tresponse.statusCode = statusCode;\n\n\tif (acceptsJSON) {\n\t\tresponse.setHeader('Content-Type', 'application/json; charset=utf-8');\n\n\t\tresponse.end(JSON.stringify({\n\t\t\terror: {\n\t\t\t\tcode,\n\t\t\t\tmessage\n\t\t\t}\n\t\t}));\n\n\t\treturn;\n\t}\n\n\tlet stats = null;\n\n\tconst errorPage = path.join(current, `${statusCode}.html`);\n\n\ttry {\n\t\tstats = await handlers.lstat(errorPage);\n\t} catch (err) {\n\t\tif (err.code !== 'ENOENT') {\n\t\t\tconsole.error(err);\n\t\t}\n\t}\n\n\tif (stats) {\n\t\tlet stream = null;\n\n\t\ttry {\n\t\t\tstream = await handlers.createReadStream(errorPage);\n\n\t\t\tconst headers = await getHeaders(handlers, config, current, errorPage, stats);\n\n\t\t\tresponse.writeHead(statusCode, headers);\n\t\t\tstream.pipe(response);\n\n\t\t\treturn;\n\t\t} catch (err) {\n\t\t\tconsole.error(err);\n\t\t}\n\t}\n\n\tconst headers = await getHeaders(handlers, config, current, absolutePath, null);\n\theaders['Content-Type'] = 'text/html; charset=utf-8';\n\n\tresponse.writeHead(statusCode, headers);\n\tresponse.end(errorTemplate({statusCode, message}));\n};\n\nconst internalError = async (...args) => {\n\tconst lastIndex = args.length - 1;\n\tconst err = args[lastIndex];\n\n\targs[lastIndex] = {\n\t\tstatusCode: 500,\n\t\tcode: 'internal_server_error',\n\t\tmessage: 'A server error has occurred',\n\t\terr\n\t};\n\n\treturn sendError(...args);\n};\n\nconst getHandlers = methods => Object.assign({\n\tlstat: promisify(lstat),\n\trealpath: promisify(realpath),\n\tcreateReadStream,\n\treaddir: promisify(readdir),\n\tsendError\n}, methods);\n\nmodule.exports = async (request, response, config = {}, methods = {}) => {\n\tconst cwd = process.cwd();\n\tconst current = config.public ? path.resolve(cwd, config.public) : cwd;\n\tconst handlers = getHandlers(methods);\n\n\tlet relativePath = null;\n\tlet acceptsJSON = null;\n\n\tif (request.headers.accept) {\n\t\tacceptsJSON = request.headers.accept.includes('application/json');\n\t}\n\n\ttry {\n\t\trelativePath = decodeURIComponent(url.parse(request.url).pathname);\n\t} catch (err) {\n\t\treturn sendError('/', response, acceptsJSON, current, handlers, config, {\n\t\t\tstatusCode: 400,\n\t\t\tcode: 'bad_request',\n\t\t\tmessage: 'Bad Request'\n\t\t});\n\t}\n\n\tlet absolutePath = path.join(current, relativePath);\n\n\t// Prevent path traversal vulnerabilities. We could do this\n\t// by ourselves, but using the package covers all the edge cases.\n\tif (!isPathInside(absolutePath, current)) {\n\t\treturn sendError(absolutePath, response, acceptsJSON, current, handlers, config, {\n\t\t\tstatusCode: 400,\n\t\t\tcode: 'bad_request',\n\t\t\tmessage: 'Bad Request'\n\t\t});\n\t}\n\n\tconst cleanUrl = applicable(relativePath, config.cleanUrls);\n\tconst redirect = shouldRedirect(relativePath, config, cleanUrl);\n\n\tif (redirect) {\n\t\tresponse.writeHead(redirect.statusCode, {\n\t\t\tLocation: encodeURI(redirect.target)\n\t\t});\n\n\t\tresponse.end();\n\t\treturn;\n\t}\n\n\tlet stats = null;\n\n\t// It's extremely important that we're doing multiple stat calls. This one\n\t// right here could technically be removed, but then the program\n\t// would be slower. Because for directories, we always want to see if a related file\n\t// exists and then (after that), fetch the directory itself if no\n\t// related file was found. However (for files, of which most have extensions), we should\n\t// always stat right away.\n\t//\n\t// When simulating a file system without directory indexes, calculating whether a\n\t// directory exists requires loading all the file paths and then checking if\n\t// one of them includes the path of the directory. As that's a very\n\t// performance-expensive thing to do, we need to ensure it's not happening if not really necessary.\n\n\tif (path.extname(relativePath) !== '') {\n\t\ttry {\n\t\t\tstats = await handlers.lstat(absolutePath);\n\t\t} catch (err) {\n\t\t\tif (err.code !== 'ENOENT' && err.code !== 'ENOTDIR') {\n\t\t\t\treturn internalError(absolutePath, response, acceptsJSON, current, handlers, config, err);\n\t\t\t}\n\t\t}\n\t}\n\n\tconst rewrittenPath = applyRewrites(relativePath, config.rewrites);\n\n\tif (!stats && (cleanUrl || rewrittenPath)) {\n\t\ttry {\n\t\t\tconst related = await findRelated(current, relativePath, rewrittenPath, handlers.lstat);\n\n\t\t\tif (related) {\n\t\t\t\t({stats, absolutePath} = related);\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tif (err.code !== 'ENOENT' && err.code !== 'ENOTDIR') {\n\t\t\t\treturn internalError(absolutePath, response, acceptsJSON, current, handlers, config, err);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (!stats) {\n\t\ttry {\n\t\t\tstats = await handlers.lstat(absolutePath);\n\t\t} catch (err) {\n\t\t\tif (err.code !== 'ENOENT' && err.code !== 'ENOTDIR') {\n\t\t\t\treturn internalError(absolutePath, response, acceptsJSON, current, handlers, config, err);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (stats && stats.isDirectory()) {\n\t\tlet directory = null;\n\t\tlet singleFile = null;\n\n\t\ttry {\n\t\t\tconst related = await renderDirectory(current, acceptsJSON, handlers, methods, config, {\n\t\t\t\trelativePath,\n\t\t\t\tabsolutePath\n\t\t\t});\n\n\t\t\tif (related.singleFile) {\n\t\t\t\t({stats, absolutePath, singleFile} = related);\n\t\t\t} else {\n\t\t\t\t({directory} = related);\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tif (err.code !== 'ENOENT') {\n\t\t\t\treturn internalError(absolutePath, response, acceptsJSON, current, handlers, config, err);\n\t\t\t}\n\t\t}\n\n\t\tif (directory) {\n\t\t\tconst contentType = acceptsJSON ? 'application/json; charset=utf-8' : 'text/html; charset=utf-8';\n\n\t\t\tresponse.statusCode = 200;\n\t\t\tresponse.setHeader('Content-Type', contentType);\n\t\t\tresponse.end(directory);\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (!singleFile) {\n\t\t\t// The directory listing is disabled, so we want to\n\t\t\t// render a 404 error.\n\t\t\tstats = null;\n\t\t}\n\t}\n\n\tconst isSymLink = stats && stats.isSymbolicLink();\n\n\t// There are two scenarios in which we want to reply with\n\t// a 404 error: Either the path does not exist, or it is a\n\t// symlink while the `symlinks` option is disabled (which it is by default).\n\tif (!stats || (!config.symlinks && isSymLink)) {\n\t\t// allow for custom 404 handling\n\t\treturn handlers.sendError(absolutePath, response, acceptsJSON, current, handlers, config, {\n\t\t\tstatusCode: 404,\n\t\t\tcode: 'not_found',\n\t\t\tmessage: 'The requested path could not be found'\n\t\t});\n\t}\n\n\t// If we figured out that the target is a symlink, we need to\n\t// resolve the symlink and run a new `stat` call just for the\n\t// target of that symlink.\n\tif (isSymLink) {\n\t\ttry {\n\t\t\tabsolutePath = await handlers.realpath(absolutePath);\n\t\t} catch (err) {\n\t\t\tif (err.code !== 'ENOENT') {\n\t\t\t\tthrow err;\n\t\t\t}\n\n\t\t\t// The requested symlink is invalid\n\t\t\treturn handlers.sendError(absolutePath, response, acceptsJSON, current, handlers, config, {\n\t\t\t\tstatusCode: 404,\n\t\t\t\tcode: 'not_found',\n\t\t\t\tmessage: 'The requested path could not be found'\n\t\t\t});\n\t\t}\n\t\tstats = await handlers.lstat(absolutePath);\n\t}\n\n\tconst streamOpts = {};\n\n\t// TODO ? if-range\n\tif (request.headers.range && stats.size) {\n\t\tconst range = parseRange(stats.size, request.headers.range);\n\n\t\tif (typeof range === 'object' && range.type === 'bytes') {\n\t\t\tconst {start, end} = range[0];\n\n\t\t\tstreamOpts.start = start;\n\t\t\tstreamOpts.end = end;\n\n\t\t\tresponse.statusCode = 206;\n\t\t} else {\n\t\t\tresponse.statusCode = 416;\n\t\t\tresponse.setHeader('Content-Range', `bytes */${stats.size}`);\n\t\t}\n\t}\n\n\t// TODO ? multiple ranges\n\n\tlet stream = null;\n\n\ttry {\n\t\tstream = await handlers.createReadStream(absolutePath, streamOpts);\n\t} catch (err) {\n\t\treturn internalError(absolutePath, response, acceptsJSON, current, handlers, config, err);\n\t}\n\n\tconst headers = await getHeaders(handlers, config, current, absolutePath, stats);\n\n\t// eslint-disable-next-line no-undefined\n\tif (streamOpts.start !== undefined && streamOpts.end !== undefined) {\n\t\theaders['Content-Range'] = `bytes ${streamOpts.start}-${streamOpts.end}/${stats.size}`;\n\t\theaders['Content-Length'] = streamOpts.end - streamOpts.start + 1;\n\t}\n\n\t// We need to check for `headers.ETag` being truthy first, otherwise it will\n\t// match `undefined` being equal to `undefined`, which is true.\n\t//\n\t// Checking for `undefined` and `null` is also important, because `Range` can be `0`.\n\t//\n\t// eslint-disable-next-line no-eq-null\n\tif (request.headers.range == null && headers.ETag && headers.ETag === request.headers['if-none-match']) {\n\t\tresponse.statusCode = 304;\n\t\tresponse.end();\n\n\t\treturn;\n\t}\n\n\tresponse.writeHead(response.statusCode || 200, headers);\n\tstream.pipe(response);\n};\n","/* ! The MIT License (MIT) Copyright (c) 2014 Scott Corgan */\n\n// This is adopted from https://github.com/scottcorgan/glob-slash/\n\nconst path = require('path');\nconst normalize = value => path.posix.normalize(path.posix.join('/', value));\n\nmodule.exports = value => (value.charAt(0) === '!' ? `!${normalize(value.substr(1))}` : normalize(value));\nmodule.exports.normalize = normalize;\n","module.exports = minimatch\nminimatch.Minimatch = Minimatch\n\nvar path = (function () { try { return require('path') } catch (e) {}}()) || {\n sep: '/'\n}\nminimatch.sep = path.sep\n\nvar GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {}\nvar expand = require('brace-expansion')\n\nvar plTypes = {\n '!': { open: '(?:(?!(?:', close: '))[^/]*?)'},\n '?': { open: '(?:', close: ')?' },\n '+': { open: '(?:', close: ')+' },\n '*': { open: '(?:', close: ')*' },\n '@': { open: '(?:', close: ')' }\n}\n\n// any single thing other than /\n// don't need to escape / when using new RegExp()\nvar qmark = '[^/]'\n\n// * => any number of characters\nvar star = qmark + '*?'\n\n// ** when dots are allowed. Anything goes, except .. and .\n// not (^ or / followed by one or two dots followed by $ or /),\n// followed by anything, any number of times.\nvar twoStarDot = '(?:(?!(?:\\\\\\/|^)(?:\\\\.{1,2})($|\\\\\\/)).)*?'\n\n// not a ^ or / followed by a dot,\n// followed by anything, any number of times.\nvar twoStarNoDot = '(?:(?!(?:\\\\\\/|^)\\\\.).)*?'\n\n// characters that need to be escaped in RegExp.\nvar reSpecials = charSet('().*{}+?[]^$\\\\!')\n\n// \"abc\" -> { a:true, b:true, c:true }\nfunction charSet (s) {\n return s.split('').reduce(function (set, c) {\n set[c] = true\n return set\n }, {})\n}\n\n// normalizes slashes.\nvar slashSplit = /\\/+/\n\nminimatch.filter = filter\nfunction filter (pattern, options) {\n options = options || {}\n return function (p, i, list) {\n return minimatch(p, pattern, options)\n }\n}\n\nfunction ext (a, b) {\n b = b || {}\n var t = {}\n Object.keys(a).forEach(function (k) {\n t[k] = a[k]\n })\n Object.keys(b).forEach(function (k) {\n t[k] = b[k]\n })\n return t\n}\n\nminimatch.defaults = function (def) {\n if (!def || typeof def !== 'object' || !Object.keys(def).length) {\n return minimatch\n }\n\n var orig = minimatch\n\n var m = function minimatch (p, pattern, options) {\n return orig(p, pattern, ext(def, options))\n }\n\n m.Minimatch = function Minimatch (pattern, options) {\n return new orig.Minimatch(pattern, ext(def, options))\n }\n m.Minimatch.defaults = function defaults (options) {\n return orig.defaults(ext(def, options)).Minimatch\n }\n\n m.filter = function filter (pattern, options) {\n return orig.filter(pattern, ext(def, options))\n }\n\n m.defaults = function defaults (options) {\n return orig.defaults(ext(def, options))\n }\n\n m.makeRe = function makeRe (pattern, options) {\n return orig.makeRe(pattern, ext(def, options))\n }\n\n m.braceExpand = function braceExpand (pattern, options) {\n return orig.braceExpand(pattern, ext(def, options))\n }\n\n m.match = function (list, pattern, options) {\n return orig.match(list, pattern, ext(def, options))\n }\n\n return m\n}\n\nMinimatch.defaults = function (def) {\n return minimatch.defaults(def).Minimatch\n}\n\nfunction minimatch (p, pattern, options) {\n assertValidPattern(pattern)\n\n if (!options) options = {}\n\n // shortcut: comments match nothing.\n if (!options.nocomment && pattern.charAt(0) === '#') {\n return false\n }\n\n return new Minimatch(pattern, options).match(p)\n}\n\nfunction Minimatch (pattern, options) {\n if (!(this instanceof Minimatch)) {\n return new Minimatch(pattern, options)\n }\n\n assertValidPattern(pattern)\n\n if (!options) options = {}\n\n pattern = pattern.trim()\n\n // windows support: need to use /, not \\\n if (!options.allowWindowsEscape && path.sep !== '/') {\n pattern = pattern.split(path.sep).join('/')\n }\n\n this.options = options\n this.set = []\n this.pattern = pattern\n this.regexp = null\n this.negate = false\n this.comment = false\n this.empty = false\n this.partial = !!options.partial\n\n // make the set of regexps etc.\n this.make()\n}\n\nMinimatch.prototype.debug = function () {}\n\nMinimatch.prototype.make = make\nfunction make () {\n var pattern = this.pattern\n var options = this.options\n\n // empty patterns and comments match nothing.\n if (!options.nocomment && pattern.charAt(0) === '#') {\n this.comment = true\n return\n }\n if (!pattern) {\n this.empty = true\n return\n }\n\n // step 1: figure out negation, etc.\n this.parseNegate()\n\n // step 2: expand braces\n var set = this.globSet = this.braceExpand()\n\n if (options.debug) this.debug = function debug() { console.error.apply(console, arguments) }\n\n this.debug(this.pattern, set)\n\n // step 3: now we have a set, so turn each one into a series of path-portion\n // matching patterns.\n // These will be regexps, except in the case of \"**\", which is\n // set to the GLOBSTAR object for globstar behavior,\n // and will not contain any / characters\n set = this.globParts = set.map(function (s) {\n return s.split(slashSplit)\n })\n\n this.debug(this.pattern, set)\n\n // glob --> regexps\n set = set.map(function (s, si, set) {\n return s.map(this.parse, this)\n }, this)\n\n this.debug(this.pattern, set)\n\n // filter out everything that didn't compile properly.\n set = set.filter(function (s) {\n return s.indexOf(false) === -1\n })\n\n this.debug(this.pattern, set)\n\n this.set = set\n}\n\nMinimatch.prototype.parseNegate = parseNegate\nfunction parseNegate () {\n var pattern = this.pattern\n var negate = false\n var options = this.options\n var negateOffset = 0\n\n if (options.nonegate) return\n\n for (var i = 0, l = pattern.length\n ; i < l && pattern.charAt(i) === '!'\n ; i++) {\n negate = !negate\n negateOffset++\n }\n\n if (negateOffset) this.pattern = pattern.substr(negateOffset)\n this.negate = negate\n}\n\n// Brace expansion:\n// a{b,c}d -> abd acd\n// a{b,}c -> abc ac\n// a{0..3}d -> a0d a1d a2d a3d\n// a{b,c{d,e}f}g -> abg acdfg acefg\n// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg\n//\n// Invalid sets are not expanded.\n// a{2..}b -> a{2..}b\n// a{b}c -> a{b}c\nminimatch.braceExpand = function (pattern, options) {\n return braceExpand(pattern, options)\n}\n\nMinimatch.prototype.braceExpand = braceExpand\n\nfunction braceExpand (pattern, options) {\n if (!options) {\n if (this instanceof Minimatch) {\n options = this.options\n } else {\n options = {}\n }\n }\n\n pattern = typeof pattern === 'undefined'\n ? this.pattern : pattern\n\n assertValidPattern(pattern)\n\n // Thanks to Yeting Li for\n // improving this regexp to avoid a ReDOS vulnerability.\n if (options.nobrace || !/\\{(?:(?!\\{).)*\\}/.test(pattern)) {\n // shortcut. no need to expand.\n return [pattern]\n }\n\n return expand(pattern)\n}\n\nvar MAX_PATTERN_LENGTH = 1024 * 64\nvar assertValidPattern = function (pattern) {\n if (typeof pattern !== 'string') {\n throw new TypeError('invalid pattern')\n }\n\n if (pattern.length > MAX_PATTERN_LENGTH) {\n throw new TypeError('pattern is too long')\n }\n}\n\n// parse a component of the expanded set.\n// At this point, no pattern may contain \"/\" in it\n// so we're going to return a 2d array, where each entry is the full\n// pattern, split on '/', and then turned into a regular expression.\n// A regexp is made at the end which joins each array with an\n// escaped /, and another full one which joins each regexp with |.\n//\n// Following the lead of Bash 4.1, note that \"**\" only has special meaning\n// when it is the *only* thing in a path portion. Otherwise, any series\n// of * is equivalent to a single *. Globstar behavior is enabled by\n// default, and can be disabled by setting options.noglobstar.\nMinimatch.prototype.parse = parse\nvar SUBPARSE = {}\nfunction parse (pattern, isSub) {\n assertValidPattern(pattern)\n\n var options = this.options\n\n // shortcuts\n if (pattern === '**') {\n if (!options.noglobstar)\n return GLOBSTAR\n else\n pattern = '*'\n }\n if (pattern === '') return ''\n\n var re = ''\n var hasMagic = !!options.nocase\n var escaping = false\n // ? => one single character\n var patternListStack = []\n var negativeLists = []\n var stateChar\n var inClass = false\n var reClassStart = -1\n var classStart = -1\n // . and .. never match anything that doesn't start with .,\n // even when options.dot is set.\n var patternStart = pattern.charAt(0) === '.' ? '' // anything\n // not (start or / followed by . or .. followed by / or end)\n : options.dot ? '(?!(?:^|\\\\\\/)\\\\.{1,2}(?:$|\\\\\\/))'\n : '(?!\\\\.)'\n var self = this\n\n function clearStateChar () {\n if (stateChar) {\n // we had some state-tracking character\n // that wasn't consumed by this pass.\n switch (stateChar) {\n case '*':\n re += star\n hasMagic = true\n break\n case '?':\n re += qmark\n hasMagic = true\n break\n default:\n re += '\\\\' + stateChar\n break\n }\n self.debug('clearStateChar %j %j', stateChar, re)\n stateChar = false\n }\n }\n\n for (var i = 0, len = pattern.length, c\n ; (i < len) && (c = pattern.charAt(i))\n ; i++) {\n this.debug('%s\\t%s %s %j', pattern, i, re, c)\n\n // skip over any that are escaped.\n if (escaping && reSpecials[c]) {\n re += '\\\\' + c\n escaping = false\n continue\n }\n\n switch (c) {\n /* istanbul ignore next */\n case '/': {\n // completely not allowed, even escaped.\n // Should already be path-split by now.\n return false\n }\n\n case '\\\\':\n clearStateChar()\n escaping = true\n continue\n\n // the various stateChar values\n // for the \"extglob\" stuff.\n case '?':\n case '*':\n case '+':\n case '@':\n case '!':\n this.debug('%s\\t%s %s %j <-- stateChar', pattern, i, re, c)\n\n // all of those are literals inside a class, except that\n // the glob [!a] means [^a] in regexp\n if (inClass) {\n this.debug(' in class')\n if (c === '!' && i === classStart + 1) c = '^'\n re += c\n continue\n }\n\n // if we already have a stateChar, then it means\n // that there was something like ** or +? in there.\n // Handle the stateChar, then proceed with this one.\n self.debug('call clearStateChar %j', stateChar)\n clearStateChar()\n stateChar = c\n // if extglob is disabled, then +(asdf|foo) isn't a thing.\n // just clear the statechar *now*, rather than even diving into\n // the patternList stuff.\n if (options.noext) clearStateChar()\n continue\n\n case '(':\n if (inClass) {\n re += '('\n continue\n }\n\n if (!stateChar) {\n re += '\\\\('\n continue\n }\n\n patternListStack.push({\n type: stateChar,\n start: i - 1,\n reStart: re.length,\n open: plTypes[stateChar].open,\n close: plTypes[stateChar].close\n })\n // negation is (?:(?!js)[^/]*)\n re += stateChar === '!' ? '(?:(?!(?:' : '(?:'\n this.debug('plType %j %j', stateChar, re)\n stateChar = false\n continue\n\n case ')':\n if (inClass || !patternListStack.length) {\n re += '\\\\)'\n continue\n }\n\n clearStateChar()\n hasMagic = true\n var pl = patternListStack.pop()\n // negation is (?:(?!js)[^/]*)\n // The others are (?:)\n re += pl.close\n if (pl.type === '!') {\n negativeLists.push(pl)\n }\n pl.reEnd = re.length\n continue\n\n case '|':\n if (inClass || !patternListStack.length || escaping) {\n re += '\\\\|'\n escaping = false\n continue\n }\n\n clearStateChar()\n re += '|'\n continue\n\n // these are mostly the same in regexp and glob\n case '[':\n // swallow any state-tracking char before the [\n clearStateChar()\n\n if (inClass) {\n re += '\\\\' + c\n continue\n }\n\n inClass = true\n classStart = i\n reClassStart = re.length\n re += c\n continue\n\n case ']':\n // a right bracket shall lose its special\n // meaning and represent itself in\n // a bracket expression if it occurs\n // first in the list. -- POSIX.2 2.8.3.2\n if (i === classStart + 1 || !inClass) {\n re += '\\\\' + c\n escaping = false\n continue\n }\n\n // handle the case where we left a class open.\n // \"[z-a]\" is valid, equivalent to \"\\[z-a\\]\"\n // split where the last [ was, make sure we don't have\n // an invalid re. if so, re-walk the contents of the\n // would-be class to re-translate any characters that\n // were passed through as-is\n // TODO: It would probably be faster to determine this\n // without a try/catch and a new RegExp, but it's tricky\n // to do safely. For now, this is safe and works.\n var cs = pattern.substring(classStart + 1, i)\n try {\n RegExp('[' + cs + ']')\n } catch (er) {\n // not a valid class!\n var sp = this.parse(cs, SUBPARSE)\n re = re.substr(0, reClassStart) + '\\\\[' + sp[0] + '\\\\]'\n hasMagic = hasMagic || sp[1]\n inClass = false\n continue\n }\n\n // finish up the class.\n hasMagic = true\n inClass = false\n re += c\n continue\n\n default:\n // swallow any state char that wasn't consumed\n clearStateChar()\n\n if (escaping) {\n // no need\n escaping = false\n } else if (reSpecials[c]\n && !(c === '^' && inClass)) {\n re += '\\\\'\n }\n\n re += c\n\n } // switch\n } // for\n\n // handle the case where we left a class open.\n // \"[abc\" is valid, equivalent to \"\\[abc\"\n if (inClass) {\n // split where the last [ was, and escape it\n // this is a huge pita. We now have to re-walk\n // the contents of the would-be class to re-translate\n // any characters that were passed through as-is\n cs = pattern.substr(classStart + 1)\n sp = this.parse(cs, SUBPARSE)\n re = re.substr(0, reClassStart) + '\\\\[' + sp[0]\n hasMagic = hasMagic || sp[1]\n }\n\n // handle the case where we had a +( thing at the *end*\n // of the pattern.\n // each pattern list stack adds 3 chars, and we need to go through\n // and escape any | chars that were passed through as-is for the regexp.\n // Go through and escape them, taking care not to double-escape any\n // | chars that were already escaped.\n for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) {\n var tail = re.slice(pl.reStart + pl.open.length)\n this.debug('setting tail', re, pl)\n // maybe some even number of \\, then maybe 1 \\, followed by a |\n tail = tail.replace(/((?:\\\\{2}){0,64})(\\\\?)\\|/g, function (_, $1, $2) {\n if (!$2) {\n // the | isn't already escaped, so escape it.\n $2 = '\\\\'\n }\n\n // need to escape all those slashes *again*, without escaping the\n // one that we need for escaping the | character. As it works out,\n // escaping an even number of slashes can be done by simply repeating\n // it exactly after itself. That's why this trick works.\n //\n // I am sorry that you have to see this.\n return $1 + $1 + $2 + '|'\n })\n\n this.debug('tail=%j\\n %s', tail, tail, pl, re)\n var t = pl.type === '*' ? star\n : pl.type === '?' ? qmark\n : '\\\\' + pl.type\n\n hasMagic = true\n re = re.slice(0, pl.reStart) + t + '\\\\(' + tail\n }\n\n // handle trailing things that only matter at the very end.\n clearStateChar()\n if (escaping) {\n // trailing \\\\\n re += '\\\\\\\\'\n }\n\n // only need to apply the nodot start if the re starts with\n // something that could conceivably capture a dot\n var addPatternStart = false\n switch (re.charAt(0)) {\n case '[': case '.': case '(': addPatternStart = true\n }\n\n // Hack to work around lack of negative lookbehind in JS\n // A pattern like: *.!(x).!(y|z) needs to ensure that a name\n // like 'a.xyz.yz' doesn't match. So, the first negative\n // lookahead, has to look ALL the way ahead, to the end of\n // the pattern.\n for (var n = negativeLists.length - 1; n > -1; n--) {\n var nl = negativeLists[n]\n\n var nlBefore = re.slice(0, nl.reStart)\n var nlFirst = re.slice(nl.reStart, nl.reEnd - 8)\n var nlLast = re.slice(nl.reEnd - 8, nl.reEnd)\n var nlAfter = re.slice(nl.reEnd)\n\n nlLast += nlAfter\n\n // Handle nested stuff like *(*.js|!(*.json)), where open parens\n // mean that we should *not* include the ) in the bit that is considered\n // \"after\" the negated section.\n var openParensBefore = nlBefore.split('(').length - 1\n var cleanAfter = nlAfter\n for (i = 0; i < openParensBefore; i++) {\n cleanAfter = cleanAfter.replace(/\\)[+*?]?/, '')\n }\n nlAfter = cleanAfter\n\n var dollar = ''\n if (nlAfter === '' && isSub !== SUBPARSE) {\n dollar = '$'\n }\n var newRe = nlBefore + nlFirst + nlAfter + dollar + nlLast\n re = newRe\n }\n\n // if the re is not \"\" at this point, then we need to make sure\n // it doesn't match against an empty path part.\n // Otherwise a/* will match a/, which it should not.\n if (re !== '' && hasMagic) {\n re = '(?=.)' + re\n }\n\n if (addPatternStart) {\n re = patternStart + re\n }\n\n // parsing just a piece of a larger pattern.\n if (isSub === SUBPARSE) {\n return [re, hasMagic]\n }\n\n // skip the regexp for non-magical patterns\n // unescape anything in it, though, so that it'll be\n // an exact match against a file etc.\n if (!hasMagic) {\n return globUnescape(pattern)\n }\n\n var flags = options.nocase ? 'i' : ''\n try {\n var regExp = new RegExp('^' + re + '$', flags)\n } catch (er) /* istanbul ignore next - should be impossible */ {\n // If it was an invalid regular expression, then it can't match\n // anything. This trick looks for a character after the end of\n // the string, which is of course impossible, except in multi-line\n // mode, but it's not a /m regex.\n return new RegExp('$.')\n }\n\n regExp._glob = pattern\n regExp._src = re\n\n return regExp\n}\n\nminimatch.makeRe = function (pattern, options) {\n return new Minimatch(pattern, options || {}).makeRe()\n}\n\nMinimatch.prototype.makeRe = makeRe\nfunction makeRe () {\n if (this.regexp || this.regexp === false) return this.regexp\n\n // at this point, this.set is a 2d array of partial\n // pattern strings, or \"**\".\n //\n // It's better to use .match(). This function shouldn't\n // be used, really, but it's pretty convenient sometimes,\n // when you just want to work with a regex.\n var set = this.set\n\n if (!set.length) {\n this.regexp = false\n return this.regexp\n }\n var options = this.options\n\n var twoStar = options.noglobstar ? star\n : options.dot ? twoStarDot\n : twoStarNoDot\n var flags = options.nocase ? 'i' : ''\n\n var re = set.map(function (pattern) {\n return pattern.map(function (p) {\n return (p === GLOBSTAR) ? twoStar\n : (typeof p === 'string') ? regExpEscape(p)\n : p._src\n }).join('\\\\\\/')\n }).join('|')\n\n // must match entire pattern\n // ending in a * or ** will make it less strict.\n re = '^(?:' + re + ')$'\n\n // can match anything, as long as it's not this.\n if (this.negate) re = '^(?!' + re + ').*$'\n\n try {\n this.regexp = new RegExp(re, flags)\n } catch (ex) /* istanbul ignore next - should be impossible */ {\n this.regexp = false\n }\n return this.regexp\n}\n\nminimatch.match = function (list, pattern, options) {\n options = options || {}\n var mm = new Minimatch(pattern, options)\n list = list.filter(function (f) {\n return mm.match(f)\n })\n if (mm.options.nonull && !list.length) {\n list.push(pattern)\n }\n return list\n}\n\nMinimatch.prototype.match = function match (f, partial) {\n if (typeof partial === 'undefined') partial = this.partial\n this.debug('match', f, this.pattern)\n // short-circuit in the case of busted things.\n // comments, etc.\n if (this.comment) return false\n if (this.empty) return f === ''\n\n if (f === '/' && partial) return true\n\n var options = this.options\n\n // windows: need to use /, not \\\n if (path.sep !== '/') {\n f = f.split(path.sep).join('/')\n }\n\n // treat the test path as a set of pathparts.\n f = f.split(slashSplit)\n this.debug(this.pattern, 'split', f)\n\n // just ONE of the pattern sets in this.set needs to match\n // in order for it to be valid. If negating, then just one\n // match means that we have failed.\n // Either way, return on the first hit.\n\n var set = this.set\n this.debug(this.pattern, 'set', set)\n\n // Find the basename of the path by looking for the last non-empty segment\n var filename\n var i\n for (i = f.length - 1; i >= 0; i--) {\n filename = f[i]\n if (filename) break\n }\n\n for (i = 0; i < set.length; i++) {\n var pattern = set[i]\n var file = f\n if (options.matchBase && pattern.length === 1) {\n file = [filename]\n }\n var hit = this.matchOne(file, pattern, partial)\n if (hit) {\n if (options.flipNegate) return true\n return !this.negate\n }\n }\n\n // didn't get any hits. this is success if it's a negative\n // pattern, failure otherwise.\n if (options.flipNegate) return false\n return this.negate\n}\n\n// set partial to true to test if, for example,\n// \"/a/b\" matches the start of \"/*/b/*/d\"\n// Partial means, if you run out of file before you run\n// out of pattern, then that's fine, as long as all\n// the parts match.\nMinimatch.prototype.matchOne = function (file, pattern, partial) {\n var options = this.options\n\n this.debug('matchOne',\n { 'this': this, file: file, pattern: pattern })\n\n this.debug('matchOne', file.length, pattern.length)\n\n for (var fi = 0,\n pi = 0,\n fl = file.length,\n pl = pattern.length\n ; (fi < fl) && (pi < pl)\n ; fi++, pi++) {\n this.debug('matchOne loop')\n var p = pattern[pi]\n var f = file[fi]\n\n this.debug(pattern, p, f)\n\n // should be impossible.\n // some invalid regexp stuff in the set.\n /* istanbul ignore if */\n if (p === false) return false\n\n if (p === GLOBSTAR) {\n this.debug('GLOBSTAR', [pattern, p, f])\n\n // \"**\"\n // a/**/b/**/c would match the following:\n // a/b/x/y/z/c\n // a/x/y/z/b/c\n // a/b/x/b/x/c\n // a/b/c\n // To do this, take the rest of the pattern after\n // the **, and see if it would match the file remainder.\n // If so, return success.\n // If not, the ** \"swallows\" a segment, and try again.\n // This is recursively awful.\n //\n // a/**/b/**/c matching a/b/x/y/z/c\n // - a matches a\n // - doublestar\n // - matchOne(b/x/y/z/c, b/**/c)\n // - b matches b\n // - doublestar\n // - matchOne(x/y/z/c, c) -> no\n // - matchOne(y/z/c, c) -> no\n // - matchOne(z/c, c) -> no\n // - matchOne(c, c) yes, hit\n var fr = fi\n var pr = pi + 1\n if (pr === pl) {\n this.debug('** at the end')\n // a ** at the end will just swallow the rest.\n // We have found a match.\n // however, it will not swallow /.x, unless\n // options.dot is set.\n // . and .. are *never* matched by **, for explosively\n // exponential reasons.\n for (; fi < fl; fi++) {\n if (file[fi] === '.' || file[fi] === '..' ||\n (!options.dot && file[fi].charAt(0) === '.')) return false\n }\n return true\n }\n\n // ok, let's see if we can swallow whatever we can.\n while (fr < fl) {\n var swallowee = file[fr]\n\n this.debug('\\nglobstar while', file, fr, pattern, pr, swallowee)\n\n // XXX remove this slice. Just pass the start index.\n if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) {\n this.debug('globstar found match!', fr, fl, swallowee)\n // found a match.\n return true\n } else {\n // can't swallow \".\" or \"..\" ever.\n // can only swallow \".foo\" when explicitly asked.\n if (swallowee === '.' || swallowee === '..' ||\n (!options.dot && swallowee.charAt(0) === '.')) {\n this.debug('dot detected!', file, fr, pattern, pr)\n break\n }\n\n // ** swallows a segment, and continue.\n this.debug('globstar swallow a segment, and continue')\n fr++\n }\n }\n\n // no match was found.\n // However, in partial mode, we can't say this is necessarily over.\n // If there's more *pattern* left, then\n /* istanbul ignore if */\n if (partial) {\n // ran out of file\n this.debug('\\n>>> no match, partial?', file, fr, pattern, pr)\n if (fr === fl) return true\n }\n return false\n }\n\n // something other than **\n // non-magic patterns just have to match exactly\n // patterns with magic have been turned into regexps.\n var hit\n if (typeof p === 'string') {\n hit = f === p\n this.debug('string match', p, f, hit)\n } else {\n hit = f.match(p)\n this.debug('pattern match', p, f, hit)\n }\n\n if (!hit) return false\n }\n\n // Note: ending in / means that we'll get a final \"\"\n // at the end of the pattern. This can only match a\n // corresponding \"\" at the end of the file.\n // If the file ends in /, then it can only match a\n // a pattern that ends in /, unless the pattern just\n // doesn't have any more for it. But, a/b/ should *not*\n // match \"a/b/*\", even though \"\" matches against the\n // [^/]*? pattern, except in partial mode, where it might\n // simply not be reached yet.\n // However, a/b/ should still satisfy a/*\n\n // now either we fell off the end of the pattern, or we're done.\n if (fi === fl && pi === pl) {\n // ran out of pattern and filename at the same time.\n // an exact hit!\n return true\n } else if (fi === fl) {\n // ran out of file, but still had pattern left.\n // this is ok if we're doing the match as part of\n // a glob fs traversal.\n return partial\n } else /* istanbul ignore else */ if (pi === pl) {\n // ran out of pattern, still have file left.\n // this is only acceptable if we're on the very last\n // empty segment of a file with a trailing slash.\n // a/* should match a/b/\n return (fi === fl - 1) && (file[fi] === '')\n }\n\n // should be unreachable.\n /* istanbul ignore next */\n throw new Error('wtf?')\n}\n\n// replace stuff like \\* with *\nfunction globUnescape (s) {\n return s.replace(/\\\\(.)/g, '$1')\n}\n\nfunction regExpEscape (s) {\n return s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&')\n}\n","var concatMap = require('concat-map');\nvar balanced = require('balanced-match');\n\nmodule.exports = expandTop;\n\nvar escSlash = '\\0SLASH'+Math.random()+'\\0';\nvar escOpen = '\\0OPEN'+Math.random()+'\\0';\nvar escClose = '\\0CLOSE'+Math.random()+'\\0';\nvar escComma = '\\0COMMA'+Math.random()+'\\0';\nvar escPeriod = '\\0PERIOD'+Math.random()+'\\0';\n\nfunction numeric(str) {\n return parseInt(str, 10) == str\n ? parseInt(str, 10)\n : str.charCodeAt(0);\n}\n\nfunction escapeBraces(str) {\n return str.split('\\\\\\\\').join(escSlash)\n .split('\\\\{').join(escOpen)\n .split('\\\\}').join(escClose)\n .split('\\\\,').join(escComma)\n .split('\\\\.').join(escPeriod);\n}\n\nfunction unescapeBraces(str) {\n return str.split(escSlash).join('\\\\')\n .split(escOpen).join('{')\n .split(escClose).join('}')\n .split(escComma).join(',')\n .split(escPeriod).join('.');\n}\n\n\n// Basically just str.split(\",\"), but handling cases\n// where we have nested braced sections, which should be\n// treated as individual members, like {a,{b,c},d}\nfunction parseCommaParts(str) {\n if (!str)\n return [''];\n\n var parts = [];\n var m = balanced('{', '}', str);\n\n if (!m)\n return str.split(',');\n\n var pre = m.pre;\n var body = m.body;\n var post = m.post;\n var p = pre.split(',');\n\n p[p.length-1] += '{' + body + '}';\n var postParts = parseCommaParts(post);\n if (post.length) {\n p[p.length-1] += postParts.shift();\n p.push.apply(p, postParts);\n }\n\n parts.push.apply(parts, p);\n\n return parts;\n}\n\nfunction expandTop(str) {\n if (!str)\n return [];\n\n // I don't know why Bash 4.3 does this, but it does.\n // Anything starting with {} will have the first two bytes preserved\n // but *only* at the top level, so {},a}b will not expand to anything,\n // but a{},b}c will be expanded to [a}c,abc].\n // One could argue that this is a bug in Bash, but since the goal of\n // this module is to match Bash's rules, we escape a leading {}\n if (str.substr(0, 2) === '{}') {\n str = '\\\\{\\\\}' + str.substr(2);\n }\n\n return expand(escapeBraces(str), true).map(unescapeBraces);\n}\n\nfunction identity(e) {\n return e;\n}\n\nfunction embrace(str) {\n return '{' + str + '}';\n}\nfunction isPadded(el) {\n return /^-?0\\d/.test(el);\n}\n\nfunction lte(i, y) {\n return i <= y;\n}\nfunction gte(i, y) {\n return i >= y;\n}\n\nfunction expand(str, isTop) {\n var expansions = [];\n\n var m = balanced('{', '}', str);\n if (!m || /\\$$/.test(m.pre)) return [str];\n\n var isNumericSequence = /^-?\\d+\\.\\.-?\\d+(?:\\.\\.-?\\d+)?$/.test(m.body);\n var isAlphaSequence = /^[a-zA-Z]\\.\\.[a-zA-Z](?:\\.\\.-?\\d+)?$/.test(m.body);\n var isSequence = isNumericSequence || isAlphaSequence;\n var isOptions = m.body.indexOf(',') >= 0;\n if (!isSequence && !isOptions) {\n // {a},b}\n if (m.post.match(/,.*\\}/)) {\n str = m.pre + '{' + m.body + escClose + m.post;\n return expand(str);\n }\n return [str];\n }\n\n var n;\n if (isSequence) {\n n = m.body.split(/\\.\\./);\n } else {\n n = parseCommaParts(m.body);\n if (n.length === 1) {\n // x{{a,b}}y ==> x{a}y x{b}y\n n = expand(n[0], false).map(embrace);\n if (n.length === 1) {\n var post = m.post.length\n ? expand(m.post, false)\n : [''];\n return post.map(function(p) {\n return m.pre + n[0] + p;\n });\n }\n }\n }\n\n // at this point, n is the parts, and we know it's not a comma set\n // with a single entry.\n\n // no need to expand pre, since it is guaranteed to be free of brace-sets\n var pre = m.pre;\n var post = m.post.length\n ? expand(m.post, false)\n : [''];\n\n var N;\n\n if (isSequence) {\n var x = numeric(n[0]);\n var y = numeric(n[1]);\n var width = Math.max(n[0].length, n[1].length)\n var incr = n.length == 3\n ? Math.abs(numeric(n[2]))\n : 1;\n var test = lte;\n var reverse = y < x;\n if (reverse) {\n incr *= -1;\n test = gte;\n }\n var pad = n.some(isPadded);\n\n N = [];\n\n for (var i = x; test(i, y); i += incr) {\n var c;\n if (isAlphaSequence) {\n c = String.fromCharCode(i);\n if (c === '\\\\')\n c = '';\n } else {\n c = String(i);\n if (pad) {\n var need = width - c.length;\n if (need > 0) {\n var z = new Array(need + 1).join('0');\n if (i < 0)\n c = '-' + z + c.slice(1);\n else\n c = z + c;\n }\n }\n }\n N.push(c);\n }\n } else {\n N = concatMap(n, function(el) { return expand(el, false) });\n }\n\n for (var j = 0; j < N.length; j++) {\n for (var k = 0; k < post.length; k++) {\n var expansion = pre + N[j] + post[k];\n if (!isTop || isSequence || expansion)\n expansions.push(expansion);\n }\n }\n\n return expansions;\n}\n\n","module.exports = function (xs, fn) {\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n var x = fn(xs[i], i);\n if (isArray(x)) res.push.apply(res, x);\n else res.push(x);\n }\n return res;\n};\n\nvar isArray = Array.isArray || function (xs) {\n return Object.prototype.toString.call(xs) === '[object Array]';\n};\n","'use strict';\nmodule.exports = balanced;\nfunction balanced(a, b, str) {\n if (a instanceof RegExp) a = maybeMatch(a, str);\n if (b instanceof RegExp) b = maybeMatch(b, str);\n\n var r = range(a, b, str);\n\n return r && {\n start: r[0],\n end: r[1],\n pre: str.slice(0, r[0]),\n body: str.slice(r[0] + a.length, r[1]),\n post: str.slice(r[1] + b.length)\n };\n}\n\nfunction maybeMatch(reg, str) {\n var m = str.match(reg);\n return m ? m[0] : null;\n}\n\nbalanced.range = range;\nfunction range(a, b, str) {\n var begs, beg, left, right, result;\n var ai = str.indexOf(a);\n var bi = str.indexOf(b, ai + 1);\n var i = ai;\n\n if (ai >= 0 && bi > 0) {\n if(a===b) {\n return [ai, bi];\n }\n begs = [];\n left = str.length;\n\n while (i >= 0 && !result) {\n if (i == ai) {\n begs.push(i);\n ai = str.indexOf(a, i + 1);\n } else if (begs.length == 1) {\n result = [ begs.pop(), bi ];\n } else {\n beg = begs.pop();\n if (beg < left) {\n left = beg;\n right = bi;\n }\n\n bi = str.indexOf(b, i + 1);\n }\n\n i = ai < bi && ai >= 0 ? ai : bi;\n }\n\n if (begs.length) {\n result = [ left, right ];\n }\n }\n\n return result;\n}\n","/**\n * Expose `pathToRegexp`.\n */\nmodule.exports = pathToRegexp\nmodule.exports.match = match\nmodule.exports.regexpToFunction = regexpToFunction\nmodule.exports.parse = parse\nmodule.exports.compile = compile\nmodule.exports.tokensToFunction = tokensToFunction\nmodule.exports.tokensToRegExp = tokensToRegExp\n\n/**\n * Default configs.\n */\nvar DEFAULT_DELIMITER = '/'\n\n/**\n * The main path matching regexp utility.\n *\n * @type {RegExp}\n */\nvar PATH_REGEXP = new RegExp([\n // Match escaped characters that would otherwise appear in future matches.\n // This allows the user to escape special characters that won't transform.\n '(\\\\\\\\.)',\n // Match Express-style parameters and un-named parameters with a prefix\n // and optional suffixes. Matches appear as:\n //\n // \":test(\\\\d+)?\" => [\"test\", \"\\d+\", undefined, \"?\"]\n // \"(\\\\d+)\" => [undefined, undefined, \"\\d+\", undefined]\n '(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))([+*?])?'\n].join('|'), 'g')\n\n/**\n * Parse a string for the raw tokens.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!Array}\n */\nfunction parse (str, options) {\n var tokens = []\n var key = 0\n var index = 0\n var path = ''\n var defaultDelimiter = (options && options.delimiter) || DEFAULT_DELIMITER\n var whitelist = (options && options.whitelist) || undefined\n var pathEscaped = false\n var res\n\n while ((res = PATH_REGEXP.exec(str)) !== null) {\n var m = res[0]\n var escaped = res[1]\n var offset = res.index\n path += str.slice(index, offset)\n index = offset + m.length\n\n // Ignore already escaped sequences.\n if (escaped) {\n path += escaped[1]\n pathEscaped = true\n continue\n }\n\n var prev = ''\n var name = res[2]\n var capture = res[3]\n var group = res[4]\n var modifier = res[5]\n\n if (!pathEscaped && path.length) {\n var k = path.length - 1\n var c = path[k]\n var matches = whitelist ? whitelist.indexOf(c) > -1 : true\n\n if (matches) {\n prev = c\n path = path.slice(0, k)\n }\n }\n\n // Push the current path onto the tokens.\n if (path) {\n tokens.push(path)\n path = ''\n pathEscaped = false\n }\n\n var repeat = modifier === '+' || modifier === '*'\n var optional = modifier === '?' || modifier === '*'\n var pattern = capture || group\n var delimiter = prev || defaultDelimiter\n var prevText = prev || (typeof tokens[tokens.length - 1] === 'string' ? tokens[tokens.length - 1] : '')\n\n tokens.push({\n name: name || key++,\n prefix: prev,\n delimiter: delimiter,\n optional: optional,\n repeat: repeat,\n pattern: pattern\n ? escapeGroup(pattern)\n : restrictBacktrack(delimiter, defaultDelimiter, prevText)\n })\n }\n\n // Push any remaining characters.\n if (path || index < str.length) {\n tokens.push(path + str.substr(index))\n }\n\n return tokens\n}\n\nfunction restrictBacktrack (delimiter, defaultDelimiter, prevText) {\n var charGroup = '[^' + escapeString(delimiter === defaultDelimiter ? delimiter : (delimiter + defaultDelimiter)) + ']'\n\n if (!prevText || prevText.indexOf(delimiter) > -1 || prevText.indexOf(defaultDelimiter) > -1) {\n return charGroup + '+?'\n }\n\n return escapeString(prevText) + '|(?:(?!' + escapeString(prevText) + ')' + charGroup + ')+?'\n}\n\n/**\n * Compile a string to a template function for the path.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!function(Object=, Object=)}\n */\nfunction compile (str, options) {\n return tokensToFunction(parse(str, options), options)\n}\n\n/**\n * Create path match function from `path-to-regexp` spec.\n */\nfunction match (str, options) {\n var keys = []\n var re = pathToRegexp(str, keys, options)\n return regexpToFunction(re, keys)\n}\n\n/**\n * Create a path match function from `path-to-regexp` output.\n */\nfunction regexpToFunction (re, keys) {\n return function (pathname, options) {\n var m = re.exec(pathname)\n if (!m) return false\n\n var path = m[0]\n var index = m.index\n var params = {}\n var decode = (options && options.decode) || decodeURIComponent\n\n for (var i = 1; i < m.length; i++) {\n if (m[i] === undefined) continue\n\n var key = keys[i - 1]\n\n if (key.repeat) {\n params[key.name] = m[i].split(key.delimiter).map(function (value) {\n return decode(value, key)\n })\n } else {\n params[key.name] = decode(m[i], key)\n }\n }\n\n return { path: path, index: index, params: params }\n }\n}\n\n/**\n * Expose a method for transforming tokens into the path function.\n */\nfunction tokensToFunction (tokens, options) {\n // Compile all the tokens into regexps.\n var matches = new Array(tokens.length)\n\n // Compile all the patterns before compilation.\n for (var i = 0; i < tokens.length; i++) {\n if (typeof tokens[i] === 'object') {\n matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$', flags(options))\n }\n }\n\n return function (data, options) {\n var path = ''\n var encode = (options && options.encode) || encodeURIComponent\n var validate = options ? options.validate !== false : true\n\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i]\n\n if (typeof token === 'string') {\n path += token\n continue\n }\n\n var value = data ? data[token.name] : undefined\n var segment\n\n if (Array.isArray(value)) {\n if (!token.repeat) {\n throw new TypeError('Expected \"' + token.name + '\" to not repeat, but got array')\n }\n\n if (value.length === 0) {\n if (token.optional) continue\n\n throw new TypeError('Expected \"' + token.name + '\" to not be empty')\n }\n\n for (var j = 0; j < value.length; j++) {\n segment = encode(value[j], token)\n\n if (validate && !matches[i].test(segment)) {\n throw new TypeError('Expected all \"' + token.name + '\" to match \"' + token.pattern + '\"')\n }\n\n path += (j === 0 ? token.prefix : token.delimiter) + segment\n }\n\n continue\n }\n\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n segment = encode(String(value), token)\n\n if (validate && !matches[i].test(segment)) {\n throw new TypeError('Expected \"' + token.name + '\" to match \"' + token.pattern + '\", but got \"' + segment + '\"')\n }\n\n path += token.prefix + segment\n continue\n }\n\n if (token.optional) continue\n\n throw new TypeError('Expected \"' + token.name + '\" to be ' + (token.repeat ? 'an array' : 'a string'))\n }\n\n return path\n }\n}\n\n/**\n * Escape a regular expression string.\n *\n * @param {string} str\n * @return {string}\n */\nfunction escapeString (str) {\n return str.replace(/([.+*?=^!:${}()[\\]|/\\\\])/g, '\\\\$1')\n}\n\n/**\n * Escape the capturing group by escaping special characters and meaning.\n *\n * @param {string} group\n * @return {string}\n */\nfunction escapeGroup (group) {\n return group.replace(/([=!:$/()])/g, '\\\\$1')\n}\n\n/**\n * Get the flags for a regexp from the options.\n *\n * @param {Object} options\n * @return {string}\n */\nfunction flags (options) {\n return options && options.sensitive ? '' : 'i'\n}\n\n/**\n * Pull out keys from a regexp.\n *\n * @param {!RegExp} path\n * @param {Array=} keys\n * @return {!RegExp}\n */\nfunction regexpToRegexp (path, keys) {\n if (!keys) return path\n\n // Use a negative lookahead to match only capturing groups.\n var groups = path.source.match(/\\((?!\\?)/g)\n\n if (groups) {\n for (var i = 0; i < groups.length; i++) {\n keys.push({\n name: i,\n prefix: null,\n delimiter: null,\n optional: false,\n repeat: false,\n pattern: null\n })\n }\n }\n\n return path\n}\n\n/**\n * Transform an array into a regexp.\n *\n * @param {!Array} path\n * @param {Array=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction arrayToRegexp (path, keys, options) {\n var parts = []\n\n for (var i = 0; i < path.length; i++) {\n parts.push(pathToRegexp(path[i], keys, options).source)\n }\n\n return new RegExp('(?:' + parts.join('|') + ')', flags(options))\n}\n\n/**\n * Create a path regexp from string input.\n *\n * @param {string} path\n * @param {Array=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction stringToRegexp (path, keys, options) {\n return tokensToRegExp(parse(path, options), keys, options)\n}\n\n/**\n * Expose a function for taking tokens and returning a RegExp.\n *\n * @param {!Array} tokens\n * @param {Array=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction tokensToRegExp (tokens, keys, options) {\n options = options || {}\n\n var strict = options.strict\n var start = options.start !== false\n var end = options.end !== false\n var delimiter = options.delimiter || DEFAULT_DELIMITER\n var endsWith = [].concat(options.endsWith || []).map(escapeString).concat('$').join('|')\n var route = start ? '^' : ''\n\n // Iterate over the tokens and create our regexp string.\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i]\n\n if (typeof token === 'string') {\n route += escapeString(token)\n } else {\n var capture = token.repeat\n ? '(?:' + token.pattern + ')(?:' + escapeString(token.delimiter) + '(?:' + token.pattern + '))*'\n : token.pattern\n\n if (keys) keys.push(token)\n\n if (token.optional) {\n if (!token.prefix) {\n route += '(' + capture + ')?'\n } else {\n route += '(?:' + escapeString(token.prefix) + '(' + capture + '))?'\n }\n } else {\n route += escapeString(token.prefix) + '(' + capture + ')'\n }\n }\n }\n\n if (end) {\n if (!strict) route += '(?:' + escapeString(delimiter) + ')?'\n\n route += endsWith === '$' ? '$' : '(?=' + endsWith + ')'\n } else {\n var endToken = tokens[tokens.length - 1]\n var isEndDelimited = typeof endToken === 'string'\n ? endToken[endToken.length - 1] === delimiter\n : endToken === undefined\n\n if (!strict) route += '(?:' + escapeString(delimiter) + '(?=' + endsWith + '))?'\n if (!isEndDelimited) route += '(?=' + escapeString(delimiter) + '|' + endsWith + ')'\n }\n\n return new RegExp(route, flags(options))\n}\n\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n *\n * @param {(string|RegExp|Array)} path\n * @param {Array=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction pathToRegexp (path, keys, options) {\n if (path instanceof RegExp) {\n return regexpToRegexp(path, keys)\n }\n\n if (Array.isArray(path)) {\n return arrayToRegexp(/** @type {!Array} */ (path), keys, options)\n }\n\n return stringToRegexp(/** @type {string} */ (path), keys, options)\n}\n","/*!\n * mime-types\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar db = require('mime-db')\nvar extname = require('path').extname\n\n/**\n * Module variables.\n * @private\n */\n\nvar EXTRACT_TYPE_REGEXP = /^\\s*([^;\\s]*)(?:;|\\s|$)/\nvar TEXT_TYPE_REGEXP = /^text\\//i\n\n/**\n * Module exports.\n * @public\n */\n\nexports.charset = charset\nexports.charsets = { lookup: charset }\nexports.contentType = contentType\nexports.extension = extension\nexports.extensions = Object.create(null)\nexports.lookup = lookup\nexports.types = Object.create(null)\n\n// Populate the extensions/types maps\npopulateMaps(exports.extensions, exports.types)\n\n/**\n * Get the default charset for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction charset (type) {\n if (!type || typeof type !== 'string') {\n return false\n }\n\n // TODO: use media-typer\n var match = EXTRACT_TYPE_REGEXP.exec(type)\n var mime = match && db[match[1].toLowerCase()]\n\n if (mime && mime.charset) {\n return mime.charset\n }\n\n // default text/* to utf-8\n if (match && TEXT_TYPE_REGEXP.test(match[1])) {\n return 'UTF-8'\n }\n\n return false\n}\n\n/**\n * Create a full Content-Type header given a MIME type or extension.\n *\n * @param {string} str\n * @return {boolean|string}\n */\n\nfunction contentType (str) {\n // TODO: should this even be in this module?\n if (!str || typeof str !== 'string') {\n return false\n }\n\n var mime = str.indexOf('/') === -1\n ? exports.lookup(str)\n : str\n\n if (!mime) {\n return false\n }\n\n // TODO: use content-type or other module\n if (mime.indexOf('charset') === -1) {\n var charset = exports.charset(mime)\n if (charset) mime += '; charset=' + charset.toLowerCase()\n }\n\n return mime\n}\n\n/**\n * Get the default extension for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction extension (type) {\n if (!type || typeof type !== 'string') {\n return false\n }\n\n // TODO: use media-typer\n var match = EXTRACT_TYPE_REGEXP.exec(type)\n\n // get extensions\n var exts = match && exports.extensions[match[1].toLowerCase()]\n\n if (!exts || !exts.length) {\n return false\n }\n\n return exts[0]\n}\n\n/**\n * Lookup the MIME type for a file path/extension.\n *\n * @param {string} path\n * @return {boolean|string}\n */\n\nfunction lookup (path) {\n if (!path || typeof path !== 'string') {\n return false\n }\n\n // get the extension (\"ext\" or \".ext\" or full path)\n var extension = extname('x.' + path)\n .toLowerCase()\n .substr(1)\n\n if (!extension) {\n return false\n }\n\n return exports.types[extension] || false\n}\n\n/**\n * Populate the extensions and types maps.\n * @private\n */\n\nfunction populateMaps (extensions, types) {\n // source preference (least -> most)\n var preference = ['nginx', 'apache', undefined, 'iana']\n\n Object.keys(db).forEach(function forEachMimeType (type) {\n var mime = db[type]\n var exts = mime.extensions\n\n if (!exts || !exts.length) {\n return\n }\n\n // mime -> extensions\n extensions[type] = exts\n\n // extension -> mime\n for (var i = 0; i < exts.length; i++) {\n var extension = exts[i]\n\n if (types[extension]) {\n var from = preference.indexOf(db[types[extension]].source)\n var to = preference.indexOf(mime.source)\n\n if (types[extension] !== 'application/octet-stream' &&\n (from > to || (from === to && types[extension].substr(0, 12) === 'application/'))) {\n // skip the remapping\n continue\n }\n }\n\n // set the extension -> mime\n types[extension] = type\n }\n })\n}\n","/*!\n * mime-db\n * Copyright(c) 2014 Jonathan Ong\n * MIT Licensed\n */\n\n/**\n * Module exports.\n */\n\nmodule.exports = require('./db.json')\n","/*!\n * bytes\n * Copyright(c) 2012-2014 TJ Holowaychuk\n * Copyright(c) 2015 Jed Watson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = bytes;\nmodule.exports.format = format;\nmodule.exports.parse = parse;\n\n/**\n * Module variables.\n * @private\n */\n\nvar formatThousandsRegExp = /\\B(?=(\\d{3})+(?!\\d))/g;\n\nvar formatDecimalsRegExp = /(?:\\.0*|(\\.[^0]+)0+)$/;\n\nvar map = {\n b: 1,\n kb: 1 << 10,\n mb: 1 << 20,\n gb: 1 << 30,\n tb: ((1 << 30) * 1024)\n};\n\nvar parseRegExp = /^((-|\\+)?(\\d+(?:\\.\\d+)?)) *(kb|mb|gb|tb)$/i;\n\n/**\n * Convert the given value in bytes into a string or parse to string to an integer in bytes.\n *\n * @param {string|number} value\n * @param {{\n * case: [string],\n * decimalPlaces: [number]\n * fixedDecimals: [boolean]\n * thousandsSeparator: [string]\n * unitSeparator: [string]\n * }} [options] bytes options.\n *\n * @returns {string|number|null}\n */\n\nfunction bytes(value, options) {\n if (typeof value === 'string') {\n return parse(value);\n }\n\n if (typeof value === 'number') {\n return format(value, options);\n }\n\n return null;\n}\n\n/**\n * Format the given value in bytes into a string.\n *\n * If the value is negative, it is kept as such. If it is a float,\n * it is rounded.\n *\n * @param {number} value\n * @param {object} [options]\n * @param {number} [options.decimalPlaces=2]\n * @param {number} [options.fixedDecimals=false]\n * @param {string} [options.thousandsSeparator=]\n * @param {string} [options.unit=]\n * @param {string} [options.unitSeparator=]\n *\n * @returns {string|null}\n * @public\n */\n\nfunction format(value, options) {\n if (!Number.isFinite(value)) {\n return null;\n }\n\n var mag = Math.abs(value);\n var thousandsSeparator = (options && options.thousandsSeparator) || '';\n var unitSeparator = (options && options.unitSeparator) || '';\n var decimalPlaces = (options && options.decimalPlaces !== undefined) ? options.decimalPlaces : 2;\n var fixedDecimals = Boolean(options && options.fixedDecimals);\n var unit = (options && options.unit) || '';\n\n if (!unit || !map[unit.toLowerCase()]) {\n if (mag >= map.tb) {\n unit = 'TB';\n } else if (mag >= map.gb) {\n unit = 'GB';\n } else if (mag >= map.mb) {\n unit = 'MB';\n } else if (mag >= map.kb) {\n unit = 'KB';\n } else {\n unit = 'B';\n }\n }\n\n var val = value / map[unit.toLowerCase()];\n var str = val.toFixed(decimalPlaces);\n\n if (!fixedDecimals) {\n str = str.replace(formatDecimalsRegExp, '$1');\n }\n\n if (thousandsSeparator) {\n str = str.replace(formatThousandsRegExp, thousandsSeparator);\n }\n\n return str + unitSeparator + unit;\n}\n\n/**\n * Parse the string value into an integer in bytes.\n *\n * If no unit is given, it is assumed the value is in bytes.\n *\n * @param {number|string} val\n *\n * @returns {number|null}\n * @public\n */\n\nfunction parse(val) {\n if (typeof val === 'number' && !isNaN(val)) {\n return val;\n }\n\n if (typeof val !== 'string') {\n return null;\n }\n\n // Test if the string passed is valid\n var results = parseRegExp.exec(val);\n var floatValue;\n var unit = 'b';\n\n if (!results) {\n // Nothing could be extracted from the given string\n floatValue = parseInt(val, 10);\n unit = 'b'\n } else {\n // Retrieve the value and the unit\n floatValue = parseFloat(results[1]);\n unit = results[4].toLowerCase();\n }\n\n return Math.floor(map[unit] * floatValue);\n}\n","/*!\n * content-disposition\n * Copyright(c) 2014 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n */\n\nmodule.exports = contentDisposition\nmodule.exports.parse = parse\n\n/**\n * Module dependencies.\n */\n\nvar basename = require('path').basename\n\n/**\n * RegExp to match non attr-char, *after* encodeURIComponent (i.e. not including \"%\")\n */\n\nvar ENCODE_URL_ATTR_CHAR_REGEXP = /[\\x00-\\x20\"'()*,/:;<=>?@[\\\\\\]{}\\x7f]/g // eslint-disable-line no-control-regex\n\n/**\n * RegExp to match percent encoding escape.\n */\n\nvar HEX_ESCAPE_REGEXP = /%[0-9A-Fa-f]{2}/\nvar HEX_ESCAPE_REPLACE_REGEXP = /%([0-9A-Fa-f]{2})/g\n\n/**\n * RegExp to match non-latin1 characters.\n */\n\nvar NON_LATIN1_REGEXP = /[^\\x20-\\x7e\\xa0-\\xff]/g\n\n/**\n * RegExp to match quoted-pair in RFC 2616\n *\n * quoted-pair = \"\\\" CHAR\n * CHAR = \n */\n\nvar QESC_REGEXP = /\\\\([\\u0000-\\u007f])/g\n\n/**\n * RegExp to match chars that must be quoted-pair in RFC 2616\n */\n\nvar QUOTE_REGEXP = /([\\\\\"])/g\n\n/**\n * RegExp for various RFC 2616 grammar\n *\n * parameter = token \"=\" ( token | quoted-string )\n * token = 1*\n * separators = \"(\" | \")\" | \"<\" | \">\" | \"@\"\n * | \",\" | \";\" | \":\" | \"\\\" | <\">\n * | \"/\" | \"[\" | \"]\" | \"?\" | \"=\"\n * | \"{\" | \"}\" | SP | HT\n * quoted-string = ( <\"> *(qdtext | quoted-pair ) <\"> )\n * qdtext = >\n * quoted-pair = \"\\\" CHAR\n * CHAR = \n * TEXT = \n * LWS = [CRLF] 1*( SP | HT )\n * CRLF = CR LF\n * CR = \n * LF = \n * SP = \n * HT = \n * CTL = \n * OCTET = \n */\n\nvar PARAM_REGEXP = /;[\\x09\\x20]*([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\\x09\\x20]*=[\\x09\\x20]*(\"(?:[\\x20!\\x23-\\x5b\\x5d-\\x7e\\x80-\\xff]|\\\\[\\x20-\\x7e])*\"|[!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\\x09\\x20]*/g // eslint-disable-line no-control-regex\nvar TEXT_REGEXP = /^[\\x20-\\x7e\\x80-\\xff]+$/\nvar TOKEN_REGEXP = /^[!#$%&'*+.0-9A-Z^_`a-z|~-]+$/\n\n/**\n * RegExp for various RFC 5987 grammar\n *\n * ext-value = charset \"'\" [ language ] \"'\" value-chars\n * charset = \"UTF-8\" / \"ISO-8859-1\" / mime-charset\n * mime-charset = 1*mime-charsetc\n * mime-charsetc = ALPHA / DIGIT\n * / \"!\" / \"#\" / \"$\" / \"%\" / \"&\"\n * / \"+\" / \"-\" / \"^\" / \"_\" / \"`\"\n * / \"{\" / \"}\" / \"~\"\n * language = ( 2*3ALPHA [ extlang ] )\n * / 4ALPHA\n * / 5*8ALPHA\n * extlang = *3( \"-\" 3ALPHA )\n * value-chars = *( pct-encoded / attr-char )\n * pct-encoded = \"%\" HEXDIG HEXDIG\n * attr-char = ALPHA / DIGIT\n * / \"!\" / \"#\" / \"$\" / \"&\" / \"+\" / \"-\" / \".\"\n * / \"^\" / \"_\" / \"`\" / \"|\" / \"~\"\n */\n\nvar EXT_VALUE_REGEXP = /^([A-Za-z0-9!#$%&+\\-^_`{}~]+)'(?:[A-Za-z]{2,3}(?:-[A-Za-z]{3}){0,3}|[A-Za-z]{4,8}|)'((?:%[0-9A-Fa-f]{2}|[A-Za-z0-9!#$&+.^_`|~-])+)$/\n\n/**\n * RegExp for various RFC 6266 grammar\n *\n * disposition-type = \"inline\" | \"attachment\" | disp-ext-type\n * disp-ext-type = token\n * disposition-parm = filename-parm | disp-ext-parm\n * filename-parm = \"filename\" \"=\" value\n * | \"filename*\" \"=\" ext-value\n * disp-ext-parm = token \"=\" value\n * | ext-token \"=\" ext-value\n * ext-token = \n */\n\nvar DISPOSITION_TYPE_REGEXP = /^([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\\x09\\x20]*(?:$|;)/ // eslint-disable-line no-control-regex\n\n/**\n * Create an attachment Content-Disposition header.\n *\n * @param {string} [filename]\n * @param {object} [options]\n * @param {string} [options.type=attachment]\n * @param {string|boolean} [options.fallback=true]\n * @return {string}\n * @api public\n */\n\nfunction contentDisposition (filename, options) {\n var opts = options || {}\n\n // get type\n var type = opts.type || 'attachment'\n\n // get parameters\n var params = createparams(filename, opts.fallback)\n\n // format into string\n return format(new ContentDisposition(type, params))\n}\n\n/**\n * Create parameters object from filename and fallback.\n *\n * @param {string} [filename]\n * @param {string|boolean} [fallback=true]\n * @return {object}\n * @api private\n */\n\nfunction createparams (filename, fallback) {\n if (filename === undefined) {\n return\n }\n\n var params = {}\n\n if (typeof filename !== 'string') {\n throw new TypeError('filename must be a string')\n }\n\n // fallback defaults to true\n if (fallback === undefined) {\n fallback = true\n }\n\n if (typeof fallback !== 'string' && typeof fallback !== 'boolean') {\n throw new TypeError('fallback must be a string or boolean')\n }\n\n if (typeof fallback === 'string' && NON_LATIN1_REGEXP.test(fallback)) {\n throw new TypeError('fallback must be ISO-8859-1 string')\n }\n\n // restrict to file base name\n var name = basename(filename)\n\n // determine if name is suitable for quoted string\n var isQuotedString = TEXT_REGEXP.test(name)\n\n // generate fallback name\n var fallbackName = typeof fallback !== 'string'\n ? fallback && getlatin1(name)\n : basename(fallback)\n var hasFallback = typeof fallbackName === 'string' && fallbackName !== name\n\n // set extended filename parameter\n if (hasFallback || !isQuotedString || HEX_ESCAPE_REGEXP.test(name)) {\n params['filename*'] = name\n }\n\n // set filename parameter\n if (isQuotedString || hasFallback) {\n params.filename = hasFallback\n ? fallbackName\n : name\n }\n\n return params\n}\n\n/**\n * Format object to Content-Disposition header.\n *\n * @param {object} obj\n * @param {string} obj.type\n * @param {object} [obj.parameters]\n * @return {string}\n * @api private\n */\n\nfunction format (obj) {\n var parameters = obj.parameters\n var type = obj.type\n\n if (!type || typeof type !== 'string' || !TOKEN_REGEXP.test(type)) {\n throw new TypeError('invalid type')\n }\n\n // start with normalized type\n var string = String(type).toLowerCase()\n\n // append parameters\n if (parameters && typeof parameters === 'object') {\n var param\n var params = Object.keys(parameters).sort()\n\n for (var i = 0; i < params.length; i++) {\n param = params[i]\n\n var val = param.substr(-1) === '*'\n ? ustring(parameters[param])\n : qstring(parameters[param])\n\n string += '; ' + param + '=' + val\n }\n }\n\n return string\n}\n\n/**\n * Decode a RFC 6987 field value (gracefully).\n *\n * @param {string} str\n * @return {string}\n * @api private\n */\n\nfunction decodefield (str) {\n var match = EXT_VALUE_REGEXP.exec(str)\n\n if (!match) {\n throw new TypeError('invalid extended field value')\n }\n\n var charset = match[1].toLowerCase()\n var encoded = match[2]\n var value\n\n // to binary string\n var binary = encoded.replace(HEX_ESCAPE_REPLACE_REGEXP, pdecode)\n\n switch (charset) {\n case 'iso-8859-1':\n value = getlatin1(binary)\n break\n case 'utf-8':\n value = new Buffer(binary, 'binary').toString('utf8')\n break\n default:\n throw new TypeError('unsupported charset in extended field')\n }\n\n return value\n}\n\n/**\n * Get ISO-8859-1 version of string.\n *\n * @param {string} val\n * @return {string}\n * @api private\n */\n\nfunction getlatin1 (val) {\n // simple Unicode -> ISO-8859-1 transformation\n return String(val).replace(NON_LATIN1_REGEXP, '?')\n}\n\n/**\n * Parse Content-Disposition header string.\n *\n * @param {string} string\n * @return {object}\n * @api private\n */\n\nfunction parse (string) {\n if (!string || typeof string !== 'string') {\n throw new TypeError('argument string is required')\n }\n\n var match = DISPOSITION_TYPE_REGEXP.exec(string)\n\n if (!match) {\n throw new TypeError('invalid type format')\n }\n\n // normalize type\n var index = match[0].length\n var type = match[1].toLowerCase()\n\n var key\n var names = []\n var params = {}\n var value\n\n // calculate index to start at\n index = PARAM_REGEXP.lastIndex = match[0].substr(-1) === ';'\n ? index - 1\n : index\n\n // match parameters\n while ((match = PARAM_REGEXP.exec(string))) {\n if (match.index !== index) {\n throw new TypeError('invalid parameter format')\n }\n\n index += match[0].length\n key = match[1].toLowerCase()\n value = match[2]\n\n if (names.indexOf(key) !== -1) {\n throw new TypeError('invalid duplicate parameter')\n }\n\n names.push(key)\n\n if (key.indexOf('*') + 1 === key.length) {\n // decode extended value\n key = key.slice(0, -1)\n value = decodefield(value)\n\n // overwrite existing value\n params[key] = value\n continue\n }\n\n if (typeof params[key] === 'string') {\n continue\n }\n\n if (value[0] === '\"') {\n // remove quotes and escapes\n value = value\n .substr(1, value.length - 2)\n .replace(QESC_REGEXP, '$1')\n }\n\n params[key] = value\n }\n\n if (index !== -1 && index !== string.length) {\n throw new TypeError('invalid parameter format')\n }\n\n return new ContentDisposition(type, params)\n}\n\n/**\n * Percent decode a single character.\n *\n * @param {string} str\n * @param {string} hex\n * @return {string}\n * @api private\n */\n\nfunction pdecode (str, hex) {\n return String.fromCharCode(parseInt(hex, 16))\n}\n\n/**\n * Percent encode a single character.\n *\n * @param {string} char\n * @return {string}\n * @api private\n */\n\nfunction pencode (char) {\n var hex = String(char)\n .charCodeAt(0)\n .toString(16)\n .toUpperCase()\n return hex.length === 1\n ? '%0' + hex\n : '%' + hex\n}\n\n/**\n * Quote a string for HTTP.\n *\n * @param {string} val\n * @return {string}\n * @api private\n */\n\nfunction qstring (val) {\n var str = String(val)\n\n return '\"' + str.replace(QUOTE_REGEXP, '\\\\$1') + '\"'\n}\n\n/**\n * Encode a Unicode string for HTTP (RFC 5987).\n *\n * @param {string} val\n * @return {string}\n * @api private\n */\n\nfunction ustring (val) {\n var str = String(val)\n\n // percent encode as UTF-8\n var encoded = encodeURIComponent(str)\n .replace(ENCODE_URL_ATTR_CHAR_REGEXP, pencode)\n\n return 'UTF-8\\'\\'' + encoded\n}\n\n/**\n * Class for parsed Content-Disposition header for v8 optimization\n */\n\nfunction ContentDisposition (type, parameters) {\n this.type = type\n this.parameters = parameters\n}\n","\"use strict\";\n\nvar path = require(\"path\");\n\nmodule.exports = function (thePath, potentialParent) {\n // For inside-directory checking, we want to allow trailing slashes, so normalize.\n thePath = stripTrailingSep(thePath);\n potentialParent = stripTrailingSep(potentialParent);\n\n // Node treats only Windows as case-insensitive in its path module; we follow those conventions.\n if (process.platform === \"win32\") {\n thePath = thePath.toLowerCase();\n potentialParent = potentialParent.toLowerCase();\n }\n\n return thePath.lastIndexOf(potentialParent, 0) === 0 &&\n\t\t(\n\t\t\tthePath[potentialParent.length] === path.sep ||\n\t\t\tthePath[potentialParent.length] === undefined\n\t\t);\n};\n\nfunction stripTrailingSep(thePath) {\n if (thePath[thePath.length - 1] === path.sep) {\n return thePath.slice(0, -1);\n }\n return thePath;\n}\n","/*!\n * range-parser\n * Copyright(c) 2012-2014 TJ Holowaychuk\n * Copyright(c) 2015-2016 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = rangeParser\n\n/**\n * Parse \"Range\" header `str` relative to the given file `size`.\n *\n * @param {Number} size\n * @param {String} str\n * @param {Object} [options]\n * @return {Array}\n * @public\n */\n\nfunction rangeParser (size, str, options) {\n var index = str.indexOf('=')\n\n if (index === -1) {\n return -2\n }\n\n // split the range string\n var arr = str.slice(index + 1).split(',')\n var ranges = []\n\n // add ranges type\n ranges.type = str.slice(0, index)\n\n // parse all ranges\n for (var i = 0; i < arr.length; i++) {\n var range = arr[i].split('-')\n var start = parseInt(range[0], 10)\n var end = parseInt(range[1], 10)\n\n // -nnn\n if (isNaN(start)) {\n start = size - end\n end = size - 1\n // nnn-\n } else if (isNaN(end)) {\n end = size - 1\n }\n\n // limit last-byte-pos to current length\n if (end > size - 1) {\n end = size - 1\n }\n\n // invalid or unsatisifiable\n if (isNaN(start) || isNaN(end) || start > end || start < 0) {\n continue\n }\n\n // add range\n ranges.push({\n start: start,\n end: end\n })\n }\n\n if (ranges.length < 1) {\n // unsatisifiable\n return -1\n }\n\n return options && options.combine\n ? combineRanges(ranges)\n : ranges\n}\n\n/**\n * Combine overlapping & adjacent ranges.\n * @private\n */\n\nfunction combineRanges (ranges) {\n var ordered = ranges.map(mapWithIndex).sort(sortByRangeStart)\n\n for (var j = 0, i = 1; i < ordered.length; i++) {\n var range = ordered[i]\n var current = ordered[j]\n\n if (range.start > current.end + 1) {\n // next range\n ordered[++j] = range\n } else if (range.end > current.end) {\n // extend range\n current.end = range.end\n current.index = Math.min(current.index, range.index)\n }\n }\n\n // trim ordered array\n ordered.length = j + 1\n\n // generate combined range\n var combined = ordered.sort(sortByRangeIndex).map(mapWithoutIndex)\n\n // copy ranges type\n combined.type = ranges.type\n\n return combined\n}\n\n/**\n * Map function to add index value to ranges.\n * @private\n */\n\nfunction mapWithIndex (range, index) {\n return {\n start: range.start,\n end: range.end,\n index: index\n }\n}\n\n/**\n * Map function to remove index value from ranges.\n * @private\n */\n\nfunction mapWithoutIndex (range) {\n return {\n start: range.start,\n end: range.end\n }\n}\n\n/**\n * Sort function to sort ranges by index.\n * @private\n */\n\nfunction sortByRangeIndex (a, b) {\n return a.index - b.index\n}\n\n/**\n * Sort function to sort ranges by start position.\n * @private\n */\n\nfunction sortByRangeStart (a, b) {\n return a.start - b.start\n}\n","(function(){function directory(it\n) {\nvar encodeHTML = typeof _encodeHTML !== 'undefined' ? _encodeHTML : (function(doNotSkipEncoded) {\n\t\tvar encodeHTMLRules = { \"&\": \"&\", \"<\": \"<\", \">\": \">\", '\"': \""\", \"'\": \"'\", \"/\": \"/\" },\n\t\t\tmatchHTML = doNotSkipEncoded ? /[&<>\"'\\/]/g : /&(?!#?\\w+;)|<|>|\"|'|\\//g;\n\t\treturn function(code) {\n\t\t\treturn code ? code.toString().replace(matchHTML, function(m) {return encodeHTMLRules[m] || m;}) : \"\";\n\t\t};\n\t}());var out=' Files within '+encodeHTML(it.directory)+'

Index of  ';var arr1=it.paths;if(arr1){var value,index=-1,l1=arr1.length-1;while(index'+encodeHTML(value.name)+' ';} } out+='

';return out;\n}var itself=directory, _encodeHTML=(function(doNotSkipEncoded) {\n\t\tvar encodeHTMLRules = { \"&\": \"&\", \"<\": \"<\", \">\": \">\", '\"': \""\", \"'\": \"'\", \"/\": \"/\" },\n\t\t\tmatchHTML = doNotSkipEncoded ? /[&<>\"'\\/]/g : /&(?!#?\\w+;)|<|>|\"|'|\\//g;\n\t\treturn function(code) {\n\t\t\treturn code ? code.toString().replace(matchHTML, function(m) {return encodeHTMLRules[m] || m;}) : \"\";\n\t\t};\n\t}());if(typeof module!=='undefined' && module.exports) module.exports=itself;else if(typeof define==='function')define(function(){return itself;});else {window.render=window.render||{};window.render['directory']=itself;}}());","(function(){function error(it\n) {\nvar out='
'+(it.statusCode)+'

'+(it.message)+'

';return out;\n}var itself=error, _encodeHTML=(function(doNotSkipEncoded) {\n\t\tvar encodeHTMLRules = { \"&\": \"&\", \"<\": \"<\", \">\": \">\", '\"': \""\", \"'\": \"'\", \"/\": \"/\" },\n\t\t\tmatchHTML = doNotSkipEncoded ? /[&<>\"'\\/]/g : /&(?!#?\\w+;)|<|>|\"|'|\\//g;\n\t\treturn function(code) {\n\t\t\treturn code ? code.toString().replace(matchHTML, function(m) {return encodeHTMLRules[m] || m;}) : \"\";\n\t\t};\n\t}());if(typeof module!=='undefined' && module.exports) module.exports=itself;else if(typeof define==='function')define(function(){return itself;});else {window.render=window.render||{};window.render['error']=itself;}}());","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createProxyMiddleware = void 0;\nconst http_proxy_middleware_1 = require(\"./http-proxy-middleware\");\nfunction createProxyMiddleware(context, options) {\n const { middleware } = new http_proxy_middleware_1.HttpProxyMiddleware(context, options);\n return middleware;\n}\nexports.createProxyMiddleware = createProxyMiddleware;\n__exportStar(require(\"./handlers\"), exports);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.HttpProxyMiddleware = void 0;\nconst httpProxy = require(\"http-proxy\");\nconst config_factory_1 = require(\"./config-factory\");\nconst contextMatcher = require(\"./context-matcher\");\nconst handlers = require(\"./_handlers\");\nconst logger_1 = require(\"./logger\");\nconst PathRewriter = require(\"./path-rewriter\");\nconst Router = require(\"./router\");\nclass HttpProxyMiddleware {\n constructor(context, opts) {\n this.logger = (0, logger_1.getInstance)();\n this.wsInternalSubscribed = false;\n this.serverOnCloseSubscribed = false;\n // https://github.com/Microsoft/TypeScript/wiki/'this'-in-TypeScript#red-flags-for-this\n this.middleware = async (req, res, next) => {\n var _a, _b;\n if (this.shouldProxy(this.config.context, req)) {\n try {\n const activeProxyOptions = await this.prepareProxyRequest(req);\n this.proxy.web(req, res, activeProxyOptions);\n }\n catch (err) {\n next(err);\n }\n }\n else {\n next();\n }\n /**\n * Get the server object to subscribe to server events;\n * 'upgrade' for websocket and 'close' for graceful shutdown\n *\n * NOTE:\n * req.socket: node >= 13\n * req.connection: node < 13 (Remove this when node 12/13 support is dropped)\n */\n const server = (_b = ((_a = req.socket) !== null && _a !== void 0 ? _a : req.connection)) === null || _b === void 0 ? void 0 : _b.server;\n if (server && !this.serverOnCloseSubscribed) {\n server.on('close', () => {\n this.logger.info('[HPM] server close signal received: closing proxy server');\n this.proxy.close();\n });\n this.serverOnCloseSubscribed = true;\n }\n if (this.proxyOptions.ws === true) {\n // use initial request to access the server object to subscribe to http upgrade event\n this.catchUpgradeRequest(server);\n }\n };\n this.catchUpgradeRequest = (server) => {\n if (!this.wsInternalSubscribed) {\n server.on('upgrade', this.handleUpgrade);\n // prevent duplicate upgrade handling;\n // in case external upgrade is also configured\n this.wsInternalSubscribed = true;\n }\n };\n this.handleUpgrade = async (req, socket, head) => {\n if (this.shouldProxy(this.config.context, req)) {\n const activeProxyOptions = await this.prepareProxyRequest(req);\n this.proxy.ws(req, socket, head, activeProxyOptions);\n this.logger.info('[HPM] Upgrading to WebSocket');\n }\n };\n /**\n * Determine whether request should be proxied.\n *\n * @private\n * @param {String} context [description]\n * @param {Object} req [description]\n * @return {Boolean}\n */\n this.shouldProxy = (context, req) => {\n try {\n const path = req.originalUrl || req.url;\n return contextMatcher.match(context, path, req);\n }\n catch (error) {\n this.logger.error(error);\n return false;\n }\n };\n /**\n * Apply option.router and option.pathRewrite\n * Order matters:\n * Router uses original path for routing;\n * NOT the modified path, after it has been rewritten by pathRewrite\n * @param {Object} req\n * @return {Object} proxy options\n */\n this.prepareProxyRequest = async (req) => {\n // https://github.com/chimurai/http-proxy-middleware/issues/17\n // https://github.com/chimurai/http-proxy-middleware/issues/94\n req.url = req.originalUrl || req.url;\n // store uri before it gets rewritten for logging\n const originalPath = req.url;\n const newProxyOptions = Object.assign({}, this.proxyOptions);\n // Apply in order:\n // 1. option.router\n // 2. option.pathRewrite\n await this.applyRouter(req, newProxyOptions);\n await this.applyPathRewrite(req, this.pathRewriter);\n // debug logging for both http(s) and websockets\n if (this.proxyOptions.logLevel === 'debug') {\n const arrow = (0, logger_1.getArrow)(originalPath, req.url, this.proxyOptions.target, newProxyOptions.target);\n this.logger.debug('[HPM] %s %s %s %s', req.method, originalPath, arrow, newProxyOptions.target);\n }\n return newProxyOptions;\n };\n // Modify option.target when router present.\n this.applyRouter = async (req, options) => {\n let newTarget;\n if (options.router) {\n newTarget = await Router.getTarget(req, options);\n if (newTarget) {\n this.logger.debug('[HPM] Router new target: %s -> \"%s\"', options.target, newTarget);\n options.target = newTarget;\n }\n }\n };\n // rewrite path\n this.applyPathRewrite = async (req, pathRewriter) => {\n if (pathRewriter) {\n const path = await pathRewriter(req.url, req);\n if (typeof path === 'string') {\n req.url = path;\n }\n else {\n this.logger.info('[HPM] pathRewrite: No rewritten path found. (%s)', req.url);\n }\n }\n };\n this.logError = (err, req, res, target) => {\n var _a;\n const hostname = ((_a = req.headers) === null || _a === void 0 ? void 0 : _a.host) || req.hostname || req.host; // (websocket) || (node0.10 || node 4/5)\n const requestHref = `${hostname}${req.url}`;\n const targetHref = `${target === null || target === void 0 ? void 0 : target.href}`; // target is undefined when websocket errors\n const errorMessage = '[HPM] Error occurred while proxying request %s to %s [%s] (%s)';\n const errReference = 'https://nodejs.org/api/errors.html#errors_common_system_errors'; // link to Node Common Systems Errors page\n this.logger.error(errorMessage, requestHref, targetHref, err.code || err, errReference);\n };\n this.config = (0, config_factory_1.createConfig)(context, opts);\n this.proxyOptions = this.config.options;\n // create proxy\n this.proxy = httpProxy.createProxyServer({});\n this.logger.info(`[HPM] Proxy created: ${this.config.context} -> ${this.proxyOptions.target}`);\n this.pathRewriter = PathRewriter.createPathRewriter(this.proxyOptions.pathRewrite); // returns undefined when \"pathRewrite\" is not provided\n // attach handler to http-proxy events\n handlers.init(this.proxy, this.proxyOptions);\n // log errors for debug purpose\n this.proxy.on('error', this.logError);\n // https://github.com/chimurai/http-proxy-middleware/issues/19\n // expose function to upgrade externally\n this.middleware.upgrade = (req, socket, head) => {\n if (!this.wsInternalSubscribed) {\n this.handleUpgrade(req, socket, head);\n }\n };\n }\n}\nexports.HttpProxyMiddleware = HttpProxyMiddleware;\n","/*!\n * Caron dimonio, con occhi di bragia\n * loro accennando, tutte le raccoglie;\n * batte col remo qualunque s’adagia \n *\n * Charon the demon, with the eyes of glede,\n * Beckoning to them, collects them all together,\n * Beats with his oar whoever lags behind\n * \n * Dante - The Divine Comedy (Canto III)\n */\n\nmodule.exports = require('./lib/http-proxy');","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createConfig = void 0;\nconst isPlainObj = require(\"is-plain-obj\");\nconst url = require(\"url\");\nconst errors_1 = require(\"./errors\");\nconst logger_1 = require(\"./logger\");\nconst logger = (0, logger_1.getInstance)();\nfunction createConfig(context, opts) {\n // structure of config object to be returned\n const config = {\n context: undefined,\n options: {},\n };\n // app.use('/api', proxy({target:'http://localhost:9000'}));\n if (isContextless(context, opts)) {\n config.context = '/';\n config.options = Object.assign(config.options, context);\n // app.use('/api', proxy('http://localhost:9000'));\n // app.use(proxy('http://localhost:9000/api'));\n }\n else if (isStringShortHand(context)) {\n const oUrl = url.parse(context);\n const target = [oUrl.protocol, '//', oUrl.host].join('');\n config.context = oUrl.pathname || '/';\n config.options = Object.assign(config.options, { target }, opts);\n if (oUrl.protocol === 'ws:' || oUrl.protocol === 'wss:') {\n config.options.ws = true;\n }\n // app.use('/api', proxy({target:'http://localhost:9000'}));\n }\n else {\n config.context = context;\n config.options = Object.assign(config.options, opts);\n }\n configureLogger(config.options);\n if (!config.options.target && !config.options.router) {\n throw new Error(errors_1.ERRORS.ERR_CONFIG_FACTORY_TARGET_MISSING);\n }\n return config;\n}\nexports.createConfig = createConfig;\n/**\n * Checks if a String only target/config is provided.\n * This can be just the host or with the optional path.\n *\n * @example\n * app.use('/api', proxy('http://localhost:9000'));\n * app.use(proxy('http://localhost:9000/api'));\n *\n * @param {String} context [description]\n * @return {Boolean} [description]\n */\nfunction isStringShortHand(context) {\n if (typeof context === 'string') {\n return !!url.parse(context).host;\n }\n}\n/**\n * Checks if a Object only config is provided, without a context.\n * In this case the all paths will be proxied.\n *\n * @example\n * app.use('/api', proxy({target:'http://localhost:9000'}));\n *\n * @param {Object} context [description]\n * @param {*} opts [description]\n * @return {Boolean} [description]\n */\nfunction isContextless(context, opts) {\n return isPlainObj(context) && (opts == null || Object.keys(opts).length === 0);\n}\nfunction configureLogger(options) {\n if (options.logLevel) {\n logger.setLevel(options.logLevel);\n }\n if (options.logProvider) {\n logger.setProvider(options.logProvider);\n }\n}\n","'use strict';\n\nmodule.exports = value => {\n\tif (Object.prototype.toString.call(value) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tconst prototype = Object.getPrototypeOf(value);\n\treturn prototype === null || prototype === Object.prototype;\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ERRORS = void 0;\nvar ERRORS;\n(function (ERRORS) {\n ERRORS[\"ERR_CONFIG_FACTORY_TARGET_MISSING\"] = \"[HPM] Missing \\\"target\\\" option. Example: {target: \\\"http://www.example.org\\\"}\";\n ERRORS[\"ERR_CONTEXT_MATCHER_GENERIC\"] = \"[HPM] Invalid context. Expecting something like: \\\"/api\\\" or [\\\"/api\\\", \\\"/ajax\\\"]\";\n ERRORS[\"ERR_CONTEXT_MATCHER_INVALID_ARRAY\"] = \"[HPM] Invalid context. Expecting something like: [\\\"/api\\\", \\\"/ajax\\\"] or [\\\"/api/**\\\", \\\"!**.html\\\"]\";\n ERRORS[\"ERR_PATH_REWRITER_CONFIG\"] = \"[HPM] Invalid pathRewrite config. Expecting object with pathRewrite config or a rewrite function\";\n})(ERRORS = exports.ERRORS || (exports.ERRORS = {}));\n","\"use strict\";\n/* eslint-disable prefer-rest-params */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getArrow = exports.getInstance = void 0;\nconst util = require(\"util\");\nlet loggerInstance;\nconst defaultProvider = {\n // tslint:disable: no-console\n log: console.log,\n debug: console.log,\n info: console.info,\n warn: console.warn,\n error: console.error,\n};\n// log level 'weight'\nvar LEVELS;\n(function (LEVELS) {\n LEVELS[LEVELS[\"debug\"] = 10] = \"debug\";\n LEVELS[LEVELS[\"info\"] = 20] = \"info\";\n LEVELS[LEVELS[\"warn\"] = 30] = \"warn\";\n LEVELS[LEVELS[\"error\"] = 50] = \"error\";\n LEVELS[LEVELS[\"silent\"] = 80] = \"silent\";\n})(LEVELS || (LEVELS = {}));\nfunction getInstance() {\n if (!loggerInstance) {\n loggerInstance = new Logger();\n }\n return loggerInstance;\n}\nexports.getInstance = getInstance;\nclass Logger {\n constructor() {\n this.setLevel('info');\n this.setProvider(() => defaultProvider);\n }\n // log will log messages, regardless of logLevels\n log() {\n this.provider.log(this._interpolate.apply(null, arguments));\n }\n debug() {\n if (this._showLevel('debug')) {\n this.provider.debug(this._interpolate.apply(null, arguments));\n }\n }\n info() {\n if (this._showLevel('info')) {\n this.provider.info(this._interpolate.apply(null, arguments));\n }\n }\n warn() {\n if (this._showLevel('warn')) {\n this.provider.warn(this._interpolate.apply(null, arguments));\n }\n }\n error() {\n if (this._showLevel('error')) {\n this.provider.error(this._interpolate.apply(null, arguments));\n }\n }\n setLevel(v) {\n if (this.isValidLevel(v)) {\n this.logLevel = v;\n }\n }\n setProvider(fn) {\n if (fn && this.isValidProvider(fn)) {\n this.provider = fn(defaultProvider);\n }\n }\n isValidProvider(fnProvider) {\n const result = true;\n if (fnProvider && typeof fnProvider !== 'function') {\n throw new Error('[HPM] Log provider config error. Expecting a function.');\n }\n return result;\n }\n isValidLevel(levelName) {\n const validLevels = Object.keys(LEVELS);\n const isValid = validLevels.includes(levelName);\n if (!isValid) {\n throw new Error('[HPM] Log level error. Invalid logLevel.');\n }\n return isValid;\n }\n /**\n * Decide to log or not to log, based on the log levels 'weight'\n * @param {String} showLevel [debug, info, warn, error, silent]\n * @return {Boolean}\n */\n _showLevel(showLevel) {\n let result = false;\n const currentLogLevel = LEVELS[this.logLevel];\n if (currentLogLevel && currentLogLevel <= LEVELS[showLevel]) {\n result = true;\n }\n return result;\n }\n // make sure logged messages and its data are return interpolated\n // make it possible for additional log data, such date/time or custom prefix.\n _interpolate(format, ...args) {\n const result = util.format(format, ...args);\n return result;\n }\n}\n/**\n * -> normal proxy\n * => router\n * ~> pathRewrite\n * ≈> router + pathRewrite\n *\n * @param {String} originalPath\n * @param {String} newPath\n * @param {String} originalTarget\n * @param {String} newTarget\n * @return {String}\n */\nfunction getArrow(originalPath, newPath, originalTarget, newTarget) {\n const arrow = ['>'];\n const isNewTarget = originalTarget !== newTarget; // router\n const isNewPath = originalPath !== newPath; // pathRewrite\n if (isNewPath && !isNewTarget) {\n arrow.unshift('~');\n }\n else if (!isNewPath && isNewTarget) {\n arrow.unshift('=');\n }\n else if (isNewPath && isNewTarget) {\n arrow.unshift('≈');\n }\n else {\n arrow.unshift('-');\n }\n return arrow.join('');\n}\nexports.getArrow = getArrow;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.match = void 0;\nconst isGlob = require(\"is-glob\");\nconst micromatch = require(\"micromatch\");\nconst url = require(\"url\");\nconst errors_1 = require(\"./errors\");\nfunction match(context, uri, req) {\n // single path\n if (isStringPath(context)) {\n return matchSingleStringPath(context, uri);\n }\n // single glob path\n if (isGlobPath(context)) {\n return matchSingleGlobPath(context, uri);\n }\n // multi path\n if (Array.isArray(context)) {\n if (context.every(isStringPath)) {\n return matchMultiPath(context, uri);\n }\n if (context.every(isGlobPath)) {\n return matchMultiGlobPath(context, uri);\n }\n throw new Error(errors_1.ERRORS.ERR_CONTEXT_MATCHER_INVALID_ARRAY);\n }\n // custom matching\n if (typeof context === 'function') {\n const pathname = getUrlPathName(uri);\n return context(pathname, req);\n }\n throw new Error(errors_1.ERRORS.ERR_CONTEXT_MATCHER_GENERIC);\n}\nexports.match = match;\n/**\n * @param {String} context '/api'\n * @param {String} uri 'http://example.org/api/b/c/d.html'\n * @return {Boolean}\n */\nfunction matchSingleStringPath(context, uri) {\n const pathname = getUrlPathName(uri);\n return pathname.indexOf(context) === 0;\n}\nfunction matchSingleGlobPath(pattern, uri) {\n const pathname = getUrlPathName(uri);\n const matches = micromatch([pathname], pattern);\n return matches && matches.length > 0;\n}\nfunction matchMultiGlobPath(patternList, uri) {\n return matchSingleGlobPath(patternList, uri);\n}\n/**\n * @param {String} contextList ['/api', '/ajax']\n * @param {String} uri 'http://example.org/api/b/c/d.html'\n * @return {Boolean}\n */\nfunction matchMultiPath(contextList, uri) {\n let isMultiPath = false;\n for (const context of contextList) {\n if (matchSingleStringPath(context, uri)) {\n isMultiPath = true;\n break;\n }\n }\n return isMultiPath;\n}\n/**\n * Parses URI and returns RFC 3986 path\n *\n * @param {String} uri from req.url\n * @return {String} RFC 3986 path\n */\nfunction getUrlPathName(uri) {\n return uri && url.parse(uri).pathname;\n}\nfunction isStringPath(context) {\n return typeof context === 'string' && !isGlob(context);\n}\nfunction isGlobPath(context) {\n return isGlob(context);\n}\n","/*!\n * is-glob \n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n\nvar isExtglob = require('is-extglob');\nvar chars = { '{': '}', '(': ')', '[': ']'};\nvar strictCheck = function(str) {\n if (str[0] === '!') {\n return true;\n }\n var index = 0;\n var pipeIndex = -2;\n var closeSquareIndex = -2;\n var closeCurlyIndex = -2;\n var closeParenIndex = -2;\n var backSlashIndex = -2;\n while (index < str.length) {\n if (str[index] === '*') {\n return true;\n }\n\n if (str[index + 1] === '?' && /[\\].+)]/.test(str[index])) {\n return true;\n }\n\n if (closeSquareIndex !== -1 && str[index] === '[' && str[index + 1] !== ']') {\n if (closeSquareIndex < index) {\n closeSquareIndex = str.indexOf(']', index);\n }\n if (closeSquareIndex > index) {\n if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) {\n return true;\n }\n backSlashIndex = str.indexOf('\\\\', index);\n if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) {\n return true;\n }\n }\n }\n\n if (closeCurlyIndex !== -1 && str[index] === '{' && str[index + 1] !== '}') {\n closeCurlyIndex = str.indexOf('}', index);\n if (closeCurlyIndex > index) {\n backSlashIndex = str.indexOf('\\\\', index);\n if (backSlashIndex === -1 || backSlashIndex > closeCurlyIndex) {\n return true;\n }\n }\n }\n\n if (closeParenIndex !== -1 && str[index] === '(' && str[index + 1] === '?' && /[:!=]/.test(str[index + 2]) && str[index + 3] !== ')') {\n closeParenIndex = str.indexOf(')', index);\n if (closeParenIndex > index) {\n backSlashIndex = str.indexOf('\\\\', index);\n if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) {\n return true;\n }\n }\n }\n\n if (pipeIndex !== -1 && str[index] === '(' && str[index + 1] !== '|') {\n if (pipeIndex < index) {\n pipeIndex = str.indexOf('|', index);\n }\n if (pipeIndex !== -1 && str[pipeIndex + 1] !== ')') {\n closeParenIndex = str.indexOf(')', pipeIndex);\n if (closeParenIndex > pipeIndex) {\n backSlashIndex = str.indexOf('\\\\', pipeIndex);\n if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) {\n return true;\n }\n }\n }\n }\n\n if (str[index] === '\\\\') {\n var open = str[index + 1];\n index += 2;\n var close = chars[open];\n\n if (close) {\n var n = str.indexOf(close, index);\n if (n !== -1) {\n index = n + 1;\n }\n }\n\n if (str[index] === '!') {\n return true;\n }\n } else {\n index++;\n }\n }\n return false;\n};\n\nvar relaxedCheck = function(str) {\n if (str[0] === '!') {\n return true;\n }\n var index = 0;\n while (index < str.length) {\n if (/[*?{}()[\\]]/.test(str[index])) {\n return true;\n }\n\n if (str[index] === '\\\\') {\n var open = str[index + 1];\n index += 2;\n var close = chars[open];\n\n if (close) {\n var n = str.indexOf(close, index);\n if (n !== -1) {\n index = n + 1;\n }\n }\n\n if (str[index] === '!') {\n return true;\n }\n } else {\n index++;\n }\n }\n return false;\n};\n\nmodule.exports = function isGlob(str, options) {\n if (typeof str !== 'string' || str === '') {\n return false;\n }\n\n if (isExtglob(str)) {\n return true;\n }\n\n var check = strictCheck;\n\n // optionally relax check\n if (options && options.strict === false) {\n check = relaxedCheck;\n }\n\n return check(str);\n};\n","/*!\n * is-extglob \n *\n * Copyright (c) 2014-2016, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\nmodule.exports = function isExtglob(str) {\n if (typeof str !== 'string' || str === '') {\n return false;\n }\n\n var match;\n while ((match = /(\\\\).|([@?!+*]\\(.*\\))/g.exec(str))) {\n if (match[2]) return true;\n str = str.slice(match.index + match[0].length);\n }\n\n return false;\n};\n","'use strict';\n\nconst util = require('util');\nconst braces = require('braces');\nconst picomatch = require('picomatch');\nconst utils = require('picomatch/lib/utils');\n\nconst isEmptyString = v => v === '' || v === './';\nconst hasBraces = v => {\n const index = v.indexOf('{');\n return index > -1 && v.indexOf('}', index) > -1;\n};\n\n/**\n * Returns an array of strings that match one or more glob patterns.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm(list, patterns[, options]);\n *\n * console.log(mm(['a.js', 'a.txt'], ['*.js']));\n * //=> [ 'a.js' ]\n * ```\n * @param {String|Array} `list` List of strings to match.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options)\n * @return {Array} Returns an array of matches\n * @summary false\n * @api public\n */\n\nconst micromatch = (list, patterns, options) => {\n patterns = [].concat(patterns);\n list = [].concat(list);\n\n let omit = new Set();\n let keep = new Set();\n let items = new Set();\n let negatives = 0;\n\n let onResult = state => {\n items.add(state.output);\n if (options && options.onResult) {\n options.onResult(state);\n }\n };\n\n for (let i = 0; i < patterns.length; i++) {\n let isMatch = picomatch(String(patterns[i]), { ...options, onResult }, true);\n let negated = isMatch.state.negated || isMatch.state.negatedExtglob;\n if (negated) negatives++;\n\n for (let item of list) {\n let matched = isMatch(item, true);\n\n let match = negated ? !matched.isMatch : matched.isMatch;\n if (!match) continue;\n\n if (negated) {\n omit.add(matched.output);\n } else {\n omit.delete(matched.output);\n keep.add(matched.output);\n }\n }\n }\n\n let result = negatives === patterns.length ? [...items] : [...keep];\n let matches = result.filter(item => !omit.has(item));\n\n if (options && matches.length === 0) {\n if (options.failglob === true) {\n throw new Error(`No matches found for \"${patterns.join(', ')}\"`);\n }\n\n if (options.nonull === true || options.nullglob === true) {\n return options.unescape ? patterns.map(p => p.replace(/\\\\/g, '')) : patterns;\n }\n }\n\n return matches;\n};\n\n/**\n * Backwards compatibility\n */\n\nmicromatch.match = micromatch;\n\n/**\n * Returns a matcher function from the given glob `pattern` and `options`.\n * The returned function takes a string to match as its only argument and returns\n * true if the string is a match.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.matcher(pattern[, options]);\n *\n * const isMatch = mm.matcher('*.!(*a)');\n * console.log(isMatch('a.a')); //=> false\n * console.log(isMatch('a.b')); //=> true\n * ```\n * @param {String} `pattern` Glob pattern\n * @param {Object} `options`\n * @return {Function} Returns a matcher function.\n * @api public\n */\n\nmicromatch.matcher = (pattern, options) => picomatch(pattern, options);\n\n/**\n * Returns true if **any** of the given glob `patterns` match the specified `string`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.isMatch(string, patterns[, options]);\n *\n * console.log(mm.isMatch('a.a', ['b.*', '*.a'])); //=> true\n * console.log(mm.isMatch('a.a', 'b.*')); //=> false\n * ```\n * @param {String} `str` The string to test.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `[options]` See available [options](#options).\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\nmicromatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);\n\n/**\n * Backwards compatibility\n */\n\nmicromatch.any = micromatch.isMatch;\n\n/**\n * Returns a list of strings that _**do not match any**_ of the given `patterns`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.not(list, patterns[, options]);\n *\n * console.log(mm.not(['a.a', 'b.b', 'c.c'], '*.a'));\n * //=> ['b.b', 'c.c']\n * ```\n * @param {Array} `list` Array of strings to match.\n * @param {String|Array} `patterns` One or more glob pattern to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Array} Returns an array of strings that **do not match** the given patterns.\n * @api public\n */\n\nmicromatch.not = (list, patterns, options = {}) => {\n patterns = [].concat(patterns).map(String);\n let result = new Set();\n let items = [];\n\n let onResult = state => {\n if (options.onResult) options.onResult(state);\n items.push(state.output);\n };\n\n let matches = new Set(micromatch(list, patterns, { ...options, onResult }));\n\n for (let item of items) {\n if (!matches.has(item)) {\n result.add(item);\n }\n }\n return [...result];\n};\n\n/**\n * Returns true if the given `string` contains the given pattern. Similar\n * to [.isMatch](#isMatch) but the pattern can match any part of the string.\n *\n * ```js\n * var mm = require('micromatch');\n * // mm.contains(string, pattern[, options]);\n *\n * console.log(mm.contains('aa/bb/cc', '*b'));\n * //=> true\n * console.log(mm.contains('aa/bb/cc', '*d'));\n * //=> false\n * ```\n * @param {String} `str` The string to match.\n * @param {String|Array} `patterns` Glob pattern to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if any of the patterns matches any part of `str`.\n * @api public\n */\n\nmicromatch.contains = (str, pattern, options) => {\n if (typeof str !== 'string') {\n throw new TypeError(`Expected a string: \"${util.inspect(str)}\"`);\n }\n\n if (Array.isArray(pattern)) {\n return pattern.some(p => micromatch.contains(str, p, options));\n }\n\n if (typeof pattern === 'string') {\n if (isEmptyString(str) || isEmptyString(pattern)) {\n return false;\n }\n\n if (str.includes(pattern) || (str.startsWith('./') && str.slice(2).includes(pattern))) {\n return true;\n }\n }\n\n return micromatch.isMatch(str, pattern, { ...options, contains: true });\n};\n\n/**\n * Filter the keys of the given object with the given `glob` pattern\n * and `options`. Does not attempt to match nested keys. If you need this feature,\n * use [glob-object][] instead.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.matchKeys(object, patterns[, options]);\n *\n * const obj = { aa: 'a', ab: 'b', ac: 'c' };\n * console.log(mm.matchKeys(obj, '*b'));\n * //=> { ab: 'b' }\n * ```\n * @param {Object} `object` The object with keys to filter.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Object} Returns an object with only keys that match the given patterns.\n * @api public\n */\n\nmicromatch.matchKeys = (obj, patterns, options) => {\n if (!utils.isObject(obj)) {\n throw new TypeError('Expected the first argument to be an object');\n }\n let keys = micromatch(Object.keys(obj), patterns, options);\n let res = {};\n for (let key of keys) res[key] = obj[key];\n return res;\n};\n\n/**\n * Returns true if some of the strings in the given `list` match any of the given glob `patterns`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.some(list, patterns[, options]);\n *\n * console.log(mm.some(['foo.js', 'bar.js'], ['*.js', '!foo.js']));\n * // true\n * console.log(mm.some(['foo.js'], ['*.js', '!foo.js']));\n * // false\n * ```\n * @param {String|Array} `list` The string or array of strings to test. Returns as soon as the first match is found.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if any `patterns` matches any of the strings in `list`\n * @api public\n */\n\nmicromatch.some = (list, patterns, options) => {\n let items = [].concat(list);\n\n for (let pattern of [].concat(patterns)) {\n let isMatch = picomatch(String(pattern), options);\n if (items.some(item => isMatch(item))) {\n return true;\n }\n }\n return false;\n};\n\n/**\n * Returns true if every string in the given `list` matches\n * any of the given glob `patterns`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.every(list, patterns[, options]);\n *\n * console.log(mm.every('foo.js', ['foo.js']));\n * // true\n * console.log(mm.every(['foo.js', 'bar.js'], ['*.js']));\n * // true\n * console.log(mm.every(['foo.js', 'bar.js'], ['*.js', '!foo.js']));\n * // false\n * console.log(mm.every(['foo.js'], ['*.js', '!foo.js']));\n * // false\n * ```\n * @param {String|Array} `list` The string or array of strings to test.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if all `patterns` matches all of the strings in `list`\n * @api public\n */\n\nmicromatch.every = (list, patterns, options) => {\n let items = [].concat(list);\n\n for (let pattern of [].concat(patterns)) {\n let isMatch = picomatch(String(pattern), options);\n if (!items.every(item => isMatch(item))) {\n return false;\n }\n }\n return true;\n};\n\n/**\n * Returns true if **all** of the given `patterns` match\n * the specified string.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.all(string, patterns[, options]);\n *\n * console.log(mm.all('foo.js', ['foo.js']));\n * // true\n *\n * console.log(mm.all('foo.js', ['*.js', '!foo.js']));\n * // false\n *\n * console.log(mm.all('foo.js', ['*.js', 'foo.js']));\n * // true\n *\n * console.log(mm.all('foo.js', ['*.js', 'f*', '*o*', '*o.js']));\n * // true\n * ```\n * @param {String|Array} `str` The string to test.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\nmicromatch.all = (str, patterns, options) => {\n if (typeof str !== 'string') {\n throw new TypeError(`Expected a string: \"${util.inspect(str)}\"`);\n }\n\n return [].concat(patterns).every(p => picomatch(p, options)(str));\n};\n\n/**\n * Returns an array of matches captured by `pattern` in `string, or `null` if the pattern did not match.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.capture(pattern, string[, options]);\n *\n * console.log(mm.capture('test/*.js', 'test/foo.js'));\n * //=> ['foo']\n * console.log(mm.capture('test/*.js', 'foo/bar.css'));\n * //=> null\n * ```\n * @param {String} `glob` Glob pattern to use for matching.\n * @param {String} `input` String to match\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Array|null} Returns an array of captures if the input matches the glob pattern, otherwise `null`.\n * @api public\n */\n\nmicromatch.capture = (glob, input, options) => {\n let posix = utils.isWindows(options);\n let regex = picomatch.makeRe(String(glob), { ...options, capture: true });\n let match = regex.exec(posix ? utils.toPosixSlashes(input) : input);\n\n if (match) {\n return match.slice(1).map(v => v === void 0 ? '' : v);\n }\n};\n\n/**\n * Create a regular expression from the given glob `pattern`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.makeRe(pattern[, options]);\n *\n * console.log(mm.makeRe('*.js'));\n * //=> /^(?:(\\.[\\\\\\/])?(?!\\.)(?=.)[^\\/]*?\\.js)$/\n * ```\n * @param {String} `pattern` A glob pattern to convert to regex.\n * @param {Object} `options`\n * @return {RegExp} Returns a regex created from the given pattern.\n * @api public\n */\n\nmicromatch.makeRe = (...args) => picomatch.makeRe(...args);\n\n/**\n * Scan a glob pattern to separate the pattern into segments. Used\n * by the [split](#split) method.\n *\n * ```js\n * const mm = require('micromatch');\n * const state = mm.scan(pattern[, options]);\n * ```\n * @param {String} `pattern`\n * @param {Object} `options`\n * @return {Object} Returns an object with\n * @api public\n */\n\nmicromatch.scan = (...args) => picomatch.scan(...args);\n\n/**\n * Parse a glob pattern to create the source string for a regular\n * expression.\n *\n * ```js\n * const mm = require('micromatch');\n * const state = mm.parse(pattern[, options]);\n * ```\n * @param {String} `glob`\n * @param {Object} `options`\n * @return {Object} Returns an object with useful properties and output to be used as regex source string.\n * @api public\n */\n\nmicromatch.parse = (patterns, options) => {\n let res = [];\n for (let pattern of [].concat(patterns || [])) {\n for (let str of braces(String(pattern), options)) {\n res.push(picomatch.parse(str, options));\n }\n }\n return res;\n};\n\n/**\n * Process the given brace `pattern`.\n *\n * ```js\n * const { braces } = require('micromatch');\n * console.log(braces('foo/{a,b,c}/bar'));\n * //=> [ 'foo/(a|b|c)/bar' ]\n *\n * console.log(braces('foo/{a,b,c}/bar', { expand: true }));\n * //=> [ 'foo/a/bar', 'foo/b/bar', 'foo/c/bar' ]\n * ```\n * @param {String} `pattern` String with brace pattern to process.\n * @param {Object} `options` Any [options](#options) to change how expansion is performed. See the [braces][] library for all available options.\n * @return {Array}\n * @api public\n */\n\nmicromatch.braces = (pattern, options) => {\n if (typeof pattern !== 'string') throw new TypeError('Expected a string');\n if ((options && options.nobrace === true) || !hasBraces(pattern)) {\n return [pattern];\n }\n return braces(pattern, options);\n};\n\n/**\n * Expand braces\n */\n\nmicromatch.braceExpand = (pattern, options) => {\n if (typeof pattern !== 'string') throw new TypeError('Expected a string');\n return micromatch.braces(pattern, { ...options, expand: true });\n};\n\n/**\n * Expose micromatch\n */\n\n// exposed for tests\nmicromatch.hasBraces = hasBraces;\nmodule.exports = micromatch;\n","'use strict';\n\nconst stringify = require('./lib/stringify');\nconst compile = require('./lib/compile');\nconst expand = require('./lib/expand');\nconst parse = require('./lib/parse');\n\n/**\n * Expand the given pattern or create a regex-compatible string.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces('{a,b,c}', { compile: true })); //=> ['(a|b|c)']\n * console.log(braces('{a,b,c}')); //=> ['a', 'b', 'c']\n * ```\n * @param {String} `str`\n * @param {Object} `options`\n * @return {String}\n * @api public\n */\n\nconst braces = (input, options = {}) => {\n let output = [];\n\n if (Array.isArray(input)) {\n for (const pattern of input) {\n const result = braces.create(pattern, options);\n if (Array.isArray(result)) {\n output.push(...result);\n } else {\n output.push(result);\n }\n }\n } else {\n output = [].concat(braces.create(input, options));\n }\n\n if (options && options.expand === true && options.nodupes === true) {\n output = [...new Set(output)];\n }\n return output;\n};\n\n/**\n * Parse the given `str` with the given `options`.\n *\n * ```js\n * // braces.parse(pattern, [, options]);\n * const ast = braces.parse('a/{b,c}/d');\n * console.log(ast);\n * ```\n * @param {String} pattern Brace pattern to parse\n * @param {Object} options\n * @return {Object} Returns an AST\n * @api public\n */\n\nbraces.parse = (input, options = {}) => parse(input, options);\n\n/**\n * Creates a braces string from an AST, or an AST node.\n *\n * ```js\n * const braces = require('braces');\n * let ast = braces.parse('foo/{a,b}/bar');\n * console.log(stringify(ast.nodes[2])); //=> '{a,b}'\n * ```\n * @param {String} `input` Brace pattern or AST.\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.stringify = (input, options = {}) => {\n if (typeof input === 'string') {\n return stringify(braces.parse(input, options), options);\n }\n return stringify(input, options);\n};\n\n/**\n * Compiles a brace pattern into a regex-compatible, optimized string.\n * This method is called by the main [braces](#braces) function by default.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.compile('a/{b,c}/d'));\n * //=> ['a/(b|c)/d']\n * ```\n * @param {String} `input` Brace pattern or AST.\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.compile = (input, options = {}) => {\n if (typeof input === 'string') {\n input = braces.parse(input, options);\n }\n return compile(input, options);\n};\n\n/**\n * Expands a brace pattern into an array. This method is called by the\n * main [braces](#braces) function when `options.expand` is true. Before\n * using this method it's recommended that you read the [performance notes](#performance))\n * and advantages of using [.compile](#compile) instead.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.expand('a/{b,c}/d'));\n * //=> ['a/b/d', 'a/c/d'];\n * ```\n * @param {String} `pattern` Brace pattern\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.expand = (input, options = {}) => {\n if (typeof input === 'string') {\n input = braces.parse(input, options);\n }\n\n let result = expand(input, options);\n\n // filter out empty strings if specified\n if (options.noempty === true) {\n result = result.filter(Boolean);\n }\n\n // filter out duplicates if specified\n if (options.nodupes === true) {\n result = [...new Set(result)];\n }\n\n return result;\n};\n\n/**\n * Processes a brace pattern and returns either an expanded array\n * (if `options.expand` is true), a highly optimized regex-compatible string.\n * This method is called by the main [braces](#braces) function.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.create('user-{200..300}/project-{a,b,c}-{1..10}'))\n * //=> 'user-(20[0-9]|2[1-9][0-9]|300)/project-(a|b|c)-([1-9]|10)'\n * ```\n * @param {String} `pattern` Brace pattern\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.create = (input, options = {}) => {\n if (input === '' || input.length < 3) {\n return [input];\n }\n\n return options.expand !== true\n ? braces.compile(input, options)\n : braces.expand(input, options);\n};\n\n/**\n * Expose \"braces\"\n */\n\nmodule.exports = braces;\n","'use strict';\n\nconst utils = require('./utils');\n\nmodule.exports = (ast, options = {}) => {\n const stringify = (node, parent = {}) => {\n const invalidBlock = options.escapeInvalid && utils.isInvalidBrace(parent);\n const invalidNode = node.invalid === true && options.escapeInvalid === true;\n let output = '';\n\n if (node.value) {\n if ((invalidBlock || invalidNode) && utils.isOpenOrClose(node)) {\n return '\\\\' + node.value;\n }\n return node.value;\n }\n\n if (node.value) {\n return node.value;\n }\n\n if (node.nodes) {\n for (const child of node.nodes) {\n output += stringify(child);\n }\n }\n return output;\n };\n\n return stringify(ast);\n};\n\n","'use strict';\n\nexports.isInteger = num => {\n if (typeof num === 'number') {\n return Number.isInteger(num);\n }\n if (typeof num === 'string' && num.trim() !== '') {\n return Number.isInteger(Number(num));\n }\n return false;\n};\n\n/**\n * Find a node of the given type\n */\n\nexports.find = (node, type) => node.nodes.find(node => node.type === type);\n\n/**\n * Find a node of the given type\n */\n\nexports.exceedsLimit = (min, max, step = 1, limit) => {\n if (limit === false) return false;\n if (!exports.isInteger(min) || !exports.isInteger(max)) return false;\n return ((Number(max) - Number(min)) / Number(step)) >= limit;\n};\n\n/**\n * Escape the given node with '\\\\' before node.value\n */\n\nexports.escapeNode = (block, n = 0, type) => {\n const node = block.nodes[n];\n if (!node) return;\n\n if ((type && node.type === type) || node.type === 'open' || node.type === 'close') {\n if (node.escaped !== true) {\n node.value = '\\\\' + node.value;\n node.escaped = true;\n }\n }\n};\n\n/**\n * Returns true if the given brace node should be enclosed in literal braces\n */\n\nexports.encloseBrace = node => {\n if (node.type !== 'brace') return false;\n if ((node.commas >> 0 + node.ranges >> 0) === 0) {\n node.invalid = true;\n return true;\n }\n return false;\n};\n\n/**\n * Returns true if a brace node is invalid.\n */\n\nexports.isInvalidBrace = block => {\n if (block.type !== 'brace') return false;\n if (block.invalid === true || block.dollar) return true;\n if ((block.commas >> 0 + block.ranges >> 0) === 0) {\n block.invalid = true;\n return true;\n }\n if (block.open !== true || block.close !== true) {\n block.invalid = true;\n return true;\n }\n return false;\n};\n\n/**\n * Returns true if a node is an open or close node\n */\n\nexports.isOpenOrClose = node => {\n if (node.type === 'open' || node.type === 'close') {\n return true;\n }\n return node.open === true || node.close === true;\n};\n\n/**\n * Reduce an array of text nodes.\n */\n\nexports.reduce = nodes => nodes.reduce((acc, node) => {\n if (node.type === 'text') acc.push(node.value);\n if (node.type === 'range') node.type = 'text';\n return acc;\n}, []);\n\n/**\n * Flatten an array\n */\n\nexports.flatten = (...args) => {\n const result = [];\n\n const flat = arr => {\n for (let i = 0; i < arr.length; i++) {\n const ele = arr[i];\n\n if (Array.isArray(ele)) {\n flat(ele);\n continue;\n }\n\n if (ele !== undefined) {\n result.push(ele);\n }\n }\n return result;\n };\n\n flat(args);\n return result;\n};\n","'use strict';\n\nconst fill = require('fill-range');\nconst utils = require('./utils');\n\nconst compile = (ast, options = {}) => {\n const walk = (node, parent = {}) => {\n const invalidBlock = utils.isInvalidBrace(parent);\n const invalidNode = node.invalid === true && options.escapeInvalid === true;\n const invalid = invalidBlock === true || invalidNode === true;\n const prefix = options.escapeInvalid === true ? '\\\\' : '';\n let output = '';\n\n if (node.isOpen === true) {\n return prefix + node.value;\n }\n\n if (node.isClose === true) {\n console.log('node.isClose', prefix, node.value);\n return prefix + node.value;\n }\n\n if (node.type === 'open') {\n return invalid ? prefix + node.value : '(';\n }\n\n if (node.type === 'close') {\n return invalid ? prefix + node.value : ')';\n }\n\n if (node.type === 'comma') {\n return node.prev.type === 'comma' ? '' : invalid ? node.value : '|';\n }\n\n if (node.value) {\n return node.value;\n }\n\n if (node.nodes && node.ranges > 0) {\n const args = utils.reduce(node.nodes);\n const range = fill(...args, { ...options, wrap: false, toRegex: true, strictZeros: true });\n\n if (range.length !== 0) {\n return args.length > 1 && range.length > 1 ? `(${range})` : range;\n }\n }\n\n if (node.nodes) {\n for (const child of node.nodes) {\n output += walk(child, node);\n }\n }\n\n return output;\n };\n\n return walk(ast);\n};\n\nmodule.exports = compile;\n","/*!\n * fill-range \n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\n'use strict';\n\nconst util = require('util');\nconst toRegexRange = require('to-regex-range');\n\nconst isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);\n\nconst transform = toNumber => {\n return value => toNumber === true ? Number(value) : String(value);\n};\n\nconst isValidValue = value => {\n return typeof value === 'number' || (typeof value === 'string' && value !== '');\n};\n\nconst isNumber = num => Number.isInteger(+num);\n\nconst zeros = input => {\n let value = `${input}`;\n let index = -1;\n if (value[0] === '-') value = value.slice(1);\n if (value === '0') return false;\n while (value[++index] === '0');\n return index > 0;\n};\n\nconst stringify = (start, end, options) => {\n if (typeof start === 'string' || typeof end === 'string') {\n return true;\n }\n return options.stringify === true;\n};\n\nconst pad = (input, maxLength, toNumber) => {\n if (maxLength > 0) {\n let dash = input[0] === '-' ? '-' : '';\n if (dash) input = input.slice(1);\n input = (dash + input.padStart(dash ? maxLength - 1 : maxLength, '0'));\n }\n if (toNumber === false) {\n return String(input);\n }\n return input;\n};\n\nconst toMaxLen = (input, maxLength) => {\n let negative = input[0] === '-' ? '-' : '';\n if (negative) {\n input = input.slice(1);\n maxLength--;\n }\n while (input.length < maxLength) input = '0' + input;\n return negative ? ('-' + input) : input;\n};\n\nconst toSequence = (parts, options, maxLen) => {\n parts.negatives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);\n parts.positives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);\n\n let prefix = options.capture ? '' : '?:';\n let positives = '';\n let negatives = '';\n let result;\n\n if (parts.positives.length) {\n positives = parts.positives.map(v => toMaxLen(String(v), maxLen)).join('|');\n }\n\n if (parts.negatives.length) {\n negatives = `-(${prefix}${parts.negatives.map(v => toMaxLen(String(v), maxLen)).join('|')})`;\n }\n\n if (positives && negatives) {\n result = `${positives}|${negatives}`;\n } else {\n result = positives || negatives;\n }\n\n if (options.wrap) {\n return `(${prefix}${result})`;\n }\n\n return result;\n};\n\nconst toRange = (a, b, isNumbers, options) => {\n if (isNumbers) {\n return toRegexRange(a, b, { wrap: false, ...options });\n }\n\n let start = String.fromCharCode(a);\n if (a === b) return start;\n\n let stop = String.fromCharCode(b);\n return `[${start}-${stop}]`;\n};\n\nconst toRegex = (start, end, options) => {\n if (Array.isArray(start)) {\n let wrap = options.wrap === true;\n let prefix = options.capture ? '' : '?:';\n return wrap ? `(${prefix}${start.join('|')})` : start.join('|');\n }\n return toRegexRange(start, end, options);\n};\n\nconst rangeError = (...args) => {\n return new RangeError('Invalid range arguments: ' + util.inspect(...args));\n};\n\nconst invalidRange = (start, end, options) => {\n if (options.strictRanges === true) throw rangeError([start, end]);\n return [];\n};\n\nconst invalidStep = (step, options) => {\n if (options.strictRanges === true) {\n throw new TypeError(`Expected step \"${step}\" to be a number`);\n }\n return [];\n};\n\nconst fillNumbers = (start, end, step = 1, options = {}) => {\n let a = Number(start);\n let b = Number(end);\n\n if (!Number.isInteger(a) || !Number.isInteger(b)) {\n if (options.strictRanges === true) throw rangeError([start, end]);\n return [];\n }\n\n // fix negative zero\n if (a === 0) a = 0;\n if (b === 0) b = 0;\n\n let descending = a > b;\n let startString = String(start);\n let endString = String(end);\n let stepString = String(step);\n step = Math.max(Math.abs(step), 1);\n\n let padded = zeros(startString) || zeros(endString) || zeros(stepString);\n let maxLen = padded ? Math.max(startString.length, endString.length, stepString.length) : 0;\n let toNumber = padded === false && stringify(start, end, options) === false;\n let format = options.transform || transform(toNumber);\n\n if (options.toRegex && step === 1) {\n return toRange(toMaxLen(start, maxLen), toMaxLen(end, maxLen), true, options);\n }\n\n let parts = { negatives: [], positives: [] };\n let push = num => parts[num < 0 ? 'negatives' : 'positives'].push(Math.abs(num));\n let range = [];\n let index = 0;\n\n while (descending ? a >= b : a <= b) {\n if (options.toRegex === true && step > 1) {\n push(a);\n } else {\n range.push(pad(format(a, index), maxLen, toNumber));\n }\n a = descending ? a - step : a + step;\n index++;\n }\n\n if (options.toRegex === true) {\n return step > 1\n ? toSequence(parts, options, maxLen)\n : toRegex(range, null, { wrap: false, ...options });\n }\n\n return range;\n};\n\nconst fillLetters = (start, end, step = 1, options = {}) => {\n if ((!isNumber(start) && start.length > 1) || (!isNumber(end) && end.length > 1)) {\n return invalidRange(start, end, options);\n }\n\n let format = options.transform || (val => String.fromCharCode(val));\n let a = `${start}`.charCodeAt(0);\n let b = `${end}`.charCodeAt(0);\n\n let descending = a > b;\n let min = Math.min(a, b);\n let max = Math.max(a, b);\n\n if (options.toRegex && step === 1) {\n return toRange(min, max, false, options);\n }\n\n let range = [];\n let index = 0;\n\n while (descending ? a >= b : a <= b) {\n range.push(format(a, index));\n a = descending ? a - step : a + step;\n index++;\n }\n\n if (options.toRegex === true) {\n return toRegex(range, null, { wrap: false, options });\n }\n\n return range;\n};\n\nconst fill = (start, end, step, options = {}) => {\n if (end == null && isValidValue(start)) {\n return [start];\n }\n\n if (!isValidValue(start) || !isValidValue(end)) {\n return invalidRange(start, end, options);\n }\n\n if (typeof step === 'function') {\n return fill(start, end, 1, { transform: step });\n }\n\n if (isObject(step)) {\n return fill(start, end, 0, step);\n }\n\n let opts = { ...options };\n if (opts.capture === true) opts.wrap = true;\n step = step || opts.step || 1;\n\n if (!isNumber(step)) {\n if (step != null && !isObject(step)) return invalidStep(step, opts);\n return fill(start, end, 1, step);\n }\n\n if (isNumber(start) && isNumber(end)) {\n return fillNumbers(start, end, step, opts);\n }\n\n return fillLetters(start, end, Math.max(Math.abs(step), 1), opts);\n};\n\nmodule.exports = fill;\n","/*!\n * to-regex-range \n *\n * Copyright (c) 2015-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nconst isNumber = require('is-number');\n\nconst toRegexRange = (min, max, options) => {\n if (isNumber(min) === false) {\n throw new TypeError('toRegexRange: expected the first argument to be a number');\n }\n\n if (max === void 0 || min === max) {\n return String(min);\n }\n\n if (isNumber(max) === false) {\n throw new TypeError('toRegexRange: expected the second argument to be a number.');\n }\n\n let opts = { relaxZeros: true, ...options };\n if (typeof opts.strictZeros === 'boolean') {\n opts.relaxZeros = opts.strictZeros === false;\n }\n\n let relax = String(opts.relaxZeros);\n let shorthand = String(opts.shorthand);\n let capture = String(opts.capture);\n let wrap = String(opts.wrap);\n let cacheKey = min + ':' + max + '=' + relax + shorthand + capture + wrap;\n\n if (toRegexRange.cache.hasOwnProperty(cacheKey)) {\n return toRegexRange.cache[cacheKey].result;\n }\n\n let a = Math.min(min, max);\n let b = Math.max(min, max);\n\n if (Math.abs(a - b) === 1) {\n let result = min + '|' + max;\n if (opts.capture) {\n return `(${result})`;\n }\n if (opts.wrap === false) {\n return result;\n }\n return `(?:${result})`;\n }\n\n let isPadded = hasPadding(min) || hasPadding(max);\n let state = { min, max, a, b };\n let positives = [];\n let negatives = [];\n\n if (isPadded) {\n state.isPadded = isPadded;\n state.maxLen = String(state.max).length;\n }\n\n if (a < 0) {\n let newMin = b < 0 ? Math.abs(b) : 1;\n negatives = splitToPatterns(newMin, Math.abs(a), state, opts);\n a = state.a = 0;\n }\n\n if (b >= 0) {\n positives = splitToPatterns(a, b, state, opts);\n }\n\n state.negatives = negatives;\n state.positives = positives;\n state.result = collatePatterns(negatives, positives, opts);\n\n if (opts.capture === true) {\n state.result = `(${state.result})`;\n } else if (opts.wrap !== false && (positives.length + negatives.length) > 1) {\n state.result = `(?:${state.result})`;\n }\n\n toRegexRange.cache[cacheKey] = state;\n return state.result;\n};\n\nfunction collatePatterns(neg, pos, options) {\n let onlyNegative = filterPatterns(neg, pos, '-', false, options) || [];\n let onlyPositive = filterPatterns(pos, neg, '', false, options) || [];\n let intersected = filterPatterns(neg, pos, '-?', true, options) || [];\n let subpatterns = onlyNegative.concat(intersected).concat(onlyPositive);\n return subpatterns.join('|');\n}\n\nfunction splitToRanges(min, max) {\n let nines = 1;\n let zeros = 1;\n\n let stop = countNines(min, nines);\n let stops = new Set([max]);\n\n while (min <= stop && stop <= max) {\n stops.add(stop);\n nines += 1;\n stop = countNines(min, nines);\n }\n\n stop = countZeros(max + 1, zeros) - 1;\n\n while (min < stop && stop <= max) {\n stops.add(stop);\n zeros += 1;\n stop = countZeros(max + 1, zeros) - 1;\n }\n\n stops = [...stops];\n stops.sort(compare);\n return stops;\n}\n\n/**\n * Convert a range to a regex pattern\n * @param {Number} `start`\n * @param {Number} `stop`\n * @return {String}\n */\n\nfunction rangeToPattern(start, stop, options) {\n if (start === stop) {\n return { pattern: start, count: [], digits: 0 };\n }\n\n let zipped = zip(start, stop);\n let digits = zipped.length;\n let pattern = '';\n let count = 0;\n\n for (let i = 0; i < digits; i++) {\n let [startDigit, stopDigit] = zipped[i];\n\n if (startDigit === stopDigit) {\n pattern += startDigit;\n\n } else if (startDigit !== '0' || stopDigit !== '9') {\n pattern += toCharacterClass(startDigit, stopDigit, options);\n\n } else {\n count++;\n }\n }\n\n if (count) {\n pattern += options.shorthand === true ? '\\\\d' : '[0-9]';\n }\n\n return { pattern, count: [count], digits };\n}\n\nfunction splitToPatterns(min, max, tok, options) {\n let ranges = splitToRanges(min, max);\n let tokens = [];\n let start = min;\n let prev;\n\n for (let i = 0; i < ranges.length; i++) {\n let max = ranges[i];\n let obj = rangeToPattern(String(start), String(max), options);\n let zeros = '';\n\n if (!tok.isPadded && prev && prev.pattern === obj.pattern) {\n if (prev.count.length > 1) {\n prev.count.pop();\n }\n\n prev.count.push(obj.count[0]);\n prev.string = prev.pattern + toQuantifier(prev.count);\n start = max + 1;\n continue;\n }\n\n if (tok.isPadded) {\n zeros = padZeros(max, tok, options);\n }\n\n obj.string = zeros + obj.pattern + toQuantifier(obj.count);\n tokens.push(obj);\n start = max + 1;\n prev = obj;\n }\n\n return tokens;\n}\n\nfunction filterPatterns(arr, comparison, prefix, intersection, options) {\n let result = [];\n\n for (let ele of arr) {\n let { string } = ele;\n\n // only push if _both_ are negative...\n if (!intersection && !contains(comparison, 'string', string)) {\n result.push(prefix + string);\n }\n\n // or _both_ are positive\n if (intersection && contains(comparison, 'string', string)) {\n result.push(prefix + string);\n }\n }\n return result;\n}\n\n/**\n * Zip strings\n */\n\nfunction zip(a, b) {\n let arr = [];\n for (let i = 0; i < a.length; i++) arr.push([a[i], b[i]]);\n return arr;\n}\n\nfunction compare(a, b) {\n return a > b ? 1 : b > a ? -1 : 0;\n}\n\nfunction contains(arr, key, val) {\n return arr.some(ele => ele[key] === val);\n}\n\nfunction countNines(min, len) {\n return Number(String(min).slice(0, -len) + '9'.repeat(len));\n}\n\nfunction countZeros(integer, zeros) {\n return integer - (integer % Math.pow(10, zeros));\n}\n\nfunction toQuantifier(digits) {\n let [start = 0, stop = ''] = digits;\n if (stop || start > 1) {\n return `{${start + (stop ? ',' + stop : '')}}`;\n }\n return '';\n}\n\nfunction toCharacterClass(a, b, options) {\n return `[${a}${(b - a === 1) ? '' : '-'}${b}]`;\n}\n\nfunction hasPadding(str) {\n return /^-?(0+)\\d/.test(str);\n}\n\nfunction padZeros(value, tok, options) {\n if (!tok.isPadded) {\n return value;\n }\n\n let diff = Math.abs(tok.maxLen - String(value).length);\n let relax = options.relaxZeros !== false;\n\n switch (diff) {\n case 0:\n return '';\n case 1:\n return relax ? '0?' : '0';\n case 2:\n return relax ? '0{0,2}' : '00';\n default: {\n return relax ? `0{0,${diff}}` : `0{${diff}}`;\n }\n }\n}\n\n/**\n * Cache\n */\n\ntoRegexRange.cache = {};\ntoRegexRange.clearCache = () => (toRegexRange.cache = {});\n\n/**\n * Expose `toRegexRange`\n */\n\nmodule.exports = toRegexRange;\n","/*!\n * is-number \n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nmodule.exports = function(num) {\n if (typeof num === 'number') {\n return num - num === 0;\n }\n if (typeof num === 'string' && num.trim() !== '') {\n return Number.isFinite ? Number.isFinite(+num) : isFinite(+num);\n }\n return false;\n};\n","'use strict';\n\nconst fill = require('fill-range');\nconst stringify = require('./stringify');\nconst utils = require('./utils');\n\nconst append = (queue = '', stash = '', enclose = false) => {\n const result = [];\n\n queue = [].concat(queue);\n stash = [].concat(stash);\n\n if (!stash.length) return queue;\n if (!queue.length) {\n return enclose ? utils.flatten(stash).map(ele => `{${ele}}`) : stash;\n }\n\n for (const item of queue) {\n if (Array.isArray(item)) {\n for (const value of item) {\n result.push(append(value, stash, enclose));\n }\n } else {\n for (let ele of stash) {\n if (enclose === true && typeof ele === 'string') ele = `{${ele}}`;\n result.push(Array.isArray(ele) ? append(item, ele, enclose) : item + ele);\n }\n }\n }\n return utils.flatten(result);\n};\n\nconst expand = (ast, options = {}) => {\n const rangeLimit = options.rangeLimit === undefined ? 1000 : options.rangeLimit;\n\n const walk = (node, parent = {}) => {\n node.queue = [];\n\n let p = parent;\n let q = parent.queue;\n\n while (p.type !== 'brace' && p.type !== 'root' && p.parent) {\n p = p.parent;\n q = p.queue;\n }\n\n if (node.invalid || node.dollar) {\n q.push(append(q.pop(), stringify(node, options)));\n return;\n }\n\n if (node.type === 'brace' && node.invalid !== true && node.nodes.length === 2) {\n q.push(append(q.pop(), ['{}']));\n return;\n }\n\n if (node.nodes && node.ranges > 0) {\n const args = utils.reduce(node.nodes);\n\n if (utils.exceedsLimit(...args, options.step, rangeLimit)) {\n throw new RangeError('expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.');\n }\n\n let range = fill(...args, options);\n if (range.length === 0) {\n range = stringify(node, options);\n }\n\n q.push(append(q.pop(), range));\n node.nodes = [];\n return;\n }\n\n const enclose = utils.encloseBrace(node);\n let queue = node.queue;\n let block = node;\n\n while (block.type !== 'brace' && block.type !== 'root' && block.parent) {\n block = block.parent;\n queue = block.queue;\n }\n\n for (let i = 0; i < node.nodes.length; i++) {\n const child = node.nodes[i];\n\n if (child.type === 'comma' && node.type === 'brace') {\n if (i === 1) queue.push('');\n queue.push('');\n continue;\n }\n\n if (child.type === 'close') {\n q.push(append(q.pop(), queue, enclose));\n continue;\n }\n\n if (child.value && child.type !== 'open') {\n queue.push(append(queue.pop(), child.value));\n continue;\n }\n\n if (child.nodes) {\n walk(child, node);\n }\n }\n\n return queue;\n };\n\n return utils.flatten(walk(ast));\n};\n\nmodule.exports = expand;\n","'use strict';\n\nconst stringify = require('./stringify');\n\n/**\n * Constants\n */\n\nconst {\n MAX_LENGTH,\n CHAR_BACKSLASH, /* \\ */\n CHAR_BACKTICK, /* ` */\n CHAR_COMMA, /* , */\n CHAR_DOT, /* . */\n CHAR_LEFT_PARENTHESES, /* ( */\n CHAR_RIGHT_PARENTHESES, /* ) */\n CHAR_LEFT_CURLY_BRACE, /* { */\n CHAR_RIGHT_CURLY_BRACE, /* } */\n CHAR_LEFT_SQUARE_BRACKET, /* [ */\n CHAR_RIGHT_SQUARE_BRACKET, /* ] */\n CHAR_DOUBLE_QUOTE, /* \" */\n CHAR_SINGLE_QUOTE, /* ' */\n CHAR_NO_BREAK_SPACE,\n CHAR_ZERO_WIDTH_NOBREAK_SPACE\n} = require('./constants');\n\n/**\n * parse\n */\n\nconst parse = (input, options = {}) => {\n if (typeof input !== 'string') {\n throw new TypeError('Expected a string');\n }\n\n const opts = options || {};\n const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n if (input.length > max) {\n throw new SyntaxError(`Input length (${input.length}), exceeds max characters (${max})`);\n }\n\n const ast = { type: 'root', input, nodes: [] };\n const stack = [ast];\n let block = ast;\n let prev = ast;\n let brackets = 0;\n const length = input.length;\n let index = 0;\n let depth = 0;\n let value;\n\n /**\n * Helpers\n */\n\n const advance = () => input[index++];\n const push = node => {\n if (node.type === 'text' && prev.type === 'dot') {\n prev.type = 'text';\n }\n\n if (prev && prev.type === 'text' && node.type === 'text') {\n prev.value += node.value;\n return;\n }\n\n block.nodes.push(node);\n node.parent = block;\n node.prev = prev;\n prev = node;\n return node;\n };\n\n push({ type: 'bos' });\n\n while (index < length) {\n block = stack[stack.length - 1];\n value = advance();\n\n /**\n * Invalid chars\n */\n\n if (value === CHAR_ZERO_WIDTH_NOBREAK_SPACE || value === CHAR_NO_BREAK_SPACE) {\n continue;\n }\n\n /**\n * Escaped chars\n */\n\n if (value === CHAR_BACKSLASH) {\n push({ type: 'text', value: (options.keepEscaping ? value : '') + advance() });\n continue;\n }\n\n /**\n * Right square bracket (literal): ']'\n */\n\n if (value === CHAR_RIGHT_SQUARE_BRACKET) {\n push({ type: 'text', value: '\\\\' + value });\n continue;\n }\n\n /**\n * Left square bracket: '['\n */\n\n if (value === CHAR_LEFT_SQUARE_BRACKET) {\n brackets++;\n\n let next;\n\n while (index < length && (next = advance())) {\n value += next;\n\n if (next === CHAR_LEFT_SQUARE_BRACKET) {\n brackets++;\n continue;\n }\n\n if (next === CHAR_BACKSLASH) {\n value += advance();\n continue;\n }\n\n if (next === CHAR_RIGHT_SQUARE_BRACKET) {\n brackets--;\n\n if (brackets === 0) {\n break;\n }\n }\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Parentheses\n */\n\n if (value === CHAR_LEFT_PARENTHESES) {\n block = push({ type: 'paren', nodes: [] });\n stack.push(block);\n push({ type: 'text', value });\n continue;\n }\n\n if (value === CHAR_RIGHT_PARENTHESES) {\n if (block.type !== 'paren') {\n push({ type: 'text', value });\n continue;\n }\n block = stack.pop();\n push({ type: 'text', value });\n block = stack[stack.length - 1];\n continue;\n }\n\n /**\n * Quotes: '|\"|`\n */\n\n if (value === CHAR_DOUBLE_QUOTE || value === CHAR_SINGLE_QUOTE || value === CHAR_BACKTICK) {\n const open = value;\n let next;\n\n if (options.keepQuotes !== true) {\n value = '';\n }\n\n while (index < length && (next = advance())) {\n if (next === CHAR_BACKSLASH) {\n value += next + advance();\n continue;\n }\n\n if (next === open) {\n if (options.keepQuotes === true) value += next;\n break;\n }\n\n value += next;\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Left curly brace: '{'\n */\n\n if (value === CHAR_LEFT_CURLY_BRACE) {\n depth++;\n\n const dollar = prev.value && prev.value.slice(-1) === '$' || block.dollar === true;\n const brace = {\n type: 'brace',\n open: true,\n close: false,\n dollar,\n depth,\n commas: 0,\n ranges: 0,\n nodes: []\n };\n\n block = push(brace);\n stack.push(block);\n push({ type: 'open', value });\n continue;\n }\n\n /**\n * Right curly brace: '}'\n */\n\n if (value === CHAR_RIGHT_CURLY_BRACE) {\n if (block.type !== 'brace') {\n push({ type: 'text', value });\n continue;\n }\n\n const type = 'close';\n block = stack.pop();\n block.close = true;\n\n push({ type, value });\n depth--;\n\n block = stack[stack.length - 1];\n continue;\n }\n\n /**\n * Comma: ','\n */\n\n if (value === CHAR_COMMA && depth > 0) {\n if (block.ranges > 0) {\n block.ranges = 0;\n const open = block.nodes.shift();\n block.nodes = [open, { type: 'text', value: stringify(block) }];\n }\n\n push({ type: 'comma', value });\n block.commas++;\n continue;\n }\n\n /**\n * Dot: '.'\n */\n\n if (value === CHAR_DOT && depth > 0 && block.commas === 0) {\n const siblings = block.nodes;\n\n if (depth === 0 || siblings.length === 0) {\n push({ type: 'text', value });\n continue;\n }\n\n if (prev.type === 'dot') {\n block.range = [];\n prev.value += value;\n prev.type = 'range';\n\n if (block.nodes.length !== 3 && block.nodes.length !== 5) {\n block.invalid = true;\n block.ranges = 0;\n prev.type = 'text';\n continue;\n }\n\n block.ranges++;\n block.args = [];\n continue;\n }\n\n if (prev.type === 'range') {\n siblings.pop();\n\n const before = siblings[siblings.length - 1];\n before.value += prev.value + value;\n prev = before;\n block.ranges--;\n continue;\n }\n\n push({ type: 'dot', value });\n continue;\n }\n\n /**\n * Text\n */\n\n push({ type: 'text', value });\n }\n\n // Mark imbalanced braces and brackets as invalid\n do {\n block = stack.pop();\n\n if (block.type !== 'root') {\n block.nodes.forEach(node => {\n if (!node.nodes) {\n if (node.type === 'open') node.isOpen = true;\n if (node.type === 'close') node.isClose = true;\n if (!node.nodes) node.type = 'text';\n node.invalid = true;\n }\n });\n\n // get the location of the block on parent.nodes (block's siblings)\n const parent = stack[stack.length - 1];\n const index = parent.nodes.indexOf(block);\n // replace the (invalid) block with it's nodes\n parent.nodes.splice(index, 1, ...block.nodes);\n }\n } while (stack.length > 0);\n\n push({ type: 'eos' });\n return ast;\n};\n\nmodule.exports = parse;\n","'use strict';\n\nmodule.exports = {\n MAX_LENGTH: 10000,\n\n // Digits\n CHAR_0: '0', /* 0 */\n CHAR_9: '9', /* 9 */\n\n // Alphabet chars.\n CHAR_UPPERCASE_A: 'A', /* A */\n CHAR_LOWERCASE_A: 'a', /* a */\n CHAR_UPPERCASE_Z: 'Z', /* Z */\n CHAR_LOWERCASE_Z: 'z', /* z */\n\n CHAR_LEFT_PARENTHESES: '(', /* ( */\n CHAR_RIGHT_PARENTHESES: ')', /* ) */\n\n CHAR_ASTERISK: '*', /* * */\n\n // Non-alphabetic chars.\n CHAR_AMPERSAND: '&', /* & */\n CHAR_AT: '@', /* @ */\n CHAR_BACKSLASH: '\\\\', /* \\ */\n CHAR_BACKTICK: '`', /* ` */\n CHAR_CARRIAGE_RETURN: '\\r', /* \\r */\n CHAR_CIRCUMFLEX_ACCENT: '^', /* ^ */\n CHAR_COLON: ':', /* : */\n CHAR_COMMA: ',', /* , */\n CHAR_DOLLAR: '$', /* . */\n CHAR_DOT: '.', /* . */\n CHAR_DOUBLE_QUOTE: '\"', /* \" */\n CHAR_EQUAL: '=', /* = */\n CHAR_EXCLAMATION_MARK: '!', /* ! */\n CHAR_FORM_FEED: '\\f', /* \\f */\n CHAR_FORWARD_SLASH: '/', /* / */\n CHAR_HASH: '#', /* # */\n CHAR_HYPHEN_MINUS: '-', /* - */\n CHAR_LEFT_ANGLE_BRACKET: '<', /* < */\n CHAR_LEFT_CURLY_BRACE: '{', /* { */\n CHAR_LEFT_SQUARE_BRACKET: '[', /* [ */\n CHAR_LINE_FEED: '\\n', /* \\n */\n CHAR_NO_BREAK_SPACE: '\\u00A0', /* \\u00A0 */\n CHAR_PERCENT: '%', /* % */\n CHAR_PLUS: '+', /* + */\n CHAR_QUESTION_MARK: '?', /* ? */\n CHAR_RIGHT_ANGLE_BRACKET: '>', /* > */\n CHAR_RIGHT_CURLY_BRACE: '}', /* } */\n CHAR_RIGHT_SQUARE_BRACKET: ']', /* ] */\n CHAR_SEMICOLON: ';', /* ; */\n CHAR_SINGLE_QUOTE: '\\'', /* ' */\n CHAR_SPACE: ' ', /* */\n CHAR_TAB: '\\t', /* \\t */\n CHAR_UNDERSCORE: '_', /* _ */\n CHAR_VERTICAL_LINE: '|', /* | */\n CHAR_ZERO_WIDTH_NOBREAK_SPACE: '\\uFEFF' /* \\uFEFF */\n};\n","'use strict';\n\nmodule.exports = require('./lib/picomatch');\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getHandlers = exports.init = void 0;\nconst logger_1 = require(\"./logger\");\nconst logger = (0, logger_1.getInstance)();\nfunction init(proxy, option) {\n const handlers = getHandlers(option);\n for (const eventName of Object.keys(handlers)) {\n proxy.on(eventName, handlers[eventName]);\n }\n // https://github.com/webpack/webpack-dev-server/issues/1642\n proxy.on('econnreset', (error, req, res, target) => {\n logger.error(`[HPM] ECONNRESET: %O`, error);\n });\n // https://github.com/webpack/webpack-dev-server/issues/1642#issuecomment-1104325120\n proxy.on('proxyReqWs', (proxyReq, req, socket, options, head) => {\n socket.on('error', (error) => {\n logger.error(`[HPM] WebSocket error: %O`, error);\n });\n });\n logger.debug('[HPM] Subscribed to http-proxy events:', Object.keys(handlers));\n}\nexports.init = init;\nfunction getHandlers(options) {\n // https://github.com/nodejitsu/node-http-proxy#listening-for-proxy-events\n const proxyEventsMap = {\n error: 'onError',\n proxyReq: 'onProxyReq',\n proxyReqWs: 'onProxyReqWs',\n proxyRes: 'onProxyRes',\n open: 'onOpen',\n close: 'onClose',\n };\n const handlers = {};\n for (const [eventName, onEventName] of Object.entries(proxyEventsMap)) {\n // all handlers for the http-proxy events are prefixed with 'on'.\n // loop through options and try to find these handlers\n // and add them to the handlers object for subscription in init().\n const fnHandler = options ? options[onEventName] : null;\n if (typeof fnHandler === 'function') {\n handlers[eventName] = fnHandler;\n }\n }\n // add default error handler in absence of error handler\n if (typeof handlers.error !== 'function') {\n handlers.error = defaultErrorHandler;\n }\n // add default close handler in absence of close handler\n if (typeof handlers.close !== 'function') {\n handlers.close = logClose;\n }\n return handlers;\n}\nexports.getHandlers = getHandlers;\nfunction defaultErrorHandler(err, req, res) {\n // Re-throw error. Not recoverable since req & res are empty.\n if (!req && !res) {\n throw err; // \"Error: Must provide a proper URL as target\"\n }\n const host = req.headers && req.headers.host;\n const code = err.code;\n if (res.writeHead && !res.headersSent) {\n if (/HPE_INVALID/.test(code)) {\n res.writeHead(502);\n }\n else {\n switch (code) {\n case 'ECONNRESET':\n case 'ENOTFOUND':\n case 'ECONNREFUSED':\n case 'ETIMEDOUT':\n res.writeHead(504);\n break;\n default:\n res.writeHead(500);\n }\n }\n }\n res.end(`Error occurred while trying to proxy: ${host}${req.url}`);\n}\nfunction logClose(req, socket, head) {\n // view disconnected websocket connections\n logger.info('[HPM] Client disconnected');\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createPathRewriter = void 0;\nconst isPlainObj = require(\"is-plain-obj\");\nconst errors_1 = require(\"./errors\");\nconst logger_1 = require(\"./logger\");\nconst logger = (0, logger_1.getInstance)();\n/**\n * Create rewrite function, to cache parsed rewrite rules.\n *\n * @param {Object} rewriteConfig\n * @return {Function} Function to rewrite paths; This function should accept `path` (request.url) as parameter\n */\nfunction createPathRewriter(rewriteConfig) {\n let rulesCache;\n if (!isValidRewriteConfig(rewriteConfig)) {\n return;\n }\n if (typeof rewriteConfig === 'function') {\n const customRewriteFn = rewriteConfig;\n return customRewriteFn;\n }\n else {\n rulesCache = parsePathRewriteRules(rewriteConfig);\n return rewritePath;\n }\n function rewritePath(path) {\n let result = path;\n for (const rule of rulesCache) {\n if (rule.regex.test(path)) {\n result = result.replace(rule.regex, rule.value);\n logger.debug('[HPM] Rewriting path from \"%s\" to \"%s\"', path, result);\n break;\n }\n }\n return result;\n }\n}\nexports.createPathRewriter = createPathRewriter;\nfunction isValidRewriteConfig(rewriteConfig) {\n if (typeof rewriteConfig === 'function') {\n return true;\n }\n else if (isPlainObj(rewriteConfig)) {\n return Object.keys(rewriteConfig).length !== 0;\n }\n else if (rewriteConfig === undefined || rewriteConfig === null) {\n return false;\n }\n else {\n throw new Error(errors_1.ERRORS.ERR_PATH_REWRITER_CONFIG);\n }\n}\nfunction parsePathRewriteRules(rewriteConfig) {\n const rules = [];\n if (isPlainObj(rewriteConfig)) {\n for (const [key] of Object.entries(rewriteConfig)) {\n rules.push({\n regex: new RegExp(key),\n value: rewriteConfig[key],\n });\n logger.info('[HPM] Proxy rewrite rule created: \"%s\" ~> \"%s\"', key, rewriteConfig[key]);\n }\n }\n return rules;\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getTarget = void 0;\nconst isPlainObj = require(\"is-plain-obj\");\nconst logger_1 = require(\"./logger\");\nconst logger = (0, logger_1.getInstance)();\nasync function getTarget(req, config) {\n let newTarget;\n const router = config.router;\n if (isPlainObj(router)) {\n newTarget = getTargetFromProxyTable(req, router);\n }\n else if (typeof router === 'function') {\n newTarget = await router(req);\n }\n return newTarget;\n}\nexports.getTarget = getTarget;\nfunction getTargetFromProxyTable(req, table) {\n let result;\n const host = req.headers.host;\n const path = req.url;\n const hostAndPath = host + path;\n for (const [key] of Object.entries(table)) {\n if (containsPath(key)) {\n if (hostAndPath.indexOf(key) > -1) {\n // match 'localhost:3000/api'\n result = table[key];\n logger.debug('[HPM] Router table match: \"%s\"', key);\n break;\n }\n }\n else {\n if (key === host) {\n // match 'localhost:3000'\n result = table[key];\n logger.debug('[HPM] Router table match: \"%s\"', host);\n break;\n }\n }\n }\n return result;\n}\nfunction containsPath(v) {\n return v.indexOf('/') > -1;\n}\n","/**\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file at\n * https://github.com/facebookincubator/create-react-app/blob/master/LICENSE\n *\n * Modified by Yuxi Evan You\n */\n\nconst fs = require('fs')\nconst os = require('os')\nconst path = require('path')\nconst colors = require('picocolors')\nconst childProcess = require('child_process')\n\nconst guessEditor = require('./guess')\nconst getArgumentsForPosition = require('./get-args')\n\nfunction wrapErrorCallback (cb) {\n return (fileName, errorMessage) => {\n console.log()\n console.log(\n colors.red('Could not open ' + path.basename(fileName) + ' in the editor.')\n )\n if (errorMessage) {\n if (errorMessage[errorMessage.length - 1] !== '.') {\n errorMessage += '.'\n }\n console.log(\n colors.red('The editor process exited with an error: ' + errorMessage)\n )\n }\n console.log()\n if (cb) cb(fileName, errorMessage)\n }\n}\n\nfunction isTerminalEditor (editor) {\n switch (editor) {\n case 'vim':\n case 'emacs':\n case 'nano':\n return true\n }\n return false\n}\n\nconst positionRE = /:(\\d+)(:(\\d+))?$/\nfunction parseFile (file) {\n const fileName = file.replace(positionRE, '')\n const match = file.match(positionRE)\n const lineNumber = match && match[1]\n const columnNumber = match && match[3]\n return {\n fileName,\n lineNumber,\n columnNumber\n }\n}\n\nlet _childProcess = null\n\nfunction launchEditor (file, specifiedEditor, onErrorCallback) {\n const parsed = parseFile(file)\n let { fileName } = parsed\n const { lineNumber, columnNumber } = parsed\n\n if (!fs.existsSync(fileName)) {\n return\n }\n\n if (typeof specifiedEditor === 'function') {\n onErrorCallback = specifiedEditor\n specifiedEditor = undefined\n }\n\n onErrorCallback = wrapErrorCallback(onErrorCallback)\n\n const [editor, ...args] = guessEditor(specifiedEditor)\n if (!editor) {\n onErrorCallback(fileName, null)\n return\n }\n\n if (\n process.platform === 'linux' &&\n fileName.startsWith('/mnt/') &&\n /Microsoft/i.test(os.release())\n ) {\n // Assume WSL / \"Bash on Ubuntu on Windows\" is being used, and\n // that the file exists on the Windows file system.\n // `os.release()` is \"4.4.0-43-Microsoft\" in the current release\n // build of WSL, see: https://github.com/Microsoft/BashOnWindows/issues/423#issuecomment-221627364\n // When a Windows editor is specified, interop functionality can\n // handle the path translation, but only if a relative path is used.\n fileName = path.relative('', fileName)\n }\n\n if (lineNumber) {\n const extraArgs = getArgumentsForPosition(editor, fileName, lineNumber, columnNumber)\n args.push.apply(args, extraArgs)\n } else {\n args.push(fileName)\n }\n\n if (_childProcess && isTerminalEditor(editor)) {\n // There's an existing editor process already and it's attached\n // to the terminal, so go kill it. Otherwise two separate editor\n // instances attach to the stdin/stdout which gets confusing.\n _childProcess.kill('SIGKILL')\n }\n\n if (process.platform === 'win32') {\n // On Windows, we need to use `exec` with the `shell: true` option,\n // and some more sanitization is required.\n\n // However, CMD.exe on Windows is vulnerable to RCE attacks given a file name of the\n // form \"C:\\Users\\myusername\\Downloads\\& curl 172.21.93.52\".\n // `create-react-app` used a safe file name pattern to validate user-provided file names:\n // - https://github.com/facebook/create-react-app/pull/4866\n // - https://github.com/facebook/create-react-app/pull/5431\n // But that's not a viable solution for this package because\n // it's depended on by so many meta frameworks that heavily rely on\n // special characters in file names for filesystem-based routing.\n // We need to at least:\n // - Support `+` because it's used in SvelteKit and Vike\n // - Support `$` because it's used in Remix\n // - Support `(` and `)` because they are used in Analog, SolidStart, and Vike\n // - Support `@` because it's used in Vike\n // - Support `[` and `]` because they are widely used for [slug]\n // So here we choose to use `^` to escape special characters instead.\n\n // According to https://ss64.com/nt/syntax-esc.html,\n // we can use `^` to escape `&`, `<`, `>`, `|`, `%`, and `^`\n // I'm not sure if we have to escape all of these, but let's do it anyway\n function escapeCmdArgs (cmdArgs) {\n return cmdArgs.replace(/([&|<>,;=^])/g, '^$1')\n }\n\n // Need to double quote the editor path in case it contains spaces;\n // If the fileName contains spaces, we also need to double quote it in the arguments\n // However, there's a case that it's concatenated with line number and column number\n // which is separated by `:`. We need to double quote the whole string in this case.\n // Also, if the string contains the escape character `^`, it needs to be quoted, too.\n function doubleQuoteIfNeeded(str) {\n if (str.includes('^')) {\n // If a string includes an escaped character, not only does it need to be quoted,\n // but the quotes need to be escaped too.\n return `^\"${str}^\"`\n } else if (str.includes(' ')) {\n return `\"${str}\"`\n } \n return str\n }\n const launchCommand = [editor, ...args.map(escapeCmdArgs)]\n .map(doubleQuoteIfNeeded)\n .join(' ')\n\n _childProcess = childProcess.exec(launchCommand, {\n stdio: 'inherit',\n shell: true\n })\n } else {\n _childProcess = childProcess.spawn(editor, args, { stdio: 'inherit' })\n }\n _childProcess.on('exit', function (errorCode) {\n _childProcess = null\n\n if (errorCode) {\n onErrorCallback(fileName, '(code ' + errorCode + ')')\n }\n })\n\n _childProcess.on('error', function (error) {\n let { code, message } = error\n if ('ENOENT' === code) {\n message = `${message} ('${editor}' command does not exist in 'PATH')`\n }\n onErrorCallback(fileName, message);\n })\n}\n\nmodule.exports = launchEditor\n","let p = process || {}, argv = p.argv || [], env = p.env || {}\nlet isColorSupported =\n\t!(!!env.NO_COLOR || argv.includes(\"--no-color\")) &&\n\t(!!env.FORCE_COLOR || argv.includes(\"--color\") || p.platform === \"win32\" || ((p.stdout || {}).isTTY && env.TERM !== \"dumb\") || !!env.CI)\n\nlet formatter = (open, close, replace = open) =>\n\tinput => {\n\t\tlet string = \"\" + input, index = string.indexOf(close, open.length)\n\t\treturn ~index ? open + replaceClose(string, close, replace, index) + close : open + string + close\n\t}\n\nlet replaceClose = (string, close, replace, index) => {\n\tlet result = \"\", cursor = 0\n\tdo {\n\t\tresult += string.substring(cursor, index) + replace\n\t\tcursor = index + close.length\n\t\tindex = string.indexOf(close, cursor)\n\t} while (~index)\n\treturn result + string.substring(cursor)\n}\n\nlet createColors = (enabled = isColorSupported) => {\n\tlet f = enabled ? formatter : () => String\n\treturn {\n\t\tisColorSupported: enabled,\n\t\treset: f(\"\\x1b[0m\", \"\\x1b[0m\"),\n\t\tbold: f(\"\\x1b[1m\", \"\\x1b[22m\", \"\\x1b[22m\\x1b[1m\"),\n\t\tdim: f(\"\\x1b[2m\", \"\\x1b[22m\", \"\\x1b[22m\\x1b[2m\"),\n\t\titalic: f(\"\\x1b[3m\", \"\\x1b[23m\"),\n\t\tunderline: f(\"\\x1b[4m\", \"\\x1b[24m\"),\n\t\tinverse: f(\"\\x1b[7m\", \"\\x1b[27m\"),\n\t\thidden: f(\"\\x1b[8m\", \"\\x1b[28m\"),\n\t\tstrikethrough: f(\"\\x1b[9m\", \"\\x1b[29m\"),\n\n\t\tblack: f(\"\\x1b[30m\", \"\\x1b[39m\"),\n\t\tred: f(\"\\x1b[31m\", \"\\x1b[39m\"),\n\t\tgreen: f(\"\\x1b[32m\", \"\\x1b[39m\"),\n\t\tyellow: f(\"\\x1b[33m\", \"\\x1b[39m\"),\n\t\tblue: f(\"\\x1b[34m\", \"\\x1b[39m\"),\n\t\tmagenta: f(\"\\x1b[35m\", \"\\x1b[39m\"),\n\t\tcyan: f(\"\\x1b[36m\", \"\\x1b[39m\"),\n\t\twhite: f(\"\\x1b[37m\", \"\\x1b[39m\"),\n\t\tgray: f(\"\\x1b[90m\", \"\\x1b[39m\"),\n\n\t\tbgBlack: f(\"\\x1b[40m\", \"\\x1b[49m\"),\n\t\tbgRed: f(\"\\x1b[41m\", \"\\x1b[49m\"),\n\t\tbgGreen: f(\"\\x1b[42m\", \"\\x1b[49m\"),\n\t\tbgYellow: f(\"\\x1b[43m\", \"\\x1b[49m\"),\n\t\tbgBlue: f(\"\\x1b[44m\", \"\\x1b[49m\"),\n\t\tbgMagenta: f(\"\\x1b[45m\", \"\\x1b[49m\"),\n\t\tbgCyan: f(\"\\x1b[46m\", \"\\x1b[49m\"),\n\t\tbgWhite: f(\"\\x1b[47m\", \"\\x1b[49m\"),\n\n\t\tblackBright: f(\"\\x1b[90m\", \"\\x1b[39m\"),\n\t\tredBright: f(\"\\x1b[91m\", \"\\x1b[39m\"),\n\t\tgreenBright: f(\"\\x1b[92m\", \"\\x1b[39m\"),\n\t\tyellowBright: f(\"\\x1b[93m\", \"\\x1b[39m\"),\n\t\tblueBright: f(\"\\x1b[94m\", \"\\x1b[39m\"),\n\t\tmagentaBright: f(\"\\x1b[95m\", \"\\x1b[39m\"),\n\t\tcyanBright: f(\"\\x1b[96m\", \"\\x1b[39m\"),\n\t\twhiteBright: f(\"\\x1b[97m\", \"\\x1b[39m\"),\n\n\t\tbgBlackBright: f(\"\\x1b[100m\", \"\\x1b[49m\"),\n\t\tbgRedBright: f(\"\\x1b[101m\", \"\\x1b[49m\"),\n\t\tbgGreenBright: f(\"\\x1b[102m\", \"\\x1b[49m\"),\n\t\tbgYellowBright: f(\"\\x1b[103m\", \"\\x1b[49m\"),\n\t\tbgBlueBright: f(\"\\x1b[104m\", \"\\x1b[49m\"),\n\t\tbgMagentaBright: f(\"\\x1b[105m\", \"\\x1b[49m\"),\n\t\tbgCyanBright: f(\"\\x1b[106m\", \"\\x1b[49m\"),\n\t\tbgWhiteBright: f(\"\\x1b[107m\", \"\\x1b[49m\"),\n\t}\n}\n\nmodule.exports = createColors()\nmodule.exports.createColors = createColors\n","const path = require('path')\nconst shellQuote = require('shell-quote')\nconst childProcess = require('child_process')\n\n// Map from full process name to binary that starts the process\n// We can't just re-use full process name, because it will spawn a new instance\n// of the app every time\nconst COMMON_EDITORS_MACOS = require('./editor-info/macos')\nconst COMMON_EDITORS_LINUX = require('./editor-info/linux')\nconst COMMON_EDITORS_WIN = require('./editor-info/windows')\n\nmodule.exports = function guessEditor (specifiedEditor) {\n if (specifiedEditor) {\n return shellQuote.parse(specifiedEditor)\n }\n\n if (process.env.LAUNCH_EDITOR) {\n return [process.env.LAUNCH_EDITOR]\n }\n\n if (process.versions.webcontainer) {\n return [process.env.EDITOR || 'code']\n }\n\n // We can find out which editor is currently running by:\n // `ps x` on macOS and Linux\n // `Get-Process` on Windows\n try {\n if (process.platform === 'darwin') {\n const output = childProcess\n .execSync('ps x -o comm=', {\n stdio: ['pipe', 'pipe', 'ignore']\n })\n .toString()\n const processNames = Object.keys(COMMON_EDITORS_MACOS)\n const processList = output.split('\\n')\n for (let i = 0; i < processNames.length; i++) {\n const processName = processNames[i]\n // Find editor by exact match.\n if (processList.includes(processName)) {\n return [COMMON_EDITORS_MACOS[processName]]\n }\n const processNameWithoutApplications = processName.replace('/Applications', '')\n // Find editor installation not in /Applications.\n if (output.indexOf(processNameWithoutApplications) !== -1) {\n // Use the CLI command if one is specified\n if (processName !== COMMON_EDITORS_MACOS[processName]) {\n return [COMMON_EDITORS_MACOS[processName]]\n }\n // Use a partial match to find the running process path. If one is found, use the\n // existing path since it can be running from anywhere.\n const runningProcess = processList.find((procName) => procName.endsWith(processNameWithoutApplications))\n if (runningProcess !== undefined) {\n return [runningProcess]\n }\n }\n }\n } else if (process.platform === 'win32') {\n const output = childProcess\n .execSync(\n 'powershell -NoProfile -Command \"Get-CimInstance -Query \\\\\"select executablepath from win32_process where executablepath is not null\\\\\" | % { $_.ExecutablePath }\"',\n {\n stdio: ['pipe', 'pipe', 'ignore']\n }\n )\n .toString()\n const runningProcesses = output.split('\\r\\n')\n for (let i = 0; i < runningProcesses.length; i++) {\n const fullProcessPath = runningProcesses[i].trim()\n const shortProcessName = path.basename(fullProcessPath)\n\n if (COMMON_EDITORS_WIN.indexOf(shortProcessName) !== -1) {\n return [fullProcessPath]\n }\n }\n } else if (process.platform === 'linux') {\n // --no-heading No header line\n // x List all processes owned by you\n // -o comm Need only names column\n const output = childProcess\n .execSync('ps x --no-heading -o comm --sort=comm', {\n stdio: ['pipe', 'pipe', 'ignore']\n })\n .toString()\n const processNames = Object.keys(COMMON_EDITORS_LINUX)\n for (let i = 0; i < processNames.length; i++) {\n const processName = processNames[i]\n if (output.indexOf(processName) !== -1) {\n return [COMMON_EDITORS_LINUX[processName]]\n }\n }\n }\n } catch (ignoreError) {\n // Ignore...\n }\n\n // Last resort, use old skool env vars\n if (process.env.VISUAL) {\n return [process.env.VISUAL]\n } else if (process.env.EDITOR) {\n return [process.env.EDITOR]\n }\n\n return [null]\n}\n","'use strict';\n\nexports.quote = require('./quote');\nexports.parse = require('./parse');\n","module.exports = {\n '/Applications/Atom.app/Contents/MacOS/Atom': 'atom',\n '/Applications/Atom Beta.app/Contents/MacOS/Atom Beta':\n '/Applications/Atom Beta.app/Contents/MacOS/Atom Beta',\n '/Applications/Brackets.app/Contents/MacOS/Brackets': 'brackets',\n '/Applications/Sublime Text.app/Contents/MacOS/Sublime Text':\n '/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl',\n '/Applications/Sublime Text.app/Contents/MacOS/sublime_text':\n '/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl',\n '/Applications/Sublime Text 2.app/Contents/MacOS/Sublime Text 2':\n '/Applications/Sublime Text 2.app/Contents/SharedSupport/bin/subl',\n '/Applications/Sublime Text Dev.app/Contents/MacOS/Sublime Text':\n '/Applications/Sublime Text Dev.app/Contents/SharedSupport/bin/subl',\n '/Applications/Visual Studio Code.app/Contents/MacOS/Electron': 'code',\n '/Applications/Visual Studio Code - Insiders.app/Contents/MacOS/Electron':\n 'code-insiders',\n '/Applications/VSCodium.app/Contents/MacOS/Electron': 'codium',\n '/Applications/Cursor.app/Contents/MacOS/Cursor': 'cursor',\n '/Applications/AppCode.app/Contents/MacOS/appcode':\n '/Applications/AppCode.app/Contents/MacOS/appcode',\n '/Applications/CLion.app/Contents/MacOS/clion':\n '/Applications/CLion.app/Contents/MacOS/clion',\n '/Applications/IntelliJ IDEA.app/Contents/MacOS/idea':\n '/Applications/IntelliJ IDEA.app/Contents/MacOS/idea',\n '/Applications/IntelliJ IDEA Ultimate.app/Contents/MacOS/idea':\n '/Applications/IntelliJ IDEA Ultimate.app/Contents/MacOS/idea',\n '/Applications/IntelliJ IDEA Community Edition.app/Contents/MacOS/idea':\n '/Applications/IntelliJ IDEA Community Edition.app/Contents/MacOS/idea',\n '/Applications/PhpStorm.app/Contents/MacOS/phpstorm':\n '/Applications/PhpStorm.app/Contents/MacOS/phpstorm',\n '/Applications/PyCharm.app/Contents/MacOS/pycharm':\n '/Applications/PyCharm.app/Contents/MacOS/pycharm',\n '/Applications/PyCharm CE.app/Contents/MacOS/pycharm':\n '/Applications/PyCharm CE.app/Contents/MacOS/pycharm',\n '/Applications/RubyMine.app/Contents/MacOS/rubymine':\n '/Applications/RubyMine.app/Contents/MacOS/rubymine',\n '/Applications/WebStorm.app/Contents/MacOS/webstorm':\n '/Applications/WebStorm.app/Contents/MacOS/webstorm',\n '/Applications/MacVim.app/Contents/MacOS/MacVim': 'mvim',\n '/Applications/GoLand.app/Contents/MacOS/goland':\n '/Applications/GoLand.app/Contents/MacOS/goland',\n '/Applications/Rider.app/Contents/MacOS/rider':\n '/Applications/Rider.app/Contents/MacOS/rider',\n '/Applications/Zed.app/Contents/MacOS/zed': 'zed'\n}\n","module.exports = {\n atom: 'atom',\n Brackets: 'brackets',\n 'code-insiders': 'code-insiders',\n code: 'code',\n vscodium: 'vscodium',\n codium: 'codium',\n emacs: 'emacs',\n gvim: 'gvim',\n idea: 'idea',\n 'idea.sh': 'idea',\n phpstorm: 'phpstorm',\n 'phpstorm.sh': 'phpstorm',\n pycharm: 'pycharm',\n 'pycharm.sh': 'pycharm',\n rubymine: 'rubymine',\n 'rubymine.sh': 'rubymine',\n sublime_text: 'subl',\n vim: 'vim',\n webstorm: 'webstorm',\n 'webstorm.sh': 'webstorm',\n goland: 'goland',\n 'goland.sh': 'goland',\n rider: 'rider',\n 'rider.sh': 'rider'\n}\n","module.exports = [\n 'Brackets.exe',\n 'Code.exe',\n 'Code - Insiders.exe',\n 'VSCodium.exe',\n 'atom.exe',\n 'sublime_text.exe',\n 'notepad++.exe',\n 'clion.exe',\n 'clion64.exe',\n 'idea.exe',\n 'idea64.exe',\n 'phpstorm.exe',\n 'phpstorm64.exe',\n 'pycharm.exe',\n 'pycharm64.exe',\n 'rubymine.exe',\n 'rubymine64.exe',\n 'webstorm.exe',\n 'webstorm64.exe',\n 'goland.exe',\n 'goland64.exe',\n 'rider.exe',\n 'rider64.exe'\n]\n","const path = require('path')\n\n// normalize file/line numbers into command line args for specific editors\nmodule.exports = function getArgumentsForPosition (\n editor,\n fileName,\n lineNumber,\n columnNumber = 1\n) {\n const editorBasename = path.basename(editor).replace(/\\.(exe|cmd|bat)$/i, '')\n switch (editorBasename) {\n case 'atom':\n case 'Atom':\n case 'Atom Beta':\n case 'subl':\n case 'sublime':\n case 'sublime_text':\n case 'wstorm':\n case 'charm':\n case 'zed':\n return [`${fileName}:${lineNumber}:${columnNumber}`]\n case 'notepad++':\n return ['-n' + lineNumber, '-c' + columnNumber, fileName]\n case 'vim':\n case 'mvim':\n return [`+call cursor(${lineNumber}, ${columnNumber})`, fileName]\n case 'joe':\n case 'gvim':\n return ['+' + `${lineNumber}`, fileName]\n case 'emacs':\n case 'emacsclient':\n return [`+${lineNumber}:${columnNumber}`, fileName]\n case 'rmate':\n case 'mate':\n case 'mine':\n return ['--line', lineNumber, fileName]\n case 'code':\n case 'Code':\n case 'code-insiders':\n case 'Code - Insiders':\n case 'codium':\n case 'cursor':\n case 'vscodium':\n case 'VSCodium':\n return ['-r', '-g', `${fileName}:${lineNumber}:${columnNumber}`]\n case 'appcode':\n case 'clion':\n case 'clion64':\n case 'idea':\n case 'idea64':\n case 'phpstorm':\n case 'phpstorm64':\n case 'pycharm':\n case 'pycharm64':\n case 'rubymine':\n case 'rubymine64':\n case 'webstorm':\n case 'webstorm64':\n case 'goland':\n case 'goland64':\n case 'rider':\n case 'rider64':\n return ['--line', lineNumber, '--column', columnNumber, fileName]\n }\n\n if (process.env.LAUNCH_EDITOR) {\n return [fileName, lineNumber, columnNumber]\n }\n\n // For all others, drop the lineNumber until we have\n // a mapping above, since providing the lineNumber incorrectly\n // can result in errors or confusing behavior.\n return [fileName]\n}\n","/*!\n * fresh\n * Copyright(c) 2012 TJ Holowaychuk\n * Copyright(c) 2016-2017 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict'\n\n/**\n * RegExp to check for no-cache token in Cache-Control.\n * @private\n */\n\nvar CACHE_CONTROL_NO_CACHE_REGEXP = /(?:^|,)\\s*?no-cache\\s*?(?:,|$)/\n\n/**\n * Module exports.\n * @public\n */\n\nmodule.exports = fresh\n\n/**\n * Check freshness of the response using request and response headers.\n *\n * @param {Object} reqHeaders\n * @param {Object} resHeaders\n * @return {Boolean}\n * @public\n */\n\nfunction fresh (reqHeaders, resHeaders) {\n // fields\n var modifiedSince = reqHeaders['if-modified-since']\n var noneMatch = reqHeaders['if-none-match']\n\n // unconditional request\n if (!modifiedSince && !noneMatch) {\n return false\n }\n\n // Always return stale when Cache-Control: no-cache\n // to support end-to-end reload requests\n // https://tools.ietf.org/html/rfc2616#section-14.9.4\n var cacheControl = reqHeaders['cache-control']\n if (cacheControl && CACHE_CONTROL_NO_CACHE_REGEXP.test(cacheControl)) {\n return false\n }\n\n // if-none-match\n if (noneMatch && noneMatch !== '*') {\n var etag = resHeaders['etag']\n\n if (!etag) {\n return false\n }\n\n var etagStale = true\n var matches = parseTokenList(noneMatch)\n for (var i = 0; i < matches.length; i++) {\n var match = matches[i]\n if (match === etag || match === 'W/' + etag || 'W/' + match === etag) {\n etagStale = false\n break\n }\n }\n\n if (etagStale) {\n return false\n }\n }\n\n // if-modified-since\n if (modifiedSince) {\n var lastModified = resHeaders['last-modified']\n var modifiedStale = !lastModified || !(parseHttpDate(lastModified) <= parseHttpDate(modifiedSince))\n\n if (modifiedStale) {\n return false\n }\n }\n\n return true\n}\n\n/**\n * Parse an HTTP Date into a number.\n *\n * @param {string} date\n * @private\n */\n\nfunction parseHttpDate (date) {\n var timestamp = date && Date.parse(date)\n\n // istanbul ignore next: guard against date.js Date.parse patching\n return typeof timestamp === 'number'\n ? timestamp\n : NaN\n}\n\n/**\n * Parse a HTTP token list.\n *\n * @param {string} str\n * @private\n */\n\nfunction parseTokenList (str) {\n var end = 0\n var list = []\n var start = 0\n\n // gather tokens\n for (var i = 0, len = str.length; i < len; i++) {\n switch (str.charCodeAt(i)) {\n case 0x20: /* */\n if (start === end) {\n start = end = i + 1\n }\n break\n case 0x2c: /* , */\n list.push(str.substring(start, end))\n start = end = i + 1\n break\n default:\n end = i + 1\n break\n }\n }\n\n // final token\n list.push(str.substring(start, end))\n\n return list\n}\n","'use strict';\n\nfunction nullthrows(x, message) {\n if (x != null) {\n return x;\n }\n var error = new Error(message !== undefined ? message : 'Got unexpected ' + x);\n error.framesToPop = 1; // Skip nullthrows's own stack frame.\n throw error;\n}\n\nmodule.exports = nullthrows;\nmodule.exports.default = nullthrows;\n\nObject.defineProperty(module.exports, '__esModule', {value: true});\n","'use strict';\n\nconst WebSocket = require('./lib/websocket');\n\nWebSocket.createWebSocketStream = require('./lib/stream');\nWebSocket.Server = require('./lib/websocket-server');\nWebSocket.Receiver = require('./lib/receiver');\nWebSocket.Sender = require('./lib/sender');\n\nWebSocket.WebSocket = WebSocket;\nWebSocket.WebSocketServer = WebSocket.Server;\n\nmodule.exports = WebSocket;\n"],"names":["Reporter","HMRServer","Server","servers","Map","hmrServers","report","event","options","logger","serveOptions","hmrOptions","server","get","port","undefined","hmrPort","hmrServer","type","warn","message","serverOptions","projectRoot","cacheDir","publicUrl","inputFS","outputFS","packageManager","set","devServer","start","hmrServerOptions","host","addMiddleware","handler","middleware","push","https","stop","delete","wss","buildStart","phase","emitUpdate","buildSuccess","bundleGraph","requestBundle","buildError","diagnostics","emitError","setHeaders","SOURCES_ENDPOINT","nullthrows","url","mime","WebSocket","invariant","ansiHtml","createHTTPServer","prettyDiagnostic","PromiseQueue","FS_CONCURRENCY","HMR_ENDPOINT","BROADCAST_MAX_ASSETS","unresolvedError","constructor","result","listener","req","res","handle","statusCode","end","listen","stopServer","on","ws","send","JSON","stringify","err","handleSocketError","pathname","parse","originalUrl","startsWith","id","slice","length","asset","getAssetById","getHotAssetContents","then","output","setHeader","contentType","close","clients","terminate","renderedDiagnostics","Promise","all","map","d","ansi","html","i","stack","frames","f","location","code","hints","hint","documentation","documentationURL","broadcast","changedAssets","Set","values","size","queue","maxConcurrent","runtimes","incomingDeps","getIncomingDependencies","isOnlyReferencedByRuntimes","every","dep","resolved","getResolvedAsset","isRuntime","add","runtime","dependencies","getDependencies","depsByBundle","bundle","getBundlesWithAsset","deps","getSpecifier","getAssetPublicId","getSourceURL","envHash","env","outputFormat","assets","run","getCode","publicId","sourcemap","getMap","sourcemapStringified","format","sourceRoot","fs","encodeURI","origin","msg","json","meta","placeholder","specifier","path","resolveConfig","readConfig","relativePath","serverErrors","ejs","connect","serveHandler","createProxyMiddleware","URL","URLSearchParams","launchEditor","fresh","SLASH_REGEX","EDITOR_ENDPOINT","TEMPLATE_404","readFileSync","join","__dirname","TEMPLATE_500","rootPath","e","pending","pendingRequests","errors","respond","ansiDiagnostic","some","search","query","file","send500","extname","sendIndex","serve","send404","serveBundle","htmlBundleFilePaths","getBundles","filter","posix","name","distDir","filePath","indexFilePath","reqURL","bestMatch","bundleDir","dirname","bundleDirSubdir","withoutExtension","basename","matchesIsIndex","depth","match","isIndex","next","requestedPath","normalize","find","b","relative","serveDist","root","method","decodeURIComponent","sendError","sep","includes","isAbsolute","stat","isFile","headers","mtime","toUTCString","public","cleanUrls","lstat","realpath","createReadStream","readdir","writeHead","render","logAccessIfVerbose","verbose","applyProxyTable","app","fileInRoot","configFilePath","filename","conf","cfg","config","context","Object","entries","use","require","prototype","toString","call","default","finalHandler","write","Date","now","resolve","reject","once","error","serverErrorList","EACCES","EADDRINUSE","desc","replace"],"version":3,"file":"ServerReporter.js.map","sourceRoot":"../../../../"} \ No newline at end of file diff --git a/node_modules/@parcel/reporter-dev-server/package.json b/node_modules/@parcel/reporter-dev-server/package.json new file mode 100644 index 00000000..e0bdf495 --- /dev/null +++ b/node_modules/@parcel/reporter-dev-server/package.json @@ -0,0 +1,49 @@ +{ + "name": "@parcel/reporter-dev-server", + "version": "2.13.3", + "description": "Blazing fast, zero configuration web application bundler", + "license": "MIT", + "publishConfig": { + "access": "public" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "repository": { + "type": "git", + "url": "https://github.com/parcel-bundler/parcel.git" + }, + "main": "lib/ServerReporter.js", + "source": "src/ServerReporter.js", + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.13.3" + }, + "targets": { + "main": { + "includeNodeModules": { + "@parcel/plugin": false, + "@parcel/utils": false + } + } + }, + "dependencies": { + "@parcel/plugin": "2.13.3", + "@parcel/utils": "2.13.3" + }, + "devDependencies": { + "@parcel/babel-preset": "2.13.3", + "@parcel/types": "2.13.3", + "connect": "^3.7.0", + "ejs": "^3.1.6", + "fresh": "^0.5.2", + "http-proxy-middleware": "^2.0.1", + "launch-editor": "^2.3.0", + "mime-types": "2.1.18", + "nullthrows": "^1.1.1", + "serve-handler": "^6.0.0", + "ws": "^8.18.0" + }, + "gitHead": "d19b1f6bdb05eb5a3085f44daae15c0fe2709ab9" +} diff --git a/node_modules/@parcel/reporter-dev-server/src/HMRServer.js b/node_modules/@parcel/reporter-dev-server/src/HMRServer.js new file mode 100644 index 00000000..22e1f715 --- /dev/null +++ b/node_modules/@parcel/reporter-dev-server/src/HMRServer.js @@ -0,0 +1,304 @@ +// @flow +import type { + Asset, + BundleGraph, + Dependency, + NamedBundle, + PackagedBundle, + PluginOptions, +} from '@parcel/types'; +import type {Diagnostic} from '@parcel/diagnostic'; +import type {AnsiDiagnosticResult} from '@parcel/utils'; +import type { + ServerError, + HMRServerOptions, + Request, + Response, +} from './types.js.flow'; +import {setHeaders, SOURCES_ENDPOINT} from './Server'; + +import nullthrows from 'nullthrows'; +import url from 'url'; +import mime from 'mime-types'; +import WebSocket from 'ws'; +import invariant from 'assert'; +import { + ansiHtml, + createHTTPServer, + prettyDiagnostic, + PromiseQueue, +} from '@parcel/utils'; + +export type HMRAsset = {| + id: string, + url: string, + type: string, + output: string, + envHash: string, + outputFormat: string, + depsByBundle: {[string]: {[string]: string, ...}, ...}, +|}; + +export type HMRMessage = + | {| + type: 'update', + assets: Array, + |} + | {| + type: 'reload', + |} + | {| + type: 'error', + diagnostics: {| + ansi: Array, + html: Array<$Rest>, + |}, + |}; + +const FS_CONCURRENCY = 64; +const HMR_ENDPOINT = '/__parcel_hmr'; +const BROADCAST_MAX_ASSETS = 10000; + +export default class HMRServer { + wss: WebSocket.Server; + unresolvedError: HMRMessage | null = null; + options: HMRServerOptions; + bundleGraph: BundleGraph | BundleGraph | null = + null; + stopServer: ?() => Promise; + + constructor(options: HMRServerOptions) { + this.options = options; + } + + async start() { + let server = this.options.devServer; + if (!server) { + let result = await createHTTPServer({ + https: this.options.https, + inputFS: this.options.inputFS, + outputFS: this.options.outputFS, + cacheDir: this.options.cacheDir, + listener: (req, res) => { + setHeaders(res); + if (!this.handle(req, res)) { + res.statusCode = 404; + res.end(); + } + }, + }); + server = result.server; + server.listen(this.options.port, this.options.host); + this.stopServer = result.stop; + } else { + this.options.addMiddleware?.((req, res) => this.handle(req, res)); + } + this.wss = new WebSocket.Server({server}); + + this.wss.on('connection', ws => { + if (this.unresolvedError) { + ws.send(JSON.stringify(this.unresolvedError)); + } + }); + + // $FlowFixMe[incompatible-exact] + this.wss.on('error', err => this.handleSocketError(err)); + } + + handle(req: Request, res: Response): boolean { + let {pathname} = url.parse(req.originalUrl || req.url); + if (pathname != null && pathname.startsWith(HMR_ENDPOINT)) { + let id = pathname.slice(HMR_ENDPOINT.length + 1); + let bundleGraph = nullthrows(this.bundleGraph); + let asset = bundleGraph.getAssetById(id); + this.getHotAssetContents(asset).then(output => { + res.setHeader('Content-Type', mime.contentType(asset.type)); + res.end(output); + }); + return true; + } + return false; + } + + async stop() { + if (this.stopServer != null) { + await this.stopServer(); + this.stopServer = null; + } + this.wss.close(); + for (const ws of this.wss.clients) { + ws.terminate(); + } + } + + async emitError(options: PluginOptions, diagnostics: Array) { + let renderedDiagnostics = await Promise.all( + diagnostics.map(d => prettyDiagnostic(d, options)), + ); + + // store the most recent error so we can notify new connections + // and so we can broadcast when the error is resolved + this.unresolvedError = { + type: 'error', + diagnostics: { + ansi: renderedDiagnostics, + html: renderedDiagnostics.map((d, i) => { + return { + message: ansiHtml(d.message), + stack: ansiHtml(d.stack), + frames: d.frames.map(f => ({ + location: f.location, + code: ansiHtml(f.code), + })), + hints: d.hints.map(hint => ansiHtml(hint)), + documentation: diagnostics[i].documentationURL ?? '', + }; + }), + }, + }; + + this.broadcast(this.unresolvedError); + } + + async emitUpdate(event: { + +bundleGraph: BundleGraph | BundleGraph, + +changedAssets: Map, + ... + }) { + this.unresolvedError = null; + this.bundleGraph = event.bundleGraph; + + let changedAssets = new Set(event.changedAssets.values()); + if (changedAssets.size === 0) return; + + let queue = new PromiseQueue({maxConcurrent: FS_CONCURRENCY}); + for (let asset of changedAssets) { + if (asset.type !== 'js' && asset.type !== 'css') { + // If all of the incoming dependencies of the asset actually resolve to a JS asset + // rather than the original, we can mark the runtimes as changed instead. URL runtimes + // have a cache busting query param added with HMR enabled which will trigger a reload. + let runtimes = new Set(); + let incomingDeps = event.bundleGraph.getIncomingDependencies(asset); + let isOnlyReferencedByRuntimes = incomingDeps.every(dep => { + let resolved = event.bundleGraph.getResolvedAsset(dep); + let isRuntime = resolved?.type === 'js' && resolved !== asset; + if (resolved && isRuntime) { + runtimes.add(resolved); + } + return isRuntime; + }); + + if (isOnlyReferencedByRuntimes) { + for (let runtime of runtimes) { + changedAssets.add(runtime); + } + + continue; + } + } + + queue.add(async () => { + let dependencies = event.bundleGraph.getDependencies(asset); + let depsByBundle = {}; + for (let bundle of event.bundleGraph.getBundlesWithAsset(asset)) { + let deps = {}; + for (let dep of dependencies) { + let resolved = event.bundleGraph.getResolvedAsset(dep, bundle); + if (resolved) { + deps[getSpecifier(dep)] = + event.bundleGraph.getAssetPublicId(resolved); + } + } + depsByBundle[bundle.id] = deps; + } + + return { + id: event.bundleGraph.getAssetPublicId(asset), + url: this.getSourceURL(asset), + type: asset.type, + // No need to send the contents of non-JS assets to the client. + output: + asset.type === 'js' ? await this.getHotAssetContents(asset) : '', + envHash: asset.env.id, + outputFormat: asset.env.outputFormat, + depsByBundle, + }; + }); + } + + let assets = await queue.run(); + + if (assets.length >= BROADCAST_MAX_ASSETS) { + // Too many assets to send via an update without errors, just reload instead + this.broadcast({type: 'reload'}); + } else { + this.broadcast({ + type: 'update', + assets, + }); + } + } + + async getHotAssetContents(asset: Asset): Promise { + let output = await asset.getCode(); + let bundleGraph = nullthrows(this.bundleGraph); + if (asset.type === 'js') { + let publicId = bundleGraph.getAssetPublicId(asset); + output = `parcelHotUpdate['${publicId}'] = function (require, module, exports) {${output}}`; + } + + let sourcemap = await asset.getMap(); + if (sourcemap) { + let sourcemapStringified = await sourcemap.stringify({ + format: 'inline', + sourceRoot: SOURCES_ENDPOINT + '/', + // $FlowFixMe + fs: asset.fs, + }); + + invariant(typeof sourcemapStringified === 'string'); + output += `\n//# sourceMappingURL=${sourcemapStringified}`; + output += `\n//# sourceURL=${encodeURI(this.getSourceURL(asset))}\n`; + } + + return output; + } + + getSourceURL(asset: Asset): string { + let origin = ''; + if (!this.options.devServer) { + origin = `http://${this.options.host || 'localhost'}:${ + this.options.port + }`; + } + return origin + HMR_ENDPOINT + '/' + asset.id; + } + + handleSocketError(err: ServerError) { + if (err.code === 'ECONNRESET') { + // This gets triggered on page refresh, ignore this + return; + } + + this.options.logger.warn({ + origin: '@parcel/reporter-dev-server', + message: `[${err.code}]: ${err.message}`, + stack: err.stack, + }); + } + + broadcast(msg: HMRMessage) { + const json = JSON.stringify(msg); + for (let ws of this.wss.clients) { + ws.send(json); + } + } +} + +function getSpecifier(dep: Dependency): string { + if (typeof dep.meta.placeholder === 'string') { + return dep.meta.placeholder; + } + + return dep.specifier; +} diff --git a/node_modules/@parcel/reporter-dev-server/src/Server.js b/node_modules/@parcel/reporter-dev-server/src/Server.js new file mode 100644 index 00000000..ba0b5212 --- /dev/null +++ b/node_modules/@parcel/reporter-dev-server/src/Server.js @@ -0,0 +1,544 @@ +// @flow + +import type {DevServerOptions, Request, Response} from './types.js.flow'; +import type { + BuildSuccessEvent, + BundleGraph, + FilePath, + PluginOptions, + PackagedBundle, +} from '@parcel/types'; +import type {Diagnostic} from '@parcel/diagnostic'; +import type {FileSystem} from '@parcel/fs'; +import type {HTTPServer, FormattedCodeFrame} from '@parcel/utils'; + +import invariant from 'assert'; +import path from 'path'; +import url from 'url'; +import { + ansiHtml, + createHTTPServer, + resolveConfig, + readConfig, + prettyDiagnostic, + relativePath, +} from '@parcel/utils'; +import serverErrors from './serverErrors'; +import fs from 'fs'; +import ejs from 'ejs'; +import connect from 'connect'; +import serveHandler from 'serve-handler'; +import {createProxyMiddleware} from 'http-proxy-middleware'; +import {URL, URLSearchParams} from 'url'; +import launchEditor from 'launch-editor'; +import fresh from 'fresh'; + +export function setHeaders(res: Response) { + res.setHeader('Access-Control-Allow-Origin', '*'); + res.setHeader( + 'Access-Control-Allow-Methods', + 'GET, HEAD, PUT, PATCH, POST, DELETE', + ); + res.setHeader( + 'Access-Control-Allow-Headers', + 'Origin, X-Requested-With, Content-Type, Accept, Content-Type', + ); + res.setHeader('Cache-Control', 'max-age=0, must-revalidate'); +} + +const SLASH_REGEX = /\//g; + +export const SOURCES_ENDPOINT = '/__parcel_source_root'; +const EDITOR_ENDPOINT = '/__parcel_launch_editor'; +const TEMPLATE_404 = fs.readFileSync( + path.join(__dirname, 'templates/404.html'), + 'utf8', +); + +const TEMPLATE_500 = fs.readFileSync( + path.join(__dirname, 'templates/500.html'), + 'utf8', +); +type NextFunction = (req: Request, res: Response, next?: (any) => any) => any; + +export default class Server { + pending: boolean; + pendingRequests: Array<[Request, Response]>; + middleware: Array<(req: Request, res: Response) => boolean>; + options: DevServerOptions; + rootPath: string; + bundleGraph: BundleGraph | null; + requestBundle: ?(bundle: PackagedBundle) => Promise; + errors: Array<{| + message: string, + stack: ?string, + frames: Array, + hints: Array, + documentation: string, + |}> | null; + stopServer: ?() => Promise; + + constructor(options: DevServerOptions) { + this.options = options; + try { + this.rootPath = new URL(options.publicUrl).pathname; + } catch (e) { + this.rootPath = options.publicUrl; + } + this.pending = true; + this.pendingRequests = []; + this.middleware = []; + this.bundleGraph = null; + this.requestBundle = null; + this.errors = null; + } + + buildStart() { + this.pending = true; + } + + buildSuccess( + bundleGraph: BundleGraph, + requestBundle: (bundle: PackagedBundle) => Promise, + ) { + this.bundleGraph = bundleGraph; + this.requestBundle = requestBundle; + this.errors = null; + this.pending = false; + + if (this.pendingRequests.length > 0) { + let pendingRequests = this.pendingRequests; + this.pendingRequests = []; + for (let [req, res] of pendingRequests) { + this.respond(req, res); + } + } + } + + async buildError(options: PluginOptions, diagnostics: Array) { + this.pending = false; + this.errors = await Promise.all( + diagnostics.map(async d => { + let ansiDiagnostic = await prettyDiagnostic(d, options); + + return { + message: ansiHtml(ansiDiagnostic.message), + stack: ansiDiagnostic.stack ? ansiHtml(ansiDiagnostic.stack) : null, + frames: ansiDiagnostic.frames.map(f => ({ + location: f.location, + code: ansiHtml(f.code), + })), + hints: ansiDiagnostic.hints.map(hint => ansiHtml(hint)), + documentation: d.documentationURL ?? '', + }; + }), + ); + } + + respond(req: Request, res: Response): mixed { + if (this.middleware.some(handler => handler(req, res))) return; + let {pathname, search} = url.parse(req.originalUrl || req.url); + if (pathname == null) { + pathname = '/'; + } + + if (pathname.startsWith(EDITOR_ENDPOINT) && search) { + let query = new URLSearchParams(search); + let file = query.get('file'); + if (file) { + // File location might start with /__parcel_source_root if it came from a source map. + if (file.startsWith(SOURCES_ENDPOINT)) { + file = file.slice(SOURCES_ENDPOINT.length + 1); + } + launchEditor(file); + } + res.end(); + } else if (this.errors) { + return this.send500(req, res); + } else if (path.extname(pathname) === '') { + // If the URL doesn't start with the public path, or the URL doesn't + // have a file extension, send the main HTML bundle. + return this.sendIndex(req, res); + } else if (pathname.startsWith(SOURCES_ENDPOINT)) { + req.url = pathname.slice(SOURCES_ENDPOINT.length); + return this.serve( + this.options.inputFS, + this.options.projectRoot, + req, + res, + () => this.send404(req, res), + ); + } else if (pathname.startsWith(this.rootPath)) { + // Otherwise, serve the file from the dist folder + req.url = + this.rootPath === '/' ? pathname : pathname.slice(this.rootPath.length); + if (req.url[0] !== '/') { + req.url = '/' + req.url; + } + return this.serveBundle(req, res, () => this.sendIndex(req, res)); + } else { + return this.send404(req, res); + } + } + + sendIndex(req: Request, res: Response) { + if (this.bundleGraph) { + // If the main asset is an HTML file, serve it + let htmlBundleFilePaths = this.bundleGraph + .getBundles() + .filter(bundle => path.posix.extname(bundle.name) === '.html') + .map(bundle => { + return `/${relativePath( + this.options.distDir, + bundle.filePath, + false, + )}`; + }); + + let indexFilePath = null; + let {pathname: reqURL} = url.parse(req.originalUrl || req.url); + + if (!reqURL) { + reqURL = '/'; + } + + if (htmlBundleFilePaths.length === 1) { + indexFilePath = htmlBundleFilePaths[0]; + } else { + let bestMatch = null; + for (let bundle of htmlBundleFilePaths) { + let bundleDir = path.posix.dirname(bundle); + let bundleDirSubdir = bundleDir === '/' ? bundleDir : bundleDir + '/'; + let withoutExtension = path.posix.basename( + bundle, + path.posix.extname(bundle), + ); + let isIndex = withoutExtension === 'index'; + + let matchesIsIndex = null; + if ( + isIndex && + (reqURL.startsWith(bundleDirSubdir) || reqURL === bundleDir) + ) { + // bundle is /bar/index.html and (/bar or something inside of /bar/** was requested was requested) + matchesIsIndex = true; + } else if (reqURL == path.posix.join(bundleDir, withoutExtension)) { + // bundle is /bar/foo.html and /bar/foo was requested + matchesIsIndex = false; + } + if (matchesIsIndex != null) { + let depth = bundle.match(SLASH_REGEX)?.length ?? 0; + if ( + bestMatch == null || + // This one is more specific (deeper) + bestMatch.depth < depth || + // This one is just as deep, but the bundle name matches and not just index.html + (bestMatch.depth === depth && bestMatch.isIndex) + ) { + bestMatch = {bundle, depth, isIndex: matchesIsIndex}; + } + } + } + indexFilePath = bestMatch?.['bundle'] ?? htmlBundleFilePaths[0]; + } + + if (indexFilePath) { + req.url = indexFilePath; + this.serveBundle(req, res, () => this.send404(req, res)); + } else { + this.send404(req, res); + } + } else { + this.send404(req, res); + } + } + + async serveBundle( + req: Request, + res: Response, + next: NextFunction, + ): Promise { + let bundleGraph = this.bundleGraph; + if (bundleGraph) { + let {pathname} = url.parse(req.url); + if (!pathname) { + this.send500(req, res); + return; + } + + let requestedPath = path.normalize(pathname.slice(1)); + let bundle = bundleGraph + .getBundles() + .find( + b => + path.relative(this.options.distDir, b.filePath) === requestedPath, + ); + if (!bundle) { + this.serveDist(req, res, next); + return; + } + + invariant(this.requestBundle != null); + try { + await this.requestBundle(bundle); + } catch (err) { + this.send500(req, res); + return; + } + + this.serveDist(req, res, next); + } else { + this.send404(req, res); + } + } + + serveDist( + req: Request, + res: Response, + next: NextFunction, + ): Promise | Promise { + return this.serve( + this.options.outputFS, + this.options.distDir, + req, + res, + next, + ); + } + + async serve( + fs: FileSystem, + root: FilePath, + req: Request, + res: Response, + next: NextFunction, + ): Promise { + if (req.method !== 'GET' && req.method !== 'HEAD') { + // method not allowed + res.statusCode = 405; + res.setHeader('Allow', 'GET, HEAD'); + res.setHeader('Content-Length', '0'); + res.end(); + return; + } + + try { + var filePath = url.parse(req.url).pathname || ''; + filePath = decodeURIComponent(filePath); + } catch (err) { + return this.sendError(res, 400); + } + + filePath = path.normalize('.' + path.sep + filePath); + + // malicious path + if (filePath.includes(path.sep + '..' + path.sep)) { + return this.sendError(res, 403); + } + + // join / normalize from the root dir + if (!path.isAbsolute(filePath)) { + filePath = path.normalize(path.join(root, filePath)); + } + + try { + var stat = await fs.stat(filePath); + } catch (err) { + if (err.code === 'ENOENT') { + return next(req, res); + } + + return this.sendError(res, 500); + } + + // Fall back to next handler if not a file + if (!stat || !stat.isFile()) { + return next(req, res); + } + + if (fresh(req.headers, {'last-modified': stat.mtime.toUTCString()})) { + res.statusCode = 304; + res.end(); + return; + } + + return serveHandler( + req, + res, + { + public: root, + cleanUrls: false, + }, + { + lstat: path => fs.stat(path), + realpath: path => fs.realpath(path), + createReadStream: (path, options) => fs.createReadStream(path, options), + readdir: path => fs.readdir(path), + }, + ); + } + + sendError(res: Response, statusCode: number) { + res.statusCode = statusCode; + res.end(); + } + + send404(req: Request, res: Response) { + res.statusCode = 404; + res.end(TEMPLATE_404); + } + + send500(req: Request, res: Response): void | Response { + res.setHeader('Content-Type', 'text/html; charset=utf-8'); + res.writeHead(500); + + if (this.errors) { + return res.end( + ejs.render(TEMPLATE_500, { + errors: this.errors, + hmrOptions: this.options.hmrOptions, + }), + ); + } + } + + logAccessIfVerbose(req: Request) { + this.options.logger.verbose({ + message: `Request: ${req.headers.host}${req.originalUrl || req.url}`, + }); + } + + /** + * Load proxy table from package.json and apply them. + */ + async applyProxyTable(app: any): Promise { + // avoid skipping project root + const fileInRoot: string = path.join(this.options.projectRoot, 'index'); + + const configFilePath = await resolveConfig( + this.options.inputFS, + fileInRoot, + [ + '.proxyrc.cts', + '.proxyrc.mts', + '.proxyrc.ts', + '.proxyrc.cjs', + '.proxyrc.mjs', + '.proxyrc.js', + '.proxyrc', + '.proxyrc.json', + ], + this.options.projectRoot, + ); + + if (!configFilePath) { + return this; + } + + const filename = path.basename(configFilePath); + + if (filename === '.proxyrc' || filename === '.proxyrc.json') { + let conf = await readConfig(this.options.inputFS, configFilePath); + if (!conf) { + return this; + } + let cfg = conf.config; + if (typeof cfg !== 'object') { + this.options.logger.warn({ + message: + "Proxy table in '.proxyrc' should be of object type. Skipping...", + }); + return this; + } + for (const [context, options] of Object.entries(cfg)) { + // each key is interpreted as context, and value as middleware options + app.use(createProxyMiddleware(context, options)); + } + } else { + let cfg = await this.options.packageManager.require( + configFilePath, + fileInRoot, + ); + if ( + // $FlowFixMe + Object.prototype.toString.call(cfg) === '[object Module]' + ) { + cfg = cfg.default; + } + + if (typeof cfg !== 'function') { + this.options.logger.warn({ + message: `Proxy configuration file '${filename}' should export a function. Skipping...`, + }); + return this; + } + cfg(app); + } + + return this; + } + + async start(): Promise { + const finalHandler = (req: Request, res: Response) => { + this.logAccessIfVerbose(req); + + // Wait for the parcelInstance to finish bundling if needed + if (this.pending) { + this.pendingRequests.push([req, res]); + } else { + this.respond(req, res); + } + }; + + const app = connect(); + app.use((req, res, next) => { + setHeaders(res); + next(); + }); + + app.use((req, res, next) => { + if (req.url === '/__parcel_healthcheck') { + res.statusCode = 200; + res.write(`${Date.now()}`); + res.end(); + } else { + next(); + } + }); + + await this.applyProxyTable(app); + app.use(finalHandler); + + let {server, stop} = await createHTTPServer({ + cacheDir: this.options.cacheDir, + https: this.options.https, + inputFS: this.options.inputFS, + listener: app, + outputFS: this.options.outputFS, + host: this.options.host, + }); + this.stopServer = stop; + + server.listen(this.options.port, this.options.host); + return new Promise((resolve, reject) => { + server.once('error', err => { + this.options.logger.error( + ({ + message: serverErrors(err, this.options.port), + }: Diagnostic), + ); + reject(err); + }); + + server.once('listening', () => { + resolve(server); + }); + }); + } + + async stop(): Promise { + invariant(this.stopServer != null); + await this.stopServer(); + this.stopServer = null; + } +} diff --git a/node_modules/@parcel/reporter-dev-server/src/ServerReporter.js b/node_modules/@parcel/reporter-dev-server/src/ServerReporter.js new file mode 100644 index 00000000..b73e027d --- /dev/null +++ b/node_modules/@parcel/reporter-dev-server/src/ServerReporter.js @@ -0,0 +1,143 @@ +// @flow + +import {Reporter} from '@parcel/plugin'; +import HMRServer from './HMRServer'; +import Server from './Server'; + +let servers: Map = new Map(); +let hmrServers: Map = new Map(); +export default (new Reporter({ + async report({event, options, logger}) { + let {serveOptions, hmrOptions} = options; + let server = serveOptions ? servers.get(serveOptions.port) : undefined; + let hmrPort = + (hmrOptions && hmrOptions.port) || (serveOptions && serveOptions.port); + let hmrServer = hmrPort ? hmrServers.get(hmrPort) : undefined; + switch (event.type) { + case 'watchStart': { + if (serveOptions) { + // If there's already a server when watching has just started, something + // is wrong. + if (server) { + return logger.warn({ + message: 'Trying to create the devserver but it already exists.', + }); + } + + let serverOptions = { + ...serveOptions, + projectRoot: options.projectRoot, + cacheDir: options.cacheDir, + // Override the target's publicUrl as that is likely meant for production. + // This could be configurable in the future. + publicUrl: serveOptions.publicUrl ?? '/', + inputFS: options.inputFS, + outputFS: options.outputFS, + packageManager: options.packageManager, + logger, + hmrOptions, + }; + + server = new Server(serverOptions); + servers.set(serveOptions.port, server); + const devServer = await server.start(); + + if (hmrOptions && hmrOptions.port === serveOptions.port) { + let hmrServerOptions = { + port: serveOptions.port, + host: hmrOptions.host, + devServer, + addMiddleware: handler => { + server?.middleware.push(handler); + }, + logger, + https: options.serveOptions ? options.serveOptions.https : false, + cacheDir: options.cacheDir, + inputFS: options.inputFS, + outputFS: options.outputFS, + }; + hmrServer = new HMRServer(hmrServerOptions); + hmrServers.set(serveOptions.port, hmrServer); + await hmrServer.start(); + return; + } + } + + let port = hmrOptions?.port; + if (typeof port === 'number') { + let hmrServerOptions = { + port, + host: hmrOptions?.host, + logger, + https: options.serveOptions ? options.serveOptions.https : false, + cacheDir: options.cacheDir, + inputFS: options.inputFS, + outputFS: options.outputFS, + }; + hmrServer = new HMRServer(hmrServerOptions); + hmrServers.set(port, hmrServer); + await hmrServer.start(); + } + break; + } + case 'watchEnd': + if (serveOptions) { + if (!server) { + return logger.warn({ + message: + 'Could not shutdown devserver because it does not exist.', + }); + } + await server.stop(); + servers.delete(server.options.port); + } + if (hmrOptions && hmrServer) { + await hmrServer.stop(); + // $FlowFixMe[prop-missing] + hmrServers.delete(hmrServer.wss.options.port); + } + break; + case 'buildStart': + if (server) { + server.buildStart(); + } + break; + case 'buildProgress': + if ( + event.phase === 'bundled' && + hmrServer && + // Only send HMR updates before packaging if the built in dev server is used to ensure that + // no stale bundles are served. Otherwise emit it for 'buildSuccess'. + options.serveOptions !== false + ) { + await hmrServer.emitUpdate(event); + } + break; + case 'buildSuccess': + if (serveOptions) { + if (!server) { + return logger.warn({ + message: + 'Could not send success event to devserver because it does not exist.', + }); + } + + server.buildSuccess(event.bundleGraph, event.requestBundle); + } + if (hmrServer && options.serveOptions === false) { + await hmrServer.emitUpdate(event); + } + break; + case 'buildFailure': + // On buildFailure watchStart sometimes has not been called yet + // do not throw an additional warning here + if (server) { + await server.buildError(options, event.diagnostics); + } + if (hmrServer) { + await hmrServer.emitError(options, event.diagnostics); + } + break; + } + }, +}): Reporter); diff --git a/node_modules/@parcel/reporter-dev-server/src/serverErrors.js b/node_modules/@parcel/reporter-dev-server/src/serverErrors.js new file mode 100644 index 00000000..05ee4166 --- /dev/null +++ b/node_modules/@parcel/reporter-dev-server/src/serverErrors.js @@ -0,0 +1,21 @@ +// @flow +export type ServerError = Error & {| + code: string, +|}; + +const serverErrorList = { + EACCES: "You don't have access to bind the server to port {port}.", + EADDRINUSE: 'There is already a process listening on port {port}.', +}; + +export default function serverErrors(err: ServerError, port: number): string { + let desc = `Error: ${ + err.code + } occurred while setting up server on port ${port.toString()}.`; + + if (serverErrorList[err.code]) { + desc = serverErrorList[err.code].replace(/{port}/g, port); + } + + return desc; +} diff --git a/node_modules/@parcel/reporter-dev-server/src/templates/404.html b/node_modules/@parcel/reporter-dev-server/src/templates/404.html new file mode 100644 index 00000000..04be2217 --- /dev/null +++ b/node_modules/@parcel/reporter-dev-server/src/templates/404.html @@ -0,0 +1,34 @@ + + + + + + + Page not found + + + +

404

+

Page not found.

+ + diff --git a/node_modules/@parcel/reporter-dev-server/src/templates/500.html b/node_modules/@parcel/reporter-dev-server/src/templates/500.html new file mode 100644 index 00000000..ea7df0c3 --- /dev/null +++ b/node_modules/@parcel/reporter-dev-server/src/templates/500.html @@ -0,0 +1,115 @@ + + + + + + + 🚨 Build Error + + + +

🚨 Parcel encountered errors

+ <% errors.forEach(function(error){ %> +

<%- error.message %>

+ +
<% if (error.frames?.length) { %><% error.frames.forEach(function(frame){ %><%- frame.location %> +<%- frame.code %><% }); %><% } else { %><%- error.stack %><% } %>
+
    + <% error.hints.forEach(function(hint){ %> +
  • <%- hint %>
  • + <% }); %> +
+ <% if (error.documentation) { %> + + <% } %> + <% }); %> + <% if (hmrOptions) { %> + + <% } %> + + diff --git a/node_modules/@parcel/reporter-dev-server/src/types.js.flow b/node_modules/@parcel/reporter-dev-server/src/types.js.flow new file mode 100644 index 00000000..d0933f19 --- /dev/null +++ b/node_modules/@parcel/reporter-dev-server/src/types.js.flow @@ -0,0 +1,56 @@ +// @flow +import type { + ServerOptions, + PluginLogger, + HMROptions, + HTTPSOptions, + FilePath, +} from '@parcel/types'; +import type {FileSystem} from '@parcel/fs'; +import type {HTTPServer} from '@parcel/utils'; +import type {PackageManager} from '@parcel/package-manager'; +import { + IncomingMessage as HTTPIncomingMessage, + ServerResponse as HTTPServerResponse, +} from 'http'; +import { + IncomingMessage as HTTPSIncomingMessage, + ServerResponse as HTTPSServerResponse, +} from 'https'; + +interface HTTPRequest extends HTTPIncomingMessage { + originalUrl?: string; +} +interface HTTPSRequest extends HTTPSIncomingMessage { + originalUrl?: string; +} +export type Request = HTTPRequest | HTTPSRequest; +export type Response = HTTPServerResponse | HTTPSServerResponse; +export type DevServerOptions = {| + ...ServerOptions, + projectRoot: string, + publicUrl: string, + cacheDir: string, + inputFS: FileSystem, + outputFS: FileSystem, + logger: PluginLogger, + hmrOptions: ?HMROptions, + packageManager: PackageManager, +|}; + +// TODO: Figure out if there is a node.js type that could be imported with a complete ServerError +export type ServerError = Error & {| + code: string, +|}; + +export type HMRServerOptions = {| + devServer?: HTTPServer, + addMiddleware?: (handler: (req: Request, res: Response) => boolean) => void, + port: number, + host: ?string, + logger: PluginLogger, + https?: HTTPSOptions | boolean, + cacheDir: FilePath, + inputFS: FileSystem, + outputFS: FileSystem, +|}; diff --git a/node_modules/@parcel/reporter-tracer/LICENSE b/node_modules/@parcel/reporter-tracer/LICENSE new file mode 100644 index 00000000..7fb9bc95 --- /dev/null +++ b/node_modules/@parcel/reporter-tracer/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017-present Devon Govett + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/@parcel/reporter-tracer/lib/TracerReporter.js b/node_modules/@parcel/reporter-tracer/lib/TracerReporter.js new file mode 100644 index 00000000..94ed9c75 --- /dev/null +++ b/node_modules/@parcel/reporter-tracer/lib/TracerReporter.js @@ -0,0 +1,112 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +function _assert() { + const data = _interopRequireDefault(require("assert")); + _assert = function () { + return data; + }; + return data; +} +function _nullthrows() { + const data = _interopRequireDefault(require("nullthrows")); + _nullthrows = function () { + return data; + }; + return data; +} +function _path() { + const data = _interopRequireDefault(require("path")); + _path = function () { + return data; + }; + return data; +} +function _plugin() { + const data = require("@parcel/plugin"); + _plugin = function () { + return data; + }; + return data; +} +function _chromeTraceEvent() { + const data = require("chrome-trace-event"); + _chromeTraceEvent = function () { + return data; + }; + return data; +} +function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } +// We need to maintain some state here to ensure we write to the same output, there should only be one +// instance of this reporter (this gets asserted below) +let tracer; +let writeStream = null; +function millisecondsToMicroseconds(milliseconds) { + return Math.floor(milliseconds * 1000); +} + +// TODO: extract this to utils as it's also used in packages/core/workers/src/WorkerFarm.js +function getTimeId() { + let now = new Date(); + return String(now.getFullYear()) + String(now.getMonth() + 1).padStart(2, '0') + String(now.getDate()).padStart(2, '0') + '-' + String(now.getHours()).padStart(2, '0') + String(now.getMinutes()).padStart(2, '0') + String(now.getSeconds()).padStart(2, '0'); +} +var _default = exports.default = new (_plugin().Reporter)({ + report({ + event, + options, + logger + }) { + let filename; + let filePath; + switch (event.type) { + case 'buildStart': + (0, _assert().default)(tracer == null, 'Tracer multiple initialisation'); + tracer = new (_chromeTraceEvent().Tracer)(); + filename = `parcel-trace-${getTimeId()}.json`; + filePath = _path().default.join(options.projectRoot, filename); + (0, _assert().default)(writeStream == null, 'Trace write stream multiple initialisation'); + logger.info({ + message: `Writing trace to ${filename}. See https://parceljs.org/features/profiling/#analysing-traces for more information on working with traces.` + }); + writeStream = options.outputFS.createWriteStream(filePath); + (0, _nullthrows().default)(tracer).pipe((0, _nullthrows().default)(writeStream)); + break; + case 'trace': + // Due to potential race conditions at the end of the build, we ignore any trace events that occur + // after we've closed the write stream. + if (tracer === null) return; + tracer.completeEvent({ + name: event.name, + cat: event.categories, + args: event.args, + ts: millisecondsToMicroseconds(event.ts), + dur: millisecondsToMicroseconds(event.duration), + tid: event.tid, + pid: event.pid + }); + break; + case 'buildSuccess': + case 'buildFailure': + (0, _nullthrows().default)(tracer).flush(); + tracer = null; + // We explicitly trigger `end` on the writeStream for the trace, then we need to wait for + // the `close` event before resolving the promise this report function returns to ensure + // that the file has been properly closed and moved from it's temp location before Parcel + // shuts down. + return new Promise((resolve, reject) => { + (0, _nullthrows().default)(writeStream).once('close', err => { + writeStream = null; + if (err) { + reject(err); + } else { + resolve(); + } + }); + (0, _nullthrows().default)(writeStream).end(); + }); + } + } +}); \ No newline at end of file diff --git a/node_modules/@parcel/reporter-tracer/package.json b/node_modules/@parcel/reporter-tracer/package.json new file mode 100644 index 00000000..b8ce0bec --- /dev/null +++ b/node_modules/@parcel/reporter-tracer/package.json @@ -0,0 +1,29 @@ +{ + "name": "@parcel/reporter-tracer", + "version": "2.13.3", + "license": "MIT", + "publishConfig": { + "access": "public" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "repository": { + "type": "git", + "url": "https://github.com/parcel-bundler/parcel.git" + }, + "main": "lib/TracerReporter.js", + "source": "src/TracerReporter.js", + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.13.3" + }, + "dependencies": { + "@parcel/plugin": "2.13.3", + "@parcel/utils": "2.13.3", + "chrome-trace-event": "^1.0.3", + "nullthrows": "^1.1.1" + }, + "gitHead": "d19b1f6bdb05eb5a3085f44daae15c0fe2709ab9" +} diff --git a/node_modules/@parcel/reporter-tracer/src/TracerReporter.js b/node_modules/@parcel/reporter-tracer/src/TracerReporter.js new file mode 100644 index 00000000..5a5b0023 --- /dev/null +++ b/node_modules/@parcel/reporter-tracer/src/TracerReporter.js @@ -0,0 +1,87 @@ +// @flow +import invariant from 'assert'; +import nullthrows from 'nullthrows'; +import path from 'path'; +import {Reporter} from '@parcel/plugin'; +import {Tracer} from 'chrome-trace-event'; + +// We need to maintain some state here to ensure we write to the same output, there should only be one +// instance of this reporter (this gets asserted below) +let tracer; +let writeStream = null; + +function millisecondsToMicroseconds(milliseconds: number) { + return Math.floor(milliseconds * 1000); +} + +// TODO: extract this to utils as it's also used in packages/core/workers/src/WorkerFarm.js +function getTimeId() { + let now = new Date(); + return ( + String(now.getFullYear()) + + String(now.getMonth() + 1).padStart(2, '0') + + String(now.getDate()).padStart(2, '0') + + '-' + + String(now.getHours()).padStart(2, '0') + + String(now.getMinutes()).padStart(2, '0') + + String(now.getSeconds()).padStart(2, '0') + ); +} + +export default (new Reporter({ + report({event, options, logger}) { + let filename; + let filePath; + switch (event.type) { + case 'buildStart': + invariant(tracer == null, 'Tracer multiple initialisation'); + tracer = new Tracer(); + filename = `parcel-trace-${getTimeId()}.json`; + filePath = path.join(options.projectRoot, filename); + invariant( + writeStream == null, + 'Trace write stream multiple initialisation', + ); + logger.info({ + message: `Writing trace to ${filename}. See https://parceljs.org/features/profiling/#analysing-traces for more information on working with traces.`, + }); + writeStream = options.outputFS.createWriteStream(filePath); + nullthrows(tracer).pipe(nullthrows(writeStream)); + break; + case 'trace': + // Due to potential race conditions at the end of the build, we ignore any trace events that occur + // after we've closed the write stream. + if (tracer === null) return; + + tracer.completeEvent({ + name: event.name, + cat: event.categories, + args: event.args, + ts: millisecondsToMicroseconds(event.ts), + dur: millisecondsToMicroseconds(event.duration), + tid: event.tid, + pid: event.pid, + }); + break; + case 'buildSuccess': + case 'buildFailure': + nullthrows(tracer).flush(); + tracer = null; + // We explicitly trigger `end` on the writeStream for the trace, then we need to wait for + // the `close` event before resolving the promise this report function returns to ensure + // that the file has been properly closed and moved from it's temp location before Parcel + // shuts down. + return new Promise((resolve, reject) => { + nullthrows(writeStream).once('close', err => { + writeStream = null; + if (err) { + reject(err); + } else { + resolve(); + } + }); + nullthrows(writeStream).end(); + }); + } + }, +}): Reporter); diff --git a/node_modules/@parcel/resolver-default/LICENSE b/node_modules/@parcel/resolver-default/LICENSE new file mode 100644 index 00000000..7fb9bc95 --- /dev/null +++ b/node_modules/@parcel/resolver-default/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017-present Devon Govett + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/@parcel/resolver-default/lib/DefaultResolver.js b/node_modules/@parcel/resolver-default/lib/DefaultResolver.js new file mode 100644 index 00000000..92901035 --- /dev/null +++ b/node_modules/@parcel/resolver-default/lib/DefaultResolver.js @@ -0,0 +1,64 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +function _plugin() { + const data = require("@parcel/plugin"); + _plugin = function () { + return data; + }; + return data; +} +function _nodeResolverCore() { + const data = _interopRequireDefault(require("@parcel/node-resolver-core")); + _nodeResolverCore = function () { + return data; + }; + return data; +} +function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } +// Throw user friendly errors on special webpack loader syntax +// ex. `imports-loader?$=jquery!./example.js` +const WEBPACK_IMPORT_REGEX = /^\w+-loader(?:\?\S*)?!/; +var _default = exports.default = new (_plugin().Resolver)({ + async loadConfig({ + config, + options, + logger + }) { + var _conf$contents; + let conf = await config.getConfig([], { + packageKey: '@parcel/resolver-default' + }); + return new (_nodeResolverCore().default)({ + fs: options.inputFS, + projectRoot: options.projectRoot, + packageManager: options.packageManager, + shouldAutoInstall: options.shouldAutoInstall, + mode: options.mode, + logger, + packageExports: (conf === null || conf === void 0 || (_conf$contents = conf.contents) === null || _conf$contents === void 0 ? void 0 : _conf$contents.packageExports) ?? false + }); + }, + resolve({ + dependency, + specifier, + config: resolver + }) { + if (WEBPACK_IMPORT_REGEX.test(dependency.specifier)) { + throw new Error(`The import path: ${dependency.specifier} is using webpack specific loader import syntax, which isn't supported by Parcel.`); + } + return resolver.resolve({ + filename: specifier, + specifierType: dependency.specifierType, + range: dependency.range, + parent: dependency.resolveFrom, + env: dependency.env, + sourcePath: dependency.sourcePath, + loc: dependency.loc, + packageConditions: dependency.packageConditions + }); + } +}); \ No newline at end of file diff --git a/node_modules/@parcel/resolver-default/package.json b/node_modules/@parcel/resolver-default/package.json new file mode 100644 index 00000000..22d7bb9d --- /dev/null +++ b/node_modules/@parcel/resolver-default/package.json @@ -0,0 +1,30 @@ +{ + "name": "@parcel/resolver-default", + "version": "2.13.3", + "license": "MIT", + "publishConfig": { + "access": "public" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "repository": { + "type": "git", + "url": "https://github.com/parcel-bundler/parcel.git" + }, + "main": "lib/DefaultResolver.js", + "source": "src/DefaultResolver.js", + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.13.3" + }, + "dependencies": { + "@parcel/node-resolver-core": "3.4.3", + "@parcel/plugin": "2.13.3" + }, + "devDependencies": { + "@babel/core": "^7.22.11" + }, + "gitHead": "d19b1f6bdb05eb5a3085f44daae15c0fe2709ab9" +} diff --git a/node_modules/@parcel/resolver-default/src/DefaultResolver.js b/node_modules/@parcel/resolver-default/src/DefaultResolver.js new file mode 100644 index 00000000..cbd2ff1a --- /dev/null +++ b/node_modules/@parcel/resolver-default/src/DefaultResolver.js @@ -0,0 +1,44 @@ +// @flow + +import {Resolver} from '@parcel/plugin'; +import NodeResolver from '@parcel/node-resolver-core'; + +// Throw user friendly errors on special webpack loader syntax +// ex. `imports-loader?$=jquery!./example.js` +const WEBPACK_IMPORT_REGEX = /^\w+-loader(?:\?\S*)?!/; + +export default (new Resolver({ + async loadConfig({config, options, logger}) { + let conf = await config.getConfig([], { + packageKey: '@parcel/resolver-default', + }); + + return new NodeResolver({ + fs: options.inputFS, + projectRoot: options.projectRoot, + packageManager: options.packageManager, + shouldAutoInstall: options.shouldAutoInstall, + mode: options.mode, + logger, + packageExports: conf?.contents?.packageExports ?? false, + }); + }, + resolve({dependency, specifier, config: resolver}) { + if (WEBPACK_IMPORT_REGEX.test(dependency.specifier)) { + throw new Error( + `The import path: ${dependency.specifier} is using webpack specific loader import syntax, which isn't supported by Parcel.`, + ); + } + + return resolver.resolve({ + filename: specifier, + specifierType: dependency.specifierType, + range: dependency.range, + parent: dependency.resolveFrom, + env: dependency.env, + sourcePath: dependency.sourcePath, + loc: dependency.loc, + packageConditions: dependency.packageConditions, + }); + }, +}): Resolver); diff --git a/node_modules/@parcel/runtime-browser-hmr/LICENSE b/node_modules/@parcel/runtime-browser-hmr/LICENSE new file mode 100644 index 00000000..7fb9bc95 --- /dev/null +++ b/node_modules/@parcel/runtime-browser-hmr/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017-present Devon Govett + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/@parcel/runtime-browser-hmr/lib/HMRRuntime.js b/node_modules/@parcel/runtime-browser-hmr/lib/HMRRuntime.js new file mode 100644 index 00000000..c39b44fd --- /dev/null +++ b/node_modules/@parcel/runtime-browser-hmr/lib/HMRRuntime.js @@ -0,0 +1,62 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +function _plugin() { + const data = require("@parcel/plugin"); + _plugin = function () { + return data; + }; + return data; +} +function _fs() { + const data = _interopRequireDefault(require("fs")); + _fs = function () { + return data; + }; + return data; +} +function _path() { + const data = _interopRequireDefault(require("path")); + _path = function () { + return data; + }; + return data; +} +function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } +// Without this, the hmr-runtime.js is transpiled with the React Refresh swc transform because it +// lives in `/app/packages/runtimes/...` and thus the `config` in the JSTransformer is actually the +// user's package.json, and hmr-runtime.js is transpiled as a JSX asset. +const FILENAME = +// $FlowFixMe +process.env.PARCEL_BUILD_REPL && process.browser ? '/' + __filename : __filename; +const HMR_RUNTIME = _fs().default.readFileSync(_path().default.join(__dirname, './loaders/hmr-runtime.js'), 'utf8'); +var _default = exports.default = new (_plugin().Runtime)({ + apply({ + bundle, + options + }) { + if (bundle.type !== 'js' || !options.hmrOptions || bundle.env.isLibrary || bundle.env.isWorklet() || bundle.env.sourceType === 'script') { + return; + } + const { + host, + port + } = options.hmrOptions; + return { + filePath: FILENAME, + code: `var HMR_HOST = ${JSON.stringify(host != null && host !== '0.0.0.0' ? host : null)};` + `var HMR_PORT = ${JSON.stringify(port != null && ( + // Default to the HTTP port in the browser, only override + // in watch mode or if hmr port != serve port + !options.serveOptions || options.serveOptions.port !== port) ? port : null)};` + `var HMR_SECURE = ${JSON.stringify(!!(options.serveOptions && options.serveOptions.https))};` + `var HMR_ENV_HASH = "${bundle.env.id}";` + `var HMR_USE_SSE = ${ + // $FlowFixMe + JSON.stringify(!!(process.env.PARCEL_BUILD_REPL && process.browser))};` + `module.bundle.HMR_BUNDLE_ID = ${JSON.stringify(bundle.id)};` + HMR_RUNTIME, + isEntry: true, + env: { + sourceType: 'module' + } + }; + } +}); \ No newline at end of file diff --git a/node_modules/@parcel/runtime-browser-hmr/lib/loaders/hmr-runtime.js b/node_modules/@parcel/runtime-browser-hmr/lib/loaders/hmr-runtime.js new file mode 100644 index 00000000..2a736811 --- /dev/null +++ b/node_modules/@parcel/runtime-browser-hmr/lib/loaders/hmr-runtime.js @@ -0,0 +1,517 @@ +"use strict"; + +/* global HMR_HOST, HMR_PORT, HMR_ENV_HASH, HMR_SECURE, HMR_USE_SSE, chrome, browser, __parcel__import__, __parcel__importScripts__, ServiceWorkerGlobalScope */ +/*:: +import type { + HMRAsset, + HMRMessage, +} from '@parcel/reporter-dev-server/src/HMRServer.js'; +interface ParcelRequire { + (string): mixed; + cache: {|[string]: ParcelModule|}; + hotData: {|[string]: mixed|}; + Module: any; + parent: ?ParcelRequire; + isParcelRequire: true; + modules: {|[string]: [Function, {|[string]: string|}]|}; + HMR_BUNDLE_ID: string; + root: ParcelRequire; +} +interface ParcelModule { + hot: {| + data: mixed, + accept(cb: (Function) => void): void, + dispose(cb: (mixed) => void): void, + // accept(deps: Array | string, cb: (Function) => void): void, + // decline(): void, + _acceptCallbacks: Array<(Function) => void>, + _disposeCallbacks: Array<(mixed) => void>, + |}; +} +interface ExtensionContext { + runtime: {| + reload(): void, + getURL(url: string): string; + getManifest(): {manifest_version: number, ...}; + |}; +} +declare var module: {bundle: ParcelRequire, ...}; +declare var HMR_HOST: string; +declare var HMR_PORT: string; +declare var HMR_ENV_HASH: string; +declare var HMR_SECURE: boolean; +declare var HMR_USE_SSE: boolean; +declare var chrome: ExtensionContext; +declare var browser: ExtensionContext; +declare var __parcel__import__: (string) => Promise; +declare var __parcel__importScripts__: (string) => Promise; +declare var globalThis: typeof self; +declare var ServiceWorkerGlobalScope: Object; +*/ +var OVERLAY_ID = '__parcel__error__overlay__'; +var OldModule = module.bundle.Module; +function Module(moduleName) { + OldModule.call(this, moduleName); + this.hot = { + data: module.bundle.hotData[moduleName], + _acceptCallbacks: [], + _disposeCallbacks: [], + accept: function (fn) { + this._acceptCallbacks.push(fn || function () {}); + }, + dispose: function (fn) { + this._disposeCallbacks.push(fn); + } + }; + module.bundle.hotData[moduleName] = undefined; +} +module.bundle.Module = Module; +module.bundle.hotData = {}; +var checkedAssets /*: {|[string]: boolean|} */, disposedAssets /*: {|[string]: boolean|} */, assetsToDispose /*: Array<[ParcelRequire, string]> */, assetsToAccept /*: Array<[ParcelRequire, string]> */; +function getHostname() { + return HMR_HOST || (location.protocol.indexOf('http') === 0 ? location.hostname : 'localhost'); +} +function getPort() { + return HMR_PORT || location.port; +} + +// eslint-disable-next-line no-redeclare +var parent = module.bundle.parent; +if ((!parent || !parent.isParcelRequire) && typeof WebSocket !== 'undefined') { + var hostname = getHostname(); + var port = getPort(); + var protocol = HMR_SECURE || location.protocol == 'https:' && !['localhost', '127.0.0.1', '0.0.0.0'].includes(hostname) ? 'wss' : 'ws'; + var ws; + if (HMR_USE_SSE) { + ws = new EventSource('/__parcel_hmr'); + } else { + try { + ws = new WebSocket(protocol + '://' + hostname + (port ? ':' + port : '') + '/'); + } catch (err) { + if (err.message) { + console.error(err.message); + } + ws = {}; + } + } + + // Web extension context + var extCtx = typeof browser === 'undefined' ? typeof chrome === 'undefined' ? null : chrome : browser; + + // Safari doesn't support sourceURL in error stacks. + // eval may also be disabled via CSP, so do a quick check. + var supportsSourceURL = false; + try { + (0, eval)('throw new Error("test"); //# sourceURL=test.js'); + } catch (err) { + supportsSourceURL = err.stack.includes('test.js'); + } + + // $FlowFixMe + ws.onmessage = async function (event /*: {data: string, ...} */) { + checkedAssets = {} /*: {|[string]: boolean|} */; + disposedAssets = {} /*: {|[string]: boolean|} */; + assetsToAccept = []; + assetsToDispose = []; + var data /*: HMRMessage */ = JSON.parse(event.data); + if (data.type === 'reload') { + fullReload(); + } else if (data.type === 'update') { + // Remove error overlay if there is one + if (typeof document !== 'undefined') { + removeErrorOverlay(); + } + let assets = data.assets.filter(asset => asset.envHash === HMR_ENV_HASH); + + // Handle HMR Update + let handled = assets.every(asset => { + return asset.type === 'css' || asset.type === 'js' && hmrAcceptCheck(module.bundle.root, asset.id, asset.depsByBundle); + }); + if (handled) { + console.clear(); + + // Dispatch custom event so other runtimes (e.g React Refresh) are aware. + if (typeof window !== 'undefined' && typeof CustomEvent !== 'undefined') { + window.dispatchEvent(new CustomEvent('parcelhmraccept')); + } + await hmrApplyUpdates(assets); + hmrDisposeQueue(); + + // Run accept callbacks. This will also re-execute other disposed assets in topological order. + let processedAssets = {}; + for (let i = 0; i < assetsToAccept.length; i++) { + let id = assetsToAccept[i][1]; + if (!processedAssets[id]) { + hmrAccept(assetsToAccept[i][0], id); + processedAssets[id] = true; + } + } + } else fullReload(); + } + if (data.type === 'error') { + // Log parcel errors to console + for (let ansiDiagnostic of data.diagnostics.ansi) { + let stack = ansiDiagnostic.codeframe ? ansiDiagnostic.codeframe : ansiDiagnostic.stack; + console.error('🚨 [parcel]: ' + ansiDiagnostic.message + '\n' + stack + '\n\n' + ansiDiagnostic.hints.join('\n')); + } + if (typeof document !== 'undefined') { + // Render the fancy html overlay + removeErrorOverlay(); + var overlay = createErrorOverlay(data.diagnostics.html); + // $FlowFixMe + document.body.appendChild(overlay); + } + } + }; + if (ws instanceof WebSocket) { + ws.onerror = function (e) { + if (e.message) { + console.error(e.message); + } + }; + ws.onclose = function () { + console.warn('[parcel] 🚨 Connection to the HMR server was lost'); + }; + } +} +function removeErrorOverlay() { + var overlay = document.getElementById(OVERLAY_ID); + if (overlay) { + overlay.remove(); + console.log('[parcel] ✨ Error resolved'); + } +} +function createErrorOverlay(diagnostics) { + var overlay = document.createElement('div'); + overlay.id = OVERLAY_ID; + let errorHTML = '
'; + for (let diagnostic of diagnostics) { + let stack = diagnostic.frames.length ? diagnostic.frames.reduce((p, frame) => { + return `${p} +${frame.location} +${frame.code}`; + }, '') : diagnostic.stack; + errorHTML += ` +
+
+ 🚨 ${diagnostic.message} +
+
${stack}
+
+ ${diagnostic.hints.map(hint => '
💡 ' + hint + '
').join('')} +
+ ${diagnostic.documentation ? `` : ''} +
+ `; + } + errorHTML += '
'; + overlay.innerHTML = errorHTML; + return overlay; +} +function fullReload() { + if ('reload' in location) { + location.reload(); + } else if (extCtx && extCtx.runtime && extCtx.runtime.reload) { + extCtx.runtime.reload(); + } +} +function getParents(bundle, id) /*: Array<[ParcelRequire, string]> */{ + var modules = bundle.modules; + if (!modules) { + return []; + } + var parents = []; + var k, d, dep; + for (k in modules) { + for (d in modules[k][1]) { + dep = modules[k][1][d]; + if (dep === id || Array.isArray(dep) && dep[dep.length - 1] === id) { + parents.push([bundle, k]); + } + } + } + if (bundle.parent) { + parents = parents.concat(getParents(bundle.parent, id)); + } + return parents; +} +function updateLink(link) { + var href = link.getAttribute('href'); + if (!href) { + return; + } + var newLink = link.cloneNode(); + newLink.onload = function () { + if (link.parentNode !== null) { + // $FlowFixMe + link.parentNode.removeChild(link); + } + }; + newLink.setAttribute('href', + // $FlowFixMe + href.split('?')[0] + '?' + Date.now()); + // $FlowFixMe + link.parentNode.insertBefore(newLink, link.nextSibling); +} +var cssTimeout = null; +function reloadCSS() { + if (cssTimeout) { + return; + } + cssTimeout = setTimeout(function () { + var links = document.querySelectorAll('link[rel="stylesheet"]'); + for (var i = 0; i < links.length; i++) { + // $FlowFixMe[incompatible-type] + var href /*: string */ = links[i].getAttribute('href'); + var hostname = getHostname(); + var servedFromHMRServer = hostname === 'localhost' ? new RegExp('^(https?:\\/\\/(0.0.0.0|127.0.0.1)|localhost):' + getPort()).test(href) : href.indexOf(hostname + ':' + getPort()); + var absolute = /^https?:\/\//i.test(href) && href.indexOf(location.origin) !== 0 && !servedFromHMRServer; + if (!absolute) { + updateLink(links[i]); + } + } + cssTimeout = null; + }, 50); +} +function hmrDownload(asset) { + if (asset.type === 'js') { + if (typeof document !== 'undefined') { + let script = document.createElement('script'); + script.src = asset.url + '?t=' + Date.now(); + if (asset.outputFormat === 'esmodule') { + script.type = 'module'; + } + return new Promise((resolve, reject) => { + var _document$head; + script.onload = () => resolve(script); + script.onerror = reject; + (_document$head = document.head) === null || _document$head === void 0 || _document$head.appendChild(script); + }); + } else if (typeof importScripts === 'function') { + // Worker scripts + if (asset.outputFormat === 'esmodule') { + return __parcel__import__(asset.url + '?t=' + Date.now()); + } else { + return new Promise((resolve, reject) => { + try { + __parcel__importScripts__(asset.url + '?t=' + Date.now()); + resolve(); + } catch (err) { + reject(err); + } + }); + } + } + } +} +async function hmrApplyUpdates(assets) { + global.parcelHotUpdate = Object.create(null); + let scriptsToRemove; + try { + // If sourceURL comments aren't supported in eval, we need to load + // the update from the dev server over HTTP so that stack traces + // are correct in errors/logs. This is much slower than eval, so + // we only do it if needed (currently just Safari). + // https://bugs.webkit.org/show_bug.cgi?id=137297 + // This path is also taken if a CSP disallows eval. + if (!supportsSourceURL) { + let promises = assets.map(asset => { + var _hmrDownload; + return (_hmrDownload = hmrDownload(asset)) === null || _hmrDownload === void 0 ? void 0 : _hmrDownload.catch(err => { + // Web extension fix + if (extCtx && extCtx.runtime && extCtx.runtime.getManifest().manifest_version == 3 && typeof ServiceWorkerGlobalScope != 'undefined' && global instanceof ServiceWorkerGlobalScope) { + extCtx.runtime.reload(); + return; + } + throw err; + }); + }); + scriptsToRemove = await Promise.all(promises); + } + assets.forEach(function (asset) { + hmrApply(module.bundle.root, asset); + }); + } finally { + delete global.parcelHotUpdate; + if (scriptsToRemove) { + scriptsToRemove.forEach(script => { + if (script) { + var _document$head2; + (_document$head2 = document.head) === null || _document$head2 === void 0 || _document$head2.removeChild(script); + } + }); + } + } +} +function hmrApply(bundle /*: ParcelRequire */, asset /*: HMRAsset */) { + var modules = bundle.modules; + if (!modules) { + return; + } + if (asset.type === 'css') { + reloadCSS(); + } else if (asset.type === 'js') { + let deps = asset.depsByBundle[bundle.HMR_BUNDLE_ID]; + if (deps) { + if (modules[asset.id]) { + // Remove dependencies that are removed and will become orphaned. + // This is necessary so that if the asset is added back again, the cache is gone, and we prevent a full page reload. + let oldDeps = modules[asset.id][1]; + for (let dep in oldDeps) { + if (!deps[dep] || deps[dep] !== oldDeps[dep]) { + let id = oldDeps[dep]; + let parents = getParents(module.bundle.root, id); + if (parents.length === 1) { + hmrDelete(module.bundle.root, id); + } + } + } + } + if (supportsSourceURL) { + // Global eval. We would use `new Function` here but browser + // support for source maps is better with eval. + (0, eval)(asset.output); + } + + // $FlowFixMe + let fn = global.parcelHotUpdate[asset.id]; + modules[asset.id] = [fn, deps]; + } + + // Always traverse to the parent bundle, even if we already replaced the asset in this bundle. + // This is required in case modules are duplicated. We need to ensure all instances have the updated code. + if (bundle.parent) { + hmrApply(bundle.parent, asset); + } + } +} +function hmrDelete(bundle, id) { + let modules = bundle.modules; + if (!modules) { + return; + } + if (modules[id]) { + // Collect dependencies that will become orphaned when this module is deleted. + let deps = modules[id][1]; + let orphans = []; + for (let dep in deps) { + let parents = getParents(module.bundle.root, deps[dep]); + if (parents.length === 1) { + orphans.push(deps[dep]); + } + } + + // Delete the module. This must be done before deleting dependencies in case of circular dependencies. + delete modules[id]; + delete bundle.cache[id]; + + // Now delete the orphans. + orphans.forEach(id => { + hmrDelete(module.bundle.root, id); + }); + } else if (bundle.parent) { + hmrDelete(bundle.parent, id); + } +} +function hmrAcceptCheck(bundle /*: ParcelRequire */, id /*: string */, depsByBundle /*: ?{ [string]: { [string]: string } }*/) { + if (hmrAcceptCheckOne(bundle, id, depsByBundle)) { + return true; + } + + // Traverse parents breadth first. All possible ancestries must accept the HMR update, or we'll reload. + let parents = getParents(module.bundle.root, id); + let accepted = false; + while (parents.length > 0) { + let v = parents.shift(); + let a = hmrAcceptCheckOne(v[0], v[1], null); + if (a) { + // If this parent accepts, stop traversing upward, but still consider siblings. + accepted = true; + } else { + // Otherwise, queue the parents in the next level upward. + let p = getParents(module.bundle.root, v[1]); + if (p.length === 0) { + // If there are no parents, then we've reached an entry without accepting. Reload. + accepted = false; + break; + } + parents.push(...p); + } + } + return accepted; +} +function hmrAcceptCheckOne(bundle /*: ParcelRequire */, id /*: string */, depsByBundle /*: ?{ [string]: { [string]: string } }*/) { + var modules = bundle.modules; + if (!modules) { + return; + } + if (depsByBundle && !depsByBundle[bundle.HMR_BUNDLE_ID]) { + // If we reached the root bundle without finding where the asset should go, + // there's nothing to do. Mark as "accepted" so we don't reload the page. + if (!bundle.parent) { + return true; + } + return hmrAcceptCheck(bundle.parent, id, depsByBundle); + } + if (checkedAssets[id]) { + return true; + } + checkedAssets[id] = true; + var cached = bundle.cache[id]; + assetsToDispose.push([bundle, id]); + if (!cached || cached.hot && cached.hot._acceptCallbacks.length) { + assetsToAccept.push([bundle, id]); + return true; + } +} +function hmrDisposeQueue() { + // Dispose all old assets. + for (let i = 0; i < assetsToDispose.length; i++) { + let id = assetsToDispose[i][1]; + if (!disposedAssets[id]) { + hmrDispose(assetsToDispose[i][0], id); + disposedAssets[id] = true; + } + } + assetsToDispose = []; +} +function hmrDispose(bundle /*: ParcelRequire */, id /*: string */) { + var cached = bundle.cache[id]; + bundle.hotData[id] = {}; + if (cached && cached.hot) { + cached.hot.data = bundle.hotData[id]; + } + if (cached && cached.hot && cached.hot._disposeCallbacks.length) { + cached.hot._disposeCallbacks.forEach(function (cb) { + cb(bundle.hotData[id]); + }); + } + delete bundle.cache[id]; +} +function hmrAccept(bundle /*: ParcelRequire */, id /*: string */) { + // Execute the module. + bundle(id); + + // Run the accept callbacks in the new version of the module. + var cached = bundle.cache[id]; + if (cached && cached.hot && cached.hot._acceptCallbacks.length) { + let assetsToAlsoAccept = []; + cached.hot._acceptCallbacks.forEach(function (cb) { + let additionalAssets = cb(function () { + return getParents(module.bundle.root, id); + }); + if (Array.isArray(additionalAssets) && additionalAssets.length) { + assetsToAlsoAccept.push(...additionalAssets); + } + }); + if (assetsToAlsoAccept.length) { + let handled = assetsToAlsoAccept.every(function (a) { + return hmrAcceptCheck(a[0], a[1]); + }); + if (!handled) { + return fullReload(); + } + hmrDisposeQueue(); + } + } +} \ No newline at end of file diff --git a/node_modules/@parcel/runtime-browser-hmr/package.json b/node_modules/@parcel/runtime-browser-hmr/package.json new file mode 100644 index 00000000..db6dee53 --- /dev/null +++ b/node_modules/@parcel/runtime-browser-hmr/package.json @@ -0,0 +1,27 @@ +{ + "name": "@parcel/runtime-browser-hmr", + "version": "2.13.3", + "license": "MIT", + "publishConfig": { + "access": "public" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "repository": { + "type": "git", + "url": "https://github.com/parcel-bundler/parcel.git" + }, + "main": "lib/HMRRuntime.js", + "source": "src/HMRRuntime.js", + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.13.3" + }, + "dependencies": { + "@parcel/plugin": "2.13.3", + "@parcel/utils": "2.13.3" + }, + "gitHead": "d19b1f6bdb05eb5a3085f44daae15c0fe2709ab9" +} diff --git a/node_modules/@parcel/runtime-browser-hmr/src/HMRRuntime.js b/node_modules/@parcel/runtime-browser-hmr/src/HMRRuntime.js new file mode 100644 index 00000000..ed6b6d34 --- /dev/null +++ b/node_modules/@parcel/runtime-browser-hmr/src/HMRRuntime.js @@ -0,0 +1,64 @@ +// @flow strict-local + +import {Runtime} from '@parcel/plugin'; +import fs from 'fs'; +import path from 'path'; + +// Without this, the hmr-runtime.js is transpiled with the React Refresh swc transform because it +// lives in `/app/packages/runtimes/...` and thus the `config` in the JSTransformer is actually the +// user's package.json, and hmr-runtime.js is transpiled as a JSX asset. +const FILENAME = + // $FlowFixMe + process.env.PARCEL_BUILD_REPL && process.browser + ? '/' + __filename + : __filename; + +const HMR_RUNTIME = fs.readFileSync( + path.join(__dirname, './loaders/hmr-runtime.js'), + 'utf8', +); + +export default (new Runtime({ + apply({bundle, options}) { + if ( + bundle.type !== 'js' || + !options.hmrOptions || + bundle.env.isLibrary || + bundle.env.isWorklet() || + bundle.env.sourceType === 'script' + ) { + return; + } + + const {host, port} = options.hmrOptions; + return { + filePath: FILENAME, + code: + `var HMR_HOST = ${JSON.stringify( + host != null && host !== '0.0.0.0' ? host : null, + )};` + + `var HMR_PORT = ${JSON.stringify( + port != null && + // Default to the HTTP port in the browser, only override + // in watch mode or if hmr port != serve port + (!options.serveOptions || options.serveOptions.port !== port) + ? port + : null, + )};` + + `var HMR_SECURE = ${JSON.stringify( + !!(options.serveOptions && options.serveOptions.https), + )};` + + `var HMR_ENV_HASH = "${bundle.env.id}";` + + `var HMR_USE_SSE = ${ + // $FlowFixMe + JSON.stringify(!!(process.env.PARCEL_BUILD_REPL && process.browser)) + };` + + `module.bundle.HMR_BUNDLE_ID = ${JSON.stringify(bundle.id)};` + + HMR_RUNTIME, + isEntry: true, + env: { + sourceType: 'module', + }, + }; + }, +}): Runtime); diff --git a/node_modules/@parcel/runtime-browser-hmr/src/loaders/.eslintrc.json b/node_modules/@parcel/runtime-browser-hmr/src/loaders/.eslintrc.json new file mode 100644 index 00000000..3dfbc794 --- /dev/null +++ b/node_modules/@parcel/runtime-browser-hmr/src/loaders/.eslintrc.json @@ -0,0 +1,3 @@ +{ + "extends": "@parcel/eslint-config-browser" +} diff --git a/node_modules/@parcel/runtime-browser-hmr/src/loaders/hmr-runtime.js b/node_modules/@parcel/runtime-browser-hmr/src/loaders/hmr-runtime.js new file mode 100644 index 00000000..78ec83bb --- /dev/null +++ b/node_modules/@parcel/runtime-browser-hmr/src/loaders/hmr-runtime.js @@ -0,0 +1,652 @@ +// @flow +/* global HMR_HOST, HMR_PORT, HMR_ENV_HASH, HMR_SECURE, HMR_USE_SSE, chrome, browser, __parcel__import__, __parcel__importScripts__, ServiceWorkerGlobalScope */ + +/*:: +import type { + HMRAsset, + HMRMessage, +} from '@parcel/reporter-dev-server/src/HMRServer.js'; +interface ParcelRequire { + (string): mixed; + cache: {|[string]: ParcelModule|}; + hotData: {|[string]: mixed|}; + Module: any; + parent: ?ParcelRequire; + isParcelRequire: true; + modules: {|[string]: [Function, {|[string]: string|}]|}; + HMR_BUNDLE_ID: string; + root: ParcelRequire; +} +interface ParcelModule { + hot: {| + data: mixed, + accept(cb: (Function) => void): void, + dispose(cb: (mixed) => void): void, + // accept(deps: Array | string, cb: (Function) => void): void, + // decline(): void, + _acceptCallbacks: Array<(Function) => void>, + _disposeCallbacks: Array<(mixed) => void>, + |}; +} +interface ExtensionContext { + runtime: {| + reload(): void, + getURL(url: string): string; + getManifest(): {manifest_version: number, ...}; + |}; +} +declare var module: {bundle: ParcelRequire, ...}; +declare var HMR_HOST: string; +declare var HMR_PORT: string; +declare var HMR_ENV_HASH: string; +declare var HMR_SECURE: boolean; +declare var HMR_USE_SSE: boolean; +declare var chrome: ExtensionContext; +declare var browser: ExtensionContext; +declare var __parcel__import__: (string) => Promise; +declare var __parcel__importScripts__: (string) => Promise; +declare var globalThis: typeof self; +declare var ServiceWorkerGlobalScope: Object; +*/ + +var OVERLAY_ID = '__parcel__error__overlay__'; + +var OldModule = module.bundle.Module; + +function Module(moduleName) { + OldModule.call(this, moduleName); + this.hot = { + data: module.bundle.hotData[moduleName], + _acceptCallbacks: [], + _disposeCallbacks: [], + accept: function (fn) { + this._acceptCallbacks.push(fn || function () {}); + }, + dispose: function (fn) { + this._disposeCallbacks.push(fn); + }, + }; + module.bundle.hotData[moduleName] = undefined; +} +module.bundle.Module = Module; +module.bundle.hotData = {}; + +var checkedAssets /*: {|[string]: boolean|} */, + disposedAssets /*: {|[string]: boolean|} */, + assetsToDispose /*: Array<[ParcelRequire, string]> */, + assetsToAccept /*: Array<[ParcelRequire, string]> */; + +function getHostname() { + return ( + HMR_HOST || + (location.protocol.indexOf('http') === 0 ? location.hostname : 'localhost') + ); +} + +function getPort() { + return HMR_PORT || location.port; +} + +// eslint-disable-next-line no-redeclare +var parent = module.bundle.parent; +if ((!parent || !parent.isParcelRequire) && typeof WebSocket !== 'undefined') { + var hostname = getHostname(); + var port = getPort(); + var protocol = + HMR_SECURE || + (location.protocol == 'https:' && + !['localhost', '127.0.0.1', '0.0.0.0'].includes(hostname)) + ? 'wss' + : 'ws'; + + var ws; + if (HMR_USE_SSE) { + ws = new EventSource('/__parcel_hmr'); + } else { + try { + ws = new WebSocket( + protocol + '://' + hostname + (port ? ':' + port : '') + '/', + ); + } catch (err) { + if (err.message) { + console.error(err.message); + } + ws = {}; + } + } + + // Web extension context + var extCtx = + typeof browser === 'undefined' + ? typeof chrome === 'undefined' + ? null + : chrome + : browser; + + // Safari doesn't support sourceURL in error stacks. + // eval may also be disabled via CSP, so do a quick check. + var supportsSourceURL = false; + try { + (0, eval)('throw new Error("test"); //# sourceURL=test.js'); + } catch (err) { + supportsSourceURL = err.stack.includes('test.js'); + } + + // $FlowFixMe + ws.onmessage = async function (event /*: {data: string, ...} */) { + checkedAssets = ({} /*: {|[string]: boolean|} */); + disposedAssets = ({} /*: {|[string]: boolean|} */); + assetsToAccept = []; + assetsToDispose = []; + + var data /*: HMRMessage */ = JSON.parse(event.data); + + if (data.type === 'reload') { + fullReload(); + } else if (data.type === 'update') { + // Remove error overlay if there is one + if (typeof document !== 'undefined') { + removeErrorOverlay(); + } + + let assets = data.assets.filter(asset => asset.envHash === HMR_ENV_HASH); + + // Handle HMR Update + let handled = assets.every(asset => { + return ( + asset.type === 'css' || + (asset.type === 'js' && + hmrAcceptCheck(module.bundle.root, asset.id, asset.depsByBundle)) + ); + }); + + if (handled) { + console.clear(); + + // Dispatch custom event so other runtimes (e.g React Refresh) are aware. + if ( + typeof window !== 'undefined' && + typeof CustomEvent !== 'undefined' + ) { + window.dispatchEvent(new CustomEvent('parcelhmraccept')); + } + + await hmrApplyUpdates(assets); + + hmrDisposeQueue(); + + // Run accept callbacks. This will also re-execute other disposed assets in topological order. + let processedAssets = {}; + for (let i = 0; i < assetsToAccept.length; i++) { + let id = assetsToAccept[i][1]; + + if (!processedAssets[id]) { + hmrAccept(assetsToAccept[i][0], id); + processedAssets[id] = true; + } + } + } else fullReload(); + } + + if (data.type === 'error') { + // Log parcel errors to console + for (let ansiDiagnostic of data.diagnostics.ansi) { + let stack = ansiDiagnostic.codeframe + ? ansiDiagnostic.codeframe + : ansiDiagnostic.stack; + + console.error( + '🚨 [parcel]: ' + + ansiDiagnostic.message + + '\n' + + stack + + '\n\n' + + ansiDiagnostic.hints.join('\n'), + ); + } + + if (typeof document !== 'undefined') { + // Render the fancy html overlay + removeErrorOverlay(); + var overlay = createErrorOverlay(data.diagnostics.html); + // $FlowFixMe + document.body.appendChild(overlay); + } + } + }; + if (ws instanceof WebSocket) { + ws.onerror = function (e) { + if (e.message) { + console.error(e.message); + } + }; + ws.onclose = function (e) { + if (process.env.PARCEL_BUILD_ENV !== 'test') { + console.warn('[parcel] 🚨 Connection to the HMR server was lost'); + } + }; + } +} + +function removeErrorOverlay() { + var overlay = document.getElementById(OVERLAY_ID); + if (overlay) { + overlay.remove(); + console.log('[parcel] ✨ Error resolved'); + } +} + +function createErrorOverlay(diagnostics) { + var overlay = document.createElement('div'); + overlay.id = OVERLAY_ID; + + let errorHTML = + '
'; + + for (let diagnostic of diagnostics) { + let stack = diagnostic.frames.length + ? diagnostic.frames.reduce((p, frame) => { + return `${p} +${ + frame.location + } +${frame.code}`; + }, '') + : diagnostic.stack; + + errorHTML += ` +
+
+ 🚨 ${diagnostic.message} +
+
${stack}
+
+ ${diagnostic.hints.map(hint => '
💡 ' + hint + '
').join('')} +
+ ${ + diagnostic.documentation + ? `` + : '' + } +
+ `; + } + + errorHTML += '
'; + + overlay.innerHTML = errorHTML; + + return overlay; +} + +function fullReload() { + if ('reload' in location) { + location.reload(); + } else if (extCtx && extCtx.runtime && extCtx.runtime.reload) { + extCtx.runtime.reload(); + } +} + +function getParents(bundle, id) /*: Array<[ParcelRequire, string]> */ { + var modules = bundle.modules; + if (!modules) { + return []; + } + + var parents = []; + var k, d, dep; + + for (k in modules) { + for (d in modules[k][1]) { + dep = modules[k][1][d]; + + if (dep === id || (Array.isArray(dep) && dep[dep.length - 1] === id)) { + parents.push([bundle, k]); + } + } + } + + if (bundle.parent) { + parents = parents.concat(getParents(bundle.parent, id)); + } + + return parents; +} + +function updateLink(link) { + var href = link.getAttribute('href'); + + if (!href) { + return; + } + var newLink = link.cloneNode(); + newLink.onload = function () { + if (link.parentNode !== null) { + // $FlowFixMe + link.parentNode.removeChild(link); + } + }; + newLink.setAttribute( + 'href', + // $FlowFixMe + href.split('?')[0] + '?' + Date.now(), + ); + // $FlowFixMe + link.parentNode.insertBefore(newLink, link.nextSibling); +} + +var cssTimeout = null; +function reloadCSS() { + if (cssTimeout) { + return; + } + + cssTimeout = setTimeout(function () { + var links = document.querySelectorAll('link[rel="stylesheet"]'); + for (var i = 0; i < links.length; i++) { + // $FlowFixMe[incompatible-type] + var href /*: string */ = links[i].getAttribute('href'); + var hostname = getHostname(); + var servedFromHMRServer = + hostname === 'localhost' + ? new RegExp( + '^(https?:\\/\\/(0.0.0.0|127.0.0.1)|localhost):' + getPort(), + ).test(href) + : href.indexOf(hostname + ':' + getPort()); + var absolute = + /^https?:\/\//i.test(href) && + href.indexOf(location.origin) !== 0 && + !servedFromHMRServer; + if (!absolute) { + updateLink(links[i]); + } + } + + cssTimeout = null; + }, 50); +} + +function hmrDownload(asset) { + if (asset.type === 'js') { + if (typeof document !== 'undefined') { + let script = document.createElement('script'); + script.src = asset.url + '?t=' + Date.now(); + if (asset.outputFormat === 'esmodule') { + script.type = 'module'; + } + return new Promise((resolve, reject) => { + script.onload = () => resolve(script); + script.onerror = reject; + document.head?.appendChild(script); + }); + } else if (typeof importScripts === 'function') { + // Worker scripts + if (asset.outputFormat === 'esmodule') { + return __parcel__import__(asset.url + '?t=' + Date.now()); + } else { + return new Promise((resolve, reject) => { + try { + __parcel__importScripts__(asset.url + '?t=' + Date.now()); + resolve(); + } catch (err) { + reject(err); + } + }); + } + } + } +} + +async function hmrApplyUpdates(assets) { + global.parcelHotUpdate = Object.create(null); + + let scriptsToRemove; + try { + // If sourceURL comments aren't supported in eval, we need to load + // the update from the dev server over HTTP so that stack traces + // are correct in errors/logs. This is much slower than eval, so + // we only do it if needed (currently just Safari). + // https://bugs.webkit.org/show_bug.cgi?id=137297 + // This path is also taken if a CSP disallows eval. + if (!supportsSourceURL) { + let promises = assets.map(asset => + hmrDownload(asset)?.catch(err => { + // Web extension fix + if ( + extCtx && + extCtx.runtime && + extCtx.runtime.getManifest().manifest_version == 3 && + typeof ServiceWorkerGlobalScope != 'undefined' && + global instanceof ServiceWorkerGlobalScope + ) { + extCtx.runtime.reload(); + return; + } + throw err; + }), + ); + + scriptsToRemove = await Promise.all(promises); + } + + assets.forEach(function (asset) { + hmrApply(module.bundle.root, asset); + }); + } finally { + delete global.parcelHotUpdate; + + if (scriptsToRemove) { + scriptsToRemove.forEach(script => { + if (script) { + document.head?.removeChild(script); + } + }); + } + } +} + +function hmrApply(bundle /*: ParcelRequire */, asset /*: HMRAsset */) { + var modules = bundle.modules; + if (!modules) { + return; + } + + if (asset.type === 'css') { + reloadCSS(); + } else if (asset.type === 'js') { + let deps = asset.depsByBundle[bundle.HMR_BUNDLE_ID]; + if (deps) { + if (modules[asset.id]) { + // Remove dependencies that are removed and will become orphaned. + // This is necessary so that if the asset is added back again, the cache is gone, and we prevent a full page reload. + let oldDeps = modules[asset.id][1]; + for (let dep in oldDeps) { + if (!deps[dep] || deps[dep] !== oldDeps[dep]) { + let id = oldDeps[dep]; + let parents = getParents(module.bundle.root, id); + if (parents.length === 1) { + hmrDelete(module.bundle.root, id); + } + } + } + } + + if (supportsSourceURL) { + // Global eval. We would use `new Function` here but browser + // support for source maps is better with eval. + (0, eval)(asset.output); + } + + // $FlowFixMe + let fn = global.parcelHotUpdate[asset.id]; + modules[asset.id] = [fn, deps]; + } + + // Always traverse to the parent bundle, even if we already replaced the asset in this bundle. + // This is required in case modules are duplicated. We need to ensure all instances have the updated code. + if (bundle.parent) { + hmrApply(bundle.parent, asset); + } + } +} + +function hmrDelete(bundle, id) { + let modules = bundle.modules; + if (!modules) { + return; + } + + if (modules[id]) { + // Collect dependencies that will become orphaned when this module is deleted. + let deps = modules[id][1]; + let orphans = []; + for (let dep in deps) { + let parents = getParents(module.bundle.root, deps[dep]); + if (parents.length === 1) { + orphans.push(deps[dep]); + } + } + + // Delete the module. This must be done before deleting dependencies in case of circular dependencies. + delete modules[id]; + delete bundle.cache[id]; + + // Now delete the orphans. + orphans.forEach(id => { + hmrDelete(module.bundle.root, id); + }); + } else if (bundle.parent) { + hmrDelete(bundle.parent, id); + } +} + +function hmrAcceptCheck( + bundle /*: ParcelRequire */, + id /*: string */, + depsByBundle /*: ?{ [string]: { [string]: string } }*/, +) { + if (hmrAcceptCheckOne(bundle, id, depsByBundle)) { + return true; + } + + // Traverse parents breadth first. All possible ancestries must accept the HMR update, or we'll reload. + let parents = getParents(module.bundle.root, id); + let accepted = false; + while (parents.length > 0) { + let v = parents.shift(); + let a = hmrAcceptCheckOne(v[0], v[1], null); + if (a) { + // If this parent accepts, stop traversing upward, but still consider siblings. + accepted = true; + } else { + // Otherwise, queue the parents in the next level upward. + let p = getParents(module.bundle.root, v[1]); + if (p.length === 0) { + // If there are no parents, then we've reached an entry without accepting. Reload. + accepted = false; + break; + } + parents.push(...p); + } + } + + return accepted; +} + +function hmrAcceptCheckOne( + bundle /*: ParcelRequire */, + id /*: string */, + depsByBundle /*: ?{ [string]: { [string]: string } }*/, +) { + var modules = bundle.modules; + if (!modules) { + return; + } + + if (depsByBundle && !depsByBundle[bundle.HMR_BUNDLE_ID]) { + // If we reached the root bundle without finding where the asset should go, + // there's nothing to do. Mark as "accepted" so we don't reload the page. + if (!bundle.parent) { + return true; + } + + return hmrAcceptCheck(bundle.parent, id, depsByBundle); + } + + if (checkedAssets[id]) { + return true; + } + + checkedAssets[id] = true; + + var cached = bundle.cache[id]; + assetsToDispose.push([bundle, id]); + + if (!cached || (cached.hot && cached.hot._acceptCallbacks.length)) { + assetsToAccept.push([bundle, id]); + return true; + } +} + +function hmrDisposeQueue() { + // Dispose all old assets. + for (let i = 0; i < assetsToDispose.length; i++) { + let id = assetsToDispose[i][1]; + + if (!disposedAssets[id]) { + hmrDispose(assetsToDispose[i][0], id); + disposedAssets[id] = true; + } + } + + assetsToDispose = []; +} + +function hmrDispose(bundle /*: ParcelRequire */, id /*: string */) { + var cached = bundle.cache[id]; + bundle.hotData[id] = {}; + if (cached && cached.hot) { + cached.hot.data = bundle.hotData[id]; + } + + if (cached && cached.hot && cached.hot._disposeCallbacks.length) { + cached.hot._disposeCallbacks.forEach(function (cb) { + cb(bundle.hotData[id]); + }); + } + + delete bundle.cache[id]; +} + +function hmrAccept(bundle /*: ParcelRequire */, id /*: string */) { + // Execute the module. + bundle(id); + + // Run the accept callbacks in the new version of the module. + var cached = bundle.cache[id]; + if (cached && cached.hot && cached.hot._acceptCallbacks.length) { + let assetsToAlsoAccept = []; + cached.hot._acceptCallbacks.forEach(function (cb) { + let additionalAssets = cb(function () { + return getParents(module.bundle.root, id); + }); + if (Array.isArray(additionalAssets) && additionalAssets.length) { + assetsToAlsoAccept.push(...additionalAssets); + } + }); + + if (assetsToAlsoAccept.length) { + let handled = assetsToAlsoAccept.every(function (a) { + return hmrAcceptCheck(a[0], a[1]); + }); + + if (!handled) { + return fullReload(); + } + + hmrDisposeQueue(); + } + } +} diff --git a/node_modules/@parcel/runtime-js/LICENSE b/node_modules/@parcel/runtime-js/LICENSE new file mode 100644 index 00000000..7fb9bc95 --- /dev/null +++ b/node_modules/@parcel/runtime-js/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017-present Devon Govett + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/@parcel/runtime-js/lib/JSRuntime.js b/node_modules/@parcel/runtime-js/lib/JSRuntime.js new file mode 100644 index 00000000..c7ce9a4a --- /dev/null +++ b/node_modules/@parcel/runtime-js/lib/JSRuntime.js @@ -0,0 +1,508 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +function _plugin() { + const data = require("@parcel/plugin"); + _plugin = function () { + return data; + }; + return data; +} +function _utils() { + const data = require("@parcel/utils"); + _utils = function () { + return data; + }; + return data; +} +function _path() { + const data = _interopRequireDefault(require("path")); + _path = function () { + return data; + }; + return data; +} +function _nullthrows() { + const data = _interopRequireDefault(require("nullthrows")); + _nullthrows = function () { + return data; + }; + return data; +} +function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } +// Used for as="" in preload/prefetch +const TYPE_TO_RESOURCE_PRIORITY = { + css: 'style', + js: 'script' +}; +const BROWSER_PRELOAD_LOADER = './helpers/browser/preload-loader'; +const BROWSER_PREFETCH_LOADER = './helpers/browser/prefetch-loader'; +const LOADERS = { + browser: { + css: './helpers/browser/css-loader', + html: './helpers/browser/html-loader', + js: './helpers/browser/js-loader', + wasm: './helpers/browser/wasm-loader', + IMPORT_POLYFILL: './helpers/browser/import-polyfill' + }, + worker: { + js: './helpers/worker/js-loader', + wasm: './helpers/worker/wasm-loader', + IMPORT_POLYFILL: false + }, + node: { + css: './helpers/node/css-loader', + html: './helpers/node/html-loader', + js: './helpers/node/js-loader', + wasm: './helpers/node/wasm-loader', + IMPORT_POLYFILL: null + } +}; +function getLoaders(ctx) { + if (ctx.isWorker()) return LOADERS.worker; + if (ctx.isBrowser()) return LOADERS.browser; + if (ctx.isNode()) return LOADERS.node; + return null; +} + +// This cache should be invalidated if new dependencies get added to the bundle without the bundle objects changing +// This can happen when we reuse the BundleGraph between subsequent builds +let bundleDependencies = new WeakMap(); +var _default = exports.default = new (_plugin().Runtime)({ + apply({ + bundle, + bundleGraph, + options + }) { + // Dependency ids in code replaced with referenced bundle names + // Loader runtime added for bundle groups that don't have a native loader (e.g. HTML/CSS/Worker - isURL?), + // and which are not loaded by a parent bundle. + // Loaders also added for modules that were moved to a separate bundle because they are a different type + // (e.g. WASM, HTML). These should be preloaded prior to the bundle being executed. Replace the entry asset(s) + // with the preload module. + + if (bundle.type !== 'js') { + return; + } + let { + asyncDependencies, + otherDependencies + } = getDependencies(bundle); + let assets = []; + for (let dependency of asyncDependencies) { + let resolved = bundleGraph.resolveAsyncDependency(dependency, bundle); + if (resolved == null) { + continue; + } + if (resolved.type === 'asset') { + if (!bundle.env.shouldScopeHoist) { + // If this bundle already has the asset this dependency references, + // return a simple runtime of `Promise.resolve(internalRequire(assetId))`. + // The linker handles this for scope-hoisting. + assets.push({ + filePath: __filename, + code: `module.exports = Promise.resolve(parcelRequire(${JSON.stringify(bundleGraph.getAssetPublicId(resolved.value))}))`, + dependency, + env: { + sourceType: 'module' + } + }); + } + } else { + // Resolve the dependency to a bundle. If inline, export the dependency id, + // which will be replaced with the contents of that bundle later. + let referencedBundle = bundleGraph.getReferencedBundle(dependency, bundle); + if ((referencedBundle === null || referencedBundle === void 0 ? void 0 : referencedBundle.bundleBehavior) === 'inline') { + assets.push({ + filePath: _path().default.join(__dirname, `/bundles/${referencedBundle.id}.js`), + code: `module.exports = Promise.resolve(${JSON.stringify(dependency.id)});`, + dependency, + env: { + sourceType: 'module' + } + }); + continue; + } + let loaderRuntime = getLoaderRuntime({ + bundle, + dependency, + bundleGraph, + bundleGroup: resolved.value, + options + }); + if (loaderRuntime != null) { + assets.push(loaderRuntime); + } + } + } + for (let dependency of otherDependencies) { + // Resolve the dependency to a bundle. If inline, export the dependency id, + // which will be replaced with the contents of that bundle later. + let referencedBundle = bundleGraph.getReferencedBundle(dependency, bundle); + if ((referencedBundle === null || referencedBundle === void 0 ? void 0 : referencedBundle.bundleBehavior) === 'inline') { + assets.push({ + filePath: _path().default.join(__dirname, `/bundles/${referencedBundle.id}.js`), + code: `module.exports = ${JSON.stringify(dependency.id)};`, + dependency, + env: { + sourceType: 'module' + } + }); + continue; + } + + // Otherwise, try to resolve the dependency to an external bundle group + // and insert a URL to that bundle. + let resolved = bundleGraph.resolveAsyncDependency(dependency, bundle); + if (dependency.specifierType === 'url' && resolved == null) { + // If a URL dependency was not able to be resolved, add a runtime that + // exports the original specifier. + assets.push({ + filePath: __filename, + code: `module.exports = ${JSON.stringify(dependency.specifier)}`, + dependency, + env: { + sourceType: 'module' + } + }); + continue; + } + if (resolved == null || resolved.type !== 'bundle_group') { + continue; + } + let bundleGroup = resolved.value; + let mainBundle = (0, _nullthrows().default)(bundleGraph.getBundlesInBundleGroup(bundleGroup).find(b => { + let entries = b.getEntryAssets(); + return entries.some(e => bundleGroup.entryAssetId === e.id); + })); + + // Skip URL runtimes for library builds. This is handled in packaging so that + // the url is inlined and statically analyzable. + if (bundle.env.isLibrary && mainBundle.bundleBehavior !== 'isolated') { + continue; + } + + // URL dependency or not, fall back to including a runtime that exports the url + assets.push(getURLRuntime(dependency, bundle, mainBundle, options)); + } + + // In development, bundles can be created lazily. This means that the parent bundle may not + // know about all of the sibling bundles of a child when it is written for the first time. + // Therefore, we need to also ensure that the siblings are loaded when the child loads. + if (options.shouldBuildLazily && bundle.env.outputFormat === 'global') { + let referenced = bundleGraph.getReferencedBundles(bundle); + for (let referencedBundle of referenced) { + let loaders = getLoaders(bundle.env); + if (!loaders) { + continue; + } + let loader = loaders[referencedBundle.type]; + if (!loader) { + continue; + } + let relativePathExpr = getRelativePathExpr(bundle, referencedBundle, options); + let loaderCode = `require(${JSON.stringify(loader)})( ${getAbsoluteUrlExpr(relativePathExpr, bundle)})`; + assets.push({ + filePath: __filename, + code: loaderCode, + isEntry: true, + env: { + sourceType: 'module' + } + }); + } + } + if (shouldUseRuntimeManifest(bundle, options) && bundleGraph.getChildBundles(bundle).some(b => b.bundleBehavior !== 'inline') && isNewContext(bundle, bundleGraph)) { + assets.push({ + filePath: __filename, + code: getRegisterCode(bundle, bundleGraph), + isEntry: true, + env: { + sourceType: 'module' + } + }); + } + return assets; + } +}); +function getDependencies(bundle) { + let cachedDependencies = bundleDependencies.get(bundle); + if (cachedDependencies) { + return cachedDependencies; + } else { + let asyncDependencies = []; + let otherDependencies = []; + bundle.traverse(node => { + if (node.type !== 'dependency') { + return; + } + let dependency = node.value; + if (dependency.priority === 'lazy' && dependency.specifierType !== 'url') { + asyncDependencies.push(dependency); + } else { + otherDependencies.push(dependency); + } + }); + bundleDependencies.set(bundle, { + asyncDependencies, + otherDependencies + }); + return { + asyncDependencies, + otherDependencies + }; + } +} +function getLoaderRuntime({ + bundle, + dependency, + bundleGroup, + bundleGraph, + options +}) { + let loaders = getLoaders(bundle.env); + if (loaders == null) { + return; + } + let externalBundles = bundleGraph.getBundlesInBundleGroup(bundleGroup); + let mainBundle = (0, _nullthrows().default)(externalBundles.find(bundle => { + var _bundle$getMainEntry; + return ((_bundle$getMainEntry = bundle.getMainEntry()) === null || _bundle$getMainEntry === void 0 ? void 0 : _bundle$getMainEntry.id) === bundleGroup.entryAssetId; + })); + + // CommonJS is a synchronous module system, so there is no need to load bundles in parallel. + // Importing of the other bundles will be handled by the bundle group entry. + // Do the same thing in library mode for ES modules, as we are building for another bundler + // and the imports for sibling bundles will be in the target bundle. + + // Previously we also did this when building lazily, however it seemed to cause issues in some cases. + // The original comment as to why is left here, in case a future traveller is trying to fix that issue: + // > [...] the runtime itself could get deduplicated and only exist in the parent. This causes errors if an + // > old version of the parent without the runtime + // > is already loaded. + if (bundle.env.outputFormat === 'commonjs' || bundle.env.isLibrary) { + externalBundles = [mainBundle]; + } else { + // Otherwise, load the bundle group entry after the others. + externalBundles.splice(externalBundles.indexOf(mainBundle), 1); + externalBundles.reverse().push(mainBundle); + } + + // Determine if we need to add a dynamic import() polyfill, or if all target browsers support it natively. + let needsDynamicImportPolyfill = !bundle.env.isLibrary && !bundle.env.supports('dynamic-import', true); + let needsEsmLoadPrelude = false; + let loaderModules = []; + for (let to of externalBundles) { + let loader = loaders[to.type]; + if (!loader) { + continue; + } + if (to.type === 'js' && to.env.outputFormat === 'esmodule' && !needsDynamicImportPolyfill && shouldUseRuntimeManifest(bundle, options)) { + loaderModules.push(`load(${JSON.stringify(to.publicId)})`); + needsEsmLoadPrelude = true; + continue; + } + let relativePathExpr = getRelativePathExpr(bundle, to, options); + + // Use esmodule loader if possible + if (to.type === 'js' && to.env.outputFormat === 'esmodule') { + if (!needsDynamicImportPolyfill) { + loaderModules.push(`__parcel__import__("./" + ${relativePathExpr})`); + continue; + } + loader = (0, _nullthrows().default)(loaders.IMPORT_POLYFILL, `No import() polyfill available for context '${bundle.env.context}'`); + } else if (to.type === 'js' && to.env.outputFormat === 'commonjs') { + loaderModules.push(`Promise.resolve(__parcel__require__("./" + ${relativePathExpr}))`); + continue; + } + let absoluteUrlExpr = shouldUseRuntimeManifest(bundle, options) ? `require('./helpers/bundle-manifest').resolve(${JSON.stringify(to.publicId)})` : getAbsoluteUrlExpr(relativePathExpr, bundle); + let code = `require(${JSON.stringify(loader)})(${absoluteUrlExpr})`; + + // In development, clear the require cache when an error occurs so the + // user can try again (e.g. after fixing a build error). + if (options.mode === 'development' && bundle.env.outputFormat === 'global') { + code += '.catch(err => {delete module.bundle.cache[module.id]; throw err;})'; + } + loaderModules.push(code); + } + + // Similar to the comment above, this also used to be skipped when shouldBuildLazily was true, + // however it caused issues where a bundle group contained multiple bundles. + if (bundle.env.context === 'browser') { + loaderModules.push(...externalBundles + // TODO: Allow css to preload resources as well + .filter(to => to.type === 'js').flatMap(from => { + let { + preload, + prefetch + } = getHintedBundleGroups(bundleGraph, from); + return [...getHintLoaders(bundleGraph, bundle, preload, BROWSER_PRELOAD_LOADER, options), ...getHintLoaders(bundleGraph, bundle, prefetch, BROWSER_PREFETCH_LOADER, options)]; + })); + } + if (loaderModules.length === 0) { + return; + } + let loaderCode = loaderModules.join(', '); + if (loaderModules.length > 1) { + loaderCode = `Promise.all([${loaderCode}])`; + } else { + loaderCode = `(${loaderCode})`; + } + if (mainBundle.type === 'js') { + loaderCode += `.then(() => parcelRequire('${bundleGraph.getAssetPublicId(bundleGraph.getAssetById(bundleGroup.entryAssetId))}'))`; + } + if (needsEsmLoadPrelude && options.featureFlags.importRetry) { + loaderCode = ` + Object.defineProperty(module, 'exports', { get: () => { + let load = require('./helpers/browser/esm-js-loader-retry'); + return ${loaderCode}.then((v) => { + Object.defineProperty(module, "exports", { value: Promise.resolve(v) }) + return v + }); + }})`; + return { + filePath: __filename, + code: loaderCode, + dependency, + env: { + sourceType: 'module' + } + }; + } + let code = []; + if (needsEsmLoadPrelude) { + code.push(`let load = require('./helpers/browser/esm-js-loader');`); + } + code.push(`module.exports = ${loaderCode};`); + return { + filePath: __filename, + code: code.join('\n'), + dependency, + env: { + sourceType: 'module' + } + }; +} +function getHintedBundleGroups(bundleGraph, bundle) { + let preload = []; + let prefetch = []; + let { + asyncDependencies + } = getDependencies(bundle); + for (let dependency of asyncDependencies) { + var _dependency$meta; + let attributes = (_dependency$meta = dependency.meta) === null || _dependency$meta === void 0 ? void 0 : _dependency$meta.importAttributes; + if (typeof attributes === 'object' && attributes != null && ( + // $FlowFixMe + attributes.preload || attributes.prefetch)) { + let resolved = bundleGraph.resolveAsyncDependency(dependency, bundle); + if ((resolved === null || resolved === void 0 ? void 0 : resolved.type) === 'bundle_group') { + // === true for flow + if (attributes.preload === true) { + preload.push(resolved.value); + } + if (attributes.prefetch === true) { + prefetch.push(resolved.value); + } + } + } + } + return { + preload, + prefetch + }; +} +function getHintLoaders(bundleGraph, from, bundleGroups, loader, options) { + let hintLoaders = []; + for (let bundleGroupToPreload of bundleGroups) { + let bundlesToPreload = bundleGraph.getBundlesInBundleGroup(bundleGroupToPreload); + for (let bundleToPreload of bundlesToPreload) { + let relativePathExpr = getRelativePathExpr(from, bundleToPreload, options); + let priority = TYPE_TO_RESOURCE_PRIORITY[bundleToPreload.type]; + hintLoaders.push(`require(${JSON.stringify(loader)})(${getAbsoluteUrlExpr(relativePathExpr, from)}, ${priority ? JSON.stringify(priority) : 'null'}, ${JSON.stringify(bundleToPreload.target.env.outputFormat === 'esmodule')})`); + } + } + return hintLoaders; +} +function isNewContext(bundle, bundleGraph) { + let parents = bundleGraph.getParentBundles(bundle); + let isInEntryBundleGroup = bundleGraph.getBundleGroupsContainingBundle(bundle).some(g => bundleGraph.isEntryBundleGroup(g)); + return isInEntryBundleGroup || parents.length === 0 || parents.some(parent => parent.env.context !== bundle.env.context || parent.type !== 'js'); +} +function getURLRuntime(dependency, from, to, options) { + let relativePathExpr = getRelativePathExpr(from, to, options, true); + let code; + if (dependency.meta.webworker === true && !from.env.isLibrary) { + code = `let workerURL = require('./helpers/get-worker-url');\n`; + if (from.env.outputFormat === 'esmodule' && from.env.supports('import-meta-url')) { + code += `let url = new __parcel__URL__(${relativePathExpr});\n`; + code += `module.exports = workerURL(url.toString(), url.origin, ${String(from.env.outputFormat === 'esmodule')});`; + } else { + code += `let bundleURL = require('./helpers/bundle-url');\n`; + code += `let url = bundleURL.getBundleURL('${from.publicId}') + ${relativePathExpr};`; + code += `module.exports = workerURL(url, bundleURL.getOrigin(url), ${String(from.env.outputFormat === 'esmodule')});`; + } + } else { + code = `module.exports = ${getAbsoluteUrlExpr(relativePathExpr, from)};`; + } + return { + filePath: __filename, + code, + dependency, + env: { + sourceType: 'module' + } + }; +} +function getRegisterCode(entryBundle, bundleGraph) { + let mappings = []; + bundleGraph.traverseBundles((bundle, _, actions) => { + if (bundle.bundleBehavior === 'inline') { + return; + } + + // To make the manifest as small as possible all bundle key/values are + // serialised into a single array e.g. ['id', 'value', 'id2', 'value2']. + // `./helpers/bundle-manifest` accounts for this by iterating index by 2 + mappings.push(bundle.publicId, (0, _utils().relativeBundlePath)(entryBundle, (0, _nullthrows().default)(bundle), { + leadingDotSlash: false + })); + if (bundle !== entryBundle && isNewContext(bundle, bundleGraph)) { + for (let referenced of bundleGraph.getReferencedBundles(bundle)) { + mappings.push(referenced.publicId, (0, _utils().relativeBundlePath)(entryBundle, (0, _nullthrows().default)(referenced), { + leadingDotSlash: false + })); + } + // New contexts have their own manifests, so there's no need to continue. + actions.skipChildren(); + } + }, entryBundle); + let baseUrl = entryBundle.env.outputFormat === 'esmodule' && entryBundle.env.supports('import-meta-url') ? 'new __parcel__URL__("").toString()' // <-- this isn't ideal. We should use `import.meta.url` directly but it gets replaced currently + : `require('./helpers/bundle-url').getBundleURL('${entryBundle.publicId}')`; + return `require('./helpers/bundle-manifest').register(${baseUrl},JSON.parse(${JSON.stringify(JSON.stringify(mappings))}));`; +} +function getRelativePathExpr(from, to, options, isURL = to.type !== 'js') { + let relativePath = (0, _utils().relativeBundlePath)(from, to, { + leadingDotSlash: false + }); + let res = JSON.stringify(relativePath); + if (isURL && options.hmrOptions) { + res += ' + "?" + Date.now()'; + } + return res; +} +function getAbsoluteUrlExpr(relativePathExpr, bundle) { + if (bundle.env.outputFormat === 'esmodule' && bundle.env.supports('import-meta-url') || bundle.env.outputFormat === 'commonjs') { + // This will be compiled to new URL(url, import.meta.url) or new URL(url, 'file:' + __filename). + return `new __parcel__URL__(${relativePathExpr}).toString()`; + } else { + return `require('./helpers/bundle-url').getBundleURL('${bundle.publicId}') + ${relativePathExpr}`; + } +} +function shouldUseRuntimeManifest(bundle, options) { + let env = bundle.env; + return !env.isLibrary && bundle.bundleBehavior !== 'inline' && env.isBrowser() && options.mode === 'production'; +} \ No newline at end of file diff --git a/node_modules/@parcel/runtime-js/lib/helpers/browser/css-loader.js b/node_modules/@parcel/runtime-js/lib/helpers/browser/css-loader.js new file mode 100644 index 00000000..fc02d236 --- /dev/null +++ b/node_modules/@parcel/runtime-js/lib/helpers/browser/css-loader.js @@ -0,0 +1,28 @@ +"use strict"; + +var cacheLoader = require('../cacheLoader'); +module.exports = cacheLoader(function (bundle) { + return new Promise(function (resolve, reject) { + // Don't insert the same link element twice (e.g. if it was already in the HTML) + var existingLinks = document.getElementsByTagName('link'); + if ([].concat(existingLinks).some(function (link) { + return link.href === bundle && link.rel.indexOf('stylesheet') > -1; + })) { + resolve(); + return; + } + var link = document.createElement('link'); + link.rel = 'stylesheet'; + link.href = bundle; + link.onerror = function (e) { + link.onerror = link.onload = null; + link.remove(); + reject(e); + }; + link.onload = function () { + link.onerror = link.onload = null; + resolve(); + }; + document.getElementsByTagName('head')[0].appendChild(link); + }); +}); \ No newline at end of file diff --git a/node_modules/@parcel/runtime-js/lib/helpers/browser/esm-js-loader-retry.js b/node_modules/@parcel/runtime-js/lib/helpers/browser/esm-js-loader-retry.js new file mode 100644 index 00000000..572b617d --- /dev/null +++ b/node_modules/@parcel/runtime-js/lib/helpers/browser/esm-js-loader-retry.js @@ -0,0 +1,51 @@ +"use strict"; + +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : "suspendedYield", p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, catch: function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; } +function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); } +function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; } +function load() { + return _load.apply(this, arguments); +} +function _load() { + _load = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(id) { + var url; + return _regeneratorRuntime().wrap(function _callee$(_context) { + while (1) switch (_context.prev = _context.next) { + case 0: + if (!parcelRequire.retryState) { + parcelRequire.retryState = {}; + } + if (globalThis.navigator.onLine) { + _context.next = 4; + break; + } + _context.next = 4; + return new Promise(function (res) { + return globalThis.addEventListener('online', res, { + once: true + }); + }); + case 4: + url = require('../bundle-manifest').resolve(id); + if (parcelRequire.retryState[id] != undefined) { + url = "".concat(url, "?retry=").concat(parcelRequire.retryState[id]); + } + _context.prev = 6; + _context.next = 9; + return __parcel__import__(url); + case 9: + return _context.abrupt("return", _context.sent); + case 12: + _context.prev = 12; + _context.t0 = _context["catch"](6); + parcelRequire.retryState[id] = Date.now(); + case 15: + case "end": + return _context.stop(); + } + }, _callee, null, [[6, 12]]); + })); + return _load.apply(this, arguments); +} +module.exports = load; \ No newline at end of file diff --git a/node_modules/@parcel/runtime-js/lib/helpers/browser/esm-js-loader.js b/node_modules/@parcel/runtime-js/lib/helpers/browser/esm-js-loader.js new file mode 100644 index 00000000..ec52c249 --- /dev/null +++ b/node_modules/@parcel/runtime-js/lib/helpers/browser/esm-js-loader.js @@ -0,0 +1,7 @@ +"use strict"; + +function load(id) { + // eslint-disable-next-line no-undef + return __parcel__import__(require('../bundle-manifest').resolve(id)); +} +module.exports = load; \ No newline at end of file diff --git a/node_modules/@parcel/runtime-js/lib/helpers/browser/html-loader.js b/node_modules/@parcel/runtime-js/lib/helpers/browser/html-loader.js new file mode 100644 index 00000000..eae02f51 --- /dev/null +++ b/node_modules/@parcel/runtime-js/lib/helpers/browser/html-loader.js @@ -0,0 +1,8 @@ +"use strict"; + +var cacheLoader = require('../cacheLoader'); +module.exports = cacheLoader(function (bundle) { + return fetch(bundle).then(function (res) { + return res.text(); + }); +}); \ No newline at end of file diff --git a/node_modules/@parcel/runtime-js/lib/helpers/browser/import-polyfill.js b/node_modules/@parcel/runtime-js/lib/helpers/browser/import-polyfill.js new file mode 100644 index 00000000..2229649b --- /dev/null +++ b/node_modules/@parcel/runtime-js/lib/helpers/browser/import-polyfill.js @@ -0,0 +1,32 @@ +"use strict"; + +var cacheLoader = require('../cacheLoader'); +module.exports = cacheLoader(function (bundle) { + return new Promise(function (resolve, reject) { + // Add a global function to handle when the script loads. + var globalName = "i".concat(('' + Math.random()).slice(2)); + global[globalName] = function (m) { + resolve(m); + cleanup(); + }; + + // Remove script on load or error + var cleanup = function () { + delete global[globalName]; + script.onerror = null; + script.remove(); + }; + + // Append an inline script tag into the document head + var script = document.createElement('script'); + script.async = true; + script.type = 'module'; + script.charset = 'utf-8'; + script.textContent = "import * as m from '".concat(bundle, "'; ").concat(globalName, "(m);"); + script.onerror = function (e) { + reject(e); + cleanup(); + }; + document.head.appendChild(script); + }); +}); \ No newline at end of file diff --git a/node_modules/@parcel/runtime-js/lib/helpers/browser/js-loader.js b/node_modules/@parcel/runtime-js/lib/helpers/browser/js-loader.js new file mode 100644 index 00000000..286a6b10 --- /dev/null +++ b/node_modules/@parcel/runtime-js/lib/helpers/browser/js-loader.js @@ -0,0 +1,35 @@ +"use strict"; + +var cacheLoader = require('../cacheLoader'); +module.exports = cacheLoader(function (bundle) { + return new Promise(function (resolve, reject) { + // Don't insert the same script twice (e.g. if it was already in the HTML) + var existingScripts = document.getElementsByTagName('script'); + if ([].concat(existingScripts).some(function (script) { + return script.src === bundle; + })) { + resolve(); + return; + } + var preloadLink = document.createElement('link'); + preloadLink.href = bundle; + preloadLink.rel = 'preload'; + preloadLink.as = 'script'; + document.head.appendChild(preloadLink); + var script = document.createElement('script'); + script.async = true; + script.type = 'text/javascript'; + script.src = bundle; + script.onerror = function (e) { + var error = new TypeError("Failed to fetch dynamically imported module: ".concat(bundle, ". Error: ").concat(e.message)); + script.onerror = script.onload = null; + script.remove(); + reject(error); + }; + script.onload = function () { + script.onerror = script.onload = null; + resolve(); + }; + document.getElementsByTagName('head')[0].appendChild(script); + }); +}); \ No newline at end of file diff --git a/node_modules/@parcel/runtime-js/lib/helpers/browser/prefetch-loader.js b/node_modules/@parcel/runtime-js/lib/helpers/browser/prefetch-loader.js new file mode 100644 index 00000000..8b20c392 --- /dev/null +++ b/node_modules/@parcel/runtime-js/lib/helpers/browser/prefetch-loader.js @@ -0,0 +1,13 @@ +"use strict"; + +var cacheLoader = require('../cacheLoader'); +module.exports = cacheLoader(function (bundle, priority) { + var link = document.createElement('link'); + link.rel = 'prefetch'; + link.href = bundle; + if (priority) { + link.as = priority; + } + document.getElementsByTagName('head')[0].appendChild(link); + return Promise.resolve(); +}, 'prefetch'); \ No newline at end of file diff --git a/node_modules/@parcel/runtime-js/lib/helpers/browser/preload-loader.js b/node_modules/@parcel/runtime-js/lib/helpers/browser/preload-loader.js new file mode 100644 index 00000000..c153e954 --- /dev/null +++ b/node_modules/@parcel/runtime-js/lib/helpers/browser/preload-loader.js @@ -0,0 +1,14 @@ +"use strict"; + +var cacheLoader = require('../cacheLoader'); +module.exports = cacheLoader(function (bundle, priority, isModule) { + var link = document.createElement('link'); + link.charset = 'utf-8'; + link.rel = isModule ? 'modulepreload' : 'preload'; + link.href = bundle; + if (priority) { + link.as = priority; + } + document.getElementsByTagName('head')[0].appendChild(link); + return Promise.resolve(); +}, 'preload'); \ No newline at end of file diff --git a/node_modules/@parcel/runtime-js/lib/helpers/browser/wasm-loader.js b/node_modules/@parcel/runtime-js/lib/helpers/browser/wasm-loader.js new file mode 100644 index 00000000..8b8b3134 --- /dev/null +++ b/node_modules/@parcel/runtime-js/lib/helpers/browser/wasm-loader.js @@ -0,0 +1,16 @@ +"use strict"; + +var cacheLoader = require('../cacheLoader'); +module.exports = cacheLoader(function (bundle) { + return fetch(bundle).then(function (res) { + if (WebAssembly.instantiateStreaming) { + return WebAssembly.instantiateStreaming(res); + } else { + return res.arrayBuffer().then(function (data) { + return WebAssembly.instantiate(data); + }); + } + }).then(function (wasmModule) { + return wasmModule.instance.exports; + }); +}); \ No newline at end of file diff --git a/node_modules/@parcel/runtime-js/lib/helpers/bundle-manifest.js b/node_modules/@parcel/runtime-js/lib/helpers/bundle-manifest.js new file mode 100644 index 00000000..6ba69832 --- /dev/null +++ b/node_modules/@parcel/runtime-js/lib/helpers/bundle-manifest.js @@ -0,0 +1,20 @@ +"use strict"; + +var mapping = new Map(); +function register(baseUrl, manifest) { + for (var i = 0; i < manifest.length - 1; i += 2) { + mapping.set(manifest[i], { + baseUrl: baseUrl, + path: manifest[i + 1] + }); + } +} +function resolve(id) { + var resolved = mapping.get(id); + if (resolved == null) { + throw new Error('Could not resolve bundle with id ' + id); + } + return new URL(resolved.path, resolved.baseUrl).toString(); +} +module.exports.register = register; +module.exports.resolve = resolve; \ No newline at end of file diff --git a/node_modules/@parcel/runtime-js/lib/helpers/bundle-url.js b/node_modules/@parcel/runtime-js/lib/helpers/bundle-url.js new file mode 100644 index 00000000..253c4778 --- /dev/null +++ b/node_modules/@parcel/runtime-js/lib/helpers/bundle-url.js @@ -0,0 +1,39 @@ +"use strict"; + +var bundleURL = {}; +function getBundleURLCached(id) { + var value = bundleURL[id]; + if (!value) { + value = getBundleURL(); + bundleURL[id] = value; + } + return value; +} +function getBundleURL() { + try { + throw new Error(); + } catch (err) { + var matches = ('' + err.stack).match(/(https?|file|ftp|(chrome|moz|safari-web)-extension):\/\/[^)\n]+/g); + if (matches) { + // The first two stack frames will be this function and getBundleURLCached. + // Use the 3rd one, which will be a runtime in the original bundle. + return getBaseURL(matches[2]); + } + } + return '/'; +} +function getBaseURL(url) { + return ('' + url).replace(/^((?:https?|file|ftp|(chrome|moz|safari-web)-extension):\/\/.+)\/[^/]+$/, '$1') + '/'; +} + +// TODO: Replace uses with `new URL(url).origin` when ie11 is no longer supported. +function getOrigin(url) { + var matches = ('' + url).match(/(https?|file|ftp|(chrome|moz|safari-web)-extension):\/\/[^/]+/); + if (!matches) { + throw new Error('Origin not found'); + } + return matches[0]; +} +exports.getBundleURL = getBundleURLCached; +exports.getBaseURL = getBaseURL; +exports.getOrigin = getOrigin; \ No newline at end of file diff --git a/node_modules/@parcel/runtime-js/lib/helpers/cacheLoader.js b/node_modules/@parcel/runtime-js/lib/helpers/cacheLoader.js new file mode 100644 index 00000000..68f31a3e --- /dev/null +++ b/node_modules/@parcel/runtime-js/lib/helpers/cacheLoader.js @@ -0,0 +1,27 @@ +"use strict"; + +var cachedBundles = {}; +var cachedPreloads = {}; +var cachedPrefetches = {}; +function getCache(type) { + switch (type) { + case 'preload': + return cachedPreloads; + case 'prefetch': + return cachedPrefetches; + default: + return cachedBundles; + } +} +module.exports = function (loader, type) { + return function (bundle) { + var cache = getCache(type); + if (cache[bundle]) { + return cache[bundle]; + } + return cache[bundle] = loader.apply(null, arguments).catch(function (e) { + delete cache[bundle]; + throw e; + }); + }; +}; \ No newline at end of file diff --git a/node_modules/@parcel/runtime-js/lib/helpers/get-worker-url.js b/node_modules/@parcel/runtime-js/lib/helpers/get-worker-url.js new file mode 100644 index 00000000..8f0cae09 --- /dev/null +++ b/node_modules/@parcel/runtime-js/lib/helpers/get-worker-url.js @@ -0,0 +1,15 @@ +"use strict"; + +module.exports = function (workerUrl, origin, isESM) { + if (origin === self.location.origin) { + // If the worker bundle's url is on the same origin as the document, + // use the worker bundle's own url. + return workerUrl; + } else { + // Otherwise, create a blob URL which loads the worker bundle with `importScripts`. + var source = isESM ? 'import ' + JSON.stringify(workerUrl) + ';' : 'importScripts(' + JSON.stringify(workerUrl) + ');'; + return URL.createObjectURL(new Blob([source], { + type: 'application/javascript' + })); + } +}; \ No newline at end of file diff --git a/node_modules/@parcel/runtime-js/lib/helpers/node/css-loader.js b/node_modules/@parcel/runtime-js/lib/helpers/node/css-loader.js new file mode 100644 index 00000000..ad7d0fdb --- /dev/null +++ b/node_modules/@parcel/runtime-js/lib/helpers/node/css-loader.js @@ -0,0 +1,6 @@ +"use strict"; + +// loading a CSS style is a no-op in Node.js +module.exports = function () { + return Promise.resolve(); +}; \ No newline at end of file diff --git a/node_modules/@parcel/runtime-js/lib/helpers/node/html-loader.js b/node_modules/@parcel/runtime-js/lib/helpers/node/html-loader.js new file mode 100644 index 00000000..74dceebc --- /dev/null +++ b/node_modules/@parcel/runtime-js/lib/helpers/node/html-loader.js @@ -0,0 +1,19 @@ +"use strict"; + +var fs = require('fs'); +var cacheLoader = require('../cacheLoader'); +module.exports = cacheLoader(function (bundle) { + return new Promise(function (resolve, reject) { + fs.readFile(__dirname + bundle, 'utf8', function (err, data) { + if (err) { + reject(err); + } else { + // wait for the next event loop iteration, so we are sure + // the current module is fully loaded + setImmediate(function () { + resolve(data); + }); + } + }); + }); +}); \ No newline at end of file diff --git a/node_modules/@parcel/runtime-js/lib/helpers/node/js-loader.js b/node_modules/@parcel/runtime-js/lib/helpers/node/js-loader.js new file mode 100644 index 00000000..a8fa279d --- /dev/null +++ b/node_modules/@parcel/runtime-js/lib/helpers/node/js-loader.js @@ -0,0 +1,21 @@ +"use strict"; + +var fs = require('fs'); +var cacheLoader = require('../cacheLoader'); +module.exports = cacheLoader(function (bundle) { + return new Promise(function (resolve, reject) { + fs.readFile(__dirname + bundle, 'utf8', function (err, data) { + if (err) { + reject(err); + } else { + // wait for the next event loop iteration, so we are sure + // the current module is fully loaded + setImmediate(function () { + resolve(data); + }); + } + }); + }).then(function (code) { + new Function('', code)(); + }); +}); \ No newline at end of file diff --git a/node_modules/@parcel/runtime-js/lib/helpers/node/wasm-loader.js b/node_modules/@parcel/runtime-js/lib/helpers/node/wasm-loader.js new file mode 100644 index 00000000..5dd1cb34 --- /dev/null +++ b/node_modules/@parcel/runtime-js/lib/helpers/node/wasm-loader.js @@ -0,0 +1,19 @@ +"use strict"; + +var fs = require('fs'); +var cacheLoader = require('../cacheLoader'); +module.exports = cacheLoader(function (bundle) { + return new Promise(function (resolve, reject) { + fs.readFile(__dirname + bundle, function (err, data) { + if (err) { + reject(err); + } else { + resolve(data.buffer); + } + }); + }).then(function (data) { + return WebAssembly.instantiate(data); + }).then(function (wasmModule) { + return wasmModule.instance.exports; + }); +}); \ No newline at end of file diff --git a/node_modules/@parcel/runtime-js/lib/helpers/worker/js-loader.js b/node_modules/@parcel/runtime-js/lib/helpers/worker/js-loader.js new file mode 100644 index 00000000..103f9486 --- /dev/null +++ b/node_modules/@parcel/runtime-js/lib/helpers/worker/js-loader.js @@ -0,0 +1,14 @@ +"use strict"; + +/* global __parcel__importScripts__:readonly*/ +var cacheLoader = require('../cacheLoader'); +module.exports = cacheLoader(function (bundle) { + return new Promise(function (resolve, reject) { + try { + __parcel__importScripts__(bundle); + resolve(); + } catch (e) { + reject(e); + } + }); +}); \ No newline at end of file diff --git a/node_modules/@parcel/runtime-js/lib/helpers/worker/wasm-loader.js b/node_modules/@parcel/runtime-js/lib/helpers/worker/wasm-loader.js new file mode 100644 index 00000000..8b8b3134 --- /dev/null +++ b/node_modules/@parcel/runtime-js/lib/helpers/worker/wasm-loader.js @@ -0,0 +1,16 @@ +"use strict"; + +var cacheLoader = require('../cacheLoader'); +module.exports = cacheLoader(function (bundle) { + return fetch(bundle).then(function (res) { + if (WebAssembly.instantiateStreaming) { + return WebAssembly.instantiateStreaming(res); + } else { + return res.arrayBuffer().then(function (data) { + return WebAssembly.instantiate(data); + }); + } + }).then(function (wasmModule) { + return wasmModule.instance.exports; + }); +}); \ No newline at end of file diff --git a/node_modules/@parcel/runtime-js/package.json b/node_modules/@parcel/runtime-js/package.json new file mode 100644 index 00000000..5f9bf5ae --- /dev/null +++ b/node_modules/@parcel/runtime-js/package.json @@ -0,0 +1,29 @@ +{ + "name": "@parcel/runtime-js", + "version": "2.13.3", + "license": "MIT", + "publishConfig": { + "access": "public" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "repository": { + "type": "git", + "url": "https://github.com/parcel-bundler/parcel.git" + }, + "main": "lib/JSRuntime.js", + "source": "src/JSRuntime.js", + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.13.3" + }, + "dependencies": { + "@parcel/diagnostic": "2.13.3", + "@parcel/plugin": "2.13.3", + "@parcel/utils": "2.13.3", + "nullthrows": "^1.1.1" + }, + "gitHead": "d19b1f6bdb05eb5a3085f44daae15c0fe2709ab9" +} diff --git a/node_modules/@parcel/runtime-js/src/JSRuntime.js b/node_modules/@parcel/runtime-js/src/JSRuntime.js new file mode 100644 index 00000000..78141016 --- /dev/null +++ b/node_modules/@parcel/runtime-js/src/JSRuntime.js @@ -0,0 +1,668 @@ +// @flow strict-local + +import type { + BundleGraph, + BundleGroup, + Dependency, + Environment, + PluginOptions, + NamedBundle, + RuntimeAsset, +} from '@parcel/types'; + +import {Runtime} from '@parcel/plugin'; +import {relativeBundlePath} from '@parcel/utils'; +import path from 'path'; +import nullthrows from 'nullthrows'; + +// Used for as="" in preload/prefetch +const TYPE_TO_RESOURCE_PRIORITY = { + css: 'style', + js: 'script', +}; + +const BROWSER_PRELOAD_LOADER = './helpers/browser/preload-loader'; +const BROWSER_PREFETCH_LOADER = './helpers/browser/prefetch-loader'; + +const LOADERS = { + browser: { + css: './helpers/browser/css-loader', + html: './helpers/browser/html-loader', + js: './helpers/browser/js-loader', + wasm: './helpers/browser/wasm-loader', + IMPORT_POLYFILL: './helpers/browser/import-polyfill', + }, + worker: { + js: './helpers/worker/js-loader', + wasm: './helpers/worker/wasm-loader', + IMPORT_POLYFILL: false, + }, + node: { + css: './helpers/node/css-loader', + html: './helpers/node/html-loader', + js: './helpers/node/js-loader', + wasm: './helpers/node/wasm-loader', + IMPORT_POLYFILL: null, + }, +}; + +function getLoaders( + ctx: Environment, +): ?{[string]: string, IMPORT_POLYFILL: null | false | string, ...} { + if (ctx.isWorker()) return LOADERS.worker; + if (ctx.isBrowser()) return LOADERS.browser; + if (ctx.isNode()) return LOADERS.node; + return null; +} + +// This cache should be invalidated if new dependencies get added to the bundle without the bundle objects changing +// This can happen when we reuse the BundleGraph between subsequent builds +let bundleDependencies = new WeakMap< + NamedBundle, + {| + asyncDependencies: Array, + otherDependencies: Array, + |}, +>(); + +export default (new Runtime({ + apply({bundle, bundleGraph, options}) { + // Dependency ids in code replaced with referenced bundle names + // Loader runtime added for bundle groups that don't have a native loader (e.g. HTML/CSS/Worker - isURL?), + // and which are not loaded by a parent bundle. + // Loaders also added for modules that were moved to a separate bundle because they are a different type + // (e.g. WASM, HTML). These should be preloaded prior to the bundle being executed. Replace the entry asset(s) + // with the preload module. + + if (bundle.type !== 'js') { + return; + } + + let {asyncDependencies, otherDependencies} = getDependencies(bundle); + + let assets = []; + for (let dependency of asyncDependencies) { + let resolved = bundleGraph.resolveAsyncDependency(dependency, bundle); + if (resolved == null) { + continue; + } + + if (resolved.type === 'asset') { + if (!bundle.env.shouldScopeHoist) { + // If this bundle already has the asset this dependency references, + // return a simple runtime of `Promise.resolve(internalRequire(assetId))`. + // The linker handles this for scope-hoisting. + assets.push({ + filePath: __filename, + code: `module.exports = Promise.resolve(parcelRequire(${JSON.stringify( + bundleGraph.getAssetPublicId(resolved.value), + )}))`, + dependency, + env: {sourceType: 'module'}, + }); + } + } else { + // Resolve the dependency to a bundle. If inline, export the dependency id, + // which will be replaced with the contents of that bundle later. + let referencedBundle = bundleGraph.getReferencedBundle( + dependency, + bundle, + ); + if (referencedBundle?.bundleBehavior === 'inline') { + assets.push({ + filePath: path.join( + __dirname, + `/bundles/${referencedBundle.id}.js`, + ), + code: `module.exports = Promise.resolve(${JSON.stringify( + dependency.id, + )});`, + dependency, + env: {sourceType: 'module'}, + }); + continue; + } + + let loaderRuntime = getLoaderRuntime({ + bundle, + dependency, + bundleGraph, + bundleGroup: resolved.value, + options, + }); + + if (loaderRuntime != null) { + assets.push(loaderRuntime); + } + } + } + + for (let dependency of otherDependencies) { + // Resolve the dependency to a bundle. If inline, export the dependency id, + // which will be replaced with the contents of that bundle later. + let referencedBundle = bundleGraph.getReferencedBundle( + dependency, + bundle, + ); + if (referencedBundle?.bundleBehavior === 'inline') { + assets.push({ + filePath: path.join(__dirname, `/bundles/${referencedBundle.id}.js`), + code: `module.exports = ${JSON.stringify(dependency.id)};`, + dependency, + env: {sourceType: 'module'}, + }); + continue; + } + + // Otherwise, try to resolve the dependency to an external bundle group + // and insert a URL to that bundle. + let resolved = bundleGraph.resolveAsyncDependency(dependency, bundle); + if (dependency.specifierType === 'url' && resolved == null) { + // If a URL dependency was not able to be resolved, add a runtime that + // exports the original specifier. + assets.push({ + filePath: __filename, + code: `module.exports = ${JSON.stringify(dependency.specifier)}`, + dependency, + env: {sourceType: 'module'}, + }); + continue; + } + + if (resolved == null || resolved.type !== 'bundle_group') { + continue; + } + + let bundleGroup = resolved.value; + let mainBundle = nullthrows( + bundleGraph.getBundlesInBundleGroup(bundleGroup).find(b => { + let entries = b.getEntryAssets(); + return entries.some(e => bundleGroup.entryAssetId === e.id); + }), + ); + + // Skip URL runtimes for library builds. This is handled in packaging so that + // the url is inlined and statically analyzable. + if (bundle.env.isLibrary && mainBundle.bundleBehavior !== 'isolated') { + continue; + } + + // URL dependency or not, fall back to including a runtime that exports the url + assets.push(getURLRuntime(dependency, bundle, mainBundle, options)); + } + + // In development, bundles can be created lazily. This means that the parent bundle may not + // know about all of the sibling bundles of a child when it is written for the first time. + // Therefore, we need to also ensure that the siblings are loaded when the child loads. + if (options.shouldBuildLazily && bundle.env.outputFormat === 'global') { + let referenced = bundleGraph.getReferencedBundles(bundle); + for (let referencedBundle of referenced) { + let loaders = getLoaders(bundle.env); + if (!loaders) { + continue; + } + + let loader = loaders[referencedBundle.type]; + if (!loader) { + continue; + } + + let relativePathExpr = getRelativePathExpr( + bundle, + referencedBundle, + options, + ); + let loaderCode = `require(${JSON.stringify( + loader, + )})( ${getAbsoluteUrlExpr(relativePathExpr, bundle)})`; + assets.push({ + filePath: __filename, + code: loaderCode, + isEntry: true, + env: {sourceType: 'module'}, + }); + } + } + + if ( + shouldUseRuntimeManifest(bundle, options) && + bundleGraph + .getChildBundles(bundle) + .some(b => b.bundleBehavior !== 'inline') && + isNewContext(bundle, bundleGraph) + ) { + assets.push({ + filePath: __filename, + code: getRegisterCode(bundle, bundleGraph), + isEntry: true, + env: {sourceType: 'module'}, + }); + } + + return assets; + }, +}): Runtime); + +function getDependencies(bundle: NamedBundle): {| + asyncDependencies: Array, + otherDependencies: Array, +|} { + let cachedDependencies = bundleDependencies.get(bundle); + + if (cachedDependencies) { + return cachedDependencies; + } else { + let asyncDependencies = []; + let otherDependencies = []; + bundle.traverse(node => { + if (node.type !== 'dependency') { + return; + } + + let dependency = node.value; + if ( + dependency.priority === 'lazy' && + dependency.specifierType !== 'url' + ) { + asyncDependencies.push(dependency); + } else { + otherDependencies.push(dependency); + } + }); + bundleDependencies.set(bundle, {asyncDependencies, otherDependencies}); + return {asyncDependencies, otherDependencies}; + } +} + +function getLoaderRuntime({ + bundle, + dependency, + bundleGroup, + bundleGraph, + options, +}: {| + bundle: NamedBundle, + dependency: Dependency, + bundleGroup: BundleGroup, + bundleGraph: BundleGraph, + options: PluginOptions, +|}): ?RuntimeAsset { + let loaders = getLoaders(bundle.env); + if (loaders == null) { + return; + } + + let externalBundles = bundleGraph.getBundlesInBundleGroup(bundleGroup); + let mainBundle = nullthrows( + externalBundles.find( + bundle => bundle.getMainEntry()?.id === bundleGroup.entryAssetId, + ), + ); + + // CommonJS is a synchronous module system, so there is no need to load bundles in parallel. + // Importing of the other bundles will be handled by the bundle group entry. + // Do the same thing in library mode for ES modules, as we are building for another bundler + // and the imports for sibling bundles will be in the target bundle. + + // Previously we also did this when building lazily, however it seemed to cause issues in some cases. + // The original comment as to why is left here, in case a future traveller is trying to fix that issue: + // > [...] the runtime itself could get deduplicated and only exist in the parent. This causes errors if an + // > old version of the parent without the runtime + // > is already loaded. + if (bundle.env.outputFormat === 'commonjs' || bundle.env.isLibrary) { + externalBundles = [mainBundle]; + } else { + // Otherwise, load the bundle group entry after the others. + externalBundles.splice(externalBundles.indexOf(mainBundle), 1); + externalBundles.reverse().push(mainBundle); + } + + // Determine if we need to add a dynamic import() polyfill, or if all target browsers support it natively. + let needsDynamicImportPolyfill = + !bundle.env.isLibrary && !bundle.env.supports('dynamic-import', true); + + let needsEsmLoadPrelude = false; + let loaderModules = []; + + for (let to of externalBundles) { + let loader = loaders[to.type]; + if (!loader) { + continue; + } + + if ( + to.type === 'js' && + to.env.outputFormat === 'esmodule' && + !needsDynamicImportPolyfill && + shouldUseRuntimeManifest(bundle, options) + ) { + loaderModules.push(`load(${JSON.stringify(to.publicId)})`); + needsEsmLoadPrelude = true; + continue; + } + + let relativePathExpr = getRelativePathExpr(bundle, to, options); + + // Use esmodule loader if possible + if (to.type === 'js' && to.env.outputFormat === 'esmodule') { + if (!needsDynamicImportPolyfill) { + loaderModules.push(`__parcel__import__("./" + ${relativePathExpr})`); + continue; + } + + loader = nullthrows( + loaders.IMPORT_POLYFILL, + `No import() polyfill available for context '${bundle.env.context}'`, + ); + } else if (to.type === 'js' && to.env.outputFormat === 'commonjs') { + loaderModules.push( + `Promise.resolve(__parcel__require__("./" + ${relativePathExpr}))`, + ); + continue; + } + + let absoluteUrlExpr = shouldUseRuntimeManifest(bundle, options) + ? `require('./helpers/bundle-manifest').resolve(${JSON.stringify( + to.publicId, + )})` + : getAbsoluteUrlExpr(relativePathExpr, bundle); + let code = `require(${JSON.stringify(loader)})(${absoluteUrlExpr})`; + + // In development, clear the require cache when an error occurs so the + // user can try again (e.g. after fixing a build error). + if ( + options.mode === 'development' && + bundle.env.outputFormat === 'global' + ) { + code += + '.catch(err => {delete module.bundle.cache[module.id]; throw err;})'; + } + loaderModules.push(code); + } + + // Similar to the comment above, this also used to be skipped when shouldBuildLazily was true, + // however it caused issues where a bundle group contained multiple bundles. + if (bundle.env.context === 'browser') { + loaderModules.push( + ...externalBundles + // TODO: Allow css to preload resources as well + .filter(to => to.type === 'js') + .flatMap(from => { + let {preload, prefetch} = getHintedBundleGroups(bundleGraph, from); + + return [ + ...getHintLoaders( + bundleGraph, + bundle, + preload, + BROWSER_PRELOAD_LOADER, + options, + ), + ...getHintLoaders( + bundleGraph, + bundle, + prefetch, + BROWSER_PREFETCH_LOADER, + options, + ), + ]; + }), + ); + } + + if (loaderModules.length === 0) { + return; + } + + let loaderCode = loaderModules.join(', '); + if (loaderModules.length > 1) { + loaderCode = `Promise.all([${loaderCode}])`; + } else { + loaderCode = `(${loaderCode})`; + } + + if (mainBundle.type === 'js') { + loaderCode += `.then(() => parcelRequire('${bundleGraph.getAssetPublicId( + bundleGraph.getAssetById(bundleGroup.entryAssetId), + )}'))`; + } + + if (needsEsmLoadPrelude && options.featureFlags.importRetry) { + loaderCode = ` + Object.defineProperty(module, 'exports', { get: () => { + let load = require('./helpers/browser/esm-js-loader-retry'); + return ${loaderCode}.then((v) => { + Object.defineProperty(module, "exports", { value: Promise.resolve(v) }) + return v + }); + }})`; + + return { + filePath: __filename, + code: loaderCode, + dependency, + env: {sourceType: 'module'}, + }; + } + + let code = []; + + if (needsEsmLoadPrelude) { + code.push(`let load = require('./helpers/browser/esm-js-loader');`); + } + + code.push(`module.exports = ${loaderCode};`); + + return { + filePath: __filename, + code: code.join('\n'), + dependency, + env: {sourceType: 'module'}, + }; +} + +function getHintedBundleGroups( + bundleGraph: BundleGraph, + bundle: NamedBundle, +): {|preload: Array, prefetch: Array|} { + let preload = []; + let prefetch = []; + let {asyncDependencies} = getDependencies(bundle); + for (let dependency of asyncDependencies) { + let attributes = dependency.meta?.importAttributes; + if ( + typeof attributes === 'object' && + attributes != null && + // $FlowFixMe + (attributes.preload || attributes.prefetch) + ) { + let resolved = bundleGraph.resolveAsyncDependency(dependency, bundle); + if (resolved?.type === 'bundle_group') { + // === true for flow + if (attributes.preload === true) { + preload.push(resolved.value); + } + if (attributes.prefetch === true) { + prefetch.push(resolved.value); + } + } + } + } + + return {preload, prefetch}; +} + +function getHintLoaders( + bundleGraph: BundleGraph, + from: NamedBundle, + bundleGroups: Array, + loader: string, + options: PluginOptions, +): Array { + let hintLoaders = []; + for (let bundleGroupToPreload of bundleGroups) { + let bundlesToPreload = + bundleGraph.getBundlesInBundleGroup(bundleGroupToPreload); + + for (let bundleToPreload of bundlesToPreload) { + let relativePathExpr = getRelativePathExpr( + from, + bundleToPreload, + options, + ); + let priority = TYPE_TO_RESOURCE_PRIORITY[bundleToPreload.type]; + hintLoaders.push( + `require(${JSON.stringify(loader)})(${getAbsoluteUrlExpr( + relativePathExpr, + from, + )}, ${priority ? JSON.stringify(priority) : 'null'}, ${JSON.stringify( + bundleToPreload.target.env.outputFormat === 'esmodule', + )})`, + ); + } + } + + return hintLoaders; +} + +function isNewContext( + bundle: NamedBundle, + bundleGraph: BundleGraph, +): boolean { + let parents = bundleGraph.getParentBundles(bundle); + let isInEntryBundleGroup = bundleGraph + .getBundleGroupsContainingBundle(bundle) + .some(g => bundleGraph.isEntryBundleGroup(g)); + return ( + isInEntryBundleGroup || + parents.length === 0 || + parents.some( + parent => + parent.env.context !== bundle.env.context || parent.type !== 'js', + ) + ); +} + +function getURLRuntime( + dependency: Dependency, + from: NamedBundle, + to: NamedBundle, + options: PluginOptions, +): RuntimeAsset { + let relativePathExpr = getRelativePathExpr(from, to, options, true); + let code; + + if (dependency.meta.webworker === true && !from.env.isLibrary) { + code = `let workerURL = require('./helpers/get-worker-url');\n`; + if ( + from.env.outputFormat === 'esmodule' && + from.env.supports('import-meta-url') + ) { + code += `let url = new __parcel__URL__(${relativePathExpr});\n`; + code += `module.exports = workerURL(url.toString(), url.origin, ${String( + from.env.outputFormat === 'esmodule', + )});`; + } else { + code += `let bundleURL = require('./helpers/bundle-url');\n`; + code += `let url = bundleURL.getBundleURL('${from.publicId}') + ${relativePathExpr};`; + code += `module.exports = workerURL(url, bundleURL.getOrigin(url), ${String( + from.env.outputFormat === 'esmodule', + )});`; + } + } else { + code = `module.exports = ${getAbsoluteUrlExpr(relativePathExpr, from)};`; + } + + return { + filePath: __filename, + code, + dependency, + env: {sourceType: 'module'}, + }; +} + +function getRegisterCode( + entryBundle: NamedBundle, + bundleGraph: BundleGraph, +): string { + let mappings = []; + bundleGraph.traverseBundles((bundle, _, actions) => { + if (bundle.bundleBehavior === 'inline') { + return; + } + + // To make the manifest as small as possible all bundle key/values are + // serialised into a single array e.g. ['id', 'value', 'id2', 'value2']. + // `./helpers/bundle-manifest` accounts for this by iterating index by 2 + mappings.push( + bundle.publicId, + relativeBundlePath(entryBundle, nullthrows(bundle), { + leadingDotSlash: false, + }), + ); + + if (bundle !== entryBundle && isNewContext(bundle, bundleGraph)) { + for (let referenced of bundleGraph.getReferencedBundles(bundle)) { + mappings.push( + referenced.publicId, + relativeBundlePath(entryBundle, nullthrows(referenced), { + leadingDotSlash: false, + }), + ); + } + // New contexts have their own manifests, so there's no need to continue. + actions.skipChildren(); + } + }, entryBundle); + + let baseUrl = + entryBundle.env.outputFormat === 'esmodule' && + entryBundle.env.supports('import-meta-url') + ? 'new __parcel__URL__("").toString()' // <-- this isn't ideal. We should use `import.meta.url` directly but it gets replaced currently + : `require('./helpers/bundle-url').getBundleURL('${entryBundle.publicId}')`; + + return `require('./helpers/bundle-manifest').register(${baseUrl},JSON.parse(${JSON.stringify( + JSON.stringify(mappings), + )}));`; +} + +function getRelativePathExpr( + from: NamedBundle, + to: NamedBundle, + options: PluginOptions, + isURL = to.type !== 'js', +): string { + let relativePath = relativeBundlePath(from, to, {leadingDotSlash: false}); + let res = JSON.stringify(relativePath); + if (isURL && options.hmrOptions) { + res += ' + "?" + Date.now()'; + } + + return res; +} + +function getAbsoluteUrlExpr(relativePathExpr: string, bundle: NamedBundle) { + if ( + (bundle.env.outputFormat === 'esmodule' && + bundle.env.supports('import-meta-url')) || + bundle.env.outputFormat === 'commonjs' + ) { + // This will be compiled to new URL(url, import.meta.url) or new URL(url, 'file:' + __filename). + return `new __parcel__URL__(${relativePathExpr}).toString()`; + } else { + return `require('./helpers/bundle-url').getBundleURL('${bundle.publicId}') + ${relativePathExpr}`; + } +} + +function shouldUseRuntimeManifest( + bundle: NamedBundle, + options: PluginOptions, +): boolean { + let env = bundle.env; + return ( + !env.isLibrary && + bundle.bundleBehavior !== 'inline' && + env.isBrowser() && + options.mode === 'production' + ); +} diff --git a/node_modules/@parcel/runtime-js/src/helpers/.babelrc b/node_modules/@parcel/runtime-js/src/helpers/.babelrc new file mode 100644 index 00000000..b3a9d5d0 --- /dev/null +++ b/node_modules/@parcel/runtime-js/src/helpers/.babelrc @@ -0,0 +1,9 @@ +{ + "presets": [ + ["@babel/preset-env", { + "targets": { + "ie": 11 + } + }] + ] +} diff --git a/node_modules/@parcel/runtime-js/src/helpers/.eslintrc.json b/node_modules/@parcel/runtime-js/src/helpers/.eslintrc.json new file mode 100644 index 00000000..3dfbc794 --- /dev/null +++ b/node_modules/@parcel/runtime-js/src/helpers/.eslintrc.json @@ -0,0 +1,3 @@ +{ + "extends": "@parcel/eslint-config-browser" +} diff --git a/node_modules/@parcel/runtime-js/src/helpers/browser/css-loader.js b/node_modules/@parcel/runtime-js/src/helpers/browser/css-loader.js new file mode 100644 index 00000000..6d8bede8 --- /dev/null +++ b/node_modules/@parcel/runtime-js/src/helpers/browser/css-loader.js @@ -0,0 +1,32 @@ +const cacheLoader = require('../cacheLoader'); + +module.exports = cacheLoader(function loadCSSBundle(bundle) { + return new Promise(function (resolve, reject) { + // Don't insert the same link element twice (e.g. if it was already in the HTML) + let existingLinks = document.getElementsByTagName('link'); + let isCurrentBundle = function (link) { + return link.href === bundle && link.rel.indexOf('stylesheet') > -1; + }; + + if ([].concat(existingLinks).some(isCurrentBundle)) { + resolve(); + return; + } + + var link = document.createElement('link'); + link.rel = 'stylesheet'; + link.href = bundle; + link.onerror = function (e) { + link.onerror = link.onload = null; + link.remove(); + reject(e); + }; + + link.onload = function () { + link.onerror = link.onload = null; + resolve(); + }; + + document.getElementsByTagName('head')[0].appendChild(link); + }); +}); diff --git a/node_modules/@parcel/runtime-js/src/helpers/browser/esm-js-loader-retry.js b/node_modules/@parcel/runtime-js/src/helpers/browser/esm-js-loader-retry.js new file mode 100644 index 00000000..1f729b6b --- /dev/null +++ b/node_modules/@parcel/runtime-js/src/helpers/browser/esm-js-loader-retry.js @@ -0,0 +1,26 @@ +async function load(id) { + if (!parcelRequire.retryState) { + parcelRequire.retryState = {}; + } + + if (!globalThis.navigator.onLine) { + await new Promise(res => + globalThis.addEventListener('online', res, {once: true}), + ); + } + + let url = require('../bundle-manifest').resolve(id); + + if (parcelRequire.retryState[id] != undefined) { + url = `${url}?retry=${parcelRequire.retryState[id]}`; + } + + try { + // eslint-disable-next-line no-undef + return await __parcel__import__(url); + } catch (error) { + parcelRequire.retryState[id] = Date.now(); + } +} + +module.exports = load; diff --git a/node_modules/@parcel/runtime-js/src/helpers/browser/esm-js-loader.js b/node_modules/@parcel/runtime-js/src/helpers/browser/esm-js-loader.js new file mode 100644 index 00000000..69e31ad5 --- /dev/null +++ b/node_modules/@parcel/runtime-js/src/helpers/browser/esm-js-loader.js @@ -0,0 +1,6 @@ +function load(id) { + // eslint-disable-next-line no-undef + return __parcel__import__(require('../bundle-manifest').resolve(id)); +} + +module.exports = load; diff --git a/node_modules/@parcel/runtime-js/src/helpers/browser/html-loader.js b/node_modules/@parcel/runtime-js/src/helpers/browser/html-loader.js new file mode 100644 index 00000000..ece08c35 --- /dev/null +++ b/node_modules/@parcel/runtime-js/src/helpers/browser/html-loader.js @@ -0,0 +1,7 @@ +const cacheLoader = require('../cacheLoader'); + +module.exports = cacheLoader(function loadHTMLBundle(bundle) { + return fetch(bundle).then(function (res) { + return res.text(); + }); +}); diff --git a/node_modules/@parcel/runtime-js/src/helpers/browser/import-polyfill.js b/node_modules/@parcel/runtime-js/src/helpers/browser/import-polyfill.js new file mode 100644 index 00000000..d4ff6ce5 --- /dev/null +++ b/node_modules/@parcel/runtime-js/src/helpers/browser/import-polyfill.js @@ -0,0 +1,32 @@ +const cacheLoader = require('../cacheLoader'); + +module.exports = cacheLoader(function importModule(bundle) { + return new Promise((resolve, reject) => { + // Add a global function to handle when the script loads. + let globalName = `i${('' + Math.random()).slice(2)}`; + global[globalName] = m => { + resolve(m); + cleanup(); + }; + + // Remove script on load or error + let cleanup = () => { + delete global[globalName]; + script.onerror = null; + script.remove(); + }; + + // Append an inline script tag into the document head + let script = document.createElement('script'); + script.async = true; + script.type = 'module'; + script.charset = 'utf-8'; + script.textContent = `import * as m from '${bundle}'; ${globalName}(m);`; + script.onerror = function (e) { + reject(e); + cleanup(); + }; + + document.head.appendChild(script); + }); +}); diff --git a/node_modules/@parcel/runtime-js/src/helpers/browser/js-loader.js b/node_modules/@parcel/runtime-js/src/helpers/browser/js-loader.js new file mode 100644 index 00000000..0338eb79 --- /dev/null +++ b/node_modules/@parcel/runtime-js/src/helpers/browser/js-loader.js @@ -0,0 +1,42 @@ +const cacheLoader = require('../cacheLoader'); + +module.exports = cacheLoader(function loadJSBundle(bundle) { + return new Promise(function (resolve, reject) { + // Don't insert the same script twice (e.g. if it was already in the HTML) + let existingScripts = document.getElementsByTagName('script'); + let isCurrentBundle = function (script) { + return script.src === bundle; + }; + + if ([].concat(existingScripts).some(isCurrentBundle)) { + resolve(); + return; + } + + var preloadLink = document.createElement('link'); + preloadLink.href = bundle; + preloadLink.rel = 'preload'; + preloadLink.as = 'script'; + document.head.appendChild(preloadLink); + + var script = document.createElement('script'); + script.async = true; + script.type = 'text/javascript'; + script.src = bundle; + script.onerror = function (e) { + var error = new TypeError( + `Failed to fetch dynamically imported module: ${bundle}. Error: ${e.message}`, + ); + script.onerror = script.onload = null; + script.remove(); + reject(error); + }; + + script.onload = function () { + script.onerror = script.onload = null; + resolve(); + }; + + document.getElementsByTagName('head')[0].appendChild(script); + }); +}); diff --git a/node_modules/@parcel/runtime-js/src/helpers/browser/prefetch-loader.js b/node_modules/@parcel/runtime-js/src/helpers/browser/prefetch-loader.js new file mode 100644 index 00000000..5756dd7c --- /dev/null +++ b/node_modules/@parcel/runtime-js/src/helpers/browser/prefetch-loader.js @@ -0,0 +1,13 @@ +const cacheLoader = require('../cacheLoader'); + +module.exports = cacheLoader(function prefetchJSBundle(bundle, priority) { + var link = document.createElement('link'); + link.rel = 'prefetch'; + link.href = bundle; + if (priority) { + link.as = priority; + } + + document.getElementsByTagName('head')[0].appendChild(link); + return Promise.resolve(); +}, 'prefetch'); diff --git a/node_modules/@parcel/runtime-js/src/helpers/browser/preload-loader.js b/node_modules/@parcel/runtime-js/src/helpers/browser/preload-loader.js new file mode 100644 index 00000000..004b728a --- /dev/null +++ b/node_modules/@parcel/runtime-js/src/helpers/browser/preload-loader.js @@ -0,0 +1,19 @@ +const cacheLoader = require('../cacheLoader'); + +module.exports = cacheLoader(function preloadJSBundle( + bundle, + priority, + isModule, +) { + var link = document.createElement('link'); + link.charset = 'utf-8'; + link.rel = isModule ? 'modulepreload' : 'preload'; + link.href = bundle; + if (priority) { + link.as = priority; + } + + document.getElementsByTagName('head')[0].appendChild(link); + return Promise.resolve(); +}, +'preload'); diff --git a/node_modules/@parcel/runtime-js/src/helpers/browser/wasm-loader.js b/node_modules/@parcel/runtime-js/src/helpers/browser/wasm-loader.js new file mode 100644 index 00000000..72861768 --- /dev/null +++ b/node_modules/@parcel/runtime-js/src/helpers/browser/wasm-loader.js @@ -0,0 +1,17 @@ +const cacheLoader = require('../cacheLoader'); + +module.exports = cacheLoader(function loadWASMBundle(bundle) { + return fetch(bundle) + .then(function (res) { + if (WebAssembly.instantiateStreaming) { + return WebAssembly.instantiateStreaming(res); + } else { + return res.arrayBuffer().then(function (data) { + return WebAssembly.instantiate(data); + }); + } + }) + .then(function (wasmModule) { + return wasmModule.instance.exports; + }); +}); diff --git a/node_modules/@parcel/runtime-js/src/helpers/bundle-manifest.js b/node_modules/@parcel/runtime-js/src/helpers/bundle-manifest.js new file mode 100644 index 00000000..916b789e --- /dev/null +++ b/node_modules/@parcel/runtime-js/src/helpers/bundle-manifest.js @@ -0,0 +1,21 @@ +var mapping = new Map(); + +function register(baseUrl, manifest) { + for (var i = 0; i < manifest.length - 1; i += 2) { + mapping.set(manifest[i], { + baseUrl: baseUrl, + path: manifest[i + 1], + }); + } +} + +function resolve(id) { + var resolved = mapping.get(id); + if (resolved == null) { + throw new Error('Could not resolve bundle with id ' + id); + } + return new URL(resolved.path, resolved.baseUrl).toString(); +} + +module.exports.register = register; +module.exports.resolve = resolve; diff --git a/node_modules/@parcel/runtime-js/src/helpers/bundle-url.js b/node_modules/@parcel/runtime-js/src/helpers/bundle-url.js new file mode 100644 index 00000000..387da3f0 --- /dev/null +++ b/node_modules/@parcel/runtime-js/src/helpers/bundle-url.js @@ -0,0 +1,51 @@ +var bundleURL = {}; +function getBundleURLCached(id) { + var value = bundleURL[id]; + if (!value) { + value = getBundleURL(); + bundleURL[id] = value; + } + + return value; +} + +function getBundleURL() { + try { + throw new Error(); + } catch (err) { + var matches = ('' + err.stack).match( + /(https?|file|ftp|(chrome|moz|safari-web)-extension):\/\/[^)\n]+/g, + ); + if (matches) { + // The first two stack frames will be this function and getBundleURLCached. + // Use the 3rd one, which will be a runtime in the original bundle. + return getBaseURL(matches[2]); + } + } + + return '/'; +} + +function getBaseURL(url) { + return ( + ('' + url).replace( + /^((?:https?|file|ftp|(chrome|moz|safari-web)-extension):\/\/.+)\/[^/]+$/, + '$1', + ) + '/' + ); +} + +// TODO: Replace uses with `new URL(url).origin` when ie11 is no longer supported. +function getOrigin(url) { + let matches = ('' + url).match( + /(https?|file|ftp|(chrome|moz|safari-web)-extension):\/\/[^/]+/, + ); + if (!matches) { + throw new Error('Origin not found'); + } + return matches[0]; +} + +exports.getBundleURL = getBundleURLCached; +exports.getBaseURL = getBaseURL; +exports.getOrigin = getOrigin; diff --git a/node_modules/@parcel/runtime-js/src/helpers/cacheLoader.js b/node_modules/@parcel/runtime-js/src/helpers/cacheLoader.js new file mode 100644 index 00000000..9bf53e16 --- /dev/null +++ b/node_modules/@parcel/runtime-js/src/helpers/cacheLoader.js @@ -0,0 +1,29 @@ +let cachedBundles = {}; +let cachedPreloads = {}; +let cachedPrefetches = {}; + +function getCache(type) { + switch (type) { + case 'preload': + return cachedPreloads; + case 'prefetch': + return cachedPrefetches; + default: + return cachedBundles; + } +} + +module.exports = function cacheLoader(loader, type) { + return function (bundle) { + let cache = getCache(type); + + if (cache[bundle]) { + return cache[bundle]; + } + + return (cache[bundle] = loader.apply(null, arguments).catch(function (e) { + delete cache[bundle]; + throw e; + })); + }; +}; diff --git a/node_modules/@parcel/runtime-js/src/helpers/get-worker-url.js b/node_modules/@parcel/runtime-js/src/helpers/get-worker-url.js new file mode 100644 index 00000000..6b867b44 --- /dev/null +++ b/node_modules/@parcel/runtime-js/src/helpers/get-worker-url.js @@ -0,0 +1,15 @@ +module.exports = function loadWorker(workerUrl, origin, isESM) { + if (origin === self.location.origin) { + // If the worker bundle's url is on the same origin as the document, + // use the worker bundle's own url. + return workerUrl; + } else { + // Otherwise, create a blob URL which loads the worker bundle with `importScripts`. + let source = isESM + ? 'import ' + JSON.stringify(workerUrl) + ';' + : 'importScripts(' + JSON.stringify(workerUrl) + ');'; + return URL.createObjectURL( + new Blob([source], {type: 'application/javascript'}), + ); + } +}; diff --git a/node_modules/@parcel/runtime-js/src/helpers/node/css-loader.js b/node_modules/@parcel/runtime-js/src/helpers/node/css-loader.js new file mode 100644 index 00000000..06b8382f --- /dev/null +++ b/node_modules/@parcel/runtime-js/src/helpers/node/css-loader.js @@ -0,0 +1,4 @@ +// loading a CSS style is a no-op in Node.js +module.exports = function loadCSSBundle() { + return Promise.resolve(); +}; diff --git a/node_modules/@parcel/runtime-js/src/helpers/node/html-loader.js b/node_modules/@parcel/runtime-js/src/helpers/node/html-loader.js new file mode 100644 index 00000000..27d3edb8 --- /dev/null +++ b/node_modules/@parcel/runtime-js/src/helpers/node/html-loader.js @@ -0,0 +1,18 @@ +const fs = require('fs'); +const cacheLoader = require('../cacheLoader'); + +module.exports = cacheLoader(function loadHTMLBundle(bundle) { + return new Promise(function (resolve, reject) { + fs.readFile(__dirname + bundle, 'utf8', function (err, data) { + if (err) { + reject(err); + } else { + // wait for the next event loop iteration, so we are sure + // the current module is fully loaded + setImmediate(function () { + resolve(data); + }); + } + }); + }); +}); diff --git a/node_modules/@parcel/runtime-js/src/helpers/node/js-loader.js b/node_modules/@parcel/runtime-js/src/helpers/node/js-loader.js new file mode 100644 index 00000000..60c83276 --- /dev/null +++ b/node_modules/@parcel/runtime-js/src/helpers/node/js-loader.js @@ -0,0 +1,20 @@ +const fs = require('fs'); +const cacheLoader = require('../cacheLoader'); + +module.exports = cacheLoader(function loadJSBundle(bundle) { + return new Promise(function (resolve, reject) { + fs.readFile(__dirname + bundle, 'utf8', function (err, data) { + if (err) { + reject(err); + } else { + // wait for the next event loop iteration, so we are sure + // the current module is fully loaded + setImmediate(function () { + resolve(data); + }); + } + }); + }).then(function (code) { + new Function('', code)(); + }); +}); diff --git a/node_modules/@parcel/runtime-js/src/helpers/node/wasm-loader.js b/node_modules/@parcel/runtime-js/src/helpers/node/wasm-loader.js new file mode 100644 index 00000000..29b40252 --- /dev/null +++ b/node_modules/@parcel/runtime-js/src/helpers/node/wasm-loader.js @@ -0,0 +1,20 @@ +const fs = require('fs'); +const cacheLoader = require('../cacheLoader'); + +module.exports = cacheLoader(function loadWASMBundle(bundle) { + return new Promise(function (resolve, reject) { + fs.readFile(__dirname + bundle, function (err, data) { + if (err) { + reject(err); + } else { + resolve(data.buffer); + } + }); + }) + .then(function (data) { + return WebAssembly.instantiate(data); + }) + .then(function (wasmModule) { + return wasmModule.instance.exports; + }); +}); diff --git a/node_modules/@parcel/runtime-js/src/helpers/worker/js-loader.js b/node_modules/@parcel/runtime-js/src/helpers/worker/js-loader.js new file mode 100644 index 00000000..5c516885 --- /dev/null +++ b/node_modules/@parcel/runtime-js/src/helpers/worker/js-loader.js @@ -0,0 +1,13 @@ +/* global __parcel__importScripts__:readonly*/ +const cacheLoader = require('../cacheLoader'); + +module.exports = cacheLoader(function loadJSBundle(bundle) { + return new Promise(function (resolve, reject) { + try { + __parcel__importScripts__(bundle); + resolve(); + } catch (e) { + reject(e); + } + }); +}); diff --git a/node_modules/@parcel/runtime-js/src/helpers/worker/wasm-loader.js b/node_modules/@parcel/runtime-js/src/helpers/worker/wasm-loader.js new file mode 100644 index 00000000..72861768 --- /dev/null +++ b/node_modules/@parcel/runtime-js/src/helpers/worker/wasm-loader.js @@ -0,0 +1,17 @@ +const cacheLoader = require('../cacheLoader'); + +module.exports = cacheLoader(function loadWASMBundle(bundle) { + return fetch(bundle) + .then(function (res) { + if (WebAssembly.instantiateStreaming) { + return WebAssembly.instantiateStreaming(res); + } else { + return res.arrayBuffer().then(function (data) { + return WebAssembly.instantiate(data); + }); + } + }) + .then(function (wasmModule) { + return wasmModule.instance.exports; + }); +}); diff --git a/node_modules/@parcel/runtime-react-refresh/LICENSE b/node_modules/@parcel/runtime-react-refresh/LICENSE new file mode 100644 index 00000000..7fb9bc95 --- /dev/null +++ b/node_modules/@parcel/runtime-react-refresh/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017-present Devon Govett + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/@parcel/runtime-react-refresh/lib/ReactRefreshRuntime.js b/node_modules/@parcel/runtime-react-refresh/lib/ReactRefreshRuntime.js new file mode 100644 index 00000000..0ef1ac43 --- /dev/null +++ b/node_modules/@parcel/runtime-react-refresh/lib/ReactRefreshRuntime.js @@ -0,0 +1,71 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +function _plugin() { + const data = require("@parcel/plugin"); + _plugin = function () { + return data; + }; + return data; +} +function _utils() { + const data = require("@parcel/utils"); + _utils = function () { + return data; + }; + return data; +} +var _package = require("react-refresh/package.json"); +// $FlowFixMe Package json is untyped +const CODE = ` +var Refresh = require('react-refresh/runtime'); +var ErrorOverlay = require('react-error-overlay'); +window.__REACT_REFRESH_VERSION_RUNTIME = '${_package.version}'; + +Refresh.injectIntoGlobalHook(window); +window.$RefreshReg$ = function() {}; +window.$RefreshSig$ = function() { + return function(type) { + return type; + }; +}; + +ErrorOverlay.setEditorHandler(function editorHandler(errorLocation) { + let file = \`\${errorLocation.fileName}:\${errorLocation.lineNumber || 1}:\${errorLocation.colNumber || 1}\`; + fetch(\`/__parcel_launch_editor?file=\${encodeURIComponent(file)}\`); +}); + +ErrorOverlay.startReportingRuntimeErrors({ + onError: function () {}, +}); + +window.addEventListener('parcelhmraccept', () => { + ErrorOverlay.dismissRuntimeErrors(); +}); +`; +var _default = exports.default = new (_plugin().Runtime)({ + async apply({ + bundle, + options + }) { + if (bundle.type !== 'js' || !options.hmrOptions || !bundle.env.isBrowser() || bundle.env.isLibrary || bundle.env.isWorker() || bundle.env.isWorklet() || options.mode !== 'development' || bundle.env.sourceType !== 'module') { + return; + } + let entries = bundle.getEntryAssets(); + for (let entry of entries) { + var _pkg$config, _pkg$config2, _pkg$config3; + // TODO: do this in loadConfig - but it doesn't have access to the bundle... + let pkg = await (0, _utils().loadConfig)(options.inputFS, entry.filePath, ['package.json'], options.projectRoot); + if (pkg !== null && pkg !== void 0 && (_pkg$config = pkg.config) !== null && _pkg$config !== void 0 && (_pkg$config = _pkg$config.dependencies) !== null && _pkg$config !== void 0 && _pkg$config.react || pkg !== null && pkg !== void 0 && (_pkg$config2 = pkg.config) !== null && _pkg$config2 !== void 0 && (_pkg$config2 = _pkg$config2.devDependencies) !== null && _pkg$config2 !== void 0 && _pkg$config2.react || pkg !== null && pkg !== void 0 && (_pkg$config3 = pkg.config) !== null && _pkg$config3 !== void 0 && (_pkg$config3 = _pkg$config3.peerDependencies) !== null && _pkg$config3 !== void 0 && _pkg$config3.react) { + return { + filePath: __filename, + code: CODE, + isEntry: true + }; + } + } + } +}); \ No newline at end of file diff --git a/node_modules/@parcel/runtime-react-refresh/package.json b/node_modules/@parcel/runtime-react-refresh/package.json new file mode 100644 index 00000000..e95a8f34 --- /dev/null +++ b/node_modules/@parcel/runtime-react-refresh/package.json @@ -0,0 +1,29 @@ +{ + "name": "@parcel/runtime-react-refresh", + "version": "2.13.3", + "license": "MIT", + "publishConfig": { + "access": "public" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "repository": { + "type": "git", + "url": "https://github.com/parcel-bundler/parcel.git" + }, + "main": "lib/ReactRefreshRuntime.js", + "source": "src/ReactRefreshRuntime.js", + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.13.3" + }, + "dependencies": { + "@parcel/plugin": "2.13.3", + "@parcel/utils": "2.13.3", + "react-error-overlay": "6.0.9", + "react-refresh": ">=0.9 <=0.14" + }, + "gitHead": "d19b1f6bdb05eb5a3085f44daae15c0fe2709ab9" +} diff --git a/node_modules/@parcel/runtime-react-refresh/src/ReactRefreshRuntime.js b/node_modules/@parcel/runtime-react-refresh/src/ReactRefreshRuntime.js new file mode 100644 index 00000000..4c7ca176 --- /dev/null +++ b/node_modules/@parcel/runtime-react-refresh/src/ReactRefreshRuntime.js @@ -0,0 +1,72 @@ +// @flow strict-local + +import {Runtime} from '@parcel/plugin'; +import {loadConfig} from '@parcel/utils'; +// $FlowFixMe Package json is untyped +import {version} from 'react-refresh/package.json'; + +const CODE = ` +var Refresh = require('react-refresh/runtime'); +var ErrorOverlay = require('react-error-overlay'); +window.__REACT_REFRESH_VERSION_RUNTIME = '${version}'; + +Refresh.injectIntoGlobalHook(window); +window.$RefreshReg$ = function() {}; +window.$RefreshSig$ = function() { + return function(type) { + return type; + }; +}; + +ErrorOverlay.setEditorHandler(function editorHandler(errorLocation) { + let file = \`\${errorLocation.fileName}:\${errorLocation.lineNumber || 1}:\${errorLocation.colNumber || 1}\`; + fetch(\`/__parcel_launch_editor?file=\${encodeURIComponent(file)}\`); +}); + +ErrorOverlay.startReportingRuntimeErrors({ + onError: function () {}, +}); + +window.addEventListener('parcelhmraccept', () => { + ErrorOverlay.dismissRuntimeErrors(); +}); +`; + +export default (new Runtime({ + async apply({bundle, options}) { + if ( + bundle.type !== 'js' || + !options.hmrOptions || + !bundle.env.isBrowser() || + bundle.env.isLibrary || + bundle.env.isWorker() || + bundle.env.isWorklet() || + options.mode !== 'development' || + bundle.env.sourceType !== 'module' + ) { + return; + } + + let entries = bundle.getEntryAssets(); + for (let entry of entries) { + // TODO: do this in loadConfig - but it doesn't have access to the bundle... + let pkg = await loadConfig( + options.inputFS, + entry.filePath, + ['package.json'], + options.projectRoot, + ); + if ( + pkg?.config?.dependencies?.react || + pkg?.config?.devDependencies?.react || + pkg?.config?.peerDependencies?.react + ) { + return { + filePath: __filename, + code: CODE, + isEntry: true, + }; + } + } + }, +}): Runtime); diff --git a/node_modules/@parcel/runtime-service-worker/LICENSE b/node_modules/@parcel/runtime-service-worker/LICENSE new file mode 100644 index 00000000..7fb9bc95 --- /dev/null +++ b/node_modules/@parcel/runtime-service-worker/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017-present Devon Govett + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/@parcel/runtime-service-worker/lib/ServiceWorkerRuntime.js b/node_modules/@parcel/runtime-service-worker/lib/ServiceWorkerRuntime.js new file mode 100644 index 00000000..831de80c --- /dev/null +++ b/node_modules/@parcel/runtime-service-worker/lib/ServiceWorkerRuntime.js @@ -0,0 +1,59 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +function _plugin() { + const data = require("@parcel/plugin"); + _plugin = function () { + return data; + }; + return data; +} +function _utils() { + const data = require("@parcel/utils"); + _utils = function () { + return data; + }; + return data; +} +var _default = exports.default = new (_plugin().Runtime)({ + apply({ + bundle, + bundleGraph + }) { + if (bundle.env.context !== 'service-worker') { + return []; + } + let asset = bundle.traverse((node, _, actions) => { + if (node.type === 'dependency' && node.value.specifier === '@parcel/service-worker' && !bundleGraph.isDependencySkipped(node.value)) { + actions.stop(); + return bundleGraph.getResolvedAsset(node.value, bundle); + } + }); + if (!asset) { + return []; + } + let manifest = []; + bundleGraph.traverseBundles(b => { + if (b.bundleBehavior === 'inline' || b.id === bundle.id) { + return; + } + manifest.push((0, _utils().urlJoin)(b.target.publicUrl, b.name)); + }); + let code = `import {_register} from '@parcel/service-worker'; +const manifest = ${JSON.stringify(manifest)}; +const version = ${JSON.stringify(bundle.hashReference)}; +_register(manifest, version); +`; + return [{ + filePath: asset.filePath, + code, + isEntry: true, + env: { + sourceType: 'module' + } + }]; + } +}); \ No newline at end of file diff --git a/node_modules/@parcel/runtime-service-worker/package.json b/node_modules/@parcel/runtime-service-worker/package.json new file mode 100644 index 00000000..fdbb1a03 --- /dev/null +++ b/node_modules/@parcel/runtime-service-worker/package.json @@ -0,0 +1,28 @@ +{ + "name": "@parcel/runtime-service-worker", + "version": "2.13.3", + "license": "MIT", + "publishConfig": { + "access": "public" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "repository": { + "type": "git", + "url": "https://github.com/parcel-bundler/parcel.git" + }, + "main": "./lib/ServiceWorkerRuntime.js", + "source": "./src/ServiceWorkerRuntime.js", + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.13.3" + }, + "dependencies": { + "@parcel/plugin": "2.13.3", + "@parcel/utils": "2.13.3", + "nullthrows": "^1.1.1" + }, + "gitHead": "d19b1f6bdb05eb5a3085f44daae15c0fe2709ab9" +} diff --git a/node_modules/@parcel/runtime-service-worker/src/ServiceWorkerRuntime.js b/node_modules/@parcel/runtime-service-worker/src/ServiceWorkerRuntime.js new file mode 100644 index 00000000..2aa01b0b --- /dev/null +++ b/node_modules/@parcel/runtime-service-worker/src/ServiceWorkerRuntime.js @@ -0,0 +1,50 @@ +// @flow +import {Runtime} from '@parcel/plugin'; +import {urlJoin} from '@parcel/utils'; + +export default (new Runtime({ + apply({bundle, bundleGraph}) { + if (bundle.env.context !== 'service-worker') { + return []; + } + + let asset = bundle.traverse((node, _, actions) => { + if ( + node.type === 'dependency' && + node.value.specifier === '@parcel/service-worker' && + !bundleGraph.isDependencySkipped(node.value) + ) { + actions.stop(); + return bundleGraph.getResolvedAsset(node.value, bundle); + } + }); + + if (!asset) { + return []; + } + + let manifest = []; + bundleGraph.traverseBundles(b => { + if (b.bundleBehavior === 'inline' || b.id === bundle.id) { + return; + } + + manifest.push(urlJoin(b.target.publicUrl, b.name)); + }); + + let code = `import {_register} from '@parcel/service-worker'; +const manifest = ${JSON.stringify(manifest)}; +const version = ${JSON.stringify(bundle.hashReference)}; +_register(manifest, version); +`; + + return [ + { + filePath: asset.filePath, + code, + isEntry: true, + env: {sourceType: 'module'}, + }, + ]; + }, +}): Runtime); diff --git a/node_modules/@parcel/rust/LICENSE b/node_modules/@parcel/rust/LICENSE new file mode 100644 index 00000000..7fb9bc95 --- /dev/null +++ b/node_modules/@parcel/rust/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017-present Devon Govett + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/@parcel/rust/browser.js b/node_modules/@parcel/rust/browser.js new file mode 100644 index 00000000..82e46f91 --- /dev/null +++ b/node_modules/@parcel/rust/browser.js @@ -0,0 +1,54 @@ +const {Environment, napi} = require('napi-wasm'); + +let env; +module.exports.init = async function init(input) { + if (env) return; + + input = input ?? new URL('parcel_node_bindings.wasm', import.meta.url); + const {instance} = await WebAssembly.instantiateStreaming(fetch(input), { + env: { + ...napi, + __getrandom_custom: (ptr, len) => { + let buf = env.memory.subarray(ptr, ptr + len); + crypto.getRandomValues(buf); + }, + log: (ptr, len) => { + // eslint-disable-next-line no-console + console.log(env.getString(ptr, len)); + }, + }, + }); + + // input = + // input ?? require('path').join(__dirname, 'parcel_node_bindings.wasm'); + // const {instance} = await WebAssembly.instantiate( + // require('fs').readFileSync(input), + // { + // env: napi, + // }, + // ); + + for (let key in instance.exports) { + if (key.startsWith('__napi_register__')) { + instance.exports[key](); + } + } + + env = new Environment(instance); + + for (let key in env.exports) { + if (key !== 'transform') { + module.exports[key] = env.exports[key]; + } + } + module.exports.transform = function (config) { + let result = env.exports.transform(config); + return { + ...result, + // Hydrate Uint8Array into Buffer + code: Buffer.from(result.code), + }; + }; + + env.exports.initPanicHook(); +}; diff --git a/node_modules/@parcel/rust/index.d.ts b/node_modules/@parcel/rust/index.d.ts new file mode 100644 index 00000000..da0b7e10 --- /dev/null +++ b/node_modules/@parcel/rust/index.d.ts @@ -0,0 +1,78 @@ +/* tslint:disable */ +/* eslint-disable */ + +/* auto-generated by NAPI-RS */ + +export interface JsMacroError { + kind: number + message: string +} +export declare function findAncestorFile(filenames: Array, from: string, root: string): string | null +export declare function findFirstFile(names: Array): string | null +export declare function findNodeModule(module: string, from: string): string | null +export declare function hashString(s: string): string +export declare function hashBuffer(buf: Buffer): string +export declare function optimizeImage(kind: string, buf: Buffer): Buffer +export interface JsFileSystemOptions { + read: (...args: any[]) => any + readLink: (...args: any[]) => any + kind: (...args: any[]) => any + includeNodeModules?: NapiSideEffectsVariants +} +export interface FileSystem { + fs?: JsFileSystemOptions + includeNodeModules?: NapiSideEffectsVariants + conditions?: number + moduleDirResolver?: (...args: any[]) => any + mode: number + entries?: number + extensions?: Array + packageExports: boolean + typescript?: boolean +} +export interface ResolveOptions { + filename: string + specifierType: string + parent: string + packageConditions?: Array +} +export interface FilePathCreateInvalidation { + filePath: string +} +export interface FileNameCreateInvalidation { + fileName: string + aboveFilePath: string +} +export interface GlobCreateInvalidation { + glob: string +} +export interface ResolveResult { + resolution: unknown + invalidateOnFileChange: Array + invalidateOnFileCreate: Array + query?: string + sideEffects: boolean + error: unknown + moduleType: number +} +export interface JsInvalidations { + invalidateOnFileChange: Array + invalidateOnFileCreate: Array + invalidateOnStartup: boolean +} +export declare function transform(opts: object): unknown +export declare function transformAsync(opts: object): object +export declare class Hash { + constructor() + writeString(s: string): void + writeBuffer(buf: Buffer): void + finish(): string +} +export declare class Resolver { + constructor(projectRoot: string, options: FileSystem) + resolve(options: ResolveOptions): ResolveResult + resolveAsync(): object + resolveAsync(options: ResolveOptions): object + getInvalidations(path: string): JsInvalidations + getInvalidations(path: string): JsInvalidations +} diff --git a/node_modules/@parcel/rust/index.js b/node_modules/@parcel/rust/index.js new file mode 100644 index 00000000..6f70ab4b --- /dev/null +++ b/node_modules/@parcel/rust/index.js @@ -0,0 +1,324 @@ +/* tslint:disable */ +/* eslint-disable */ +/* prettier-ignore */ + +/* auto-generated by NAPI-RS */ + +const { existsSync, readFileSync } = require('fs') +const { join } = require('path') + +const { platform, arch } = process + +let nativeBinding = null +let localFileExisted = false +let loadError = null + +function isMusl() { + // For Node 10 + if (!process.report || typeof process.report.getReport !== 'function') { + try { + const lddPath = require('child_process').execSync('which ldd').toString().trim() + return readFileSync(lddPath, 'utf8').includes('musl') + } catch (e) { + return true + } + } else { + const { glibcVersionRuntime } = process.report.getReport().header + return !glibcVersionRuntime + } +} + +switch (platform) { + case 'android': + switch (arch) { + case 'arm64': + localFileExisted = existsSync(join(__dirname, 'parcel-node-bindings.android-arm64.node')) + try { + if (localFileExisted) { + nativeBinding = require('./parcel-node-bindings.android-arm64.node') + } else { + nativeBinding = require('@parcel/rust-android-arm64') + } + } catch (e) { + loadError = e + } + break + case 'arm': + localFileExisted = existsSync(join(__dirname, 'parcel-node-bindings.android-arm-eabi.node')) + try { + if (localFileExisted) { + nativeBinding = require('./parcel-node-bindings.android-arm-eabi.node') + } else { + nativeBinding = require('@parcel/rust-android-arm-eabi') + } + } catch (e) { + loadError = e + } + break + default: + throw new Error(`Unsupported architecture on Android ${arch}`) + } + break + case 'win32': + switch (arch) { + case 'x64': + localFileExisted = existsSync( + join(__dirname, 'parcel-node-bindings.win32-x64-msvc.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./parcel-node-bindings.win32-x64-msvc.node') + } else { + nativeBinding = require('@parcel/rust-win32-x64-msvc') + } + } catch (e) { + loadError = e + } + break + case 'ia32': + localFileExisted = existsSync( + join(__dirname, 'parcel-node-bindings.win32-ia32-msvc.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./parcel-node-bindings.win32-ia32-msvc.node') + } else { + nativeBinding = require('@parcel/rust-win32-ia32-msvc') + } + } catch (e) { + loadError = e + } + break + case 'arm64': + localFileExisted = existsSync( + join(__dirname, 'parcel-node-bindings.win32-arm64-msvc.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./parcel-node-bindings.win32-arm64-msvc.node') + } else { + nativeBinding = require('@parcel/rust-win32-arm64-msvc') + } + } catch (e) { + loadError = e + } + break + default: + throw new Error(`Unsupported architecture on Windows: ${arch}`) + } + break + case 'darwin': + localFileExisted = existsSync(join(__dirname, 'parcel-node-bindings.darwin-universal.node')) + try { + if (localFileExisted) { + nativeBinding = require('./parcel-node-bindings.darwin-universal.node') + } else { + nativeBinding = require('@parcel/rust-darwin-universal') + } + break + } catch {} + switch (arch) { + case 'x64': + localFileExisted = existsSync(join(__dirname, 'parcel-node-bindings.darwin-x64.node')) + try { + if (localFileExisted) { + nativeBinding = require('./parcel-node-bindings.darwin-x64.node') + } else { + nativeBinding = require('@parcel/rust-darwin-x64') + } + } catch (e) { + loadError = e + } + break + case 'arm64': + localFileExisted = existsSync( + join(__dirname, 'parcel-node-bindings.darwin-arm64.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./parcel-node-bindings.darwin-arm64.node') + } else { + nativeBinding = require('@parcel/rust-darwin-arm64') + } + } catch (e) { + loadError = e + } + break + default: + throw new Error(`Unsupported architecture on macOS: ${arch}`) + } + break + case 'freebsd': + if (arch !== 'x64') { + throw new Error(`Unsupported architecture on FreeBSD: ${arch}`) + } + localFileExisted = existsSync(join(__dirname, 'parcel-node-bindings.freebsd-x64.node')) + try { + if (localFileExisted) { + nativeBinding = require('./parcel-node-bindings.freebsd-x64.node') + } else { + nativeBinding = require('@parcel/rust-freebsd-x64') + } + } catch (e) { + loadError = e + } + break + case 'linux': + switch (arch) { + case 'x64': + if (isMusl()) { + localFileExisted = existsSync( + join(__dirname, 'parcel-node-bindings.linux-x64-musl.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./parcel-node-bindings.linux-x64-musl.node') + } else { + nativeBinding = require('@parcel/rust-linux-x64-musl') + } + } catch (e) { + loadError = e + } + } else { + localFileExisted = existsSync( + join(__dirname, 'parcel-node-bindings.linux-x64-gnu.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./parcel-node-bindings.linux-x64-gnu.node') + } else { + nativeBinding = require('@parcel/rust-linux-x64-gnu') + } + } catch (e) { + loadError = e + } + } + break + case 'arm64': + if (isMusl()) { + localFileExisted = existsSync( + join(__dirname, 'parcel-node-bindings.linux-arm64-musl.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./parcel-node-bindings.linux-arm64-musl.node') + } else { + nativeBinding = require('@parcel/rust-linux-arm64-musl') + } + } catch (e) { + loadError = e + } + } else { + localFileExisted = existsSync( + join(__dirname, 'parcel-node-bindings.linux-arm64-gnu.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./parcel-node-bindings.linux-arm64-gnu.node') + } else { + nativeBinding = require('@parcel/rust-linux-arm64-gnu') + } + } catch (e) { + loadError = e + } + } + break + case 'arm': + if (isMusl()) { + localFileExisted = existsSync( + join(__dirname, 'parcel-node-bindings.linux-arm-musleabihf.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./parcel-node-bindings.linux-arm-musleabihf.node') + } else { + nativeBinding = require('@parcel/rust-linux-arm-musleabihf') + } + } catch (e) { + loadError = e + } + } else { + localFileExisted = existsSync( + join(__dirname, 'parcel-node-bindings.linux-arm-gnueabihf.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./parcel-node-bindings.linux-arm-gnueabihf.node') + } else { + nativeBinding = require('@parcel/rust-linux-arm-gnueabihf') + } + } catch (e) { + loadError = e + } + } + break + case 'riscv64': + if (isMusl()) { + localFileExisted = existsSync( + join(__dirname, 'parcel-node-bindings.linux-riscv64-musl.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./parcel-node-bindings.linux-riscv64-musl.node') + } else { + nativeBinding = require('@parcel/rust-linux-riscv64-musl') + } + } catch (e) { + loadError = e + } + } else { + localFileExisted = existsSync( + join(__dirname, 'parcel-node-bindings.linux-riscv64-gnu.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./parcel-node-bindings.linux-riscv64-gnu.node') + } else { + nativeBinding = require('@parcel/rust-linux-riscv64-gnu') + } + } catch (e) { + loadError = e + } + } + break + case 's390x': + localFileExisted = existsSync( + join(__dirname, 'parcel-node-bindings.linux-s390x-gnu.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./parcel-node-bindings.linux-s390x-gnu.node') + } else { + nativeBinding = require('@parcel/rust-linux-s390x-gnu') + } + } catch (e) { + loadError = e + } + break + default: + throw new Error(`Unsupported architecture on Linux: ${arch}`) + } + break + default: + throw new Error(`Unsupported OS: ${platform}, architecture: ${arch}`) +} + +if (!nativeBinding) { + if (loadError) { + throw loadError + } + throw new Error(`Failed to load native binding`) +} + +const { findAncestorFile, findFirstFile, findNodeModule, hashString, hashBuffer, Hash, optimizeImage, Resolver, transform, transformAsync } = nativeBinding + +module.exports.findAncestorFile = findAncestorFile +module.exports.findFirstFile = findFirstFile +module.exports.findNodeModule = findNodeModule +module.exports.hashString = hashString +module.exports.hashBuffer = hashBuffer +module.exports.Hash = Hash +module.exports.optimizeImage = optimizeImage +module.exports.Resolver = Resolver +module.exports.transform = transform +module.exports.transformAsync = transformAsync diff --git a/node_modules/@parcel/rust/index.js.flow b/node_modules/@parcel/rust/index.js.flow new file mode 100644 index 00000000..4470c5e6 --- /dev/null +++ b/node_modules/@parcel/rust/index.js.flow @@ -0,0 +1,83 @@ +// @flow +import type {FileCreateInvalidation} from '@parcel/types'; + +declare export var init: void | (() => void); + +declare export function findAncestorFile( + filenames: Array, + from: string, + root: string, +): string | null; +declare export function findFirstFile(names: Array): string | null; +declare export function findNodeModule( + module: string, + from: string, +): string | null; +declare export function hashString(s: string): string; +declare export function hashBuffer(buf: Buffer): string; +declare export function optimizeImage(kind: string, buf: Buffer): Buffer; +export interface JsFileSystemOptions { + readLink: string => string; + read: string => Buffer; + kind: string => number; + includeNodeModules?: boolean | Array | {|[string]: boolean|}; +} +export interface FileSystem { + fs?: JsFileSystemOptions, + includeNodeModules?: boolean | Array | {|[string]: boolean|}; + conditions?: number, + moduleDirResolver?: (...args: any[]) => any, + mode: number, + entries?: number, + extensions?: Array, + packageExports: boolean +} +export interface ResolveOptions { + filename: string; + specifierType: string; + parent: string; + packageConditions?: Array; +} +export type Resolution = + | {|type: 'Path', value: string|} + | {|type: 'Builtin', value: string|} + | {|type: 'External'|} + | {|type: 'Empty'|} + | {|type: 'Global', value: string|}; + +export interface ResolveResult { + resolution: Resolution; + invalidateOnFileChange: Array; + invalidateOnFileCreate: Array; + query?: string; + sideEffects: boolean; + error: mixed; + moduleType: number; +} +export interface JsInvalidations { + invalidateOnFileChange: Array; + invalidateOnFileCreate: Array; + invalidateOnStartup: boolean; +} +declare export function transform(opts: any): any; +declare export function transformAsync(opts: any): Promise; +declare export class Hash { + writeString(s: string): void; + writeBuffer(b: Buffer): void; + finish(): string; +} +export interface ResolverOptions { + fs?: JsFileSystemOptions; + includeNodeModules?: boolean | Array | {|[string]: boolean|}; + conditions?: number; + moduleDirResolver?: (...args: any[]) => any; + mode: number; + entries?: number; + extensions?: Array; +} +declare export class Resolver { + constructor(projectRoot: string, options: ResolverOptions): Resolver; + resolve(options: ResolveOptions): ResolveResult; + resolveAsync(options: ResolveOptions): Promise; + getInvalidations(path: string): JsInvalidations; +} diff --git a/node_modules/@parcel/rust/package.json b/node_modules/@parcel/rust/package.json new file mode 100644 index 00000000..62190bcc --- /dev/null +++ b/node_modules/@parcel/rust/package.json @@ -0,0 +1,44 @@ +{ + "name": "@parcel/rust", + "version": "2.13.3", + "license": "MIT", + "publishConfig": { + "access": "public" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "repository": { + "type": "git", + "url": "https://github.com/parcel-bundler/parcel.git" + }, + "main": "index.js", + "browser": "browser.js", + "napi": { + "name": "parcel-node-bindings" + }, + "engines": { + "node": ">= 16.0.0" + }, + "files": [ + "browser.js", + "index.d.ts", + "index.js", + "index.js.flow", + "*.node", + "*.wasm" + ], + "devDependencies": { + "@napi-rs/cli": "^2.15.2", + "napi-wasm": "^1.1.2" + }, + "scripts": { + "build": "napi build --platform --cargo-cwd ../../../crates/node-bindings", + "build-canary": "napi build --platform --profile canary --cargo-cwd ../../../crates/node-bindings", + "build-release": "napi build --platform --release --cargo-cwd ../../../crates/node-bindings", + "wasm:build": "cargo build -p parcel-node-bindings --target wasm32-unknown-unknown && cp ../../../target/wasm32-unknown-unknown/debug/parcel_node_bindings.wasm .", + "wasm:build-release": "CARGO_PROFILE_RELEASE_LTO=true cargo build -p parcel-node-bindings --target wasm32-unknown-unknown --release && wasm-opt --strip-debug -O ../../../target/wasm32-unknown-unknown/release/parcel_node_bindings.wasm -o parcel_node_bindings.wasm" + }, + "gitHead": "d19b1f6bdb05eb5a3085f44daae15c0fe2709ab9" +} diff --git a/node_modules/@parcel/rust/parcel-node-bindings.darwin-arm64.node b/node_modules/@parcel/rust/parcel-node-bindings.darwin-arm64.node new file mode 100644 index 00000000..40530bc8 Binary files /dev/null and b/node_modules/@parcel/rust/parcel-node-bindings.darwin-arm64.node differ diff --git a/node_modules/@parcel/rust/parcel-node-bindings.darwin-x64.node b/node_modules/@parcel/rust/parcel-node-bindings.darwin-x64.node new file mode 100644 index 00000000..62ca0cdb Binary files /dev/null and b/node_modules/@parcel/rust/parcel-node-bindings.darwin-x64.node differ diff --git a/node_modules/@parcel/rust/parcel-node-bindings.linux-arm-gnueabihf.node b/node_modules/@parcel/rust/parcel-node-bindings.linux-arm-gnueabihf.node new file mode 100644 index 00000000..aeb2b4ee Binary files /dev/null and b/node_modules/@parcel/rust/parcel-node-bindings.linux-arm-gnueabihf.node differ diff --git a/node_modules/@parcel/rust/parcel-node-bindings.linux-arm64-gnu.node b/node_modules/@parcel/rust/parcel-node-bindings.linux-arm64-gnu.node new file mode 100644 index 00000000..3e85bdde Binary files /dev/null and b/node_modules/@parcel/rust/parcel-node-bindings.linux-arm64-gnu.node differ diff --git a/node_modules/@parcel/rust/parcel-node-bindings.linux-arm64-musl.node b/node_modules/@parcel/rust/parcel-node-bindings.linux-arm64-musl.node new file mode 100644 index 00000000..e6b4cc24 Binary files /dev/null and b/node_modules/@parcel/rust/parcel-node-bindings.linux-arm64-musl.node differ diff --git a/node_modules/@parcel/rust/parcel-node-bindings.linux-x64-gnu.node b/node_modules/@parcel/rust/parcel-node-bindings.linux-x64-gnu.node new file mode 100755 index 00000000..e2d4375a Binary files /dev/null and b/node_modules/@parcel/rust/parcel-node-bindings.linux-x64-gnu.node differ diff --git a/node_modules/@parcel/rust/parcel-node-bindings.linux-x64-musl.node b/node_modules/@parcel/rust/parcel-node-bindings.linux-x64-musl.node new file mode 100644 index 00000000..48ece42f Binary files /dev/null and b/node_modules/@parcel/rust/parcel-node-bindings.linux-x64-musl.node differ diff --git a/node_modules/@parcel/rust/parcel-node-bindings.win32-x64-msvc.node b/node_modules/@parcel/rust/parcel-node-bindings.win32-x64-msvc.node new file mode 100644 index 00000000..d90c06e0 Binary files /dev/null and b/node_modules/@parcel/rust/parcel-node-bindings.win32-x64-msvc.node differ diff --git a/node_modules/@parcel/source-map/README.md b/node_modules/@parcel/source-map/README.md new file mode 100644 index 00000000..3e936403 --- /dev/null +++ b/node_modules/@parcel/source-map/README.md @@ -0,0 +1,128 @@ +# Parcel's source-map library + +A source map library purpose-build for the Parcel bundler with a focus on fast combining and manipulating of source-maps. + +To learn more about how sourcemaps are formatted and how they work, you can have a look at the [SourceMap Specification](https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k). + +## How to use this library? + +If you want to use this library in your project or are looking to write a Parcel plugin with sourcemap support this should explain how you could get started. + +For more information we have added doctypes to each function of the SourceMap class so you can have an in depth look at what everything does. + +### Creating a SourceMap instance + +You can create a sourcemap from another sourcemap or by creating it one mapping at a time. + +#### Creating from existing sourcemap + +To create a sourcemap from an existing sourcemap you have to ensure it is a JS Object first by asking for the object version from whichever transpiler you're running or by parsing the serialised map using `JSON.parse` or any other JSON parser. + +After this you can call the function `addVLQMap(map, lineOffset, columnOffset)` this function takes in the parameters `map`, `lineOffset` and `columnOffset`. The map argument corresponds to the sourcemap object. The line and column offset are optional parameters used for offsetting the generated line and column. (this can be used when post-processing or wrapping the code linked to the sourcemap, in Parcel this is used when combining maps). + +Example: + +```JS +import SourceMap from '@parcel/source-map'; + +const RAW_SOURCEMAP = { + version: 3, + file: "helloworld.js", + sources: ["helloworld.coffee"], + names: [], + mappings: "AAAA;AAAA,EAAA,OAAO,CAAC,GAAR,CAAY,aAAZ,CAAA,CAAA;AAAA", +}; + +let sourcemap = new SourceMap(); +sourcemap.addVLQMap(RAW_SOURCEMAP); + +// This function removes the underlying references in the native code +sourcemap.delete(); +``` + +#### Creating a sourcemap one mapping at a time + +If you want to use this library to create a sourcemap from scratch you can, for this you can call the `addIndexedMapping(mapping, lineOffset, columnOffset)` function. + +Example: + +```JS +import SourceMap from '@parcel/source-map'; + +let sourcemap = new SourceMap(); + +// Add a single mapping +sourcemap.addIndexedMapping({ + generated: { + // line index starts at 1 + line: 1, + // column index starts at 0 + column: 4 + }, + original: { + // line index starts at 1 + line: 1, + // column index starts at 0 + column: 4 + }, + source: 'index.js', + // Name is optional + name: 'A' +}); + +// This function removes the underlying references in the native code +sourcemap.delete(); +``` + +### Caching + +For caching sourcemaps we have a `toBuffer()` function which returns a buffer that can be saved on disk for later use and combining sourcemaps very quickly. + +You can add a cached map to a SourceMap instance using the `addBuffer(buffer, lineOffset)` function, where you can also offset the generated line and column. + +## Inspiration and purpose + +### Why did we write this library + +Parcel is a performance conscious bundler, and therefore we like to optimise Parcel's performance as much as possible. + +Our original source-map implementation used mozilla's source-map and a bunch of javascript and had issues with memory usage and serialization times (we were keeping all mappings in memory using JS objects and write/read it using JSON for caching). + +This implementation has been written from scratch in Rust minimizing the memory usage, by utilizing indexes for sources and names and optimizing serialization times by using Buffers instead of JSON for caching. + +### Previous works and inspiration + +Without these libraries this library wouldn't be as good as it is today. We've inspired and optimized our code using ideas and patterns used inside these libraries as well as used it to figure out how sourcemaps should be handled properly. + +- [source-map by Mozilla](https://github.com/mozilla/source-map) +- [source-map-mappings by Nick Fitzgerald](https://github.com/fitzgen/source-map-mappings) +- [sourcemap-codec by Rich Harris](https://github.com/Rich-Harris/sourcemap-codec) + +## Contributing to this library + +All contributions to this library are welcome as is with any part of Parcel's vast collection of libraries and tools. + +### Prerequisites + +To be able to build and work on this project you need to have the following tools installed: + +- [`node.js`](https://nodejs.org/en/) +- [`Rust`](https://rustup.rs/) + +### Building the project + +For development purposes you might want to build or rebuild the project, for this you need to build the N-API module and JS Code. + +To do this run the following commands: (for more information about this you can have a look in `./package.json` and `./Makefile`) + +```shell +yarn transpile && yarn build:node +``` + +### Tagging a release + +Before you're able to tag a release ensure to have cargo-release installed `cargo install cargo-release`, we use it to tag the cargo files with a release tag. + +```shell +yarn tag-release +``` diff --git a/node_modules/@parcel/source-map/dist/SourceMap.js b/node_modules/@parcel/source-map/dist/SourceMap.js new file mode 100644 index 00000000..dd4308b4 --- /dev/null +++ b/node_modules/@parcel/source-map/dist/SourceMap.js @@ -0,0 +1,483 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; + +var _path = _interopRequireDefault(require("path")); + +var _utils = require("./utils"); + +var _package = require("../package.json"); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } + +class SourceMap { + /** + * @private + */ + + /** + * @private + */ + + /** + * Construct a SourceMap instance + * + * @param projectRoot root directory of the project, this is to ensure all source paths are relative to this path + */ + constructor(projectRoot = '/', buffer) { + _defineProperty(this, "sourceMapInstance", void 0); + + _defineProperty(this, "projectRoot", void 0); + } // Use this to invalidate saved buffers, we don't check versioning at all in Rust + + + get libraryVersion() { + return _package.version; + } + /** + * Generates an empty map from the provided fileName and sourceContent + * + * @param sourceName path of the source file + * @param sourceContent content of the source file + * @param lineOffset an offset that gets added to the sourceLine index of each mapping + */ + + + static generateEmptyMap({ + projectRoot, + sourceName, + sourceContent, + lineOffset = 0 + }) { + throw new Error('SourceMap.generateEmptyMap() must be implemented when extending SourceMap'); + } + /** + * Generates an empty map from the provided fileName and sourceContent + * + * @param sourceName path of the source file + * @param sourceContent content of the source file + * @param lineOffset an offset that gets added to the sourceLine index of each mapping + */ + + + addEmptyMap(sourceName, sourceContent, lineOffset = 0) { + this.sourceMapInstance.addEmptyMap(sourceName, sourceContent, lineOffset); + return this; + } + /** + * Appends raw VLQ mappings to the sourcemaps + */ + + + addVLQMap(map, lineOffset = 0, columnOffset = 0) { + throw new Error('SourceMap.addVLQMap() must be implemented when extending SourceMap'); + } + /** + * Appends another sourcemap instance to this sourcemap + * + * @param buffer the sourcemap buffer that should get appended to this sourcemap + * @param lineOffset an offset that gets added to the sourceLine index of each mapping + */ + + + addSourceMap(sourcemap, lineOffset = 0) { + throw new Error('Not implemented by child class'); + } + /** + * Appends a buffer to this sourcemap + * Note: The buffer should be generated by this library + * @param buffer the sourcemap buffer that should get appended to this sourcemap + * @param lineOffset an offset that gets added to the sourceLine index of each mapping + */ + + + addBuffer(buffer, lineOffset = 0) { + throw new Error('Not implemented by child class'); + } + /** + * Appends a Mapping object to this sourcemap + * Note: line numbers start at 1 due to mozilla's source-map library + * + * @param mapping the mapping that should be appended to this sourcemap + * @param lineOffset an offset that gets added to the sourceLine index of each mapping + * @param columnOffset an offset that gets added to the sourceColumn index of each mapping + */ + + + addIndexedMapping(mapping, lineOffset = 0, columnOffset = 0) { + // Not sure if it'll be worth it to add this back to C++, wrapping it in an array probably doesn't do that much harm in JS? + // Also we barely use this function anyway... + this.addIndexedMappings([mapping], lineOffset, columnOffset); + } + + _indexedMappingsToInt32Array(mappings, lineOffset = 0, columnOffset = 0) { + // Encode all mappings into a single typed array and make one call + // to C++ instead of one for each mapping to improve performance. + let mappingBuffer = new Int32Array(mappings.length * 6); + let sources = new Map(); + let names = new Map(); + let i = 0; + + for (let mapping of mappings) { + let hasValidOriginal = mapping.original && typeof mapping.original.line === 'number' && !isNaN(mapping.original.line) && typeof mapping.original.column === 'number' && !isNaN(mapping.original.column); + mappingBuffer[i++] = mapping.generated.line + lineOffset - 1; + mappingBuffer[i++] = mapping.generated.column + columnOffset; // $FlowFixMe + + mappingBuffer[i++] = hasValidOriginal ? mapping.original.line - 1 : -1; // $FlowFixMe + + mappingBuffer[i++] = hasValidOriginal ? mapping.original.column : -1; + let sourceIndex = mapping.source ? sources.get(mapping.source) : -1; + + if (sourceIndex == null) { + // $FlowFixMe + sourceIndex = this.addSource(mapping.source); // $FlowFixMe + + sources.set(mapping.source, sourceIndex); + } + + mappingBuffer[i++] = sourceIndex; + let nameIndex = mapping.name ? names.get(mapping.name) : -1; + + if (nameIndex == null) { + // $FlowFixMe + nameIndex = this.addName(mapping.name); // $FlowFixMe + + names.set(mapping.name, nameIndex); + } + + mappingBuffer[i++] = nameIndex; + } + + return mappingBuffer; + } + /** + * Appends an array of Mapping objects to this sourcemap + * This is useful when improving performance if a library provides the non-serialised mappings + * + * Note: This is only faster if they generate the serialised map lazily + * Note: line numbers start at 1 due to mozilla's source-map library + * + * @param mappings an array of mapping objects + * @param lineOffset an offset that gets added to the sourceLine index of each mapping + * @param columnOffset an offset that gets added to the sourceColumn index of each mapping + */ + + + addIndexedMappings(mappings, lineOffset = 0, columnOffset = 0) { + let mappingBuffer = this._indexedMappingsToInt32Array(mappings, lineOffset, columnOffset); + + this.sourceMapInstance.addIndexedMappings(mappingBuffer); + return this; + } + /** + * Appends a name to the sourcemap + * + * @param name the name that should be appended to the names array + * @returns the index of the added name in the names array + */ + + + addName(name) { + return this.sourceMapInstance.addName(name); + } + /** + * Appends an array of names to the sourcemap's names array + * + * @param names an array of names to add to the sourcemap + * @returns an array of indexes of the names in the sourcemap's names array, has the same order as the provided names array + */ + + + addNames(names) { + return names.map(n => this.addName(n)); + } + /** + * Appends a source to the sourcemap's sources array + * + * @param source a filepath that should be appended to the sources array + * @returns the index of the added source filepath in the sources array + */ + + + addSource(source) { + return this.sourceMapInstance.addSource(source); + } + /** + * Appends an array of sources to the sourcemap's sources array + * + * @param sources an array of filepaths which should sbe appended to the sources array + * @returns an array of indexes of the sources that have been added to the sourcemap, returned in the same order as provided in the argument + */ + + + addSources(sources) { + return sources.map(s => this.addSource(s)); + } + /** + * Get the index in the sources array for a certain source file filepath + * + * @param source the filepath of the source file + */ + + + getSourceIndex(source) { + return this.sourceMapInstance.getSourceIndex(source); + } + /** + * Get the source file filepath for a certain index of the sources array + * + * @param index the index of the source in the sources array + */ + + + getSource(index) { + return this.sourceMapInstance.getSource(index); + } + /** + * Get a list of all sources + */ + + + getSources() { + return this.sourceMapInstance.getSources(); + } + /** + * Set the sourceContent for a certain file + * this is optional and is only recommended for files that we cannot read in at the end when we serialise the sourcemap + * + * @param sourceName the path of the sourceFile + * @param sourceContent the content of the sourceFile + */ + + + setSourceContent(sourceName, sourceContent) { + return this.sourceMapInstance.setSourceContentBySource(sourceName, sourceContent); + } + /** + * Get the content of a source file if it is inlined as part of the source-map + * + * @param sourceName filename + */ + + + getSourceContent(sourceName) { + return this.sourceMapInstance.getSourceContentBySource(sourceName); + } + /** + * Get a list of all sources + */ + + + getSourcesContent() { + return this.sourceMapInstance.getSourcesContent(); + } + /** + * Get a map of the source and it's corresponding source content + */ + + + getSourcesContentMap() { + let sources = this.getSources(); + let sourcesContent = this.getSourcesContent(); + let results = {}; + + for (let i = 0; i < sources.length; i++) { + results[sources[i]] = sourcesContent[i] || null; + } + + return results; + } + /** + * Get the index in the names array for a certain name + * + * @param name the name you want to find the index of + */ + + + getNameIndex(name) { + return this.sourceMapInstance.getNameIndex(name); + } + /** + * Get the name for a certain index of the names array + * + * @param index the index of the name in the names array + */ + + + getName(index) { + return this.sourceMapInstance.getName(index); + } + /** + * Get a list of all names + */ + + + getNames() { + return this.sourceMapInstance.getNames(); + } + /** + * Get a list of all mappings + */ + + + getMappings() { + return this.sourceMapInstance.getMappings(); + } + /** + * Convert a Mapping object that uses indexes for name and source to the actual value of name and source + * + * Note: This is only used internally, should not be used externally and will probably eventually get + * handled directly in C++ for improved performance + * + * @param index the Mapping that should get converted to a string-based Mapping + */ + + + indexedMappingToStringMapping(mapping) { + if (!mapping) return mapping; + + if (mapping.source != null && mapping.source > -1) { + // $FlowFixMe + mapping.source = this.getSource(mapping.source); + } + + if (mapping.name != null && mapping.name > -1) { + // $FlowFixMe + mapping.name = this.getName(mapping.name); + } // $FlowFixMe + + + return mapping; + } + /** + * Remaps original positions from this map to the ones in the provided map + * + * This works by finding the closest generated mapping in the provided map + * to original mappings of this map and remapping those to be the original + * mapping of the provided map. + * + * @param buffer exported SourceMap as a buffer + */ + + + extends(buffer) { + throw new Error('Should be implemented by extending'); + } + /** + * Returns an object with mappings, sources and names + * This should only be used for tests, debugging and visualising sourcemaps + * + * Note: This is a fairly slow operation + */ + + + getMap() { + return { + mappings: this.getMappings(), + sources: this.getSources(), + sourcesContent: this.getSourcesContent(), + names: this.getNames() + }; + } + /** + * Searches through the sourcemap and returns a mapping that is close to the provided generated line and column + * + * @param line the line in the generated code (starts at 1) + * @param column the column in the generated code (starts at 0) + */ + + + findClosestMapping(line, column) { + let mapping = this.sourceMapInstance.findClosestMapping(line - 1, column); + + if (mapping) { + let v = this.indexedMappingToStringMapping(mapping); + return v; + } else { + return null; + } + } + /** + * Offset mapping lines from a certain position + * + * @param line the line in the generated code (starts at 1) + * @param lineOffset the amount of lines to offset mappings by + */ + + + offsetLines(line, lineOffset) { + if (line < 1 || line + lineOffset < 1) { + throw new Error('Line has to be positive'); + } + + if (lineOffset === 0) { + return; + } + + this.sourceMapInstance.offsetLines(line - 1, lineOffset); + } + /** + * Offset mapping columns from a certain position + * + * @param line the line in the generated code (starts at 1) + * @param column the column in the generated code (starts at 0) + * @param columnOffset the amount of columns to offset mappings by + */ + + + offsetColumns(line, column, columnOffset) { + if (line < 1 || column < 0 || column + columnOffset < 0) { + throw new Error('Line and Column has to be positive'); + } + + if (columnOffset === 0) { + return; + } + + this.sourceMapInstance.offsetColumns(line - 1, column, columnOffset); + } + /** + * Returns a buffer that represents this sourcemap, used for caching + */ + + + toBuffer() { + return this.sourceMapInstance.toBuffer(); + } + /** + * Returns a serialised map using VLQ Mappings + */ + + + toVLQ() { + return this.sourceMapInstance.toVLQ(); + } + /** + * A function that has to be called at the end of the SourceMap's lifecycle to ensure all memory and native bindings get de-allocated + */ + + + delete() { + throw new Error('SourceMap.delete() must be implemented when extending SourceMap'); + } + /** + * Returns a serialised map + * + * @param options options used for formatting the serialised map + */ + + + async stringify(options) { + return (0, _utils.partialVlqMapToSourceMap)(this.toVLQ(), { ...options, + rootDir: this.projectRoot || options.rootDir + }); + } + +} + +exports.default = SourceMap; \ No newline at end of file diff --git a/node_modules/@parcel/source-map/dist/SourceMap.js.flow b/node_modules/@parcel/source-map/dist/SourceMap.js.flow new file mode 100644 index 00000000..7a98d936 --- /dev/null +++ b/node_modules/@parcel/source-map/dist/SourceMap.js.flow @@ -0,0 +1,444 @@ +// @flow +import type { ParsedMap, VLQMap, SourceMapStringifyOptions, IndexedMapping, GenerateEmptyMapOptions } from './types'; + +import path from 'path'; +import { generateInlineMap, partialVlqMapToSourceMap } from './utils'; +import { version } from '../package.json'; + +export default class SourceMap { + /** + * @private + */ + sourceMapInstance: any; + + /** + * @private + */ + projectRoot: string; + + /** + * Construct a SourceMap instance + * + * @param projectRoot root directory of the project, this is to ensure all source paths are relative to this path + */ + constructor(projectRoot: string = '/', buffer?: Buffer) {} + + // Use this to invalidate saved buffers, we don't check versioning at all in Rust + get libraryVersion(): string { + return version; + } + + /** + * Generates an empty map from the provided fileName and sourceContent + * + * @param sourceName path of the source file + * @param sourceContent content of the source file + * @param lineOffset an offset that gets added to the sourceLine index of each mapping + */ + static generateEmptyMap({ + projectRoot, + sourceName, + sourceContent, + lineOffset = 0, + }: GenerateEmptyMapOptions): SourceMap { + throw new Error('SourceMap.generateEmptyMap() must be implemented when extending SourceMap'); + } + + /** + * Generates an empty map from the provided fileName and sourceContent + * + * @param sourceName path of the source file + * @param sourceContent content of the source file + * @param lineOffset an offset that gets added to the sourceLine index of each mapping + */ + addEmptyMap(sourceName: string, sourceContent: string, lineOffset: number = 0): SourceMap { + this.sourceMapInstance.addEmptyMap(sourceName, sourceContent, lineOffset); + return this; + } + + /** + * Appends raw VLQ mappings to the sourcemaps + */ + addVLQMap(map: VLQMap, lineOffset: number = 0, columnOffset: number = 0): SourceMap { + throw new Error('SourceMap.addVLQMap() must be implemented when extending SourceMap'); + } + + /** + * Appends another sourcemap instance to this sourcemap + * + * @param buffer the sourcemap buffer that should get appended to this sourcemap + * @param lineOffset an offset that gets added to the sourceLine index of each mapping + */ + addSourceMap(sourcemap: SourceMap, lineOffset: number = 0): SourceMap { + throw new Error('Not implemented by child class'); + } + + /** + * Appends a buffer to this sourcemap + * Note: The buffer should be generated by this library + * @param buffer the sourcemap buffer that should get appended to this sourcemap + * @param lineOffset an offset that gets added to the sourceLine index of each mapping + */ + addBuffer(buffer: Buffer, lineOffset: number = 0): SourceMap { + throw new Error('Not implemented by child class'); + } + + /** + * Appends a Mapping object to this sourcemap + * Note: line numbers start at 1 due to mozilla's source-map library + * + * @param mapping the mapping that should be appended to this sourcemap + * @param lineOffset an offset that gets added to the sourceLine index of each mapping + * @param columnOffset an offset that gets added to the sourceColumn index of each mapping + */ + addIndexedMapping(mapping: IndexedMapping, lineOffset?: number = 0, columnOffset?: number = 0): void { + // Not sure if it'll be worth it to add this back to C++, wrapping it in an array probably doesn't do that much harm in JS? + // Also we barely use this function anyway... + this.addIndexedMappings([mapping], lineOffset, columnOffset); + } + + _indexedMappingsToInt32Array( + mappings: Array>, + lineOffset?: number = 0, + columnOffset?: number = 0 + ): Int32Array { + // Encode all mappings into a single typed array and make one call + // to C++ instead of one for each mapping to improve performance. + let mappingBuffer = new Int32Array(mappings.length * 6); + let sources: Map = new Map(); + let names: Map = new Map(); + let i = 0; + for (let mapping of mappings) { + let hasValidOriginal = + mapping.original && + typeof mapping.original.line === 'number' && + !isNaN(mapping.original.line) && + typeof mapping.original.column === 'number' && + !isNaN(mapping.original.column); + + mappingBuffer[i++] = mapping.generated.line + lineOffset - 1; + mappingBuffer[i++] = mapping.generated.column + columnOffset; + // $FlowFixMe + mappingBuffer[i++] = hasValidOriginal ? mapping.original.line - 1 : -1; + // $FlowFixMe + mappingBuffer[i++] = hasValidOriginal ? mapping.original.column : -1; + + let sourceIndex = mapping.source ? sources.get(mapping.source) : -1; + if (sourceIndex == null) { + // $FlowFixMe + sourceIndex = this.addSource(mapping.source); + // $FlowFixMe + sources.set(mapping.source, sourceIndex); + } + mappingBuffer[i++] = sourceIndex; + + let nameIndex = mapping.name ? names.get(mapping.name) : -1; + if (nameIndex == null) { + // $FlowFixMe + nameIndex = this.addName(mapping.name); + // $FlowFixMe + names.set(mapping.name, nameIndex); + } + mappingBuffer[i++] = nameIndex; + } + + return mappingBuffer; + } + + /** + * Appends an array of Mapping objects to this sourcemap + * This is useful when improving performance if a library provides the non-serialised mappings + * + * Note: This is only faster if they generate the serialised map lazily + * Note: line numbers start at 1 due to mozilla's source-map library + * + * @param mappings an array of mapping objects + * @param lineOffset an offset that gets added to the sourceLine index of each mapping + * @param columnOffset an offset that gets added to the sourceColumn index of each mapping + */ + addIndexedMappings( + mappings: Array>, + lineOffset?: number = 0, + columnOffset?: number = 0 + ): SourceMap { + let mappingBuffer = this._indexedMappingsToInt32Array(mappings, lineOffset, columnOffset); + this.sourceMapInstance.addIndexedMappings(mappingBuffer); + return this; + } + + /** + * Appends a name to the sourcemap + * + * @param name the name that should be appended to the names array + * @returns the index of the added name in the names array + */ + addName(name: string): number { + return this.sourceMapInstance.addName(name); + } + + /** + * Appends an array of names to the sourcemap's names array + * + * @param names an array of names to add to the sourcemap + * @returns an array of indexes of the names in the sourcemap's names array, has the same order as the provided names array + */ + addNames(names: Array): Array { + return names.map((n) => this.addName(n)); + } + + /** + * Appends a source to the sourcemap's sources array + * + * @param source a filepath that should be appended to the sources array + * @returns the index of the added source filepath in the sources array + */ + addSource(source: string): number { + return this.sourceMapInstance.addSource(source); + } + + /** + * Appends an array of sources to the sourcemap's sources array + * + * @param sources an array of filepaths which should sbe appended to the sources array + * @returns an array of indexes of the sources that have been added to the sourcemap, returned in the same order as provided in the argument + */ + addSources(sources: Array): Array { + return sources.map((s) => this.addSource(s)); + } + + /** + * Get the index in the sources array for a certain source file filepath + * + * @param source the filepath of the source file + */ + getSourceIndex(source: string): number { + return this.sourceMapInstance.getSourceIndex(source); + } + + /** + * Get the source file filepath for a certain index of the sources array + * + * @param index the index of the source in the sources array + */ + getSource(index: number): string { + return this.sourceMapInstance.getSource(index); + } + + /** + * Get a list of all sources + */ + getSources(): Array { + return this.sourceMapInstance.getSources(); + } + + /** + * Set the sourceContent for a certain file + * this is optional and is only recommended for files that we cannot read in at the end when we serialise the sourcemap + * + * @param sourceName the path of the sourceFile + * @param sourceContent the content of the sourceFile + */ + setSourceContent(sourceName: string, sourceContent: string): void { + return this.sourceMapInstance.setSourceContentBySource(sourceName, sourceContent); + } + + /** + * Get the content of a source file if it is inlined as part of the source-map + * + * @param sourceName filename + */ + getSourceContent(sourceName: string): string | null { + return this.sourceMapInstance.getSourceContentBySource(sourceName); + } + + /** + * Get a list of all sources + */ + getSourcesContent(): Array { + return this.sourceMapInstance.getSourcesContent(); + } + + /** + * Get a map of the source and it's corresponding source content + */ + getSourcesContentMap(): { [key: string]: string | null } { + let sources = this.getSources(); + let sourcesContent = this.getSourcesContent(); + let results = {}; + for (let i = 0; i < sources.length; i++) { + results[sources[i]] = sourcesContent[i] || null; + } + return results; + } + + /** + * Get the index in the names array for a certain name + * + * @param name the name you want to find the index of + */ + getNameIndex(name: string): number { + return this.sourceMapInstance.getNameIndex(name); + } + + /** + * Get the name for a certain index of the names array + * + * @param index the index of the name in the names array + */ + getName(index: number): string { + return this.sourceMapInstance.getName(index); + } + + /** + * Get a list of all names + */ + getNames(): Array { + return this.sourceMapInstance.getNames(); + } + + /** + * Get a list of all mappings + */ + getMappings(): Array> { + return this.sourceMapInstance.getMappings(); + } + + /** + * Convert a Mapping object that uses indexes for name and source to the actual value of name and source + * + * Note: This is only used internally, should not be used externally and will probably eventually get + * handled directly in C++ for improved performance + * + * @param index the Mapping that should get converted to a string-based Mapping + */ + indexedMappingToStringMapping(mapping: ?IndexedMapping): ?IndexedMapping { + if (!mapping) return mapping; + + if (mapping.source != null && mapping.source > -1) { + // $FlowFixMe + mapping.source = this.getSource(mapping.source); + } + + if (mapping.name != null && mapping.name > -1) { + // $FlowFixMe + mapping.name = this.getName(mapping.name); + } + + // $FlowFixMe + return mapping; + } + + /** + * Remaps original positions from this map to the ones in the provided map + * + * This works by finding the closest generated mapping in the provided map + * to original mappings of this map and remapping those to be the original + * mapping of the provided map. + * + * @param buffer exported SourceMap as a buffer + */ + extends(buffer: Buffer | SourceMap): SourceMap { + throw new Error('Should be implemented by extending'); + } + + /** + * Returns an object with mappings, sources and names + * This should only be used for tests, debugging and visualising sourcemaps + * + * Note: This is a fairly slow operation + */ + getMap(): ParsedMap { + return { + mappings: this.getMappings(), + sources: this.getSources(), + sourcesContent: this.getSourcesContent(), + names: this.getNames(), + }; + } + + /** + * Searches through the sourcemap and returns a mapping that is close to the provided generated line and column + * + * @param line the line in the generated code (starts at 1) + * @param column the column in the generated code (starts at 0) + */ + findClosestMapping(line: number, column: number): ?IndexedMapping { + let mapping = this.sourceMapInstance.findClosestMapping(line - 1, column); + if (mapping) { + let v = this.indexedMappingToStringMapping(mapping); + return v; + } else { + return null; + } + } + + /** + * Offset mapping lines from a certain position + * + * @param line the line in the generated code (starts at 1) + * @param lineOffset the amount of lines to offset mappings by + */ + offsetLines(line: number, lineOffset: number): ?IndexedMapping { + if (line < 1 || line + lineOffset < 1) { + throw new Error('Line has to be positive'); + } + + if (lineOffset === 0) { + return; + } + + this.sourceMapInstance.offsetLines(line - 1, lineOffset); + } + + /** + * Offset mapping columns from a certain position + * + * @param line the line in the generated code (starts at 1) + * @param column the column in the generated code (starts at 0) + * @param columnOffset the amount of columns to offset mappings by + */ + offsetColumns(line: number, column: number, columnOffset: number): ?IndexedMapping { + if (line < 1 || column < 0 || column + columnOffset < 0) { + throw new Error('Line and Column has to be positive'); + } + + if (columnOffset === 0) { + return; + } + + this.sourceMapInstance.offsetColumns(line - 1, column, columnOffset); + } + + /** + * Returns a buffer that represents this sourcemap, used for caching + */ + toBuffer(): Buffer { + return this.sourceMapInstance.toBuffer(); + } + + /** + * Returns a serialised map using VLQ Mappings + */ + toVLQ(): VLQMap { + return this.sourceMapInstance.toVLQ(); + } + + /** + * A function that has to be called at the end of the SourceMap's lifecycle to ensure all memory and native bindings get de-allocated + */ + delete() { + throw new Error('SourceMap.delete() must be implemented when extending SourceMap'); + } + + /** + * Returns a serialised map + * + * @param options options used for formatting the serialised map + */ + async stringify(options: SourceMapStringifyOptions): Promise { + return partialVlqMapToSourceMap(this.toVLQ(), { + ...options, + rootDir: this.projectRoot || options.rootDir, + }); + } +} diff --git a/node_modules/@parcel/source-map/dist/node.js b/node_modules/@parcel/source-map/dist/node.js new file mode 100644 index 00000000..0b1a4fc5 --- /dev/null +++ b/node_modules/@parcel/source-map/dist/node.js @@ -0,0 +1,87 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.init = exports.default = void 0; + +var _path = _interopRequireDefault(require("path")); + +var _SourceMap = _interopRequireDefault(require("./SourceMap")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +const bindings = require('../parcel_sourcemap_node/index'); + +class NodeSourceMap extends _SourceMap.default { + constructor(projectRoot = '/', buffer) { + super(projectRoot); + this.projectRoot = projectRoot; + this.sourceMapInstance = new bindings.SourceMap(projectRoot, buffer); + } + + addVLQMap(map, lineOffset = 0, columnOffset = 0) { + let { + sourcesContent, + sources = [], + mappings, + names = [] + } = map; + + if (!sourcesContent) { + sourcesContent = sources.map(() => ''); + } else { + sourcesContent = sourcesContent.map(content => content ? content : ''); + } + + this.sourceMapInstance.addVLQMap(mappings, JSON.stringify(sources), JSON.stringify(sourcesContent.map(content => content ? content : '')), JSON.stringify(names), lineOffset, columnOffset); + return this; + } + + addSourceMap(sourcemap, lineOffset = 0) { + if (!(sourcemap.sourceMapInstance instanceof bindings.SourceMap)) { + throw new Error('The sourcemap provided to addSourceMap is not a valid sourcemap instance'); + } + + this.sourceMapInstance.addSourceMap(sourcemap.sourceMapInstance, lineOffset); + return this; + } + + addBuffer(buffer, lineOffset = 0) { + let previousMap = new NodeSourceMap(this.projectRoot, buffer); + return this.addSourceMap(previousMap, lineOffset); + } + + extends(input) { + // $FlowFixMe + let inputSourceMap = Buffer.isBuffer(input) ? new NodeSourceMap(this.projectRoot, input) : input; + this.sourceMapInstance.extends(inputSourceMap.sourceMapInstance); + return this; + } + + getNames() { + return JSON.parse(this.sourceMapInstance.getNames()); + } + + getSources() { + return JSON.parse(this.sourceMapInstance.getSources()); + } + + delete() {} + + static generateEmptyMap({ + projectRoot, + sourceName, + sourceContent, + lineOffset = 0 + }) { + let map = new NodeSourceMap(projectRoot); + map.addEmptyMap(sourceName, sourceContent, lineOffset); + return map; + } + +} + +exports.default = NodeSourceMap; +const init = Promise.resolve(); +exports.init = init; \ No newline at end of file diff --git a/node_modules/@parcel/source-map/dist/node.js.flow b/node_modules/@parcel/source-map/dist/node.js.flow new file mode 100644 index 00000000..769e9124 --- /dev/null +++ b/node_modules/@parcel/source-map/dist/node.js.flow @@ -0,0 +1,76 @@ +// @flow +import type { ParsedMap, VLQMap, SourceMapStringifyOptions, IndexedMapping, GenerateEmptyMapOptions } from './types'; +import path from 'path'; +import SourceMap from './SourceMap'; + +const bindings = require('../parcel_sourcemap_node/index'); + +export default class NodeSourceMap extends SourceMap { + constructor(projectRoot: string = '/', buffer?: Buffer) { + super(projectRoot); + this.projectRoot = projectRoot; + this.sourceMapInstance = new bindings.SourceMap(projectRoot, buffer); + } + + addVLQMap(map: VLQMap, lineOffset: number = 0, columnOffset: number = 0): SourceMap { + let { sourcesContent, sources = [], mappings, names = [] } = map; + if (!sourcesContent) { + sourcesContent = sources.map(() => ''); + } else { + sourcesContent = sourcesContent.map((content) => (content ? content : '')); + } + this.sourceMapInstance.addVLQMap( + mappings, + JSON.stringify(sources), + JSON.stringify(sourcesContent.map((content) => (content ? content : ''))), + JSON.stringify(names), + lineOffset, + columnOffset + ); + return this; + } + + addSourceMap(sourcemap: SourceMap, lineOffset: number = 0): SourceMap { + if (!(sourcemap.sourceMapInstance instanceof bindings.SourceMap)) { + throw new Error('The sourcemap provided to addSourceMap is not a valid sourcemap instance'); + } + + this.sourceMapInstance.addSourceMap(sourcemap.sourceMapInstance, lineOffset); + return this; + } + + addBuffer(buffer: Buffer, lineOffset: number = 0): SourceMap { + let previousMap = new NodeSourceMap(this.projectRoot, buffer); + return this.addSourceMap(previousMap, lineOffset); + } + + extends(input: Buffer | SourceMap): SourceMap { + // $FlowFixMe + let inputSourceMap: SourceMap = Buffer.isBuffer(input) ? new NodeSourceMap(this.projectRoot, input) : input; + this.sourceMapInstance.extends(inputSourceMap.sourceMapInstance); + return this; + } + + getNames(): Array { + return JSON.parse(this.sourceMapInstance.getNames()); + } + + getSources(): Array { + return JSON.parse(this.sourceMapInstance.getSources()); + } + + delete() {} + + static generateEmptyMap({ + projectRoot, + sourceName, + sourceContent, + lineOffset = 0, + }: GenerateEmptyMapOptions): NodeSourceMap { + let map = new NodeSourceMap(projectRoot); + map.addEmptyMap(sourceName, sourceContent, lineOffset); + return map; + } +} + +export const init: Promise = Promise.resolve(); diff --git a/node_modules/@parcel/source-map/dist/types.js b/node_modules/@parcel/source-map/dist/types.js new file mode 100644 index 00000000..9a390c31 --- /dev/null +++ b/node_modules/@parcel/source-map/dist/types.js @@ -0,0 +1 @@ +"use strict"; \ No newline at end of file diff --git a/node_modules/@parcel/source-map/dist/types.js.flow b/node_modules/@parcel/source-map/dist/types.js.flow new file mode 100644 index 00000000..92ca64d3 --- /dev/null +++ b/node_modules/@parcel/source-map/dist/types.js.flow @@ -0,0 +1,52 @@ +// @flow +export type MappingPosition = {| + line: number, + column: number, +|}; + +export type IndexedMapping = { + generated: MappingPosition, + original?: MappingPosition, + source?: T, + name?: T, + ... +}; + +export type ParsedMap = {| + sources: Array, + names: Array, + mappings: Array>, + sourcesContent: Array, +|}; + +export type VLQMap = { + +sources: $ReadOnlyArray, + +sourcesContent?: $ReadOnlyArray, + +names: $ReadOnlyArray, + +mappings: string, + +version?: number, + +file?: string, + +sourceRoot?: string, + ... +}; + +export type SourceMapStringifyOptions = { + file?: string, + sourceRoot?: string, + inlineSources?: boolean, + fs?: { readFile(path: string, encoding: string): Promise, ... }, + format?: 'inline' | 'string' | 'object', + /** + * @private + */ + rootDir?: string, + ... +}; + +export type GenerateEmptyMapOptions = { + projectRoot: string, + sourceName: string, + sourceContent: string, + lineOffset?: number, + ... +}; diff --git a/node_modules/@parcel/source-map/dist/utils.js b/node_modules/@parcel/source-map/dist/utils.js new file mode 100644 index 00000000..6a4502c1 --- /dev/null +++ b/node_modules/@parcel/source-map/dist/utils.js @@ -0,0 +1,71 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.generateInlineMap = generateInlineMap; +exports.partialVlqMapToSourceMap = partialVlqMapToSourceMap; + +var _path = _interopRequireDefault(require("path")); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function generateInlineMap(map) { + return `data:application/json;charset=utf-8;base64,${Buffer.from(map).toString('base64')}`; +} + +async function partialVlqMapToSourceMap(map, opts) { + let { + fs, + file, + sourceRoot, + inlineSources, + rootDir, + format = 'string' + } = opts; + let resultMap = { ...map, + sourcesContent: map.sourcesContent ? map.sourcesContent.map(content => { + if (content) { + return content; + } else { + return null; + } + }) : [], + version: 3, + file, + sourceRoot + }; + + if (resultMap.sourcesContent.length < resultMap.sources.length) { + for (let i = 0; i <= resultMap.sources.length - resultMap.sourcesContent.length; i++) { + resultMap.sourcesContent.push(null); + } + } + + if (fs) { + resultMap.sourcesContent = await Promise.all(resultMap.sourcesContent.map(async (content, index) => { + let sourceName = map.sources[index]; // If sourceName starts with `..` it is outside rootDir, in this case we likely cannot access this file from the browser or packaged node_module + // Because of this we have to include the sourceContent to ensure you can always see the sourcecontent for each mapping. + + if (!content && (inlineSources || sourceName.startsWith('..'))) { + try { + return await fs.readFile(_path.default.resolve(rootDir || '/', sourceName), 'utf-8'); + } catch (e) {} + } + + return content; + })); + } + + if (format === 'inline' || format === 'string') { + let stringifiedMap = JSON.stringify(resultMap); + + if (format === 'inline') { + return generateInlineMap(stringifiedMap); + } + + return stringifiedMap; + } + + return resultMap; +} \ No newline at end of file diff --git a/node_modules/@parcel/source-map/dist/utils.js.flow b/node_modules/@parcel/source-map/dist/utils.js.flow new file mode 100644 index 00000000..ce871652 --- /dev/null +++ b/node_modules/@parcel/source-map/dist/utils.js.flow @@ -0,0 +1,60 @@ +// @flow +import type { VLQMap, SourceMapStringifyOptions } from './types'; +import path from 'path'; + +export function generateInlineMap(map: string): string { + return `data:application/json;charset=utf-8;base64,${Buffer.from(map).toString('base64')}`; +} + +export async function partialVlqMapToSourceMap(map: VLQMap, opts: SourceMapStringifyOptions): Promise { + let { fs, file, sourceRoot, inlineSources, rootDir, format = 'string' } = opts; + + let resultMap = { + ...map, + sourcesContent: map.sourcesContent + ? map.sourcesContent.map((content) => { + if (content) { + return content; + } else { + return null; + } + }) + : [], + version: 3, + file, + sourceRoot, + }; + + if (resultMap.sourcesContent.length < resultMap.sources.length) { + for (let i = 0; i <= resultMap.sources.length - resultMap.sourcesContent.length; i++) { + resultMap.sourcesContent.push(null); + } + } + + if (fs) { + resultMap.sourcesContent = await Promise.all( + resultMap.sourcesContent.map(async (content, index): Promise => { + let sourceName = map.sources[index]; + // If sourceName starts with `..` it is outside rootDir, in this case we likely cannot access this file from the browser or packaged node_module + // Because of this we have to include the sourceContent to ensure you can always see the sourcecontent for each mapping. + if (!content && (inlineSources || sourceName.startsWith('..'))) { + try { + return await fs.readFile(path.resolve(rootDir || '/', sourceName), 'utf-8'); + } catch (e) {} + } + + return content; + }) + ); + } + + if (format === 'inline' || format === 'string') { + let stringifiedMap = JSON.stringify(resultMap); + if (format === 'inline') { + return generateInlineMap(stringifiedMap); + } + return stringifiedMap; + } + + return resultMap; +} diff --git a/node_modules/@parcel/source-map/dist/wasm-bindings-web.js b/node_modules/@parcel/source-map/dist/wasm-bindings-web.js new file mode 100644 index 00000000..3587da51 --- /dev/null +++ b/node_modules/@parcel/source-map/dist/wasm-bindings-web.js @@ -0,0 +1,23 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "SourceMap", { + enumerable: true, + get: function () { + return _parcel_sourcemap_wasm.SourceMap; + } +}); +Object.defineProperty(exports, "init", { + enumerable: true, + get: function () { + return _parcel_sourcemap_wasm.default; + } +}); + +var _parcel_sourcemap_wasm = _interopRequireWildcard(require("../parcel_sourcemap_wasm/dist-web/parcel_sourcemap_wasm.js")); + +function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } + +function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } \ No newline at end of file diff --git a/node_modules/@parcel/source-map/dist/wasm-bindings-web.js.flow b/node_modules/@parcel/source-map/dist/wasm-bindings-web.js.flow new file mode 100644 index 00000000..ecdaec3d --- /dev/null +++ b/node_modules/@parcel/source-map/dist/wasm-bindings-web.js.flow @@ -0,0 +1 @@ +export { SourceMap, default as init } from '../parcel_sourcemap_wasm/dist-web/parcel_sourcemap_wasm.js'; diff --git a/node_modules/@parcel/source-map/dist/wasm-bindings.js b/node_modules/@parcel/source-map/dist/wasm-bindings.js new file mode 100644 index 00000000..f9d04704 --- /dev/null +++ b/node_modules/@parcel/source-map/dist/wasm-bindings.js @@ -0,0 +1,13 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +Object.defineProperty(exports, "SourceMap", { + enumerable: true, + get: function () { + return _parcel_sourcemap_wasm.SourceMap; + } +}); + +var _parcel_sourcemap_wasm = require("../parcel_sourcemap_wasm/dist-node/parcel_sourcemap_wasm.js"); \ No newline at end of file diff --git a/node_modules/@parcel/source-map/dist/wasm-bindings.js.flow b/node_modules/@parcel/source-map/dist/wasm-bindings.js.flow new file mode 100644 index 00000000..1873f3a8 --- /dev/null +++ b/node_modules/@parcel/source-map/dist/wasm-bindings.js.flow @@ -0,0 +1 @@ +export { SourceMap } from '../parcel_sourcemap_wasm/dist-node/parcel_sourcemap_wasm.js'; diff --git a/node_modules/@parcel/source-map/dist/wasm.js b/node_modules/@parcel/source-map/dist/wasm.js new file mode 100644 index 00000000..44d9484e --- /dev/null +++ b/node_modules/@parcel/source-map/dist/wasm.js @@ -0,0 +1,86 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = exports.init = void 0; + +var _path = _interopRequireDefault(require("path")); + +var _SourceMap = _interopRequireDefault(require("./SourceMap")); + +var bindings = _interopRequireWildcard(require("./wasm-bindings")); + +function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } + +function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +const init = typeof bindings.init === 'function' ? bindings.init() : Promise.resolve(); +exports.init = init; + +class WasmSourceMap extends _SourceMap.default { + constructor(projectRoot = '/', buffer) { + super(projectRoot, buffer); + this.sourceMapInstance = new bindings.SourceMap(projectRoot, buffer); + this.projectRoot = this.sourceMapInstance.getProjectRoot(); + } + + addVLQMap(map, lineOffset = 0, columnOffset = 0) { + let { + sourcesContent, + sources = [], + mappings, + names = [] + } = map; + + if (!sourcesContent) { + sourcesContent = sources.map(() => ''); + } else { + sourcesContent = sourcesContent.map(content => content ? content : ''); + } + + this.sourceMapInstance.addVLQMap(mappings, sources, sourcesContent.map(content => content ? content : ''), names, lineOffset, columnOffset); + return this; + } + + addSourceMap(sourcemap, lineOffset = 0) { + if (!(sourcemap.sourceMapInstance instanceof bindings.SourceMap)) { + throw new Error('The sourcemap provided to addSourceMap is not a valid sourcemap instance'); + } + + this.sourceMapInstance.addSourceMap(sourcemap.sourceMapInstance, lineOffset); + return this; + } + + addBuffer(buffer, lineOffset = 0) { + let previousMap = new WasmSourceMap(this.projectRoot, buffer); + return this.addSourceMap(previousMap, lineOffset); + } + + extends(input) { + // $FlowFixMe + let inputSourceMap = input instanceof Uint8Array ? new WasmSourceMap(this.projectRoot, input) : input; + this.sourceMapInstance.extends(inputSourceMap.sourceMapInstance); + return this; + } + + delete() { + this.sourceMapInstance.free(); + } + + static generateEmptyMap({ + projectRoot, + sourceName, + sourceContent, + lineOffset = 0 + }) { + let map = new WasmSourceMap(projectRoot); + map.addEmptyMap(sourceName, sourceContent, lineOffset); + return map; + } + +} + +exports.default = WasmSourceMap; \ No newline at end of file diff --git a/node_modules/@parcel/source-map/dist/wasm.js.flow b/node_modules/@parcel/source-map/dist/wasm.js.flow new file mode 100644 index 00000000..8cd2b298 --- /dev/null +++ b/node_modules/@parcel/source-map/dist/wasm.js.flow @@ -0,0 +1,70 @@ +// @flow +import type { ParsedMap, VLQMap, SourceMapStringifyOptions, IndexedMapping, GenerateEmptyMapOptions } from './types'; +import path from 'path'; +import SourceMap from './SourceMap'; + +import * as bindings from './wasm-bindings'; + +export const init: Promise = typeof bindings.init === 'function' ? bindings.init() : Promise.resolve(); + +export default class WasmSourceMap extends SourceMap { + constructor(projectRoot: string = '/', buffer?: Buffer) { + super(projectRoot, buffer); + this.sourceMapInstance = new bindings.SourceMap(projectRoot, buffer); + this.projectRoot = this.sourceMapInstance.getProjectRoot(); + } + + addVLQMap(map: VLQMap, lineOffset: number = 0, columnOffset: number = 0): SourceMap { + let { sourcesContent, sources = [], mappings, names = [] } = map; + if (!sourcesContent) { + sourcesContent = sources.map(() => ''); + } else { + sourcesContent = sourcesContent.map((content) => (content ? content : '')); + } + this.sourceMapInstance.addVLQMap( + mappings, + sources, + sourcesContent.map((content) => (content ? content : '')), + names, + lineOffset, + columnOffset + ); + return this; + } + + addSourceMap(sourcemap: SourceMap, lineOffset: number = 0): SourceMap { + if (!(sourcemap.sourceMapInstance instanceof bindings.SourceMap)) { + throw new Error('The sourcemap provided to addSourceMap is not a valid sourcemap instance'); + } + + this.sourceMapInstance.addSourceMap(sourcemap.sourceMapInstance, lineOffset); + return this; + } + + addBuffer(buffer: Buffer, lineOffset: number = 0): SourceMap { + let previousMap = new WasmSourceMap(this.projectRoot, buffer); + return this.addSourceMap(previousMap, lineOffset); + } + + extends(input: Buffer | SourceMap): SourceMap { + // $FlowFixMe + let inputSourceMap: SourceMap = input instanceof Uint8Array ? new WasmSourceMap(this.projectRoot, input) : input; + this.sourceMapInstance.extends(inputSourceMap.sourceMapInstance); + return this; + } + + delete() { + this.sourceMapInstance.free(); + } + + static generateEmptyMap({ + projectRoot, + sourceName, + sourceContent, + lineOffset = 0, + }: GenerateEmptyMapOptions): WasmSourceMap { + let map = new WasmSourceMap(projectRoot); + map.addEmptyMap(sourceName, sourceContent, lineOffset); + return map; + } +} diff --git a/node_modules/@parcel/source-map/index.d.ts b/node_modules/@parcel/source-map/index.d.ts new file mode 100644 index 00000000..50461e93 --- /dev/null +++ b/node_modules/@parcel/source-map/index.d.ts @@ -0,0 +1,101 @@ +/** + * A position for a source mapping. 1-indexed. + */ +export type MappingPosition = { + line: number; + column: number; +}; + +/** +* An indexed source mapping block +*/ +export type IndexedMapping = { + generated: MappingPosition; + original?: MappingPosition; + source?: T; + name?: T; +}; + +/** +* A source map in VLQ format +*/ +export type VLQMap = Readonly<{ + sources: ReadonlyArray; + sourcesContent?: ReadonlyArray; + names: ReadonlyArray; + mappings: string; + version?: number; + file?: string; + sourceRoot?: string; +}>; + +/** +* A parsed source map +*/ +export type ParsedMap = { + sources: string[]; + names: string[]; + mappings: Array>; + sourcesContent: Array; +}; + +/** +* Options for stringifying a source map +*/ +export type SourceMapStringifyOptions = { + file?: string; + sourceRoot?: string; + rootDir?: string; + inlineSources?: boolean; + fs?: { + readFile(path: string, encoding: string): Promise; + }; + format?: 'inline' | 'string' | 'object'; +}; + +/** + * Options for creating an empty source map + */ +export type GenerateEmptyMapOptions = { + projectRoot: string; + sourceName: string; + sourceContent: string; + lineOffset?: number; +}; + +/** +* A source map to assist in debugging during development +*/ +export default class SourceMap { + constructor(projectRoot?: string, buffer?: Buffer); + static generateEmptyMap(opts: GenerateEmptyMapOptions): SourceMap; + addEmptyMap(sourceName: string, sourceContent: string, lineOffset?: number): SourceMap; + addVLQMap(map: VLQMap, lineOffset?: number, columnOffset?: number): SourceMap; + addBuffer(buffer: Buffer, lineOffset?: number): SourceMap; + addIndexedMapping(mapping: IndexedMapping, lineOffset?: number, columnOffset?: number): void; + addIndexedMappings(mappings: Array>, lineOffset?: number, columnOffset?: number): void; + addName(name: string): number; + addNames(names: string[]): number[]; + addSource(source: string): number; + addSources(sources: string[]): number[]; + getSourceIndex(source: string): number; + getSource(index: number): string; + setSourceContent(sourceName: string, sourceContent: string): void; + getSourceContent(sourceName: string): string; + getNameIndex(name: string): number; + getName(index: number): string; + extends(buffer: Buffer): SourceMap; + getMap(): ParsedMap; + findClosestMapping(line: number, column: number): IndexedMapping | undefined; + offsetLines(line: number, lineOffset: number): IndexedMapping | undefined; + offsetColumns(line: number, column: number, columnOffset: number): IndexedMapping | undefined; + toBuffer(): Buffer; + toVLQ(): VLQMap; + delete(): void; + stringify(options: SourceMapStringifyOptions): Promise; +} + +/** +* Only used by the wasm version, await this to ensure the wasm binary is loaded +*/ +export const init: Promise diff --git a/node_modules/@parcel/source-map/package.json b/node_modules/@parcel/source-map/package.json new file mode 100644 index 00000000..80230c0f --- /dev/null +++ b/node_modules/@parcel/source-map/package.json @@ -0,0 +1,89 @@ +{ + "name": "@parcel/source-map", + "version": "2.1.1", + "main": "./dist/node.js", + "types": "index.d.ts", + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/parcel-bundler/source-map.git" + }, + "scripts": { + "test": "mocha ./test/*.test.js", + "test:node": "cross-env BACKEND=node yarn test", + "test:wasm": "cross-env BACKEND=wasm yarn test", + "benchmark": "node ./bench/run", + "benchmark:node": "cross-env BACKEND=node yarn benchmark", + "benchmark:wasm": "cross-env BACKEND=wasm yarn benchmark", + "transpile": "babel ./src/*.js --out-dir ./dist && flow-copy-source -v src dist", + "build:clean": "cd ./parcel_sourcemap_node && rm -rf artifacts && mkdir artifacts", + "build:node": "yarn build:clean && node parcel_sourcemap_node/build.js", + "build:node-release": "yarn build:clean && node parcel_sourcemap_node/build.js --release", + "build:wasm-node": "wasm-pack build parcel_sourcemap_wasm --target nodejs --no-typescript --dev --out-dir dist-node", + "build:wasm-node-release": "wasm-pack build parcel_sourcemap_wasm --target nodejs --no-typescript --release --out-dir dist-node", + "build:wasm-web": "wasm-pack build parcel_sourcemap_wasm --no-typescript --target web --dev --out-dir dist-web", + "build:wasm-web-release": "wasm-pack build parcel_sourcemap_wasm --no-typescript --target web --release --out-dir dist-web", + "rebuild": "shx rm -rf build && yarn build:node", + "rebuild-all": "yarn transpile && yarn rebuild", + "prepublish": "npm run transpile", + "typecheck": "flow", + "format": "prettier --write \"./**/*.{js,md,mdx}\"", + "clean": "shx rm -rf dist build", + "tag-release": "node ./tag-release" + }, + "husky": { + "hooks": { + "pre-commit": "lint-staged" + } + }, + "lint-staged": { + "*.{js,json,md}": [ + "prettier --write" + ] + }, + "files": [ + "dist", + "index.d.ts", + "package.json", + "parcel_sourcemap_node/**/*", + "parcel_sourcemap_wasm/dist-node/**/*", + "parcel_sourcemap_wasm/dist-web/**/*", + "README.md", + "!.gitignore" + ], + "binary": { + "napi_versions": [ + 4 + ] + }, + "engines": { + "node": "^12.18.3 || >=14" + }, + "devDependencies": { + "@babel/cli": "^7.14.3", + "@babel/core": "^7.14.3", + "@babel/preset-env": "^7.14.2", + "@babel/preset-flow": "^7.13.13", + "@babel/register": "^7.13.16", + "@napi-rs/cli": "^1.0.4", + "cross-env": "^7.0.3", + "flow-bin": "^0.151.0", + "flow-copy-source": "^2.0.9", + "fs-extra": "^10.0.0", + "globby": "^11.0.3", + "husky": "6.0.0", + "lint-staged": "^11.0.0", + "mocha": "^8.4.0", + "prettier": "^2.3.0", + "shx": "^0.3.3", + "source-map": "^0.7.3", + "tiny-benchy": "^2.1.0" + }, + "dependencies": { + "detect-libc": "^1.0.3" + }, + "browser": { + "./dist/node.js": "./dist/wasm.js", + "./dist/wasm-bindings.js": "./dist/wasm-bindings-web.js" + } +} \ No newline at end of file diff --git a/node_modules/@parcel/source-map/parcel_sourcemap_node/Cargo.toml b/node_modules/@parcel/source-map/parcel_sourcemap_node/Cargo.toml new file mode 100644 index 00000000..5c54e737 --- /dev/null +++ b/node_modules/@parcel/source-map/parcel_sourcemap_node/Cargo.toml @@ -0,0 +1,22 @@ +[package] +authors = ["Jasper De Moor "] +edition = "2018" +name = "parcel_sourcemap_node" +version = "2.1.1" + +[lib] +crate-type = ["cdylib"] + +[dependencies] +napi = {version = "1.7.3", features = ["napi4", "serde-json"]} +napi-derive = "1.1.0" +parcel_sourcemap = {path = "../parcel_sourcemap"} +serde = "1" +serde_json = "1" +rkyv = "0.7.38" + +[target.'cfg(target_os = "macos")'.dependencies] +jemallocator = {version = "0.3.2", features = ["disable_initial_exec_tls"]} + +[build-dependencies] +napi-build = "1.0.2" diff --git a/node_modules/@parcel/source-map/parcel_sourcemap_node/artifacts/index.darwin-arm64.node b/node_modules/@parcel/source-map/parcel_sourcemap_node/artifacts/index.darwin-arm64.node new file mode 100644 index 00000000..967d09a2 Binary files /dev/null and b/node_modules/@parcel/source-map/parcel_sourcemap_node/artifacts/index.darwin-arm64.node differ diff --git a/node_modules/@parcel/source-map/parcel_sourcemap_node/artifacts/index.darwin-x64.node b/node_modules/@parcel/source-map/parcel_sourcemap_node/artifacts/index.darwin-x64.node new file mode 100644 index 00000000..0691ac32 Binary files /dev/null and b/node_modules/@parcel/source-map/parcel_sourcemap_node/artifacts/index.darwin-x64.node differ diff --git a/node_modules/@parcel/source-map/parcel_sourcemap_node/artifacts/index.linux-arm-gnueabihf.node b/node_modules/@parcel/source-map/parcel_sourcemap_node/artifacts/index.linux-arm-gnueabihf.node new file mode 100644 index 00000000..96e7b25e Binary files /dev/null and b/node_modules/@parcel/source-map/parcel_sourcemap_node/artifacts/index.linux-arm-gnueabihf.node differ diff --git a/node_modules/@parcel/source-map/parcel_sourcemap_node/artifacts/index.linux-arm64-gnu.node b/node_modules/@parcel/source-map/parcel_sourcemap_node/artifacts/index.linux-arm64-gnu.node new file mode 100644 index 00000000..214aba4e Binary files /dev/null and b/node_modules/@parcel/source-map/parcel_sourcemap_node/artifacts/index.linux-arm64-gnu.node differ diff --git a/node_modules/@parcel/source-map/parcel_sourcemap_node/artifacts/index.linux-arm64-musl.node b/node_modules/@parcel/source-map/parcel_sourcemap_node/artifacts/index.linux-arm64-musl.node new file mode 100644 index 00000000..8b56cfd8 Binary files /dev/null and b/node_modules/@parcel/source-map/parcel_sourcemap_node/artifacts/index.linux-arm64-musl.node differ diff --git a/node_modules/@parcel/source-map/parcel_sourcemap_node/artifacts/index.linux-x64-gnu.node b/node_modules/@parcel/source-map/parcel_sourcemap_node/artifacts/index.linux-x64-gnu.node new file mode 100644 index 00000000..b045dca6 Binary files /dev/null and b/node_modules/@parcel/source-map/parcel_sourcemap_node/artifacts/index.linux-x64-gnu.node differ diff --git a/node_modules/@parcel/source-map/parcel_sourcemap_node/artifacts/index.linux-x64-musl.node b/node_modules/@parcel/source-map/parcel_sourcemap_node/artifacts/index.linux-x64-musl.node new file mode 100644 index 00000000..4279fb3e Binary files /dev/null and b/node_modules/@parcel/source-map/parcel_sourcemap_node/artifacts/index.linux-x64-musl.node differ diff --git a/node_modules/@parcel/source-map/parcel_sourcemap_node/artifacts/index.win32-x64-msvc.node b/node_modules/@parcel/source-map/parcel_sourcemap_node/artifacts/index.win32-x64-msvc.node new file mode 100644 index 00000000..3b1b5474 Binary files /dev/null and b/node_modules/@parcel/source-map/parcel_sourcemap_node/artifacts/index.win32-x64-msvc.node differ diff --git a/node_modules/@parcel/source-map/parcel_sourcemap_node/build.js b/node_modules/@parcel/source-map/parcel_sourcemap_node/build.js new file mode 100644 index 00000000..d701178e --- /dev/null +++ b/node_modules/@parcel/source-map/parcel_sourcemap_node/build.js @@ -0,0 +1,46 @@ +const { spawn, execSync } = require('child_process'); + +let release = process.argv.includes('--release'); +build().catch((err) => { + console.error(err); + process.exit(1); +}); + +async function build() { + if (process.platform === 'darwin') { + setupMacBuild(); + } + + await new Promise((resolve, reject) => { + let args = ['build', '--platform', '-c', '../package.json', './artifacts']; + if (release) { + args.push('--release'); + } + + if (process.env.RUST_TARGET) { + args.push('--target', process.env.RUST_TARGET); + } + + let yarn = spawn('napi', args, { + stdio: 'inherit', + cwd: __dirname, + shell: true, + }); + + yarn.on('error', reject); + yarn.on('close', resolve); + }); +} + +// This forces Clang/LLVM to be used as a C compiler instead of GCC. +// This is necessary for cross-compilation for Apple Silicon in GitHub Actions. +function setupMacBuild() { + process.env.CC = execSync('xcrun -f clang', { encoding: 'utf8' }).trim(); + process.env.CXX = execSync('xcrun -f clang++', { encoding: 'utf8' }).trim(); + + let sysRoot = execSync('xcrun --sdk macosx --show-sdk-path', { + encoding: 'utf8', + }).trim(); + process.env.CFLAGS = `-isysroot ${sysRoot} -isystem ${sysRoot}`; + process.env.MACOSX_DEPLOYMENT_TARGET = '10.9'; +} diff --git a/node_modules/@parcel/source-map/parcel_sourcemap_node/build.rs b/node_modules/@parcel/source-map/parcel_sourcemap_node/build.rs new file mode 100644 index 00000000..9fc23678 --- /dev/null +++ b/node_modules/@parcel/source-map/parcel_sourcemap_node/build.rs @@ -0,0 +1,5 @@ +extern crate napi_build; + +fn main() { + napi_build::setup(); +} diff --git a/node_modules/@parcel/source-map/parcel_sourcemap_node/index.js b/node_modules/@parcel/source-map/parcel_sourcemap_node/index.js new file mode 100644 index 00000000..19623c3b --- /dev/null +++ b/node_modules/@parcel/source-map/parcel_sourcemap_node/index.js @@ -0,0 +1,15 @@ +let parts = [process.platform, process.arch]; +if (process.platform === 'linux') { + const { MUSL, family } = require('detect-libc'); + if (family === MUSL) { + parts.push('musl'); + } else if (process.arch === 'arm') { + parts.push('gnueabihf'); + } else { + parts.push('gnu'); + } +} else if (process.platform === 'win32') { + parts.push('msvc'); +} + +module.exports = require(`./artifacts/index.${parts.join('-')}.node`); diff --git a/node_modules/@parcel/source-map/parcel_sourcemap_node/src/lib.rs b/node_modules/@parcel/source-map/parcel_sourcemap_node/src/lib.rs new file mode 100644 index 00000000..dcaf536a --- /dev/null +++ b/node_modules/@parcel/source-map/parcel_sourcemap_node/src/lib.rs @@ -0,0 +1,550 @@ +extern crate napi; +#[macro_use] +extern crate napi_derive; +extern crate parcel_sourcemap; +extern crate rkyv; + +use napi::{ + CallContext, Either, Env, JsBuffer, JsNull, JsNumber, JsObject, JsString, JsTypedArray, + JsUndefined, Property, Result, +}; +use parcel_sourcemap::{Mapping, OriginalLocation, SourceMap, SourceMapError}; +use rkyv::AlignedVec; +use serde_json::{from_str, to_string}; + +#[cfg(target_os = "macos")] +#[global_allocator] +static GLOBAL: jemallocator::Jemalloc = jemallocator::Jemalloc; + +#[js_function(1)] +fn add_source(ctx: CallContext) -> Result { + let this: JsObject = ctx.this_unchecked(); + let source_map_instance: &mut SourceMap = ctx.env.unwrap(&this)?; + + let source = ctx.get::(0)?.into_utf8()?; + let source_index = source_map_instance.add_source(source.as_str()?); + + ctx.env.create_uint32(source_index) +} + +#[js_function(1)] +fn get_source(ctx: CallContext) -> Result { + let this: JsObject = ctx.this_unchecked(); + let source_map_instance: &SourceMap = ctx.env.unwrap(&this)?; + + let source_index = ctx.get::(0)?.get_uint32()?; + match source_map_instance.get_source(source_index) { + Ok(source) => ctx.env.create_string(source), + Err(_err) => ctx.env.create_string(""), + } +} + +fn _get_sources(ctx: &CallContext) -> Result { + let this: JsObject = ctx.this_unchecked(); + let source_map_instance: &SourceMap = ctx.env.unwrap(&this)?; + + let mut napi_sources_array = ctx + .env + .create_array_with_length(source_map_instance.get_sources().len())?; + for (source_index, source) in source_map_instance.get_sources().iter().enumerate() { + napi_sources_array + .set_element(source_index as u32, ctx.env.create_string(source.as_str())?)?; + } + + // Return array + Ok(napi_sources_array) +} + +#[js_function] +fn get_sources(ctx: CallContext) -> Result { + let this: JsObject = ctx.this_unchecked(); + let source_map_instance: &SourceMap = ctx.env.unwrap(&this)?; + let sources_str = to_string(&source_map_instance.get_sources())?; + return ctx.env.create_string(sources_str.as_str()); +} + +fn _get_sources_content(ctx: &CallContext) -> Result { + let this: JsObject = ctx.this_unchecked(); + let source_map_instance: &SourceMap = ctx.env.unwrap(&this)?; + + let mut napi_sources_content_array = ctx + .env + .create_array_with_length(source_map_instance.get_sources_content().len())?; + for (source_index, source_content) in + source_map_instance.get_sources_content().iter().enumerate() + { + napi_sources_content_array.set_element( + source_index as u32, + ctx.env.create_string(source_content.as_str())?, + )?; + } + + // Return array + Ok(napi_sources_content_array) +} + +#[js_function] +fn get_sources_content(ctx: CallContext) -> Result { + _get_sources_content(&ctx) +} + +#[js_function(1)] +fn get_source_index(ctx: CallContext) -> Result { + let this: JsObject = ctx.this_unchecked(); + let source_map_instance: &SourceMap = ctx.env.unwrap(&this)?; + + let source = ctx.get::(0)?.into_utf8()?; + let source_index = source_map_instance + .get_source_index(source.as_str()?) + .map_err(to_napi_error)?; + match source_index { + Some(i) => ctx.env.create_uint32(i), + None => ctx.env.create_int32(-1), + } +} + +#[js_function(2)] +fn set_source_content_by_source(ctx: CallContext) -> Result { + let this: JsObject = ctx.this_unchecked(); + let source_map_instance: &mut SourceMap = ctx.env.unwrap(&this)?; + + let source = ctx.get::(0)?.into_utf8()?; + let source_index: usize = source_map_instance.add_source(source.as_str()?) as usize; + let source_content = ctx.get::(1)?.into_utf8()?; + source_map_instance + .set_source_content(source_index, source_content.as_str()?) + .map_err(to_napi_error)?; + + ctx.env.get_undefined() +} + +#[js_function(1)] +fn get_source_content_by_source(ctx: CallContext) -> Result { + let this: JsObject = ctx.this_unchecked(); + let source_map_instance: &mut SourceMap = ctx.env.unwrap(&this)?; + + let source = ctx.get::(0)?.into_utf8()?; + let source_index = source_map_instance + .get_source_index(source.as_str()?) + .map_err(to_napi_error)?; + match source_index { + Some(i) => { + let source_content = source_map_instance + .get_source_content(i) + .map_err(to_napi_error)?; + ctx.env.create_string(source_content) + } + None => ctx.env.create_string(""), + } +} + +#[js_function(1)] +fn add_name(ctx: CallContext) -> Result { + let this: JsObject = ctx.this_unchecked(); + let source_map_instance: &mut SourceMap = ctx.env.unwrap(&this)?; + + let name = ctx.get::(0)?.into_utf8()?; + let name_index = source_map_instance.add_name(name.as_str()?); + ctx.env.create_uint32(name_index) +} + +#[js_function(1)] +fn get_name(ctx: CallContext) -> Result { + let this: JsObject = ctx.this_unchecked(); + let source_map_instance: &SourceMap = ctx.env.unwrap(&this)?; + + let name_index = ctx.get::(0)?.get_uint32()?; + match source_map_instance.get_name(name_index) { + Ok(name) => ctx.env.create_string(name), + Err(_err) => ctx.env.create_string(""), + } +} + +fn _get_names(ctx: &CallContext) -> Result { + let this: JsObject = ctx.this_unchecked(); + let source_map_instance: &SourceMap = ctx.env.unwrap(&this)?; + + let mut napi_names_array = ctx + .env + .create_array_with_length(source_map_instance.get_names().len())?; + for (name_index, name) in source_map_instance.get_names().iter().enumerate() { + napi_names_array.set_element(name_index as u32, ctx.env.create_string(name.as_str())?)?; + } + + // Return array + Ok(napi_names_array) +} + +#[js_function] +fn get_names(ctx: CallContext) -> Result { + let this: JsObject = ctx.this_unchecked(); + let source_map_instance: &SourceMap = ctx.env.unwrap(&this)?; + let names_str = to_string(&source_map_instance.get_names())?; + return ctx.env.create_string(names_str.as_str()); +} + +#[js_function(1)] +fn get_name_index(ctx: CallContext) -> Result { + let this: JsObject = ctx.this_unchecked(); + let source_map_instance: &SourceMap = ctx.env.unwrap(&this)?; + + let name = ctx.get::(0)?.into_utf8()?; + let name_index = source_map_instance.get_name_index(name.as_str()?); + + match name_index { + Some(i) => ctx.env.create_uint32(i), + None => ctx.env.create_int32(-1), + } +} + +fn mapping_to_js_object(ctx: &CallContext, mapping: &Mapping) -> Result { + let mut mapping_obj = ctx.env.create_object()?; + + let mut generated_position_obj = ctx.env.create_object()?; + generated_position_obj + .set_named_property("line", ctx.env.create_uint32((mapping.generated_line) + 1)?)?; + generated_position_obj + .set_named_property("column", ctx.env.create_uint32(mapping.generated_column)?)?; + mapping_obj.set_named_property("generated", generated_position_obj)?; + + let original_position = mapping.original; + if let Some(original_position) = original_position { + let mut original_position_obj = ctx.env.create_object()?; + original_position_obj.set_named_property( + "line", + ctx.env.create_uint32(original_position.original_line + 1)?, + )?; + original_position_obj.set_named_property( + "column", + ctx.env.create_uint32(original_position.original_column)?, + )?; + mapping_obj.set_named_property("original", original_position_obj)?; + + mapping_obj + .set_named_property("source", ctx.env.create_uint32(original_position.source)?)?; + + if let Some(name) = original_position.name { + mapping_obj.set_named_property("name", ctx.env.create_uint32(name)?)?; + } + } + + Ok(mapping_obj) +} + +#[js_function] +fn get_mappings(ctx: CallContext) -> Result { + let this: JsObject = ctx.this_unchecked(); + let source_map_instance: &SourceMap = ctx.env.unwrap(&this)?; + + let mut mappings_arr = ctx.env.create_array()?; + for (index, mapping) in source_map_instance.get_mappings().iter().enumerate() { + mappings_arr.set_element(index as u32, mapping_to_js_object(&ctx, mapping)?)?; + } + Ok(mappings_arr) +} + +#[js_function] +fn to_buffer(ctx: CallContext) -> Result { + let this: JsObject = ctx.this_unchecked(); + let source_map_instance: &SourceMap = ctx.env.unwrap(&this)?; + + let mut buffer_data = AlignedVec::new(); + source_map_instance + .to_buffer(&mut buffer_data) + .map_err(to_napi_error)?; + Ok(ctx + .env + .create_buffer_with_data(buffer_data.into_vec())? + .into_raw()) +} + +#[js_function(2)] +fn add_sourcemap(ctx: CallContext) -> Result { + let this: JsObject = ctx.this_unchecked(); + let source_map_instance: &mut SourceMap = ctx.env.unwrap(&this)?; + + let sourcemap_object = ctx.get::(0)?; + let previous_map_instance = ctx.env.unwrap::(&sourcemap_object)?; + let line_offset = ctx.get::(1)?.get_int64()?; + + source_map_instance + .add_sourcemap(previous_map_instance, line_offset) + .map_err(to_napi_error)?; + ctx.env.get_undefined() +} + +#[js_function(6)] +fn add_vlq_map(ctx: CallContext) -> Result { + let this: JsObject = ctx.this_unchecked(); + let source_map_instance: &mut SourceMap = ctx.env.unwrap(&this)?; + + let vlq_mappings = ctx.get::(0)?.into_utf8()?; + + let js_sources_arr_input = ctx.get::(1)?.into_utf8()?; + let sources: Vec = from_str(js_sources_arr_input.as_str()?)?; + + let js_sources_content_arr_input = ctx.get::(2)?.into_utf8()?; + let sources_content: Vec = from_str(js_sources_content_arr_input.as_str()?)?; + + let js_names_arr_input = ctx.get::(3)?.into_utf8()?; + let names: Vec = from_str(js_names_arr_input.as_str()?)?; + + let line_offset = ctx.get::(4)?.get_int64()?; + let column_offset = ctx.get::(5)?.get_int64()?; + + source_map_instance + .add_vlq_map( + vlq_mappings.as_slice(), + sources.iter().map(|s| s.as_str()).collect(), + sources_content.iter().map(|s| s.as_str()).collect(), + names.iter().map(|s| s.as_str()).collect(), + line_offset, + column_offset, + ) + .map_err(to_napi_error)?; + + ctx.env.get_undefined() +} + +#[js_function] +fn to_vlq(ctx: CallContext) -> Result { + let this: JsObject = ctx.this_unchecked(); + let source_map_instance: &mut SourceMap = ctx.env.unwrap(&this)?; + + let mut vlq_output: Vec = vec![]; + source_map_instance + .write_vlq(&mut vlq_output) + .map_err(to_napi_error)?; + let vlq_string = ctx.env.create_string_latin1(vlq_output.as_slice())?; + let mut result_obj: JsObject = ctx.env.create_object()?; + result_obj.set_named_property("mappings", vlq_string)?; + result_obj.set_named_property("sources", _get_sources(&ctx)?)?; + result_obj.set_named_property("sourcesContent", _get_sources_content(&ctx)?)?; + result_obj.set_named_property("names", _get_names(&ctx)?)?; + + Ok(result_obj) +} + +#[js_function(1)] +fn add_indexed_mappings(ctx: CallContext) -> Result { + let this: JsObject = ctx.this_unchecked(); + let source_map_instance: &mut SourceMap = ctx.env.unwrap(&this)?; + + let mappings = ctx.get::(0)?; + let mappings_value = mappings.into_value()?; + let mappings_arr: &[i32] = mappings_value.as_ref(); + let mappings_count = mappings_arr.len(); + + let mut generated_line: u32 = 0; // 0 + let mut generated_column: u32 = 0; // 1 + let mut original_line: i32 = 0; // 2 + let mut original_column: i32 = 0; // 3 + let mut original_source: i32 = 0; // 4 + for (i, value) in mappings_arr.iter().enumerate().take(mappings_count) { + let value = *value; + match i % 6 { + 0 => { + generated_line = value as u32; + } + 1 => { + generated_column = value as u32; + } + 2 => { + original_line = value; + } + 3 => { + original_column = value; + } + 4 => { + original_source = value; + } + 5 => { + source_map_instance.add_mapping( + generated_line, + generated_column, + if original_line > -1 && original_column > -1 && original_source > -1 { + Some(OriginalLocation { + original_line: original_line as u32, + original_column: original_column as u32, + source: original_source as u32, + name: if value > -1 { Some(value as u32) } else { None }, + }) + } else { + None + }, + ); + } + _ => unreachable!(), + } + } + + ctx.env.get_undefined() +} + +#[js_function(2)] +fn offset_lines(ctx: CallContext) -> Result { + let this: JsObject = ctx.this_unchecked(); + let source_map_instance: &mut SourceMap = ctx.env.unwrap(&this)?; + + let generated_line = ctx.get::(0)?.get_uint32()?; + let generated_line_offset = ctx.get::(1)?.get_int64()?; + source_map_instance + .offset_lines(generated_line, generated_line_offset) + .map_err(to_napi_error)?; + ctx.env.get_undefined() +} + +#[js_function(3)] +fn offset_columns(ctx: CallContext) -> Result { + let this: JsObject = ctx.this_unchecked(); + let source_map_instance: &mut SourceMap = ctx.env.unwrap(&this)?; + + let generated_line = ctx.get::(0)?.get_uint32()?; + let generated_column = ctx.get::(1)?.get_uint32()?; + let generated_column_offset = ctx.get::(2)?.get_int64()?; + + source_map_instance + .offset_columns(generated_line, generated_column, generated_column_offset) + .map_err(to_napi_error)?; + ctx.env.get_undefined() +} + +#[js_function(3)] +fn add_empty_map(ctx: CallContext) -> Result { + let this: JsObject = ctx.this_unchecked(); + let source_map_instance: &mut SourceMap = ctx.env.unwrap(&this)?; + + let source = ctx.get::(0)?.into_utf8()?; + let source_content = ctx.get::(1)?.into_utf8()?; + let line_offset = ctx.get::(2)?.get_int64()?; + source_map_instance + .add_empty_map(source.as_str()?, source_content.as_str()?, line_offset) + .map_err(to_napi_error)?; + ctx.env.get_undefined() +} + +#[js_function(1)] +fn extends(ctx: CallContext) -> Result { + let this: JsObject = ctx.this_unchecked(); + let source_map_instance: &mut SourceMap = ctx.env.unwrap(&this)?; + + let sourcemap_object = ctx.get::(0)?; + let previous_map_instance = ctx.env.unwrap::(&sourcemap_object)?; + source_map_instance + .extends(previous_map_instance) + .map_err(to_napi_error)?; + ctx.env.get_undefined() +} + +#[js_function(2)] +fn find_closest_mapping(ctx: CallContext) -> Result> { + let this: JsObject = ctx.this_unchecked(); + let source_map_instance: &mut SourceMap = ctx.env.unwrap(&this)?; + + let generated_line = ctx.get::(0)?.get_uint32()?; + let generated_column = ctx.get::(1)?.get_uint32()?; + match source_map_instance.find_closest_mapping(generated_line, generated_column) { + Some(mapping) => mapping_to_js_object(&ctx, &mapping).map(Either::A), + None => ctx.env.get_null().map(Either::B), + } +} + +#[js_function] +fn get_project_root(ctx: CallContext) -> Result { + let this: JsObject = ctx.this_unchecked(); + let source_map_instance: &mut SourceMap = ctx.env.unwrap(&this)?; + + return ctx + .env + .create_string(source_map_instance.project_root.as_str()); +} + +#[js_function(2)] +fn constructor(ctx: CallContext) -> Result { + let mut this: JsObject = ctx.this_unchecked(); + let project_root = ctx.get::(0)?.into_utf8()?; + let second_argument = ctx.get::>(1)?; + match second_argument { + Either::A(js_buffer) => { + let buffer = js_buffer.into_value()?; + let sourcemap = SourceMap::from_buffer(project_root.as_str()?, &buffer[..]) + .map_err(to_napi_error)?; + ctx.env.wrap(&mut this, sourcemap)?; + } + Either::B(_) => { + ctx.env + .wrap(&mut this, SourceMap::new(project_root.as_str()?))?; + } + } + ctx.env.get_undefined() +} + +#[inline] +fn to_napi_error(err: SourceMapError) -> napi::Error { + napi::Error::new(napi::Status::GenericFailure, err.to_string()) +} + +#[module_exports] +fn init(mut exports: JsObject, env: Env) -> Result<()> { + let add_source_method = Property::new(&env, "addSource")?.with_method(add_source); + let get_source_method = Property::new(&env, "getSource")?.with_method(get_source); + let get_sources_method = Property::new(&env, "getSources")?.with_method(get_sources); + let get_source_index_method = + Property::new(&env, "getSourceIndex")?.with_method(get_source_index); + let set_source_content_by_source_method = + Property::new(&env, "setSourceContentBySource")?.with_method(set_source_content_by_source); + let get_source_content_by_source_method = + Property::new(&env, "getSourceContentBySource")?.with_method(get_source_content_by_source); + let get_sources_content_method = + Property::new(&env, "getSourcesContent")?.with_method(get_sources_content); + let add_name_method = Property::new(&env, "addName")?.with_method(add_name); + let get_name_method = Property::new(&env, "getName")?.with_method(get_name); + let get_names_method = Property::new(&env, "getNames")?.with_method(get_names); + let get_name_index_method = Property::new(&env, "getNameIndex")?.with_method(get_name_index); + let get_mappings_method = Property::new(&env, "getMappings")?.with_method(get_mappings); + let to_buffer_method = Property::new(&env, "toBuffer")?.with_method(to_buffer); + let add_sourcemap_method = Property::new(&env, "addSourceMap")?.with_method(add_sourcemap); + let add_indexed_mappings_method = + Property::new(&env, "addIndexedMappings")?.with_method(add_indexed_mappings); + let add_vlq_map_method = Property::new(&env, "addVLQMap")?.with_method(add_vlq_map); + let to_vlq_method = Property::new(&env, "toVLQ")?.with_method(to_vlq); + let offset_lines_method = Property::new(&env, "offsetLines")?.with_method(offset_lines); + let offset_columns_method = Property::new(&env, "offsetColumns")?.with_method(offset_columns); + let add_empty_map_method = Property::new(&env, "addEmptyMap")?.with_method(add_empty_map); + let extends_method = Property::new(&env, "extends")?.with_method(extends); + let get_project_root_method = + Property::new(&env, "getProjectRoot")?.with_method(get_project_root); + let find_closest_mapping_method = + Property::new(&env, "findClosestMapping")?.with_method(find_closest_mapping); + let sourcemap_class = env.define_class( + "SourceMap", + constructor, + &[ + add_source_method, + get_source_method, + get_sources_method, + get_source_index_method, + set_source_content_by_source_method, + get_source_content_by_source_method, + get_sources_content_method, + add_name_method, + get_name_method, + get_names_method, + get_name_index_method, + get_mappings_method, + add_sourcemap_method, + add_indexed_mappings_method, + add_vlq_map_method, + to_buffer_method, + to_vlq_method, + offset_lines_method, + offset_columns_method, + add_empty_map_method, + extends_method, + find_closest_mapping_method, + get_project_root_method, + ], + )?; + exports.set_named_property("SourceMap", sourcemap_class)?; + Ok(()) +} diff --git a/node_modules/@parcel/source-map/parcel_sourcemap_wasm/dist-node/package.json b/node_modules/@parcel/source-map/parcel_sourcemap_wasm/dist-node/package.json new file mode 100644 index 00000000..387191b1 --- /dev/null +++ b/node_modules/@parcel/source-map/parcel_sourcemap_wasm/dist-node/package.json @@ -0,0 +1,12 @@ +{ + "name": "parcel_sourcemap_wasm", + "collaborators": [ + "Jasper De Moor " + ], + "version": "2.1.1", + "files": [ + "parcel_sourcemap_wasm_bg.wasm", + "parcel_sourcemap_wasm.js" + ], + "main": "parcel_sourcemap_wasm.js" +} \ No newline at end of file diff --git a/node_modules/@parcel/source-map/parcel_sourcemap_wasm/dist-node/parcel_sourcemap_wasm.js b/node_modules/@parcel/source-map/parcel_sourcemap_wasm/dist-node/parcel_sourcemap_wasm.js new file mode 100644 index 00000000..6528e97e --- /dev/null +++ b/node_modules/@parcel/source-map/parcel_sourcemap_wasm/dist-node/parcel_sourcemap_wasm.js @@ -0,0 +1,660 @@ +let imports = {}; +imports['__wbindgen_placeholder__'] = module.exports; +let wasm; +const { TextEncoder, TextDecoder } = require(`util`); + +const heap = new Array(32).fill(undefined); + +heap.push(undefined, null, true, false); + +function getObject(idx) { return heap[idx]; } + +let WASM_VECTOR_LEN = 0; + +let cachegetUint8Memory0 = null; +function getUint8Memory0() { + if (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) { + cachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer); + } + return cachegetUint8Memory0; +} + +let cachedTextEncoder = new TextEncoder('utf-8'); + +const encodeString = (typeof cachedTextEncoder.encodeInto === 'function' + ? function (arg, view) { + return cachedTextEncoder.encodeInto(arg, view); +} + : function (arg, view) { + const buf = cachedTextEncoder.encode(arg); + view.set(buf); + return { + read: arg.length, + written: buf.length + }; +}); + +function passStringToWasm0(arg, malloc, realloc) { + + if (realloc === undefined) { + const buf = cachedTextEncoder.encode(arg); + const ptr = malloc(buf.length); + getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf); + WASM_VECTOR_LEN = buf.length; + return ptr; + } + + let len = arg.length; + let ptr = malloc(len); + + const mem = getUint8Memory0(); + + let offset = 0; + + for (; offset < len; offset++) { + const code = arg.charCodeAt(offset); + if (code > 0x7F) break; + mem[ptr + offset] = code; + } + + if (offset !== len) { + if (offset !== 0) { + arg = arg.slice(offset); + } + ptr = realloc(ptr, len, len = offset + arg.length * 3); + const view = getUint8Memory0().subarray(ptr + offset, ptr + len); + const ret = encodeString(arg, view); + + offset += ret.written; + } + + WASM_VECTOR_LEN = offset; + return ptr; +} + +let cachegetInt32Memory0 = null; +function getInt32Memory0() { + if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) { + cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer); + } + return cachegetInt32Memory0; +} + +let heap_next = heap.length; + +function dropObject(idx) { + if (idx < 36) return; + heap[idx] = heap_next; + heap_next = idx; +} + +function takeObject(idx) { + const ret = getObject(idx); + dropObject(idx); + return ret; +} + +function addHeapObject(obj) { + if (heap_next === heap.length) heap.push(heap.length + 1); + const idx = heap_next; + heap_next = heap[idx]; + + heap[idx] = obj; + return idx; +} + +let cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }); + +cachedTextDecoder.decode(); + +function getStringFromWasm0(ptr, len) { + return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len)); +} + +let cachegetUint32Memory0 = null; +function getUint32Memory0() { + if (cachegetUint32Memory0 === null || cachegetUint32Memory0.buffer !== wasm.memory.buffer) { + cachegetUint32Memory0 = new Uint32Array(wasm.memory.buffer); + } + return cachegetUint32Memory0; +} + +function passArray32ToWasm0(arg, malloc) { + const ptr = malloc(arg.length * 4); + getUint32Memory0().set(arg, ptr / 4); + WASM_VECTOR_LEN = arg.length; + return ptr; +} + +function _assertClass(instance, klass) { + if (!(instance instanceof klass)) { + throw new Error(`expected instance of ${klass.name}`); + } + return instance.ptr; +} +/** +*/ +class SourceMap { + + static __wrap(ptr) { + const obj = Object.create(SourceMap.prototype); + obj.ptr = ptr; + + return obj; + } + + __destroy_into_raw() { + const ptr = this.ptr; + this.ptr = 0; + + return ptr; + } + + free() { + const ptr = this.__destroy_into_raw(); + wasm.__wbg_sourcemap_free(ptr); + } + /** + * @param {string} project_root + * @param {any} buffer + */ + constructor(project_root, buffer) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0(project_root, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + wasm.sourcemap_new(retptr, ptr0, len0, addHeapObject(buffer)); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return SourceMap.__wrap(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @returns {string} + */ + getProjectRoot() { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + wasm.sourcemap_getProjectRoot(retptr, this.ptr); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + return getStringFromWasm0(r0, r1); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + wasm.__wbindgen_free(r0, r1); + } + } + /** + * @param {string} vlq_mappings + * @param {any} sources + * @param {any} sources_content + * @param {any} names + * @param {number} line_offset + * @param {number} column_offset + * @returns {any} + */ + addVLQMap(vlq_mappings, sources, sources_content, names, line_offset, column_offset) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0(vlq_mappings, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + wasm.sourcemap_addVLQMap(retptr, this.ptr, ptr0, len0, addHeapObject(sources), addHeapObject(sources_content), addHeapObject(names), line_offset, column_offset); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @returns {any} + */ + toVLQ() { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + wasm.sourcemap_toVLQ(retptr, this.ptr); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @returns {any} + */ + getMappings() { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + wasm.sourcemap_getMappings(retptr, this.ptr); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @returns {any} + */ + getSources() { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + wasm.sourcemap_getSources(retptr, this.ptr); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @returns {any} + */ + getSourcesContent() { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + wasm.sourcemap_getSourcesContent(retptr, this.ptr); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @returns {any} + */ + getNames() { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + wasm.sourcemap_getNames(retptr, this.ptr); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @param {string} name + * @returns {number} + */ + addName(name) { + const ptr0 = passStringToWasm0(name, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.sourcemap_addName(this.ptr, ptr0, len0); + return ret >>> 0; + } + /** + * @param {string} source + * @returns {number} + */ + addSource(source) { + const ptr0 = passStringToWasm0(source, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.sourcemap_addSource(this.ptr, ptr0, len0); + return ret >>> 0; + } + /** + * @param {number} index + * @returns {string} + */ + getName(index) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + wasm.sourcemap_getName(retptr, this.ptr, index); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + return getStringFromWasm0(r0, r1); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + wasm.__wbindgen_free(r0, r1); + } + } + /** + * @param {number} index + * @returns {string} + */ + getSource(index) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + wasm.sourcemap_getSource(retptr, this.ptr, index); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + return getStringFromWasm0(r0, r1); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + wasm.__wbindgen_free(r0, r1); + } + } + /** + * @param {string} name + * @returns {number} + */ + getNameIndex(name) { + const ptr0 = passStringToWasm0(name, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.sourcemap_getNameIndex(this.ptr, ptr0, len0); + return ret; + } + /** + * @param {string} source + * @returns {any} + */ + getSourceIndex(source) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0(source, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + wasm.sourcemap_getSourceIndex(retptr, this.ptr, ptr0, len0); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @param {Int32Array} mappings_arr + */ + addIndexedMappings(mappings_arr) { + const ptr0 = passArray32ToWasm0(mappings_arr, wasm.__wbindgen_malloc); + const len0 = WASM_VECTOR_LEN; + wasm.sourcemap_addIndexedMappings(this.ptr, ptr0, len0); + } + /** + * @returns {any} + */ + toBuffer() { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + wasm.sourcemap_toBuffer(retptr, this.ptr); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @param {SourceMap} previous_map_instance + * @param {number} line_offset + * @returns {any} + */ + addSourceMap(previous_map_instance, line_offset) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + _assertClass(previous_map_instance, SourceMap); + wasm.sourcemap_addSourceMap(retptr, this.ptr, previous_map_instance.ptr, line_offset); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @param {string} source + * @param {string} source_content + * @returns {any} + */ + setSourceContentBySource(source, source_content) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0(source, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + const ptr1 = passStringToWasm0(source_content, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len1 = WASM_VECTOR_LEN; + wasm.sourcemap_setSourceContentBySource(retptr, this.ptr, ptr0, len0, ptr1, len1); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @param {string} source + * @returns {any} + */ + getSourceContentBySource(source) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0(source, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + wasm.sourcemap_getSourceContentBySource(retptr, this.ptr, ptr0, len0); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @param {string} source + * @param {string} source_content + * @param {number} line_offset + * @returns {any} + */ + addEmptyMap(source, source_content, line_offset) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0(source, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + const ptr1 = passStringToWasm0(source_content, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len1 = WASM_VECTOR_LEN; + wasm.sourcemap_addEmptyMap(retptr, this.ptr, ptr0, len0, ptr1, len1, line_offset); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @param {SourceMap} previous_map_instance + * @returns {any} + */ + extends(previous_map_instance) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + _assertClass(previous_map_instance, SourceMap); + wasm.sourcemap_extends(retptr, this.ptr, previous_map_instance.ptr); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @param {number} generated_line + * @param {number} generated_column + * @returns {any} + */ + findClosestMapping(generated_line, generated_column) { + const ret = wasm.sourcemap_findClosestMapping(this.ptr, generated_line, generated_column); + return takeObject(ret); + } + /** + * @param {number} generated_line + * @param {number} generated_line_offset + * @returns {any} + */ + offsetLines(generated_line, generated_line_offset) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + wasm.sourcemap_offsetLines(retptr, this.ptr, generated_line, generated_line_offset); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @param {number} generated_line + * @param {number} generated_column + * @param {number} generated_column_offset + * @returns {any} + */ + offsetColumns(generated_line, generated_column, generated_column_offset) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + wasm.sourcemap_offsetColumns(retptr, this.ptr, generated_line, generated_column, generated_column_offset); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } +} +module.exports.SourceMap = SourceMap; + +module.exports.__wbindgen_json_serialize = function(arg0, arg1) { + const obj = getObject(arg1); + const ret = JSON.stringify(obj === undefined ? null : obj); + const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + getInt32Memory0()[arg0 / 4 + 1] = len0; + getInt32Memory0()[arg0 / 4 + 0] = ptr0; +}; + +module.exports.__wbg_new_3047bf4b4f02b802 = function(arg0, arg1) { + const ret = new Error(getStringFromWasm0(arg0, arg1)); + return addHeapObject(ret); +}; + +module.exports.__wbindgen_is_undefined = function(arg0) { + const ret = getObject(arg0) === undefined; + return ret; +}; + +module.exports.__wbindgen_object_drop_ref = function(arg0) { + takeObject(arg0); +}; + +module.exports.__wbg_length_0acb1cf9bbaf8519 = function(arg0) { + const ret = getObject(arg0).length; + return ret; +}; + +module.exports.__wbindgen_memory = function() { + const ret = wasm.memory; + return addHeapObject(ret); +}; + +module.exports.__wbg_buffer_7af23f65f6c64548 = function(arg0) { + const ret = getObject(arg0).buffer; + return addHeapObject(ret); +}; + +module.exports.__wbg_new_cc9018bd6f283b6f = function(arg0) { + const ret = new Uint8Array(getObject(arg0)); + return addHeapObject(ret); +}; + +module.exports.__wbg_set_f25e869e4565d2a2 = function(arg0, arg1, arg2) { + getObject(arg0).set(getObject(arg1), arg2 >>> 0); +}; + +module.exports.__wbindgen_json_parse = function(arg0, arg1) { + const ret = JSON.parse(getStringFromWasm0(arg0, arg1)); + return addHeapObject(ret); +}; + +module.exports.__wbindgen_number_new = function(arg0) { + const ret = arg0; + return addHeapObject(ret); +}; + +module.exports.__wbg_newwithbyteoffsetandlength_ce1e75f0ce5f7974 = function(arg0, arg1, arg2) { + const ret = new Uint8Array(getObject(arg0), arg1 >>> 0, arg2 >>> 0); + return addHeapObject(ret); +}; + +module.exports.__wbindgen_string_new = function(arg0, arg1) { + const ret = getStringFromWasm0(arg0, arg1); + return addHeapObject(ret); +}; + +module.exports.__wbindgen_throw = function(arg0, arg1) { + throw new Error(getStringFromWasm0(arg0, arg1)); +}; + +const path = require('path').join(__dirname, 'parcel_sourcemap_wasm_bg.wasm'); +const bytes = require('fs').readFileSync(path); + +const wasmModule = new WebAssembly.Module(bytes); +const wasmInstance = new WebAssembly.Instance(wasmModule, imports); +wasm = wasmInstance.exports; +module.exports.__wasm = wasm; + diff --git a/node_modules/@parcel/source-map/parcel_sourcemap_wasm/dist-node/parcel_sourcemap_wasm_bg.wasm b/node_modules/@parcel/source-map/parcel_sourcemap_wasm/dist-node/parcel_sourcemap_wasm_bg.wasm new file mode 100644 index 00000000..c719c37b Binary files /dev/null and b/node_modules/@parcel/source-map/parcel_sourcemap_wasm/dist-node/parcel_sourcemap_wasm_bg.wasm differ diff --git a/node_modules/@parcel/source-map/parcel_sourcemap_wasm/dist-web/package.json b/node_modules/@parcel/source-map/parcel_sourcemap_wasm/dist-web/package.json new file mode 100644 index 00000000..1e0ba4b2 --- /dev/null +++ b/node_modules/@parcel/source-map/parcel_sourcemap_wasm/dist-web/package.json @@ -0,0 +1,13 @@ +{ + "name": "parcel_sourcemap_wasm", + "collaborators": [ + "Jasper De Moor " + ], + "version": "2.1.1", + "files": [ + "parcel_sourcemap_wasm_bg.wasm", + "parcel_sourcemap_wasm.js" + ], + "module": "parcel_sourcemap_wasm.js", + "sideEffects": false +} \ No newline at end of file diff --git a/node_modules/@parcel/source-map/parcel_sourcemap_wasm/dist-web/parcel_sourcemap_wasm.js b/node_modules/@parcel/source-map/parcel_sourcemap_wasm/dist-web/parcel_sourcemap_wasm.js new file mode 100644 index 00000000..05e7a18c --- /dev/null +++ b/node_modules/@parcel/source-map/parcel_sourcemap_wasm/dist-web/parcel_sourcemap_wasm.js @@ -0,0 +1,689 @@ + +let wasm; + +const heap = new Array(32).fill(undefined); + +heap.push(undefined, null, true, false); + +function getObject(idx) { return heap[idx]; } + +let WASM_VECTOR_LEN = 0; + +let cachegetUint8Memory0 = null; +function getUint8Memory0() { + if (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) { + cachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer); + } + return cachegetUint8Memory0; +} + +const cachedTextEncoder = new TextEncoder('utf-8'); + +const encodeString = (typeof cachedTextEncoder.encodeInto === 'function' + ? function (arg, view) { + return cachedTextEncoder.encodeInto(arg, view); +} + : function (arg, view) { + const buf = cachedTextEncoder.encode(arg); + view.set(buf); + return { + read: arg.length, + written: buf.length + }; +}); + +function passStringToWasm0(arg, malloc, realloc) { + + if (realloc === undefined) { + const buf = cachedTextEncoder.encode(arg); + const ptr = malloc(buf.length); + getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf); + WASM_VECTOR_LEN = buf.length; + return ptr; + } + + let len = arg.length; + let ptr = malloc(len); + + const mem = getUint8Memory0(); + + let offset = 0; + + for (; offset < len; offset++) { + const code = arg.charCodeAt(offset); + if (code > 0x7F) break; + mem[ptr + offset] = code; + } + + if (offset !== len) { + if (offset !== 0) { + arg = arg.slice(offset); + } + ptr = realloc(ptr, len, len = offset + arg.length * 3); + const view = getUint8Memory0().subarray(ptr + offset, ptr + len); + const ret = encodeString(arg, view); + + offset += ret.written; + } + + WASM_VECTOR_LEN = offset; + return ptr; +} + +let cachegetInt32Memory0 = null; +function getInt32Memory0() { + if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) { + cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer); + } + return cachegetInt32Memory0; +} + +let heap_next = heap.length; + +function dropObject(idx) { + if (idx < 36) return; + heap[idx] = heap_next; + heap_next = idx; +} + +function takeObject(idx) { + const ret = getObject(idx); + dropObject(idx); + return ret; +} + +function addHeapObject(obj) { + if (heap_next === heap.length) heap.push(heap.length + 1); + const idx = heap_next; + heap_next = heap[idx]; + + heap[idx] = obj; + return idx; +} + +const cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }); + +cachedTextDecoder.decode(); + +function getStringFromWasm0(ptr, len) { + return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len)); +} + +let cachegetUint32Memory0 = null; +function getUint32Memory0() { + if (cachegetUint32Memory0 === null || cachegetUint32Memory0.buffer !== wasm.memory.buffer) { + cachegetUint32Memory0 = new Uint32Array(wasm.memory.buffer); + } + return cachegetUint32Memory0; +} + +function passArray32ToWasm0(arg, malloc) { + const ptr = malloc(arg.length * 4); + getUint32Memory0().set(arg, ptr / 4); + WASM_VECTOR_LEN = arg.length; + return ptr; +} + +function _assertClass(instance, klass) { + if (!(instance instanceof klass)) { + throw new Error(`expected instance of ${klass.name}`); + } + return instance.ptr; +} +/** +*/ +export class SourceMap { + + static __wrap(ptr) { + const obj = Object.create(SourceMap.prototype); + obj.ptr = ptr; + + return obj; + } + + __destroy_into_raw() { + const ptr = this.ptr; + this.ptr = 0; + + return ptr; + } + + free() { + const ptr = this.__destroy_into_raw(); + wasm.__wbg_sourcemap_free(ptr); + } + /** + * @param {string} project_root + * @param {any} buffer + */ + constructor(project_root, buffer) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0(project_root, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + wasm.sourcemap_new(retptr, ptr0, len0, addHeapObject(buffer)); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return SourceMap.__wrap(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @returns {string} + */ + getProjectRoot() { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + wasm.sourcemap_getProjectRoot(retptr, this.ptr); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + return getStringFromWasm0(r0, r1); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + wasm.__wbindgen_free(r0, r1); + } + } + /** + * @param {string} vlq_mappings + * @param {any} sources + * @param {any} sources_content + * @param {any} names + * @param {number} line_offset + * @param {number} column_offset + * @returns {any} + */ + addVLQMap(vlq_mappings, sources, sources_content, names, line_offset, column_offset) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0(vlq_mappings, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + wasm.sourcemap_addVLQMap(retptr, this.ptr, ptr0, len0, addHeapObject(sources), addHeapObject(sources_content), addHeapObject(names), line_offset, column_offset); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @returns {any} + */ + toVLQ() { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + wasm.sourcemap_toVLQ(retptr, this.ptr); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @returns {any} + */ + getMappings() { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + wasm.sourcemap_getMappings(retptr, this.ptr); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @returns {any} + */ + getSources() { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + wasm.sourcemap_getSources(retptr, this.ptr); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @returns {any} + */ + getSourcesContent() { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + wasm.sourcemap_getSourcesContent(retptr, this.ptr); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @returns {any} + */ + getNames() { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + wasm.sourcemap_getNames(retptr, this.ptr); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @param {string} name + * @returns {number} + */ + addName(name) { + const ptr0 = passStringToWasm0(name, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.sourcemap_addName(this.ptr, ptr0, len0); + return ret >>> 0; + } + /** + * @param {string} source + * @returns {number} + */ + addSource(source) { + const ptr0 = passStringToWasm0(source, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.sourcemap_addSource(this.ptr, ptr0, len0); + return ret >>> 0; + } + /** + * @param {number} index + * @returns {string} + */ + getName(index) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + wasm.sourcemap_getName(retptr, this.ptr, index); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + return getStringFromWasm0(r0, r1); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + wasm.__wbindgen_free(r0, r1); + } + } + /** + * @param {number} index + * @returns {string} + */ + getSource(index) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + wasm.sourcemap_getSource(retptr, this.ptr, index); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + return getStringFromWasm0(r0, r1); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + wasm.__wbindgen_free(r0, r1); + } + } + /** + * @param {string} name + * @returns {number} + */ + getNameIndex(name) { + const ptr0 = passStringToWasm0(name, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.sourcemap_getNameIndex(this.ptr, ptr0, len0); + return ret; + } + /** + * @param {string} source + * @returns {any} + */ + getSourceIndex(source) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0(source, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + wasm.sourcemap_getSourceIndex(retptr, this.ptr, ptr0, len0); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @param {Int32Array} mappings_arr + */ + addIndexedMappings(mappings_arr) { + const ptr0 = passArray32ToWasm0(mappings_arr, wasm.__wbindgen_malloc); + const len0 = WASM_VECTOR_LEN; + wasm.sourcemap_addIndexedMappings(this.ptr, ptr0, len0); + } + /** + * @returns {any} + */ + toBuffer() { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + wasm.sourcemap_toBuffer(retptr, this.ptr); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @param {SourceMap} previous_map_instance + * @param {number} line_offset + * @returns {any} + */ + addSourceMap(previous_map_instance, line_offset) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + _assertClass(previous_map_instance, SourceMap); + wasm.sourcemap_addSourceMap(retptr, this.ptr, previous_map_instance.ptr, line_offset); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @param {string} source + * @param {string} source_content + * @returns {any} + */ + setSourceContentBySource(source, source_content) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0(source, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + const ptr1 = passStringToWasm0(source_content, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len1 = WASM_VECTOR_LEN; + wasm.sourcemap_setSourceContentBySource(retptr, this.ptr, ptr0, len0, ptr1, len1); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @param {string} source + * @returns {any} + */ + getSourceContentBySource(source) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0(source, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + wasm.sourcemap_getSourceContentBySource(retptr, this.ptr, ptr0, len0); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @param {string} source + * @param {string} source_content + * @param {number} line_offset + * @returns {any} + */ + addEmptyMap(source, source_content, line_offset) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0(source, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + const ptr1 = passStringToWasm0(source_content, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len1 = WASM_VECTOR_LEN; + wasm.sourcemap_addEmptyMap(retptr, this.ptr, ptr0, len0, ptr1, len1, line_offset); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @param {SourceMap} previous_map_instance + * @returns {any} + */ + extends(previous_map_instance) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + _assertClass(previous_map_instance, SourceMap); + wasm.sourcemap_extends(retptr, this.ptr, previous_map_instance.ptr); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @param {number} generated_line + * @param {number} generated_column + * @returns {any} + */ + findClosestMapping(generated_line, generated_column) { + const ret = wasm.sourcemap_findClosestMapping(this.ptr, generated_line, generated_column); + return takeObject(ret); + } + /** + * @param {number} generated_line + * @param {number} generated_line_offset + * @returns {any} + */ + offsetLines(generated_line, generated_line_offset) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + wasm.sourcemap_offsetLines(retptr, this.ptr, generated_line, generated_line_offset); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } + /** + * @param {number} generated_line + * @param {number} generated_column + * @param {number} generated_column_offset + * @returns {any} + */ + offsetColumns(generated_line, generated_column, generated_column_offset) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + wasm.sourcemap_offsetColumns(retptr, this.ptr, generated_line, generated_column, generated_column_offset); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + var r2 = getInt32Memory0()[retptr / 4 + 2]; + if (r2) { + throw takeObject(r1); + } + return takeObject(r0); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } + } +} + +async function load(module, imports) { + if (typeof Response === 'function' && module instanceof Response) { + if (typeof WebAssembly.instantiateStreaming === 'function') { + try { + return await WebAssembly.instantiateStreaming(module, imports); + + } catch (e) { + if (module.headers.get('Content-Type') != 'application/wasm') { + console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e); + + } else { + throw e; + } + } + } + + const bytes = await module.arrayBuffer(); + return await WebAssembly.instantiate(bytes, imports); + + } else { + const instance = await WebAssembly.instantiate(module, imports); + + if (instance instanceof WebAssembly.Instance) { + return { instance, module }; + + } else { + return instance; + } + } +} + +async function init(input) { + if (typeof input === 'undefined') { + input = new URL('parcel_sourcemap_wasm_bg.wasm', import.meta.url); + } + const imports = {}; + imports.wbg = {}; + imports.wbg.__wbindgen_json_serialize = function(arg0, arg1) { + const obj = getObject(arg1); + const ret = JSON.stringify(obj === undefined ? null : obj); + const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + getInt32Memory0()[arg0 / 4 + 1] = len0; + getInt32Memory0()[arg0 / 4 + 0] = ptr0; + }; + imports.wbg.__wbg_new_3047bf4b4f02b802 = function(arg0, arg1) { + const ret = new Error(getStringFromWasm0(arg0, arg1)); + return addHeapObject(ret); + }; + imports.wbg.__wbindgen_is_undefined = function(arg0) { + const ret = getObject(arg0) === undefined; + return ret; + }; + imports.wbg.__wbindgen_object_drop_ref = function(arg0) { + takeObject(arg0); + }; + imports.wbg.__wbg_length_0acb1cf9bbaf8519 = function(arg0) { + const ret = getObject(arg0).length; + return ret; + }; + imports.wbg.__wbindgen_memory = function() { + const ret = wasm.memory; + return addHeapObject(ret); + }; + imports.wbg.__wbg_buffer_7af23f65f6c64548 = function(arg0) { + const ret = getObject(arg0).buffer; + return addHeapObject(ret); + }; + imports.wbg.__wbg_new_cc9018bd6f283b6f = function(arg0) { + const ret = new Uint8Array(getObject(arg0)); + return addHeapObject(ret); + }; + imports.wbg.__wbg_set_f25e869e4565d2a2 = function(arg0, arg1, arg2) { + getObject(arg0).set(getObject(arg1), arg2 >>> 0); + }; + imports.wbg.__wbindgen_json_parse = function(arg0, arg1) { + const ret = JSON.parse(getStringFromWasm0(arg0, arg1)); + return addHeapObject(ret); + }; + imports.wbg.__wbindgen_number_new = function(arg0) { + const ret = arg0; + return addHeapObject(ret); + }; + imports.wbg.__wbg_newwithbyteoffsetandlength_ce1e75f0ce5f7974 = function(arg0, arg1, arg2) { + const ret = new Uint8Array(getObject(arg0), arg1 >>> 0, arg2 >>> 0); + return addHeapObject(ret); + }; + imports.wbg.__wbindgen_string_new = function(arg0, arg1) { + const ret = getStringFromWasm0(arg0, arg1); + return addHeapObject(ret); + }; + imports.wbg.__wbindgen_throw = function(arg0, arg1) { + throw new Error(getStringFromWasm0(arg0, arg1)); + }; + + if (typeof input === 'string' || (typeof Request === 'function' && input instanceof Request) || (typeof URL === 'function' && input instanceof URL)) { + input = fetch(input); + } + + + + const { instance, module } = await load(await input, imports); + + wasm = instance.exports; + init.__wbindgen_wasm_module = module; + + return wasm; +} + +export default init; + diff --git a/node_modules/@parcel/source-map/parcel_sourcemap_wasm/dist-web/parcel_sourcemap_wasm_bg.wasm b/node_modules/@parcel/source-map/parcel_sourcemap_wasm/dist-web/parcel_sourcemap_wasm_bg.wasm new file mode 100644 index 00000000..77ee917f Binary files /dev/null and b/node_modules/@parcel/source-map/parcel_sourcemap_wasm/dist-web/parcel_sourcemap_wasm_bg.wasm differ diff --git a/node_modules/@parcel/transformer-babel/LICENSE b/node_modules/@parcel/transformer-babel/LICENSE new file mode 100644 index 00000000..7fb9bc95 --- /dev/null +++ b/node_modules/@parcel/transformer-babel/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017-present Devon Govett + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/@parcel/transformer-babel/README.md b/node_modules/@parcel/transformer-babel/README.md new file mode 100644 index 00000000..57cb9ed1 --- /dev/null +++ b/node_modules/@parcel/transformer-babel/README.md @@ -0,0 +1,17 @@ +# @parcel/transformer-babel + +This Parcel transformer plugin is responsible for transforming assets with Babel. It uses `@babel/core` to resolve babel config the same way Babel does and uses that if found. If no filesystem config is found it uses a default config that supports the most common cases. + +## Default config + +- `@babel/preset-env` - Uses the targets defined in `package.json` or a default set of targets if none are defined to pass to `@babel/preset-env` as options. It runs over all source code as well as installed packages that have a browserslist with higher targets than the app being built by Parcel. +- `@babel/plugin-flow-strip-types` - Right now it configures the flow plugin which uses the ast to check if there is a flow directive and strips types if so [TODO: It should do a cheap check of the code and only apply the plugin if a flow directive is found as it may affect parsing when it shouldn't] +- `@babel/plugin-transform-typescript` - Configured for files with extenions `.ts` and `.tsx` +- `@babel/plugin-transform-react-jsx` - Configured if file has extension `.jsx` or if a React like dependency is found as a dependency in package.json. + +## Custom config perf warnings + +Parcel now supports all configuration formats that Babel supports, but some of them come with negative performance impacts. + +- `babel.config.js`/`.babelrc.js` - Since Babel 7, config files as JS are now supported. While this provides flexibility it hurts cacheability. Parcel cannot cache using the contents of the these files because the config they return is non deterministic based on content alone. Imported dependencies may change or the results may be based on environment variables. For this reason Parcel has to resolve load these files on each build and make sure their output is still the same. Another downside to using JS config files is that they end up being `require()`ed by Babel so Parcel cannot rebuild when the file changes in watch mode. To avoid these performance penalties, it is suggested that you use a `babel.config.json` or `.babelrc` file instead. +- `require('@babel')` - With the advent of JS config files, it is now possible to directly require presets and plugins in configs instead of using names or paths that are resolved by Babel. Unfortunately this gives Parcel no information about which plugins/presets were used in a transformation so Parcel will be forced to run the Babel transformations on every build. It is suggested to avoid this type of configuration. diff --git a/node_modules/@parcel/transformer-babel/lib/BabelTransformer.js b/node_modules/@parcel/transformer-babel/lib/BabelTransformer.js new file mode 100644 index 00000000..f574946f --- /dev/null +++ b/node_modules/@parcel/transformer-babel/lib/BabelTransformer.js @@ -0,0 +1,128 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +var _babelErrorUtils = require("./babelErrorUtils"); +function _plugin() { + const data = require("@parcel/plugin"); + _plugin = function () { + return data; + }; + return data; +} +function _utils() { + const data = require("@parcel/utils"); + _utils = function () { + return data; + }; + return data; +} +function _sourceMap() { + const data = _interopRequireDefault(require("@parcel/source-map")); + _sourceMap = function () { + return data; + }; + return data; +} +function _semver() { + const data = _interopRequireDefault(require("semver")); + _semver = function () { + return data; + }; + return data; +} +var _babel = _interopRequireDefault(require("./babel7")); +var _config = require("./config"); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } +var _default = exports.default = new (_plugin().Transformer)({ + loadConfig({ + config, + options, + logger + }) { + return (0, _config.load)(config, options, logger); + }, + canReuseAST({ + ast + }) { + return ast.type === 'babel' && _semver().default.satisfies(ast.version, '^7.0.0'); + }, + async transform({ + asset, + config, + logger, + options, + tracer + }) { + try { + if (config !== null && config !== void 0 && config.config) { + if (asset.meta.babelPlugins != null && Array.isArray(asset.meta.babelPlugins)) { + await (0, _babel.default)({ + asset, + options, + logger, + babelOptions: config, + additionalPlugins: asset.meta.babelPlugins, + tracer + }); + } else { + await (0, _babel.default)({ + asset, + options, + logger, + babelOptions: config, + tracer + }); + } + } + return [asset]; + } catch (e) { + throw await (0, _babelErrorUtils.babelErrorEnhancer)(e, asset); + } + }, + async generate({ + asset, + ast, + options + }) { + let originalSourceMap = await asset.getMap(); + let sourceFileName = (0, _utils().relativeUrl)(options.projectRoot, asset.filePath); + const babelCorePath = await options.packageManager.resolve('@babel/core', asset.filePath, { + range: '^7.12.0', + saveDev: true, + shouldAutoInstall: options.shouldAutoInstall + }); + const { + default: generate + } = await options.packageManager.require('@babel/generator', babelCorePath.resolved); + let { + code, + rawMappings + } = generate(ast.program, { + sourceFileName, + sourceMaps: !!asset.env.sourceMap, + comments: true + }); + let map = new (_sourceMap().default)(options.projectRoot); + if (rawMappings) { + map.addIndexedMappings(rawMappings); + } + if (originalSourceMap) { + // The babel AST already contains the correct mappings, but not the source contents. + // We need to copy over the source contents from the original map. + let sourcesContent = originalSourceMap.getSourcesContentMap(); + for (let filePath in sourcesContent) { + let content = sourcesContent[filePath]; + if (content != null) { + map.setSourceContent(filePath, content); + } + } + } + return { + content: code, + map + }; + } +}); \ No newline at end of file diff --git a/node_modules/@parcel/transformer-babel/lib/babel7.js b/node_modules/@parcel/transformer-babel/lib/babel7.js new file mode 100644 index 00000000..30d4ba8b --- /dev/null +++ b/node_modules/@parcel/transformer-babel/lib/babel7.js @@ -0,0 +1,132 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = babel7; +function _assert() { + const data = _interopRequireDefault(require("assert")); + _assert = function () { + return data; + }; + return data; +} +function _path() { + const data = _interopRequireDefault(require("path")); + _path = function () { + return data; + }; + return data; +} +function _diagnostic() { + const data = require("@parcel/diagnostic"); + _diagnostic = function () { + return data; + }; + return data; +} +function _utils() { + const data = require("@parcel/utils"); + _utils = function () { + return data; + }; + return data; +} +var _remapAstLocations = require("./remapAstLocations"); +var _package = _interopRequireDefault(require("../package.json")); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } +const transformerVersion = _package.default.version; +(0, _assert().default)(typeof transformerVersion === 'string'); +async function babel7(opts) { + var _babelOptions$config$; + let { + asset, + options, + babelOptions, + additionalPlugins = [], + tracer + } = opts; + const babelCore = await options.packageManager.require('@babel/core', asset.filePath, { + range: '^7.12.0', + saveDev: true, + shouldAutoInstall: options.shouldAutoInstall + }); + let config = { + ...babelOptions.config, + plugins: additionalPlugins.concat(babelOptions.config.plugins), + code: false, + ast: true, + filename: asset.filePath, + babelrc: false, + configFile: false, + parserOpts: { + ...babelOptions.config.parserOpts, + sourceFilename: (0, _utils().relativeUrl)(options.projectRoot, asset.filePath), + allowReturnOutsideFunction: true, + strictMode: false, + sourceType: 'module', + plugins: [...(((_babelOptions$config$ = babelOptions.config.parserOpts) === null || _babelOptions$config$ === void 0 ? void 0 : _babelOptions$config$.plugins) ?? []), ...(babelOptions.syntaxPlugins ?? []), + // Applied by preset-env + 'classProperties', 'classPrivateProperties', 'classPrivateMethods', 'exportDefaultFrom' + // 'topLevelAwait' + ] + }, + caller: { + name: 'parcel', + version: transformerVersion, + targets: JSON.stringify(babelOptions.targets), + outputFormat: asset.env.outputFormat + } + }; + if (tracer.enabled) { + config.wrapPluginVisitorMethod = (key, nodeType, fn) => { + return function () { + let pluginKey = key; + if (pluginKey.startsWith(options.projectRoot)) { + pluginKey = _path().default.relative(options.projectRoot, pluginKey); + } + const measurement = tracer.createMeasurement(pluginKey, nodeType, _path().default.relative(options.projectRoot, asset.filePath)); + fn.apply(this, arguments); + measurement && measurement.end(); + }; + }; + } + let ast = await asset.getAST(); + let res; + if (ast) { + res = await babelCore.transformFromAstAsync(ast.program, asset.isASTDirty() ? undefined : await asset.getCode(), config); + } else { + res = await babelCore.transformAsync(await asset.getCode(), config); + if (res.ast) { + let map = await asset.getMap(); + if (map) { + (0, _remapAstLocations.remapAstLocations)(babelCore.types, res.ast, map); + } + } + if (res.externalDependencies) { + for (let f of res.externalDependencies) { + if (!_path().default.isAbsolute(f)) { + opts.logger.warn({ + message: (0, _diagnostic().md)`Ignoring non-absolute Babel external dependency: ${f}`, + hints: ['Please report this to the corresponding Babel plugin and/or to Parcel.'] + }); + } else { + if (await options.inputFS.exists(f)) { + asset.invalidateOnFileChange(f); + } else { + asset.invalidateOnFileCreate({ + filePath: f + }); + } + } + } + } + } + if (res.ast) { + asset.setAST({ + type: 'babel', + version: '7.0.0', + program: res.ast + }); + } +} \ No newline at end of file diff --git a/node_modules/@parcel/transformer-babel/lib/babelErrorUtils.js b/node_modules/@parcel/transformer-babel/lib/babelErrorUtils.js new file mode 100644 index 00000000..3e864d50 --- /dev/null +++ b/node_modules/@parcel/transformer-babel/lib/babelErrorUtils.js @@ -0,0 +1,15 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.babelErrorEnhancer = babelErrorEnhancer; +async function babelErrorEnhancer(error, asset) { + if (error.loc) { + let start = error.message.startsWith(asset.filePath) ? asset.filePath.length + 1 : 0; + error.message = error.message.slice(start).split('\n')[0].trim(); + } + error.source = await asset.getCode(); + error.filePath = asset.filePath; + return error; +} \ No newline at end of file diff --git a/node_modules/@parcel/transformer-babel/lib/config.js b/node_modules/@parcel/transformer-babel/lib/config.js new file mode 100644 index 00000000..ddb68440 --- /dev/null +++ b/node_modules/@parcel/transformer-babel/lib/config.js @@ -0,0 +1,311 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.load = load; +function _json() { + const data = _interopRequireDefault(require("json5")); + _json = function () { + return data; + }; + return data; +} +function _path() { + const data = _interopRequireDefault(require("path")); + _path = function () { + return data; + }; + return data; +} +function _utils() { + const data = require("@parcel/utils"); + _utils = function () { + return data; + }; + return data; +} +function _diagnostic() { + const data = require("@parcel/diagnostic"); + _diagnostic = function () { + return data; + }; + return data; +} +var _constants = require("./constants"); +var _jsx = _interopRequireDefault(require("./jsx")); +var _flow = _interopRequireDefault(require("./flow")); +var _utils2 = require("./utils"); +function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } +const TYPESCRIPT_EXTNAME_RE = /\.tsx?$/; +const JS_EXTNAME_RE = /^\.(js|cjs|mjs)$/; +const BABEL_CONFIG_FILENAMES = ['.babelrc', '.babelrc.js', '.babelrc.json', '.babelrc.cjs', '.babelrc.mjs', '.babelignore', 'babel.config.js', 'babel.config.json', 'babel.config.mjs', 'babel.config.cjs']; +async function load(config, options, logger) { + // Don't transpile inside node_modules + if (!config.isSource) { + return; + } + + // Invalidate when any babel config file is added. + for (let fileName of BABEL_CONFIG_FILENAMES) { + config.invalidateOnFileCreate({ + fileName, + aboveFilePath: config.searchPath + }); + } + + // Do nothing if we cannot resolve any babel config filenames. Checking using our own + // config resolution (which is cached) is much faster than relying on babel. + if (!(await (0, _utils().resolveConfig)(options.inputFS, config.searchPath, BABEL_CONFIG_FILENAMES, options.projectRoot))) { + return buildDefaultBabelConfig(options, config); + } + const babelCore = await options.packageManager.require('@babel/core', config.searchPath, { + range: _constants.BABEL_CORE_RANGE, + saveDev: true, + shouldAutoInstall: options.shouldAutoInstall + }); + config.addDevDependency({ + specifier: '@babel/core', + resolveFrom: config.searchPath, + range: _constants.BABEL_CORE_RANGE + }); + config.invalidateOnEnvChange('BABEL_ENV'); + config.invalidateOnEnvChange('NODE_ENV'); + let babelOptions = { + filename: config.searchPath, + cwd: options.projectRoot, + envName: options.env.BABEL_ENV ?? options.env.NODE_ENV ?? (options.mode === 'production' || options.mode === 'development' ? options.mode : null) ?? 'development', + showIgnoredFiles: true + }; + let partialConfig = await babelCore.loadPartialConfigAsync(babelOptions); + let addIncludedFile = file => { + if (JS_EXTNAME_RE.test(_path().default.extname(file))) { + // We need to invalidate on startup in case the config is non-static, + // e.g. uses unknown environment variables, reads from the filesystem, etc. + logger.warn({ + message: `It looks like you're using a JavaScript Babel config file. This means the config cannot be watched for changes, and Babel transformations cannot be cached. You'll need to restart Parcel for changes to this config to take effect. Try using a ${_path().default.basename(file, _path().default.extname(file)) + '.json'} file instead.` + }); + config.invalidateOnStartup(); + + // But also add the config as a dev dependency so we can at least attempt invalidation in watch mode. + config.addDevDependency({ + specifier: (0, _utils().relativePath)(options.projectRoot, file), + resolveFrom: _path().default.join(options.projectRoot, 'index'), + // Also invalidate @babel/core when the config or a dependency updates. + // This ensures that the caches in @babel/core are also invalidated. + additionalInvalidations: [{ + specifier: '@babel/core', + resolveFrom: config.searchPath, + range: _constants.BABEL_CORE_RANGE + }] + }); + } else { + config.invalidateOnFileChange(file); + } + }; + let warnOldVersion = () => { + logger.warn({ + message: 'You are using an old version of @babel/core which does not support the necessary features for Parcel to cache and watch babel config files safely. You may need to restart Parcel for config changes to take effect. Please upgrade to @babel/core 7.12.0 or later to resolve this issue.' + }); + config.invalidateOnStartup(); + }; + + // Old versions of @babel/core return null from loadPartialConfig when the file should explicitly not be run through babel (ignore/exclude) + if (partialConfig == null) { + warnOldVersion(); + return; + } + if (partialConfig.files == null) { + // If the files property is missing, we're on an old version of @babel/core. + // We need to invalidate on startup because we can't properly track dependencies. + if (partialConfig.hasFilesystemConfig()) { + warnOldVersion(); + if (typeof partialConfig.babelrcPath === 'string') { + addIncludedFile(partialConfig.babelrcPath); + } + if (typeof partialConfig.configPath === 'string') { + addIncludedFile(partialConfig.configPath); + } + } + } else { + for (let file of partialConfig.files) { + addIncludedFile(file); + } + } + if (partialConfig.fileHandling != null && partialConfig.fileHandling !== 'transpile') {} else if (partialConfig.hasFilesystemConfig()) { + // Determine what syntax plugins we need to enable + let syntaxPlugins = []; + if (TYPESCRIPT_EXTNAME_RE.test(config.searchPath)) { + syntaxPlugins.push('typescript'); + if (config.searchPath.endsWith('.tsx')) { + syntaxPlugins.push('jsx'); + } + } else if (await (0, _jsx.default)(options, config)) { + syntaxPlugins.push('jsx'); + } + + // If the config has plugins loaded with require(), or inline plugins in the config, + // we can't cache the result of the compilation because we don't know where they came from. + if (hasRequire(partialConfig.options)) { + logger.warn({ + message: 'It looks like you are using `require` to configure Babel plugins or presets. This means Babel transformations cannot be cached and will run on each build. Please use strings to configure Babel instead.' + }); + config.setCacheKey(JSON.stringify(Date.now())); + config.invalidateOnStartup(); + } else { + await warnOnRedundantPlugins(options.inputFS, partialConfig, logger); + definePluginDependencies(config, partialConfig.options, options); + config.setCacheKey((0, _utils().hashObject)(partialConfig.options)); + } + return { + internal: false, + config: partialConfig.options, + targets: (0, _utils2.enginesToBabelTargets)(config.env), + syntaxPlugins + }; + } else { + return buildDefaultBabelConfig(options, config); + } +} +async function buildDefaultBabelConfig(options, config) { + // If this is a .ts or .tsx file, we don't need to enable flow. + if (TYPESCRIPT_EXTNAME_RE.test(config.searchPath)) { + return; + } + + // Detect flow. If not enabled, babel doesn't need to run at all. + let babelOptions = await (0, _flow.default)(config, options); + if (babelOptions == null) { + return; + } + + // When flow is enabled, we may also need to enable JSX so it parses properly. + let syntaxPlugins = []; + if (await (0, _jsx.default)(options, config)) { + syntaxPlugins.push('jsx'); + } + definePluginDependencies(config, babelOptions, options); + return { + internal: true, + config: babelOptions, + syntaxPlugins + }; +} +function hasRequire(options) { + let configItems = [...options.presets, ...options.plugins]; + return configItems.some(item => !item.file); +} +function definePluginDependencies(config, babelConfig, options) { + if (babelConfig == null) { + return; + } + let configItems = [...(babelConfig.presets || []), ...(babelConfig.plugins || [])]; + for (let configItem of configItems) { + // FIXME: this uses a relative path from the project root rather than resolving + // from the config location because configItem.file.request can be a shorthand + // rather than a full package name. + config.addDevDependency({ + specifier: (0, _utils().relativePath)(options.projectRoot, configItem.file.resolved), + resolveFrom: _path().default.join(options.projectRoot, 'index'), + // Also invalidate @babel/core when the plugin or a dependency updates. + // This ensures that the caches in @babel/core are also invalidated. + additionalInvalidations: [{ + specifier: '@babel/core', + resolveFrom: config.searchPath, + range: _constants.BABEL_CORE_RANGE + }] + }); + } +} +const redundantPresets = new Set(['@babel/preset-env', '@babel/preset-react', '@babel/preset-typescript', '@parcel/babel-preset-env']); +async function warnOnRedundantPlugins(fs, babelConfig, logger) { + if (babelConfig == null) { + return; + } + let configPath = babelConfig.config ?? babelConfig.babelrc; + if (!configPath) { + return; + } + let presets = babelConfig.options.presets || []; + let plugins = babelConfig.options.plugins || []; + let foundRedundantPresets = new Set(); + let filteredPresets = presets.filter(preset => { + if (redundantPresets.has(preset.file.request)) { + foundRedundantPresets.add(preset.file.request); + return false; + } + return true; + }); + let filePath = _path().default.relative(process.cwd(), configPath); + let diagnostics = []; + if (filteredPresets.length === 0 && foundRedundantPresets.size > 0 && plugins.length === 0) { + diagnostics.push({ + message: (0, _diagnostic().md)`Parcel includes transpilation by default. Babel config __${filePath}__ contains only redundant presets. Deleting it may significantly improve build performance.`, + codeFrames: [{ + filePath: configPath, + codeHighlights: await getCodeHighlights(fs, configPath, foundRedundantPresets) + }], + hints: [(0, _diagnostic().md)`Delete __${filePath}__`], + documentationURL: 'https://parceljs.org/languages/javascript/#default-presets' + }); + } else if (foundRedundantPresets.size > 0) { + diagnostics.push({ + message: (0, _diagnostic().md)`Parcel includes transpilation by default. Babel config __${filePath}__ includes the following redundant presets: ${[...foundRedundantPresets].map(p => _diagnostic().md.underline(p))}. Removing these may improve build performance.`, + codeFrames: [{ + filePath: configPath, + codeHighlights: await getCodeHighlights(fs, configPath, foundRedundantPresets) + }], + hints: [(0, _diagnostic().md)`Remove the above presets from __${filePath}__`], + documentationURL: 'https://parceljs.org/languages/javascript/#default-presets' + }); + } + if (foundRedundantPresets.has('@babel/preset-env')) { + diagnostics.push({ + message: "@babel/preset-env does not support Parcel's targets, which will likely result in unnecessary transpilation and larger bundle sizes.", + codeFrames: [{ + filePath: babelConfig.config ?? babelConfig.babelrc, + codeHighlights: await getCodeHighlights(fs, babelConfig.config ?? babelConfig.babelrc, new Set(['@babel/preset-env'])) + }], + hints: [`Either remove __@babel/preset-env__ to use Parcel's builtin transpilation, or replace with __@parcel/babel-preset-env__`], + documentationURL: 'https://parceljs.org/languages/javascript/#custom-plugins' + }); + } + if (diagnostics.length > 0) { + logger.warn(diagnostics); + } +} +async function getCodeHighlights(fs, filePath, redundantPresets) { + let ext = _path().default.extname(filePath); + if (ext !== '.js' && ext !== '.cjs' && ext !== '.mjs') { + let contents = await fs.readFile(filePath, 'utf8'); + let json = _json().default.parse(contents); + let presets = json.presets || []; + let pointers = []; + for (let i = 0; i < presets.length; i++) { + if (Array.isArray(presets[i]) && redundantPresets.has(presets[i][0])) { + pointers.push({ + type: 'value', + key: `/presets/${i}/0` + }); + } else if (redundantPresets.has(presets[i])) { + pointers.push({ + type: 'value', + key: `/presets/${i}` + }); + } + } + if (pointers.length > 0) { + return (0, _diagnostic().generateJSONCodeHighlights)(contents, pointers); + } + } + return [{ + start: { + line: 1, + column: 1 + }, + end: { + line: 1, + column: 1 + } + }]; +} \ No newline at end of file diff --git a/node_modules/@parcel/transformer-babel/lib/constants.js b/node_modules/@parcel/transformer-babel/lib/constants.js new file mode 100644 index 00000000..d1c736a2 --- /dev/null +++ b/node_modules/@parcel/transformer-babel/lib/constants.js @@ -0,0 +1,7 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.BABEL_CORE_RANGE = void 0; +const BABEL_CORE_RANGE = exports.BABEL_CORE_RANGE = '^7.12.0'; \ No newline at end of file diff --git a/node_modules/@parcel/transformer-babel/lib/flow.js b/node_modules/@parcel/transformer-babel/lib/flow.js new file mode 100644 index 00000000..668b3674 --- /dev/null +++ b/node_modules/@parcel/transformer-babel/lib/flow.js @@ -0,0 +1,48 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = getFlowOptions; +var _constants = require("./constants"); +function _path() { + const data = _interopRequireDefault(require("path")); + _path = function () { + return data; + }; + return data; +} +function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } +/** + * Generates a babel config for stripping away Flow types. + */ +async function getFlowOptions(config, options) { + if (!config.isSource) { + return null; + } + + // Only add flow plugin if `flow-bin` is listed as a dependency in the root package.json + let conf = await config.getConfigFrom(options.projectRoot + '/index', ['package.json']); + let pkg = conf === null || conf === void 0 ? void 0 : conf.contents; + if (!pkg || !(pkg.dependencies && pkg.dependencies['flow-bin']) && !(pkg.devDependencies && pkg.devDependencies['flow-bin'])) { + return null; + } + const babelCore = await options.packageManager.require('@babel/core', config.searchPath, { + range: _constants.BABEL_CORE_RANGE, + saveDev: true, + shouldAutoInstall: options.shouldAutoInstall + }); + await options.packageManager.require('@babel/plugin-transform-flow-strip-types', config.searchPath, { + range: '^7.0.0', + saveDev: true, + shouldAutoInstall: options.shouldAutoInstall + }); + return { + plugins: [babelCore.createConfigItem(['@babel/plugin-transform-flow-strip-types', { + requireDirective: true + }], { + type: 'plugin', + dirname: _path().default.dirname(config.searchPath) + })] + }; +} \ No newline at end of file diff --git a/node_modules/@parcel/transformer-babel/lib/jsx.js b/node_modules/@parcel/transformer-babel/lib/jsx.js new file mode 100644 index 00000000..4d2689f6 --- /dev/null +++ b/node_modules/@parcel/transformer-babel/lib/jsx.js @@ -0,0 +1,37 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = isJSX; +function _path() { + const data = _interopRequireDefault(require("path")); + _path = function () { + return data; + }; + return data; +} +function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } +const JSX_EXTENSIONS = new Set(['.jsx', '.tsx']); +const JSX_LIBRARIES = ['react', 'preact', 'nervejs', 'hyperapp']; + +/** + * Returns whether an asset is likely JSX. Attempts to detect react or react-like libraries + * along with + */ +async function isJSX(options, config) { + if (!config.isSource) { + return false; + } + if (JSX_EXTENSIONS.has(_path().default.extname(config.searchPath))) { + return true; + } + let pkg = await config.getPackage(); + if (pkg !== null && pkg !== void 0 && pkg.alias && pkg.alias['react']) { + // e.g.: `{ alias: { "react": "preact/compat" } }` + return true; + } else { + // Find a dependency that implies JSX syntax. + return JSX_LIBRARIES.some(libName => pkg && (pkg.dependencies && pkg.dependencies[libName] || pkg.devDependencies && pkg.devDependencies[libName] || pkg.peerDependencies && pkg.peerDependencies[libName])); + } +} \ No newline at end of file diff --git a/node_modules/@parcel/transformer-babel/lib/remapAstLocations.js b/node_modules/@parcel/transformer-babel/lib/remapAstLocations.js new file mode 100644 index 00000000..08718b26 --- /dev/null +++ b/node_modules/@parcel/transformer-babel/lib/remapAstLocations.js @@ -0,0 +1,55 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.remapAstLocations = remapAstLocations; +function remapAstLocations(t, ast, map) { + // remap ast to original mappings + // This improves sourcemap accuracy and fixes sourcemaps when scope-hoisting + traverseAll(t, ast.program, node => { + if (node.loc) { + var _node$loc; + if ((_node$loc = node.loc) !== null && _node$loc !== void 0 && _node$loc.start) { + let mapping = map.findClosestMapping(node.loc.start.line, node.loc.start.column); + if (mapping !== null && mapping !== void 0 && mapping.original) { + // $FlowFixMe + node.loc.start.line = mapping.original.line; + // $FlowFixMe + node.loc.start.column = mapping.original.column; + + // $FlowFixMe + let length = node.loc.end.column - node.loc.start.column; + + // $FlowFixMe + node.loc.end.line = mapping.original.line; + // $FlowFixMe + node.loc.end.column = mapping.original.column + length; + + // $FlowFixMe + node.loc.filename = mapping.source; + } else { + // Maintain null mappings? + node.loc = null; + } + } + } + }); +} +function traverseAll(t, node, visitor) { + if (!node) { + return; + } + visitor(node); + for (let key of t.VISITOR_KEYS[node.type] || []) { + // $FlowFixMe + let subNode = node[key]; + if (Array.isArray(subNode)) { + for (let i = 0; i < subNode.length; i++) { + traverseAll(t, subNode[i], visitor); + } + } else { + traverseAll(t, subNode, visitor); + } + } +} \ No newline at end of file diff --git a/node_modules/@parcel/transformer-babel/lib/types.js b/node_modules/@parcel/transformer-babel/lib/types.js new file mode 100644 index 00000000..9a390c31 --- /dev/null +++ b/node_modules/@parcel/transformer-babel/lib/types.js @@ -0,0 +1 @@ +"use strict"; \ No newline at end of file diff --git a/node_modules/@parcel/transformer-babel/lib/utils.js b/node_modules/@parcel/transformer-babel/lib/utils.js new file mode 100644 index 00000000..e70cad97 --- /dev/null +++ b/node_modules/@parcel/transformer-babel/lib/utils.js @@ -0,0 +1,75 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.enginesToBabelTargets = enginesToBabelTargets; +function _assert() { + const data = _interopRequireDefault(require("assert")); + _assert = function () { + return data; + }; + return data; +} +function _semver() { + const data = _interopRequireDefault(require("semver")); + _semver = function () { + return data; + }; + return data; +} +function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } +// Copied from @babel/helper-compilation-targets/lib/options.js +const TargetNames = { + node: 'node', + chrome: 'chrome', + opera: 'opera', + edge: 'edge', + firefox: 'firefox', + safari: 'safari', + ie: 'ie', + ios: 'ios', + android: 'android', + electron: 'electron', + samsung: 'samsung', + rhino: 'rhino' +}; + +// List of browsers to exclude when the esmodule target is specified. +// Based on https://caniuse.com/#feat=es6-module +const ESMODULE_BROWSERS = ['not ie <= 11', 'not edge < 16', 'not firefox < 60', 'not chrome < 61', 'not safari < 11', 'not opera < 48', 'not ios_saf < 11', 'not op_mini all', 'not android < 76', 'not blackberry > 0', 'not op_mob > 0', 'not and_chr < 76', 'not and_ff < 68', 'not ie_mob > 0', 'not and_uc > 0', 'not samsung < 8.2', 'not and_qq > 0', 'not baidu > 0', 'not kaios > 0']; +function enginesToBabelTargets(env) { + // "Targets" is the name @babel/preset-env uses for what Parcel calls engines. + // This should not be confused with Parcel's own targets. + // Unlike Parcel's engines, @babel/preset-env expects to work with minimum + // versions, not semver ranges, of its targets. + let targets = {}; + for (let engineName of Object.keys(env.engines)) { + let engineValue = env.engines[engineName]; + + // if the engineValue is a string, it might be a semver range. Use the minimum + // possible version instead. + if (engineName === 'browsers') { + targets[engineName] = engineValue; + } else { + var _semver$minVersion; + (0, _assert().default)(typeof engineValue === 'string'); + if (!TargetNames.hasOwnProperty(engineName)) continue; + let minVersion = (_semver$minVersion = _semver().default.minVersion(engineValue)) === null || _semver$minVersion === void 0 ? void 0 : _semver$minVersion.toString(); + targets[engineName] = minVersion ?? engineValue; + } + } + if (env.outputFormat === 'esmodule' && env.isBrowser()) { + // If there is already a browsers target, add a blacklist to exclude + // instead of using babel's esmodules target. This allows specifying + // a newer set of browsers than the baseline esmodule support list. + // See https://github.com/babel/babel/issues/8809. + if (targets.browsers) { + let browsers = Array.isArray(targets.browsers) ? targets.browsers : [targets.browsers]; + targets.browsers = [...browsers, ...ESMODULE_BROWSERS]; + } else { + targets.esmodules = true; + } + } + return targets; +} \ No newline at end of file diff --git a/node_modules/@parcel/transformer-babel/package.json b/node_modules/@parcel/transformer-babel/package.json new file mode 100644 index 00000000..d25476ca --- /dev/null +++ b/node_modules/@parcel/transformer-babel/package.json @@ -0,0 +1,39 @@ +{ + "name": "@parcel/transformer-babel", + "version": "2.13.3", + "license": "MIT", + "publishConfig": { + "access": "public" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "repository": { + "type": "git", + "url": "https://github.com/parcel-bundler/parcel.git" + }, + "main": "lib/BabelTransformer.js", + "source": "src/BabelTransformer.js", + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.13.3" + }, + "dependencies": { + "@parcel/diagnostic": "2.13.3", + "@parcel/plugin": "2.13.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.13.3", + "browserslist": "^4.6.6", + "json5": "^2.2.0", + "nullthrows": "^1.1.1", + "semver": "^7.5.2" + }, + "devDependencies": { + "@babel/core": "^7.22.11", + "@babel/preset-env": "^7.22.14", + "@babel/types": "^7.22.11", + "@parcel/types": "2.13.3" + }, + "gitHead": "d19b1f6bdb05eb5a3085f44daae15c0fe2709ab9" +} diff --git a/node_modules/@parcel/transformer-babel/src/BabelTransformer.js b/node_modules/@parcel/transformer-babel/src/BabelTransformer.js new file mode 100644 index 00000000..45e6e3c2 --- /dev/null +++ b/node_modules/@parcel/transformer-babel/src/BabelTransformer.js @@ -0,0 +1,102 @@ +// @flow strict-local + +import {babelErrorEnhancer} from './babelErrorUtils'; +import {Transformer} from '@parcel/plugin'; +import {relativeUrl} from '@parcel/utils'; +import SourceMap from '@parcel/source-map'; +import semver from 'semver'; +import babel7 from './babel7'; +import {load} from './config'; + +export default (new Transformer({ + loadConfig({config, options, logger}) { + return load(config, options, logger); + }, + + canReuseAST({ast}) { + return ast.type === 'babel' && semver.satisfies(ast.version, '^7.0.0'); + }, + + async transform({asset, config, logger, options, tracer}) { + try { + if (config?.config) { + if ( + asset.meta.babelPlugins != null && + Array.isArray(asset.meta.babelPlugins) + ) { + await babel7({ + asset, + options, + logger, + babelOptions: config, + additionalPlugins: asset.meta.babelPlugins, + tracer, + }); + } else { + await babel7({ + asset, + options, + logger, + babelOptions: config, + tracer, + }); + } + } + + return [asset]; + } catch (e) { + throw await babelErrorEnhancer(e, asset); + } + }, + + async generate({asset, ast, options}) { + let originalSourceMap = await asset.getMap(); + let sourceFileName: string = relativeUrl( + options.projectRoot, + asset.filePath, + ); + + const babelCorePath = await options.packageManager.resolve( + '@babel/core', + asset.filePath, + { + range: '^7.12.0', + saveDev: true, + shouldAutoInstall: options.shouldAutoInstall, + }, + ); + + const {default: generate} = await options.packageManager.require( + '@babel/generator', + babelCorePath.resolved, + ); + + let {code, rawMappings} = generate(ast.program, { + sourceFileName, + sourceMaps: !!asset.env.sourceMap, + comments: true, + }); + + let map = new SourceMap(options.projectRoot); + if (rawMappings) { + map.addIndexedMappings(rawMappings); + } + + if (originalSourceMap) { + // The babel AST already contains the correct mappings, but not the source contents. + // We need to copy over the source contents from the original map. + let sourcesContent = originalSourceMap.getSourcesContentMap(); + for (let filePath in sourcesContent) { + let content = sourcesContent[filePath]; + if (content != null) { + map.setSourceContent(filePath, content); + } + } + } + + return { + content: code, + map, + }; + }, +}): Transformer); diff --git a/node_modules/@parcel/transformer-babel/src/babel7.js b/node_modules/@parcel/transformer-babel/src/babel7.js new file mode 100644 index 00000000..ef613ffd --- /dev/null +++ b/node_modules/@parcel/transformer-babel/src/babel7.js @@ -0,0 +1,144 @@ +// @flow + +import type { + MutableAsset, + AST, + PluginOptions, + PluginTracer, + PluginLogger, +} from '@parcel/types'; +import typeof * as BabelCore from '@babel/core'; + +import invariant from 'assert'; +import path from 'path'; +import {md} from '@parcel/diagnostic'; +import {relativeUrl} from '@parcel/utils'; +import {remapAstLocations} from './remapAstLocations'; + +import packageJson from '../package.json'; + +const transformerVersion: mixed = packageJson.version; +invariant(typeof transformerVersion === 'string'); + +type Babel7TransformOptions = {| + asset: MutableAsset, + options: PluginOptions, + logger: PluginLogger, + babelOptions: any, + additionalPlugins?: Array, + tracer: PluginTracer, +|}; + +export default async function babel7( + opts: Babel7TransformOptions, +): Promise { + let {asset, options, babelOptions, additionalPlugins = [], tracer} = opts; + const babelCore: BabelCore = await options.packageManager.require( + '@babel/core', + asset.filePath, + { + range: '^7.12.0', + saveDev: true, + shouldAutoInstall: options.shouldAutoInstall, + }, + ); + + let config = { + ...babelOptions.config, + plugins: additionalPlugins.concat(babelOptions.config.plugins), + code: false, + ast: true, + filename: asset.filePath, + babelrc: false, + configFile: false, + parserOpts: { + ...babelOptions.config.parserOpts, + sourceFilename: relativeUrl(options.projectRoot, asset.filePath), + allowReturnOutsideFunction: true, + strictMode: false, + sourceType: 'module', + plugins: [ + ...(babelOptions.config.parserOpts?.plugins ?? []), + ...(babelOptions.syntaxPlugins ?? []), + // Applied by preset-env + 'classProperties', + 'classPrivateProperties', + 'classPrivateMethods', + 'exportDefaultFrom', + // 'topLevelAwait' + ], + }, + caller: { + name: 'parcel', + version: transformerVersion, + targets: JSON.stringify(babelOptions.targets), + outputFormat: asset.env.outputFormat, + }, + }; + + if (tracer.enabled) { + config.wrapPluginVisitorMethod = ( + key: string, + nodeType: string, + fn: Function, + ) => { + return function () { + let pluginKey = key; + if (pluginKey.startsWith(options.projectRoot)) { + pluginKey = path.relative(options.projectRoot, pluginKey); + } + const measurement = tracer.createMeasurement( + pluginKey, + nodeType, + path.relative(options.projectRoot, asset.filePath), + ); + fn.apply(this, arguments); + measurement && measurement.end(); + }; + }; + } + + let ast = await asset.getAST(); + let res; + if (ast) { + res = await babelCore.transformFromAstAsync( + ast.program, + asset.isASTDirty() ? undefined : await asset.getCode(), + config, + ); + } else { + res = await babelCore.transformAsync(await asset.getCode(), config); + if (res.ast) { + let map = await asset.getMap(); + if (map) { + remapAstLocations(babelCore.types, res.ast, map); + } + } + if (res.externalDependencies) { + for (let f of res.externalDependencies) { + if (!path.isAbsolute(f)) { + opts.logger.warn({ + message: md`Ignoring non-absolute Babel external dependency: ${f}`, + hints: [ + 'Please report this to the corresponding Babel plugin and/or to Parcel.', + ], + }); + } else { + if (await options.inputFS.exists(f)) { + asset.invalidateOnFileChange(f); + } else { + asset.invalidateOnFileCreate({filePath: f}); + } + } + } + } + } + + if (res.ast) { + asset.setAST({ + type: 'babel', + version: '7.0.0', + program: res.ast, + }); + } +} diff --git a/node_modules/@parcel/transformer-babel/src/babelErrorUtils.js b/node_modules/@parcel/transformer-babel/src/babelErrorUtils.js new file mode 100644 index 00000000..9d705d10 --- /dev/null +++ b/node_modules/@parcel/transformer-babel/src/babelErrorUtils.js @@ -0,0 +1,30 @@ +// @flow +import type {BaseAsset} from '@parcel/types'; + +export type BabelError = Error & { + loc?: { + line: number, + column: number, + ... + }, + source?: string, + filePath?: string, + ... +}; + +export async function babelErrorEnhancer( + error: BabelError, + asset: BaseAsset, +): Promise { + if (error.loc) { + let start = error.message.startsWith(asset.filePath) + ? asset.filePath.length + 1 + : 0; + error.message = error.message.slice(start).split('\n')[0].trim(); + } + + error.source = await asset.getCode(); + error.filePath = asset.filePath; + + return error; +} diff --git a/node_modules/@parcel/transformer-babel/src/config.js b/node_modules/@parcel/transformer-babel/src/config.js new file mode 100644 index 00000000..66490264 --- /dev/null +++ b/node_modules/@parcel/transformer-babel/src/config.js @@ -0,0 +1,413 @@ +// @flow + +import type {Config, PluginOptions, PluginLogger} from '@parcel/types'; +import typeof * as BabelCore from '@babel/core'; +import type {Diagnostic} from '@parcel/diagnostic'; +import type {BabelConfig} from './types'; + +import json5 from 'json5'; +import path from 'path'; +import {hashObject, relativePath, resolveConfig} from '@parcel/utils'; +import {md, generateJSONCodeHighlights} from '@parcel/diagnostic'; +import {BABEL_CORE_RANGE} from './constants'; + +import isJSX from './jsx'; +import getFlowOptions from './flow'; +import {enginesToBabelTargets} from './utils'; + +const TYPESCRIPT_EXTNAME_RE = /\.tsx?$/; +const JS_EXTNAME_RE = /^\.(js|cjs|mjs)$/; +const BABEL_CONFIG_FILENAMES = [ + '.babelrc', + '.babelrc.js', + '.babelrc.json', + '.babelrc.cjs', + '.babelrc.mjs', + '.babelignore', + 'babel.config.js', + 'babel.config.json', + 'babel.config.mjs', + 'babel.config.cjs', +]; + +type BabelConfigResult = {| + internal: boolean, + config: BabelConfig, + targets?: mixed, + syntaxPlugins?: mixed, +|}; + +export async function load( + config: Config, + options: PluginOptions, + logger: PluginLogger, +): Promise { + // Don't transpile inside node_modules + if (!config.isSource) { + return; + } + + // Invalidate when any babel config file is added. + for (let fileName of BABEL_CONFIG_FILENAMES) { + config.invalidateOnFileCreate({ + fileName, + aboveFilePath: config.searchPath, + }); + } + + // Do nothing if we cannot resolve any babel config filenames. Checking using our own + // config resolution (which is cached) is much faster than relying on babel. + if ( + !(await resolveConfig( + options.inputFS, + config.searchPath, + BABEL_CONFIG_FILENAMES, + options.projectRoot, + )) + ) { + return buildDefaultBabelConfig(options, config); + } + + const babelCore: BabelCore = await options.packageManager.require( + '@babel/core', + config.searchPath, + { + range: BABEL_CORE_RANGE, + saveDev: true, + shouldAutoInstall: options.shouldAutoInstall, + }, + ); + config.addDevDependency({ + specifier: '@babel/core', + resolveFrom: config.searchPath, + range: BABEL_CORE_RANGE, + }); + + config.invalidateOnEnvChange('BABEL_ENV'); + config.invalidateOnEnvChange('NODE_ENV'); + let babelOptions = { + filename: config.searchPath, + cwd: options.projectRoot, + envName: + options.env.BABEL_ENV ?? + options.env.NODE_ENV ?? + (options.mode === 'production' || options.mode === 'development' + ? options.mode + : null) ?? + 'development', + showIgnoredFiles: true, + }; + + let partialConfig: ?{| + [string]: any, + |} = await babelCore.loadPartialConfigAsync(babelOptions); + + let addIncludedFile = file => { + if (JS_EXTNAME_RE.test(path.extname(file))) { + // We need to invalidate on startup in case the config is non-static, + // e.g. uses unknown environment variables, reads from the filesystem, etc. + logger.warn({ + message: `It looks like you're using a JavaScript Babel config file. This means the config cannot be watched for changes, and Babel transformations cannot be cached. You'll need to restart Parcel for changes to this config to take effect. Try using a ${ + path.basename(file, path.extname(file)) + '.json' + } file instead.`, + }); + config.invalidateOnStartup(); + + // But also add the config as a dev dependency so we can at least attempt invalidation in watch mode. + config.addDevDependency({ + specifier: relativePath(options.projectRoot, file), + resolveFrom: path.join(options.projectRoot, 'index'), + // Also invalidate @babel/core when the config or a dependency updates. + // This ensures that the caches in @babel/core are also invalidated. + additionalInvalidations: [ + { + specifier: '@babel/core', + resolveFrom: config.searchPath, + range: BABEL_CORE_RANGE, + }, + ], + }); + } else { + config.invalidateOnFileChange(file); + } + }; + + let warnOldVersion = () => { + logger.warn({ + message: + 'You are using an old version of @babel/core which does not support the necessary features for Parcel to cache and watch babel config files safely. You may need to restart Parcel for config changes to take effect. Please upgrade to @babel/core 7.12.0 or later to resolve this issue.', + }); + config.invalidateOnStartup(); + }; + + // Old versions of @babel/core return null from loadPartialConfig when the file should explicitly not be run through babel (ignore/exclude) + if (partialConfig == null) { + warnOldVersion(); + return; + } + + if (partialConfig.files == null) { + // If the files property is missing, we're on an old version of @babel/core. + // We need to invalidate on startup because we can't properly track dependencies. + if (partialConfig.hasFilesystemConfig()) { + warnOldVersion(); + + if (typeof partialConfig.babelrcPath === 'string') { + addIncludedFile(partialConfig.babelrcPath); + } + + if (typeof partialConfig.configPath === 'string') { + addIncludedFile(partialConfig.configPath); + } + } + } else { + for (let file of partialConfig.files) { + addIncludedFile(file); + } + } + + if ( + partialConfig.fileHandling != null && + partialConfig.fileHandling !== 'transpile' + ) { + return; + } else if (partialConfig.hasFilesystemConfig()) { + // Determine what syntax plugins we need to enable + let syntaxPlugins = []; + if (TYPESCRIPT_EXTNAME_RE.test(config.searchPath)) { + syntaxPlugins.push('typescript'); + if (config.searchPath.endsWith('.tsx')) { + syntaxPlugins.push('jsx'); + } + } else if (await isJSX(options, config)) { + syntaxPlugins.push('jsx'); + } + + // If the config has plugins loaded with require(), or inline plugins in the config, + // we can't cache the result of the compilation because we don't know where they came from. + if (hasRequire(partialConfig.options)) { + logger.warn({ + message: + 'It looks like you are using `require` to configure Babel plugins or presets. This means Babel transformations cannot be cached and will run on each build. Please use strings to configure Babel instead.', + }); + + config.setCacheKey(JSON.stringify(Date.now())); + config.invalidateOnStartup(); + } else { + await warnOnRedundantPlugins(options.inputFS, partialConfig, logger); + definePluginDependencies(config, partialConfig.options, options); + config.setCacheKey(hashObject(partialConfig.options)); + } + + return { + internal: false, + config: partialConfig.options, + targets: enginesToBabelTargets(config.env), + syntaxPlugins, + }; + } else { + return buildDefaultBabelConfig(options, config); + } +} + +async function buildDefaultBabelConfig( + options: PluginOptions, + config: Config, +): Promise { + // If this is a .ts or .tsx file, we don't need to enable flow. + if (TYPESCRIPT_EXTNAME_RE.test(config.searchPath)) { + return; + } + + // Detect flow. If not enabled, babel doesn't need to run at all. + let babelOptions = await getFlowOptions(config, options); + if (babelOptions == null) { + return; + } + + // When flow is enabled, we may also need to enable JSX so it parses properly. + let syntaxPlugins = []; + if (await isJSX(options, config)) { + syntaxPlugins.push('jsx'); + } + + definePluginDependencies(config, babelOptions, options); + return { + internal: true, + config: babelOptions, + syntaxPlugins, + }; +} + +function hasRequire(options) { + let configItems = [...options.presets, ...options.plugins]; + return configItems.some(item => !item.file); +} + +function definePluginDependencies(config, babelConfig: ?BabelConfig, options) { + if (babelConfig == null) { + return; + } + + let configItems = [ + ...(babelConfig.presets || []), + ...(babelConfig.plugins || []), + ]; + for (let configItem of configItems) { + // FIXME: this uses a relative path from the project root rather than resolving + // from the config location because configItem.file.request can be a shorthand + // rather than a full package name. + config.addDevDependency({ + specifier: relativePath(options.projectRoot, configItem.file.resolved), + resolveFrom: path.join(options.projectRoot, 'index'), + // Also invalidate @babel/core when the plugin or a dependency updates. + // This ensures that the caches in @babel/core are also invalidated. + additionalInvalidations: [ + { + specifier: '@babel/core', + resolveFrom: config.searchPath, + range: BABEL_CORE_RANGE, + }, + ], + }); + } +} + +const redundantPresets = new Set([ + '@babel/preset-env', + '@babel/preset-react', + '@babel/preset-typescript', + '@parcel/babel-preset-env', +]); + +async function warnOnRedundantPlugins(fs, babelConfig, logger) { + if (babelConfig == null) { + return; + } + + let configPath = babelConfig.config ?? babelConfig.babelrc; + if (!configPath) { + return; + } + + let presets = babelConfig.options.presets || []; + let plugins = babelConfig.options.plugins || []; + let foundRedundantPresets = new Set(); + + let filteredPresets = presets.filter(preset => { + if (redundantPresets.has(preset.file.request)) { + foundRedundantPresets.add(preset.file.request); + return false; + } + + return true; + }); + + let filePath = path.relative(process.cwd(), configPath); + let diagnostics: Array = []; + + if ( + filteredPresets.length === 0 && + foundRedundantPresets.size > 0 && + plugins.length === 0 + ) { + diagnostics.push({ + message: md`Parcel includes transpilation by default. Babel config __${filePath}__ contains only redundant presets. Deleting it may significantly improve build performance.`, + codeFrames: [ + { + filePath: configPath, + codeHighlights: await getCodeHighlights( + fs, + configPath, + foundRedundantPresets, + ), + }, + ], + hints: [md`Delete __${filePath}__`], + documentationURL: + 'https://parceljs.org/languages/javascript/#default-presets', + }); + } else if (foundRedundantPresets.size > 0) { + diagnostics.push({ + message: md`Parcel includes transpilation by default. Babel config __${filePath}__ includes the following redundant presets: ${[ + ...foundRedundantPresets, + ].map(p => + md.underline(p), + )}. Removing these may improve build performance.`, + codeFrames: [ + { + filePath: configPath, + codeHighlights: await getCodeHighlights( + fs, + configPath, + foundRedundantPresets, + ), + }, + ], + hints: [md`Remove the above presets from __${filePath}__`], + documentationURL: + 'https://parceljs.org/languages/javascript/#default-presets', + }); + } + + if (foundRedundantPresets.has('@babel/preset-env')) { + diagnostics.push({ + message: + "@babel/preset-env does not support Parcel's targets, which will likely result in unnecessary transpilation and larger bundle sizes.", + codeFrames: [ + { + filePath: babelConfig.config ?? babelConfig.babelrc, + codeHighlights: await getCodeHighlights( + fs, + babelConfig.config ?? babelConfig.babelrc, + new Set(['@babel/preset-env']), + ), + }, + ], + hints: [ + `Either remove __@babel/preset-env__ to use Parcel's builtin transpilation, or replace with __@parcel/babel-preset-env__`, + ], + documentationURL: + 'https://parceljs.org/languages/javascript/#custom-plugins', + }); + } + + if (diagnostics.length > 0) { + logger.warn(diagnostics); + } +} + +async function getCodeHighlights(fs, filePath, redundantPresets) { + let ext = path.extname(filePath); + if (ext !== '.js' && ext !== '.cjs' && ext !== '.mjs') { + let contents = await fs.readFile(filePath, 'utf8'); + let json = json5.parse(contents); + + let presets = json.presets || []; + let pointers = []; + for (let i = 0; i < presets.length; i++) { + if (Array.isArray(presets[i]) && redundantPresets.has(presets[i][0])) { + pointers.push({type: 'value', key: `/presets/${i}/0`}); + } else if (redundantPresets.has(presets[i])) { + pointers.push({type: 'value', key: `/presets/${i}`}); + } + } + + if (pointers.length > 0) { + return generateJSONCodeHighlights(contents, pointers); + } + } + + return [ + { + start: { + line: 1, + column: 1, + }, + end: { + line: 1, + column: 1, + }, + }, + ]; +} diff --git a/node_modules/@parcel/transformer-babel/src/constants.js b/node_modules/@parcel/transformer-babel/src/constants.js new file mode 100644 index 00000000..60a92311 --- /dev/null +++ b/node_modules/@parcel/transformer-babel/src/constants.js @@ -0,0 +1,3 @@ +// @flow strict-local + +export const BABEL_CORE_RANGE = '^7.12.0'; diff --git a/node_modules/@parcel/transformer-babel/src/flow.js b/node_modules/@parcel/transformer-babel/src/flow.js new file mode 100644 index 00000000..5dd47e9c --- /dev/null +++ b/node_modules/@parcel/transformer-babel/src/flow.js @@ -0,0 +1,66 @@ +// @flow + +import type {Config, PluginOptions, PackageJSON} from '@parcel/types'; +import type {BabelConfig} from './types'; +import typeof * as BabelCore from '@babel/core'; + +import {BABEL_CORE_RANGE} from './constants'; +import path from 'path'; + +/** + * Generates a babel config for stripping away Flow types. + */ +export default async function getFlowOptions( + config: Config, + options: PluginOptions, +): Promise { + if (!config.isSource) { + return null; + } + + // Only add flow plugin if `flow-bin` is listed as a dependency in the root package.json + let conf = await config.getConfigFrom( + options.projectRoot + '/index', + ['package.json'], + ); + let pkg = conf?.contents; + if ( + !pkg || + (!(pkg.dependencies && pkg.dependencies['flow-bin']) && + !(pkg.devDependencies && pkg.devDependencies['flow-bin'])) + ) { + return null; + } + + const babelCore: BabelCore = await options.packageManager.require( + '@babel/core', + config.searchPath, + { + range: BABEL_CORE_RANGE, + saveDev: true, + shouldAutoInstall: options.shouldAutoInstall, + }, + ); + + await options.packageManager.require( + '@babel/plugin-transform-flow-strip-types', + config.searchPath, + { + range: '^7.0.0', + saveDev: true, + shouldAutoInstall: options.shouldAutoInstall, + }, + ); + + return { + plugins: [ + babelCore.createConfigItem( + ['@babel/plugin-transform-flow-strip-types', {requireDirective: true}], + { + type: 'plugin', + dirname: path.dirname(config.searchPath), + }, + ), + ], + }; +} diff --git a/node_modules/@parcel/transformer-babel/src/jsx.js b/node_modules/@parcel/transformer-babel/src/jsx.js new file mode 100644 index 00000000..4b03c128 --- /dev/null +++ b/node_modules/@parcel/transformer-babel/src/jsx.js @@ -0,0 +1,40 @@ +// @flow strict-local + +import type {Config, PluginOptions} from '@parcel/types'; + +import path from 'path'; + +const JSX_EXTENSIONS = new Set(['.jsx', '.tsx']); +const JSX_LIBRARIES = ['react', 'preact', 'nervejs', 'hyperapp']; + +/** + * Returns whether an asset is likely JSX. Attempts to detect react or react-like libraries + * along with + */ +export default async function isJSX( + options: PluginOptions, + config: Config, +): Promise { + if (!config.isSource) { + return false; + } + + if (JSX_EXTENSIONS.has(path.extname(config.searchPath))) { + return true; + } + + let pkg = await config.getPackage(); + if (pkg?.alias && pkg.alias['react']) { + // e.g.: `{ alias: { "react": "preact/compat" } }` + return true; + } else { + // Find a dependency that implies JSX syntax. + return JSX_LIBRARIES.some( + libName => + pkg && + ((pkg.dependencies && pkg.dependencies[libName]) || + (pkg.devDependencies && pkg.devDependencies[libName]) || + (pkg.peerDependencies && pkg.peerDependencies[libName])), + ); + } +} diff --git a/node_modules/@parcel/transformer-babel/src/remapAstLocations.js b/node_modules/@parcel/transformer-babel/src/remapAstLocations.js new file mode 100644 index 00000000..db650f29 --- /dev/null +++ b/node_modules/@parcel/transformer-babel/src/remapAstLocations.js @@ -0,0 +1,70 @@ +// @flow strict-local + +import type {File as BabelNodeFile} from '@babel/types'; +import type SourceMap from '@parcel/source-map'; +import type {Node} from '@babel/types'; +import typeof * as BabelTypes from '@babel/types'; + +export function remapAstLocations( + t: BabelTypes, + ast: BabelNodeFile, + map: SourceMap, +) { + // remap ast to original mappings + // This improves sourcemap accuracy and fixes sourcemaps when scope-hoisting + traverseAll(t, ast.program, node => { + if (node.loc) { + if (node.loc?.start) { + let mapping = map.findClosestMapping( + node.loc.start.line, + node.loc.start.column, + ); + + if (mapping?.original) { + // $FlowFixMe + node.loc.start.line = mapping.original.line; + // $FlowFixMe + node.loc.start.column = mapping.original.column; + + // $FlowFixMe + let length = node.loc.end.column - node.loc.start.column; + + // $FlowFixMe + node.loc.end.line = mapping.original.line; + // $FlowFixMe + node.loc.end.column = mapping.original.column + length; + + // $FlowFixMe + node.loc.filename = mapping.source; + } else { + // Maintain null mappings? + node.loc = null; + } + } + } + }); +} + +function traverseAll( + t: BabelTypes, + node: Node, + visitor: (node: Node) => void, +): void { + if (!node) { + return; + } + + visitor(node); + + for (let key of t.VISITOR_KEYS[node.type] || []) { + // $FlowFixMe + let subNode: Node | Array = node[key]; + if (Array.isArray(subNode)) { + for (let i = 0; i < subNode.length; i++) { + traverseAll(t, subNode[i], visitor); + } + } else { + traverseAll(t, subNode, visitor); + } + } +} diff --git a/node_modules/@parcel/transformer-babel/src/types.js b/node_modules/@parcel/transformer-babel/src/types.js new file mode 100644 index 00000000..36a03d16 --- /dev/null +++ b/node_modules/@parcel/transformer-babel/src/types.js @@ -0,0 +1,6 @@ +// @flow + +export type BabelConfig = {| + plugins?: Array, + presets?: Array, +|}; diff --git a/node_modules/@parcel/transformer-babel/src/utils.js b/node_modules/@parcel/transformer-babel/src/utils.js new file mode 100644 index 00000000..affba152 --- /dev/null +++ b/node_modules/@parcel/transformer-babel/src/utils.js @@ -0,0 +1,86 @@ +// @flow + +import type {Environment} from '@parcel/types'; +import type {Targets as BabelTargets} from '@babel/preset-env'; + +import invariant from 'assert'; +import semver from 'semver'; + +// Copied from @babel/helper-compilation-targets/lib/options.js +const TargetNames = { + node: 'node', + chrome: 'chrome', + opera: 'opera', + edge: 'edge', + firefox: 'firefox', + safari: 'safari', + ie: 'ie', + ios: 'ios', + android: 'android', + electron: 'electron', + samsung: 'samsung', + rhino: 'rhino', +}; + +// List of browsers to exclude when the esmodule target is specified. +// Based on https://caniuse.com/#feat=es6-module +const ESMODULE_BROWSERS = [ + 'not ie <= 11', + 'not edge < 16', + 'not firefox < 60', + 'not chrome < 61', + 'not safari < 11', + 'not opera < 48', + 'not ios_saf < 11', + 'not op_mini all', + 'not android < 76', + 'not blackberry > 0', + 'not op_mob > 0', + 'not and_chr < 76', + 'not and_ff < 68', + 'not ie_mob > 0', + 'not and_uc > 0', + 'not samsung < 8.2', + 'not and_qq > 0', + 'not baidu > 0', + 'not kaios > 0', +]; + +export function enginesToBabelTargets(env: Environment): BabelTargets { + // "Targets" is the name @babel/preset-env uses for what Parcel calls engines. + // This should not be confused with Parcel's own targets. + // Unlike Parcel's engines, @babel/preset-env expects to work with minimum + // versions, not semver ranges, of its targets. + let targets = {}; + for (let engineName of Object.keys(env.engines)) { + let engineValue = env.engines[engineName]; + + // if the engineValue is a string, it might be a semver range. Use the minimum + // possible version instead. + if (engineName === 'browsers') { + targets[engineName] = engineValue; + } else { + invariant(typeof engineValue === 'string'); + if (!TargetNames.hasOwnProperty(engineName)) continue; + let minVersion = semver.minVersion(engineValue)?.toString(); + targets[engineName] = minVersion ?? engineValue; + } + } + + if (env.outputFormat === 'esmodule' && env.isBrowser()) { + // If there is already a browsers target, add a blacklist to exclude + // instead of using babel's esmodules target. This allows specifying + // a newer set of browsers than the baseline esmodule support list. + // See https://github.com/babel/babel/issues/8809. + if (targets.browsers) { + let browsers = Array.isArray(targets.browsers) + ? targets.browsers + : [targets.browsers]; + targets.browsers = [...browsers, ...ESMODULE_BROWSERS]; + } else { + targets.esmodules = true; + } + } + + return targets; +} diff --git a/node_modules/@parcel/transformer-css/LICENSE b/node_modules/@parcel/transformer-css/LICENSE new file mode 100644 index 00000000..7fb9bc95 --- /dev/null +++ b/node_modules/@parcel/transformer-css/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017-present Devon Govett + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/@parcel/transformer-css/lib/CSSTransformer.js b/node_modules/@parcel/transformer-css/lib/CSSTransformer.js new file mode 100644 index 00000000..c28df431 --- /dev/null +++ b/node_modules/@parcel/transformer-css/lib/CSSTransformer.js @@ -0,0 +1,389 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +function _path() { + const data = _interopRequireDefault(require("path")); + _path = function () { + return data; + }; + return data; +} +function _sourceMap() { + const data = _interopRequireDefault(require("@parcel/source-map")); + _sourceMap = function () { + return data; + }; + return data; +} +function _plugin() { + const data = require("@parcel/plugin"); + _plugin = function () { + return data; + }; + return data; +} +function _utils() { + const data = require("@parcel/utils"); + _utils = function () { + return data; + }; + return data; +} +function native() { + const data = _interopRequireWildcard(require("lightningcss")); + native = function () { + return data; + }; + return data; +} +function _browserslist() { + const data = _interopRequireDefault(require("browserslist")); + _browserslist = function () { + return data; + }; + return data; +} +function _nullthrows() { + const data = _interopRequireDefault(require("nullthrows")); + _nullthrows = function () { + return data; + }; + return data; +} +function _diagnostic() { + const data = _interopRequireWildcard(require("@parcel/diagnostic")); + _diagnostic = function () { + return data; + }; + return data; +} +function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } +function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } +function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } +const { + transform, + transformStyleAttribute, + browserslistToTargets +} = native(); +var _default = exports.default = new (_plugin().Transformer)({ + async loadConfig({ + config, + options + }) { + var _contents$cssModules, _contents$cssModules2, _contents$cssModules3, _contents$cssModules4; + let conf = await config.getConfigFrom(options.projectRoot + '/index', [], { + packageKey: '@parcel/transformer-css' + }); + let contents = conf === null || conf === void 0 ? void 0 : conf.contents; + if (typeof (contents === null || contents === void 0 || (_contents$cssModules = contents.cssModules) === null || _contents$cssModules === void 0 ? void 0 : _contents$cssModules.include) === 'string') { + contents.cssModules.include = [(0, _utils().globToRegex)(contents.cssModules.include)]; + } else if (Array.isArray(contents === null || contents === void 0 || (_contents$cssModules2 = contents.cssModules) === null || _contents$cssModules2 === void 0 ? void 0 : _contents$cssModules2.include)) { + contents.cssModules.include = contents.cssModules.include.map(include => typeof include === 'string' ? (0, _utils().globToRegex)(include) : include); + } + if (typeof (contents === null || contents === void 0 || (_contents$cssModules3 = contents.cssModules) === null || _contents$cssModules3 === void 0 ? void 0 : _contents$cssModules3.exclude) === 'string') { + contents.cssModules.exclude = [(0, _utils().globToRegex)(contents.cssModules.exclude)]; + } else if (Array.isArray(contents === null || contents === void 0 || (_contents$cssModules4 = contents.cssModules) === null || _contents$cssModules4 === void 0 ? void 0 : _contents$cssModules4.exclude)) { + contents.cssModules.exclude = contents.cssModules.exclude.map(exclude => typeof exclude === 'string' ? (0, _utils().globToRegex)(exclude) : exclude); + } + return contents; + }, + async transform({ + asset, + config, + options, + logger + }) { + // Normalize the asset's environment so that properties that only affect JS don't cause CSS to be duplicated. + // For example, with ESModule and CommonJS targets, only a single shared CSS bundle should be produced. + let env = asset.env; + asset.setEnvironment({ + context: 'browser', + engines: { + browsers: asset.env.engines.browsers + }, + shouldOptimize: asset.env.shouldOptimize, + shouldScopeHoist: asset.env.shouldScopeHoist, + sourceMap: asset.env.sourceMap + }); + let [code, originalMap] = await Promise.all([asset.getBuffer(), asset.getMap(), + // $FlowFixMe native.default is the init function only when bundled for the browser build + process.browser && native().default()]); + let targets = getTargets(asset.env.engines.browsers); + let res; + try { + if (asset.meta.type === 'attr') { + res = transformStyleAttribute({ + code, + analyzeDependencies: true, + errorRecovery: (config === null || config === void 0 ? void 0 : config.errorRecovery) || false, + targets + }); + } else { + let cssModules = false; + if (asset.meta.type !== 'tag' && asset.meta.cssModulesCompiled == null) { + let cssModulesConfig = config === null || config === void 0 ? void 0 : config.cssModules; + let isCSSModule = /\.module\./.test(asset.filePath); + if (asset.isSource) { + var _cssModulesConfig$exc; + let projectRootPath = _path().default.relative(options.projectRoot, asset.filePath); + if (typeof cssModulesConfig === 'boolean') { + isCSSModule = true; + } else if (cssModulesConfig !== null && cssModulesConfig !== void 0 && cssModulesConfig.include) { + isCSSModule = cssModulesConfig.include.some(include => include.test(projectRootPath)); + } else if (cssModulesConfig !== null && cssModulesConfig !== void 0 && cssModulesConfig.global) { + isCSSModule = true; + } + if (cssModulesConfig !== null && cssModulesConfig !== void 0 && (_cssModulesConfig$exc = cssModulesConfig.exclude) !== null && _cssModulesConfig$exc !== void 0 && _cssModulesConfig$exc.some(exclude => exclude.test(projectRootPath))) { + isCSSModule = false; + } + } + if (isCSSModule) { + if (cssModulesConfig !== null && cssModulesConfig !== void 0 && cssModulesConfig.dashedIdents && !asset.isSource) { + cssModulesConfig.dashedIdents = false; + } + cssModules = cssModulesConfig ?? true; + } + } + res = transform({ + filename: (0, _utils().normalizeSeparators)(_path().default.relative(options.projectRoot, asset.filePath)), + code, + cssModules, + analyzeDependencies: asset.meta.hasDependencies !== false ? { + preserveImports: true + } : false, + sourceMap: !!asset.env.sourceMap, + drafts: config === null || config === void 0 ? void 0 : config.drafts, + pseudoClasses: config === null || config === void 0 ? void 0 : config.pseudoClasses, + errorRecovery: (config === null || config === void 0 ? void 0 : config.errorRecovery) || false, + targets + }); + } + } catch (err) { + var _err$data; + err.filePath = asset.filePath; + let diagnostic = (0, _diagnostic().errorToDiagnostic)(err, { + origin: '@parcel/transformer-css' + }); + if (((_err$data = err.data) === null || _err$data === void 0 ? void 0 : _err$data.type) === 'AmbiguousUrlInCustomProperty' && err.data.url) { + let p = '/' + (0, _utils().relativePath)(options.projectRoot, _path().default.resolve(_path().default.dirname(asset.filePath), err.data.url), false); + diagnostic[0].hints = [`Replace with: url(${p})`]; + diagnostic[0].documentationURL = 'https://parceljs.org/languages/css/#url()'; + } + throw new (_diagnostic().default)({ + diagnostic + }); + } + if (res.warnings) { + for (let warning of res.warnings) { + logger.warn({ + message: warning.message, + codeFrames: [{ + filePath: asset.filePath, + codeHighlights: [{ + start: { + line: warning.loc.line, + column: warning.loc.column + 1 + }, + end: { + line: warning.loc.line, + column: warning.loc.column + 1 + } + }] + }] + }); + } + } + if (res.map != null) { + let vlqMap = JSON.parse(Buffer.from(res.map).toString()); + let map = new (_sourceMap().default)(options.projectRoot); + map.addVLQMap(vlqMap); + if (originalMap) { + map.extends(originalMap); + } + asset.setMap(map); + } + if (res.dependencies) { + for (let dep of res.dependencies) { + let loc = convertLoc(dep.loc); + if (originalMap) { + loc = (0, _utils().remapSourceLocation)(loc, originalMap); + } + if (dep.type === 'import' && !res.exports) { + asset.addDependency({ + specifier: dep.url, + specifierType: 'url', + loc, + packageConditions: ['style'], + meta: { + // For the glob resolver to distinguish between `@import` and other URL dependencies. + isCSSImport: true, + media: dep.media, + placeholder: dep.placeholder + } + }); + } else if (dep.type === 'url') { + asset.addURLDependency(dep.url, { + loc, + meta: { + placeholder: dep.placeholder + } + }); + } + } + } + let assets = [asset]; + let buffer = Buffer.from(res.code); + if (res.exports != null) { + let exports = res.exports; + asset.symbols.ensure(); + asset.symbols.set('default', 'default'); + let dependencies = new Map(); + let locals = new Map(); + let c = 0; + let depjs = ''; + let js = ''; + let cssImports = ''; + for (let key in exports) { + locals.set(exports[key].name, key); + } + asset.uniqueKey ??= asset.id; + let seen = new Set(); + let add = key => { + if (seen.has(key)) { + return; + } + seen.add(key); + let e = exports[key]; + let s = `module.exports[${JSON.stringify(key)}] = \`${e.name}`; + for (let ref of e.composes) { + s += ' '; + if (ref.type === 'local') { + let exported = (0, _nullthrows().default)(locals.get(ref.name)); + add(exported); + s += '${' + `module.exports[${JSON.stringify(exported)}]` + '}'; + asset.addDependency({ + specifier: (0, _nullthrows().default)(asset.uniqueKey), + specifierType: 'esm', + symbols: new Map([[exported, { + local: ref.name, + isWeak: false, + loc: null + }]]) + }); + } else if (ref.type === 'global') { + s += ref.name; + } else if (ref.type === 'dependency') { + let d = dependencies.get(ref.specifier); + if (d == null) { + d = `dep_${c++}`; + depjs += `import * as ${d} from ${JSON.stringify(ref.specifier)};\n`; + dependencies.set(ref.specifier, d); + cssImports += `@import "${ref.specifier}";\n`; + asset.addDependency({ + specifier: ref.specifier, + specifierType: 'esm', + packageConditions: ['style'] + }); + } + s += '${' + `${d}[${JSON.stringify(ref.name)}]` + '}'; + } + } + s += '`;\n'; + + // If the export is referenced internally (e.g. used @keyframes), add a self-reference + // to the JS so the symbol is retained during tree-shaking. + if (e.isReferenced) { + s += `module.exports[${JSON.stringify(key)}];\n`; + asset.addDependency({ + specifier: (0, _nullthrows().default)(asset.uniqueKey), + specifierType: 'esm', + symbols: new Map([[key, { + local: exports[key].name, + isWeak: false, + loc: null + }]]) + }); + } + js += s; + }; + + // It's possible that the exports can be ordered differently between builds. + // Sorting by key is safe as the order is irrelevant but needs to be deterministic. + for (let key of Object.keys(exports).sort()) { + asset.symbols.set(key, exports[key].name); + add(key); + } + if (res.dependencies) { + for (let dep of res.dependencies) { + if (dep.type === 'import') { + // TODO: Figure out how to treeshake this + let d = `dep_$${c++}`; + depjs += `import * as ${d} from ${JSON.stringify(dep.url)};\n`; + js += `for (let key in ${d}) { if (key in module.exports) module.exports[key] += ' ' + ${d}[key]; else module.exports[key] = ${d}[key]; }\n`; + asset.symbols.set('*', '*'); + } + } + } + if (res.references != null) { + let references = res.references; + for (let symbol in references) { + let reference = references[symbol]; + asset.addDependency({ + specifier: reference.specifier, + specifierType: 'esm', + packageConditions: ['style'], + symbols: new Map([[reference.name, { + local: symbol, + isWeak: false, + loc: null + }]]) + }); + asset.meta.hasReferences = true; + cssImports += `@import "${reference.specifier}";\n`; + } + } + assets.push({ + type: 'js', + content: depjs + js, + dependencies: [], + env + }); + + // Prepend @import rules for each composes dependency so packager knows where to insert them. + if (cssImports.length > 0) { + buffer = Buffer.concat([Buffer.from(cssImports), buffer]); + } + } + asset.setBuffer(buffer); + return assets; + } +}); +let cache = new Map(); +function getTargets(browsers) { + if (browsers == null) { + return undefined; + } + let cached = cache.get(browsers); + if (cached != null) { + return cached; + } + let targets = browserslistToTargets((0, _browserslist().default)(browsers)); + cache.set(browsers, targets); + return targets; +} +function convertLoc(loc) { + return { + filePath: loc.filePath, + start: { + line: loc.start.line, + column: loc.start.column + }, + end: { + line: loc.end.line, + column: loc.end.column + 1 + } + }; +} \ No newline at end of file diff --git a/node_modules/@parcel/transformer-css/package.json b/node_modules/@parcel/transformer-css/package.json new file mode 100644 index 00000000..2591d30b --- /dev/null +++ b/node_modules/@parcel/transformer-css/package.json @@ -0,0 +1,38 @@ +{ + "name": "@parcel/transformer-css", + "version": "2.13.3", + "license": "MIT", + "publishConfig": { + "access": "public" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "repository": { + "type": "git", + "url": "https://github.com/parcel-bundler/parcel.git" + }, + "main": "lib/CSSTransformer.js", + "source": "src/CSSTransformer.js", + "engines": { + "node": ">= 16.0.0", + "parcel": "^2.13.3" + }, + "dependencies": { + "@parcel/diagnostic": "2.13.3", + "@parcel/plugin": "2.13.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.13.3", + "browserslist": "^4.6.6", + "lightningcss": "^1.22.1", + "nullthrows": "^1.1.1" + }, + "devDependencies": { + "lightningcss-wasm": "^1.22.1" + }, + "browser": { + "lightningcss": "lightningcss-wasm" + }, + "gitHead": "d19b1f6bdb05eb5a3085f44daae15c0fe2709ab9" +} diff --git a/node_modules/@parcel/transformer-css/src/CSSTransformer.js b/node_modules/@parcel/transformer-css/src/CSSTransformer.js new file mode 100644 index 00000000..32ab86a1 --- /dev/null +++ b/node_modules/@parcel/transformer-css/src/CSSTransformer.js @@ -0,0 +1,390 @@ +// @flow strict-local + +import type {SourceLocation} from '@parcel/types'; + +import path from 'path'; +import SourceMap from '@parcel/source-map'; +import {Transformer} from '@parcel/plugin'; +import { + remapSourceLocation, + relativePath, + globToRegex, + normalizeSeparators, +} from '@parcel/utils'; +import {type SourceLocation as LightningSourceLocation} from 'lightningcss'; +import * as native from 'lightningcss'; +import browserslist from 'browserslist'; +import nullthrows from 'nullthrows'; +import ThrowableDiagnostic, {errorToDiagnostic} from '@parcel/diagnostic'; + +const {transform, transformStyleAttribute, browserslistToTargets} = native; + +export default (new Transformer({ + async loadConfig({config, options}) { + let conf = await config.getConfigFrom(options.projectRoot + '/index', [], { + packageKey: '@parcel/transformer-css', + }); + let contents = conf?.contents; + if (typeof contents?.cssModules?.include === 'string') { + contents.cssModules.include = [globToRegex(contents.cssModules.include)]; + } else if (Array.isArray(contents?.cssModules?.include)) { + contents.cssModules.include = contents.cssModules.include.map(include => + typeof include === 'string' ? globToRegex(include) : include, + ); + } + if (typeof contents?.cssModules?.exclude === 'string') { + contents.cssModules.exclude = [globToRegex(contents.cssModules.exclude)]; + } else if (Array.isArray(contents?.cssModules?.exclude)) { + contents.cssModules.exclude = contents.cssModules.exclude.map(exclude => + typeof exclude === 'string' ? globToRegex(exclude) : exclude, + ); + } + return contents; + }, + async transform({asset, config, options, logger}) { + // Normalize the asset's environment so that properties that only affect JS don't cause CSS to be duplicated. + // For example, with ESModule and CommonJS targets, only a single shared CSS bundle should be produced. + let env = asset.env; + asset.setEnvironment({ + context: 'browser', + engines: { + browsers: asset.env.engines.browsers, + }, + shouldOptimize: asset.env.shouldOptimize, + shouldScopeHoist: asset.env.shouldScopeHoist, + sourceMap: asset.env.sourceMap, + }); + + let [code, originalMap] = await Promise.all([ + asset.getBuffer(), + asset.getMap(), + // $FlowFixMe native.default is the init function only when bundled for the browser build + process.browser && native.default(), + ]); + + let targets = getTargets(asset.env.engines.browsers); + let res; + try { + if (asset.meta.type === 'attr') { + res = transformStyleAttribute({ + code, + analyzeDependencies: true, + errorRecovery: config?.errorRecovery || false, + targets, + }); + } else { + let cssModules = false; + if ( + asset.meta.type !== 'tag' && + asset.meta.cssModulesCompiled == null + ) { + let cssModulesConfig = config?.cssModules; + let isCSSModule = /\.module\./.test(asset.filePath); + if (asset.isSource) { + let projectRootPath = path.relative( + options.projectRoot, + asset.filePath, + ); + if (typeof cssModulesConfig === 'boolean') { + isCSSModule = true; + } else if (cssModulesConfig?.include) { + isCSSModule = cssModulesConfig.include.some(include => + include.test(projectRootPath), + ); + } else if (cssModulesConfig?.global) { + isCSSModule = true; + } + + if ( + cssModulesConfig?.exclude?.some(exclude => + exclude.test(projectRootPath), + ) + ) { + isCSSModule = false; + } + } + + if (isCSSModule) { + if (cssModulesConfig?.dashedIdents && !asset.isSource) { + cssModulesConfig.dashedIdents = false; + } + + cssModules = cssModulesConfig ?? true; + } + } + + res = transform({ + filename: normalizeSeparators( + path.relative(options.projectRoot, asset.filePath), + ), + code, + cssModules, + analyzeDependencies: + asset.meta.hasDependencies !== false + ? { + preserveImports: true, + } + : false, + sourceMap: !!asset.env.sourceMap, + drafts: config?.drafts, + pseudoClasses: config?.pseudoClasses, + errorRecovery: config?.errorRecovery || false, + targets, + }); + } + } catch (err) { + err.filePath = asset.filePath; + let diagnostic = errorToDiagnostic(err, { + origin: '@parcel/transformer-css', + }); + if (err.data?.type === 'AmbiguousUrlInCustomProperty' && err.data.url) { + let p = + '/' + + relativePath( + options.projectRoot, + path.resolve(path.dirname(asset.filePath), err.data.url), + false, + ); + diagnostic[0].hints = [`Replace with: url(${p})`]; + diagnostic[0].documentationURL = + 'https://parceljs.org/languages/css/#url()'; + } + + throw new ThrowableDiagnostic({ + diagnostic, + }); + } + + if (res.warnings) { + for (let warning of res.warnings) { + logger.warn({ + message: warning.message, + codeFrames: [ + { + filePath: asset.filePath, + codeHighlights: [ + { + start: { + line: warning.loc.line, + column: warning.loc.column + 1, + }, + end: { + line: warning.loc.line, + column: warning.loc.column + 1, + }, + }, + ], + }, + ], + }); + } + } + + if (res.map != null) { + let vlqMap = JSON.parse(Buffer.from(res.map).toString()); + let map = new SourceMap(options.projectRoot); + map.addVLQMap(vlqMap); + + if (originalMap) { + map.extends(originalMap); + } + + asset.setMap(map); + } + + if (res.dependencies) { + for (let dep of res.dependencies) { + let loc = convertLoc(dep.loc); + if (originalMap) { + loc = remapSourceLocation(loc, originalMap); + } + + if (dep.type === 'import' && !res.exports) { + asset.addDependency({ + specifier: dep.url, + specifierType: 'url', + loc, + packageConditions: ['style'], + meta: { + // For the glob resolver to distinguish between `@import` and other URL dependencies. + isCSSImport: true, + media: dep.media, + placeholder: dep.placeholder, + }, + }); + } else if (dep.type === 'url') { + asset.addURLDependency(dep.url, { + loc, + meta: { + placeholder: dep.placeholder, + }, + }); + } + } + } + + let assets = [asset]; + let buffer = Buffer.from(res.code); + + if (res.exports != null) { + let exports = res.exports; + asset.symbols.ensure(); + asset.symbols.set('default', 'default'); + + let dependencies = new Map(); + let locals = new Map(); + let c = 0; + let depjs = ''; + let js = ''; + let cssImports = ''; + + let jsDeps = []; + + for (let key in exports) { + locals.set(exports[key].name, key); + } + + asset.uniqueKey ??= asset.id; + + let seen = new Set(); + let add = key => { + if (seen.has(key)) { + return; + } + seen.add(key); + + let e = exports[key]; + let s = `module.exports[${JSON.stringify(key)}] = \`${e.name}`; + + for (let ref of e.composes) { + s += ' '; + if (ref.type === 'local') { + let exported = nullthrows(locals.get(ref.name)); + add(exported); + s += '${' + `module.exports[${JSON.stringify(exported)}]` + '}'; + asset.addDependency({ + specifier: nullthrows(asset.uniqueKey), + specifierType: 'esm', + symbols: new Map([ + [exported, {local: ref.name, isWeak: false, loc: null}], + ]), + }); + } else if (ref.type === 'global') { + s += ref.name; + } else if (ref.type === 'dependency') { + let d = dependencies.get(ref.specifier); + if (d == null) { + d = `dep_${c++}`; + depjs += `import * as ${d} from ${JSON.stringify( + ref.specifier, + )};\n`; + dependencies.set(ref.specifier, d); + cssImports += `@import "${ref.specifier}";\n`; + asset.addDependency({ + specifier: ref.specifier, + specifierType: 'esm', + packageConditions: ['style'], + }); + } + s += '${' + `${d}[${JSON.stringify(ref.name)}]` + '}'; + } + } + + s += '`;\n'; + + // If the export is referenced internally (e.g. used @keyframes), add a self-reference + // to the JS so the symbol is retained during tree-shaking. + if (e.isReferenced) { + s += `module.exports[${JSON.stringify(key)}];\n`; + asset.addDependency({ + specifier: nullthrows(asset.uniqueKey), + specifierType: 'esm', + symbols: new Map([ + [key, {local: exports[key].name, isWeak: false, loc: null}], + ]), + }); + } + + js += s; + }; + + // It's possible that the exports can be ordered differently between builds. + // Sorting by key is safe as the order is irrelevant but needs to be deterministic. + for (let key of Object.keys(exports).sort()) { + asset.symbols.set(key, exports[key].name); + add(key); + } + + if (res.dependencies) { + for (let dep of res.dependencies) { + if (dep.type === 'import') { + // TODO: Figure out how to treeshake this + let d = `dep_$${c++}`; + depjs += `import * as ${d} from ${JSON.stringify(dep.url)};\n`; + js += `for (let key in ${d}) { if (key in module.exports) module.exports[key] += ' ' + ${d}[key]; else module.exports[key] = ${d}[key]; }\n`; + asset.symbols.set('*', '*'); + } + } + } + + if (res.references != null) { + let references = res.references; + for (let symbol in references) { + let reference = references[symbol]; + asset.addDependency({ + specifier: reference.specifier, + specifierType: 'esm', + packageConditions: ['style'], + symbols: new Map([ + [reference.name, {local: symbol, isWeak: false, loc: null}], + ]), + }); + + asset.meta.hasReferences = true; + cssImports += `@import "${reference.specifier}";\n`; + } + } + + assets.push({ + type: 'js', + content: depjs + js, + dependencies: jsDeps, + env, + }); + + // Prepend @import rules for each composes dependency so packager knows where to insert them. + if (cssImports.length > 0) { + buffer = Buffer.concat([Buffer.from(cssImports), buffer]); + } + } + + asset.setBuffer(buffer); + return assets; + }, +}): Transformer); + +let cache = new Map(); + +function getTargets(browsers) { + if (browsers == null) { + return undefined; + } + + let cached = cache.get(browsers); + if (cached != null) { + return cached; + } + + let targets = browserslistToTargets(browserslist(browsers)); + + cache.set(browsers, targets); + return targets; +} + +function convertLoc(loc: LightningSourceLocation): SourceLocation { + return { + filePath: loc.filePath, + start: {line: loc.start.line, column: loc.start.column}, + end: {line: loc.end.line, column: loc.end.column + 1}, + }; +} diff --git a/node_modules/@parcel/transformer-html/LICENSE b/node_modules/@parcel/transformer-html/LICENSE new file mode 100644 index 00000000..7fb9bc95 --- /dev/null +++ b/node_modules/@parcel/transformer-html/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017-present Devon Govett + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/@parcel/transformer-html/lib/HTMLTransformer.js b/node_modules/@parcel/transformer-html/lib/HTMLTransformer.js new file mode 100644 index 00000000..63fd4fb8 --- /dev/null +++ b/node_modules/@parcel/transformer-html/lib/HTMLTransformer.js @@ -0,0 +1,168 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +function _plugin() { + const data = require("@parcel/plugin"); + _plugin = function () { + return data; + }; + return data; +} +function _posthtmlParser() { + const data = require("posthtml-parser"); + _posthtmlParser = function () { + return data; + }; + return data; +} +function _nullthrows() { + const data = _interopRequireDefault(require("nullthrows")); + _nullthrows = function () { + return data; + }; + return data; +} +function _posthtml() { + const data = _interopRequireDefault(require("posthtml")); + _posthtml = function () { + return data; + }; + return data; +} +function _posthtmlRender() { + const data = require("posthtml-render"); + _posthtmlRender = function () { + return data; + }; + return data; +} +function _semver() { + const data = _interopRequireDefault(require("semver")); + _semver = function () { + return data; + }; + return data; +} +var _dependencies = _interopRequireDefault(require("./dependencies")); +var _inline = _interopRequireDefault(require("./inline")); +function _diagnostic() { + const data = _interopRequireDefault(require("@parcel/diagnostic")); + _diagnostic = function () { + return data; + }; + return data; +} +function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } +var _default = exports.default = new (_plugin().Transformer)({ + canReuseAST({ + ast + }) { + return ast.type === 'posthtml' && _semver().default.satisfies(ast.version, '^0.4.0'); + }, + async parse({ + asset + }) { + return { + type: 'posthtml', + version: '0.4.1', + program: (0, _posthtmlParser().parser)(await asset.getCode(), { + lowerCaseTags: true, + lowerCaseAttributeNames: true, + sourceLocations: true, + xmlMode: asset.type === 'xhtml' + }) + }; + }, + async transform({ + asset, + options + }) { + if (asset.type === 'htm') { + asset.type = 'html'; + } + asset.bundleBehavior = 'isolated'; + let ast = (0, _nullthrows().default)(await asset.getAST()); + let hasModuleScripts; + try { + hasModuleScripts = (0, _dependencies.default)(asset, ast); + } catch (errors) { + if (Array.isArray(errors)) { + throw new (_diagnostic().default)({ + diagnostic: errors.map(error => ({ + message: error.message, + origin: '@parcel/transformer-html', + codeFrames: [{ + filePath: error.filePath, + language: 'html', + codeHighlights: [error.loc] + }] + })) + }); + } + throw errors; + } + const { + assets: inlineAssets, + hasModuleScripts: hasInlineModuleScripts + } = (0, _inline.default)(asset, ast); + const result = [asset, ...inlineAssets]; + + // empty is added to make sure HMR is working even if user + // didn't add any. + if (options.hmrOptions && !(hasModuleScripts || hasInlineModuleScripts)) { + const script = { + tag: 'script', + attrs: { + src: asset.addURLDependency('hmr.js', { + priority: 'parallel' + }) + }, + content: [] + }; + const found = findFirstMatch(ast, [{ + tag: 'body' + }, { + tag: 'html' + }]); + if (found) { + found.content = found.content || []; + found.content.push(script); + } else { + // Insert at the very end. + ast.program.push(script); + } + asset.setAST(ast); + result.push({ + type: 'js', + content: '', + uniqueKey: 'hmr.js' + }); + } + return result; + }, + generate({ + ast, + asset + }) { + return { + content: (0, _posthtmlRender().render)(ast.program, { + closingSingleTag: asset.type === 'xhtml' ? 'slash' : undefined + }) + }; + } +}); +function findFirstMatch(ast, expressions) { + let found; + for (const expression of expressions) { + (0, _posthtml().default)().match.call(ast.program, expression, node => { + found = node; + return node; + }); + if (found) { + return found; + } + } +} \ No newline at end of file diff --git a/node_modules/@parcel/transformer-html/lib/dependencies.js b/node_modules/@parcel/transformer-html/lib/dependencies.js new file mode 100644 index 00000000..1dab9126 --- /dev/null +++ b/node_modules/@parcel/transformer-html/lib/dependencies.js @@ -0,0 +1,233 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = collectDependencies; +function _posthtml() { + const data = _interopRequireDefault(require("posthtml")); + _posthtml = function () { + return data; + }; + return data; +} +function _srcset() { + const data = require("srcset"); + _srcset = function () { + return data; + }; + return data; +} +function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } +// A list of all attributes that may produce a dependency +// Based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes +const ATTRS = { + src: ['script', 'img', 'audio', 'video', 'source', 'track', 'iframe', 'embed', 'amp-img'], + // Using href with is added to make sure HMR is working even if user + // didn't add any. + if (options.hmrOptions && !(hasModuleScripts || hasInlineModuleScripts)) { + const script = { + tag: 'script', + attrs: { + src: asset.addURLDependency('hmr.js', { + priority: 'parallel', + }), + }, + content: [], + }; + + const found = findFirstMatch(ast, [{tag: 'body'}, {tag: 'html'}]); + + if (found) { + found.content = found.content || []; + found.content.push(script); + } else { + // Insert at the very end. + ast.program.push(script); + } + + asset.setAST(ast); + + result.push({ + type: 'js', + content: '', + uniqueKey: 'hmr.js', + }); + } + + return result; + }, + + generate({ast, asset}) { + return { + content: render(ast.program, { + closingSingleTag: asset.type === 'xhtml' ? 'slash' : undefined, + }), + }; + }, +}): Transformer); + +function findFirstMatch( + ast: AST, + expressions: PostHTMLExpression[], +): ?PostHTMLNode { + let found; + + for (const expression of expressions) { + PostHTML().match.call(ast.program, expression, node => { + found = node; + return node; + }); + + if (found) { + return found; + } + } +} diff --git a/node_modules/@parcel/transformer-html/src/dependencies.js b/node_modules/@parcel/transformer-html/src/dependencies.js new file mode 100644 index 00000000..1254e2ee --- /dev/null +++ b/node_modules/@parcel/transformer-html/src/dependencies.js @@ -0,0 +1,295 @@ +// @flow + +import type {AST, MutableAsset, FilePath} from '@parcel/types'; +import type {PostHTMLNode} from 'posthtml'; +import PostHTML from 'posthtml'; +import {parse, stringify} from 'srcset'; +// A list of all attributes that may produce a dependency +// Based on https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes +const ATTRS = { + src: [ + 'script', + 'img', + 'audio', + 'video', + 'source', + 'track', + 'iframe', + 'embed', + 'amp-img', + ], + // Using href with "; +const handler = new DomHandler((error, dom) => { + if (error) { + // Handle error + } else { + // Parsing completed, do something + console.log(dom); + } +}); +const parser = new Parser(handler); +parser.write(rawHtml); +parser.end(); +``` + +Output: + +```javascript +[ + { + data: "Xyz ", + type: "text", + }, + { + type: "script", + name: "script", + attribs: { + language: "javascript", + }, + children: [ + { + data: "var foo = '';<", + type: "text", + }, + ], + }, + { + data: "`](https://yandex.com/support/webmaster/controlling-robot/html.xml) (default) +- `all` — removes all HTML comments +- A `RegExp` — only HTML comments matching the given regexp will be removed. +- A `Function` that returns boolean — removes HTML comments that can make the given callback function returns truthy value. + +#### Example + +Source: + +```js +{ + removeComments: 'all' +} +``` + +```html +
+``` + +Minified: + +```html +
+``` + +Source: + +```js +{ + removeComments: // +} +``` + +```html +
this text will not be indexedLorem ipsum dolor sit ametLorem ipsum dolor sit amet
+``` + +Minified: + +```html +
this text will not be indexedLorem ipsum dolor sit ametLorem ipsum dolor sit amet
+``` + +Source: + +```js +{ + removeComments: (comments) => { + if (comments.includes('noindex')) return true; + return false; + } +} +``` + +```html +
this text will not be indexedLorem ipsum dolor sit ametLorem ipsum dolor sit amet
+``` + +Minified: + +```html +
this text will not be indexedLorem ipsum dolor sit ametLorem ipsum dolor sit amet
+``` + +### removeOptionalTags +Remove certain tags that can be omitted, see [HTML Standard - 13.1.2.4 Optional tags](https://html.spec.whatwg.org/multipage/syntax.html#optional-tags). + +#### Example + +Source: + +```html +Title

Hi

+``` + +Minified: + +```html +Title

Hi

+``` + +#### Notice +Due to [the limitation of PostHTML](https://github.com/posthtml/htmlnano/issues/99), htmlnano can't remove only the start tag or the end tag of an element. Currently, htmlnano only supports removing the following optional tags, as htmlnano can remove their start tag and end tag at the same time: + +- `html` +- `head` +- `body` +- `colgroup` +- `tbody` + +### removeOptionalTags +Remove certain tags that can be omitted, see [HTML Standard - 13.1.2.4 Optional tags](https://html.spec.whatwg.org/multipage/syntax.html#optional-tags). + +#### Example + +Source: + +```html +Title

Hi

+``` + +Minified: + +```html +Title

Hi

+``` + +#### Notice +Due to [the limitation of PostHTML](https://github.com/posthtml/htmlnano/issues/99), htmlnano can't remove only the start tag or the end tag of an element. Currently, htmlnano only supports removing the following optional tags, as htmlnano can remove their start tag and end tag at the same time: + +- `html` +- `head` +- `body` +- `colgroup` +- `tbody` + +### removeAttributeQuotes +Remove quotes around attributes when possible, see [HTML Standard - 12.1.2.3 Attributes - Unquoted attribute value syntax](https://html.spec.whatwg.org/multipage/syntax.html#attributes-2). + +#### Example +Source: +```html +
+``` + +Minified: +```html +
+``` + +#### Notice +The feature is implemented by [posthtml-render's `quoteAllAttributes`](https://github.com/posthtml/posthtml-render#options), which is one of the PostHTML's option. So `removeAttributeQuotes` could be overriden by other PostHTML's plugins and PostHTML's configuration. + +For example: + +```js +posthtml([ + htmlnano({ + removeAttributeQuotes: true + }) +]).process(html, { + quoteAllAttributes: true +}) +``` + +`removeAttributeQuotes` will not work because PostHTML's `quoteAllAttributes` takes the priority. + + +## `` are skipped. + +#### Example +Source: +```html + + + + + +``` + +Minified: +```html + + +``` + + +### mergeScripts +Merge multiple ` + + + + + + +``` + +Minified: +```html + + + +``` + + +### minifyCss +Minifies CSS with [cssnano](http://cssnano.co/) inside ` + +``` + +Minified: +```html +
+ +
+``` + + +### minifyJs +Minifies JS using [Terser](https://github.com/fabiosantoscode/terser) inside ` + +``` + +Minified: +```html +
+ +
+``` + + +### minifyJson +Minifies JSON inside ``. + +#### Example +Source: +```html + +``` + +Minified: +```html + +``` + + +### minifySvg +Minifies SVG inside `` tags using [SVGO](https://github.com/svg/svgo/). + +#### Options +See [the documentation of SVGO](https://github.com/svg/svgo/blob/master/README.md) for all supported options. +SVGO options can be passed directly to the `minifySvg` module: +```js +htmlnano.process(html, { + minifySvg: { + plugins: [ + { + name: 'preset-default', + params: { + overrides: { + builtinPluginName: { + optionName: 'optionValue' + }, + }, + }, + } + ] + } +}); +``` + +#### Example +Source: +```html + + + + + + SVG +` +``` + +Minified: +```html +SVG +``` + +### removeUnusedCss + +Removes unused CSS inside `
+ +
+``` + +Optimized: +```html +
+ +
+``` + +## Miscellaneous + +### custom +It's also possible to pass custom modules in the minifier. +As a function: +```js +const options = { + custom: function (tree, options) { + // Some minification + return tree; + } +}; +``` + +Or as a list of functions: +```js +const options = { + custom: [ + function (tree, options) { + // Some minification + return tree; + }, + + function (tree, options) { + // Some other minification + return tree; + } + ] +}; +``` + +htmlnano's options are passed to your custom plugin by the second parameter `options`. diff --git a/node_modules/htmlnano/docs/docs/060-contribute.md b/node_modules/htmlnano/docs/docs/060-contribute.md new file mode 100644 index 00000000..18d2b7ba --- /dev/null +++ b/node_modules/htmlnano/docs/docs/060-contribute.md @@ -0,0 +1,16 @@ +# Contribute + +Since the minifier is modular, it's very easy to add new modules: + +1. Create a ES6-file inside `lib/modules/` with a function that does some minification. For example you can check [`lib/modules/example.mjs`](https://github.com/posthtml/htmlnano/blob/master/lib/modules/example.mjs). + +2. Add the module's name into one of those [presets](https://github.com/posthtml/htmlnano/tree/master/lib/presets). You can choose either `ampSafe`, `max`, or `safe`. + +3. Create a JS-file inside `test/modules/` with some unit-tests. + +4. Describe your module in the section "[Modules](https://github.com/posthtml/htmlnano/blob/master/README.md#modules)". + +5. Send me a pull request. + +Other types of contribution (bug fixes, documentation improves, etc) are also welcome! +Would like to contribute, but don't have any ideas what to do? Check out [our issues](https://github.com/posthtml/htmlnano/labels/help%20wanted). diff --git a/node_modules/htmlnano/docs/docusaurus.config.js b/node_modules/htmlnano/docs/docusaurus.config.js new file mode 100644 index 00000000..7f07cb0e --- /dev/null +++ b/node_modules/htmlnano/docs/docusaurus.config.js @@ -0,0 +1,65 @@ +const lightCodeTheme = require('prism-react-renderer/themes/github'); +const darkCodeTheme = require('prism-react-renderer/themes/dracula'); + +/** @type {import('@docusaurus/types').DocusaurusConfig} */ +module.exports = { + title: 'htmlnano', + tagline: 'Modular HTML minifier', + url: 'https://htmlnano.netlify.app', + favicon: 'favicon.ico', + baseUrl: '/', + onBrokenLinks: 'throw', + onBrokenMarkdownLinks: 'warn', + organizationName: 'posthtml', + projectName: 'htmlnano', + trailingSlash: false, + plugins: ['docusaurus-plugin-goatcounter'], + themeConfig: { + navbar: { + title: 'htmlnano', + items: [ + { + type: 'docsVersionDropdown', + position: 'right', + dropdownActiveClassDisabled: true, + }, + { + href: 'https://github.com/posthtml/htmlnano', + label: 'GitHub', + position: 'right', + }, + ], + }, + prism: { + theme: lightCodeTheme, + darkTheme: darkCodeTheme, + }, + goatcounter: { + code: 'htmlnano', + }, + }, + presets: [ + [ + '@docusaurus/preset-classic', + { + docs: { + sidebarPath: require.resolve('./sidebars.js'), + routeBasePath: '/', + editUrl: 'https://github.com/posthtml/htmlnano/edit/master/docs/', + }, + }, + ], + ], +}; + + +const algoliaConfig = { + appId: process.env.ALGOLIA_APP_ID, + apiKey: process.env.ALGOLIA_API_KEY, + indexName: 'htmlnano', + contextualSearch: true, +}; + +if (algoliaConfig.apiKey) { + module.exports.themeConfig.algolia = algoliaConfig; +} diff --git a/node_modules/htmlnano/docs/netlify.toml b/node_modules/htmlnano/docs/netlify.toml new file mode 100644 index 00000000..2469ea5f --- /dev/null +++ b/node_modules/htmlnano/docs/netlify.toml @@ -0,0 +1,4 @@ +[build] + base = "docs/" + publish = "build/" + command = "npm run build" \ No newline at end of file diff --git a/node_modules/htmlnano/docs/package-lock.json b/node_modules/htmlnano/docs/package-lock.json new file mode 100644 index 00000000..9abebf6c --- /dev/null +++ b/node_modules/htmlnano/docs/package-lock.json @@ -0,0 +1,21796 @@ +{ + "name": "htmlnano-docs", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "htmlnano-docs", + "version": "1.0.0", + "dependencies": { + "@docusaurus/core": "2.2.0", + "@docusaurus/preset-classic": "2.2.0", + "@mdx-js/react": "^1.6.21", + "@svgr/webpack": "^6.5.1", + "clsx": "^1.1.1", + "docusaurus-plugin-goatcounter": "^2.0.1", + "file-loader": "^6.2.0", + "prism-react-renderer": "^1.2.1", + "react": "^17.0.1", + "react-dom": "^17.0.1", + "url-loader": "^4.1.1" + } + }, + "node_modules/@algolia/autocomplete-core": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.7.4.tgz", + "integrity": "sha512-daoLpQ3ps/VTMRZDEBfU8ixXd+amZcNJ4QSP3IERGyzqnL5Ch8uSRFt/4G8pUvW9c3o6GA4vtVv4I4lmnkdXyg==", + "dependencies": { + "@algolia/autocomplete-shared": "1.7.4" + } + }, + "node_modules/@algolia/autocomplete-preset-algolia": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.7.4.tgz", + "integrity": "sha512-s37hrvLEIfcmKY8VU9LsAXgm2yfmkdHT3DnA3SgHaY93yjZ2qL57wzb5QweVkYuEBZkT2PIREvRoLXC2sxTbpQ==", + "dependencies": { + "@algolia/autocomplete-shared": "1.7.4" + }, + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } + }, + "node_modules/@algolia/autocomplete-shared": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.7.4.tgz", + "integrity": "sha512-2VGCk7I9tA9Ge73Km99+Qg87w0wzW4tgUruvWAn/gfey1ZXgmxZtyIRBebk35R1O8TbK77wujVtCnpsGpRy1kg==" + }, + "node_modules/@algolia/cache-browser-local-storage": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.17.0.tgz", + "integrity": "sha512-myRSRZDIMYB8uCkO+lb40YKiYHi0fjpWRtJpR/dgkaiBlSD0plRyB6lLOh1XIfmMcSeBOqDE7y9m8xZMrXYfyQ==", + "dependencies": { + "@algolia/cache-common": "4.17.0" + } + }, + "node_modules/@algolia/cache-common": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.17.0.tgz", + "integrity": "sha512-g8mXzkrcUBIPZaulAuqE7xyHhLAYAcF2xSch7d9dABheybaU3U91LjBX6eJTEB7XVhEsgK4Smi27vWtAJRhIKQ==" + }, + "node_modules/@algolia/cache-in-memory": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.17.0.tgz", + "integrity": "sha512-PT32ciC/xI8z919d0oknWVu3kMfTlhQn3MKxDln3pkn+yA7F7xrxSALysxquv+MhFfNAcrtQ/oVvQVBAQSHtdw==", + "dependencies": { + "@algolia/cache-common": "4.17.0" + } + }, + "node_modules/@algolia/client-account": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.17.0.tgz", + "integrity": "sha512-sSEHx9GA6m7wrlsSMNBGfyzlIfDT2fkz2u7jqfCCd6JEEwmxt8emGmxAU/0qBfbhRSuGvzojoLJlr83BSZAKjA==", + "dependencies": { + "@algolia/client-common": "4.17.0", + "@algolia/client-search": "4.17.0", + "@algolia/transporter": "4.17.0" + } + }, + "node_modules/@algolia/client-analytics": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.17.0.tgz", + "integrity": "sha512-84ooP8QA3mQ958hQ9wozk7hFUbAO+81CX1CjAuerxBqjKIInh1fOhXKTaku05O/GHBvcfExpPLIQuSuLYziBXQ==", + "dependencies": { + "@algolia/client-common": "4.17.0", + "@algolia/client-search": "4.17.0", + "@algolia/requester-common": "4.17.0", + "@algolia/transporter": "4.17.0" + } + }, + "node_modules/@algolia/client-common": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.17.0.tgz", + "integrity": "sha512-jHMks0ZFicf8nRDn6ma8DNNsdwGgP/NKiAAL9z6rS7CymJ7L0+QqTJl3rYxRW7TmBhsUH40wqzmrG6aMIN/DrQ==", + "dependencies": { + "@algolia/requester-common": "4.17.0", + "@algolia/transporter": "4.17.0" + } + }, + "node_modules/@algolia/client-personalization": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.17.0.tgz", + "integrity": "sha512-RMzN4dZLIta1YuwT7QC9o+OeGz2cU6eTOlGNE/6RcUBLOU3l9tkCOdln5dPE2jp8GZXPl2yk54b2nSs1+pAjqw==", + "dependencies": { + "@algolia/client-common": "4.17.0", + "@algolia/requester-common": "4.17.0", + "@algolia/transporter": "4.17.0" + } + }, + "node_modules/@algolia/client-search": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.17.0.tgz", + "integrity": "sha512-x4P2wKrrRIXszT8gb7eWsMHNNHAJs0wE7/uqbufm4tZenAp+hwU/hq5KVsY50v+PfwM0LcDwwn/1DroujsTFoA==", + "dependencies": { + "@algolia/client-common": "4.17.0", + "@algolia/requester-common": "4.17.0", + "@algolia/transporter": "4.17.0" + } + }, + "node_modules/@algolia/events": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz", + "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==" + }, + "node_modules/@algolia/logger-common": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.17.0.tgz", + "integrity": "sha512-DGuoZqpTmIKJFDeyAJ7M8E/LOenIjWiOsg1XJ1OqAU/eofp49JfqXxbfgctlVZVmDABIyOz8LqEoJ6ZP4DTyvw==" + }, + "node_modules/@algolia/logger-console": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.17.0.tgz", + "integrity": "sha512-zMPvugQV/gbXUvWBCzihw6m7oxIKp48w37QBIUu/XqQQfxhjoOE9xyfJr1KldUt5FrYOKZJVsJaEjTsu+bIgQg==", + "dependencies": { + "@algolia/logger-common": "4.17.0" + } + }, + "node_modules/@algolia/requester-browser-xhr": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.17.0.tgz", + "integrity": "sha512-aSOX/smauyTkP21Pf52pJ1O2LmNFJ5iHRIzEeTh0mwBeADO4GdG94cAWDILFA9rNblq/nK3EDh3+UyHHjplZ1A==", + "dependencies": { + "@algolia/requester-common": "4.17.0" + } + }, + "node_modules/@algolia/requester-common": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.17.0.tgz", + "integrity": "sha512-XJjmWFEUlHu0ijvcHBoixuXfEoiRUdyzQM6YwTuB8usJNIgShua8ouFlRWF8iCeag0vZZiUm4S2WCVBPkdxFgg==" + }, + "node_modules/@algolia/requester-node-http": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.17.0.tgz", + "integrity": "sha512-bpb/wDA1aC6WxxM8v7TsFspB7yBN3nqCGs2H1OADolQR/hiAIjAxusbuMxVbRFOdaUvAIqioIIkWvZdpYNIn8w==", + "dependencies": { + "@algolia/requester-common": "4.17.0" + } + }, + "node_modules/@algolia/transporter": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.17.0.tgz", + "integrity": "sha512-6xL6H6fe+Fi0AEP3ziSgC+G04RK37iRb4uUUqVAH9WPYFI8g+LYFq6iv5HS8Cbuc5TTut+Bwj6G+dh/asdb9uA==", + "dependencies": { + "@algolia/cache-common": "4.17.0", + "@algolia/logger-common": "4.17.0", + "@algolia/requester-common": "4.17.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@ampproject/remapping/node_modules/@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "dependencies": { + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/code-frame/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==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.20.10", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.10.tgz", + "integrity": "sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.7.tgz", + "integrity": "sha512-t1ZjCluspe5DW24bn2Rr1CDb2v9rn/hROtg9a2tmd0+QYf4bsloYfLQzjG4qHPNMhWtKdGC33R5AxGR2Af2cBw==", + "dependencies": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.7", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-module-transforms": "^7.20.7", + "@babel/helpers": "^7.20.7", + "@babel/parser": "^7.20.7", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.7", + "@babel/types": "^7.20.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", + "dependencies": { + "@babel/types": "^7.23.0", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", + "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", + "dependencies": { + "@babel/helper-explode-assignable-expression": "^7.18.6", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", + "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", + "dependencies": { + "@babel/compat-data": "^7.20.5", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.7.tgz", + "integrity": "sha512-LtoWbDXOaidEf50hmdDqn9g8VEzsorMexoWMQdQODbvmqYmaF23pBP5VNPAGIFHsFQCIeKokDiz3CH5Y2jlY6w==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-member-expression-to-functions": "^7.20.7", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.20.7", + "@babel/helper-split-export-declaration": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.20.5.tgz", + "integrity": "sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "regexpu-core": "^5.2.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", + "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", + "dependencies": { + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-explode-assignable-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", + "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.20.7.tgz", + "integrity": "sha512-9J0CxJLq315fEdi4s7xK5TQaNYjZw+nDVpVqr1axNGKzdrdwYBD5b4uKv3n75aABG0rCCTK8Im8Ww7eYfMrZgw==", + "dependencies": { + "@babel/types": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz", + "integrity": "sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.20.2", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.10", + "@babel/types": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", + "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", + "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-wrap-function": "^7.18.9", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz", + "integrity": "sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.20.7", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.7", + "@babel/types": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", + "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", + "dependencies": { + "@babel/types": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", + "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", + "dependencies": { + "@babel/types": "^7.20.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz", + "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==", + "dependencies": { + "@babel/helper-function-name": "^7.19.0", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.5", + "@babel/types": "^7.20.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.7.tgz", + "integrity": "sha512-PBPjs5BppzsGaxHQCDKnZ6Gd9s6xl8bBCluz3vEInLGRJmnZan4F6BYCeqtyXqkk4W5IlPmjK4JlOuZkpJ3xZA==", + "dependencies": { + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.7", + "@babel/types": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/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==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", + "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz", + "integrity": "sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/plugin-proposal-optional-chaining": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", + "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-static-block": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.20.7.tgz", + "integrity": "sha512-AveGOoi9DAjUYYuUAG//Ig69GlazLnoyzMw68VCDux+c1tsnnH/OkYcpz/5xzMkEFC6UxjR5Gw1c+iY2wOGVeQ==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.20.7", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-proposal-dynamic-import": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", + "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-export-namespace-from": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", + "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-json-strings": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", + "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz", + "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", + "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", + "dependencies": { + "@babel/compat-data": "^7.20.5", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", + "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.20.7.tgz", + "integrity": "sha512-T+A7b1kfjtRM51ssoOfS1+wbyCVqorfyZhT99TvxxLMirPShD8CzKMRepMlCBGM5RpHMbn8s+5MMHnPstJH6mQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.20.5.tgz", + "integrity": "sha512-Vq7b9dUA12ByzB4EjQTPo25sFhY+08pQDBSZRtUAkj7lb7jahaHR5igera16QZ+3my1nYR4dKsNdYj5IjPHilQ==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.20.5", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", + "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", + "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", + "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz", + "integrity": "sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz", + "integrity": "sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==", + "dependencies": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-remap-async-to-generator": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", + "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.11.tgz", + "integrity": "sha512-tA4N427a7fjf1P0/2I4ScsHGc5jcHPbb30xMbaTke2gxDuWpUfXDuX1FEymJwKk4tuGUvGcejAR6HdZVqmmPyw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.7.tgz", + "integrity": "sha512-LWYbsiXTPKl+oBlXUGlwNlJZetXD5Am+CyBdqhPsDVjM9Jc8jwBJFrKhHf900Kfk2eZG1y9MAG3UNajol7A4VQ==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-replace-supers": "^7.20.7", + "@babel/helper-split-export-declaration": "^7.18.6", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz", + "integrity": "sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/template": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.7.tgz", + "integrity": "sha512-Xwg403sRrZb81IVB79ZPqNQME23yhugYVqgTxAhT99h485F4f+GMELFhhOsscDUB7HCswepKeCKLn/GZvUKoBA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", + "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", + "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", + "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", + "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", + "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", + "dependencies": { + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", + "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", + "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz", + "integrity": "sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==", + "dependencies": { + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.20.11.tgz", + "integrity": "sha512-S8e1f7WQ7cimJQ51JkAaDrEtohVEitXjgCGAS2N8S31Y42E+kWwfSz83LYz57QdBm7q9diARVqanIaH2oVgQnw==", + "dependencies": { + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-simple-access": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz", + "integrity": "sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==", + "dependencies": { + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-validator-identifier": "^7.19.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", + "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", + "dependencies": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz", + "integrity": "sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.20.5", + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", + "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", + "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.7.tgz", + "integrity": "sha512-WiWBIkeHKVOSYPO0pWkxGPfKeWrCJyD3NJ53+Lrp/QMSZbsVPovrVl2aWZ19D/LTVnaDv5Ap7GJ/B2CTOZdrfA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", + "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-constant-elements": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.20.2.tgz", + "integrity": "sha512-KS/G8YI8uwMGKErLFOHS/ekhqdHhpEloxs43NecQHVgo2QuQSyJhGIY1fL8UGl9wy5ItVwwoUL4YxVqsplGq2g==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", + "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.20.7.tgz", + "integrity": "sha512-Tfq7qqD+tRj3EoDhY00nn2uP2hsRxgYGi5mLQ5TimKav0a9Lrpd4deE+fcLXU8zFYRjlKPHZhpCvfEA6qnBxqQ==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-jsx": "^7.18.6", + "@babel/types": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", + "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", + "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz", + "integrity": "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "regenerator-transform": "^0.15.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", + "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz", + "integrity": "sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==", + "dependencies": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.19.0", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", + "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz", + "integrity": "sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", + "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", + "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", + "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.20.7.tgz", + "integrity": "sha512-m3wVKEvf6SoszD8pu4NZz3PvfKRCMgk6D6d0Qi9hNnlM5M6CFS92EgF4EiHVLKbU0r/r7ty1hg7NPZwE7WRbYw==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.20.7", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-typescript": "^7.20.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", + "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", + "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz", + "integrity": "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==", + "dependencies": { + "@babel/compat-data": "^7.20.1", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-async-generator-functions": "^7.20.1", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-class-static-block": "^7.18.6", + "@babel/plugin-proposal-dynamic-import": "^7.18.6", + "@babel/plugin-proposal-export-namespace-from": "^7.18.9", + "@babel/plugin-proposal-json-strings": "^7.18.6", + "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", + "@babel/plugin-proposal-numeric-separator": "^7.18.6", + "@babel/plugin-proposal-object-rest-spread": "^7.20.2", + "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-private-methods": "^7.18.6", + "@babel/plugin-proposal-private-property-in-object": "^7.18.6", + "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.20.0", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.18.6", + "@babel/plugin-transform-async-to-generator": "^7.18.6", + "@babel/plugin-transform-block-scoped-functions": "^7.18.6", + "@babel/plugin-transform-block-scoping": "^7.20.2", + "@babel/plugin-transform-classes": "^7.20.2", + "@babel/plugin-transform-computed-properties": "^7.18.9", + "@babel/plugin-transform-destructuring": "^7.20.2", + "@babel/plugin-transform-dotall-regex": "^7.18.6", + "@babel/plugin-transform-duplicate-keys": "^7.18.9", + "@babel/plugin-transform-exponentiation-operator": "^7.18.6", + "@babel/plugin-transform-for-of": "^7.18.8", + "@babel/plugin-transform-function-name": "^7.18.9", + "@babel/plugin-transform-literals": "^7.18.9", + "@babel/plugin-transform-member-expression-literals": "^7.18.6", + "@babel/plugin-transform-modules-amd": "^7.19.6", + "@babel/plugin-transform-modules-commonjs": "^7.19.6", + "@babel/plugin-transform-modules-systemjs": "^7.19.6", + "@babel/plugin-transform-modules-umd": "^7.18.6", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", + "@babel/plugin-transform-new-target": "^7.18.6", + "@babel/plugin-transform-object-super": "^7.18.6", + "@babel/plugin-transform-parameters": "^7.20.1", + "@babel/plugin-transform-property-literals": "^7.18.6", + "@babel/plugin-transform-regenerator": "^7.18.6", + "@babel/plugin-transform-reserved-words": "^7.18.6", + "@babel/plugin-transform-shorthand-properties": "^7.18.6", + "@babel/plugin-transform-spread": "^7.19.0", + "@babel/plugin-transform-sticky-regex": "^7.18.6", + "@babel/plugin-transform-template-literals": "^7.18.9", + "@babel/plugin-transform-typeof-symbol": "^7.18.9", + "@babel/plugin-transform-unicode-escapes": "^7.18.10", + "@babel/plugin-transform-unicode-regex": "^7.18.6", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.20.2", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", + "core-js-compat": "^3.25.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-react": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", + "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-transform-react-display-name": "^7.18.6", + "@babel/plugin-transform-react-jsx": "^7.18.6", + "@babel/plugin-transform-react-jsx-development": "^7.18.6", + "@babel/plugin-transform-react-pure-annotations": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz", + "integrity": "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-transform-typescript": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", + "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", + "dependencies": { + "regenerator-runtime": "^0.13.11" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/runtime-corejs3": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.20.7.tgz", + "integrity": "sha512-jr9lCZ4RbRQmCR28Q8U8Fu49zvFqLxTY9AMOUz+iyMohMoAgpEcVxY+wJNay99oXOpOcCTODkk70NDN2aaJEeg==", + "dependencies": { + "core-js-pure": "^3.25.1", + "regenerator-runtime": "^0.13.11" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", + "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.0", + "@babel/types": "^7.23.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "dependencies": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@docsearch/css": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.3.3.tgz", + "integrity": "sha512-6SCwI7P8ao+se1TUsdZ7B4XzL+gqeQZnBc+2EONZlcVa0dVrk0NjETxozFKgMv0eEGH8QzP1fkN+A1rH61l4eg==" + }, + "node_modules/@docsearch/react": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.3.3.tgz", + "integrity": "sha512-pLa0cxnl+G0FuIDuYlW+EBK6Rw2jwLw9B1RHIeS4N4s2VhsfJ/wzeCi3CWcs5yVfxLd5ZK50t//TMA5e79YT7Q==", + "dependencies": { + "@algolia/autocomplete-core": "1.7.4", + "@algolia/autocomplete-preset-algolia": "1.7.4", + "@docsearch/css": "3.3.3", + "algoliasearch": "^4.0.0" + }, + "peerDependencies": { + "@types/react": ">= 16.8.0 < 19.0.0", + "react": ">= 16.8.0 < 19.0.0", + "react-dom": ">= 16.8.0 < 19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/@docusaurus/core": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.2.0.tgz", + "integrity": "sha512-Vd6XOluKQqzG12fEs9prJgDtyn6DPok9vmUWDR2E6/nV5Fl9SVkhEQOBxwObjk3kQh7OY7vguFaLh0jqdApWsA==", + "dependencies": { + "@babel/core": "^7.18.6", + "@babel/generator": "^7.18.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.18.6", + "@babel/preset-env": "^7.18.6", + "@babel/preset-react": "^7.18.6", + "@babel/preset-typescript": "^7.18.6", + "@babel/runtime": "^7.18.6", + "@babel/runtime-corejs3": "^7.18.6", + "@babel/traverse": "^7.18.8", + "@docusaurus/cssnano-preset": "2.2.0", + "@docusaurus/logger": "2.2.0", + "@docusaurus/mdx-loader": "2.2.0", + "@docusaurus/react-loadable": "5.5.2", + "@docusaurus/utils": "2.2.0", + "@docusaurus/utils-common": "2.2.0", + "@docusaurus/utils-validation": "2.2.0", + "@slorber/static-site-generator-webpack-plugin": "^4.0.7", + "@svgr/webpack": "^6.2.1", + "autoprefixer": "^10.4.7", + "babel-loader": "^8.2.5", + "babel-plugin-dynamic-import-node": "^2.3.3", + "boxen": "^6.2.1", + "chalk": "^4.1.2", + "chokidar": "^3.5.3", + "clean-css": "^5.3.0", + "cli-table3": "^0.6.2", + "combine-promises": "^1.1.0", + "commander": "^5.1.0", + "copy-webpack-plugin": "^11.0.0", + "core-js": "^3.23.3", + "css-loader": "^6.7.1", + "css-minimizer-webpack-plugin": "^4.0.0", + "cssnano": "^5.1.12", + "del": "^6.1.1", + "detect-port": "^1.3.0", + "escape-html": "^1.0.3", + "eta": "^1.12.3", + "file-loader": "^6.2.0", + "fs-extra": "^10.1.0", + "html-minifier-terser": "^6.1.0", + "html-tags": "^3.2.0", + "html-webpack-plugin": "^5.5.0", + "import-fresh": "^3.3.0", + "leven": "^3.1.0", + "lodash": "^4.17.21", + "mini-css-extract-plugin": "^2.6.1", + "postcss": "^8.4.14", + "postcss-loader": "^7.0.0", + "prompts": "^2.4.2", + "react-dev-utils": "^12.0.1", + "react-helmet-async": "^1.3.0", + "react-loadable": "npm:@docusaurus/react-loadable@5.5.2", + "react-loadable-ssr-addon-v5-slorber": "^1.0.1", + "react-router": "^5.3.3", + "react-router-config": "^5.1.1", + "react-router-dom": "^5.3.3", + "rtl-detect": "^1.0.4", + "semver": "^7.3.7", + "serve-handler": "^6.1.3", + "shelljs": "^0.8.5", + "terser-webpack-plugin": "^5.3.3", + "tslib": "^2.4.0", + "update-notifier": "^5.1.0", + "url-loader": "^4.1.1", + "wait-on": "^6.0.1", + "webpack": "^5.73.0", + "webpack-bundle-analyzer": "^4.5.0", + "webpack-dev-server": "^4.9.3", + "webpack-merge": "^5.8.0", + "webpackbar": "^5.0.2" + }, + "bin": { + "docusaurus": "bin/docusaurus.mjs" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/core/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@docusaurus/core/node_modules/boxen": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-6.2.1.tgz", + "integrity": "sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==", + "dependencies": { + "ansi-align": "^3.0.1", + "camelcase": "^6.2.0", + "chalk": "^4.1.2", + "cli-boxes": "^3.0.0", + "string-width": "^5.0.1", + "type-fest": "^2.5.0", + "widest-line": "^4.0.1", + "wrap-ansi": "^8.0.1" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@docusaurus/core/node_modules/cli-boxes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@docusaurus/core/node_modules/react-loadable": { + "name": "@docusaurus/react-loadable", + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", + "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", + "dependencies": { + "@types/react": "*", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": "*" + } + }, + "node_modules/@docusaurus/core/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@docusaurus/core/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@docusaurus/core/node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@docusaurus/core/node_modules/widest-line": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", + "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", + "dependencies": { + "string-width": "^5.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@docusaurus/core/node_modules/wrap-ansi": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.0.1.tgz", + "integrity": "sha512-QFF+ufAqhoYHvoHdajT/Po7KoXVBPXS2bgjIam5isfWJPfIOnQZ50JtUiVvCv/sjgacf3yRrt2ZKUZ/V4itN4g==", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@docusaurus/cssnano-preset": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.2.0.tgz", + "integrity": "sha512-mAAwCo4n66TMWBH1kXnHVZsakW9VAXJzTO4yZukuL3ro4F+JtkMwKfh42EG75K/J/YIFQG5I/Bzy0UH/hFxaTg==", + "dependencies": { + "cssnano-preset-advanced": "^5.3.8", + "postcss": "^8.4.14", + "postcss-sort-media-queries": "^4.2.1", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.14" + } + }, + "node_modules/@docusaurus/logger": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-2.2.0.tgz", + "integrity": "sha512-DF3j1cA5y2nNsu/vk8AG7xwpZu6f5MKkPPMaaIbgXLnWGfm6+wkOeW7kNrxnM95YOhKUkJUophX69nGUnLsm0A==", + "dependencies": { + "chalk": "^4.1.2", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.14" + } + }, + "node_modules/@docusaurus/mdx-loader": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.2.0.tgz", + "integrity": "sha512-X2bzo3T0jW0VhUU+XdQofcEeozXOTmKQMvc8tUnWRdTnCvj4XEcBVdC3g+/jftceluiwSTNRAX4VBOJdNt18jA==", + "dependencies": { + "@babel/parser": "^7.18.8", + "@babel/traverse": "^7.18.8", + "@docusaurus/logger": "2.2.0", + "@docusaurus/utils": "2.2.0", + "@mdx-js/mdx": "^1.6.22", + "escape-html": "^1.0.3", + "file-loader": "^6.2.0", + "fs-extra": "^10.1.0", + "image-size": "^1.0.1", + "mdast-util-to-string": "^2.0.0", + "remark-emoji": "^2.2.0", + "stringify-object": "^3.3.0", + "tslib": "^2.4.0", + "unified": "^9.2.2", + "unist-util-visit": "^2.0.3", + "url-loader": "^4.1.1", + "webpack": "^5.73.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/mdx-loader/node_modules/unified": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", + "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", + "dependencies": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@docusaurus/module-type-aliases": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-2.2.0.tgz", + "integrity": "sha512-wDGW4IHKoOr9YuJgy7uYuKWrDrSpsUSDHLZnWQYM9fN7D5EpSmYHjFruUpKWVyxLpD/Wh0rW8hYZwdjJIQUQCQ==", + "dependencies": { + "@docusaurus/react-loadable": "5.5.2", + "@docusaurus/types": "2.2.0", + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router-config": "*", + "@types/react-router-dom": "*", + "react-helmet-async": "*", + "react-loadable": "npm:@docusaurus/react-loadable@5.5.2" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/@docusaurus/module-type-aliases/node_modules/@docusaurus/types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.2.0.tgz", + "integrity": "sha512-b6xxyoexfbRNRI8gjblzVOnLr4peCJhGbYGPpJ3LFqpi5nsFfoK4mmDLvWdeah0B7gmJeXabN7nQkFoqeSdmOw==", + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*", + "commander": "^5.1.0", + "joi": "^17.6.0", + "react-helmet-async": "^1.3.0", + "utility-types": "^3.10.0", + "webpack": "^5.73.0", + "webpack-merge": "^5.8.0" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/module-type-aliases/node_modules/react-loadable": { + "name": "@docusaurus/react-loadable", + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", + "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", + "dependencies": { + "@types/react": "*", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": "*" + } + }, + "node_modules/@docusaurus/plugin-content-blog": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.2.0.tgz", + "integrity": "sha512-0mWBinEh0a5J2+8ZJXJXbrCk1tSTNf7Nm4tYAl5h2/xx+PvH/Bnu0V+7mMljYm/1QlDYALNIIaT/JcoZQFUN3w==", + "dependencies": { + "@docusaurus/core": "2.2.0", + "@docusaurus/logger": "2.2.0", + "@docusaurus/mdx-loader": "2.2.0", + "@docusaurus/types": "2.2.0", + "@docusaurus/utils": "2.2.0", + "@docusaurus/utils-common": "2.2.0", + "@docusaurus/utils-validation": "2.2.0", + "cheerio": "^1.0.0-rc.12", + "feed": "^4.2.2", + "fs-extra": "^10.1.0", + "lodash": "^4.17.21", + "reading-time": "^1.5.0", + "tslib": "^2.4.0", + "unist-util-visit": "^2.0.3", + "utility-types": "^3.10.0", + "webpack": "^5.73.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/plugin-content-blog/node_modules/@docusaurus/types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.2.0.tgz", + "integrity": "sha512-b6xxyoexfbRNRI8gjblzVOnLr4peCJhGbYGPpJ3LFqpi5nsFfoK4mmDLvWdeah0B7gmJeXabN7nQkFoqeSdmOw==", + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*", + "commander": "^5.1.0", + "joi": "^17.6.0", + "react-helmet-async": "^1.3.0", + "utility-types": "^3.10.0", + "webpack": "^5.73.0", + "webpack-merge": "^5.8.0" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/plugin-content-docs": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.2.0.tgz", + "integrity": "sha512-BOazBR0XjzsHE+2K1wpNxz5QZmrJgmm3+0Re0EVPYFGW8qndCWGNtXW/0lGKhecVPML8yyFeAmnUCIs7xM2wPw==", + "dependencies": { + "@docusaurus/core": "2.2.0", + "@docusaurus/logger": "2.2.0", + "@docusaurus/mdx-loader": "2.2.0", + "@docusaurus/module-type-aliases": "2.2.0", + "@docusaurus/types": "2.2.0", + "@docusaurus/utils": "2.2.0", + "@docusaurus/utils-validation": "2.2.0", + "@types/react-router-config": "^5.0.6", + "combine-promises": "^1.1.0", + "fs-extra": "^10.1.0", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "lodash": "^4.17.21", + "tslib": "^2.4.0", + "utility-types": "^3.10.0", + "webpack": "^5.73.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/plugin-content-docs/node_modules/@docusaurus/types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.2.0.tgz", + "integrity": "sha512-b6xxyoexfbRNRI8gjblzVOnLr4peCJhGbYGPpJ3LFqpi5nsFfoK4mmDLvWdeah0B7gmJeXabN7nQkFoqeSdmOw==", + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*", + "commander": "^5.1.0", + "joi": "^17.6.0", + "react-helmet-async": "^1.3.0", + "utility-types": "^3.10.0", + "webpack": "^5.73.0", + "webpack-merge": "^5.8.0" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/plugin-content-docs/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==" + }, + "node_modules/@docusaurus/plugin-content-docs/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==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@docusaurus/plugin-content-pages": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.2.0.tgz", + "integrity": "sha512-+OTK3FQHk5WMvdelz8v19PbEbx+CNT6VSpx7nVOvMNs5yJCKvmqBJBQ2ZSxROxhVDYn+CZOlmyrC56NSXzHf6g==", + "dependencies": { + "@docusaurus/core": "2.2.0", + "@docusaurus/mdx-loader": "2.2.0", + "@docusaurus/types": "2.2.0", + "@docusaurus/utils": "2.2.0", + "@docusaurus/utils-validation": "2.2.0", + "fs-extra": "^10.1.0", + "tslib": "^2.4.0", + "webpack": "^5.73.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/plugin-content-pages/node_modules/@docusaurus/types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.2.0.tgz", + "integrity": "sha512-b6xxyoexfbRNRI8gjblzVOnLr4peCJhGbYGPpJ3LFqpi5nsFfoK4mmDLvWdeah0B7gmJeXabN7nQkFoqeSdmOw==", + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*", + "commander": "^5.1.0", + "joi": "^17.6.0", + "react-helmet-async": "^1.3.0", + "utility-types": "^3.10.0", + "webpack": "^5.73.0", + "webpack-merge": "^5.8.0" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/plugin-debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.2.0.tgz", + "integrity": "sha512-p9vOep8+7OVl6r/NREEYxf4HMAjV8JMYJ7Bos5fCFO0Wyi9AZEo0sCTliRd7R8+dlJXZEgcngSdxAUo/Q+CJow==", + "dependencies": { + "@docusaurus/core": "2.2.0", + "@docusaurus/types": "2.2.0", + "@docusaurus/utils": "2.2.0", + "fs-extra": "^10.1.0", + "react-json-view": "^1.21.3", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/plugin-debug/node_modules/@docusaurus/types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.2.0.tgz", + "integrity": "sha512-b6xxyoexfbRNRI8gjblzVOnLr4peCJhGbYGPpJ3LFqpi5nsFfoK4mmDLvWdeah0B7gmJeXabN7nQkFoqeSdmOw==", + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*", + "commander": "^5.1.0", + "joi": "^17.6.0", + "react-helmet-async": "^1.3.0", + "utility-types": "^3.10.0", + "webpack": "^5.73.0", + "webpack-merge": "^5.8.0" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/plugin-google-analytics": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.2.0.tgz", + "integrity": "sha512-+eZVVxVeEnV5nVQJdey9ZsfyEVMls6VyWTIj8SmX0k5EbqGvnIfET+J2pYEuKQnDIHxy+syRMoRM6AHXdHYGIg==", + "dependencies": { + "@docusaurus/core": "2.2.0", + "@docusaurus/types": "2.2.0", + "@docusaurus/utils-validation": "2.2.0", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/plugin-google-analytics/node_modules/@docusaurus/types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.2.0.tgz", + "integrity": "sha512-b6xxyoexfbRNRI8gjblzVOnLr4peCJhGbYGPpJ3LFqpi5nsFfoK4mmDLvWdeah0B7gmJeXabN7nQkFoqeSdmOw==", + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*", + "commander": "^5.1.0", + "joi": "^17.6.0", + "react-helmet-async": "^1.3.0", + "utility-types": "^3.10.0", + "webpack": "^5.73.0", + "webpack-merge": "^5.8.0" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/plugin-google-gtag": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.2.0.tgz", + "integrity": "sha512-6SOgczP/dYdkqUMGTRqgxAS1eTp6MnJDAQMy8VCF1QKbWZmlkx4agHDexihqmYyCujTYHqDAhm1hV26EET54NQ==", + "dependencies": { + "@docusaurus/core": "2.2.0", + "@docusaurus/types": "2.2.0", + "@docusaurus/utils-validation": "2.2.0", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/plugin-google-gtag/node_modules/@docusaurus/types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.2.0.tgz", + "integrity": "sha512-b6xxyoexfbRNRI8gjblzVOnLr4peCJhGbYGPpJ3LFqpi5nsFfoK4mmDLvWdeah0B7gmJeXabN7nQkFoqeSdmOw==", + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*", + "commander": "^5.1.0", + "joi": "^17.6.0", + "react-helmet-async": "^1.3.0", + "utility-types": "^3.10.0", + "webpack": "^5.73.0", + "webpack-merge": "^5.8.0" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/plugin-sitemap": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.2.0.tgz", + "integrity": "sha512-0jAmyRDN/aI265CbWZNZuQpFqiZuo+5otk2MylU9iVrz/4J7gSc+ZJ9cy4EHrEsW7PV8s1w18hIEsmcA1YgkKg==", + "dependencies": { + "@docusaurus/core": "2.2.0", + "@docusaurus/logger": "2.2.0", + "@docusaurus/types": "2.2.0", + "@docusaurus/utils": "2.2.0", + "@docusaurus/utils-common": "2.2.0", + "@docusaurus/utils-validation": "2.2.0", + "fs-extra": "^10.1.0", + "sitemap": "^7.1.1", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/plugin-sitemap/node_modules/@docusaurus/types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.2.0.tgz", + "integrity": "sha512-b6xxyoexfbRNRI8gjblzVOnLr4peCJhGbYGPpJ3LFqpi5nsFfoK4mmDLvWdeah0B7gmJeXabN7nQkFoqeSdmOw==", + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*", + "commander": "^5.1.0", + "joi": "^17.6.0", + "react-helmet-async": "^1.3.0", + "utility-types": "^3.10.0", + "webpack": "^5.73.0", + "webpack-merge": "^5.8.0" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/preset-classic": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.2.0.tgz", + "integrity": "sha512-yKIWPGNx7BT8v2wjFIWvYrS+nvN04W+UameSFf8lEiJk6pss0kL6SG2MRvyULiI3BDxH+tj6qe02ncpSPGwumg==", + "dependencies": { + "@docusaurus/core": "2.2.0", + "@docusaurus/plugin-content-blog": "2.2.0", + "@docusaurus/plugin-content-docs": "2.2.0", + "@docusaurus/plugin-content-pages": "2.2.0", + "@docusaurus/plugin-debug": "2.2.0", + "@docusaurus/plugin-google-analytics": "2.2.0", + "@docusaurus/plugin-google-gtag": "2.2.0", + "@docusaurus/plugin-sitemap": "2.2.0", + "@docusaurus/theme-classic": "2.2.0", + "@docusaurus/theme-common": "2.2.0", + "@docusaurus/theme-search-algolia": "2.2.0", + "@docusaurus/types": "2.2.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/preset-classic/node_modules/@docusaurus/types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.2.0.tgz", + "integrity": "sha512-b6xxyoexfbRNRI8gjblzVOnLr4peCJhGbYGPpJ3LFqpi5nsFfoK4mmDLvWdeah0B7gmJeXabN7nQkFoqeSdmOw==", + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*", + "commander": "^5.1.0", + "joi": "^17.6.0", + "react-helmet-async": "^1.3.0", + "utility-types": "^3.10.0", + "webpack": "^5.73.0", + "webpack-merge": "^5.8.0" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/react-loadable": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", + "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", + "dependencies": { + "@types/react": "*", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": "*" + } + }, + "node_modules/@docusaurus/theme-classic": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.2.0.tgz", + "integrity": "sha512-kjbg/qJPwZ6H1CU/i9d4l/LcFgnuzeiGgMQlt6yPqKo0SOJIBMPuz7Rnu3r/WWbZFPi//o8acclacOzmXdUUEg==", + "dependencies": { + "@docusaurus/core": "2.2.0", + "@docusaurus/mdx-loader": "2.2.0", + "@docusaurus/module-type-aliases": "2.2.0", + "@docusaurus/plugin-content-blog": "2.2.0", + "@docusaurus/plugin-content-docs": "2.2.0", + "@docusaurus/plugin-content-pages": "2.2.0", + "@docusaurus/theme-common": "2.2.0", + "@docusaurus/theme-translations": "2.2.0", + "@docusaurus/types": "2.2.0", + "@docusaurus/utils": "2.2.0", + "@docusaurus/utils-common": "2.2.0", + "@docusaurus/utils-validation": "2.2.0", + "@mdx-js/react": "^1.6.22", + "clsx": "^1.2.1", + "copy-text-to-clipboard": "^3.0.1", + "infima": "0.2.0-alpha.42", + "lodash": "^4.17.21", + "nprogress": "^0.2.0", + "postcss": "^8.4.14", + "prism-react-renderer": "^1.3.5", + "prismjs": "^1.28.0", + "react-router-dom": "^5.3.3", + "rtlcss": "^3.5.0", + "tslib": "^2.4.0", + "utility-types": "^3.10.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/theme-classic/node_modules/@docusaurus/types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.2.0.tgz", + "integrity": "sha512-b6xxyoexfbRNRI8gjblzVOnLr4peCJhGbYGPpJ3LFqpi5nsFfoK4mmDLvWdeah0B7gmJeXabN7nQkFoqeSdmOw==", + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*", + "commander": "^5.1.0", + "joi": "^17.6.0", + "react-helmet-async": "^1.3.0", + "utility-types": "^3.10.0", + "webpack": "^5.73.0", + "webpack-merge": "^5.8.0" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/theme-common": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.2.0.tgz", + "integrity": "sha512-R8BnDjYoN90DCL75gP7qYQfSjyitXuP9TdzgsKDmSFPNyrdE3twtPNa2dIN+h+p/pr+PagfxwWbd6dn722A1Dw==", + "dependencies": { + "@docusaurus/mdx-loader": "2.2.0", + "@docusaurus/module-type-aliases": "2.2.0", + "@docusaurus/plugin-content-blog": "2.2.0", + "@docusaurus/plugin-content-docs": "2.2.0", + "@docusaurus/plugin-content-pages": "2.2.0", + "@docusaurus/utils": "2.2.0", + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router-config": "*", + "clsx": "^1.2.1", + "parse-numeric-range": "^1.3.0", + "prism-react-renderer": "^1.3.5", + "tslib": "^2.4.0", + "utility-types": "^3.10.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/theme-search-algolia": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.2.0.tgz", + "integrity": "sha512-2h38B0tqlxgR2FZ9LpAkGrpDWVdXZ7vltfmTdX+4RsDs3A7khiNsmZB+x/x6sA4+G2V2CvrsPMlsYBy5X+cY1w==", + "dependencies": { + "@docsearch/react": "^3.1.1", + "@docusaurus/core": "2.2.0", + "@docusaurus/logger": "2.2.0", + "@docusaurus/plugin-content-docs": "2.2.0", + "@docusaurus/theme-common": "2.2.0", + "@docusaurus/theme-translations": "2.2.0", + "@docusaurus/utils": "2.2.0", + "@docusaurus/utils-validation": "2.2.0", + "algoliasearch": "^4.13.1", + "algoliasearch-helper": "^3.10.0", + "clsx": "^1.2.1", + "eta": "^1.12.3", + "fs-extra": "^10.1.0", + "lodash": "^4.17.21", + "tslib": "^2.4.0", + "utility-types": "^3.10.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/theme-translations": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-2.2.0.tgz", + "integrity": "sha512-3T140AG11OjJrtKlY4pMZ5BzbGRDjNs2co5hJ6uYJG1bVWlhcaFGqkaZ5lCgKflaNHD7UHBHU9Ec5f69jTdd6w==", + "dependencies": { + "fs-extra": "^10.1.0", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.14" + } + }, + "node_modules/@docusaurus/types": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.3.1.tgz", + "integrity": "sha512-PREbIRhTaNNY042qmfSE372Jb7djZt+oVTZkoqHJ8eff8vOIc2zqqDqBVc5BhOfpZGPTrE078yy/torUEZy08A==", + "optional": true, + "peer": true, + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*", + "commander": "^5.1.0", + "joi": "^17.6.0", + "react-helmet-async": "^1.3.0", + "utility-types": "^3.10.0", + "webpack": "^5.73.0", + "webpack-merge": "^5.8.0" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/utils": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.2.0.tgz", + "integrity": "sha512-oNk3cjvx7Tt1Lgh/aeZAmFpGV2pDr5nHKrBVx6hTkzGhrnMuQqLt6UPlQjdYQ3QHXwyF/ZtZMO1D5Pfi0lu7SA==", + "dependencies": { + "@docusaurus/logger": "2.2.0", + "@svgr/webpack": "^6.2.1", + "file-loader": "^6.2.0", + "fs-extra": "^10.1.0", + "github-slugger": "^1.4.0", + "globby": "^11.1.0", + "gray-matter": "^4.0.3", + "js-yaml": "^4.1.0", + "lodash": "^4.17.21", + "micromatch": "^4.0.5", + "resolve-pathname": "^3.0.0", + "shelljs": "^0.8.5", + "tslib": "^2.4.0", + "url-loader": "^4.1.1", + "webpack": "^5.73.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "@docusaurus/types": "*" + }, + "peerDependenciesMeta": { + "@docusaurus/types": { + "optional": true + } + } + }, + "node_modules/@docusaurus/utils-common": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-2.2.0.tgz", + "integrity": "sha512-qebnerHp+cyovdUseDQyYFvMW1n1nv61zGe5JJfoNQUnjKuApch3IVsz+/lZ9a38pId8kqehC1Ao2bW/s0ntDA==", + "dependencies": { + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "@docusaurus/types": "*" + }, + "peerDependenciesMeta": { + "@docusaurus/types": { + "optional": true + } + } + }, + "node_modules/@docusaurus/utils-validation": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.2.0.tgz", + "integrity": "sha512-I1hcsG3yoCkasOL5qQAYAfnmVoLei7apugT6m4crQjmDGxq+UkiRrq55UqmDDyZlac/6ax/JC0p+usZ6W4nVyg==", + "dependencies": { + "@docusaurus/logger": "2.2.0", + "@docusaurus/utils": "2.2.0", + "joi": "^17.6.0", + "js-yaml": "^4.1.0", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.14" + } + }, + "node_modules/@docusaurus/utils-validation/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==" + }, + "node_modules/@docusaurus/utils-validation/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==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@docusaurus/utils/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==" + }, + "node_modules/@docusaurus/utils/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==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@hapi/hoek": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.0.tgz", + "integrity": "sha512-sqKVVVOe5ivCaXDWivIJYVSaEgdQK9ul7a4Kity5Iw7u9+wBAPbX1RMSnLLmp7O4Vzj0WOWwMAJsTL00xwaNug==" + }, + "node_modules/@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@jest/schemas": { + "version": "29.0.0", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.0.0.tgz", + "integrity": "sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA==", + "dependencies": { + "@sinclair/typebox": "^0.24.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.3.1.tgz", + "integrity": "sha512-d0S0jmmTpjnhCmNpApgX3jrUZgZ22ivKJRvL2lli5hpCRoNnp1f85r2/wpKfXuYu8E7Jjh1hGfhPyup1NM5AmA==", + "dependencies": { + "@jest/schemas": "^29.0.0", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" + }, + "node_modules/@mdx-js/mdx": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz", + "integrity": "sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==", + "dependencies": { + "@babel/core": "7.12.9", + "@babel/plugin-syntax-jsx": "7.12.1", + "@babel/plugin-syntax-object-rest-spread": "7.8.3", + "@mdx-js/util": "1.6.22", + "babel-plugin-apply-mdx-type-prop": "1.6.22", + "babel-plugin-extract-import-names": "1.6.22", + "camelcase-css": "2.0.1", + "detab": "2.0.4", + "hast-util-raw": "6.0.1", + "lodash.uniq": "4.5.0", + "mdast-util-to-hast": "10.0.1", + "remark-footnotes": "2.0.0", + "remark-mdx": "1.6.22", + "remark-parse": "8.0.3", + "remark-squeeze-paragraphs": "4.0.0", + "style-to-object": "0.3.0", + "unified": "9.2.0", + "unist-builder": "2.0.3", + "unist-util-visit": "2.0.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdx-js/mdx/node_modules/@babel/core": { + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", + "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@mdx-js/mdx/node_modules/@babel/plugin-syntax-jsx": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", + "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@mdx-js/mdx/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@mdx-js/react": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", + "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "react": "^16.13.1 || ^17.0.0" + } + }, + "node_modules/@mdx-js/util": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", + "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.21", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", + "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==" + }, + "node_modules/@sideway/address": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", + "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@sideway/formula": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==" + }, + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" + }, + "node_modules/@sinclair/typebox": { + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" + }, + "node_modules/@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/@slorber/static-site-generator-webpack-plugin": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@slorber/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.7.tgz", + "integrity": "sha512-Ug7x6z5lwrz0WqdnNFOMYrDQNTPAprvHLSh6+/fmml3qUiz6l5eq+2MzLKWtn/q5K5NpSiFsZTP/fck/3vjSxA==", + "dependencies": { + "eval": "^0.1.8", + "p-map": "^4.0.0", + "webpack-sources": "^3.2.2" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@svgr/babel-plugin-add-jsx-attribute": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.1.tgz", + "integrity": "sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-6.5.0.tgz", + "integrity": "sha512-8zYdkym7qNyfXpWvu4yq46k41pyNM9SOstoWhKlm+IfdCE1DdnRKeMUPsWIEO/DEkaWxJ8T9esNdG3QwQ93jBA==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-6.5.0.tgz", + "integrity": "sha512-NFdxMq3xA42Kb1UbzCVxplUc0iqSyM9X8kopImvFnB+uSDdzIHOdbs1op8ofAvVRtbg4oZiyRl3fTYeKcOe9Iw==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.1.tgz", + "integrity": "sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-svg-dynamic-title": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.1.tgz", + "integrity": "sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-svg-em-dimensions": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.1.tgz", + "integrity": "sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-transform-react-native-svg": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.1.tgz", + "integrity": "sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-transform-svg-component": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.1.tgz", + "integrity": "sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-preset": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.5.1.tgz", + "integrity": "sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw==", + "dependencies": { + "@svgr/babel-plugin-add-jsx-attribute": "^6.5.1", + "@svgr/babel-plugin-remove-jsx-attribute": "*", + "@svgr/babel-plugin-remove-jsx-empty-expression": "*", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.5.1", + "@svgr/babel-plugin-svg-dynamic-title": "^6.5.1", + "@svgr/babel-plugin-svg-em-dimensions": "^6.5.1", + "@svgr/babel-plugin-transform-react-native-svg": "^6.5.1", + "@svgr/babel-plugin-transform-svg-component": "^6.5.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/core": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.5.1.tgz", + "integrity": "sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw==", + "dependencies": { + "@babel/core": "^7.19.6", + "@svgr/babel-preset": "^6.5.1", + "@svgr/plugin-jsx": "^6.5.1", + "camelcase": "^6.2.0", + "cosmiconfig": "^7.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/hast-util-to-babel-ast": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.1.tgz", + "integrity": "sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==", + "dependencies": { + "@babel/types": "^7.20.0", + "entities": "^4.4.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/hast-util-to-babel-ast/node_modules/entities": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", + "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/@svgr/plugin-jsx": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.5.1.tgz", + "integrity": "sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw==", + "dependencies": { + "@babel/core": "^7.19.6", + "@svgr/babel-preset": "^6.5.1", + "@svgr/hast-util-to-babel-ast": "^6.5.1", + "svg-parser": "^2.0.4" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@svgr/core": "^6.0.0" + } + }, + "node_modules/@svgr/plugin-svgo": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.5.1.tgz", + "integrity": "sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ==", + "dependencies": { + "cosmiconfig": "^7.0.1", + "deepmerge": "^4.2.2", + "svgo": "^2.8.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@svgr/core": "*" + } + }, + "node_modules/@svgr/webpack": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-6.5.1.tgz", + "integrity": "sha512-cQ/AsnBkXPkEK8cLbv4Dm7JGXq2XrumKnL1dRpJD9rIO2fTIlJI9a1uCciYG1F2aUsox/hJQyNGbt3soDxSRkA==", + "dependencies": { + "@babel/core": "^7.19.6", + "@babel/plugin-transform-react-constant-elements": "^7.18.12", + "@babel/preset-env": "^7.19.4", + "@babel/preset-react": "^7.18.6", + "@babel/preset-typescript": "^7.18.6", + "@svgr/core": "^6.5.1", + "@svgr/plugin-jsx": "^6.5.1", + "@svgr/plugin-svgo": "^6.5.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dependencies": { + "defer-to-connect": "^1.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.10", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", + "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", + "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/eslint": { + "version": "8.4.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz", + "integrity": "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" + }, + "node_modules/@types/express": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.15.tgz", + "integrity": "sha512-Yv0k4bXGOH+8a+7bELd2PqHQsuiANB+A8a4gnQrkRWzrkKlb6KHaVvyXhqs04sVW/OWlbPyYxRgYlIXLfrufMQ==", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.31", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.32", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.32.tgz", + "integrity": "sha512-aI5h/VOkxOF2Z1saPy0Zsxs5avets/iaiAJYznQFm5By/pamU31xWKL//epiF4OfUA2qTOc9PV6tCUjhO8wlZA==", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "node_modules/@types/hast": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.3.tgz", + "integrity": "sha512-QmFclP7FX/XZ7k81+fS6K5pQ3qxRu9bVqEoUeJrPtcmX9st3pyeluIWy6olFCr2/kUqnb4LwxtMCxZsXWkObbA==", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/history": { + "version": "4.7.11", + "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", + "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==" + }, + "node_modules/@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==" + }, + "node_modules/@types/http-proxy": { + "version": "1.17.9", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz", + "integrity": "sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==" + }, + "node_modules/@types/mdast": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.9.tgz", + "integrity": "sha512-IUlIhG2KNPjOEuXIblTjovD1XW8HPGeulA12nEyc6xhO4Yrrcs+xczAl4ucR3cpwVlE+vb2x9Z7pRmVP4bUHng==", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/mime": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", + "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==" + }, + "node_modules/@types/node": { + "version": "17.0.45", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" + }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" + }, + "node_modules/@types/parse5": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz", + "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==" + }, + "node_modules/@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + }, + "node_modules/@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" + }, + "node_modules/@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" + }, + "node_modules/@types/react": { + "version": "17.0.52", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.52.tgz", + "integrity": "sha512-vwk8QqVODi0VaZZpDXQCmEmiOuyjEFPY7Ttaw5vjM112LOq37yz1CDJGrRJwA1fYEq4Iitd5rnjd1yWAc/bT+A==", + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-router": { + "version": "5.1.20", + "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", + "integrity": "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==", + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*" + } + }, + "node_modules/@types/react-router-config": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/@types/react-router-config/-/react-router-config-5.0.7.tgz", + "integrity": "sha512-pFFVXUIydHlcJP6wJm7sDii5mD/bCmmAY0wQzq+M+uX7bqS95AQqHZWP1iNMKrWVQSuHIzj5qi9BvrtLX2/T4w==", + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router": "^5.1.0" + } + }, + "node_modules/@types/react-router-dom": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", + "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router": "*" + } + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" + }, + "node_modules/@types/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" + }, + "node_modules/@types/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", + "dependencies": { + "@types/mime": "*", + "@types/node": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.33", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", + "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/unist": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", + "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==" + }, + "node_modules/@types/ws": { + "version": "8.5.4", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.4.tgz", + "integrity": "sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yargs": { + "version": "17.0.18", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.18.tgz", + "integrity": "sha512-eIJR1UER6ur3EpKM3d+2Pgd+ET+k6Kn9B4ZItX0oPjjVI5PrfaRjKyLT5UYendDpLuoiJMNJvovLQbEXqhsPaw==", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.7.6.tgz", + "integrity": "sha512-FlVvVFA1TX6l3lp8VjDnYYq7R1nyW6x3svAt4nDgrWQ9SBaSh9CnbwgSUTasgfNfOG5HlM1ehugCvM+hjo56LA==", + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/address": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", + "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==", + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "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/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", + "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/algoliasearch": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.17.0.tgz", + "integrity": "sha512-JMRh2Mw6sEnVMiz6+APsi7lx9a2jiDFF+WUtANaUVCv6uSU9UOLdo5h9K3pdP6frRRybaM2fX8b1u0nqICS9aA==", + "dependencies": { + "@algolia/cache-browser-local-storage": "4.17.0", + "@algolia/cache-common": "4.17.0", + "@algolia/cache-in-memory": "4.17.0", + "@algolia/client-account": "4.17.0", + "@algolia/client-analytics": "4.17.0", + "@algolia/client-common": "4.17.0", + "@algolia/client-personalization": "4.17.0", + "@algolia/client-search": "4.17.0", + "@algolia/logger-common": "4.17.0", + "@algolia/logger-console": "4.17.0", + "@algolia/requester-browser-xhr": "4.17.0", + "@algolia/requester-common": "4.17.0", + "@algolia/requester-node-http": "4.17.0", + "@algolia/transporter": "4.17.0" + } + }, + "node_modules/algoliasearch-helper": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.12.0.tgz", + "integrity": "sha512-/j1U3PEwdan0n6P/QqSnSpNSLC5+cEMvyljd5CnmNmUjDlGrys+vFEOwjVEnqELIiAGMHEA/Nl3CiKVFBUYqyQ==", + "dependencies": { + "@algolia/events": "^4.0.1" + }, + "peerDependencies": { + "algoliasearch": ">= 3.1 < 6" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "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==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" + }, + "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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.13", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz", + "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + } + ], + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-lite": "^1.0.30001426", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/axios": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", + "integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==", + "dependencies": { + "follow-redirects": "^1.14.7" + } + }, + "node_modules/babel-loader": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", + "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", + "dependencies": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 8.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" + } + }, + "node_modules/babel-loader/node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dependencies": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/babel-plugin-apply-mdx-type-prop": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz", + "integrity": "sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4", + "@mdx-js/util": "1.6.22" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "@babel/core": "^7.11.6" + } + }, + "node_modules/babel-plugin-apply-mdx-type-prop/node_modules/@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + }, + "node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dependencies": { + "object.assign": "^4.1.0" + } + }, + "node_modules/babel-plugin-extract-import-names": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz", + "integrity": "sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/babel-plugin-extract-import-names/node_modules/@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", + "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", + "dependencies": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.3.3", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", + "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.3", + "core-js-compat": "^3.25.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", + "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/bail": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "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==" + }, + "node_modules/base16": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz", + "integrity": "sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ==" + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "engines": { + "node": "*" + } + }, + "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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/bonjour-service": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.0.14.tgz", + "integrity": "sha512-HIMbgLnk1Vqvs6B4Wq5ep7mxvj9sGz5d1JJyDNSGNIdA/w2MCz6GTjWTdjqOJV1bEPj+6IkxDvWNFKEBxNt4kQ==", + "dependencies": { + "array-flatten": "^2.1.2", + "dns-equal": "^1.0.0", + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" + }, + "node_modules/boxen": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.0.1.tgz", + "integrity": "sha512-49VBlw+PrWEF51aCmy7QIteYPIFZxSpvqBdP/2itCPPlJ49kj9zg/XPRFrdkne2W+CfwXUls8exMvu1RysZpKA==", + "dependencies": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.0", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "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==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.9" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "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==" + }, + "node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cacheable-request/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001441", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001441.tgz", + "integrity": "sha512-OyxRR4Vof59I3yGWXws6i908EtGbMzVUi3ganaZQHmydk1iwDhRnvaPG2WaR0KcqrDFKrxVZHULT396LEPhXfg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] + }, + "node_modules/ccount": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", + "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/chalk/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==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/chalk/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==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/chalk/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==" + }, + "node_modules/chalk/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/chalk/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/cheerio": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", + "dependencies": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "htmlparser2": "^8.0.1", + "parse5": "^7.0.0", + "parse5-htmlparser2-tree-adapter": "^7.0.0" + }, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + } + }, + "node_modules/cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "dependencies": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cheerio-select/node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cheerio-select/node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/cheerio-select/node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/cheerio-select/node_modules/domutils": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", + "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.1" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/cheerio-select/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/cheerio/node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/cheerio/node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/cheerio/node_modules/domutils": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", + "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.1" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/cheerio/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/cheerio/node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "node_modules/cheerio/node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "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/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.0.tgz", + "integrity": "sha512-2CpRNYmImPx+RXKLq6jko/L07phmS9I02TyqkcNU20GCF/GgaWvc58hPtjxDX8lPpkdwc9sNh72V9k00S7ezog==", + "engines": { + "node": ">=8" + } + }, + "node_modules/clean-css": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.1.tgz", + "integrity": "sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg==", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/clean-css/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-table3": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dependencies": { + "mimic-response": "^1.0.0" + } + }, + "node_modules/clsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/collapse-white-space": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", + "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "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==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==" + }, + "node_modules/colorette": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==" + }, + "node_modules/combine-promises": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/combine-promises/-/combine-promises-1.1.0.tgz", + "integrity": "sha512-ZI9jvcLDxqwaXEixOhArm3r7ReIivsXkpbyEWyeOhzz1QS0iSgBPnWvEqvIQtYyamGCYA88gFhmUrs9hrrQ0pg==", + "engines": { + "node": ">=10" + } + }, + "node_modules/comma-separated-tokens": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", + "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "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=" + }, + "node_modules/configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dependencies": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/consola": { + "version": "2.15.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-disposition/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/copy-text-to-clipboard": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.1.0.tgz", + "integrity": "sha512-PFM6BnjLnOON/lB3ta/Jg7Ywsv+l9kQGD4TWDCSlRBGmqnnTM5MrDkhAFgw+8HZt0wW6Q2BBE4cmy9sq+s9Qng==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/copy-webpack-plugin": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", + "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", + "dependencies": { + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.1", + "globby": "^13.1.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/ajv": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", + "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/copy-webpack-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/copy-webpack-plugin/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==", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/globby": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.3.tgz", + "integrity": "sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==", + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/copy-webpack-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/copy-webpack-plugin/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/copy-webpack-plugin/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/core-js": { + "version": "3.27.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.27.1.tgz", + "integrity": "sha512-GutwJLBChfGCpwwhbYoqfv03LAfmiz7e7D/BNxzeMxwQf10GRSzqiOjx7AmtEk+heiD/JWmBuyBPgFtx0Sg1ww==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.27.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.27.1.tgz", + "integrity": "sha512-Dg91JFeCDA17FKnneN7oCMz4BkQ4TcffkgHP4OWwp9yx3pi7ubqMDXXSacfNak1PQqjc95skyt+YBLHQJnkJwA==", + "dependencies": { + "browserslist": "^4.21.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-pure": { + "version": "3.27.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.27.1.tgz", + "integrity": "sha512-BS2NHgwwUppfeoqOXqi08mUqS5FiZpuRuJJpKsaME7kJz0xxuk0xkhDdfMIlP/zLa80krBqss1LtD7f889heAw==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "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==" + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cross-fetch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "dependencies": { + "node-fetch": "2.6.7" + } + }, + "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==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/css-declaration-sorter": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz", + "integrity": "sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==", + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/css-loader": { + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.3.tgz", + "integrity": "sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ==", + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.19", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.3.8" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/css-minimizer-webpack-plugin": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-4.2.2.tgz", + "integrity": "sha512-s3Of/4jKfw1Hj9CxEO1E5oXhQAxlayuHO2y/ML+C6I9sQ7FdzfEV6QgMLN3vI+qFsjJGIAFLKtQK7t8BOXAIyA==", + "dependencies": { + "cssnano": "^5.1.8", + "jest-worker": "^29.1.2", + "postcss": "^8.4.17", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@parcel/css": { + "optional": true + }, + "@swc/css": { + "optional": true + }, + "clean-css": { + "optional": true + }, + "csso": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "lightningcss": { + "optional": true + } + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/ajv": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", + "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/css-minimizer-webpack-plugin/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/css-tree/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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "5.1.14", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.14.tgz", + "integrity": "sha512-Oou7ihiTocbKqi0J1bB+TRJIQX5RMR3JghA8hcWSw9mjBLQ5Y3RWqEDoYG3sRNlAbCIXpqMoZGbq5KDR3vdzgw==", + "dependencies": { + "cssnano-preset-default": "^5.2.13", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-preset-advanced": { + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.9.tgz", + "integrity": "sha512-njnh4pp1xCsibJcEHnWZb4EEzni0ePMqPuPNyuWT4Z+YeXmsgqNuTPIljXFEXhxGsWs9183JkXgHxc1TcsahIg==", + "dependencies": { + "autoprefixer": "^10.4.12", + "cssnano-preset-default": "^5.2.13", + "postcss-discard-unused": "^5.1.0", + "postcss-merge-idents": "^5.1.1", + "postcss-reduce-idents": "^5.2.0", + "postcss-zindex": "^5.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-preset-default": { + "version": "5.2.13", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.13.tgz", + "integrity": "sha512-PX7sQ4Pb+UtOWuz8A1d+Rbi+WimBIxJTRyBdgGp1J75VU0r/HFQeLnMYgHiCAp6AR4rqrc7Y4R+1Rjk3KJz6DQ==", + "dependencies": { + "css-declaration-sorter": "^6.3.1", + "cssnano-utils": "^3.1.0", + "postcss-calc": "^8.2.3", + "postcss-colormin": "^5.3.0", + "postcss-convert-values": "^5.1.3", + "postcss-discard-comments": "^5.1.2", + "postcss-discard-duplicates": "^5.1.0", + "postcss-discard-empty": "^5.1.1", + "postcss-discard-overridden": "^5.1.0", + "postcss-merge-longhand": "^5.1.7", + "postcss-merge-rules": "^5.1.3", + "postcss-minify-font-values": "^5.1.0", + "postcss-minify-gradients": "^5.1.1", + "postcss-minify-params": "^5.1.4", + "postcss-minify-selectors": "^5.2.1", + "postcss-normalize-charset": "^5.1.0", + "postcss-normalize-display-values": "^5.1.0", + "postcss-normalize-positions": "^5.1.1", + "postcss-normalize-repeat-style": "^5.1.1", + "postcss-normalize-string": "^5.1.0", + "postcss-normalize-timing-functions": "^5.1.0", + "postcss-normalize-unicode": "^5.1.1", + "postcss-normalize-url": "^5.1.0", + "postcss-normalize-whitespace": "^5.1.1", + "postcss-ordered-values": "^5.1.3", + "postcss-reduce-initial": "^5.1.1", + "postcss-reduce-transforms": "^5.1.0", + "postcss-svgo": "^5.1.0", + "postcss-unique-selectors": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csstype": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" + }, + "node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/del": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", + "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", + "dependencies": { + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detab": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.4.tgz", + "integrity": "sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==", + "dependencies": { + "repeat-string": "^1.5.4" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" + }, + "node_modules/detect-port": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.3.0.tgz", + "integrity": "sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ==", + "dependencies": { + "address": "^1.0.1", + "debug": "^2.6.0" + }, + "bin": { + "detect": "bin/detect-port", + "detect-port": "bin/detect-port" + }, + "engines": { + "node": ">= 4.2.1" + } + }, + "node_modules/detect-port-alt": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", + "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", + "dependencies": { + "address": "^1.0.1", + "debug": "^2.6.0" + }, + "bin": { + "detect": "bin/detect-port", + "detect-port": "bin/detect-port" + }, + "engines": { + "node": ">= 4.2.1" + } + }, + "node_modules/detect-port-alt/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/detect-port-alt/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/detect-port/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/detect-port/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==" + }, + "node_modules/dns-packet": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz", + "integrity": "sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==", + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/docusaurus-plugin-goatcounter": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/docusaurus-plugin-goatcounter/-/docusaurus-plugin-goatcounter-2.0.1.tgz", + "integrity": "sha512-0KcS2fbpV2sDmeDheR/vyH9YkJg8+y7pcGq9PtrQbyDAsISnYCI+pvwlNZIHikn9Z+W+9mGLxYaHWQwlUc5/lA==", + "engines": { + "node": ">=14" + } + }, + "node_modules/dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dependencies": { + "utila": "~0.4" + } + }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" + }, + "node_modules/duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/electron-to-chromium": { + "version": "1.4.284", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/emoticon": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/emoticon/-/emoticon-3.2.0.tgz", + "integrity": "sha512-SNujglcLTTg+lDAcApPNgEdudaqQFiAbJCqzjNxJkvN9vAwCGi0uu8IUVvx+f16h+V44KCY6Y2yboroc9pilHg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", + "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "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==", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "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": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.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==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "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==", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eta": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/eta/-/eta-1.12.3.tgz", + "integrity": "sha512-qHixwbDLtekO/d51Yr4glcaUJCIjGVJyTzuqV4GPlgZo1YpgOKG+avQynErZIYrfM6JIJdtiG2Kox8tbb+DoGg==", + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "url": "https://github.com/eta-dev/eta?sponsor=1" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eval": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.8.tgz", + "integrity": "sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==", + "dependencies": { + "@types/node": "*", + "require-like": ">= 0.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/express": { + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.6.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/express/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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==" + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "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==" + }, + "node_modules/fast-url-parser": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", + "integrity": "sha1-9K8+qfNNiicc9YrSs3WfQx8LMY0=", + "dependencies": { + "punycode": "^1.3.2" + } + }, + "node_modules/fast-url-parser/node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + }, + "node_modules/fastq": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.12.0.tgz", + "integrity": "sha512-VNX0QkHK3RsXVKr9KrlUv/FoTa0NdbYoHHl7uXHv2rzyHSlxjdNAKug2twd9luJxpcyNeAgf5iPPMutJO67Dfg==", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fbemitter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz", + "integrity": "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==", + "dependencies": { + "fbjs": "^3.0.0" + } + }, + "node_modules/fbjs": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.4.tgz", + "integrity": "sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ==", + "dependencies": { + "cross-fetch": "^3.1.5", + "fbjs-css-vars": "^1.0.0", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.30" + } + }, + "node_modules/fbjs-css-vars": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", + "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" + }, + "node_modules/feed": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", + "integrity": "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==", + "dependencies": { + "xml-js": "^1.6.11" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/filesize": { + "version": "8.0.7", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", + "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==", + "engines": { + "node": ">= 0.4.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==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flux": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/flux/-/flux-4.0.4.tgz", + "integrity": "sha512-NCj3XlayA2UsapRpM7va6wU1+9rE5FIL7qoMcmxWHRzbp0yujihMBm9BBHZ1MDIk5h5o2Bl6eGiCe8rYELAmYw==", + "dependencies": { + "fbemitter": "^3.0.0", + "fbjs": "^3.0.1" + }, + "peerDependencies": { + "react": "^15.0.2 || ^16.0.0 || ^17.0.0" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/fork-ts-checker-webpack-plugin": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz", + "integrity": "sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==", + "dependencies": { + "@babel/code-frame": "^7.8.3", + "@types/json-schema": "^7.0.5", + "chalk": "^4.1.0", + "chokidar": "^3.4.2", + "cosmiconfig": "^6.0.0", + "deepmerge": "^4.2.2", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "memfs": "^3.1.2", + "minimatch": "^3.0.4", + "schema-utils": "2.7.0", + "semver": "^7.3.2", + "tapable": "^1.0.0" + }, + "engines": { + "node": ">=10", + "yarn": ">=1.0.0" + }, + "peerDependencies": { + "eslint": ">= 6", + "typescript": ">= 2.7", + "vue-template-compiler": "*", + "webpack": ">= 4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + }, + "vue-template-compiler": { + "optional": true + } + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "dependencies": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/infusion" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs-monkey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", + "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==" + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" + }, + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/github-slugger": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", + "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==" + }, + "node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "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": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" + }, + "node_modules/global-dirs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", + "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", + "dependencies": { + "ini": "2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/global-dirs/node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dependencies": { + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "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==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dependencies": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "node_modules/gray-matter": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", + "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", + "dependencies": { + "js-yaml": "^3.13.1", + "kind-of": "^6.0.2", + "section-matter": "^1.0.0", + "strip-bom-string": "^1.0.0" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "dependencies": { + "duplexer": "^0.1.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hast-to-hyperscript": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz", + "integrity": "sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==", + "dependencies": { + "@types/unist": "^2.0.3", + "comma-separated-tokens": "^1.0.0", + "property-information": "^5.3.0", + "space-separated-tokens": "^1.0.0", + "style-to-object": "^0.3.0", + "unist-util-is": "^4.0.0", + "web-namespaces": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz", + "integrity": "sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==", + "dependencies": { + "@types/parse5": "^5.0.0", + "hastscript": "^6.0.0", + "property-information": "^5.0.0", + "vfile": "^4.0.0", + "vfile-location": "^3.2.0", + "web-namespaces": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-parse-selector": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", + "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-raw": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-6.0.1.tgz", + "integrity": "sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig==", + "dependencies": { + "@types/hast": "^2.0.0", + "hast-util-from-parse5": "^6.0.0", + "hast-util-to-parse5": "^6.0.0", + "html-void-elements": "^1.0.0", + "parse5": "^6.0.0", + "unist-util-position": "^3.0.0", + "vfile": "^4.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-parse5": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz", + "integrity": "sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==", + "dependencies": { + "hast-to-hyperscript": "^9.0.0", + "property-information": "^5.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hastscript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", + "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", + "dependencies": { + "@types/hast": "^2.0.0", + "comma-separated-tokens": "^1.0.0", + "hast-util-parse-selector": "^2.0.0", + "property-information": "^5.0.0", + "space-separated-tokens": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "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==", + "bin": { + "he": "bin/he" + } + }, + "node_modules/history": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", + "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", + "dependencies": { + "@babel/runtime": "^7.1.2", + "loose-envify": "^1.2.0", + "resolve-pathname": "^3.0.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0", + "value-equal": "^1.0.1" + } + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/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==", + "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/hpack.js/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==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-entities": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", + "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==" + }, + "node_modules/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-minifier-terser/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "engines": { + "node": ">= 12" + } + }, + "node_modules/html-tags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz", + "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/html-void-elements": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", + "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/html-webpack-plugin": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", + "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", + "dependencies": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" + }, + "peerDependencies": { + "webpack": "^5.20.0" + } + }, + "node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/http-proxy-middleware/node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "engines": { + "node": ">=10.17.0" + } + }, + "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==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/image-size": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.2.tgz", + "integrity": "sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg==", + "dependencies": { + "queue": "6.0.2" + }, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/immer": { + "version": "9.0.16", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.16.tgz", + "integrity": "sha512-qenGE7CstVm1NrHQbMh8YaSzTZTFNP3zPqr3YU0S0UY441j4bJTg4A2Hh5KAhwgaiU6ZZ1Ar6y/2f4TblnMReQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "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==", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "engines": { + "node": ">=4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/infima": { + "version": "0.2.0-alpha.42", + "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.42.tgz", + "integrity": "sha512-ift8OXNbQQwtbIt6z16KnSWP7uJ/SysSMFI4F87MNRTicypfl4Pv3E2OGVv6N3nSZFJvA8imYulCBS64iyHYww==", + "engines": { + "node": ">=12" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "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==" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "node_modules/inline-style-parser": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", + "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" + }, + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/ipaddr.js": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", + "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "dependencies": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "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==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=4" + } + }, + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-ci/node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + }, + "node_modules/is-core-module": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz", + "integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "engines": { + "node": ">=0.10.0" + } + }, + "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=", + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hexadecimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "dependencies": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-npm": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", + "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "engines": { + "node": ">=8" + } + }, + "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==", + "engines": { + "node": ">=8" + } + }, + "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==", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-root": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", + "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "node_modules/is-whitespace-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", + "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-word-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", + "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-util": { + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.3.1.tgz", + "integrity": "sha512-7YOVZaiX7RJLv76ZfHt4nbNEzzTRiMW/IiOG7ZOKmTXmoGBxUDefgMAxQubu6WPVqP5zSzAdZG0FfLcC7HOIFQ==", + "dependencies": { + "@jest/types": "^29.3.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker": { + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.3.1.tgz", + "integrity": "sha512-lY4AnnmsEWeiXirAIA0c9SDPbuCBq8IYuDVL8PMm0MZ2PEs2yPvRA/J64QBXuZp7CYKrDM/rmNrc9/i3KJQncw==", + "dependencies": { + "@types/node": "*", + "jest-util": "^29.3.1", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/joi": { + "version": "17.7.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.7.0.tgz", + "integrity": "sha512-1/ugc8djfn93rTE3WRKdCzGGt/EtiYKxITMO4Wiv6q5JL1gl9ePt4kBsl1S499nbosspfctIQTpYIhSmHA3WAg==", + "dependencies": { + "@hapi/hoek": "^9.0.0", + "@hapi/topo": "^5.0.0", + "@sideway/address": "^4.1.3", + "@sideway/formula": "^3.0.0", + "@sideway/pinpoint": "^2.0.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "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==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "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==" + }, + "node_modules/json5": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.2.tgz", + "integrity": "sha512-46Tk9JiOL2z7ytNQWFLpj99RZkVgeHf87yGQKsIkaPz1qSH9UczKH1rO7K3wgRselo0tYMUNfecYpm/p1vC7tQ==", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dependencies": { + "json-buffer": "3.0.0" + } + }, + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "engines": { + "node": ">=6" + } + }, + "node_modules/klona": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", + "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "dependencies": { + "package-json": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/lilconfig": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", + "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" + }, + "node_modules/loader-runner": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", + "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.curry": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", + "integrity": "sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA==" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + }, + "node_modules/lodash.flow": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz", + "integrity": "sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw==" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "engines": { + "node": ">=0.10.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==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/markdown-escapes": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", + "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdast-squeeze-paragraphs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz", + "integrity": "sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==", + "dependencies": { + "unist-util-remove": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-definitions": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", + "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==", + "dependencies": { + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz", + "integrity": "sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==", + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "mdast-util-definitions": "^4.0.0", + "mdurl": "^1.0.0", + "unist-builder": "^2.0.0", + "unist-util-generated": "^1.0.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", + "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + }, + "node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.4.12", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.12.tgz", + "integrity": "sha512-BcjuQn6vfqP+k100e0E9m61Hyqa//Brp+I3f0OBmN0ATHlFA8vx3Lt8z57R3u2bPqe3WGDBC+nF72fTH7isyEw==", + "dependencies": { + "fs-monkey": "^1.0.3" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "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==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.2.tgz", + "integrity": "sha512-EdlUizq13o0Pd+uCp+WO/JpkLvHRVGt97RqfeGhXqAcorYo1ypJSpkV+WDT0vY/kmh/p7wRdJNJtuyK540PXDw==", + "dependencies": { + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/ajv": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", + "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + }, + "node_modules/mrmime": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", + "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "engines": { + "node": ">=10" + } + }, + "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==" + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "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==" + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-emoji": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", + "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", + "dependencies": { + "lodash": "^4.17.21" + } + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-releases": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.8.tgz", + "integrity": "sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==" + }, + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nprogress": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", + "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==" + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "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=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "bin": { + "opener": "bin/opener-bin.js" + } + }, + "node_modules/p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "engines": { + "node": ">=6" + } + }, + "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==", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-locate/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==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dependencies": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/package-json/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "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==", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "dependencies": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-numeric-range": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz", + "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==" + }, + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", + "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", + "dependencies": { + "domhandler": "^5.0.2", + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter/node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "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==", + "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=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" + }, + "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==", + "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==" + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "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==", + "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==", + "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==", + "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==", + "dependencies": { + "p-limit": "^2.0.0" + }, + "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": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-calc": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "dependencies": { + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" + }, + "peerDependencies": { + "postcss": "^8.2.2" + } + }, + "node_modules/postcss-colormin": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.0.tgz", + "integrity": "sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==", + "dependencies": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-convert-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", + "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-comments": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-empty": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-unused": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-5.1.0.tgz", + "integrity": "sha512-KwLWymI9hbwXmJa0dkrzpRbSJEh0vVUd7r8t0yOGPcfKzyJJxFM8kLyC5Ev9avji6nY95pOp1W6HqIrfT+0VGw==", + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-loader": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.0.2.tgz", + "integrity": "sha512-fUJzV/QH7NXUAqV8dWJ9Lg4aTkDCezpTS5HgJ2DvqznexTbSTxgi/dTECvTZ15BwKTtk8G/bqI/QTu2HPd3ZCg==", + "dependencies": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.5", + "semver": "^7.3.8" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + } + }, + "node_modules/postcss-merge-idents": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-5.1.1.tgz", + "integrity": "sha512-pCijL1TREiCoog5nQp7wUe+TUonA2tC2sQ54UGeMmryK3UFGIYKqDyjnqd6RcuI4znFn9hWSLNN8xKE/vWcUQw==", + "dependencies": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-merge-longhand": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", + "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-merge-rules": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.3.tgz", + "integrity": "sha512-LbLd7uFC00vpOuMvyZop8+vvhnfRGpp2S+IMQKeuOZZapPRY4SMq5ErjQeHbHsjCUgJkRNrlU+LmxsKIqPKQlA==", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "dependencies": { + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-params": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", + "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", + "dependencies": { + "browserslist": "^4.21.4", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", + "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", + "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", + "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-string": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", + "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", + "dependencies": { + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-whitespace": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-ordered-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", + "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", + "dependencies": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-idents": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-5.2.0.tgz", + "integrity": "sha512-BTrLjICoSB6gxbc58D5mdBK8OhXRDqud/zodYfdSi52qvDHdMwk+9kB9xsM8yJThH/sZU5A6QVSmMmaN001gIg==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.1.tgz", + "integrity": "sha512-//jeDqWcHPuXGZLoolFrUXBDyuEGbr9S2rMo19bkTIjBQ4PqkaO+oI8wua5BOUxpfi97i3PCoInsiFIEBfkm9w==", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", + "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-sort-media-queries": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-4.3.0.tgz", + "integrity": "sha512-jAl8gJM2DvuIJiI9sL1CuiHtKM4s5aEIomkU8G3LFvbP+p8i7Sz8VV63uieTgoewGqKbi+hxBTiOKJlB35upCg==", + "dependencies": { + "sort-css-media-queries": "2.1.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.4.16" + } + }, + "node_modules/postcss-svgo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + }, + "node_modules/postcss-zindex": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-5.1.0.tgz", + "integrity": "sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A==", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "engines": { + "node": ">=4" + } + }, + "node_modules/pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "node_modules/pretty-time": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", + "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/prism-react-renderer": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.3.5.tgz", + "integrity": "sha512-IJ+MSwBWKG+SM3b2SUfdrhC+gu01QkV2KmRQgREThBfSQRoufqRfxfHUxpG1WcaFjP+kojcFyO9Qqtpgt3qLCg==", + "peerDependencies": { + "react": ">=0.14.9" + } + }, + "node_modules/prismjs": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", + "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", + "engines": { + "node": ">=6" + } + }, + "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==" + }, + "node_modules/promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "dependencies": { + "asap": "~2.0.3" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, + "node_modules/property-information": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", + "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", + "dependencies": { + "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "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==", + "engines": { + "node": ">=6" + } + }, + "node_modules/pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "dependencies": { + "escape-goat": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pure-color": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz", + "integrity": "sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA==" + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", + "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", + "dependencies": { + "inherits": "~2.0.3" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/react": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", + "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-base16-styling": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.6.0.tgz", + "integrity": "sha512-yvh/7CArceR/jNATXOKDlvTnPKPmGZz7zsenQ3jUwLzHkNUR0CvY3yGYJbWJ/nnxsL8Sgmt5cO3/SILVuPO6TQ==", + "dependencies": { + "base16": "^1.0.0", + "lodash.curry": "^4.0.1", + "lodash.flow": "^3.3.0", + "pure-color": "^1.2.0" + } + }, + "node_modules/react-dev-utils": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", + "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", + "dependencies": { + "@babel/code-frame": "^7.16.0", + "address": "^1.1.2", + "browserslist": "^4.18.1", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.3", + "detect-port-alt": "^1.1.6", + "escape-string-regexp": "^4.0.0", + "filesize": "^8.0.6", + "find-up": "^5.0.0", + "fork-ts-checker-webpack-plugin": "^6.5.0", + "global-modules": "^2.0.0", + "globby": "^11.0.4", + "gzip-size": "^6.0.0", + "immer": "^9.0.7", + "is-root": "^2.1.0", + "loader-utils": "^3.2.0", + "open": "^8.4.0", + "pkg-up": "^3.1.0", + "prompts": "^2.4.2", + "react-error-overlay": "^6.0.11", + "recursive-readdir": "^2.2.2", + "shell-quote": "^1.7.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/react-dev-utils/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==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dev-utils/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==", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dev-utils/node_modules/loader-utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", + "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/react-dev-utils/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==", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dev-utils/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==", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dom": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", + "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "scheduler": "^0.20.2" + }, + "peerDependencies": { + "react": "17.0.2" + } + }, + "node_modules/react-error-overlay": { + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", + "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" + }, + "node_modules/react-fast-compare": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz", + "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" + }, + "node_modules/react-helmet-async": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.3.0.tgz", + "integrity": "sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "invariant": "^2.2.4", + "prop-types": "^15.7.2", + "react-fast-compare": "^3.2.0", + "shallowequal": "^1.1.0" + }, + "peerDependencies": { + "react": "^16.6.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/react-json-view": { + "version": "1.21.3", + "resolved": "https://registry.npmjs.org/react-json-view/-/react-json-view-1.21.3.tgz", + "integrity": "sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw==", + "dependencies": { + "flux": "^4.0.1", + "react-base16-styling": "^0.6.0", + "react-lifecycles-compat": "^3.0.4", + "react-textarea-autosize": "^8.3.2" + }, + "peerDependencies": { + "react": "^17.0.0 || ^16.3.0 || ^15.5.4", + "react-dom": "^17.0.0 || ^16.3.0 || ^15.5.4" + } + }, + "node_modules/react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" + }, + "node_modules/react-loadable": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/react-loadable/-/react-loadable-5.5.0.tgz", + "integrity": "sha512-C8Aui0ZpMd4KokxRdVAm2bQtI03k2RMRNzOB+IipV3yxFTSVICv7WoUr5L9ALB5BmKO1iHgZtWM8EvYG83otdg==", + "peer": true, + "dependencies": { + "prop-types": "^15.5.0" + }, + "peerDependencies": { + "react": "*" + } + }, + "node_modules/react-loadable-ssr-addon-v5-slorber": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz", + "integrity": "sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A==", + "dependencies": { + "@babel/runtime": "^7.10.3" + }, + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "react-loadable": "*", + "webpack": ">=4.41.1 || 5.x" + } + }, + "node_modules/react-router": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", + "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", + "dependencies": { + "@babel/runtime": "^7.12.13", + "history": "^4.9.0", + "hoist-non-react-statics": "^3.1.0", + "loose-envify": "^1.3.1", + "path-to-regexp": "^1.7.0", + "prop-types": "^15.6.2", + "react-is": "^16.6.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + }, + "peerDependencies": { + "react": ">=15" + } + }, + "node_modules/react-router-config": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz", + "integrity": "sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==", + "dependencies": { + "@babel/runtime": "^7.1.2" + }, + "peerDependencies": { + "react": ">=15", + "react-router": ">=5" + } + }, + "node_modules/react-router-dom": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", + "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", + "dependencies": { + "@babel/runtime": "^7.12.13", + "history": "^4.9.0", + "loose-envify": "^1.3.1", + "prop-types": "^15.6.2", + "react-router": "5.3.4", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + }, + "peerDependencies": { + "react": ">=15" + } + }, + "node_modules/react-router/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "node_modules/react-router/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==", + "dependencies": { + "isarray": "0.0.1" + } + }, + "node_modules/react-textarea-autosize": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.4.1.tgz", + "integrity": "sha512-aD2C+qK6QypknC+lCMzteOdIjoMbNlgSFmJjCV+DrfTPwp59i/it9mMNf2HDzvRjQgKAyBDPyLJhcrzElf2U4Q==", + "dependencies": { + "@babel/runtime": "^7.20.13", + "use-composed-ref": "^1.3.0", + "use-latest": "^1.2.1" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/reading-time": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.5.0.tgz", + "integrity": "sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==" + }, + "node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/recursive-readdir": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", + "dependencies": { + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/recursive-readdir/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + }, + "node_modules/regenerator-transform": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", + "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regexpu-core": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz", + "integrity": "sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==", + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsgen": "^0.7.1", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/registry-auth-token": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", + "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "dependencies": { + "rc": "^1.2.8" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "dependencies": { + "rc": "^1.2.8" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/regjsgen": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", + "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==" + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/remark-emoji": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-2.2.0.tgz", + "integrity": "sha512-P3cj9s5ggsUvWw5fS2uzCHJMGuXYRb0NnZqYlNecewXt8QBU9n5vW3DUUKOhepS8F9CwdMx9B8a3i7pqFWAI5w==", + "dependencies": { + "emoticon": "^3.2.0", + "node-emoji": "^1.10.0", + "unist-util-visit": "^2.0.3" + } + }, + "node_modules/remark-footnotes": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-2.0.0.tgz", + "integrity": "sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-mdx": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", + "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", + "dependencies": { + "@babel/core": "7.12.9", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-proposal-object-rest-spread": "7.12.1", + "@babel/plugin-syntax-jsx": "7.12.1", + "@mdx-js/util": "1.6.22", + "is-alphabetical": "1.0.4", + "remark-parse": "8.0.3", + "unified": "9.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-mdx/node_modules/@babel/core": { + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", + "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/remark-mdx/node_modules/@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + }, + "node_modules/remark-mdx/node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", + "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.12.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/remark-mdx/node_modules/@babel/plugin-syntax-jsx": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", + "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/remark-mdx/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/remark-parse": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", + "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", + "dependencies": { + "ccount": "^1.0.0", + "collapse-white-space": "^1.0.2", + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "is-word-character": "^1.0.0", + "markdown-escapes": "^1.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "^1.0.0", + "unherit": "^1.0.4", + "unist-util-remove-position": "^2.0.0", + "vfile-location": "^3.0.0", + "xtend": "^4.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-squeeze-paragraphs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz", + "integrity": "sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==", + "dependencies": { + "mdast-squeeze-paragraphs": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-like": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", + "integrity": "sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==", + "engines": { + "node": "*" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + }, + "node_modules/resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-pathname": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", + "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" + }, + "node_modules/responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dependencies": { + "lowercase-keys": "^1.0.0" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rtl-detect": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.0.4.tgz", + "integrity": "sha512-EBR4I2VDSSYr7PkBmFy04uhycIpDKp+21p/jARYXlCSjQksTBQcJ0HFUPOO79EPPH5JS6VAhiIQbycf0O3JAxQ==" + }, + "node_modules/rtlcss": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-3.5.0.tgz", + "integrity": "sha512-wzgMaMFHQTnyi9YOwsx9LjOxYXJPzS8sYnFaKm6R5ysvTkwzHiB0vxnbHwchHQT65PTdBjDG21/kQBWI7q9O7A==", + "dependencies": { + "find-up": "^5.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.3.11", + "strip-json-comments": "^3.1.1" + }, + "bin": { + "rtlcss": "bin/rtlcss.js" + } + }, + "node_modules/rtlcss/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==", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/rtlcss/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==", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/rtlcss/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==", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/rtlcss/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==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", + "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "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==" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "node_modules/scheduler": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", + "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/section-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", + "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "dependencies": { + "extend-shallow": "^2.0.1", + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" + }, + "node_modules/selfsigned": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", + "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", + "dependencies": { + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "dependencies": { + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/semver-diff/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/send/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==" + }, + "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==", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-handler": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.3.tgz", + "integrity": "sha512-FosMqFBNrLyeiIDvP1zgO6YoTzFYHxLDEIavhlmQ+knB2Z7l1t+kGLHkZIDN7UVWqQAmKI3D20A6F6jo3nDd4w==", + "dependencies": { + "bytes": "3.0.0", + "content-disposition": "0.5.2", + "fast-url-parser": "1.1.3", + "mime-types": "2.1.18", + "minimatch": "3.0.4", + "path-is-inside": "1.0.2", + "path-to-regexp": "2.2.1", + "range-parser": "1.2.0" + } + }, + "node_modules/serve-handler/node_modules/content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-handler/node_modules/mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-handler/node_modules/mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "dependencies": { + "mime-db": "~1.33.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-handler/node_modules/path-to-regexp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", + "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==" + }, + "node_modules/serve-handler/node_modules/range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + }, + "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==", + "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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.4.tgz", + "integrity": "sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "dependencies": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + }, + "node_modules/sirv": { + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.19.tgz", + "integrity": "sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==", + "dependencies": { + "@polka/url": "^1.0.0-next.20", + "mrmime": "^1.0.0", + "totalist": "^1.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" + }, + "node_modules/sitemap": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.1.tgz", + "integrity": "sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg==", + "dependencies": { + "@types/node": "^17.0.5", + "@types/sax": "^1.2.1", + "arg": "^5.0.0", + "sax": "^1.2.4" + }, + "bin": { + "sitemap": "dist/cli.js" + }, + "engines": { + "node": ">=12.0.0", + "npm": ">=5.6.0" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/sort-css-media-queries": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.1.0.tgz", + "integrity": "sha512-IeWvo8NkNiY2vVYdPa27MCQiR0MN0M80johAYFVxWWXQ44KU84WNxjslwBHmc/7ZL2ccwkM7/e6S5aiKZXm7jA==", + "engines": { + "node": ">= 6.3.0" + } + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "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==", + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", + "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" + }, + "node_modules/state-toggle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", + "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/std-env": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.3.1.tgz", + "integrity": "sha512-3H20QlwQsSm2OvAxWIYhs+j01MzzqwMwGiiO1NQaJYZgJZFPuAbf95/DiKRBSTYIJ2FeGUc+B/6mPGcWP9dO3Q==" + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/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==" + }, + "node_modules/string-width/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/stringify-object/node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/style-to-object": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", + "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==", + "dependencies": { + "inline-style-parser": "0.1.1" + } + }, + "node_modules/stylehacks": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", + "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "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==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/svg-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" + }, + "node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/tapable": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", + "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "5.14.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", + "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", + "dependencies": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", + "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.14", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "terser": "^5.14.1" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/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==", + "engines": { + "node": ">=8" + } + }, + "node_modules/terser-webpack-plugin/node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/terser-webpack-plugin/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==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" + }, + "node_modules/tiny-invariant": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.1.0.tgz", + "integrity": "sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw==" + }, + "node_modules/tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "engines": { + "node": ">=6" + } + }, + "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==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/totalist": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", + "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==", + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/trim": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", + "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=" + }, + "node_modules/trim-trailing-lines": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz", + "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/tslib": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" + }, + "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==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/typescript": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", + "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/ua-parser-js": { + "version": "0.7.35", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.35.tgz", + "integrity": "sha512-veRf7dawaj9xaWEu9HoTVn5Pggtc/qj+kqTOFvNiN1l0YdxwC1kvel57UCjThjGa3BHBihE8/UJAHI+uQHmd/g==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], + "engines": { + "node": "*" + } + }, + "node_modules/unherit": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", + "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", + "dependencies": { + "inherits": "^2.0.0", + "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unified": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", + "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", + "dependencies": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/unist-builder": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", + "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-generated": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", + "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", + "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-2.1.0.tgz", + "integrity": "sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q==", + "dependencies": { + "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove-position": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", + "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", + "dependencies": { + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "dependencies": { + "@types/unist": "^2.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", + "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", + "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/update-notifier": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", + "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", + "dependencies": { + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.4.0", + "is-npm": "^5.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.1.0", + "pupa": "^2.1.1", + "semver": "^7.3.4", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/yeoman/update-notifier?sponsor=1" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-loader": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", + "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", + "dependencies": { + "loader-utils": "^2.0.0", + "mime-types": "^2.1.27", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "file-loader": "*", + "webpack": "^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "file-loader": { + "optional": true + } + } + }, + "node_modules/url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dependencies": { + "prepend-http": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/use-composed-ref": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz", + "integrity": "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/use-isomorphic-layout-effect": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", + "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-latest": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.1.tgz", + "integrity": "sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==", + "dependencies": { + "use-isomorphic-layout-effect": "^1.1.1" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==" + }, + "node_modules/utility-types": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", + "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/value-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", + "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vfile": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "dependencies": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-location": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", + "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/wait-on": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-6.0.1.tgz", + "integrity": "sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw==", + "dependencies": { + "axios": "^0.25.0", + "joi": "^17.6.0", + "lodash": "^4.17.21", + "minimist": "^1.2.5", + "rxjs": "^7.5.4" + }, + "bin": { + "wait-on": "bin/wait-on" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/web-namespaces": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", + "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/webpack": { + "version": "5.76.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.76.1.tgz", + "integrity": "sha512-4+YIK4Abzv8172/SGqObnUjaIHjLEuUasz9EwQj/9xmPPkYJy2Mh03Q/lJfSD3YLzbxy5FeTq5Uw0323Oh6SJQ==", + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-bundle-analyzer": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.7.0.tgz", + "integrity": "sha512-j9b8ynpJS4K+zfO5GGwsAcQX4ZHpWV+yRiHDiL+bE0XHJ8NiPYLTNVQdlFYWxtpg9lfAQNlwJg16J9AJtFSXRg==", + "dependencies": { + "acorn": "^8.0.4", + "acorn-walk": "^8.0.0", + "chalk": "^4.1.0", + "commander": "^7.2.0", + "gzip-size": "^6.0.0", + "lodash": "^4.17.20", + "opener": "^1.5.2", + "sirv": "^1.0.7", + "ws": "^7.3.1" + }, + "bin": { + "webpack-bundle-analyzer": "lib/bin/analyzer.js" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/webpack-dev-middleware": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", + "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-middleware/node_modules/ajv": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", + "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/webpack-dev-middleware/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack-dev-server": { + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz", + "integrity": "sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw==", + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.1", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.4.2" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/ajv": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", + "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack-dev-server/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/webpack-dev-server/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/webpack-dev-server/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "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/webpack-merge": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpackbar": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.2.tgz", + "integrity": "sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ==", + "dependencies": { + "chalk": "^4.1.0", + "consola": "^2.15.3", + "pretty-time": "^1.1.0", + "std-env": "^3.0.1" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "webpack": "3 || 4 || 5" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==" + }, + "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==", + "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/wrap-ansi/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==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/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==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/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==" + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/xml-js": { + "version": "1.6.11", + "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", + "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", + "dependencies": { + "sax": "^1.2.4" + }, + "bin": { + "xml-js": "bin/cli.js" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "engines": { + "node": ">= 6" + } + }, + "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==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zwitch": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", + "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + }, + "dependencies": { + "@algolia/autocomplete-core": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.7.4.tgz", + "integrity": "sha512-daoLpQ3ps/VTMRZDEBfU8ixXd+amZcNJ4QSP3IERGyzqnL5Ch8uSRFt/4G8pUvW9c3o6GA4vtVv4I4lmnkdXyg==", + "requires": { + "@algolia/autocomplete-shared": "1.7.4" + } + }, + "@algolia/autocomplete-preset-algolia": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.7.4.tgz", + "integrity": "sha512-s37hrvLEIfcmKY8VU9LsAXgm2yfmkdHT3DnA3SgHaY93yjZ2qL57wzb5QweVkYuEBZkT2PIREvRoLXC2sxTbpQ==", + "requires": { + "@algolia/autocomplete-shared": "1.7.4" + } + }, + "@algolia/autocomplete-shared": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.7.4.tgz", + "integrity": "sha512-2VGCk7I9tA9Ge73Km99+Qg87w0wzW4tgUruvWAn/gfey1ZXgmxZtyIRBebk35R1O8TbK77wujVtCnpsGpRy1kg==" + }, + "@algolia/cache-browser-local-storage": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.17.0.tgz", + "integrity": "sha512-myRSRZDIMYB8uCkO+lb40YKiYHi0fjpWRtJpR/dgkaiBlSD0plRyB6lLOh1XIfmMcSeBOqDE7y9m8xZMrXYfyQ==", + "requires": { + "@algolia/cache-common": "4.17.0" + } + }, + "@algolia/cache-common": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.17.0.tgz", + "integrity": "sha512-g8mXzkrcUBIPZaulAuqE7xyHhLAYAcF2xSch7d9dABheybaU3U91LjBX6eJTEB7XVhEsgK4Smi27vWtAJRhIKQ==" + }, + "@algolia/cache-in-memory": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.17.0.tgz", + "integrity": "sha512-PT32ciC/xI8z919d0oknWVu3kMfTlhQn3MKxDln3pkn+yA7F7xrxSALysxquv+MhFfNAcrtQ/oVvQVBAQSHtdw==", + "requires": { + "@algolia/cache-common": "4.17.0" + } + }, + "@algolia/client-account": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.17.0.tgz", + "integrity": "sha512-sSEHx9GA6m7wrlsSMNBGfyzlIfDT2fkz2u7jqfCCd6JEEwmxt8emGmxAU/0qBfbhRSuGvzojoLJlr83BSZAKjA==", + "requires": { + "@algolia/client-common": "4.17.0", + "@algolia/client-search": "4.17.0", + "@algolia/transporter": "4.17.0" + } + }, + "@algolia/client-analytics": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.17.0.tgz", + "integrity": "sha512-84ooP8QA3mQ958hQ9wozk7hFUbAO+81CX1CjAuerxBqjKIInh1fOhXKTaku05O/GHBvcfExpPLIQuSuLYziBXQ==", + "requires": { + "@algolia/client-common": "4.17.0", + "@algolia/client-search": "4.17.0", + "@algolia/requester-common": "4.17.0", + "@algolia/transporter": "4.17.0" + } + }, + "@algolia/client-common": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.17.0.tgz", + "integrity": "sha512-jHMks0ZFicf8nRDn6ma8DNNsdwGgP/NKiAAL9z6rS7CymJ7L0+QqTJl3rYxRW7TmBhsUH40wqzmrG6aMIN/DrQ==", + "requires": { + "@algolia/requester-common": "4.17.0", + "@algolia/transporter": "4.17.0" + } + }, + "@algolia/client-personalization": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.17.0.tgz", + "integrity": "sha512-RMzN4dZLIta1YuwT7QC9o+OeGz2cU6eTOlGNE/6RcUBLOU3l9tkCOdln5dPE2jp8GZXPl2yk54b2nSs1+pAjqw==", + "requires": { + "@algolia/client-common": "4.17.0", + "@algolia/requester-common": "4.17.0", + "@algolia/transporter": "4.17.0" + } + }, + "@algolia/client-search": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.17.0.tgz", + "integrity": "sha512-x4P2wKrrRIXszT8gb7eWsMHNNHAJs0wE7/uqbufm4tZenAp+hwU/hq5KVsY50v+PfwM0LcDwwn/1DroujsTFoA==", + "requires": { + "@algolia/client-common": "4.17.0", + "@algolia/requester-common": "4.17.0", + "@algolia/transporter": "4.17.0" + } + }, + "@algolia/events": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz", + "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==" + }, + "@algolia/logger-common": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.17.0.tgz", + "integrity": "sha512-DGuoZqpTmIKJFDeyAJ7M8E/LOenIjWiOsg1XJ1OqAU/eofp49JfqXxbfgctlVZVmDABIyOz8LqEoJ6ZP4DTyvw==" + }, + "@algolia/logger-console": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.17.0.tgz", + "integrity": "sha512-zMPvugQV/gbXUvWBCzihw6m7oxIKp48w37QBIUu/XqQQfxhjoOE9xyfJr1KldUt5FrYOKZJVsJaEjTsu+bIgQg==", + "requires": { + "@algolia/logger-common": "4.17.0" + } + }, + "@algolia/requester-browser-xhr": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.17.0.tgz", + "integrity": "sha512-aSOX/smauyTkP21Pf52pJ1O2LmNFJ5iHRIzEeTh0mwBeADO4GdG94cAWDILFA9rNblq/nK3EDh3+UyHHjplZ1A==", + "requires": { + "@algolia/requester-common": "4.17.0" + } + }, + "@algolia/requester-common": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.17.0.tgz", + "integrity": "sha512-XJjmWFEUlHu0ijvcHBoixuXfEoiRUdyzQM6YwTuB8usJNIgShua8ouFlRWF8iCeag0vZZiUm4S2WCVBPkdxFgg==" + }, + "@algolia/requester-node-http": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.17.0.tgz", + "integrity": "sha512-bpb/wDA1aC6WxxM8v7TsFspB7yBN3nqCGs2H1OADolQR/hiAIjAxusbuMxVbRFOdaUvAIqioIIkWvZdpYNIn8w==", + "requires": { + "@algolia/requester-common": "4.17.0" + } + }, + "@algolia/transporter": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.17.0.tgz", + "integrity": "sha512-6xL6H6fe+Fi0AEP3ziSgC+G04RK37iRb4uUUqVAH9WPYFI8g+LYFq6iv5HS8Cbuc5TTut+Bwj6G+dh/asdb9uA==", + "requires": { + "@algolia/cache-common": "4.17.0", + "@algolia/logger-common": "4.17.0", + "@algolia/requester-common": "4.17.0" + } + }, + "@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "requires": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + } + } + }, + "@babel/code-frame": { + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "requires": { + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "@babel/compat-data": { + "version": "7.20.10", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.10.tgz", + "integrity": "sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg==" + }, + "@babel/core": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.7.tgz", + "integrity": "sha512-t1ZjCluspe5DW24bn2Rr1CDb2v9rn/hROtg9a2tmd0+QYf4bsloYfLQzjG4qHPNMhWtKdGC33R5AxGR2Af2cBw==", + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.7", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-module-transforms": "^7.20.7", + "@babel/helpers": "^7.20.7", + "@babel/parser": "^7.20.7", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.7", + "@babel/types": "^7.20.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" + } + } + }, + "@babel/generator": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", + "requires": { + "@babel/types": "^7.23.0", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", + "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", + "requires": { + "@babel/helper-explode-assignable-expression": "^7.18.6", + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", + "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", + "requires": { + "@babel/compat-data": "^7.20.5", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", + "semver": "^6.3.0" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "requires": { + "yallist": "^3.0.2" + } + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + } + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.7.tgz", + "integrity": "sha512-LtoWbDXOaidEf50hmdDqn9g8VEzsorMexoWMQdQODbvmqYmaF23pBP5VNPAGIFHsFQCIeKokDiz3CH5Y2jlY6w==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-member-expression-to-functions": "^7.20.7", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.20.7", + "@babel/helper-split-export-declaration": "^7.18.6" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.20.5.tgz", + "integrity": "sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "regexpu-core": "^5.2.1" + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", + "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", + "requires": { + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" + } + } + }, + "@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==" + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", + "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "requires": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.20.7.tgz", + "integrity": "sha512-9J0CxJLq315fEdi4s7xK5TQaNYjZw+nDVpVqr1axNGKzdrdwYBD5b4uKv3n75aABG0rCCTK8Im8Ww7eYfMrZgw==", + "requires": { + "@babel/types": "^7.20.7" + } + }, + "@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-transforms": { + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz", + "integrity": "sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==", + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.20.2", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.10", + "@babel/types": "^7.20.7" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", + "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==" + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", + "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-wrap-function": "^7.18.9", + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-replace-supers": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz", + "integrity": "sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==", + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.20.7", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.7", + "@babel/types": "^7.20.7" + } + }, + "@babel/helper-simple-access": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", + "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", + "requires": { + "@babel/types": "^7.20.2" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", + "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", + "requires": { + "@babel/types": "^7.20.0" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==" + }, + "@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==" + }, + "@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==" + }, + "@babel/helper-wrap-function": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz", + "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==", + "requires": { + "@babel/helper-function-name": "^7.19.0", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.5", + "@babel/types": "^7.20.5" + } + }, + "@babel/helpers": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.7.tgz", + "integrity": "sha512-PBPjs5BppzsGaxHQCDKnZ6Gd9s6xl8bBCluz3vEInLGRJmnZan4F6BYCeqtyXqkk4W5IlPmjK4JlOuZkpJ3xZA==", + "requires": { + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.7", + "@babel/types": "^7.20.7" + } + }, + "@babel/highlight": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", + "requires": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "@babel/parser": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==" + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", + "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz", + "integrity": "sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/plugin-proposal-optional-chaining": "^7.20.7" + } + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", + "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-proposal-class-static-block": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.20.7.tgz", + "integrity": "sha512-AveGOoi9DAjUYYuUAG//Ig69GlazLnoyzMw68VCDux+c1tsnnH/OkYcpz/5xzMkEFC6UxjR5Gw1c+iY2wOGVeQ==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.20.7", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", + "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", + "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", + "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz", + "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==", + "requires": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", + "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", + "requires": { + "@babel/compat-data": "^7.20.5", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.20.7" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", + "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.20.7.tgz", + "integrity": "sha512-T+A7b1kfjtRM51ssoOfS1+wbyCVqorfyZhT99TvxxLMirPShD8CzKMRepMlCBGM5RpHMbn8s+5MMHnPstJH6mQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.20.5.tgz", + "integrity": "sha512-Vq7b9dUA12ByzB4EjQTPo25sFhY+08pQDBSZRtUAkj7lb7jahaHR5igera16QZ+3my1nYR4dKsNdYj5IjPHilQ==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.20.5", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-import-assertions": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", + "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.19.0" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", + "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", + "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.19.0" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz", + "integrity": "sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.20.2" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz", + "integrity": "sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==", + "requires": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-remap-async-to-generator": "^7.18.9" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", + "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.11.tgz", + "integrity": "sha512-tA4N427a7fjf1P0/2I4ScsHGc5jcHPbb30xMbaTke2gxDuWpUfXDuX1FEymJwKk4tuGUvGcejAR6HdZVqmmPyw==", + "requires": { + "@babel/helper-plugin-utils": "^7.20.2" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.7.tgz", + "integrity": "sha512-LWYbsiXTPKl+oBlXUGlwNlJZetXD5Am+CyBdqhPsDVjM9Jc8jwBJFrKhHf900Kfk2eZG1y9MAG3UNajol7A4VQ==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-replace-supers": "^7.20.7", + "@babel/helper-split-export-declaration": "^7.18.6", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz", + "integrity": "sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/template": "^7.20.7" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.7.tgz", + "integrity": "sha512-Xwg403sRrZb81IVB79ZPqNQME23yhugYVqgTxAhT99h485F4f+GMELFhhOsscDUB7HCswepKeCKLn/GZvUKoBA==", + "requires": { + "@babel/helper-plugin-utils": "^7.20.2" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", + "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", + "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", + "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", + "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", + "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", + "requires": { + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", + "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", + "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz", + "integrity": "sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==", + "requires": { + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helper-plugin-utils": "^7.20.2" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.20.11.tgz", + "integrity": "sha512-S8e1f7WQ7cimJQ51JkAaDrEtohVEitXjgCGAS2N8S31Y42E+kWwfSz83LYz57QdBm7q9diARVqanIaH2oVgQnw==", + "requires": { + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-simple-access": "^7.20.2" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz", + "integrity": "sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==", + "requires": { + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-validator-identifier": "^7.19.1" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", + "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", + "requires": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz", + "integrity": "sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.20.5", + "@babel/helper-plugin-utils": "^7.20.2" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", + "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", + "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.7.tgz", + "integrity": "sha512-WiWBIkeHKVOSYPO0pWkxGPfKeWrCJyD3NJ53+Lrp/QMSZbsVPovrVl2aWZ19D/LTVnaDv5Ap7GJ/B2CTOZdrfA==", + "requires": { + "@babel/helper-plugin-utils": "^7.20.2" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", + "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-react-constant-elements": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.20.2.tgz", + "integrity": "sha512-KS/G8YI8uwMGKErLFOHS/ekhqdHhpEloxs43NecQHVgo2QuQSyJhGIY1fL8UGl9wy5ItVwwoUL4YxVqsplGq2g==", + "requires": { + "@babel/helper-plugin-utils": "^7.20.2" + } + }, + "@babel/plugin-transform-react-display-name": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", + "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-react-jsx": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.20.7.tgz", + "integrity": "sha512-Tfq7qqD+tRj3EoDhY00nn2uP2hsRxgYGi5mLQ5TimKav0a9Lrpd4deE+fcLXU8zFYRjlKPHZhpCvfEA6qnBxqQ==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-jsx": "^7.18.6", + "@babel/types": "^7.20.7" + } + }, + "@babel/plugin-transform-react-jsx-development": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", + "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", + "requires": { + "@babel/plugin-transform-react-jsx": "^7.18.6" + } + }, + "@babel/plugin-transform-react-pure-annotations": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", + "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz", + "integrity": "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.20.2", + "regenerator-transform": "^0.15.1" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", + "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz", + "integrity": "sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==", + "requires": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.19.0", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" + } + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", + "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz", + "integrity": "sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==", + "requires": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", + "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", + "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", + "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-typescript": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.20.7.tgz", + "integrity": "sha512-m3wVKEvf6SoszD8pu4NZz3PvfKRCMgk6D6d0Qi9hNnlM5M6CFS92EgF4EiHVLKbU0r/r7ty1hg7NPZwE7WRbYw==", + "requires": { + "@babel/helper-create-class-features-plugin": "^7.20.7", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-typescript": "^7.20.0" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", + "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", + "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/preset-env": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz", + "integrity": "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==", + "requires": { + "@babel/compat-data": "^7.20.1", + "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-async-generator-functions": "^7.20.1", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-class-static-block": "^7.18.6", + "@babel/plugin-proposal-dynamic-import": "^7.18.6", + "@babel/plugin-proposal-export-namespace-from": "^7.18.9", + "@babel/plugin-proposal-json-strings": "^7.18.6", + "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", + "@babel/plugin-proposal-numeric-separator": "^7.18.6", + "@babel/plugin-proposal-object-rest-spread": "^7.20.2", + "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-private-methods": "^7.18.6", + "@babel/plugin-proposal-private-property-in-object": "^7.18.6", + "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.20.0", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.18.6", + "@babel/plugin-transform-async-to-generator": "^7.18.6", + "@babel/plugin-transform-block-scoped-functions": "^7.18.6", + "@babel/plugin-transform-block-scoping": "^7.20.2", + "@babel/plugin-transform-classes": "^7.20.2", + "@babel/plugin-transform-computed-properties": "^7.18.9", + "@babel/plugin-transform-destructuring": "^7.20.2", + "@babel/plugin-transform-dotall-regex": "^7.18.6", + "@babel/plugin-transform-duplicate-keys": "^7.18.9", + "@babel/plugin-transform-exponentiation-operator": "^7.18.6", + "@babel/plugin-transform-for-of": "^7.18.8", + "@babel/plugin-transform-function-name": "^7.18.9", + "@babel/plugin-transform-literals": "^7.18.9", + "@babel/plugin-transform-member-expression-literals": "^7.18.6", + "@babel/plugin-transform-modules-amd": "^7.19.6", + "@babel/plugin-transform-modules-commonjs": "^7.19.6", + "@babel/plugin-transform-modules-systemjs": "^7.19.6", + "@babel/plugin-transform-modules-umd": "^7.18.6", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", + "@babel/plugin-transform-new-target": "^7.18.6", + "@babel/plugin-transform-object-super": "^7.18.6", + "@babel/plugin-transform-parameters": "^7.20.1", + "@babel/plugin-transform-property-literals": "^7.18.6", + "@babel/plugin-transform-regenerator": "^7.18.6", + "@babel/plugin-transform-reserved-words": "^7.18.6", + "@babel/plugin-transform-shorthand-properties": "^7.18.6", + "@babel/plugin-transform-spread": "^7.19.0", + "@babel/plugin-transform-sticky-regex": "^7.18.6", + "@babel/plugin-transform-template-literals": "^7.18.9", + "@babel/plugin-transform-typeof-symbol": "^7.18.9", + "@babel/plugin-transform-unicode-escapes": "^7.18.10", + "@babel/plugin-transform-unicode-regex": "^7.18.6", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.20.2", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", + "core-js-compat": "^3.25.1", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" + } + } + }, + "@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/preset-react": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", + "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-transform-react-display-name": "^7.18.6", + "@babel/plugin-transform-react-jsx": "^7.18.6", + "@babel/plugin-transform-react-jsx-development": "^7.18.6", + "@babel/plugin-transform-react-pure-annotations": "^7.18.6" + } + }, + "@babel/preset-typescript": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz", + "integrity": "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-transform-typescript": "^7.18.6" + } + }, + "@babel/runtime": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", + "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", + "requires": { + "regenerator-runtime": "^0.13.11" + } + }, + "@babel/runtime-corejs3": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.20.7.tgz", + "integrity": "sha512-jr9lCZ4RbRQmCR28Q8U8Fu49zvFqLxTY9AMOUz+iyMohMoAgpEcVxY+wJNay99oXOpOcCTODkk70NDN2aaJEeg==", + "requires": { + "core-js-pure": "^3.25.1", + "regenerator-runtime": "^0.13.11" + } + }, + "@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "requires": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + } + }, + "@babel/traverse": { + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", + "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", + "requires": { + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.0", + "@babel/types": "^7.23.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "requires": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + } + }, + "@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "optional": true + }, + "@docsearch/css": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.3.3.tgz", + "integrity": "sha512-6SCwI7P8ao+se1TUsdZ7B4XzL+gqeQZnBc+2EONZlcVa0dVrk0NjETxozFKgMv0eEGH8QzP1fkN+A1rH61l4eg==" + }, + "@docsearch/react": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.3.3.tgz", + "integrity": "sha512-pLa0cxnl+G0FuIDuYlW+EBK6Rw2jwLw9B1RHIeS4N4s2VhsfJ/wzeCi3CWcs5yVfxLd5ZK50t//TMA5e79YT7Q==", + "requires": { + "@algolia/autocomplete-core": "1.7.4", + "@algolia/autocomplete-preset-algolia": "1.7.4", + "@docsearch/css": "3.3.3", + "algoliasearch": "^4.0.0" + } + }, + "@docusaurus/core": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.2.0.tgz", + "integrity": "sha512-Vd6XOluKQqzG12fEs9prJgDtyn6DPok9vmUWDR2E6/nV5Fl9SVkhEQOBxwObjk3kQh7OY7vguFaLh0jqdApWsA==", + "requires": { + "@babel/core": "^7.18.6", + "@babel/generator": "^7.18.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.18.6", + "@babel/preset-env": "^7.18.6", + "@babel/preset-react": "^7.18.6", + "@babel/preset-typescript": "^7.18.6", + "@babel/runtime": "^7.18.6", + "@babel/runtime-corejs3": "^7.18.6", + "@babel/traverse": "^7.18.8", + "@docusaurus/cssnano-preset": "2.2.0", + "@docusaurus/logger": "2.2.0", + "@docusaurus/mdx-loader": "2.2.0", + "@docusaurus/react-loadable": "5.5.2", + "@docusaurus/utils": "2.2.0", + "@docusaurus/utils-common": "2.2.0", + "@docusaurus/utils-validation": "2.2.0", + "@slorber/static-site-generator-webpack-plugin": "^4.0.7", + "@svgr/webpack": "^6.2.1", + "autoprefixer": "^10.4.7", + "babel-loader": "^8.2.5", + "babel-plugin-dynamic-import-node": "^2.3.3", + "boxen": "^6.2.1", + "chalk": "^4.1.2", + "chokidar": "^3.5.3", + "clean-css": "^5.3.0", + "cli-table3": "^0.6.2", + "combine-promises": "^1.1.0", + "commander": "^5.1.0", + "copy-webpack-plugin": "^11.0.0", + "core-js": "^3.23.3", + "css-loader": "^6.7.1", + "css-minimizer-webpack-plugin": "^4.0.0", + "cssnano": "^5.1.12", + "del": "^6.1.1", + "detect-port": "^1.3.0", + "escape-html": "^1.0.3", + "eta": "^1.12.3", + "file-loader": "^6.2.0", + "fs-extra": "^10.1.0", + "html-minifier-terser": "^6.1.0", + "html-tags": "^3.2.0", + "html-webpack-plugin": "^5.5.0", + "import-fresh": "^3.3.0", + "leven": "^3.1.0", + "lodash": "^4.17.21", + "mini-css-extract-plugin": "^2.6.1", + "postcss": "^8.4.14", + "postcss-loader": "^7.0.0", + "prompts": "^2.4.2", + "react-dev-utils": "^12.0.1", + "react-helmet-async": "^1.3.0", + "react-loadable": "npm:@docusaurus/react-loadable@5.5.2", + "react-loadable-ssr-addon-v5-slorber": "^1.0.1", + "react-router": "^5.3.3", + "react-router-config": "^5.1.1", + "react-router-dom": "^5.3.3", + "rtl-detect": "^1.0.4", + "semver": "^7.3.7", + "serve-handler": "^6.1.3", + "shelljs": "^0.8.5", + "terser-webpack-plugin": "^5.3.3", + "tslib": "^2.4.0", + "update-notifier": "^5.1.0", + "url-loader": "^4.1.1", + "wait-on": "^6.0.1", + "webpack": "^5.73.0", + "webpack-bundle-analyzer": "^4.5.0", + "webpack-dev-server": "^4.9.3", + "webpack-merge": "^5.8.0", + "webpackbar": "^5.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" + }, + "boxen": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-6.2.1.tgz", + "integrity": "sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==", + "requires": { + "ansi-align": "^3.0.1", + "camelcase": "^6.2.0", + "chalk": "^4.1.2", + "cli-boxes": "^3.0.0", + "string-width": "^5.0.1", + "type-fest": "^2.5.0", + "widest-line": "^4.0.1", + "wrap-ansi": "^8.0.1" + } + }, + "cli-boxes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==" + }, + "react-loadable": { + "version": "npm:@docusaurus/react-loadable@5.5.2", + "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", + "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", + "requires": { + "@types/react": "*", + "prop-types": "^15.6.2" + } + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==" + }, + "widest-line": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", + "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", + "requires": { + "string-width": "^5.0.1" + } + }, + "wrap-ansi": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.0.1.tgz", + "integrity": "sha512-QFF+ufAqhoYHvoHdajT/Po7KoXVBPXS2bgjIam5isfWJPfIOnQZ50JtUiVvCv/sjgacf3yRrt2ZKUZ/V4itN4g==", + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + } + } + } + }, + "@docusaurus/cssnano-preset": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.2.0.tgz", + "integrity": "sha512-mAAwCo4n66TMWBH1kXnHVZsakW9VAXJzTO4yZukuL3ro4F+JtkMwKfh42EG75K/J/YIFQG5I/Bzy0UH/hFxaTg==", + "requires": { + "cssnano-preset-advanced": "^5.3.8", + "postcss": "^8.4.14", + "postcss-sort-media-queries": "^4.2.1", + "tslib": "^2.4.0" + } + }, + "@docusaurus/logger": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-2.2.0.tgz", + "integrity": "sha512-DF3j1cA5y2nNsu/vk8AG7xwpZu6f5MKkPPMaaIbgXLnWGfm6+wkOeW7kNrxnM95YOhKUkJUophX69nGUnLsm0A==", + "requires": { + "chalk": "^4.1.2", + "tslib": "^2.4.0" + } + }, + "@docusaurus/mdx-loader": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.2.0.tgz", + "integrity": "sha512-X2bzo3T0jW0VhUU+XdQofcEeozXOTmKQMvc8tUnWRdTnCvj4XEcBVdC3g+/jftceluiwSTNRAX4VBOJdNt18jA==", + "requires": { + "@babel/parser": "^7.18.8", + "@babel/traverse": "^7.18.8", + "@docusaurus/logger": "2.2.0", + "@docusaurus/utils": "2.2.0", + "@mdx-js/mdx": "^1.6.22", + "escape-html": "^1.0.3", + "file-loader": "^6.2.0", + "fs-extra": "^10.1.0", + "image-size": "^1.0.1", + "mdast-util-to-string": "^2.0.0", + "remark-emoji": "^2.2.0", + "stringify-object": "^3.3.0", + "tslib": "^2.4.0", + "unified": "^9.2.2", + "unist-util-visit": "^2.0.3", + "url-loader": "^4.1.1", + "webpack": "^5.73.0" + }, + "dependencies": { + "unified": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", + "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", + "requires": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + } + } + } + }, + "@docusaurus/module-type-aliases": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-2.2.0.tgz", + "integrity": "sha512-wDGW4IHKoOr9YuJgy7uYuKWrDrSpsUSDHLZnWQYM9fN7D5EpSmYHjFruUpKWVyxLpD/Wh0rW8hYZwdjJIQUQCQ==", + "requires": { + "@docusaurus/react-loadable": "5.5.2", + "@docusaurus/types": "2.2.0", + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router-config": "*", + "@types/react-router-dom": "*", + "react-helmet-async": "*", + "react-loadable": "npm:@docusaurus/react-loadable@5.5.2" + }, + "dependencies": { + "@docusaurus/types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.2.0.tgz", + "integrity": "sha512-b6xxyoexfbRNRI8gjblzVOnLr4peCJhGbYGPpJ3LFqpi5nsFfoK4mmDLvWdeah0B7gmJeXabN7nQkFoqeSdmOw==", + "requires": { + "@types/history": "^4.7.11", + "@types/react": "*", + "commander": "^5.1.0", + "joi": "^17.6.0", + "react-helmet-async": "^1.3.0", + "utility-types": "^3.10.0", + "webpack": "^5.73.0", + "webpack-merge": "^5.8.0" + } + }, + "react-loadable": { + "version": "npm:@docusaurus/react-loadable@5.5.2", + "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", + "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", + "requires": { + "@types/react": "*", + "prop-types": "^15.6.2" + } + } + } + }, + "@docusaurus/plugin-content-blog": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.2.0.tgz", + "integrity": "sha512-0mWBinEh0a5J2+8ZJXJXbrCk1tSTNf7Nm4tYAl5h2/xx+PvH/Bnu0V+7mMljYm/1QlDYALNIIaT/JcoZQFUN3w==", + "requires": { + "@docusaurus/core": "2.2.0", + "@docusaurus/logger": "2.2.0", + "@docusaurus/mdx-loader": "2.2.0", + "@docusaurus/types": "2.2.0", + "@docusaurus/utils": "2.2.0", + "@docusaurus/utils-common": "2.2.0", + "@docusaurus/utils-validation": "2.2.0", + "cheerio": "^1.0.0-rc.12", + "feed": "^4.2.2", + "fs-extra": "^10.1.0", + "lodash": "^4.17.21", + "reading-time": "^1.5.0", + "tslib": "^2.4.0", + "unist-util-visit": "^2.0.3", + "utility-types": "^3.10.0", + "webpack": "^5.73.0" + }, + "dependencies": { + "@docusaurus/types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.2.0.tgz", + "integrity": "sha512-b6xxyoexfbRNRI8gjblzVOnLr4peCJhGbYGPpJ3LFqpi5nsFfoK4mmDLvWdeah0B7gmJeXabN7nQkFoqeSdmOw==", + "requires": { + "@types/history": "^4.7.11", + "@types/react": "*", + "commander": "^5.1.0", + "joi": "^17.6.0", + "react-helmet-async": "^1.3.0", + "utility-types": "^3.10.0", + "webpack": "^5.73.0", + "webpack-merge": "^5.8.0" + } + } + } + }, + "@docusaurus/plugin-content-docs": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.2.0.tgz", + "integrity": "sha512-BOazBR0XjzsHE+2K1wpNxz5QZmrJgmm3+0Re0EVPYFGW8qndCWGNtXW/0lGKhecVPML8yyFeAmnUCIs7xM2wPw==", + "requires": { + "@docusaurus/core": "2.2.0", + "@docusaurus/logger": "2.2.0", + "@docusaurus/mdx-loader": "2.2.0", + "@docusaurus/module-type-aliases": "2.2.0", + "@docusaurus/types": "2.2.0", + "@docusaurus/utils": "2.2.0", + "@docusaurus/utils-validation": "2.2.0", + "@types/react-router-config": "^5.0.6", + "combine-promises": "^1.1.0", + "fs-extra": "^10.1.0", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "lodash": "^4.17.21", + "tslib": "^2.4.0", + "utility-types": "^3.10.0", + "webpack": "^5.73.0" + }, + "dependencies": { + "@docusaurus/types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.2.0.tgz", + "integrity": "sha512-b6xxyoexfbRNRI8gjblzVOnLr4peCJhGbYGPpJ3LFqpi5nsFfoK4mmDLvWdeah0B7gmJeXabN7nQkFoqeSdmOw==", + "requires": { + "@types/history": "^4.7.11", + "@types/react": "*", + "commander": "^5.1.0", + "joi": "^17.6.0", + "react-helmet-async": "^1.3.0", + "utility-types": "^3.10.0", + "webpack": "^5.73.0", + "webpack-merge": "^5.8.0" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "requires": { + "argparse": "^2.0.1" + } + } + } + }, + "@docusaurus/plugin-content-pages": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.2.0.tgz", + "integrity": "sha512-+OTK3FQHk5WMvdelz8v19PbEbx+CNT6VSpx7nVOvMNs5yJCKvmqBJBQ2ZSxROxhVDYn+CZOlmyrC56NSXzHf6g==", + "requires": { + "@docusaurus/core": "2.2.0", + "@docusaurus/mdx-loader": "2.2.0", + "@docusaurus/types": "2.2.0", + "@docusaurus/utils": "2.2.0", + "@docusaurus/utils-validation": "2.2.0", + "fs-extra": "^10.1.0", + "tslib": "^2.4.0", + "webpack": "^5.73.0" + }, + "dependencies": { + "@docusaurus/types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.2.0.tgz", + "integrity": "sha512-b6xxyoexfbRNRI8gjblzVOnLr4peCJhGbYGPpJ3LFqpi5nsFfoK4mmDLvWdeah0B7gmJeXabN7nQkFoqeSdmOw==", + "requires": { + "@types/history": "^4.7.11", + "@types/react": "*", + "commander": "^5.1.0", + "joi": "^17.6.0", + "react-helmet-async": "^1.3.0", + "utility-types": "^3.10.0", + "webpack": "^5.73.0", + "webpack-merge": "^5.8.0" + } + } + } + }, + "@docusaurus/plugin-debug": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.2.0.tgz", + "integrity": "sha512-p9vOep8+7OVl6r/NREEYxf4HMAjV8JMYJ7Bos5fCFO0Wyi9AZEo0sCTliRd7R8+dlJXZEgcngSdxAUo/Q+CJow==", + "requires": { + "@docusaurus/core": "2.2.0", + "@docusaurus/types": "2.2.0", + "@docusaurus/utils": "2.2.0", + "fs-extra": "^10.1.0", + "react-json-view": "^1.21.3", + "tslib": "^2.4.0" + }, + "dependencies": { + "@docusaurus/types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.2.0.tgz", + "integrity": "sha512-b6xxyoexfbRNRI8gjblzVOnLr4peCJhGbYGPpJ3LFqpi5nsFfoK4mmDLvWdeah0B7gmJeXabN7nQkFoqeSdmOw==", + "requires": { + "@types/history": "^4.7.11", + "@types/react": "*", + "commander": "^5.1.0", + "joi": "^17.6.0", + "react-helmet-async": "^1.3.0", + "utility-types": "^3.10.0", + "webpack": "^5.73.0", + "webpack-merge": "^5.8.0" + } + } + } + }, + "@docusaurus/plugin-google-analytics": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.2.0.tgz", + "integrity": "sha512-+eZVVxVeEnV5nVQJdey9ZsfyEVMls6VyWTIj8SmX0k5EbqGvnIfET+J2pYEuKQnDIHxy+syRMoRM6AHXdHYGIg==", + "requires": { + "@docusaurus/core": "2.2.0", + "@docusaurus/types": "2.2.0", + "@docusaurus/utils-validation": "2.2.0", + "tslib": "^2.4.0" + }, + "dependencies": { + "@docusaurus/types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.2.0.tgz", + "integrity": "sha512-b6xxyoexfbRNRI8gjblzVOnLr4peCJhGbYGPpJ3LFqpi5nsFfoK4mmDLvWdeah0B7gmJeXabN7nQkFoqeSdmOw==", + "requires": { + "@types/history": "^4.7.11", + "@types/react": "*", + "commander": "^5.1.0", + "joi": "^17.6.0", + "react-helmet-async": "^1.3.0", + "utility-types": "^3.10.0", + "webpack": "^5.73.0", + "webpack-merge": "^5.8.0" + } + } + } + }, + "@docusaurus/plugin-google-gtag": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.2.0.tgz", + "integrity": "sha512-6SOgczP/dYdkqUMGTRqgxAS1eTp6MnJDAQMy8VCF1QKbWZmlkx4agHDexihqmYyCujTYHqDAhm1hV26EET54NQ==", + "requires": { + "@docusaurus/core": "2.2.0", + "@docusaurus/types": "2.2.0", + "@docusaurus/utils-validation": "2.2.0", + "tslib": "^2.4.0" + }, + "dependencies": { + "@docusaurus/types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.2.0.tgz", + "integrity": "sha512-b6xxyoexfbRNRI8gjblzVOnLr4peCJhGbYGPpJ3LFqpi5nsFfoK4mmDLvWdeah0B7gmJeXabN7nQkFoqeSdmOw==", + "requires": { + "@types/history": "^4.7.11", + "@types/react": "*", + "commander": "^5.1.0", + "joi": "^17.6.0", + "react-helmet-async": "^1.3.0", + "utility-types": "^3.10.0", + "webpack": "^5.73.0", + "webpack-merge": "^5.8.0" + } + } + } + }, + "@docusaurus/plugin-sitemap": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.2.0.tgz", + "integrity": "sha512-0jAmyRDN/aI265CbWZNZuQpFqiZuo+5otk2MylU9iVrz/4J7gSc+ZJ9cy4EHrEsW7PV8s1w18hIEsmcA1YgkKg==", + "requires": { + "@docusaurus/core": "2.2.0", + "@docusaurus/logger": "2.2.0", + "@docusaurus/types": "2.2.0", + "@docusaurus/utils": "2.2.0", + "@docusaurus/utils-common": "2.2.0", + "@docusaurus/utils-validation": "2.2.0", + "fs-extra": "^10.1.0", + "sitemap": "^7.1.1", + "tslib": "^2.4.0" + }, + "dependencies": { + "@docusaurus/types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.2.0.tgz", + "integrity": "sha512-b6xxyoexfbRNRI8gjblzVOnLr4peCJhGbYGPpJ3LFqpi5nsFfoK4mmDLvWdeah0B7gmJeXabN7nQkFoqeSdmOw==", + "requires": { + "@types/history": "^4.7.11", + "@types/react": "*", + "commander": "^5.1.0", + "joi": "^17.6.0", + "react-helmet-async": "^1.3.0", + "utility-types": "^3.10.0", + "webpack": "^5.73.0", + "webpack-merge": "^5.8.0" + } + } + } + }, + "@docusaurus/preset-classic": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.2.0.tgz", + "integrity": "sha512-yKIWPGNx7BT8v2wjFIWvYrS+nvN04W+UameSFf8lEiJk6pss0kL6SG2MRvyULiI3BDxH+tj6qe02ncpSPGwumg==", + "requires": { + "@docusaurus/core": "2.2.0", + "@docusaurus/plugin-content-blog": "2.2.0", + "@docusaurus/plugin-content-docs": "2.2.0", + "@docusaurus/plugin-content-pages": "2.2.0", + "@docusaurus/plugin-debug": "2.2.0", + "@docusaurus/plugin-google-analytics": "2.2.0", + "@docusaurus/plugin-google-gtag": "2.2.0", + "@docusaurus/plugin-sitemap": "2.2.0", + "@docusaurus/theme-classic": "2.2.0", + "@docusaurus/theme-common": "2.2.0", + "@docusaurus/theme-search-algolia": "2.2.0", + "@docusaurus/types": "2.2.0" + }, + "dependencies": { + "@docusaurus/types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.2.0.tgz", + "integrity": "sha512-b6xxyoexfbRNRI8gjblzVOnLr4peCJhGbYGPpJ3LFqpi5nsFfoK4mmDLvWdeah0B7gmJeXabN7nQkFoqeSdmOw==", + "requires": { + "@types/history": "^4.7.11", + "@types/react": "*", + "commander": "^5.1.0", + "joi": "^17.6.0", + "react-helmet-async": "^1.3.0", + "utility-types": "^3.10.0", + "webpack": "^5.73.0", + "webpack-merge": "^5.8.0" + } + } + } + }, + "@docusaurus/react-loadable": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", + "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", + "requires": { + "@types/react": "*", + "prop-types": "^15.6.2" + } + }, + "@docusaurus/theme-classic": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.2.0.tgz", + "integrity": "sha512-kjbg/qJPwZ6H1CU/i9d4l/LcFgnuzeiGgMQlt6yPqKo0SOJIBMPuz7Rnu3r/WWbZFPi//o8acclacOzmXdUUEg==", + "requires": { + "@docusaurus/core": "2.2.0", + "@docusaurus/mdx-loader": "2.2.0", + "@docusaurus/module-type-aliases": "2.2.0", + "@docusaurus/plugin-content-blog": "2.2.0", + "@docusaurus/plugin-content-docs": "2.2.0", + "@docusaurus/plugin-content-pages": "2.2.0", + "@docusaurus/theme-common": "2.2.0", + "@docusaurus/theme-translations": "2.2.0", + "@docusaurus/types": "2.2.0", + "@docusaurus/utils": "2.2.0", + "@docusaurus/utils-common": "2.2.0", + "@docusaurus/utils-validation": "2.2.0", + "@mdx-js/react": "^1.6.22", + "clsx": "^1.2.1", + "copy-text-to-clipboard": "^3.0.1", + "infima": "0.2.0-alpha.42", + "lodash": "^4.17.21", + "nprogress": "^0.2.0", + "postcss": "^8.4.14", + "prism-react-renderer": "^1.3.5", + "prismjs": "^1.28.0", + "react-router-dom": "^5.3.3", + "rtlcss": "^3.5.0", + "tslib": "^2.4.0", + "utility-types": "^3.10.0" + }, + "dependencies": { + "@docusaurus/types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.2.0.tgz", + "integrity": "sha512-b6xxyoexfbRNRI8gjblzVOnLr4peCJhGbYGPpJ3LFqpi5nsFfoK4mmDLvWdeah0B7gmJeXabN7nQkFoqeSdmOw==", + "requires": { + "@types/history": "^4.7.11", + "@types/react": "*", + "commander": "^5.1.0", + "joi": "^17.6.0", + "react-helmet-async": "^1.3.0", + "utility-types": "^3.10.0", + "webpack": "^5.73.0", + "webpack-merge": "^5.8.0" + } + } + } + }, + "@docusaurus/theme-common": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.2.0.tgz", + "integrity": "sha512-R8BnDjYoN90DCL75gP7qYQfSjyitXuP9TdzgsKDmSFPNyrdE3twtPNa2dIN+h+p/pr+PagfxwWbd6dn722A1Dw==", + "requires": { + "@docusaurus/mdx-loader": "2.2.0", + "@docusaurus/module-type-aliases": "2.2.0", + "@docusaurus/plugin-content-blog": "2.2.0", + "@docusaurus/plugin-content-docs": "2.2.0", + "@docusaurus/plugin-content-pages": "2.2.0", + "@docusaurus/utils": "2.2.0", + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router-config": "*", + "clsx": "^1.2.1", + "parse-numeric-range": "^1.3.0", + "prism-react-renderer": "^1.3.5", + "tslib": "^2.4.0", + "utility-types": "^3.10.0" + } + }, + "@docusaurus/theme-search-algolia": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.2.0.tgz", + "integrity": "sha512-2h38B0tqlxgR2FZ9LpAkGrpDWVdXZ7vltfmTdX+4RsDs3A7khiNsmZB+x/x6sA4+G2V2CvrsPMlsYBy5X+cY1w==", + "requires": { + "@docsearch/react": "^3.1.1", + "@docusaurus/core": "2.2.0", + "@docusaurus/logger": "2.2.0", + "@docusaurus/plugin-content-docs": "2.2.0", + "@docusaurus/theme-common": "2.2.0", + "@docusaurus/theme-translations": "2.2.0", + "@docusaurus/utils": "2.2.0", + "@docusaurus/utils-validation": "2.2.0", + "algoliasearch": "^4.13.1", + "algoliasearch-helper": "^3.10.0", + "clsx": "^1.2.1", + "eta": "^1.12.3", + "fs-extra": "^10.1.0", + "lodash": "^4.17.21", + "tslib": "^2.4.0", + "utility-types": "^3.10.0" + } + }, + "@docusaurus/theme-translations": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-2.2.0.tgz", + "integrity": "sha512-3T140AG11OjJrtKlY4pMZ5BzbGRDjNs2co5hJ6uYJG1bVWlhcaFGqkaZ5lCgKflaNHD7UHBHU9Ec5f69jTdd6w==", + "requires": { + "fs-extra": "^10.1.0", + "tslib": "^2.4.0" + } + }, + "@docusaurus/types": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.3.1.tgz", + "integrity": "sha512-PREbIRhTaNNY042qmfSE372Jb7djZt+oVTZkoqHJ8eff8vOIc2zqqDqBVc5BhOfpZGPTrE078yy/torUEZy08A==", + "optional": true, + "peer": true, + "requires": { + "@types/history": "^4.7.11", + "@types/react": "*", + "commander": "^5.1.0", + "joi": "^17.6.0", + "react-helmet-async": "^1.3.0", + "utility-types": "^3.10.0", + "webpack": "^5.73.0", + "webpack-merge": "^5.8.0" + } + }, + "@docusaurus/utils": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.2.0.tgz", + "integrity": "sha512-oNk3cjvx7Tt1Lgh/aeZAmFpGV2pDr5nHKrBVx6hTkzGhrnMuQqLt6UPlQjdYQ3QHXwyF/ZtZMO1D5Pfi0lu7SA==", + "requires": { + "@docusaurus/logger": "2.2.0", + "@svgr/webpack": "^6.2.1", + "file-loader": "^6.2.0", + "fs-extra": "^10.1.0", + "github-slugger": "^1.4.0", + "globby": "^11.1.0", + "gray-matter": "^4.0.3", + "js-yaml": "^4.1.0", + "lodash": "^4.17.21", + "micromatch": "^4.0.5", + "resolve-pathname": "^3.0.0", + "shelljs": "^0.8.5", + "tslib": "^2.4.0", + "url-loader": "^4.1.1", + "webpack": "^5.73.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==" + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "requires": { + "argparse": "^2.0.1" + } + } + } + }, + "@docusaurus/utils-common": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-2.2.0.tgz", + "integrity": "sha512-qebnerHp+cyovdUseDQyYFvMW1n1nv61zGe5JJfoNQUnjKuApch3IVsz+/lZ9a38pId8kqehC1Ao2bW/s0ntDA==", + "requires": { + "tslib": "^2.4.0" + } + }, + "@docusaurus/utils-validation": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.2.0.tgz", + "integrity": "sha512-I1hcsG3yoCkasOL5qQAYAfnmVoLei7apugT6m4crQjmDGxq+UkiRrq55UqmDDyZlac/6ax/JC0p+usZ6W4nVyg==", + "requires": { + "@docusaurus/logger": "2.2.0", + "@docusaurus/utils": "2.2.0", + "joi": "^17.6.0", + "js-yaml": "^4.1.0", + "tslib": "^2.4.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==" + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "requires": { + "argparse": "^2.0.1" + } + } + } + }, + "@hapi/hoek": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.0.tgz", + "integrity": "sha512-sqKVVVOe5ivCaXDWivIJYVSaEgdQK9ul7a4Kity5Iw7u9+wBAPbX1RMSnLLmp7O4Vzj0WOWwMAJsTL00xwaNug==" + }, + "@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "requires": { + "@hapi/hoek": "^9.0.0" + } + }, + "@jest/schemas": { + "version": "29.0.0", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.0.0.tgz", + "integrity": "sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA==", + "requires": { + "@sinclair/typebox": "^0.24.1" + } + }, + "@jest/types": { + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.3.1.tgz", + "integrity": "sha512-d0S0jmmTpjnhCmNpApgX3jrUZgZ22ivKJRvL2lli5hpCRoNnp1f85r2/wpKfXuYu8E7Jjh1hGfhPyup1NM5AmA==", + "requires": { + "@jest/schemas": "^29.0.0", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" + }, + "@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + }, + "@jridgewell/trace-mapping": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "@leichtgewicht/ip-codec": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" + }, + "@mdx-js/mdx": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz", + "integrity": "sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==", + "requires": { + "@babel/core": "7.12.9", + "@babel/plugin-syntax-jsx": "7.12.1", + "@babel/plugin-syntax-object-rest-spread": "7.8.3", + "@mdx-js/util": "1.6.22", + "babel-plugin-apply-mdx-type-prop": "1.6.22", + "babel-plugin-extract-import-names": "1.6.22", + "camelcase-css": "2.0.1", + "detab": "2.0.4", + "hast-util-raw": "6.0.1", + "lodash.uniq": "4.5.0", + "mdast-util-to-hast": "10.0.1", + "remark-footnotes": "2.0.0", + "remark-mdx": "1.6.22", + "remark-parse": "8.0.3", + "remark-squeeze-paragraphs": "4.0.0", + "style-to-object": "0.3.0", + "unified": "9.2.0", + "unist-builder": "2.0.3", + "unist-util-visit": "2.0.3" + }, + "dependencies": { + "@babel/core": { + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", + "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", + "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" + } + } + }, + "@mdx-js/react": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", + "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==", + "requires": {} + }, + "@mdx-js/util": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", + "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==" + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@polka/url": { + "version": "1.0.0-next.21", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", + "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==" + }, + "@sideway/address": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", + "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", + "requires": { + "@hapi/hoek": "^9.0.0" + } + }, + "@sideway/formula": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==" + }, + "@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" + }, + "@sinclair/typebox": { + "version": "0.24.51", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", + "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" + }, + "@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" + }, + "@slorber/static-site-generator-webpack-plugin": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@slorber/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.7.tgz", + "integrity": "sha512-Ug7x6z5lwrz0WqdnNFOMYrDQNTPAprvHLSh6+/fmml3qUiz6l5eq+2MzLKWtn/q5K5NpSiFsZTP/fck/3vjSxA==", + "requires": { + "eval": "^0.1.8", + "p-map": "^4.0.0", + "webpack-sources": "^3.2.2" + } + }, + "@svgr/babel-plugin-add-jsx-attribute": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.1.tgz", + "integrity": "sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ==", + "requires": {} + }, + "@svgr/babel-plugin-remove-jsx-attribute": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-6.5.0.tgz", + "integrity": "sha512-8zYdkym7qNyfXpWvu4yq46k41pyNM9SOstoWhKlm+IfdCE1DdnRKeMUPsWIEO/DEkaWxJ8T9esNdG3QwQ93jBA==", + "requires": {} + }, + "@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-6.5.0.tgz", + "integrity": "sha512-NFdxMq3xA42Kb1UbzCVxplUc0iqSyM9X8kopImvFnB+uSDdzIHOdbs1op8ofAvVRtbg4oZiyRl3fTYeKcOe9Iw==", + "requires": {} + }, + "@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.1.tgz", + "integrity": "sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg==", + "requires": {} + }, + "@svgr/babel-plugin-svg-dynamic-title": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.1.tgz", + "integrity": "sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw==", + "requires": {} + }, + "@svgr/babel-plugin-svg-em-dimensions": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.1.tgz", + "integrity": "sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA==", + "requires": {} + }, + "@svgr/babel-plugin-transform-react-native-svg": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.1.tgz", + "integrity": "sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg==", + "requires": {} + }, + "@svgr/babel-plugin-transform-svg-component": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.1.tgz", + "integrity": "sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ==", + "requires": {} + }, + "@svgr/babel-preset": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.5.1.tgz", + "integrity": "sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw==", + "requires": { + "@svgr/babel-plugin-add-jsx-attribute": "^6.5.1", + "@svgr/babel-plugin-remove-jsx-attribute": "*", + "@svgr/babel-plugin-remove-jsx-empty-expression": "*", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.5.1", + "@svgr/babel-plugin-svg-dynamic-title": "^6.5.1", + "@svgr/babel-plugin-svg-em-dimensions": "^6.5.1", + "@svgr/babel-plugin-transform-react-native-svg": "^6.5.1", + "@svgr/babel-plugin-transform-svg-component": "^6.5.1" + } + }, + "@svgr/core": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.5.1.tgz", + "integrity": "sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw==", + "requires": { + "@babel/core": "^7.19.6", + "@svgr/babel-preset": "^6.5.1", + "@svgr/plugin-jsx": "^6.5.1", + "camelcase": "^6.2.0", + "cosmiconfig": "^7.0.1" + } + }, + "@svgr/hast-util-to-babel-ast": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.1.tgz", + "integrity": "sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==", + "requires": { + "@babel/types": "^7.20.0", + "entities": "^4.4.0" + }, + "dependencies": { + "entities": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", + "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==" + } + } + }, + "@svgr/plugin-jsx": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.5.1.tgz", + "integrity": "sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw==", + "requires": { + "@babel/core": "^7.19.6", + "@svgr/babel-preset": "^6.5.1", + "@svgr/hast-util-to-babel-ast": "^6.5.1", + "svg-parser": "^2.0.4" + } + }, + "@svgr/plugin-svgo": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.5.1.tgz", + "integrity": "sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ==", + "requires": { + "cosmiconfig": "^7.0.1", + "deepmerge": "^4.2.2", + "svgo": "^2.8.0" + } + }, + "@svgr/webpack": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-6.5.1.tgz", + "integrity": "sha512-cQ/AsnBkXPkEK8cLbv4Dm7JGXq2XrumKnL1dRpJD9rIO2fTIlJI9a1uCciYG1F2aUsox/hJQyNGbt3soDxSRkA==", + "requires": { + "@babel/core": "^7.19.6", + "@babel/plugin-transform-react-constant-elements": "^7.18.12", + "@babel/preset-env": "^7.19.4", + "@babel/preset-react": "^7.18.6", + "@babel/preset-typescript": "^7.18.6", + "@svgr/core": "^6.5.1", + "@svgr/plugin-jsx": "^6.5.1", + "@svgr/plugin-svgo": "^6.5.1" + } + }, + "@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "requires": { + "defer-to-connect": "^1.0.1" + } + }, + "@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==" + }, + "@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/bonjour": { + "version": "3.5.10", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", + "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "requires": { + "@types/node": "*" + } + }, + "@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "requires": { + "@types/node": "*" + } + }, + "@types/connect-history-api-fallback": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", + "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", + "requires": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "@types/eslint": { + "version": "8.4.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz", + "integrity": "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==", + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" + }, + "@types/express": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.15.tgz", + "integrity": "sha512-Yv0k4bXGOH+8a+7bELd2PqHQsuiANB+A8a4gnQrkRWzrkKlb6KHaVvyXhqs04sVW/OWlbPyYxRgYlIXLfrufMQ==", + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.31", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.17.32", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.32.tgz", + "integrity": "sha512-aI5h/VOkxOF2Z1saPy0Zsxs5avets/iaiAJYznQFm5By/pamU31xWKL//epiF4OfUA2qTOc9PV6tCUjhO8wlZA==", + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "@types/hast": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.3.tgz", + "integrity": "sha512-QmFclP7FX/XZ7k81+fS6K5pQ3qxRu9bVqEoUeJrPtcmX9st3pyeluIWy6olFCr2/kUqnb4LwxtMCxZsXWkObbA==", + "requires": { + "@types/unist": "*" + } + }, + "@types/history": { + "version": "4.7.11", + "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", + "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==" + }, + "@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==" + }, + "@types/http-proxy": { + "version": "1.17.9", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz", + "integrity": "sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==", + "requires": { + "@types/node": "*" + } + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" + }, + "@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", + "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/json-schema": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==" + }, + "@types/mdast": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.9.tgz", + "integrity": "sha512-IUlIhG2KNPjOEuXIblTjovD1XW8HPGeulA12nEyc6xhO4Yrrcs+xczAl4ucR3cpwVlE+vb2x9Z7pRmVP4bUHng==", + "requires": { + "@types/unist": "*" + } + }, + "@types/mime": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", + "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==" + }, + "@types/node": { + "version": "17.0.45", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" + }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" + }, + "@types/parse5": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz", + "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==" + }, + "@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" + }, + "@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" + }, + "@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" + }, + "@types/react": { + "version": "17.0.52", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.52.tgz", + "integrity": "sha512-vwk8QqVODi0VaZZpDXQCmEmiOuyjEFPY7Ttaw5vjM112LOq37yz1CDJGrRJwA1fYEq4Iitd5rnjd1yWAc/bT+A==", + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "@types/react-router": { + "version": "5.1.20", + "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", + "integrity": "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==", + "requires": { + "@types/history": "^4.7.11", + "@types/react": "*" + } + }, + "@types/react-router-config": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/@types/react-router-config/-/react-router-config-5.0.7.tgz", + "integrity": "sha512-pFFVXUIydHlcJP6wJm7sDii5mD/bCmmAY0wQzq+M+uX7bqS95AQqHZWP1iNMKrWVQSuHIzj5qi9BvrtLX2/T4w==", + "requires": { + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router": "^5.1.0" + } + }, + "@types/react-router-dom": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", + "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", + "requires": { + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router": "*" + } + }, + "@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" + }, + "@types/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw==", + "requires": { + "@types/node": "*" + } + }, + "@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" + }, + "@types/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", + "requires": { + "@types/express": "*" + } + }, + "@types/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", + "requires": { + "@types/mime": "*", + "@types/node": "*" + } + }, + "@types/sockjs": { + "version": "0.3.33", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", + "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "requires": { + "@types/node": "*" + } + }, + "@types/unist": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", + "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==" + }, + "@types/ws": { + "version": "8.5.4", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.4.tgz", + "integrity": "sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==", + "requires": { + "@types/node": "*" + } + }, + "@types/yargs": { + "version": "17.0.18", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.18.tgz", + "integrity": "sha512-eIJR1UER6ur3EpKM3d+2Pgd+ET+k6Kn9B4ZItX0oPjjVI5PrfaRjKyLT5UYendDpLuoiJMNJvovLQbEXqhsPaw==", + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" + }, + "@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "requires": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" + }, + "accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "acorn": { + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==" + }, + "acorn-import-assertions": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.7.6.tgz", + "integrity": "sha512-FlVvVFA1TX6l3lp8VjDnYYq7R1nyW6x3svAt4nDgrWQ9SBaSh9CnbwgSUTasgfNfOG5HlM1ehugCvM+hjo56LA==", + "requires": {} + }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==" + }, + "address": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", + "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==" + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "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" + } + }, + "ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "requires": { + "ajv": "^8.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", + "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + } + } + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "requires": {} + }, + "algoliasearch": { + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.17.0.tgz", + "integrity": "sha512-JMRh2Mw6sEnVMiz6+APsi7lx9a2jiDFF+WUtANaUVCv6uSU9UOLdo5h9K3pdP6frRRybaM2fX8b1u0nqICS9aA==", + "requires": { + "@algolia/cache-browser-local-storage": "4.17.0", + "@algolia/cache-common": "4.17.0", + "@algolia/cache-in-memory": "4.17.0", + "@algolia/client-account": "4.17.0", + "@algolia/client-analytics": "4.17.0", + "@algolia/client-common": "4.17.0", + "@algolia/client-personalization": "4.17.0", + "@algolia/client-search": "4.17.0", + "@algolia/logger-common": "4.17.0", + "@algolia/logger-console": "4.17.0", + "@algolia/requester-browser-xhr": "4.17.0", + "@algolia/requester-common": "4.17.0", + "@algolia/requester-node-http": "4.17.0", + "@algolia/transporter": "4.17.0" + } + }, + "algoliasearch-helper": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.12.0.tgz", + "integrity": "sha512-/j1U3PEwdan0n6P/QqSnSpNSLC5+cEMvyljd5CnmNmUjDlGrys+vFEOwjVEnqELIiAGMHEA/Nl3CiKVFBUYqyQ==", + "requires": { + "@algolia/events": "^4.0.1" + } + }, + "ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "requires": { + "string-width": "^4.1.0" + } + }, + "ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==" + }, + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" + }, + "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==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" + }, + "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==" + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" + }, + "autoprefixer": { + "version": "10.4.13", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz", + "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==", + "requires": { + "browserslist": "^4.21.4", + "caniuse-lite": "^1.0.30001426", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + } + }, + "axios": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", + "integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==", + "requires": { + "follow-redirects": "^1.14.7" + } + }, + "babel-loader": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", + "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", + "requires": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "dependencies": { + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "babel-plugin-apply-mdx-type-prop": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz", + "integrity": "sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4", + "@mdx-js/util": "1.6.22" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + } + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "requires": { + "object.assign": "^4.1.0" + } + }, + "babel-plugin-extract-import-names": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz", + "integrity": "sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + } + } + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", + "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", + "requires": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.3.3", + "semver": "^6.1.1" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" + } + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", + "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.3", + "core-js-compat": "^3.25.1" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", + "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.3" + } + }, + "bail": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==" + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "base16": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz", + "integrity": "sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ==" + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + }, + "body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, + "bonjour-service": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.0.14.tgz", + "integrity": "sha512-HIMbgLnk1Vqvs6B4Wq5ep7mxvj9sGz5d1JJyDNSGNIdA/w2MCz6GTjWTdjqOJV1bEPj+6IkxDvWNFKEBxNt4kQ==", + "requires": { + "array-flatten": "^2.1.2", + "dns-equal": "^1.0.0", + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" + }, + "boxen": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.0.1.tgz", + "integrity": "sha512-49VBlw+PrWEF51aCmy7QIteYPIFZxSpvqBdP/2itCPPlJ49kj9zg/XPRFrdkne2W+CfwXUls8exMvu1RysZpKA==", + "requires": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.0", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "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==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "browserslist": { + "version": "4.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "requires": { + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.9" + } + }, + "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==" + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==" + }, + "cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "requires": { + "pump": "^3.0.0" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" + }, + "normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==" + } + } + }, + "call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "requires": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + }, + "camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "requires": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==" + }, + "camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==" + }, + "caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "requires": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "caniuse-lite": { + "version": "1.0.30001441", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001441.tgz", + "integrity": "sha512-OyxRR4Vof59I3yGWXws6i908EtGbMzVUi3ganaZQHmydk1iwDhRnvaPG2WaR0KcqrDFKrxVZHULT396LEPhXfg==" + }, + "ccount": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", + "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==" + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "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==", + "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==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "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==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==" + }, + "character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==" + }, + "character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==" + }, + "cheerio": { + "version": "1.0.0-rc.12", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", + "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", + "requires": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "htmlparser2": "^8.0.1", + "parse5": "^7.0.0", + "parse5-htmlparser2-tree-adapter": "^7.0.0" + }, + "dependencies": { + "dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + } + }, + "domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "requires": { + "domelementtype": "^2.3.0" + } + }, + "domutils": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", + "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", + "requires": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.1" + } + }, + "entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==" + }, + "htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "requires": { + "entities": "^4.4.0" + } + } + } + }, + "cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "requires": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + }, + "dependencies": { + "css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + } + }, + "dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + } + }, + "domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "requires": { + "domelementtype": "^2.3.0" + } + }, + "domutils": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", + "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", + "requires": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.1" + } + }, + "entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==" + } + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "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" + } + }, + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==" + }, + "ci-info": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.0.tgz", + "integrity": "sha512-2CpRNYmImPx+RXKLq6jko/L07phmS9I02TyqkcNU20GCF/GgaWvc58hPtjxDX8lPpkdwc9sNh72V9k00S7ezog==" + }, + "clean-css": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.1.tgz", + "integrity": "sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg==", + "requires": { + "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==" + } + } + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" + }, + "cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==" + }, + "cli-table3": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", + "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", + "requires": { + "@colors/colors": "1.5.0", + "string-width": "^4.2.0" + } + }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "requires": { + "mimic-response": "^1.0.0" + } + }, + "clsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", + "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==" + }, + "collapse-white-space": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", + "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==" + }, + "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==", + "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": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==" + }, + "colorette": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==" + }, + "combine-promises": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/combine-promises/-/combine-promises-1.1.0.tgz", + "integrity": "sha512-ZI9jvcLDxqwaXEixOhArm3r7ReIivsXkpbyEWyeOhzz1QS0iSgBPnWvEqvIQtYyamGCYA88gFhmUrs9hrrQ0pg==" + }, + "comma-separated-tokens": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", + "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==" + }, + "commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==" + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "requires": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + } + }, + "connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==" + }, + "consola": { + "version": "2.15.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" + }, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "requires": { + "safe-buffer": "5.2.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } + } + }, + "content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==" + }, + "convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "copy-text-to-clipboard": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.1.0.tgz", + "integrity": "sha512-PFM6BnjLnOON/lB3ta/Jg7Ywsv+l9kQGD4TWDCSlRBGmqnnTM5MrDkhAFgw+8HZt0wW6Q2BBE4cmy9sq+s9Qng==" + }, + "copy-webpack-plugin": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", + "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", + "requires": { + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.1", + "globby": "^13.1.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", + "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "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==", + "requires": { + "is-glob": "^4.0.3" + } + }, + "globby": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.3.tgz", + "integrity": "sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==", + "requires": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^4.0.0" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } + }, + "slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==" + } + } + }, + "core-js": { + "version": "3.27.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.27.1.tgz", + "integrity": "sha512-GutwJLBChfGCpwwhbYoqfv03LAfmiz7e7D/BNxzeMxwQf10GRSzqiOjx7AmtEk+heiD/JWmBuyBPgFtx0Sg1ww==" + }, + "core-js-compat": { + "version": "3.27.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.27.1.tgz", + "integrity": "sha512-Dg91JFeCDA17FKnneN7oCMz4BkQ4TcffkgHP4OWwp9yx3pi7ubqMDXXSacfNak1PQqjc95skyt+YBLHQJnkJwA==", + "requires": { + "browserslist": "^4.21.4" + } + }, + "core-js-pure": { + "version": "3.27.1", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.27.1.tgz", + "integrity": "sha512-BS2NHgwwUppfeoqOXqi08mUqS5FiZpuRuJJpKsaME7kJz0xxuk0xkhDdfMIlP/zLa80krBqss1LtD7f889heAw==" + }, + "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==" + }, + "cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "cross-fetch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", + "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "requires": { + "node-fetch": "2.6.7" + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" + }, + "css-declaration-sorter": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz", + "integrity": "sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==", + "requires": {} + }, + "css-loader": { + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.3.tgz", + "integrity": "sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ==", + "requires": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.19", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.3.8" + } + }, + "css-minimizer-webpack-plugin": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-4.2.2.tgz", + "integrity": "sha512-s3Of/4jKfw1Hj9CxEO1E5oXhQAxlayuHO2y/ML+C6I9sQ7FdzfEV6QgMLN3vI+qFsjJGIAFLKtQK7t8BOXAIyA==", + "requires": { + "cssnano": "^5.1.8", + "jest-worker": "^29.1.2", + "postcss": "^8.4.17", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1" + }, + "dependencies": { + "ajv": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", + "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + } + }, + "css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "requires": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==" + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" + }, + "cssnano": { + "version": "5.1.14", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.14.tgz", + "integrity": "sha512-Oou7ihiTocbKqi0J1bB+TRJIQX5RMR3JghA8hcWSw9mjBLQ5Y3RWqEDoYG3sRNlAbCIXpqMoZGbq5KDR3vdzgw==", + "requires": { + "cssnano-preset-default": "^5.2.13", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + } + }, + "cssnano-preset-advanced": { + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.9.tgz", + "integrity": "sha512-njnh4pp1xCsibJcEHnWZb4EEzni0ePMqPuPNyuWT4Z+YeXmsgqNuTPIljXFEXhxGsWs9183JkXgHxc1TcsahIg==", + "requires": { + "autoprefixer": "^10.4.12", + "cssnano-preset-default": "^5.2.13", + "postcss-discard-unused": "^5.1.0", + "postcss-merge-idents": "^5.1.1", + "postcss-reduce-idents": "^5.2.0", + "postcss-zindex": "^5.1.0" + } + }, + "cssnano-preset-default": { + "version": "5.2.13", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.13.tgz", + "integrity": "sha512-PX7sQ4Pb+UtOWuz8A1d+Rbi+WimBIxJTRyBdgGp1J75VU0r/HFQeLnMYgHiCAp6AR4rqrc7Y4R+1Rjk3KJz6DQ==", + "requires": { + "css-declaration-sorter": "^6.3.1", + "cssnano-utils": "^3.1.0", + "postcss-calc": "^8.2.3", + "postcss-colormin": "^5.3.0", + "postcss-convert-values": "^5.1.3", + "postcss-discard-comments": "^5.1.2", + "postcss-discard-duplicates": "^5.1.0", + "postcss-discard-empty": "^5.1.1", + "postcss-discard-overridden": "^5.1.0", + "postcss-merge-longhand": "^5.1.7", + "postcss-merge-rules": "^5.1.3", + "postcss-minify-font-values": "^5.1.0", + "postcss-minify-gradients": "^5.1.1", + "postcss-minify-params": "^5.1.4", + "postcss-minify-selectors": "^5.2.1", + "postcss-normalize-charset": "^5.1.0", + "postcss-normalize-display-values": "^5.1.0", + "postcss-normalize-positions": "^5.1.1", + "postcss-normalize-repeat-style": "^5.1.1", + "postcss-normalize-string": "^5.1.0", + "postcss-normalize-timing-functions": "^5.1.0", + "postcss-normalize-unicode": "^5.1.1", + "postcss-normalize-url": "^5.1.0", + "postcss-normalize-whitespace": "^5.1.1", + "postcss-ordered-values": "^5.1.3", + "postcss-reduce-initial": "^5.1.1", + "postcss-reduce-transforms": "^5.1.0", + "postcss-svgo": "^5.1.0", + "postcss-unique-selectors": "^5.1.1" + } + }, + "cssnano-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", + "requires": {} + }, + "csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "requires": { + "css-tree": "^1.1.2" + } + }, + "csstype": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" + }, + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "requires": { + "ms": "2.1.2" + } + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "requires": { + "mimic-response": "^1.0.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" + }, + "default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "requires": { + "execa": "^5.0.0" + } + }, + "defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" + }, + "define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "requires": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + } + }, + "define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==" + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "requires": { + "object-keys": "^1.0.12" + } + }, + "del": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", + "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", + "requires": { + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" + } + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" + }, + "detab": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.4.tgz", + "integrity": "sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==", + "requires": { + "repeat-string": "^1.5.4" + } + }, + "detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" + }, + "detect-port": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.3.0.tgz", + "integrity": "sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ==", + "requires": { + "address": "^1.0.1", + "debug": "^2.6.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "detect-port-alt": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", + "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", + "requires": { + "address": "^1.0.1", + "debug": "^2.6.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "requires": { + "path-type": "^4.0.0" + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==" + }, + "dns-packet": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz", + "integrity": "sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==", + "requires": { + "@leichtgewicht/ip-codec": "^2.0.1" + } + }, + "docusaurus-plugin-goatcounter": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/docusaurus-plugin-goatcounter/-/docusaurus-plugin-goatcounter-2.0.1.tgz", + "integrity": "sha512-0KcS2fbpV2sDmeDheR/vyH9YkJg8+y7pcGq9PtrQbyDAsISnYCI+pvwlNZIHikn9Z+W+9mGLxYaHWQwlUc5/lA==" + }, + "dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "requires": { + "utila": "~0.4" + } + }, + "dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" + }, + "domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "requires": { + "is-obj": "^2.0.0" + } + }, + "duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "electron-to-chromium": { + "version": "1.4.284", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" + }, + "emoticon": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/emoticon/-/emoticon-3.2.0.tgz", + "integrity": "sha512-SNujglcLTTg+lDAcApPNgEdudaqQFiAbJCqzjNxJkvN9vAwCGi0uu8IUVvx+f16h+V44KCY6Y2yboroc9pilHg==" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, + "enhanced-resolve": { + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", + "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" + }, + "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==", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "requires": { + "get-intrinsic": "^1.2.4" + } + }, + "es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==" + }, + "es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + }, + "escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + }, + "eta": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/eta/-/eta-1.12.3.tgz", + "integrity": "sha512-qHixwbDLtekO/d51Yr4glcaUJCIjGVJyTzuqV4GPlgZo1YpgOKG+avQynErZIYrfM6JIJdtiG2Kox8tbb+DoGg==" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" + }, + "eval": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.8.tgz", + "integrity": "sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==", + "requires": { + "@types/node": "*", + "require-like": ">= 0.1.1" + } + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "dependencies": { + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" + } + } + }, + "express": { + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.6.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + }, + "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==" + }, + "fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "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==" + }, + "fast-url-parser": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", + "integrity": "sha1-9K8+qfNNiicc9YrSs3WfQx8LMY0=", + "requires": { + "punycode": "^1.3.2" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + } + } + }, + "fastq": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.12.0.tgz", + "integrity": "sha512-VNX0QkHK3RsXVKr9KrlUv/FoTa0NdbYoHHl7uXHv2rzyHSlxjdNAKug2twd9luJxpcyNeAgf5iPPMutJO67Dfg==", + "requires": { + "reusify": "^1.0.4" + } + }, + "faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "fbemitter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz", + "integrity": "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==", + "requires": { + "fbjs": "^3.0.0" + } + }, + "fbjs": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.4.tgz", + "integrity": "sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ==", + "requires": { + "cross-fetch": "^3.1.5", + "fbjs-css-vars": "^1.0.0", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.30" + } + }, + "fbjs-css-vars": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", + "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" + }, + "feed": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", + "integrity": "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==", + "requires": { + "xml-js": "^1.6.11" + } + }, + "file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + } + }, + "filesize": { + "version": "8.0.7", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", + "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==" + }, + "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==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, + "find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "flux": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/flux/-/flux-4.0.4.tgz", + "integrity": "sha512-NCj3XlayA2UsapRpM7va6wU1+9rE5FIL7qoMcmxWHRzbp0yujihMBm9BBHZ1MDIk5h5o2Bl6eGiCe8rYELAmYw==", + "requires": { + "fbemitter": "^3.0.0", + "fbjs": "^3.0.1" + } + }, + "follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==" + }, + "fork-ts-checker-webpack-plugin": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz", + "integrity": "sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==", + "requires": { + "@babel/code-frame": "^7.8.3", + "@types/json-schema": "^7.0.5", + "chalk": "^4.1.0", + "chokidar": "^3.4.2", + "cosmiconfig": "^6.0.0", + "deepmerge": "^4.2.2", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "memfs": "^3.1.2", + "minimatch": "^3.0.4", + "schema-utils": "2.7.0", + "semver": "^7.3.2", + "tapable": "^1.0.0" + }, + "dependencies": { + "cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + } + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "schema-utils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "requires": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + } + }, + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" + } + } + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" + }, + "fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" + }, + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs-monkey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", + "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==" + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true + }, + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" + }, + "get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "requires": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + } + }, + "get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "requires": { + "pump": "^3.0.0" + } + }, + "github-slugger": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", + "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==" + }, + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "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": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" + }, + "global-dirs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", + "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", + "requires": { + "ini": "2.0.0" + }, + "dependencies": { + "ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==" + } + } + }, + "global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "requires": { + "global-prefix": "^3.0.0" + } + }, + "global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "requires": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "dependencies": { + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "requires": { + "get-intrinsic": "^1.1.3" + } + }, + "got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + } + }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "gray-matter": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", + "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", + "requires": { + "js-yaml": "^3.13.1", + "kind-of": "^6.0.2", + "section-matter": "^1.0.0", + "strip-bom-string": "^1.0.0" + } + }, + "gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "requires": { + "duplexer": "^0.1.2" + } + }, + "handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" + }, + "has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "requires": { + "es-define-property": "^1.0.0" + } + }, + "has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==" + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==" + }, + "hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "requires": { + "function-bind": "^1.1.2" + } + }, + "hast-to-hyperscript": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz", + "integrity": "sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==", + "requires": { + "@types/unist": "^2.0.3", + "comma-separated-tokens": "^1.0.0", + "property-information": "^5.3.0", + "space-separated-tokens": "^1.0.0", + "style-to-object": "^0.3.0", + "unist-util-is": "^4.0.0", + "web-namespaces": "^1.0.0" + } + }, + "hast-util-from-parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz", + "integrity": "sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==", + "requires": { + "@types/parse5": "^5.0.0", + "hastscript": "^6.0.0", + "property-information": "^5.0.0", + "vfile": "^4.0.0", + "vfile-location": "^3.2.0", + "web-namespaces": "^1.0.0" + } + }, + "hast-util-parse-selector": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", + "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==" + }, + "hast-util-raw": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-6.0.1.tgz", + "integrity": "sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig==", + "requires": { + "@types/hast": "^2.0.0", + "hast-util-from-parse5": "^6.0.0", + "hast-util-to-parse5": "^6.0.0", + "html-void-elements": "^1.0.0", + "parse5": "^6.0.0", + "unist-util-position": "^3.0.0", + "vfile": "^4.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + } + }, + "hast-util-to-parse5": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz", + "integrity": "sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==", + "requires": { + "hast-to-hyperscript": "^9.0.0", + "property-information": "^5.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + } + }, + "hastscript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", + "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", + "requires": { + "@types/hast": "^2.0.0", + "comma-separated-tokens": "^1.0.0", + "hast-util-parse-selector": "^2.0.0", + "property-information": "^5.0.0", + "space-separated-tokens": "^1.0.0" + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" + }, + "history": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", + "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", + "requires": { + "@babel/runtime": "^7.1.2", + "loose-envify": "^1.2.0", + "resolve-pathname": "^3.0.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0", + "value-equal": "^1.0.1" + } + }, + "hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "requires": { + "react-is": "^16.7.0" + } + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + }, + "dependencies": { + "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==", + "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" + } + }, + "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==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "html-entities": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", + "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==" + }, + "html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "requires": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "dependencies": { + "commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==" + } + } + }, + "html-tags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz", + "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==" + }, + "html-void-elements": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", + "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==" + }, + "html-webpack-plugin": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", + "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", + "requires": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + } + }, + "htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==" + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" + }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "requires": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "dependencies": { + "is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==" + } + } + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "requires": {} + }, + "ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==" + }, + "image-size": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.2.tgz", + "integrity": "sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg==", + "requires": { + "queue": "6.0.2" + } + }, + "immer": { + "version": "9.0.16", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.16.tgz", + "integrity": "sha512-qenGE7CstVm1NrHQbMh8YaSzTZTFNP3zPqr3YU0S0UY441j4bJTg4A2Hh5KAhwgaiU6ZZ1Ar6y/2f4TblnMReQ==" + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" + }, + "infima": { + "version": "0.2.0-alpha.42", + "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.42.tgz", + "integrity": "sha512-ift8OXNbQQwtbIt6z16KnSWP7uJ/SysSMFI4F87MNRTicypfl4Pv3E2OGVv6N3nSZFJvA8imYulCBS64iyHYww==" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "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==" + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "inline-style-parser": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", + "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" + }, + "interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "requires": { + "loose-envify": "^1.0.0" + } + }, + "ipaddr.js": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", + "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==" + }, + "is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==" + }, + "is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "requires": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "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==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "requires": { + "ci-info": "^2.0.0" + }, + "dependencies": { + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + } + } + }, + "is-core-module": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz", + "integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==", + "requires": { + "has": "^1.0.3" + } + }, + "is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==" + }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-hexadecimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==" + }, + "is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "requires": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + } + }, + "is-npm": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", + "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" + }, + "is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==" + }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" + }, + "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==" + }, + "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==", + "requires": { + "isobject": "^3.0.1" + } + }, + "is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=" + }, + "is-root": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", + "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==" + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "is-whitespace-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", + "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==" + }, + "is-word-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", + "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==" + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "requires": { + "is-docker": "^2.0.0" + } + }, + "is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + }, + "jest-util": { + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.3.1.tgz", + "integrity": "sha512-7YOVZaiX7RJLv76ZfHt4nbNEzzTRiMW/IiOG7ZOKmTXmoGBxUDefgMAxQubu6WPVqP5zSzAdZG0FfLcC7HOIFQ==", + "requires": { + "@jest/types": "^29.3.1", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "jest-worker": { + "version": "29.3.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.3.1.tgz", + "integrity": "sha512-lY4AnnmsEWeiXirAIA0c9SDPbuCBq8IYuDVL8PMm0MZ2PEs2yPvRA/J64QBXuZp7CYKrDM/rmNrc9/i3KJQncw==", + "requires": { + "@types/node": "*", + "jest-util": "^29.3.1", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "joi": { + "version": "17.7.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.7.0.tgz", + "integrity": "sha512-1/ugc8djfn93rTE3WRKdCzGGt/EtiYKxITMO4Wiv6q5JL1gl9ePt4kBsl1S499nbosspfctIQTpYIhSmHA3WAg==", + "requires": { + "@hapi/hoek": "^9.0.0", + "@hapi/topo": "^5.0.0", + "@sideway/address": "^4.1.3", + "@sideway/formula": "^3.0.0", + "@sideway/pinpoint": "^2.0.0" + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "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==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "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==" + }, + "json5": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.2.tgz", + "integrity": "sha512-46Tk9JiOL2z7ytNQWFLpj99RZkVgeHf87yGQKsIkaPz1qSH9UczKH1rO7K3wgRselo0tYMUNfecYpm/p1vC7tQ==" + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "requires": { + "json-buffer": "3.0.0" + } + }, + "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==" + }, + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" + }, + "klona": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", + "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==" + }, + "latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "requires": { + "package-json": "^6.3.0" + } + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" + }, + "lilconfig": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", + "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==" + }, + "lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" + }, + "loader-runner": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", + "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==" + }, + "loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash.curry": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", + "integrity": "sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA==" + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + }, + "lodash.flow": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz", + "integrity": "sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw==" + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "requires": { + "tslib": "^2.0.3" + } + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" + }, + "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==", + "requires": { + "yallist": "^4.0.0" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" + } + } + }, + "markdown-escapes": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", + "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==" + }, + "mdast-squeeze-paragraphs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz", + "integrity": "sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==", + "requires": { + "unist-util-remove": "^2.0.0" + } + }, + "mdast-util-definitions": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", + "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==", + "requires": { + "unist-util-visit": "^2.0.0" + } + }, + "mdast-util-to-hast": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz", + "integrity": "sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==", + "requires": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.0", + "mdast-util-definitions": "^4.0.0", + "mdurl": "^1.0.0", + "unist-builder": "^2.0.0", + "unist-util-generated": "^1.0.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^2.0.0" + } + }, + "mdast-util-to-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", + "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==" + }, + "mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + }, + "mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" + }, + "memfs": { + "version": "3.4.12", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.12.tgz", + "integrity": "sha512-BcjuQn6vfqP+k100e0E9m61Hyqa//Brp+I3f0OBmN0ATHlFA8vx3Lt8z57R3u2bPqe3WGDBC+nF72fTH7isyEw==", + "requires": { + "fs-monkey": "^1.0.3" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" + }, + "mini-css-extract-plugin": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.2.tgz", + "integrity": "sha512-EdlUizq13o0Pd+uCp+WO/JpkLvHRVGt97RqfeGhXqAcorYo1ypJSpkV+WDT0vY/kmh/p7wRdJNJtuyK540PXDw==", + "requires": { + "schema-utils": "^4.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", + "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } + } + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + }, + "mrmime": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", + "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "requires": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + } + }, + "nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==" + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" + }, + "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==" + }, + "no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "requires": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node-emoji": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", + "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", + "requires": { + "lodash": "^4.17.21" + } + }, + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==" + }, + "node-releases": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.8.tgz", + "integrity": "sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==" + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==" + }, + "normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==" + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "requires": { + "path-key": "^3.0.0" + } + }, + "nprogress": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", + "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==" + }, + "nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "requires": { + "boolbase": "^1.0.0" + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==" + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "requires": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + } + }, + "opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==" + }, + "p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + }, + "dependencies": { + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + } + } + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "requires": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + } + }, + "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==" + }, + "package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "requires": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" + } + } + }, + "param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "requires": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "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==", + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "requires": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "parse-numeric-range": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz", + "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==" + }, + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + }, + "parse5-htmlparser2-tree-adapter": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", + "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", + "requires": { + "domhandler": "^5.0.2", + "parse5": "^7.0.0" + }, + "dependencies": { + "domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "requires": { + "domelementtype": "^2.3.0" + } + }, + "entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==" + }, + "parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "requires": { + "entities": "^4.4.0" + } + } + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "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==" + }, + "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=" + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + }, + "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==" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "requires": { + "find-up": "^4.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==", + "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==", + "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==", + "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==", + "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==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" + } + } + }, + "postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "requires": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "postcss-calc": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "requires": { + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-colormin": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.0.tgz", + "integrity": "sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==", + "requires": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-convert-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", + "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", + "requires": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-discard-comments": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", + "requires": {} + }, + "postcss-discard-duplicates": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "requires": {} + }, + "postcss-discard-empty": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "requires": {} + }, + "postcss-discard-overridden": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "requires": {} + }, + "postcss-discard-unused": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-5.1.0.tgz", + "integrity": "sha512-KwLWymI9hbwXmJa0dkrzpRbSJEh0vVUd7r8t0yOGPcfKzyJJxFM8kLyC5Ev9avji6nY95pOp1W6HqIrfT+0VGw==", + "requires": { + "postcss-selector-parser": "^6.0.5" + } + }, + "postcss-loader": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.0.2.tgz", + "integrity": "sha512-fUJzV/QH7NXUAqV8dWJ9Lg4aTkDCezpTS5HgJ2DvqznexTbSTxgi/dTECvTZ15BwKTtk8G/bqI/QTu2HPd3ZCg==", + "requires": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.5", + "semver": "^7.3.8" + } + }, + "postcss-merge-idents": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-5.1.1.tgz", + "integrity": "sha512-pCijL1TREiCoog5nQp7wUe+TUonA2tC2sQ54UGeMmryK3UFGIYKqDyjnqd6RcuI4znFn9hWSLNN8xKE/vWcUQw==", + "requires": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-merge-longhand": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", + "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", + "requires": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.1" + } + }, + "postcss-merge-rules": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.3.tgz", + "integrity": "sha512-LbLd7uFC00vpOuMvyZop8+vvhnfRGpp2S+IMQKeuOZZapPRY4SMq5ErjQeHbHsjCUgJkRNrlU+LmxsKIqPKQlA==", + "requires": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" + } + }, + "postcss-minify-font-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-minify-gradients": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "requires": { + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-minify-params": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", + "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", + "requires": { + "browserslist": "^4.21.4", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-minify-selectors": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", + "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", + "requires": { + "postcss-selector-parser": "^6.0.5" + } + }, + "postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "requires": {} + }, + "postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "requires": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "requires": { + "postcss-selector-parser": "^6.0.4" + } + }, + "postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "requires": { + "icss-utils": "^5.0.0" + } + }, + "postcss-normalize-charset": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "requires": {} + }, + "postcss-normalize-display-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-positions": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", + "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-repeat-style": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", + "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-string": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-timing-functions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-unicode": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", + "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", + "requires": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", + "requires": { + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-whitespace": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-ordered-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", + "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", + "requires": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-reduce-idents": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-5.2.0.tgz", + "integrity": "sha512-BTrLjICoSB6gxbc58D5mdBK8OhXRDqud/zodYfdSi52qvDHdMwk+9kB9xsM8yJThH/sZU5A6QVSmMmaN001gIg==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-reduce-initial": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.1.tgz", + "integrity": "sha512-//jeDqWcHPuXGZLoolFrUXBDyuEGbr9S2rMo19bkTIjBQ4PqkaO+oI8wua5BOUxpfi97i3PCoInsiFIEBfkm9w==", + "requires": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0" + } + }, + "postcss-reduce-transforms": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-selector-parser": { + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", + "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-sort-media-queries": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-4.3.0.tgz", + "integrity": "sha512-jAl8gJM2DvuIJiI9sL1CuiHtKM4s5aEIomkU8G3LFvbP+p8i7Sz8VV63uieTgoewGqKbi+hxBTiOKJlB35upCg==", + "requires": { + "sort-css-media-queries": "2.1.0" + } + }, + "postcss-svgo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", + "requires": { + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" + } + }, + "postcss-unique-selectors": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "requires": { + "postcss-selector-parser": "^6.0.5" + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + }, + "postcss-zindex": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-5.1.0.tgz", + "integrity": "sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A==", + "requires": {} + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" + }, + "pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "requires": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "pretty-time": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", + "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==" + }, + "prism-react-renderer": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.3.5.tgz", + "integrity": "sha512-IJ+MSwBWKG+SM3b2SUfdrhC+gu01QkV2KmRQgREThBfSQRoufqRfxfHUxpG1WcaFjP+kojcFyO9Qqtpgt3qLCg==", + "requires": {} + }, + "prismjs": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", + "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==" + }, + "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==" + }, + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "requires": { + "asap": "~2.0.3" + } + }, + "prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + } + }, + "prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, + "property-information": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", + "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", + "requires": { + "xtend": "^4.0.0" + } + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "dependencies": { + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + } + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "requires": { + "escape-goat": "^2.0.0" + } + }, + "pure-color": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz", + "integrity": "sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA==" + }, + "qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "requires": { + "side-channel": "^1.0.4" + } + }, + "queue": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", + "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", + "requires": { + "inherits": "~2.0.3" + } + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + } + } + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, + "react": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", + "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "react-base16-styling": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.6.0.tgz", + "integrity": "sha512-yvh/7CArceR/jNATXOKDlvTnPKPmGZz7zsenQ3jUwLzHkNUR0CvY3yGYJbWJ/nnxsL8Sgmt5cO3/SILVuPO6TQ==", + "requires": { + "base16": "^1.0.0", + "lodash.curry": "^4.0.1", + "lodash.flow": "^3.3.0", + "pure-color": "^1.2.0" + } + }, + "react-dev-utils": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", + "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", + "requires": { + "@babel/code-frame": "^7.16.0", + "address": "^1.1.2", + "browserslist": "^4.18.1", + "chalk": "^4.1.2", + "cross-spawn": "^7.0.3", + "detect-port-alt": "^1.1.6", + "escape-string-regexp": "^4.0.0", + "filesize": "^8.0.6", + "find-up": "^5.0.0", + "fork-ts-checker-webpack-plugin": "^6.5.0", + "global-modules": "^2.0.0", + "globby": "^11.0.4", + "gzip-size": "^6.0.0", + "immer": "^9.0.7", + "is-root": "^2.1.0", + "loader-utils": "^3.2.0", + "open": "^8.4.0", + "pkg-up": "^3.1.0", + "prompts": "^2.4.2", + "react-error-overlay": "^6.0.11", + "recursive-readdir": "^2.2.2", + "shell-quote": "^1.7.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "dependencies": { + "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==" + }, + "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==", + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "loader-utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", + "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==" + }, + "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==", + "requires": { + "p-locate": "^5.0.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==", + "requires": { + "p-limit": "^3.0.2" + } + } + } + }, + "react-dom": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", + "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "scheduler": "^0.20.2" + } + }, + "react-error-overlay": { + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", + "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" + }, + "react-fast-compare": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz", + "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" + }, + "react-helmet-async": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.3.0.tgz", + "integrity": "sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==", + "requires": { + "@babel/runtime": "^7.12.5", + "invariant": "^2.2.4", + "prop-types": "^15.7.2", + "react-fast-compare": "^3.2.0", + "shallowequal": "^1.1.0" + } + }, + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "react-json-view": { + "version": "1.21.3", + "resolved": "https://registry.npmjs.org/react-json-view/-/react-json-view-1.21.3.tgz", + "integrity": "sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw==", + "requires": { + "flux": "^4.0.1", + "react-base16-styling": "^0.6.0", + "react-lifecycles-compat": "^3.0.4", + "react-textarea-autosize": "^8.3.2" + } + }, + "react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" + }, + "react-loadable": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/react-loadable/-/react-loadable-5.5.0.tgz", + "integrity": "sha512-C8Aui0ZpMd4KokxRdVAm2bQtI03k2RMRNzOB+IipV3yxFTSVICv7WoUr5L9ALB5BmKO1iHgZtWM8EvYG83otdg==", + "peer": true, + "requires": { + "prop-types": "^15.5.0" + } + }, + "react-loadable-ssr-addon-v5-slorber": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz", + "integrity": "sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A==", + "requires": { + "@babel/runtime": "^7.10.3" + } + }, + "react-router": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", + "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", + "requires": { + "@babel/runtime": "^7.12.13", + "history": "^4.9.0", + "hoist-non-react-statics": "^3.1.0", + "loose-envify": "^1.3.1", + "path-to-regexp": "^1.7.0", + "prop-types": "^15.6.2", + "react-is": "^16.6.0", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "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==", + "requires": { + "isarray": "0.0.1" + } + } + } + }, + "react-router-config": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz", + "integrity": "sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==", + "requires": { + "@babel/runtime": "^7.1.2" + } + }, + "react-router-dom": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", + "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", + "requires": { + "@babel/runtime": "^7.12.13", + "history": "^4.9.0", + "loose-envify": "^1.3.1", + "prop-types": "^15.6.2", + "react-router": "5.3.4", + "tiny-invariant": "^1.0.2", + "tiny-warning": "^1.0.0" + } + }, + "react-textarea-autosize": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.4.1.tgz", + "integrity": "sha512-aD2C+qK6QypknC+lCMzteOdIjoMbNlgSFmJjCV+DrfTPwp59i/it9mMNf2HDzvRjQgKAyBDPyLJhcrzElf2U4Q==", + "requires": { + "@babel/runtime": "^7.20.13", + "use-composed-ref": "^1.3.0", + "use-latest": "^1.2.1" + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "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==", + "requires": { + "picomatch": "^2.2.1" + } + }, + "reading-time": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.5.0.tgz", + "integrity": "sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==" + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "requires": { + "resolve": "^1.1.6" + } + }, + "recursive-readdir": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", + "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", + "requires": { + "minimatch": "^3.0.5" + }, + "dependencies": { + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" + }, + "regenerate-unicode-properties": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "requires": { + "regenerate": "^1.4.2" + } + }, + "regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + }, + "regenerator-transform": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", + "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regexpu-core": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz", + "integrity": "sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==", + "requires": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsgen": "^0.7.1", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + } + }, + "registry-auth-token": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", + "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "requires": { + "rc": "^1.2.8" + } + }, + "registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "requires": { + "rc": "^1.2.8" + } + }, + "regjsgen": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", + "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==" + }, + "regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==" + } + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==" + }, + "remark-emoji": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-2.2.0.tgz", + "integrity": "sha512-P3cj9s5ggsUvWw5fS2uzCHJMGuXYRb0NnZqYlNecewXt8QBU9n5vW3DUUKOhepS8F9CwdMx9B8a3i7pqFWAI5w==", + "requires": { + "emoticon": "^3.2.0", + "node-emoji": "^1.10.0", + "unist-util-visit": "^2.0.3" + } + }, + "remark-footnotes": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-2.0.0.tgz", + "integrity": "sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==" + }, + "remark-mdx": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", + "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", + "requires": { + "@babel/core": "7.12.9", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-proposal-object-rest-spread": "7.12.1", + "@babel/plugin-syntax-jsx": "7.12.1", + "@mdx-js/util": "1.6.22", + "is-alphabetical": "1.0.4", + "remark-parse": "8.0.3", + "unified": "9.2.0" + }, + "dependencies": { + "@babel/core": { + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", + "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", + "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.12.1" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", + "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" + } + } + }, + "remark-parse": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", + "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", + "requires": { + "ccount": "^1.0.0", + "collapse-white-space": "^1.0.2", + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "is-word-character": "^1.0.0", + "markdown-escapes": "^1.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "^1.0.0", + "unherit": "^1.0.4", + "unist-util-remove-position": "^2.0.0", + "vfile-location": "^3.0.0", + "xtend": "^4.0.1" + } + }, + "remark-squeeze-paragraphs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz", + "integrity": "sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==", + "requires": { + "mdast-squeeze-paragraphs": "^4.0.0" + } + }, + "renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "requires": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" + }, + "require-like": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", + "integrity": "sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==" + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "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==" + }, + "resolve-pathname": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", + "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" + }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "requires": { + "lowercase-keys": "^1.0.0" + } + }, + "retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==" + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "requires": { + "glob": "^7.1.3" + } + }, + "rtl-detect": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.0.4.tgz", + "integrity": "sha512-EBR4I2VDSSYr7PkBmFy04uhycIpDKp+21p/jARYXlCSjQksTBQcJ0HFUPOO79EPPH5JS6VAhiIQbycf0O3JAxQ==" + }, + "rtlcss": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-3.5.0.tgz", + "integrity": "sha512-wzgMaMFHQTnyi9YOwsx9LjOxYXJPzS8sYnFaKm6R5ysvTkwzHiB0vxnbHwchHQT65PTdBjDG21/kQBWI7q9O7A==", + "requires": { + "find-up": "^5.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.3.11", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "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==", + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.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==", + "requires": { + "p-locate": "^5.0.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==", + "requires": { + "p-limit": "^3.0.2" + } + }, + "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==" + } + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "rxjs": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", + "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", + "requires": { + "tslib": "^2.1.0" + } + }, + "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==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "scheduler": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", + "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "section-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", + "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "requires": { + "extend-shallow": "^2.0.1", + "kind-of": "^6.0.0" + } + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" + }, + "selfsigned": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", + "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", + "requires": { + "node-forge": "^1" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "requires": { + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" + } + } + }, + "send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-handler": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.3.tgz", + "integrity": "sha512-FosMqFBNrLyeiIDvP1zgO6YoTzFYHxLDEIavhlmQ+knB2Z7l1t+kGLHkZIDN7UVWqQAmKI3D20A6F6jo3nDd4w==", + "requires": { + "bytes": "3.0.0", + "content-disposition": "0.5.2", + "fast-url-parser": "1.1.3", + "mime-types": "2.1.18", + "minimatch": "3.0.4", + "path-is-inside": "1.0.2", + "path-to-regexp": "2.2.1", + "range-parser": "1.2.0" + }, + "dependencies": { + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" + }, + "mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" + }, + "mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "requires": { + "mime-db": "~1.33.0" + } + }, + "path-to-regexp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", + "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==" + }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" + } + } + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==" + } + } + }, + "serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + } + }, + "set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "requires": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "requires": { + "kind-of": "^6.0.2" + } + }, + "shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + }, + "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==", + "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==" + }, + "shell-quote": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.4.tgz", + "integrity": "sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==" + }, + "shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + } + }, + "side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "requires": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + } + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + }, + "sirv": { + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.19.tgz", + "integrity": "sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==", + "requires": { + "@polka/url": "^1.0.0-next.20", + "mrmime": "^1.0.0", + "totalist": "^1.0.0" + } + }, + "sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" + }, + "sitemap": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.1.tgz", + "integrity": "sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg==", + "requires": { + "@types/node": "^17.0.5", + "@types/sax": "^1.2.1", + "arg": "^5.0.0", + "sax": "^1.2.4" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "requires": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "sort-css-media-queries": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.1.0.tgz", + "integrity": "sha512-IeWvo8NkNiY2vVYdPa27MCQiR0MN0M80johAYFVxWWXQ44KU84WNxjslwBHmc/7ZL2ccwkM7/e6S5aiKZXm7jA==" + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" + }, + "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==", + "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==" + } + } + }, + "space-separated-tokens": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", + "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==" + }, + "spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "requires": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + } + }, + "spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "requires": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" + }, + "state-toggle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", + "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==" + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + }, + "std-env": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.3.1.tgz", + "integrity": "sha512-3H20QlwQsSm2OvAxWIYhs+j01MzzqwMwGiiO1NQaJYZgJZFPuAbf95/DiKRBSTYIJ2FeGUc+B/6mPGcWP9dO3Q==" + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } + } + }, + "string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "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==" + }, + "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==" + } + } + }, + "stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "requires": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "dependencies": { + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" + } + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + } + } + }, + "strip-bom-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=" + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + }, + "style-to-object": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", + "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==", + "requires": { + "inline-style-parser": "0.1.1" + } + }, + "stylehacks": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", + "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", + "requires": { + "browserslist": "^4.21.4", + "postcss-selector-parser": "^6.0.4" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "svg-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" + }, + "svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "requires": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "dependencies": { + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" + } + } + }, + "tapable": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", + "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==" + }, + "terser": { + "version": "5.14.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", + "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", + "requires": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + } + } + }, + "terser-webpack-plugin": { + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", + "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", + "requires": { + "@jridgewell/trace-mapping": "^0.3.14", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "terser": "^5.14.1" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + } + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" + }, + "thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" + }, + "tiny-invariant": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.1.0.tgz", + "integrity": "sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw==" + }, + "tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + }, + "to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" + }, + "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==", + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" + }, + "totalist": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", + "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==" + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "trim": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", + "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=" + }, + "trim-trailing-lines": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz", + "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==" + }, + "trough": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==" + }, + "tslib": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" + }, + "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==" + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "typescript": { + "version": "4.9.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", + "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", + "peer": true + }, + "ua-parser-js": { + "version": "0.7.35", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.35.tgz", + "integrity": "sha512-veRf7dawaj9xaWEu9HoTVn5Pggtc/qj+kqTOFvNiN1l0YdxwC1kvel57UCjThjGa3BHBihE8/UJAHI+uQHmd/g==" + }, + "unherit": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", + "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", + "requires": { + "inherits": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==" + }, + "unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "requires": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==" + }, + "unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==" + }, + "unified": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", + "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", + "requires": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + } + }, + "unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "requires": { + "crypto-random-string": "^2.0.0" + } + }, + "unist-builder": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", + "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==" + }, + "unist-util-generated": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", + "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==" + }, + "unist-util-is": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==" + }, + "unist-util-position": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", + "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==" + }, + "unist-util-remove": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-2.1.0.tgz", + "integrity": "sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q==", + "requires": { + "unist-util-is": "^4.0.0" + } + }, + "unist-util-remove-position": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", + "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", + "requires": { + "unist-util-visit": "^2.0.0" + } + }, + "unist-util-stringify-position": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "requires": { + "@types/unist": "^2.0.2" + } + }, + "unist-util-visit": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", + "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", + "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" + }, + "update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, + "update-notifier": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", + "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", + "requires": { + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.4.0", + "is-npm": "^5.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.1.0", + "pupa": "^2.1.1", + "semver": "^7.3.4", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "requires": { + "punycode": "^2.1.0" + } + }, + "url-loader": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", + "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", + "requires": { + "loader-utils": "^2.0.0", + "mime-types": "^2.1.27", + "schema-utils": "^3.0.0" + } + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "requires": { + "prepend-http": "^2.0.0" + } + }, + "use-composed-ref": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz", + "integrity": "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==", + "requires": {} + }, + "use-isomorphic-layout-effect": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", + "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", + "requires": {} + }, + "use-latest": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.1.tgz", + "integrity": "sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==", + "requires": { + "use-isomorphic-layout-effect": "^1.1.1" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==" + }, + "utility-types": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", + "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + }, + "value-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", + "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" + }, + "vfile": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "requires": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + } + }, + "vfile-location": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", + "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==" + }, + "vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + } + }, + "wait-on": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-6.0.1.tgz", + "integrity": "sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw==", + "requires": { + "axios": "^0.25.0", + "joi": "^17.6.0", + "lodash": "^4.17.21", + "minimist": "^1.2.5", + "rxjs": "^7.5.4" + } + }, + "watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "web-namespaces": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", + "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==" + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "webpack": { + "version": "5.76.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.76.1.tgz", + "integrity": "sha512-4+YIK4Abzv8172/SGqObnUjaIHjLEuUasz9EwQj/9xmPPkYJy2Mh03Q/lJfSD3YLzbxy5FeTq5Uw0323Oh6SJQ==", + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + } + }, + "webpack-bundle-analyzer": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.7.0.tgz", + "integrity": "sha512-j9b8ynpJS4K+zfO5GGwsAcQX4ZHpWV+yRiHDiL+bE0XHJ8NiPYLTNVQdlFYWxtpg9lfAQNlwJg16J9AJtFSXRg==", + "requires": { + "acorn": "^8.0.4", + "acorn-walk": "^8.0.0", + "chalk": "^4.1.0", + "commander": "^7.2.0", + "gzip-size": "^6.0.0", + "lodash": "^4.17.20", + "opener": "^1.5.2", + "sirv": "^1.0.7", + "ws": "^7.3.1" + }, + "dependencies": { + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" + } + } + }, + "webpack-dev-middleware": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", + "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", + "requires": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", + "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } + } + } + }, + "webpack-dev-server": { + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz", + "integrity": "sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw==", + "requires": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.1", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.4.2" + }, + "dependencies": { + "ajv": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", + "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } + }, + "ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "requires": {} + } + } + }, + "webpack-merge": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", + "requires": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + } + }, + "webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==" + }, + "webpackbar": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.2.tgz", + "integrity": "sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ==", + "requires": { + "chalk": "^4.1.0", + "consola": "^2.15.3", + "pretty-time": "^1.1.0", + "std-env": "^3.0.1" + } + }, + "websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "requires": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + }, + "widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "requires": { + "string-width": "^4.0.0" + } + }, + "wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==" + }, + "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==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "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==", + "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==" + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "requires": {} + }, + "xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==" + }, + "xml-js": { + "version": "1.6.11", + "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", + "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", + "requires": { + "sax": "^1.2.4" + } + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" + }, + "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==" + }, + "zwitch": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", + "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==" + } + } +} diff --git a/node_modules/htmlnano/docs/package.json b/node_modules/htmlnano/docs/package.json new file mode 100644 index 00000000..de86bfa4 --- /dev/null +++ b/node_modules/htmlnano/docs/package.json @@ -0,0 +1,40 @@ +{ + "name": "htmlnano-docs", + "version": "1.0.0", + "scripts": { + "docusaurus": "docusaurus", + "start": "docusaurus start", + "build": "docusaurus build", + "swizzle": "docusaurus swizzle", + "deploy": "docusaurus deploy", + "clear": "docusaurus clear", + "serve": "docusaurus serve", + "write-translations": "docusaurus write-translations", + "write-heading-ids": "docusaurus write-heading-ids" + }, + "dependencies": { + "@docusaurus/core": "2.2.0", + "@docusaurus/preset-classic": "2.2.0", + "@mdx-js/react": "^1.6.21", + "@svgr/webpack": "^6.5.1", + "clsx": "^1.1.1", + "docusaurus-plugin-goatcounter": "^2.0.1", + "file-loader": "^6.2.0", + "prism-react-renderer": "^1.2.1", + "react": "^17.0.1", + "react-dom": "^17.0.1", + "url-loader": "^4.1.1" + }, + "browserslist": { + "production": [ + ">0.5%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + } +} diff --git a/node_modules/htmlnano/docs/sidebars.js b/node_modules/htmlnano/docs/sidebars.js new file mode 100644 index 00000000..cd243aec --- /dev/null +++ b/node_modules/htmlnano/docs/sidebars.js @@ -0,0 +1,26 @@ +/** + * Creating a sidebar enables you to: + - create an ordered group of docs + - render a sidebar for each doc of that group + - provide next/previous navigation + + The sidebars can be generated from the filesystem, or explicitly defined here. + + Create as many sidebars as you want. + */ + +module.exports = { + // By default, Docusaurus generates a sidebar from the docs folder structure + tutorialSidebar: [{type: 'autogenerated', dirName: '.'}], + + // But you can create a sidebar manually + /* + tutorialSidebar: [ + { + type: 'category', + label: 'Tutorial', + items: ['hello'], + }, + ], + */ +}; diff --git a/node_modules/htmlnano/docs/versioned_docs/version-1.1.1/010-introduction.md b/node_modules/htmlnano/docs/versioned_docs/version-1.1.1/010-introduction.md new file mode 100644 index 00000000..0a4ddb4d --- /dev/null +++ b/node_modules/htmlnano/docs/versioned_docs/version-1.1.1/010-introduction.md @@ -0,0 +1,22 @@ +--- +sidebar_position: 1 +slug: / +--- + +# Introduction + +Modular HTML minifier, built on top of the [PostHTML](https://github.com/posthtml/posthtml). +Inspired by [cssnano](http://cssnano.co/). + + +## [Benchmark](https://github.com/maltsev/html-minifiers-benchmark/blob/master/README.md) +[html-minifier-terser@5.1.1]: https://www.npmjs.com/package/html-minifier-terser +[htmlnano@1.1.1]: https://www.npmjs.com/package/htmlnano + +| Website | Source (KB) | [html-minifier-terser@5.1.1] | [htmlnano@1.1.1] | +|---------|------------:|----------------:|-----------:| +| [stackoverflow.blog](https://stackoverflow.blog/) | 95 | 87 | 82 | +| [github.com](https://github.com/) | 210 | 183 | 171 | +| [en.wikipedia.org](https://en.wikipedia.org/wiki/Main_Page) | 78 | 72 | 72 | +| [npmjs.com](https://www.npmjs.com/features) | 41 | 38 | 36 | +| **Avg. minify rate** | 0% | **9%** | **13%** | diff --git a/node_modules/htmlnano/docs/versioned_docs/version-1.1.1/020-usage.md b/node_modules/htmlnano/docs/versioned_docs/version-1.1.1/020-usage.md new file mode 100644 index 00000000..391ca085 --- /dev/null +++ b/node_modules/htmlnano/docs/versioned_docs/version-1.1.1/020-usage.md @@ -0,0 +1,77 @@ +# Usage + +## Gulp +```bash +npm install --save-dev gulp-htmlnano +``` + +```js +const gulp = require('gulp'); +const htmlnano = require('gulp-htmlnano'); +const options = { + removeComments: false +}; + +gulp.task('default', function() { + return gulp + .src('./index.html') + .pipe(htmlnano(options)) + .pipe(gulp.dest('./build')); +}); +``` + + +## Javascript +```js +const htmlnano = require('htmlnano'); +const options = { + removeEmptyAttributes: false, // Disable the module "removeEmptyAttributes" + collapseWhitespace: 'conservative' // Pass options to the module "collapseWhitespace" +}; +// posthtml, posthtml-render, and posthtml-parse options +const postHtmlOptions = { + sync: true, // https://github.com/posthtml/posthtml#usage + lowerCaseTags: true, // https://github.com/posthtml/posthtml-parser#options + quoteAllAttributes: false, // https://github.com/posthtml/posthtml-render#options +}; + +htmlnano + // "preset" arg might be skipped (see "Presets" section below for more info) + // "postHtmlOptions" arg might be skipped + .process(html, options, preset, postHtmlOptions) + .then(function (result) { + // result.html is minified + }) + .catch(function (err) { + console.error(err); + }); +``` + + +## PostHTML +Just add `htmlnano` as a final plugin: +```js +const posthtml = require('posthtml'); +const options = { + removeComments: false, // Disable the module "removeComments" + collapseWhitespace: 'conservative' // Pass options to the module "collapseWhitespace" +}; +const posthtmlPlugins = [ + /* other PostHTML plugins */ + + require('htmlnano')(options) +]; + +const posthtmlOptions = { + // See PostHTML docs +}; + +posthtml(posthtmlPlugins) + .process(html, posthtmlOptions) + .then(function (result) { + // result.html is minified + }) + .catch(function (err) { + console.error(err); + }); +``` \ No newline at end of file diff --git a/node_modules/htmlnano/docs/versioned_docs/version-1.1.1/030-config.md b/node_modules/htmlnano/docs/versioned_docs/version-1.1.1/030-config.md new file mode 100644 index 00000000..93d621d1 --- /dev/null +++ b/node_modules/htmlnano/docs/versioned_docs/version-1.1.1/030-config.md @@ -0,0 +1,21 @@ +# Config + +There are two main ways to configure htmlnano: + +## Passing options to `htmlnano` directly +This is the way described above in the examples. + +## Using configuration file +Alternatively, you might create a configuration file (e.g., `htmlnanorc.json` or `htmlnanorc.js`) or save options to `package.json` with `htmlnano` key. +`htmlnano` uses `cosmiconfig`, so refer to [its documentation](https://github.com/davidtheclark/cosmiconfig/blob/main/README.md) for a more detailed description. + +If you want to specify a preset that way, use `preset` key: + +```json +{ + "preset": "max", +} +``` + +Configuration files have lower precedence than passing options to `htmlnano` directly. +So if you use both ways, then the configuration file would be ignored. \ No newline at end of file diff --git a/node_modules/htmlnano/docs/versioned_docs/version-1.1.1/040-presets.md b/node_modules/htmlnano/docs/versioned_docs/version-1.1.1/040-presets.md new file mode 100644 index 00000000..a39ec121 --- /dev/null +++ b/node_modules/htmlnano/docs/versioned_docs/version-1.1.1/040-presets.md @@ -0,0 +1,75 @@ +# Presets + +A preset is just an object with modules config. + +Currently the following presets are available: +- [safe](https://github.com/posthtml/htmlnano/blob/master/lib/presets/safe.mjs) — a default preset for minifying a regular HTML in a safe way (without breaking anything) +- [ampSafe](https://github.com/posthtml/htmlnano/blob/master/lib/presets/ampSafe.mjs) - same as `safe` preset but for [AMP pages](https://www.ampproject.org/) +- [max](https://github.com/posthtml/htmlnano/blob/master/lib/presets/max.mjs) - maximal minification (might break some pages) + + +You can use them the following way: +```js +const htmlnano = require('htmlnano'); +const ampSafePreset = require('htmlnano').presets.ampSafe; +const options = { + // Your options +}; + +htmlnano + .process(html, options, ampSafePreset) + .then(function (result) { + // result.html is minified + }) + .catch(function (err) { + console.error(err); + }); +``` + +If you skip `preset` argument [`safe`](https://github.com/posthtml/htmlnano/blob/master/lib/presets/safe.mjs) preset would be used by default. + + +If you'd like to define your very own config without any presets pass an empty object as a preset: +```js +const htmlnano = require('htmlnano'); +const options = { + // Your options +}; + +htmlnano + .process(html, options, {}) + .then(function (result) { + // result.html is minified + }) + .catch(function (err) { + console.error(err); + }); +``` + + +You might create also your own presets: +```js +const htmlnano = require('htmlnano'); +// Preset for minifying email templates +const emailPreset = { + mergeStyles: true, + minifyCss: { + safe: true + }, +}; + +const options = { + // Some specific options +}; + +htmlnano + .process(html, options, emailPreset) + .then(function (result) { + // result.html is minified + }) + .catch(function (err) { + console.error(err); + }); +``` + +Feel free [to submit a PR](https://github.com/posthtml/htmlnano/issues/new) with your preset if it might be useful for other developers as well. diff --git a/node_modules/htmlnano/docs/versioned_docs/version-1.1.1/050-modules.md b/node_modules/htmlnano/docs/versioned_docs/version-1.1.1/050-modules.md new file mode 100644 index 00000000..d6d95745 --- /dev/null +++ b/node_modules/htmlnano/docs/versioned_docs/version-1.1.1/050-modules.md @@ -0,0 +1,785 @@ +# Modules + +By default the modules should only perform safe transforms, see the module documentation below for details. +You can disable modules by passing `false` as option, and enable them by passing `true`. + + +### collapseAttributeWhitespace +Collapse redundant white spaces in list-like attributes (`class`, `rel`, `ping`). + +#### Example +Source: +```html + +``` + +Minified: +```html + +``` + + + +### collapseWhitespace +Collapses redundant white spaces (including new lines). It doesn’t affect white spaces in the elements ` +
+ +``` + +Minified (with `all`): +```html +
hello world!answer
+``` + +Minified (with `aggressive`): +```html +
hello world! answer
+``` + +Minified (with `conservative`): +```html +
hello world! answer
+``` + + +### deduplicateAttributeValues +Remove duplicate values from list-like attributes (`class`, `rel`, `ping`). + +#### Example +Source: +```html + +``` + +Minified: +```html + +``` + + +### removeComments +#### Options +- `safe` – removes all HTML comments except the conditional comments and [``](https://yandex.com/support/webmaster/controlling-robot/html.xml) (default) +- `all` — removes all HTML comments +- A `RegExp` — only HTML comments matching the given regexp will be removed. +- A `Function` that returns boolean — removes HTML comments that can make the given callback function returns truthy value. + +#### Example + +Source: + +```js +{ + removeComments: 'all' +} +``` + +```html +
+``` + +Minified: + +```html +
+``` + +Source: + +```js +{ + removeComments: // +} +``` + +```html +
this text will not be indexedLorem ipsum dolor sit ametLorem ipsum dolor sit amet
+``` + +Minified: + +```html +
this text will not be indexedLorem ipsum dolor sit ametLorem ipsum dolor sit amet
+``` + +Source: + +```js +{ + removeComments: (comments) => { + if (comments.includes('noindex')) return true; + return false; + } +} +``` + +```html +
this text will not be indexedLorem ipsum dolor sit ametLorem ipsum dolor sit amet
+``` + +Minified: + +```html +
this text will not be indexedLorem ipsum dolor sit ametLorem ipsum dolor sit amet
+``` + + +### removeEmptyAttributes +Removes empty [safe-to-remove](https://github.com/posthtml/htmlnano/blob/master/lib/modules/removeEmptyAttributes.mjs) attributes. + +#### Side effects +This module could break your styles or JS if you use selectors with attributes: +```CSS +img[style=""] { + margin: 10px; +} +``` + +#### Example +Source: +```html + +``` + +Minified: +```html + +``` + +### removeAttributeQuotes +Remove quotes around attributes when possible, see [HTML Standard - 12.1.2.3 Attributes - Unquoted attribute value syntax](https://html.spec.whatwg.org/multipage/syntax.html#attributes-2). + +#### Example +Source: +```html +
+``` + +Minified: +```html +
+``` + +#### Notice +The feature is implemented by [posthtml-render's `quoteAllAttributes`](https://github.com/posthtml/posthtml-render#options), which is one of the PostHTML's option. So `removeAttributeQuotes` could be overriden by other PostHTML's plugins and PostHTML's configuration. + +For example: + +```js +posthtml([ + htmlnano({ + removeAttributeQuotes: true + }) +]).process(html, { + quoteAllAttributes: true +}) +``` + +`removeAttributeQuotes` will not work because PostHTML's `quoteAllAttributes` takes the priority. + +### removeUnusedCss + +Removes unused CSS inside ` + +``` + +Optimized: +```html +
+ +
+``` + + +### minifyCss +Minifies CSS with [cssnano](http://cssnano.co/) inside ` + +``` + +Minified: +```html +
+ +
+``` + + +### minifyJs +Minifies JS using [Terser](https://github.com/fabiosantoscode/terser) inside ` + +``` + +Minified: +```html +
+ +
+``` + + +### minifyJson +Minifies JSON inside ``. + +#### Example +Source: +```html + +``` + +Minified: +```html + +``` + + +### minifySvg +Minifies SVG inside `` tags using [SVGO](https://github.com/svg/svgo/). + +#### Options +See [the documentation of SVGO](https://github.com/svg/svgo/blob/master/README.md) for all supported options. +SVGO options can be passed directly to the `minifySvg` module: +```js +htmlnano.process(html, { + minifySvg: { + plugins: [ + { + name: 'preset-default', + params: { + overrides: { + builtinPluginName: { + optionName: 'optionValue' + }, + }, + }, + } + ] + } +}); +``` + +#### Example +Source: +```html + + + + + + SVG +` +``` + +Minified: +```html +SVG +``` + +### minifyConditionalComments + +Minify content inside conditional comments. + +#### Example + +Source: + +```html + +``` + +Minified: + +```html + +``` + +### removeRedundantAttributes +Removes redundant attributes from tags if they contain default values: +- `method="get"` from `
` +- `type="text"` from `
click
+``` + +Processed: +```html +
click
+``` + +**frequency** + +Source: +```html +
+``` + +Processed: +```html +
+``` + +### sortAttributes +Sort attributes inside elements. + +The module won't impact the plain-text size of the output. However it will improve the compression ratio of gzip/brotli used in HTTP compression. + +#### Options + +- `alphabetical`: Default option. Sort attributes in alphabetical order. +- `frequency`: Sort attributes by frequency. + +#### Example + +**alphabetical** + +Source: +```html + +``` + +Processed: +```html + +``` + +**frequency** + +Source: +```html + + +image +``` + +Processed: +```html + + +image +``` + +### minifyUrls +Convert absolute URL to relative URL using [relateurl](https://www.npmjs.com/package/relateurl). + +#### Options + +The base URL to resolve against. Support `String` & `URL`. + +```js +htmlnano.process(html, { + minifyUrls: 'https://example.com' // Valid configuration +}); +``` + +```js +htmlnano.process(html, { + minifyUrls: new URL('https://example.com') // Valid configuration +}); +``` + +```js +htmlnano.process(html, { + minifyUrls: false // The module will be disabled +}); +``` + +```js +htmlnano.process(html, { + minifyUrls: true // Invalid configuration, the module will be disabled +}); +``` + +#### Example + +**Basic Usage** + +Configuration: + +```js +htmlnano.process(html, { + minifyUrls: 'https://example.com' +}); +``` + +Source: + +```html +bar +``` + +Minified: + +```html +bar +``` + +**With sub-directory** + +Configuration: + +```js +htmlnano.process(html, { + minifyUrls: 'https://example.com/foo/baz/' +}); +``` + +Source: + +```html +bar +``` + +Minified: + +```html +bar +``` + +### removeOptionalTags +Remove certain tags that can be omitted, see [HTML Standard - 13.1.2.4 Optional tags](https://html.spec.whatwg.org/multipage/syntax.html#optional-tags). + +#### Example + +Source: + +```html +Title

Hi

+``` + +Minified: + +```html +Title

Hi

+``` + +#### Notice +Due to [the limitation of PostHTML](https://github.com/posthtml/htmlnano/issues/99), htmlnano can't remove only the start tag or the end tag of an element. Currently, htmlnano only supports removing the following optional tags, as htmlnano can remove their start tag and end tag at the same time: + +- `html` +- `head` +- `body` +- `colgroup` +- `tbody` + +### normalizeAttributeValues + +Normalize casing of attribute values. + +The module won't impact the plain-text size of the output. However it will improve the compression ratio of gzip/brotli used in HTTP compression. + +#### Example + +Source: + +```html +
+``` + +Minified: + +```html +
+``` diff --git a/node_modules/htmlnano/docs/versioned_docs/version-1.1.1/060-contribute.md b/node_modules/htmlnano/docs/versioned_docs/version-1.1.1/060-contribute.md new file mode 100644 index 00000000..18d2b7ba --- /dev/null +++ b/node_modules/htmlnano/docs/versioned_docs/version-1.1.1/060-contribute.md @@ -0,0 +1,16 @@ +# Contribute + +Since the minifier is modular, it's very easy to add new modules: + +1. Create a ES6-file inside `lib/modules/` with a function that does some minification. For example you can check [`lib/modules/example.mjs`](https://github.com/posthtml/htmlnano/blob/master/lib/modules/example.mjs). + +2. Add the module's name into one of those [presets](https://github.com/posthtml/htmlnano/tree/master/lib/presets). You can choose either `ampSafe`, `max`, or `safe`. + +3. Create a JS-file inside `test/modules/` with some unit-tests. + +4. Describe your module in the section "[Modules](https://github.com/posthtml/htmlnano/blob/master/README.md#modules)". + +5. Send me a pull request. + +Other types of contribution (bug fixes, documentation improves, etc) are also welcome! +Would like to contribute, but don't have any ideas what to do? Check out [our issues](https://github.com/posthtml/htmlnano/labels/help%20wanted). diff --git a/node_modules/htmlnano/docs/versioned_docs/version-2.0.0/010-introduction.md b/node_modules/htmlnano/docs/versioned_docs/version-2.0.0/010-introduction.md new file mode 100644 index 00000000..88953db7 --- /dev/null +++ b/node_modules/htmlnano/docs/versioned_docs/version-2.0.0/010-introduction.md @@ -0,0 +1,22 @@ +--- +sidebar_position: 1 +slug: / +--- + +# Introduction + +Modular HTML minifier, built on top of the [PostHTML](https://github.com/posthtml/posthtml). +Inspired by [cssnano](http://cssnano.co/). + + +## [Benchmark](https://github.com/maltsev/html-minifiers-benchmark/blob/master/README.md) +[html-minifier-terser@5.1.1]: https://www.npmjs.com/package/html-minifier-terser +[htmlnano@2.0.0]: https://www.npmjs.com/package/htmlnano + +| Website | Source (KB) | [html-minifier-terser@5.1.1] | [htmlnano@2.0.0] | +|---------|------------:|----------------:|-----------:| +| [stackoverflow.blog](https://stackoverflow.blog/) | 95 | 87 | 82 | +| [github.com](https://github.com/) | 210 | 183 | 171 | +| [en.wikipedia.org](https://en.wikipedia.org/wiki/Main_Page) | 78 | 72 | 72 | +| [npmjs.com](https://www.npmjs.com/features) | 41 | 38 | 36 | +| **Avg. minify rate** | 0% | **9%** | **13%** | diff --git a/node_modules/htmlnano/docs/versioned_docs/version-2.0.0/020-usage.md b/node_modules/htmlnano/docs/versioned_docs/version-2.0.0/020-usage.md new file mode 100644 index 00000000..391ca085 --- /dev/null +++ b/node_modules/htmlnano/docs/versioned_docs/version-2.0.0/020-usage.md @@ -0,0 +1,77 @@ +# Usage + +## Gulp +```bash +npm install --save-dev gulp-htmlnano +``` + +```js +const gulp = require('gulp'); +const htmlnano = require('gulp-htmlnano'); +const options = { + removeComments: false +}; + +gulp.task('default', function() { + return gulp + .src('./index.html') + .pipe(htmlnano(options)) + .pipe(gulp.dest('./build')); +}); +``` + + +## Javascript +```js +const htmlnano = require('htmlnano'); +const options = { + removeEmptyAttributes: false, // Disable the module "removeEmptyAttributes" + collapseWhitespace: 'conservative' // Pass options to the module "collapseWhitespace" +}; +// posthtml, posthtml-render, and posthtml-parse options +const postHtmlOptions = { + sync: true, // https://github.com/posthtml/posthtml#usage + lowerCaseTags: true, // https://github.com/posthtml/posthtml-parser#options + quoteAllAttributes: false, // https://github.com/posthtml/posthtml-render#options +}; + +htmlnano + // "preset" arg might be skipped (see "Presets" section below for more info) + // "postHtmlOptions" arg might be skipped + .process(html, options, preset, postHtmlOptions) + .then(function (result) { + // result.html is minified + }) + .catch(function (err) { + console.error(err); + }); +``` + + +## PostHTML +Just add `htmlnano` as a final plugin: +```js +const posthtml = require('posthtml'); +const options = { + removeComments: false, // Disable the module "removeComments" + collapseWhitespace: 'conservative' // Pass options to the module "collapseWhitespace" +}; +const posthtmlPlugins = [ + /* other PostHTML plugins */ + + require('htmlnano')(options) +]; + +const posthtmlOptions = { + // See PostHTML docs +}; + +posthtml(posthtmlPlugins) + .process(html, posthtmlOptions) + .then(function (result) { + // result.html is minified + }) + .catch(function (err) { + console.error(err); + }); +``` \ No newline at end of file diff --git a/node_modules/htmlnano/docs/versioned_docs/version-2.0.0/030-config.md b/node_modules/htmlnano/docs/versioned_docs/version-2.0.0/030-config.md new file mode 100644 index 00000000..b9416b11 --- /dev/null +++ b/node_modules/htmlnano/docs/versioned_docs/version-2.0.0/030-config.md @@ -0,0 +1,21 @@ +# Config + +There are two main ways to configure htmlnano: + +## Passing options to `htmlnano` directly +This is the way described above in the examples. + +## Using configuration file +Alternatively, you might create a configuration file (e.g., `htmlnanorc.json` or `htmlnanorc.js`) or save options to `package.json` with `htmlnano` key. +`htmlnano` uses `cosmiconfig`, so refer to [its documentation](https://github.com/davidtheclark/cosmiconfig/blob/main/README.md) for a more detailed description. + +If you want to specify a preset that way, use `preset` key: + +```json +{ + "preset": "max", +} +``` + +Configuration files have lower precedence than passing options to `htmlnano` directly. +So if you use both ways, then the configuration file would be ignored. diff --git a/node_modules/htmlnano/docs/versioned_docs/version-2.0.0/040-presets.md b/node_modules/htmlnano/docs/versioned_docs/version-2.0.0/040-presets.md new file mode 100644 index 00000000..a39ec121 --- /dev/null +++ b/node_modules/htmlnano/docs/versioned_docs/version-2.0.0/040-presets.md @@ -0,0 +1,75 @@ +# Presets + +A preset is just an object with modules config. + +Currently the following presets are available: +- [safe](https://github.com/posthtml/htmlnano/blob/master/lib/presets/safe.mjs) — a default preset for minifying a regular HTML in a safe way (without breaking anything) +- [ampSafe](https://github.com/posthtml/htmlnano/blob/master/lib/presets/ampSafe.mjs) - same as `safe` preset but for [AMP pages](https://www.ampproject.org/) +- [max](https://github.com/posthtml/htmlnano/blob/master/lib/presets/max.mjs) - maximal minification (might break some pages) + + +You can use them the following way: +```js +const htmlnano = require('htmlnano'); +const ampSafePreset = require('htmlnano').presets.ampSafe; +const options = { + // Your options +}; + +htmlnano + .process(html, options, ampSafePreset) + .then(function (result) { + // result.html is minified + }) + .catch(function (err) { + console.error(err); + }); +``` + +If you skip `preset` argument [`safe`](https://github.com/posthtml/htmlnano/blob/master/lib/presets/safe.mjs) preset would be used by default. + + +If you'd like to define your very own config without any presets pass an empty object as a preset: +```js +const htmlnano = require('htmlnano'); +const options = { + // Your options +}; + +htmlnano + .process(html, options, {}) + .then(function (result) { + // result.html is minified + }) + .catch(function (err) { + console.error(err); + }); +``` + + +You might create also your own presets: +```js +const htmlnano = require('htmlnano'); +// Preset for minifying email templates +const emailPreset = { + mergeStyles: true, + minifyCss: { + safe: true + }, +}; + +const options = { + // Some specific options +}; + +htmlnano + .process(html, options, emailPreset) + .then(function (result) { + // result.html is minified + }) + .catch(function (err) { + console.error(err); + }); +``` + +Feel free [to submit a PR](https://github.com/posthtml/htmlnano/issues/new) with your preset if it might be useful for other developers as well. diff --git a/node_modules/htmlnano/docs/versioned_docs/version-2.0.0/050-modules.md b/node_modules/htmlnano/docs/versioned_docs/version-2.0.0/050-modules.md new file mode 100644 index 00000000..16c099a2 --- /dev/null +++ b/node_modules/htmlnano/docs/versioned_docs/version-2.0.0/050-modules.md @@ -0,0 +1,838 @@ +# Modules + +By default the modules should only perform safe transforms, see the module documentation below for details. +You can disable modules by passing `false` as option, and enable them by passing `true`. + + +### collapseAttributeWhitespace +Collapse redundant white spaces in list-like attributes (`class`, `rel`, `ping`). + +#### Example +Source: +```html + +``` + +Minified: +```html + +``` + + + +### collapseWhitespace +Collapses redundant white spaces (including new lines). It doesn’t affect white spaces in the elements ` +
+ +``` + +Minified (with `all`): +```html +
hello world!answer
+``` + +Minified (with `aggressive`): +```html +
hello world! answer
+``` + +Minified (with `conservative`): +```html +
hello world! answer
+``` + + +### deduplicateAttributeValues +Remove duplicate values from list-like attributes (`class`, `rel`, `ping`). + +#### Example +Source: +```html + +``` + +Minified: +```html + +``` + + +### removeComments +#### Options +- `safe` – removes all HTML comments except the conditional comments and [``](https://yandex.com/support/webmaster/controlling-robot/html.xml) (default) +- `all` — removes all HTML comments +- A `RegExp` — only HTML comments matching the given regexp will be removed. +- A `Function` that returns boolean — removes HTML comments that can make the given callback function returns truthy value. + +#### Example + +Source: + +```js +{ + removeComments: 'all' +} +``` + +```html +
+``` + +Minified: + +```html +
+``` + +Source: + +```js +{ + removeComments: // +} +``` + +```html +
this text will not be indexedLorem ipsum dolor sit ametLorem ipsum dolor sit amet
+``` + +Minified: + +```html +
this text will not be indexedLorem ipsum dolor sit ametLorem ipsum dolor sit amet
+``` + +Source: + +```js +{ + removeComments: (comments) => { + if (comments.includes('noindex')) return true; + return false; + } +} +``` + +```html +
this text will not be indexedLorem ipsum dolor sit ametLorem ipsum dolor sit amet
+``` + +Minified: + +```html +
this text will not be indexedLorem ipsum dolor sit ametLorem ipsum dolor sit amet
+``` + + +### removeEmptyAttributes +Removes empty [safe-to-remove](https://github.com/posthtml/htmlnano/blob/master/lib/modules/removeEmptyAttributes.mjs) attributes. + +#### Side effects +This module could break your styles or JS if you use selectors with attributes: +```CSS +img[style=""] { + margin: 10px; +} +``` + +#### Example +Source: +```html + +``` + +Minified: +```html + +``` + +### removeAttributeQuotes +Remove quotes around attributes when possible, see [HTML Standard - 12.1.2.3 Attributes - Unquoted attribute value syntax](https://html.spec.whatwg.org/multipage/syntax.html#attributes-2). + +#### Example +Source: +```html +
+``` + +Minified: +```html +
+``` + +#### Notice +The feature is implemented by [posthtml-render's `quoteAllAttributes`](https://github.com/posthtml/posthtml-render#options), which is one of the PostHTML's option. So `removeAttributeQuotes` could be overriden by other PostHTML's plugins and PostHTML's configuration. + +For example: + +```js +posthtml([ + htmlnano({ + removeAttributeQuotes: true + }) +]).process(html, { + quoteAllAttributes: true +}) +``` + +`removeAttributeQuotes` will not work because PostHTML's `quoteAllAttributes` takes the priority. + +### removeUnusedCss + +Removes unused CSS inside ` + +``` + +Optimized: +```html +
+ +
+``` + + +### minifyCss +Minifies CSS with [cssnano](http://cssnano.co/) inside ` + +``` + +Minified: +```html +
+ +
+``` + + +### minifyJs +Minifies JS using [Terser](https://github.com/fabiosantoscode/terser) inside ` + +``` + +Minified: +```html +
+ +
+``` + + +### minifyJson +Minifies JSON inside ``. + +#### Example +Source: +```html + +``` + +Minified: +```html + +``` + + +### minifySvg +Minifies SVG inside `` tags using [SVGO](https://github.com/svg/svgo/). + +#### Options +See [the documentation of SVGO](https://github.com/svg/svgo/blob/master/README.md) for all supported options. +SVGO options can be passed directly to the `minifySvg` module: +```js +htmlnano.process(html, { + minifySvg: { + plugins: [ + { + name: 'preset-default', + params: { + overrides: { + builtinPluginName: { + optionName: 'optionValue' + }, + }, + }, + } + ] + } +}); +``` + +#### Example +Source: +```html + + + + + + SVG +` +``` + +Minified: +```html +SVG +``` + +### minifyConditionalComments + +Minify content inside conditional comments. + +#### Example + +Source: + +```html + +``` + +Minified: + +```html + +``` + +### removeRedundantAttributes +Removes redundant attributes from tags if they contain default values: +- `method="get"` from `
` +- `type="text"` from `
click
+``` + +Processed: +```html +
click
+``` + +**frequency** + +Source: +```html +
+``` + +Processed: +```html +
+``` + +### sortAttributes +Sort attributes inside elements. + +The module won't impact the plain-text size of the output. However it will improve the compression ratio of gzip/brotli used in HTTP compression. + +#### Options + +- `alphabetical`: Default option. Sort attributes in alphabetical order. +- `frequency`: Sort attributes by frequency. + +#### Example + +**alphabetical** + +Source: +```html + +``` + +Processed: +```html + +``` + +**frequency** + +Source: +```html + + +image +``` + +Processed: +```html + + +image +``` + +### minifyUrls +Convert absolute URL to relative URL using [relateurl](https://www.npmjs.com/package/relateurl). + +You have to install `relateurl`, `terser` and `srcset` in order to use this feature: + +```bash +npm install --save-dev relateurl terser srcset +# if you prefer yarn +# yarn add --dev relateurl terser srcset +# if you prefer pnpm +# pnpm install --save-dev relateurl terser srcset +``` + +#### Options + +The base URL to resolve against. Support `String` & `URL`. + +```js +htmlnano.process(html, { + minifyUrls: 'https://example.com' // Valid configuration +}); +``` + +```js +htmlnano.process(html, { + minifyUrls: new URL('https://example.com') // Valid configuration +}); +``` + +```js +htmlnano.process(html, { + minifyUrls: false // The module will be disabled +}); +``` + +```js +htmlnano.process(html, { + minifyUrls: true // Invalid configuration, the module will be disabled +}); +``` + +#### Example + +**Basic Usage** + +Configuration: + +```js +htmlnano.process(html, { + minifyUrls: 'https://example.com' +}); +``` + +Source: + +```html +bar +``` + +Minified: + +```html +bar +``` + +**With sub-directory** + +Configuration: + +```js +htmlnano.process(html, { + minifyUrls: 'https://example.com/foo/baz/' +}); +``` + +Source: + +```html +bar +``` + +Minified: + +```html +bar +``` + +### removeOptionalTags +Remove certain tags that can be omitted, see [HTML Standard - 13.1.2.4 Optional tags](https://html.spec.whatwg.org/multipage/syntax.html#optional-tags). + +#### Example + +Source: + +```html +Title

Hi

+``` + +Minified: + +```html +Title

Hi

+``` + +#### Notice +Due to [the limitation of PostHTML](https://github.com/posthtml/htmlnano/issues/99), htmlnano can't remove only the start tag or the end tag of an element. Currently, htmlnano only supports removing the following optional tags, as htmlnano can remove their start tag and end tag at the same time: + +- `html` +- `head` +- `body` +- `colgroup` +- `tbody` + +### normalizeAttributeValues + +Normalize casing of attribute values. + +The module won't impact the plain-text size of the output. However it will improve the compression ratio of gzip/brotli used in HTTP compression. + +#### Example + +Source: + +```html +
+``` + +Minified: + +```html +
+``` diff --git a/node_modules/htmlnano/docs/versioned_docs/version-2.0.0/060-contribute.md b/node_modules/htmlnano/docs/versioned_docs/version-2.0.0/060-contribute.md new file mode 100644 index 00000000..18d2b7ba --- /dev/null +++ b/node_modules/htmlnano/docs/versioned_docs/version-2.0.0/060-contribute.md @@ -0,0 +1,16 @@ +# Contribute + +Since the minifier is modular, it's very easy to add new modules: + +1. Create a ES6-file inside `lib/modules/` with a function that does some minification. For example you can check [`lib/modules/example.mjs`](https://github.com/posthtml/htmlnano/blob/master/lib/modules/example.mjs). + +2. Add the module's name into one of those [presets](https://github.com/posthtml/htmlnano/tree/master/lib/presets). You can choose either `ampSafe`, `max`, or `safe`. + +3. Create a JS-file inside `test/modules/` with some unit-tests. + +4. Describe your module in the section "[Modules](https://github.com/posthtml/htmlnano/blob/master/README.md#modules)". + +5. Send me a pull request. + +Other types of contribution (bug fixes, documentation improves, etc) are also welcome! +Would like to contribute, but don't have any ideas what to do? Check out [our issues](https://github.com/posthtml/htmlnano/labels/help%20wanted). diff --git a/node_modules/htmlnano/docs/versioned_sidebars/version-1.1.1-sidebars.json b/node_modules/htmlnano/docs/versioned_sidebars/version-1.1.1-sidebars.json new file mode 100644 index 00000000..974097c3 --- /dev/null +++ b/node_modules/htmlnano/docs/versioned_sidebars/version-1.1.1-sidebars.json @@ -0,0 +1,8 @@ +{ + "version-1.1.1/tutorialSidebar": [ + { + "type": "autogenerated", + "dirName": "." + } + ] +} diff --git a/node_modules/htmlnano/docs/versioned_sidebars/version-2.0.0-sidebars.json b/node_modules/htmlnano/docs/versioned_sidebars/version-2.0.0-sidebars.json new file mode 100644 index 00000000..94ca8dd4 --- /dev/null +++ b/node_modules/htmlnano/docs/versioned_sidebars/version-2.0.0-sidebars.json @@ -0,0 +1,8 @@ +{ + "version-2.0.0/tutorialSidebar": [ + { + "type": "autogenerated", + "dirName": "." + } + ] +} diff --git a/node_modules/htmlnano/docs/versions.json b/node_modules/htmlnano/docs/versions.json new file mode 100644 index 00000000..cbe532c8 --- /dev/null +++ b/node_modules/htmlnano/docs/versions.json @@ -0,0 +1,4 @@ +[ + "2.0.0", + "1.1.1" +] diff --git a/node_modules/htmlnano/index.cjs b/node_modules/htmlnano/index.cjs new file mode 100644 index 00000000..d37645c8 --- /dev/null +++ b/node_modules/htmlnano/index.cjs @@ -0,0 +1,11 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +const htmlnano = require("./lib/htmlnano.cjs").default; +exports.default = htmlnano; + +// for backward compatibility with require('htmlnano') +module.exports = htmlnano; diff --git a/node_modules/htmlnano/index.d.cts b/node_modules/htmlnano/index.d.cts new file mode 100644 index 00000000..82ba5e24 --- /dev/null +++ b/node_modules/htmlnano/index.d.cts @@ -0,0 +1,3 @@ +export type * from './index.d'; +import htmlnano from './index.d'; +export default htmlnano; diff --git a/node_modules/htmlnano/index.d.mts b/node_modules/htmlnano/index.d.mts new file mode 100644 index 00000000..82ba5e24 --- /dev/null +++ b/node_modules/htmlnano/index.d.mts @@ -0,0 +1,3 @@ +export type * from './index.d'; +import htmlnano from './index.d'; +export default htmlnano; diff --git a/node_modules/htmlnano/index.d.ts b/node_modules/htmlnano/index.d.ts new file mode 100644 index 00000000..ac3ef444 --- /dev/null +++ b/node_modules/htmlnano/index.d.ts @@ -0,0 +1,93 @@ +import type PostHTML from "posthtml"; +import type { MinifyOptions } from "terser"; +import type { Options as CssNanoOptions } from "cssnano"; +import type { Config as SvgoOptimizeOptions } from "svgo"; + +export interface HtmlnanoOptions { + skipConfigLoading?: boolean; + collapseAttributeWhitespace?: boolean; + collapseBooleanAttributes?: { + amphtml?: boolean; + }; + collapseWhitespace?: "conservative" | "all" | "aggressive"; + custom?: (tree: PostHTML.Node, options?: any) => PostHTML.Node; + deduplicateAttributeValues?: boolean; + minifyUrls?: URL | string | false; + mergeStyles?: boolean; + mergeScripts?: boolean; + minifyCss?: CssNanoOptions | boolean; + minifyConditionalComments?: boolean; + minifyJs?: MinifyOptions | boolean; + minifyJson?: boolean; + minifySvg?: SvgoOptimizeOptions | boolean; + normalizeAttributeValues?: boolean; + removeAttributeQuotes?: boolean; + removeComments?: boolean | "safe" | "all" | RegExp | (() => boolean); + removeEmptyAttributes?: boolean; + removeRedundantAttributes?: boolean; + removeOptionalTags?: boolean; + removeUnusedCss?: boolean; + sortAttributes?: boolean | "alphabetical" | "frequency"; + sortAttributesWithLists?: boolean | "alphabetical" | "frequency"; +} + +export interface HtmlnanoPreset extends Omit {} + +export interface Presets { + safe: HtmlnanoPreset; + ampSafe: HtmlnanoPreset; + max: HtmlnanoPreset; +} + +type Preset = Presets[keyof Presets]; + +export function loadConfig( + options?: HtmlnanoOptions, + preset?: Preset, + configPath?: string +): [HtmlnanoOptions | {}, Preset]; + +declare function htmlnano( + options?: HtmlnanoOptions, + preset?: Preset +): (tree: PostHTML.Node) => Promise>; + +interface PostHtmlOptions { + directives?: Array<{ + name: string | RegExp; + start: string; + end: string; + }>; + sourceLocations?: boolean; + recognizeNoValueAttribute?: boolean; + xmlMode?: boolean; + decodeEntities?: boolean; + lowerCaseTags?: boolean; + lowerCaseAttributeNames?: boolean; + recognizeCDATA?: boolean; + recognizeSelfClosing?: boolean; + Tokenizer?: any; +} + +declare namespace htmlnano { + export function process( + html: string, + options?: HtmlnanoOptions, + preset?: Preset, + postHtmlOptions?: PostHtmlOptions + ): Promise>; + + export function getRequiredOptionalDependencies( + optionsRun?: HtmlnanoOptions, + presetRun?: Preset + ): string[]; + + export function htmlMinimizerWebpackPluginMinify( + input: { [file: string]: string }, + minimizerOptions?: HtmlnanoOptions + ): any; + + export const presets: Presets; +} + +export default htmlnano; diff --git a/node_modules/htmlnano/index.mjs b/node_modules/htmlnano/index.mjs new file mode 100644 index 00000000..bcff3b95 --- /dev/null +++ b/node_modules/htmlnano/index.mjs @@ -0,0 +1,2 @@ +import htmlnano from './lib/htmlnano.mjs'; +export default htmlnano; diff --git a/node_modules/htmlnano/lib/helpers.cjs b/node_modules/htmlnano/lib/helpers.cjs new file mode 100644 index 00000000..11d018b9 --- /dev/null +++ b/node_modules/htmlnano/lib/helpers.cjs @@ -0,0 +1,79 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.extractCssFromStyleNode = extractCssFromStyleNode; +exports.isAmpBoilerplate = isAmpBoilerplate; +exports.isComment = isComment; +exports.isConditionalComment = isConditionalComment; +exports.isEventHandler = isEventHandler; +exports.isStyleNode = isStyleNode; +exports.optionalImport = optionalImport; +function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } +function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } +function __transformExtension(filepath, extMapping) { + if (!filepath.startsWith('./') && !filepath.startsWith('../')) { + // Package import + return filepath; + } + const idx = filepath.lastIndexOf('.'); + if (idx === -1 || filepath.includes('/', idx)) { + // No extension + const newExt = extMapping['']; + if (newExt) { + return filepath + newExt; + } + return filepath; + } + for (let [origExt, newExt] of Object.entries(extMapping).sort((a, b) => b[0].length - a[0].length)) { + if (filepath.endsWith(origExt)) { + return filepath.slice(0, -origExt.length) + newExt; + } + } + return filepath; +} +const ampBoilerplateAttributes = ['amp-boilerplate', 'amp4ads-boilerplate', 'amp4email-boilerplate']; +function isAmpBoilerplate(node) { + if (!node.attrs) { + return false; + } + for (const attr of ampBoilerplateAttributes) { + if (attr in node.attrs) { + return true; + } + } + return false; +} +function isComment(content) { + if (typeof content === 'string') { + return content.trim().startsWith(''; +} +function isStyleNode(node) { + return node.tag === 'style' && !isAmpBoilerplate(node) && 'content' in node && node.content.length > 0; +} +function extractCssFromStyleNode(node) { + return Array.isArray(node.content) ? node.content.join(' ') : node.content; +} +function isEventHandler(attributeName) { + return attributeName && attributeName.slice && attributeName.slice(0, 2).toLowerCase() === 'on' && attributeName.length >= 5; +} +async function optionalImport(moduleName) { + try { + const module = await (specifier => new Promise(r => r(`${specifier}`)).then(s => _interopRequireWildcard(require(s))))(__transformExtension(moduleName, { + ".mjs": ".cjs" + })); + return module.default || module; + } catch (e) { + if (e.code === 'MODULE_NOT_FOUND' || e.code === 'ERR_MODULE_NOT_FOUND') { + return null; + } + throw e; + } +} \ No newline at end of file diff --git a/node_modules/htmlnano/lib/helpers.mjs b/node_modules/htmlnano/lib/helpers.mjs new file mode 100644 index 00000000..f0e07af6 --- /dev/null +++ b/node_modules/htmlnano/lib/helpers.mjs @@ -0,0 +1,53 @@ +const ampBoilerplateAttributes = [ + 'amp-boilerplate', + 'amp4ads-boilerplate', + 'amp4email-boilerplate' +]; + +export function isAmpBoilerplate(node) { + if (!node.attrs) { + return false; + } + for (const attr of ampBoilerplateAttributes) { + if (attr in node.attrs) { + return true; + } + } + return false; +} + +export function isComment(content) { + if (typeof content === 'string') { + return content.trim().startsWith(''; +} + +export function isStyleNode(node) { + return node.tag === 'style' && !isAmpBoilerplate(node) && 'content' in node && node.content.length > 0; +} + +export function extractCssFromStyleNode(node) { + return Array.isArray(node.content) ? node.content.join(' ') : node.content; +} + +export function isEventHandler(attributeName) { + return attributeName && attributeName.slice && attributeName.slice(0, 2).toLowerCase() === 'on' && attributeName.length >= 5; +} + +export async function optionalImport(moduleName) { + try { + const module = await import(moduleName); + return module.default || module; + } catch (e) { + if (e.code === 'MODULE_NOT_FOUND' || e.code === 'ERR_MODULE_NOT_FOUND') { + return null; + } + throw e; + } +} diff --git a/node_modules/htmlnano/lib/htmlnano.cjs b/node_modules/htmlnano/lib/htmlnano.cjs new file mode 100644 index 00000000..7b01e7ee --- /dev/null +++ b/node_modules/htmlnano/lib/htmlnano.cjs @@ -0,0 +1,200 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = void 0; +exports.loadConfig = loadConfig; +var _posthtml = _interopRequireDefault(require("posthtml")); +var _cosmiconfig = require("cosmiconfig"); +var _safe = _interopRequireDefault(require("./presets/safe.cjs")); +var _ampSafe = _interopRequireDefault(require("./presets/ampSafe.cjs")); +var _max = _interopRequireDefault(require("./presets/max.cjs")); +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +function __transformExtension(filepath, extMapping) { + if (!filepath.startsWith('./') && !filepath.startsWith('../')) { + // Package import + return filepath; + } + const idx = filepath.lastIndexOf('.'); + if (idx === -1 || filepath.includes('/', idx)) { + // No extension + const newExt = extMapping['']; + if (newExt) { + return filepath + newExt; + } + return filepath; + } + for (let [origExt, newExt] of Object.entries(extMapping).sort((a, b) => b[0].length - a[0].length)) { + if (filepath.endsWith(origExt)) { + return filepath.slice(0, -origExt.length) + newExt; + } + } + return filepath; +} +function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } +function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } +const presets = { + safe: _safe.default, + ampSafe: _ampSafe.default, + max: _max.default +}; +function loadConfig(options, preset, configPath) { + let { + skipConfigLoading = false, + ...rest + } = options || {}; + if (!skipConfigLoading) { + const explorer = (0, _cosmiconfig.cosmiconfigSync)('htmlnano'); + const rc = configPath ? explorer.load(configPath) : explorer.search(); + if (rc) { + const { + preset: presetName + } = rc.config; + if (presetName) { + if (!preset && presets[presetName]) { + preset = presets[presetName]; + } + delete rc.config.preset; + } + if (!options) { + rest = rc.config; + } + } + } + return [rest || {}, preset || _safe.default]; +} +const optionalDependencies = { + minifyCss: ['cssnano', 'postcss'], + minifyJs: ['terser'], + minifyUrl: ['relateurl', 'srcset', 'terser'], + minifySvg: ['svgo'] +}; +const modules = { + collapseAttributeWhitespace: () => Promise.resolve().then(() => _interopRequireWildcard(require("./modules/collapseAttributeWhitespace.cjs"))), + collapseBooleanAttributes: () => Promise.resolve().then(() => _interopRequireWildcard(require("./modules/collapseBooleanAttributes.cjs"))), + collapseWhitespace: () => Promise.resolve().then(() => _interopRequireWildcard(require("./modules/collapseWhitespace.cjs"))), + custom: () => Promise.resolve().then(() => _interopRequireWildcard(require("./modules/custom.cjs"))), + deduplicateAttributeValues: () => Promise.resolve().then(() => _interopRequireWildcard(require("./modules/deduplicateAttributeValues.cjs"))), + example: () => Promise.resolve().then(() => _interopRequireWildcard(require("./modules/example.cjs"))), + mergeScripts: () => Promise.resolve().then(() => _interopRequireWildcard(require("./modules/mergeScripts.cjs"))), + mergeStyles: () => Promise.resolve().then(() => _interopRequireWildcard(require("./modules/mergeStyles.cjs"))), + minifyConditionalComments: () => Promise.resolve().then(() => _interopRequireWildcard(require("./modules/minifyConditionalComments.cjs"))), + minifyCss: () => Promise.resolve().then(() => _interopRequireWildcard(require("./modules/minifyCss.cjs"))), + minifyJs: () => Promise.resolve().then(() => _interopRequireWildcard(require("./modules/minifyJs.cjs"))), + minifyJson: () => Promise.resolve().then(() => _interopRequireWildcard(require("./modules/minifyJson.cjs"))), + minifySvg: () => Promise.resolve().then(() => _interopRequireWildcard(require("./modules/minifySvg.cjs"))), + minifyUrls: () => Promise.resolve().then(() => _interopRequireWildcard(require("./modules/minifyUrls.cjs"))), + normalizeAttributeValues: () => Promise.resolve().then(() => _interopRequireWildcard(require("./modules/normalizeAttributeValues.cjs"))), + removeAttributeQuotes: () => Promise.resolve().then(() => _interopRequireWildcard(require("./modules/removeAttributeQuotes.cjs"))), + removeComments: () => Promise.resolve().then(() => _interopRequireWildcard(require("./modules/removeComments.cjs"))), + removeEmptyAttributes: () => Promise.resolve().then(() => _interopRequireWildcard(require("./modules/removeEmptyAttributes.cjs"))), + removeOptionalTags: () => Promise.resolve().then(() => _interopRequireWildcard(require("./modules/removeOptionalTags.cjs"))), + removeRedundantAttributes: () => Promise.resolve().then(() => _interopRequireWildcard(require("./modules/removeRedundantAttributes.cjs"))), + removeUnusedCss: () => Promise.resolve().then(() => _interopRequireWildcard(require("./modules/removeUnusedCss.cjs"))), + sortAttributes: () => Promise.resolve().then(() => _interopRequireWildcard(require("./modules/sortAttributes.cjs"))), + sortAttributesWithLists: () => Promise.resolve().then(() => _interopRequireWildcard(require("./modules/sortAttributesWithLists.cjs"))) +}; +function htmlnano(optionsRun, presetRun) { + let [options, preset] = loadConfig(optionsRun, presetRun); + return async function minifier(tree) { + const nodeHandlers = []; + const attrsHandlers = []; + const contentsHandlers = []; + options = { + ...preset, + ...options + }; + let promise = Promise.resolve(tree); + for (const [moduleName, moduleOptions] of Object.entries(options)) { + if (!moduleOptions) { + // The module is disabled + continue; + } + if (_safe.default[moduleName] === undefined) { + throw new Error('Module "' + moduleName + '" is not defined'); + } + (optionalDependencies[moduleName] || []).forEach(async dependency => { + try { + await (specifier => new Promise(r => r(`${specifier}`)).then(s => _interopRequireWildcard(require(s))))(__transformExtension(dependency, { + ".mjs": ".cjs" + })); + } catch (e) { + if (e.code === 'MODULE_NOT_FOUND' || e.code === 'ERR_MODULE_NOT_FOUND') { + console.warn(`You have to install "${dependency}" in order to use htmlnano's "${moduleName}" module`); + } else { + throw e; + } + } + }); + const module = moduleName in modules ? await modules[moduleName]() : await (specifier => new Promise(r => r(`${specifier}`)).then(s => _interopRequireWildcard(require(s))))(__transformExtension(`./modules/${moduleName}.mjs`, { + ".mjs": ".cjs" + })); + if (typeof module.onAttrs === 'function') { + attrsHandlers.push(module.onAttrs(options, moduleOptions)); + } + if (typeof module.onContent === 'function') { + contentsHandlers.push(module.onContent(options, moduleOptions)); + } + if (typeof module.onNode === 'function') { + nodeHandlers.push(module.onNode(options, moduleOptions)); + } + if (typeof module.default === 'function') { + promise = promise.then(async tree => await module.default(tree, options, moduleOptions)); + } + } + if (attrsHandlers.length + contentsHandlers.length + nodeHandlers.length === 0) { + return promise; + } + return promise.then(tree => { + tree.walk(node => { + if (node) { + if (node.attrs && typeof node.attrs === 'object') { + // Convert all attrs' key to lower case + let newAttrsObj = {}; + Object.entries(node.attrs).forEach(([attrName, attrValue]) => { + newAttrsObj[attrName.toLowerCase()] = attrValue; + }); + for (const handler of attrsHandlers) { + newAttrsObj = handler(newAttrsObj, node); + } + node.attrs = newAttrsObj; + } + if (node.content) { + node.content = typeof node.content === 'string' ? [node.content] : node.content; + if (Array.isArray(node.content) && node.content.length > 0) { + for (const handler of contentsHandlers) { + const result = handler(node.content, node); + node.content = typeof result === 'string' ? [result] : result; + } + } + } + for (const handler of nodeHandlers) { + node = handler(node); + } + } + return node; + }); + return tree; + }); + }; +} +htmlnano.getRequiredOptionalDependencies = function (optionsRun, presetRun) { + const [options] = loadConfig(optionsRun, presetRun); + return [...new Set(Object.keys(options).filter(moduleName => options[moduleName]).map(moduleName => optionalDependencies[moduleName]).flat())]; +}; +htmlnano.process = function (html, options, preset, postHtmlOptions) { + return (0, _posthtml.default)([htmlnano(options, preset)]).process(html, postHtmlOptions); +}; + +// https://github.com/webpack-contrib/html-minimizer-webpack-plugin/blob/faca00f2219514bc671c5942685721f0b5dbaa70/src/utils.js#L74 +htmlnano.htmlMinimizerWebpackPluginMinify = function htmlNano(input, minimizerOptions = {}) { + const [[, code]] = Object.entries(input); + return htmlnano.process(code, minimizerOptions, presets.safe).then(result => { + return { + code: result.html + }; + }); +}; +htmlnano.presets = presets; +var _default = exports.default = htmlnano; \ No newline at end of file diff --git a/node_modules/htmlnano/lib/htmlnano.mjs b/node_modules/htmlnano/lib/htmlnano.mjs new file mode 100644 index 00000000..4652b9cb --- /dev/null +++ b/node_modules/htmlnano/lib/htmlnano.mjs @@ -0,0 +1,196 @@ +import posthtml from 'posthtml'; +import { cosmiconfigSync } from 'cosmiconfig'; +import safePreset from './presets/safe.mjs'; +import ampSafePreset from './presets/ampSafe.mjs'; +import maxPreset from './presets/max.mjs'; + +const presets = { + safe: safePreset, + ampSafe: ampSafePreset, + max: maxPreset, +}; + +export function loadConfig(options, preset, configPath) { + let { skipConfigLoading = false, ...rest } = options || {}; + + if (!skipConfigLoading) { + const explorer = cosmiconfigSync('htmlnano'); + const rc = configPath ? explorer.load(configPath) : explorer.search(); + if (rc) { + const { preset: presetName } = rc.config; + if (presetName) { + if (!preset && presets[presetName]) { + preset = presets[presetName]; + } + + delete rc.config.preset; + } + + if (!options) { + rest = rc.config; + } + } + } + + return [ + rest || {}, + preset || safePreset, + ]; +} + +const optionalDependencies = { + minifyCss: ['cssnano', 'postcss'], + minifyJs: ['terser'], + minifyUrl: ['relateurl', 'srcset', 'terser'], + minifySvg: ['svgo'], +}; + + +const modules = { + collapseAttributeWhitespace: () => import('./modules/collapseAttributeWhitespace.mjs'), + collapseBooleanAttributes: () => import('./modules/collapseBooleanAttributes.mjs'), + collapseWhitespace: () => import('./modules/collapseWhitespace.mjs'), + custom: () => import('./modules/custom.mjs'), + deduplicateAttributeValues: () => import('./modules/deduplicateAttributeValues.mjs'), + example: () => import('./modules/example.mjs'), + mergeScripts: () => import('./modules/mergeScripts.mjs'), + mergeStyles: () => import('./modules/mergeStyles.mjs'), + minifyConditionalComments: () => import('./modules/minifyConditionalComments.mjs'), + minifyCss: () => import('./modules/minifyCss.mjs'), + minifyJs: () => import('./modules/minifyJs.mjs'), + minifyJson: () => import('./modules/minifyJson.mjs'), + minifySvg: () => import('./modules/minifySvg.mjs'), + minifyUrls: () => import('./modules/minifyUrls.mjs'), + normalizeAttributeValues: () => import('./modules/normalizeAttributeValues.mjs'), + removeAttributeQuotes: () => import('./modules/removeAttributeQuotes.mjs'), + removeComments: () => import('./modules/removeComments.mjs'), + removeEmptyAttributes: () => import('./modules/removeEmptyAttributes.mjs'), + removeOptionalTags: () => import('./modules/removeOptionalTags.mjs'), + removeRedundantAttributes: () => import('./modules/removeRedundantAttributes.mjs'), + removeUnusedCss: () => import('./modules/removeUnusedCss.mjs'), + sortAttributes: () => import('./modules/sortAttributes.mjs'), + sortAttributesWithLists: () => import('./modules/sortAttributesWithLists.mjs'), +}; + +function htmlnano(optionsRun, presetRun) { + let [options, preset] = loadConfig(optionsRun, presetRun); + + return async function minifier(tree) { + const nodeHandlers = []; + const attrsHandlers = []; + const contentsHandlers = []; + + options = { ...preset, ...options }; + let promise = Promise.resolve(tree); + + for (const [moduleName, moduleOptions] of Object.entries(options)) { + if (!moduleOptions) { + // The module is disabled + continue; + } + + if (safePreset[moduleName] === undefined) { + throw new Error('Module "' + moduleName + '" is not defined'); + } + + (optionalDependencies[moduleName] || []).forEach(async dependency => { + try { + await import(dependency); + } catch (e) { + if (e.code === 'MODULE_NOT_FOUND' || e.code === 'ERR_MODULE_NOT_FOUND') { + console.warn(`You have to install "${dependency}" in order to use htmlnano's "${moduleName}" module`); + } else { + throw e; + } + } + }); + + const module = moduleName in modules ? + await (modules[moduleName]()) : + await import(`./modules/${moduleName}.mjs`); + + if (typeof module.onAttrs === 'function') { + attrsHandlers.push(module.onAttrs(options, moduleOptions)); + } + if (typeof module.onContent === 'function') { + contentsHandlers.push(module.onContent(options, moduleOptions)); + } + if (typeof module.onNode === 'function') { + nodeHandlers.push(module.onNode(options, moduleOptions)); + } + if (typeof module.default === 'function') { + promise = promise.then(async tree => await module.default(tree, options, moduleOptions)); + } + } + + if (attrsHandlers.length + contentsHandlers.length + nodeHandlers.length === 0) { + return promise; + } + + return promise.then(tree => { + tree.walk(node => { + if (node) { + if (node.attrs && typeof node.attrs === 'object') { + // Convert all attrs' key to lower case + let newAttrsObj = {}; + Object.entries(node.attrs).forEach(([attrName, attrValue]) => { + newAttrsObj[attrName.toLowerCase()] = attrValue; + }); + + for (const handler of attrsHandlers) { + newAttrsObj = handler(newAttrsObj, node); + } + + node.attrs = newAttrsObj; + } + + if (node.content) { + node.content = typeof node.content === 'string' ? [node.content] : node.content; + + if (Array.isArray(node.content) && node.content.length > 0) { + for (const handler of contentsHandlers) { + const result = handler(node.content, node); + node.content = typeof result === 'string' ? [result] : result; + } + } + } + + for (const handler of nodeHandlers) { + node = handler(node); + } + } + + return node; + }); + + return tree; + }); + }; +} + +htmlnano.getRequiredOptionalDependencies = function (optionsRun, presetRun) { + const [options] = loadConfig(optionsRun, presetRun); + + return [...new Set(Object.keys(options).filter(moduleName => options[moduleName]).map(moduleName => optionalDependencies[moduleName]).flat())]; +}; + + +htmlnano.process = function (html, options, preset, postHtmlOptions) { + return posthtml([htmlnano(options, preset)]) + .process(html, postHtmlOptions); +}; + +// https://github.com/webpack-contrib/html-minimizer-webpack-plugin/blob/faca00f2219514bc671c5942685721f0b5dbaa70/src/utils.js#L74 +htmlnano.htmlMinimizerWebpackPluginMinify = function htmlNano(input, minimizerOptions = {}) { + const [[, code]] = Object.entries(input); + return htmlnano.process(code, minimizerOptions, presets.safe) + .then(result => { + return { + code: result.html + }; + }); +}; + +htmlnano.presets = presets; + +export default htmlnano; diff --git a/node_modules/htmlnano/lib/modules/collapseAttributeWhitespace.cjs b/node_modules/htmlnano/lib/modules/collapseAttributeWhitespace.cjs new file mode 100644 index 00000000..f04cbdf9 --- /dev/null +++ b/node_modules/htmlnano/lib/modules/collapseAttributeWhitespace.cjs @@ -0,0 +1,86 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.attributesWithLists = void 0; +exports.onAttrs = onAttrs; +var _helpers = require("../helpers.cjs"); +const attributesWithLists = exports.attributesWithLists = new Set(['class', 'dropzone', 'rel', +// a, area, link +'ping', +// a, area +'sandbox', +// iframe +/** + * https://github.com/posthtml/htmlnano/issues/180 + * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/link#attr-sizes + * + * "sizes" of should not be modified, while "sizes" of will only have one entry in most cases. + */ +// 'sizes', // link +'headers' // td, th +]); + +/** @type Record */ +const attributesWithSingleValue = { + accept: ['input'], + action: ['form'], + accesskey: null, + 'accept-charset': ['form'], + cite: ['blockquote', 'del', 'ins', 'q'], + cols: ['textarea'], + colspan: ['td', 'th'], + data: ['object'], + dropzone: null, + formaction: ['button', 'input'], + height: ['canvas', 'embed', 'iframe', 'img', 'input', 'object', 'video'], + high: ['meter'], + href: ['a', 'area', 'base', 'link'], + itemid: null, + low: ['meter'], + manifest: ['html'], + max: ['meter', 'progress'], + maxlength: ['input', 'textarea'], + media: ['source'], + min: ['meter'], + minlength: ['input', 'textarea'], + optimum: ['meter'], + ping: ['a', 'area'], + poster: ['video'], + profile: ['head'], + rows: ['textarea'], + rowspan: ['td', 'th'], + size: ['input', 'select'], + span: ['col', 'colgroup'], + src: ['audio', 'embed', 'iframe', 'img', 'input', 'script', 'source', 'track', 'video'], + start: ['ol'], + step: ['input'], + style: null, + tabindex: null, + usemap: ['img', 'object'], + value: ['li', 'meter', 'progress'], + width: ['canvas', 'embed', 'iframe', 'img', 'input', 'object', 'video'] +}; + +/** Collapse whitespaces inside list-like attributes (e.g. class, rel) */ +function onAttrs() { + return (attrs, node) => { + const newAttrs = attrs; + Object.entries(attrs).forEach(([attrName, attrValue]) => { + if (typeof attrValue !== 'string') return; + if (attributesWithLists.has(attrName)) { + const newAttrValue = attrValue.replace(/\s+/g, ' ').trim(); + newAttrs[attrName] = newAttrValue; + return; + } + if ((0, _helpers.isEventHandler)(attrName) || Object.prototype.hasOwnProperty.call(attributesWithSingleValue, attrName) && (attributesWithSingleValue[attrName] === null || attributesWithSingleValue[attrName].includes(node.tag))) { + newAttrs[attrName] = minifySingleAttributeValue(attrValue); + } + }); + return newAttrs; + }; +} +function minifySingleAttributeValue(value) { + return typeof value === 'string' ? value.trim() : value; +} \ No newline at end of file diff --git a/node_modules/htmlnano/lib/modules/collapseAttributeWhitespace.mjs b/node_modules/htmlnano/lib/modules/collapseAttributeWhitespace.mjs new file mode 100644 index 00000000..f0282876 --- /dev/null +++ b/node_modules/htmlnano/lib/modules/collapseAttributeWhitespace.mjs @@ -0,0 +1,104 @@ +import { isEventHandler } from '../helpers.mjs'; + +export const attributesWithLists = new Set([ + 'class', + 'dropzone', + 'rel', // a, area, link + 'ping', // a, area + 'sandbox', // iframe + /** + * https://github.com/posthtml/htmlnano/issues/180 + * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/link#attr-sizes + * + * "sizes" of should not be modified, while "sizes" of will only have one entry in most cases. + */ + // 'sizes', // link + 'headers' // td, th +]); + +/** @type Record */ +const attributesWithSingleValue = { + accept: ['input'], + action: ['form'], + accesskey: null, + 'accept-charset': ['form'], + cite: ['blockquote', 'del', 'ins', 'q'], + cols: ['textarea'], + colspan: ['td', 'th'], + data: ['object'], + dropzone: null, + formaction: ['button', 'input'], + height: ['canvas', 'embed', 'iframe', 'img', 'input', 'object', 'video'], + high: ['meter'], + href: ['a', 'area', 'base', 'link'], + itemid: null, + low: ['meter'], + manifest: ['html'], + max: ['meter', 'progress'], + maxlength: ['input', 'textarea'], + media: ['source'], + min: ['meter'], + minlength: ['input', 'textarea'], + optimum: ['meter'], + ping: ['a', 'area'], + poster: ['video'], + profile: ['head'], + rows: ['textarea'], + rowspan: ['td', 'th'], + size: ['input', 'select'], + span: ['col', 'colgroup'], + src: [ + 'audio', + 'embed', + 'iframe', + 'img', + 'input', + 'script', + 'source', + 'track', + 'video' + ], + start: ['ol'], + step: ['input'], + style: null, + tabindex: null, + usemap: ['img', 'object'], + value: ['li', 'meter', 'progress'], + width: ['canvas', 'embed', 'iframe', 'img', 'input', 'object', 'video'] +}; + +/** Collapse whitespaces inside list-like attributes (e.g. class, rel) */ +export function onAttrs() { + return (attrs, node) => { + const newAttrs = attrs; + + Object.entries(attrs).forEach(([attrName, attrValue]) => { + if (typeof attrValue !== 'string') return; + + if (attributesWithLists.has(attrName)) { + const newAttrValue = attrValue.replace(/\s+/g, ' ').trim(); + newAttrs[attrName] = newAttrValue; + return; + } + + if ( + isEventHandler(attrName) + || ( + Object.prototype.hasOwnProperty.call(attributesWithSingleValue, attrName) + && ( + attributesWithSingleValue[attrName] === null + || attributesWithSingleValue[attrName].includes(node.tag) + ) + ) + ) { + newAttrs[attrName] = minifySingleAttributeValue(attrValue); + } + }); + + return newAttrs; + }; +} + +function minifySingleAttributeValue(value) { + return typeof value === 'string' ? value.trim() : value; +} diff --git a/node_modules/htmlnano/lib/modules/collapseBooleanAttributes.cjs b/node_modules/htmlnano/lib/modules/collapseBooleanAttributes.cjs new file mode 100644 index 00000000..d000f058 --- /dev/null +++ b/node_modules/htmlnano/lib/modules/collapseBooleanAttributes.cjs @@ -0,0 +1,62 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.onAttrs = onAttrs; +// Source: https://github.com/kangax/html-minifier/issues/63 +// https://html.spec.whatwg.org/#boolean-attribute +// https://html.spec.whatwg.org/#attributes-1 +const htmlBooleanAttributes = new Set(['allowfullscreen', 'allowpaymentrequest', 'allowtransparency', 'async', 'autofocus', 'autoplay', 'checked', 'compact', 'controls', 'declare', 'default', 'defaultchecked', 'defaultmuted', 'defaultselected', 'defer', 'disabled', 'enabled', 'formnovalidate', 'hidden', 'indeterminate', 'inert', 'ismap', 'itemscope', 'loop', 'multiple', 'muted', 'nohref', 'nomodule', 'noresize', 'noshade', 'novalidate', 'nowrap', 'open', 'pauseonexit', 'playsinline', 'readonly', 'required', 'reversed', 'scoped', 'seamless', 'selected', 'sortable', 'truespeed', 'typemustmatch', 'visible']); +const amphtmlBooleanAttributes = new Set(['⚡', 'amp', '⚡4ads', 'amp4ads', '⚡4email', 'amp4email', 'amp-custom', 'amp-boilerplate', 'amp4ads-boilerplate', 'amp4email-boilerplate', 'allow-blocked-ranges', 'amp-access-hide', 'amp-access-template', 'amp-keyframes', 'animate', 'arrows', 'data-block-on-consent', 'data-enable-refresh', 'data-multi-size', 'date-template', 'disable-double-tap', 'disable-session-states', 'disableremoteplayback', 'dots', 'expand-single-section', 'expanded', 'fallback', 'first', 'fullscreen', 'inline', 'lightbox', 'noaudio', 'noautoplay', 'noloading', 'once', 'open-after-clear', 'open-after-select', 'open-button', 'placeholder', 'preload', 'reset-on-refresh', 'reset-on-resize', 'resizable', 'rotate-to-fullscreen', 'second', 'standalone', 'stereo', 'submit-error', 'submit-success', 'submitting', 'subscriptions-actions', 'subscriptions-dialog']); +const missingValueDefaultEmptyStringAttributes = { + // https://html.spec.whatwg.org/#attr-media-preload + audio: { + preload: 'auto' + }, + video: { + preload: 'auto' + } +}; +const tagsHasMissingValueDefaultEmptyStringAttributes = new Set(Object.keys(missingValueDefaultEmptyStringAttributes)); +function onAttrs(options, moduleOptions) { + return (attrs, node) => { + if (!node.tag) return attrs; + const newAttrs = attrs; + if (tagsHasMissingValueDefaultEmptyStringAttributes.has(node.tag)) { + const tagAttributesCanBeReplacedWithEmptyString = missingValueDefaultEmptyStringAttributes[node.tag]; + for (const attributesCanBeReplacedWithEmptyString of Object.keys(tagAttributesCanBeReplacedWithEmptyString)) { + if (Object.prototype.hasOwnProperty.call(attrs, attributesCanBeReplacedWithEmptyString) && attrs[attributesCanBeReplacedWithEmptyString] === tagAttributesCanBeReplacedWithEmptyString[attributesCanBeReplacedWithEmptyString]) { + attrs[attributesCanBeReplacedWithEmptyString] = true; + } + } + } + for (const attrName of Object.keys(attrs)) { + if (attrName === 'visible' && node.tag.startsWith('a-')) { + continue; + } + if (htmlBooleanAttributes.has(attrName)) { + newAttrs[attrName] = true; + } + + // Fast path optimization. + // The rest of tranformations are only for string type attrValue. + if (typeof newAttrs[attrName] !== 'string') continue; + if (moduleOptions.amphtml && amphtmlBooleanAttributes.has(attrName) && attrs[attrName] === '') { + newAttrs[attrName] = true; + } + // https://html.spec.whatwg.org/#a-quick-introduction-to-html + // The value, along with the "=" character, can be omitted altogether if the value is the empty string. + if (attrs[attrName] === '') { + newAttrs[attrName] = true; + } + + // collapse crossorigin attributes + // Specification: https://html.spec.whatwg.org/multipage/urls-and-fetching.html#cors-settings-attributes + if (attrName.toLowerCase() === 'crossorigin' && attrs[attrName] === 'anonymous') { + newAttrs[attrName] = true; + } + } + return newAttrs; + }; +} \ No newline at end of file diff --git a/node_modules/htmlnano/lib/modules/collapseBooleanAttributes.mjs b/node_modules/htmlnano/lib/modules/collapseBooleanAttributes.mjs new file mode 100644 index 00000000..5beb8944 --- /dev/null +++ b/node_modules/htmlnano/lib/modules/collapseBooleanAttributes.mjs @@ -0,0 +1,175 @@ +// Source: https://github.com/kangax/html-minifier/issues/63 +// https://html.spec.whatwg.org/#boolean-attribute +// https://html.spec.whatwg.org/#attributes-1 +const htmlBooleanAttributes = new Set([ + 'allowfullscreen', + 'allowpaymentrequest', + 'allowtransparency', + 'async', + 'autofocus', + 'autoplay', + 'checked', + 'compact', + 'controls', + 'declare', + 'default', + 'defaultchecked', + 'defaultmuted', + 'defaultselected', + 'defer', + 'disabled', + 'enabled', + 'formnovalidate', + 'hidden', + 'indeterminate', + 'inert', + 'ismap', + 'itemscope', + 'loop', + 'multiple', + 'muted', + 'nohref', + 'nomodule', + 'noresize', + 'noshade', + 'novalidate', + 'nowrap', + 'open', + 'pauseonexit', + 'playsinline', + 'readonly', + 'required', + 'reversed', + 'scoped', + 'seamless', + 'selected', + 'sortable', + 'truespeed', + 'typemustmatch', + 'visible' +]); + +const amphtmlBooleanAttributes = new Set([ + '⚡', + 'amp', + '⚡4ads', + 'amp4ads', + '⚡4email', + 'amp4email', + + 'amp-custom', + 'amp-boilerplate', + 'amp4ads-boilerplate', + 'amp4email-boilerplate', + + 'allow-blocked-ranges', + 'amp-access-hide', + 'amp-access-template', + 'amp-keyframes', + 'animate', + 'arrows', + 'data-block-on-consent', + 'data-enable-refresh', + 'data-multi-size', + 'date-template', + 'disable-double-tap', + 'disable-session-states', + 'disableremoteplayback', + 'dots', + 'expand-single-section', + 'expanded', + 'fallback', + 'first', + 'fullscreen', + 'inline', + 'lightbox', + 'noaudio', + 'noautoplay', + 'noloading', + 'once', + 'open-after-clear', + 'open-after-select', + 'open-button', + 'placeholder', + 'preload', + 'reset-on-refresh', + 'reset-on-resize', + 'resizable', + 'rotate-to-fullscreen', + 'second', + 'standalone', + 'stereo', + 'submit-error', + 'submit-success', + 'submitting', + 'subscriptions-actions', + 'subscriptions-dialog' +]); + +const missingValueDefaultEmptyStringAttributes = { + // https://html.spec.whatwg.org/#attr-media-preload + audio: { + preload: 'auto' + }, + video: { + preload: 'auto' + } +}; + +const tagsHasMissingValueDefaultEmptyStringAttributes = new Set(Object.keys(missingValueDefaultEmptyStringAttributes)); + +export function onAttrs(options, moduleOptions) { + return (attrs, node) => { + if (!node.tag) return attrs; + + const newAttrs = attrs; + + if (tagsHasMissingValueDefaultEmptyStringAttributes.has(node.tag)) { + const tagAttributesCanBeReplacedWithEmptyString = missingValueDefaultEmptyStringAttributes[node.tag]; + + for (const attributesCanBeReplacedWithEmptyString of Object.keys(tagAttributesCanBeReplacedWithEmptyString)) { + if ( + Object.prototype.hasOwnProperty.call(attrs, attributesCanBeReplacedWithEmptyString) + && attrs[attributesCanBeReplacedWithEmptyString] === tagAttributesCanBeReplacedWithEmptyString[attributesCanBeReplacedWithEmptyString] + ) { + attrs[attributesCanBeReplacedWithEmptyString] = true; + } + } + } + + for (const attrName of Object.keys(attrs)) { + if (attrName === 'visible' && node.tag.startsWith('a-')) { + continue; + } + + if (htmlBooleanAttributes.has(attrName)) { + newAttrs[attrName] = true; + } + + // Fast path optimization. + // The rest of tranformations are only for string type attrValue. + if (typeof newAttrs[attrName] !== 'string') continue; + + if (moduleOptions.amphtml && amphtmlBooleanAttributes.has(attrName) && attrs[attrName] === '') { + newAttrs[attrName] = true; + } + // https://html.spec.whatwg.org/#a-quick-introduction-to-html + // The value, along with the "=" character, can be omitted altogether if the value is the empty string. + if (attrs[attrName] === '') { + newAttrs[attrName] = true; + } + + // collapse crossorigin attributes + // Specification: https://html.spec.whatwg.org/multipage/urls-and-fetching.html#cors-settings-attributes + if ( + attrName.toLowerCase() === 'crossorigin' && ( + attrs[attrName] === 'anonymous' + ) + ) { + newAttrs[attrName] = true; + } + } + + return newAttrs; + }; +} diff --git a/node_modules/htmlnano/lib/modules/collapseWhitespace.cjs b/node_modules/htmlnano/lib/modules/collapseWhitespace.cjs new file mode 100644 index 00000000..6bb345ad --- /dev/null +++ b/node_modules/htmlnano/lib/modules/collapseWhitespace.cjs @@ -0,0 +1,100 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = collapseWhitespace; +var _helpers = require("../helpers.cjs"); +const noWhitespaceCollapseElements = new Set(['script', 'style', 'pre', 'textarea']); +const noTrimWhitespacesArroundElements = new Set([ +// non-empty tags that will maintain whitespace around them +'a', 'abbr', 'acronym', 'b', 'bdi', 'bdo', 'big', 'button', 'cite', 'code', 'del', 'dfn', 'em', 'font', 'i', 'ins', 'kbd', 'label', 'mark', 'math', 'nobr', 'object', 'q', 'rp', 'rt', 'rtc', 'ruby', 's', 'samp', 'select', 'small', 'span', 'strike', 'strong', 'sub', 'sup', 'svg', 'textarea', 'time', 'tt', 'u', 'var', +// self-closing tags that will maintain whitespace around them +'comment', 'img', 'input', 'wbr']); +const noTrimWhitespacesInsideElements = new Set([ +// non-empty tags that will maintain whitespace within them +'a', 'abbr', 'acronym', 'b', 'big', 'del', 'em', 'font', 'i', 'ins', 'kbd', 'mark', 'nobr', 'rp', 's', 'samp', 'small', 'span', 'strike', 'strong', 'sub', 'sup', 'time', 'tt', 'u', 'var']); +const startsWithWhitespacePattern = /^\s/; +const endsWithWhitespacePattern = /\s$/; +// See https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace and https://infra.spec.whatwg.org/#ascii-whitespace +const multipleWhitespacePattern = /[\t\n\f\r ]+/g; +const NONE = ''; +const SINGLE_SPACE = ' '; +const validOptions = ['all', 'aggressive', 'conservative']; + +/** Collapses redundant whitespaces */ +function collapseWhitespace(tree, options, collapseType, parent) { + collapseType = validOptions.includes(collapseType) ? collapseType : 'conservative'; + tree.forEach((node, index) => { + const prevNode = tree[index - 1]; + const nextNode = tree[index + 1]; + if (typeof node === 'string') { + const parentNodeTag = parent && parent.node && parent.node.tag; + const isTopLevel = !parentNodeTag || parentNodeTag === 'html' || parentNodeTag === 'head'; + const shouldTrim = collapseType === 'all' || isTopLevel || + /* + * When collapseType is set to 'aggressive', and the tag is not inside 'noTrimWhitespacesInsideElements'. + * the first & last space inside the tag will be trimmed + */ + collapseType === 'aggressive'; + node = collapseRedundantWhitespaces(node, collapseType, shouldTrim, parent, prevNode, nextNode); + } + const isAllowCollapseWhitespace = !noWhitespaceCollapseElements.has(node.tag); + if (node.content && node.content.length && isAllowCollapseWhitespace) { + node.content = collapseWhitespace(node.content, options, collapseType, { + node, + prevNode, + nextNode + }); + } + tree[index] = node; + }); + return tree; +} +function collapseRedundantWhitespaces(text, collapseType, shouldTrim = false, parent, prevNode, nextNode) { + if (!text || text.length === 0) { + return NONE; + } + if (!(0, _helpers.isComment)(text)) { + text = text.replace(multipleWhitespacePattern, SINGLE_SPACE); + } + if (shouldTrim) { + if (collapseType === 'aggressive') { + if (!noTrimWhitespacesInsideElements.has(parent && parent.node && parent.node.tag)) { + if ( + // It is the first child node of the parent + !prevNode + // It is not the first child node, and prevNode not a text node, and prevNode is safe to trim around + || prevNode && prevNode.tag && !noTrimWhitespacesArroundElements.has(prevNode.tag)) { + text = text.trimStart(); + } else { + // previous node is a "no trim whitespaces arround element" + if ( + // but previous node ends with a whitespace + prevNode && prevNode.content && prevNode.content.length && endsWithWhitespacePattern.test(prevNode.content[prevNode.content.length - 1]) && (!nextNode // either the current node is the last child of the parent + || + // or the next node starts with a white space + nextNode && nextNode.content && nextNode.content.length && !startsWithWhitespacePattern.test(nextNode.content[0]))) { + text = text.trimStart(); + } + } + if (!nextNode || nextNode && nextNode.tag && !noTrimWhitespacesArroundElements.has(nextNode.tag)) { + text = text.trimEnd(); + } + } else { + // now it is a textNode inside a "no trim whitespaces inside elements" node + if (!prevNode // it the textnode is the first child of the node + && startsWithWhitespacePattern.test(text[0]) // it starts with white space + && typeof parent.prevNode === 'string' // the prev of the node is a textNode as well + && endsWithWhitespacePattern.test(parent.prevNode[parent.prevNode.length - 1]) // that prev is ends with a white + ) { + text = text.trimStart(); + } + } + } else { + // collapseType is 'all', trim spaces + text = text.trim(); + } + } + return text; +} \ No newline at end of file diff --git a/node_modules/htmlnano/lib/modules/collapseWhitespace.mjs b/node_modules/htmlnano/lib/modules/collapseWhitespace.mjs new file mode 100644 index 00000000..1a339d52 --- /dev/null +++ b/node_modules/htmlnano/lib/modules/collapseWhitespace.mjs @@ -0,0 +1,132 @@ +import { isComment } from '../helpers.mjs'; + +const noWhitespaceCollapseElements = new Set([ + 'script', + 'style', + 'pre', + 'textarea' +]); + +const noTrimWhitespacesArroundElements = new Set([ + // non-empty tags that will maintain whitespace around them + 'a', 'abbr', 'acronym', 'b', 'bdi', 'bdo', 'big', 'button', 'cite', 'code', 'del', 'dfn', 'em', 'font', 'i', 'ins', 'kbd', 'label', 'mark', 'math', 'nobr', 'object', 'q', 'rp', 'rt', 'rtc', 'ruby', 's', 'samp', 'select', 'small', 'span', 'strike', 'strong', 'sub', 'sup', 'svg', 'textarea', 'time', 'tt', 'u', 'var', + // self-closing tags that will maintain whitespace around them + 'comment', 'img', 'input', 'wbr' +]); + +const noTrimWhitespacesInsideElements = new Set([ + // non-empty tags that will maintain whitespace within them + 'a', 'abbr', 'acronym', 'b', 'big', 'del', 'em', 'font', 'i', 'ins', 'kbd', 'mark', 'nobr', 'rp', 's', 'samp', 'small', 'span', 'strike', 'strong', 'sub', 'sup', 'time', 'tt', 'u', 'var' +]); + +const startsWithWhitespacePattern = /^\s/; +const endsWithWhitespacePattern = /\s$/; +// See https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace and https://infra.spec.whatwg.org/#ascii-whitespace +const multipleWhitespacePattern = /[\t\n\f\r ]+/g; +const NONE = ''; +const SINGLE_SPACE = ' '; +const validOptions = ['all', 'aggressive', 'conservative']; + +/** Collapses redundant whitespaces */ +export default function collapseWhitespace(tree, options, collapseType, parent) { + collapseType = validOptions.includes(collapseType) ? collapseType : 'conservative'; + + tree.forEach((node, index) => { + const prevNode = tree[index - 1]; + const nextNode = tree[index + 1]; + + if (typeof node === 'string') { + const parentNodeTag = parent && parent.node && parent.node.tag; + const isTopLevel = !parentNodeTag || parentNodeTag === 'html' || parentNodeTag === 'head'; + const shouldTrim = ( + collapseType === 'all' || + isTopLevel || + /* + * When collapseType is set to 'aggressive', and the tag is not inside 'noTrimWhitespacesInsideElements'. + * the first & last space inside the tag will be trimmed + */ + collapseType === 'aggressive' + ); + + node = collapseRedundantWhitespaces(node, collapseType, shouldTrim, parent, prevNode, nextNode); + } + + const isAllowCollapseWhitespace = !noWhitespaceCollapseElements.has(node.tag); + if (node.content && node.content.length && isAllowCollapseWhitespace) { + node.content = collapseWhitespace(node.content, options, collapseType, { + node, + prevNode, + nextNode + }); + } + + tree[index] = node; + }); + + return tree; +} + + +function collapseRedundantWhitespaces(text, collapseType, shouldTrim = false, parent, prevNode, nextNode) { + if (!text || text.length === 0) { + return NONE; + } + + if (!isComment(text)) { + text = text.replace(multipleWhitespacePattern, SINGLE_SPACE); + } + + if (shouldTrim) { + if (collapseType === 'aggressive') { + if (!noTrimWhitespacesInsideElements.has(parent && parent.node && parent.node.tag)) { + if ( + // It is the first child node of the parent + !prevNode + // It is not the first child node, and prevNode not a text node, and prevNode is safe to trim around + || prevNode && prevNode.tag && !noTrimWhitespacesArroundElements.has(prevNode.tag) + ) { + text = text.trimStart(); + } else { + // previous node is a "no trim whitespaces arround element" + if ( + // but previous node ends with a whitespace + prevNode && prevNode.content && prevNode.content.length + && endsWithWhitespacePattern.test(prevNode.content[prevNode.content.length - 1]) + && ( + !nextNode // either the current node is the last child of the parent + || ( + // or the next node starts with a white space + nextNode && nextNode.content && nextNode.content.length + && !startsWithWhitespacePattern.test(nextNode.content[0]) + ) + ) + ) { + text = text.trimStart(); + } + } + + if ( + !nextNode + || nextNode && nextNode.tag && !noTrimWhitespacesArroundElements.has(nextNode.tag) + ) { + text = text.trimEnd(); + } + } else { + // now it is a textNode inside a "no trim whitespaces inside elements" node + if ( + !prevNode // it the textnode is the first child of the node + && startsWithWhitespacePattern.test(text[0]) // it starts with white space + && typeof parent.prevNode === 'string' // the prev of the node is a textNode as well + && endsWithWhitespacePattern.test(parent.prevNode[parent.prevNode.length - 1]) // that prev is ends with a white + ) { + text = text.trimStart(); + } + } + } else { + // collapseType is 'all', trim spaces + text = text.trim(); + } + } + + return text; +} diff --git a/node_modules/htmlnano/lib/modules/custom.cjs b/node_modules/htmlnano/lib/modules/custom.cjs new file mode 100644 index 00000000..f2c33f20 --- /dev/null +++ b/node_modules/htmlnano/lib/modules/custom.cjs @@ -0,0 +1,19 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = custom; +/** Meta-module that runs custom modules */ +function custom(tree, options, customModules) { + if (!customModules) { + return tree; + } + if (!Array.isArray(customModules)) { + customModules = [customModules]; + } + customModules.forEach(customModule => { + tree = customModule(tree, options); + }); + return tree; +} \ No newline at end of file diff --git a/node_modules/htmlnano/lib/modules/custom.mjs b/node_modules/htmlnano/lib/modules/custom.mjs new file mode 100644 index 00000000..8754ba54 --- /dev/null +++ b/node_modules/htmlnano/lib/modules/custom.mjs @@ -0,0 +1,16 @@ +/** Meta-module that runs custom modules */ +export default function custom(tree, options, customModules) { + if (! customModules) { + return tree; + } + + if (! Array.isArray(customModules)) { + customModules = [customModules]; + } + + customModules.forEach(customModule => { + tree = customModule(tree, options); + }); + + return tree; +} diff --git a/node_modules/htmlnano/lib/modules/deduplicateAttributeValues.cjs b/node_modules/htmlnano/lib/modules/deduplicateAttributeValues.cjs new file mode 100644 index 00000000..42d89a7a --- /dev/null +++ b/node_modules/htmlnano/lib/modules/deduplicateAttributeValues.cjs @@ -0,0 +1,38 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.onAttrs = onAttrs; +var _collapseAttributeWhitespace = require("./collapseAttributeWhitespace.cjs"); +/** Deduplicate values inside list-like attributes (e.g. class, rel) */ +function onAttrs() { + return attrs => { + const newAttrs = attrs; + Object.keys(attrs).forEach(attrName => { + if (!_collapseAttributeWhitespace.attributesWithLists.has(attrName)) { + return; + } + if (typeof attrs[attrName] !== 'string') { + return; + } + const attrValues = attrs[attrName].split(/\s/); + const uniqeAttrValues = new Set(); + const deduplicatedAttrValues = []; + attrValues.forEach(attrValue => { + if (!attrValue) { + // Keep whitespaces + deduplicatedAttrValues.push(''); + return; + } + if (uniqeAttrValues.has(attrValue)) { + return; + } + deduplicatedAttrValues.push(attrValue); + uniqeAttrValues.add(attrValue); + }); + newAttrs[attrName] = deduplicatedAttrValues.join(' '); + }); + return newAttrs; + }; +} \ No newline at end of file diff --git a/node_modules/htmlnano/lib/modules/deduplicateAttributeValues.mjs b/node_modules/htmlnano/lib/modules/deduplicateAttributeValues.mjs new file mode 100644 index 00000000..d92a2fe9 --- /dev/null +++ b/node_modules/htmlnano/lib/modules/deduplicateAttributeValues.mjs @@ -0,0 +1,40 @@ +import { attributesWithLists } from './collapseAttributeWhitespace.mjs'; + +/** Deduplicate values inside list-like attributes (e.g. class, rel) */ +export function onAttrs() { + return (attrs) => { + const newAttrs = attrs; + Object.keys(attrs).forEach(attrName => { + if (! attributesWithLists.has(attrName)) { + return; + } + + if (typeof attrs[attrName] !== 'string') { + return; + } + + const attrValues = attrs[attrName].split(/\s/); + const uniqeAttrValues = new Set(); + const deduplicatedAttrValues = []; + + attrValues.forEach((attrValue) => { + if (! attrValue) { + // Keep whitespaces + deduplicatedAttrValues.push(''); + return; + } + + if (uniqeAttrValues.has(attrValue)) { + return; + } + + deduplicatedAttrValues.push(attrValue); + uniqeAttrValues.add(attrValue); + }); + + newAttrs[attrName] = deduplicatedAttrValues.join(' '); + }); + + return newAttrs; + }; +} diff --git a/node_modules/htmlnano/lib/modules/example.cjs b/node_modules/htmlnano/lib/modules/example.cjs new file mode 100644 index 00000000..faf6db15 --- /dev/null +++ b/node_modules/htmlnano/lib/modules/example.cjs @@ -0,0 +1,85 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = example; +exports.onAttrs = onAttrs; +exports.onContent = onContent; +exports.onNode = onNode; +/** + * It is an example htmlnano module. + * + * A htmlnano module can be modify the attributes of every node (through a "onAttrs" named export), + * modify the content of every node (through an optional "onContent" named export), modify the node + * itself (through an optional "onNode" named export), or modify the entire tree (through an optional + * default export). + */ + +/** + * Modify attributes of node. Optional. + * + * @param {object} options - Options that were passed to htmlnano + * @param moduleOptions — Module options. For most modules this is just "true" (indication that the module was enabled) + * @return {Function} - Return a function that takes attribute object and the node (for the context), and returns the modified attribute object + */ +function onAttrs(options, moduleOptions) { + return (attrs, node) => { + // You can modify "attrs" based on "node" + const newAttrs = { + ...attrs + }; + return newAttrs; // ... then return the modified attrs + }; +} + +/** + * Modify content of node. Optional. + * + * @param {object} options - Options that were passed to htmlnano + * @param moduleOptions — Module options. For most modules this is just "true" (indication that the module was enabled) + * @return {Function} - Return a function that takes contents (an array of node and string) and the node (for the context), and returns the modified content array. + */ +function onContent(options, moduleOptions) { + return (content, node) => { + // Same goes the "content" + + return content; // ... return modified content here + }; +} + +/** + * It is possible to modify entire ndde as well. Optional. + * @param {object} options - Options that were passed to htmlnano + * @param moduleOptions — Module options. For most modules this is just "true" (indication that the module was enabled) + * @return {Function} - Return a function that takes the node, and returns the new, modified node. + */ +function onNode(options, moduleOptions) { + return node => { + return node; // ... return new node here + }; +} + +/** + * Modify the entire tree. Optional. + * + * @param {object} tree - PostHTML tree (https://github.com/posthtml/posthtml/blob/master/README.md) + * @param {object} options - Options that were passed to htmlnano + * @param moduleOptions — Module options. For most modules this is just "true" (indication that the module was enabled) + * @return {object | Proimse} - Return the modified tree. + */ +function example(tree, options, moduleOptions) { + // Module filename (example.es6), exported default function name (example), + // and test filename (example.js) must be the same. + + // You can traverse the tree... + tree.walk(node => { + // ...and make some minification + }); + + // At the end you must return the tree + return tree; + + // Or a promise with the tree + return somePromise.then(() => tree); +} \ No newline at end of file diff --git a/node_modules/htmlnano/lib/modules/example.mjs b/node_modules/htmlnano/lib/modules/example.mjs new file mode 100644 index 00000000..1e56e9b1 --- /dev/null +++ b/node_modules/htmlnano/lib/modules/example.mjs @@ -0,0 +1,75 @@ +/** + * It is an example htmlnano module. + * + * A htmlnano module can be modify the attributes of every node (through a "onAttrs" named export), + * modify the content of every node (through an optional "onContent" named export), modify the node + * itself (through an optional "onNode" named export), or modify the entire tree (through an optional + * default export). + */ + +/** + * Modify attributes of node. Optional. + * + * @param {object} options - Options that were passed to htmlnano + * @param moduleOptions — Module options. For most modules this is just "true" (indication that the module was enabled) + * @return {Function} - Return a function that takes attribute object and the node (for the context), and returns the modified attribute object + */ +export function onAttrs(options, moduleOptions) { + return (attrs, node) => { + // You can modify "attrs" based on "node" + const newAttrs = { ...attrs }; + + return newAttrs; // ... then return the modified attrs + }; +} + +/** + * Modify content of node. Optional. + * + * @param {object} options - Options that were passed to htmlnano + * @param moduleOptions — Module options. For most modules this is just "true" (indication that the module was enabled) + * @return {Function} - Return a function that takes contents (an array of node and string) and the node (for the context), and returns the modified content array. + */ +export function onContent(options, moduleOptions) { + return (content, node) => { + // Same goes the "content" + + return content; // ... return modified content here + }; +} + +/** + * It is possible to modify entire ndde as well. Optional. + * @param {object} options - Options that were passed to htmlnano + * @param moduleOptions — Module options. For most modules this is just "true" (indication that the module was enabled) + * @return {Function} - Return a function that takes the node, and returns the new, modified node. + */ +export function onNode(options, moduleOptions) { + return (node) => { + return node; // ... return new node here + }; +} + +/** + * Modify the entire tree. Optional. + * + * @param {object} tree - PostHTML tree (https://github.com/posthtml/posthtml/blob/master/README.md) + * @param {object} options - Options that were passed to htmlnano + * @param moduleOptions — Module options. For most modules this is just "true" (indication that the module was enabled) + * @return {object | Proimse} - Return the modified tree. + */ +export default function example(tree, options, moduleOptions) { + // Module filename (example.es6), exported default function name (example), + // and test filename (example.js) must be the same. + + // You can traverse the tree... + tree.walk(node => { + // ...and make some minification + }); + + // At the end you must return the tree + return tree; + + // Or a promise with the tree + return somePromise.then(() => tree); +} diff --git a/node_modules/htmlnano/lib/modules/mergeScripts.cjs b/node_modules/htmlnano/lib/modules/mergeScripts.cjs new file mode 100644 index 00000000..8324e2bc --- /dev/null +++ b/node_modules/htmlnano/lib/modules/mergeScripts.cjs @@ -0,0 +1,54 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = mergeScripts; +/* Merge multiple +// +// +// +// +// +// +// +// `; + +const options = { + minifySvg: safePreset.minifySvg, +}; +const html = ` +image +`; + +htmlnano + // "preset" arg might be skipped (see "Presets" section below for more info) + // "postHtmlOptions" arg might be skipped + .process(html) + .then(function (result) { + // result.html is minified + console.log(result.html); + }) + .catch(function (err) { + console.error(err); + }); diff --git a/node_modules/htmlparser2/LICENSE b/node_modules/htmlparser2/LICENSE new file mode 100644 index 00000000..0a35e029 --- /dev/null +++ b/node_modules/htmlparser2/LICENSE @@ -0,0 +1,18 @@ +Copyright 2010, 2011, Chris Winberry . All rights reserved. +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. \ No newline at end of file diff --git a/node_modules/htmlparser2/README.md b/node_modules/htmlparser2/README.md new file mode 100644 index 00000000..311a4eac --- /dev/null +++ b/node_modules/htmlparser2/README.md @@ -0,0 +1,171 @@ +# htmlparser2 + +[![NPM version](https://img.shields.io/npm/v/htmlparser2.svg)](https://npmjs.org/package/htmlparser2) +[![Downloads](https://img.shields.io/npm/dm/htmlparser2.svg)](https://npmjs.org/package/htmlparser2) +[![Node.js CI](https://github.com/fb55/htmlparser2/actions/workflows/nodejs-test.yml/badge.svg)](https://github.com/fb55/htmlparser2/actions/workflows/nodejs-test.yml) +[![Coverage](https://img.shields.io/coveralls/fb55/htmlparser2.svg)](https://coveralls.io/r/fb55/htmlparser2) + +The fast & forgiving HTML/XML parser. + +_htmlparser2 is [the fastest HTML parser](#performance), and takes some shortcuts to get there. If you need strict HTML spec compliance, have a look at [parse5](https://github.com/inikulin/parse5)._ + +## Installation + + npm install htmlparser2 + +A live demo of `htmlparser2` is available [on AST Explorer](https://astexplorer.net/#/2AmVrGuGVJ). + +## Ecosystem + +| Name | Description | +| ------------------------------------------------------------- | ------------------------------------------------------- | +| [htmlparser2](https://github.com/fb55/htmlparser2) | Fast & forgiving HTML/XML parser | +| [domhandler](https://github.com/fb55/domhandler) | Handler for htmlparser2 that turns documents into a DOM | +| [domutils](https://github.com/fb55/domutils) | Utilities for working with domhandler's DOM | +| [css-select](https://github.com/fb55/css-select) | CSS selector engine, compatible with domhandler's DOM | +| [cheerio](https://github.com/cheeriojs/cheerio) | The jQuery API for domhandler's DOM | +| [dom-serializer](https://github.com/cheeriojs/dom-serializer) | Serializer for domhandler's DOM | + +## Usage + +`htmlparser2` itself provides a callback interface that allows consumption of documents with minimal allocations. +For a more ergonomic experience, read [Getting a DOM](#getting-a-dom) below. + +```js +import * as htmlparser2 from "htmlparser2"; + +const parser = new htmlparser2.Parser({ + onopentag(name, attributes) { + /* + * This fires when a new tag is opened. + * + * If you don't need an aggregated `attributes` object, + * have a look at the `onopentagname` and `onattribute` events. + */ + if (name === "script" && attributes.type === "text/javascript") { + console.log("JS! Hooray!"); + } + }, + ontext(text) { + /* + * Fires whenever a section of text was processed. + * + * Note that this can fire at any point within text and you might + * have to stitch together multiple pieces. + */ + console.log("-->", text); + }, + onclosetag(tagname) { + /* + * Fires when a tag is closed. + * + * You can rely on this event only firing when you have received an + * equivalent opening tag before. Closing tags without corresponding + * opening tags will be ignored. + */ + if (tagname === "script") { + console.log("That's it?!"); + } + }, +}); +parser.write( + "Xyz ", +); +parser.end(); +``` + +Output (with multiple text events combined): + +``` +--> Xyz +JS! Hooray! +--> const foo = '<>'; +That's it?! +``` + +This example only shows three of the possible events. +Read more about the parser, its events and options in the [wiki](https://github.com/fb55/htmlparser2/wiki/Parser-options). + +### Usage with streams + +While the `Parser` interface closely resembles Node.js streams, it's not a 100% match. +Use the `WritableStream` interface to process a streaming input: + +```js +import { WritableStream } from "htmlparser2/lib/WritableStream"; + +const parserStream = new WritableStream({ + ontext(text) { + console.log("Streaming:", text); + }, +}); + +const htmlStream = fs.createReadStream("./my-file.html"); +htmlStream.pipe(parserStream).on("finish", () => console.log("done")); +``` + +## Getting a DOM + +The `DomHandler` produces a DOM (document object model) that can be manipulated using the [`DomUtils`](https://github.com/fb55/DomUtils) helper. + +```js +import * as htmlparser2 from "htmlparser2"; + +const dom = htmlparser2.parseDocument(htmlString); +``` + +The `DomHandler`, while still bundled with this module, was moved to its [own module](https://github.com/fb55/domhandler). +Have a look at that for further information. + +## Parsing Feeds + +`htmlparser2` makes it easy to parse RSS, RDF and Atom feeds, by providing a `parseFeed` method: + +```javascript +const feed = htmlparser2.parseFeed(content, options); +``` + +## Performance + +After having some artificial benchmarks for some time, **@AndreasMadsen** published his [`htmlparser-benchmark`](https://github.com/AndreasMadsen/htmlparser-benchmark), which benchmarks HTML parses based on real-world websites. + +At the time of writing, the latest versions of all supported parsers show the following performance characteristics on GitHub Actions (sourced from [here](https://github.com/AndreasMadsen/htmlparser-benchmark/blob/e78cd8fc6c2adac08deedd4f274c33537451186b/stats.txt)): + +``` +htmlparser2 : 2.17215 ms/file ± 3.81587 +node-html-parser : 2.35983 ms/file ± 1.54487 +html5parser : 2.43468 ms/file ± 2.81501 +neutron-html5parser: 2.61356 ms/file ± 1.70324 +htmlparser2-dom : 3.09034 ms/file ± 4.77033 +html-dom-parser : 3.56804 ms/file ± 5.15621 +libxmljs : 4.07490 ms/file ± 2.99869 +htmljs-parser : 6.15812 ms/file ± 7.52497 +parse5 : 9.70406 ms/file ± 6.74872 +htmlparser : 15.0596 ms/file ± 89.0826 +html-parser : 28.6282 ms/file ± 22.6652 +saxes : 45.7921 ms/file ± 128.691 +html5 : 120.844 ms/file ± 153.944 +``` + +## How does this module differ from [node-htmlparser](https://github.com/tautologistics/node-htmlparser)? + +In 2011, this module started as a fork of the `htmlparser` module. +`htmlparser2` was rewritten multiple times and, while it maintains an API that's mostly compatible with `htmlparser`, the projects don't share any code anymore. + +The parser now provides a callback interface inspired by [sax.js](https://github.com/isaacs/sax-js) (originally targeted at [readabilitySAX](https://github.com/fb55/readabilitysax)). +As a result, old handlers won't work anymore. + +The `DefaultHandler` was renamed to clarify its purpose (to `DomHandler`). The old name is still available when requiring `htmlparser2` and your code should work as expected. + +The `RssHandler` was replaced with a `getFeed` function that takes a `DomHandler` DOM and returns a feed object. There is a `parseFeed` helper function that can be used to parse a feed from a string. + +## Security contact information + +To report a security vulnerability, please use the [Tidelift security contact](https://tidelift.com/security). +Tidelift will coordinate the fix and disclosure. + +## `htmlparser2` for enterprise + +Available as part of the Tidelift Subscription. + +The maintainers of `htmlparser2` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-htmlparser2?utm_source=npm-htmlparser2&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) diff --git a/node_modules/htmlparser2/lib/Parser.d.ts b/node_modules/htmlparser2/lib/Parser.d.ts new file mode 100644 index 00000000..b6176744 --- /dev/null +++ b/node_modules/htmlparser2/lib/Parser.d.ts @@ -0,0 +1,198 @@ +import Tokenizer, { type Callbacks, QuoteType } from "./Tokenizer.js"; +export interface ParserOptions { + /** + * Indicates whether special tags (``. + this.sequenceIndex = Number(c === CharCodes.Lt); + } + }; + Tokenizer.prototype.stateCDATASequence = function (c) { + if (c === Sequences.Cdata[this.sequenceIndex]) { + if (++this.sequenceIndex === Sequences.Cdata.length) { + this.state = State.InCommentLike; + this.currentSequence = Sequences.CdataEnd; + this.sequenceIndex = 0; + this.sectionStart = this.index + 1; + } + } + else { + this.sequenceIndex = 0; + this.state = State.InDeclaration; + this.stateInDeclaration(c); // Reconsume the character + } + }; + /** + * When we wait for one specific character, we can speed things up + * by skipping through the buffer until we find it. + * + * @returns Whether the character was found. + */ + Tokenizer.prototype.fastForwardTo = function (c) { + while (++this.index < this.buffer.length + this.offset) { + if (this.buffer.charCodeAt(this.index - this.offset) === c) { + return true; + } + } + /* + * We increment the index at the end of the `parse` loop, + * so set it to `buffer.length - 1` here. + * + * TODO: Refactor `parse` to increment index before calling states. + */ + this.index = this.buffer.length + this.offset - 1; + return false; + }; + /** + * Comments and CDATA end with `-->` and `]]>`. + * + * Their common qualities are: + * - Their end sequences have a distinct character they start with. + * - That character is then repeated, so we have to check multiple repeats. + * - All characters but the start character of the sequence can be skipped. + */ + Tokenizer.prototype.stateInCommentLike = function (c) { + if (c === this.currentSequence[this.sequenceIndex]) { + if (++this.sequenceIndex === this.currentSequence.length) { + if (this.currentSequence === Sequences.CdataEnd) { + this.cbs.oncdata(this.sectionStart, this.index, 2); + } + else { + this.cbs.oncomment(this.sectionStart, this.index, 2); + } + this.sequenceIndex = 0; + this.sectionStart = this.index + 1; + this.state = State.Text; + } + } + else if (this.sequenceIndex === 0) { + // Fast-forward to the first character of the sequence + if (this.fastForwardTo(this.currentSequence[0])) { + this.sequenceIndex = 1; + } + } + else if (c !== this.currentSequence[this.sequenceIndex - 1]) { + // Allow long sequences, eg. --->, ]]]> + this.sequenceIndex = 0; + } + }; + /** + * HTML only allows ASCII alpha characters (a-z and A-Z) at the beginning of a tag name. + * + * XML allows a lot more characters here (@see https://www.w3.org/TR/REC-xml/#NT-NameStartChar). + * We allow anything that wouldn't end the tag. + */ + Tokenizer.prototype.isTagStartChar = function (c) { + return this.xmlMode ? !isEndOfTagSection(c) : isASCIIAlpha(c); + }; + Tokenizer.prototype.startSpecial = function (sequence, offset) { + this.isSpecial = true; + this.currentSequence = sequence; + this.sequenceIndex = offset; + this.state = State.SpecialStartSequence; + }; + Tokenizer.prototype.stateBeforeTagName = function (c) { + if (c === CharCodes.ExclamationMark) { + this.state = State.BeforeDeclaration; + this.sectionStart = this.index + 1; + } + else if (c === CharCodes.Questionmark) { + this.state = State.InProcessingInstruction; + this.sectionStart = this.index + 1; + } + else if (this.isTagStartChar(c)) { + var lower = c | 0x20; + this.sectionStart = this.index; + if (this.xmlMode) { + this.state = State.InTagName; + } + else if (lower === Sequences.ScriptEnd[2]) { + this.state = State.BeforeSpecialS; + } + else if (lower === Sequences.TitleEnd[2]) { + this.state = State.BeforeSpecialT; + } + else { + this.state = State.InTagName; + } + } + else if (c === CharCodes.Slash) { + this.state = State.BeforeClosingTagName; + } + else { + this.state = State.Text; + this.stateText(c); + } + }; + Tokenizer.prototype.stateInTagName = function (c) { + if (isEndOfTagSection(c)) { + this.cbs.onopentagname(this.sectionStart, this.index); + this.sectionStart = -1; + this.state = State.BeforeAttributeName; + this.stateBeforeAttributeName(c); + } + }; + Tokenizer.prototype.stateBeforeClosingTagName = function (c) { + if (isWhitespace(c)) { + // Ignore + } + else if (c === CharCodes.Gt) { + this.state = State.Text; + } + else { + this.state = this.isTagStartChar(c) + ? State.InClosingTagName + : State.InSpecialComment; + this.sectionStart = this.index; + } + }; + Tokenizer.prototype.stateInClosingTagName = function (c) { + if (c === CharCodes.Gt || isWhitespace(c)) { + this.cbs.onclosetag(this.sectionStart, this.index); + this.sectionStart = -1; + this.state = State.AfterClosingTagName; + this.stateAfterClosingTagName(c); + } + }; + Tokenizer.prototype.stateAfterClosingTagName = function (c) { + // Skip everything until ">" + if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) { + this.state = State.Text; + this.sectionStart = this.index + 1; + } + }; + Tokenizer.prototype.stateBeforeAttributeName = function (c) { + if (c === CharCodes.Gt) { + this.cbs.onopentagend(this.index); + if (this.isSpecial) { + this.state = State.InSpecialTag; + this.sequenceIndex = 0; + } + else { + this.state = State.Text; + } + this.sectionStart = this.index + 1; + } + else if (c === CharCodes.Slash) { + this.state = State.InSelfClosingTag; + } + else if (!isWhitespace(c)) { + this.state = State.InAttributeName; + this.sectionStart = this.index; + } + }; + Tokenizer.prototype.stateInSelfClosingTag = function (c) { + if (c === CharCodes.Gt) { + this.cbs.onselfclosingtag(this.index); + this.state = State.Text; + this.sectionStart = this.index + 1; + this.isSpecial = false; // Reset special state, in case of self-closing special tags + } + else if (!isWhitespace(c)) { + this.state = State.BeforeAttributeName; + this.stateBeforeAttributeName(c); + } + }; + Tokenizer.prototype.stateInAttributeName = function (c) { + if (c === CharCodes.Eq || isEndOfTagSection(c)) { + this.cbs.onattribname(this.sectionStart, this.index); + this.sectionStart = this.index; + this.state = State.AfterAttributeName; + this.stateAfterAttributeName(c); + } + }; + Tokenizer.prototype.stateAfterAttributeName = function (c) { + if (c === CharCodes.Eq) { + this.state = State.BeforeAttributeValue; + } + else if (c === CharCodes.Slash || c === CharCodes.Gt) { + this.cbs.onattribend(QuoteType.NoValue, this.sectionStart); + this.sectionStart = -1; + this.state = State.BeforeAttributeName; + this.stateBeforeAttributeName(c); + } + else if (!isWhitespace(c)) { + this.cbs.onattribend(QuoteType.NoValue, this.sectionStart); + this.state = State.InAttributeName; + this.sectionStart = this.index; + } + }; + Tokenizer.prototype.stateBeforeAttributeValue = function (c) { + if (c === CharCodes.DoubleQuote) { + this.state = State.InAttributeValueDq; + this.sectionStart = this.index + 1; + } + else if (c === CharCodes.SingleQuote) { + this.state = State.InAttributeValueSq; + this.sectionStart = this.index + 1; + } + else if (!isWhitespace(c)) { + this.sectionStart = this.index; + this.state = State.InAttributeValueNq; + this.stateInAttributeValueNoQuotes(c); // Reconsume token + } + }; + Tokenizer.prototype.handleInAttributeValue = function (c, quote) { + if (c === quote || + (!this.decodeEntities && this.fastForwardTo(quote))) { + this.cbs.onattribdata(this.sectionStart, this.index); + this.sectionStart = -1; + this.cbs.onattribend(quote === CharCodes.DoubleQuote + ? QuoteType.Double + : QuoteType.Single, this.index + 1); + this.state = State.BeforeAttributeName; + } + else if (this.decodeEntities && c === CharCodes.Amp) { + this.startEntity(); + } + }; + Tokenizer.prototype.stateInAttributeValueDoubleQuotes = function (c) { + this.handleInAttributeValue(c, CharCodes.DoubleQuote); + }; + Tokenizer.prototype.stateInAttributeValueSingleQuotes = function (c) { + this.handleInAttributeValue(c, CharCodes.SingleQuote); + }; + Tokenizer.prototype.stateInAttributeValueNoQuotes = function (c) { + if (isWhitespace(c) || c === CharCodes.Gt) { + this.cbs.onattribdata(this.sectionStart, this.index); + this.sectionStart = -1; + this.cbs.onattribend(QuoteType.Unquoted, this.index); + this.state = State.BeforeAttributeName; + this.stateBeforeAttributeName(c); + } + else if (this.decodeEntities && c === CharCodes.Amp) { + this.startEntity(); + } + }; + Tokenizer.prototype.stateBeforeDeclaration = function (c) { + if (c === CharCodes.OpeningSquareBracket) { + this.state = State.CDATASequence; + this.sequenceIndex = 0; + } + else { + this.state = + c === CharCodes.Dash + ? State.BeforeComment + : State.InDeclaration; + } + }; + Tokenizer.prototype.stateInDeclaration = function (c) { + if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) { + this.cbs.ondeclaration(this.sectionStart, this.index); + this.state = State.Text; + this.sectionStart = this.index + 1; + } + }; + Tokenizer.prototype.stateInProcessingInstruction = function (c) { + if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) { + this.cbs.onprocessinginstruction(this.sectionStart, this.index); + this.state = State.Text; + this.sectionStart = this.index + 1; + } + }; + Tokenizer.prototype.stateBeforeComment = function (c) { + if (c === CharCodes.Dash) { + this.state = State.InCommentLike; + this.currentSequence = Sequences.CommentEnd; + // Allow short comments (eg. ) + this.sequenceIndex = 2; + this.sectionStart = this.index + 1; + } + else { + this.state = State.InDeclaration; + } + }; + Tokenizer.prototype.stateInSpecialComment = function (c) { + if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) { + this.cbs.oncomment(this.sectionStart, this.index, 0); + this.state = State.Text; + this.sectionStart = this.index + 1; + } + }; + Tokenizer.prototype.stateBeforeSpecialS = function (c) { + var lower = c | 0x20; + if (lower === Sequences.ScriptEnd[3]) { + this.startSpecial(Sequences.ScriptEnd, 4); + } + else if (lower === Sequences.StyleEnd[3]) { + this.startSpecial(Sequences.StyleEnd, 4); + } + else { + this.state = State.InTagName; + this.stateInTagName(c); // Consume the token again + } + }; + Tokenizer.prototype.stateBeforeSpecialT = function (c) { + var lower = c | 0x20; + if (lower === Sequences.TitleEnd[3]) { + this.startSpecial(Sequences.TitleEnd, 4); + } + else if (lower === Sequences.TextareaEnd[3]) { + this.startSpecial(Sequences.TextareaEnd, 4); + } + else { + this.state = State.InTagName; + this.stateInTagName(c); // Consume the token again + } + }; + Tokenizer.prototype.startEntity = function () { + this.baseState = this.state; + this.state = State.InEntity; + this.entityStart = this.index; + this.entityDecoder.startEntity(this.xmlMode + ? decode_js_1.DecodingMode.Strict + : this.baseState === State.Text || + this.baseState === State.InSpecialTag + ? decode_js_1.DecodingMode.Legacy + : decode_js_1.DecodingMode.Attribute); + }; + Tokenizer.prototype.stateInEntity = function () { + var length = this.entityDecoder.write(this.buffer, this.index - this.offset); + // If `length` is positive, we are done with the entity. + if (length >= 0) { + this.state = this.baseState; + if (length === 0) { + this.index = this.entityStart; + } + } + else { + // Mark buffer as consumed. + this.index = this.offset + this.buffer.length - 1; + } + }; + /** + * Remove data that has already been consumed from the buffer. + */ + Tokenizer.prototype.cleanup = function () { + // If we are inside of text or attributes, emit what we already have. + if (this.running && this.sectionStart !== this.index) { + if (this.state === State.Text || + (this.state === State.InSpecialTag && this.sequenceIndex === 0)) { + this.cbs.ontext(this.sectionStart, this.index); + this.sectionStart = this.index; + } + else if (this.state === State.InAttributeValueDq || + this.state === State.InAttributeValueSq || + this.state === State.InAttributeValueNq) { + this.cbs.onattribdata(this.sectionStart, this.index); + this.sectionStart = this.index; + } + } + }; + Tokenizer.prototype.shouldContinue = function () { + return this.index < this.buffer.length + this.offset && this.running; + }; + /** + * Iterates through the buffer, calling the function corresponding to the current state. + * + * States that are more likely to be hit are higher up, as a performance improvement. + */ + Tokenizer.prototype.parse = function () { + while (this.shouldContinue()) { + var c = this.buffer.charCodeAt(this.index - this.offset); + switch (this.state) { + case State.Text: { + this.stateText(c); + break; + } + case State.SpecialStartSequence: { + this.stateSpecialStartSequence(c); + break; + } + case State.InSpecialTag: { + this.stateInSpecialTag(c); + break; + } + case State.CDATASequence: { + this.stateCDATASequence(c); + break; + } + case State.InAttributeValueDq: { + this.stateInAttributeValueDoubleQuotes(c); + break; + } + case State.InAttributeName: { + this.stateInAttributeName(c); + break; + } + case State.InCommentLike: { + this.stateInCommentLike(c); + break; + } + case State.InSpecialComment: { + this.stateInSpecialComment(c); + break; + } + case State.BeforeAttributeName: { + this.stateBeforeAttributeName(c); + break; + } + case State.InTagName: { + this.stateInTagName(c); + break; + } + case State.InClosingTagName: { + this.stateInClosingTagName(c); + break; + } + case State.BeforeTagName: { + this.stateBeforeTagName(c); + break; + } + case State.AfterAttributeName: { + this.stateAfterAttributeName(c); + break; + } + case State.InAttributeValueSq: { + this.stateInAttributeValueSingleQuotes(c); + break; + } + case State.BeforeAttributeValue: { + this.stateBeforeAttributeValue(c); + break; + } + case State.BeforeClosingTagName: { + this.stateBeforeClosingTagName(c); + break; + } + case State.AfterClosingTagName: { + this.stateAfterClosingTagName(c); + break; + } + case State.BeforeSpecialS: { + this.stateBeforeSpecialS(c); + break; + } + case State.BeforeSpecialT: { + this.stateBeforeSpecialT(c); + break; + } + case State.InAttributeValueNq: { + this.stateInAttributeValueNoQuotes(c); + break; + } + case State.InSelfClosingTag: { + this.stateInSelfClosingTag(c); + break; + } + case State.InDeclaration: { + this.stateInDeclaration(c); + break; + } + case State.BeforeDeclaration: { + this.stateBeforeDeclaration(c); + break; + } + case State.BeforeComment: { + this.stateBeforeComment(c); + break; + } + case State.InProcessingInstruction: { + this.stateInProcessingInstruction(c); + break; + } + case State.InEntity: { + this.stateInEntity(); + break; + } + } + this.index++; + } + this.cleanup(); + }; + Tokenizer.prototype.finish = function () { + if (this.state === State.InEntity) { + this.entityDecoder.end(); + this.state = this.baseState; + } + this.handleTrailingData(); + this.cbs.onend(); + }; + /** Handle any trailing data. */ + Tokenizer.prototype.handleTrailingData = function () { + var endIndex = this.buffer.length + this.offset; + // If there is no remaining data, we are done. + if (this.sectionStart >= endIndex) { + return; + } + if (this.state === State.InCommentLike) { + if (this.currentSequence === Sequences.CdataEnd) { + this.cbs.oncdata(this.sectionStart, endIndex, 0); + } + else { + this.cbs.oncomment(this.sectionStart, endIndex, 0); + } + } + else if (this.state === State.InTagName || + this.state === State.BeforeAttributeName || + this.state === State.BeforeAttributeValue || + this.state === State.AfterAttributeName || + this.state === State.InAttributeName || + this.state === State.InAttributeValueSq || + this.state === State.InAttributeValueDq || + this.state === State.InAttributeValueNq || + this.state === State.InClosingTagName) { + /* + * If we are currently in an opening or closing tag, us not calling the + * respective callback signals that the tag should be ignored. + */ + } + else { + this.cbs.ontext(this.sectionStart, endIndex); + } + }; + Tokenizer.prototype.emitCodePoint = function (cp, consumed) { + if (this.baseState !== State.Text && + this.baseState !== State.InSpecialTag) { + if (this.sectionStart < this.entityStart) { + this.cbs.onattribdata(this.sectionStart, this.entityStart); + } + this.sectionStart = this.entityStart + consumed; + this.index = this.sectionStart - 1; + this.cbs.onattribentity(cp); + } + else { + if (this.sectionStart < this.entityStart) { + this.cbs.ontext(this.sectionStart, this.entityStart); + } + this.sectionStart = this.entityStart + consumed; + this.index = this.sectionStart - 1; + this.cbs.ontextentity(cp, this.sectionStart); + } + }; + return Tokenizer; +}()); +exports.default = Tokenizer; +//# sourceMappingURL=Tokenizer.js.map \ No newline at end of file diff --git a/node_modules/htmlparser2/lib/Tokenizer.js.map b/node_modules/htmlparser2/lib/Tokenizer.js.map new file mode 100644 index 00000000..59b8871f --- /dev/null +++ b/node_modules/htmlparser2/lib/Tokenizer.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Tokenizer.js","sourceRoot":"https://raw.githubusercontent.com/fb55/htmlparser2/e2939a6c7b05d5c4845b4a2e458a4fc0a65a321d/src/","sources":["Tokenizer.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/htmlparser2/lib/WritableStream.d.ts b/node_modules/htmlparser2/lib/WritableStream.d.ts new file mode 100644 index 00000000..0459e278 --- /dev/null +++ b/node_modules/htmlparser2/lib/WritableStream.d.ts @@ -0,0 +1,17 @@ +/// +/// +import { type Handler, type ParserOptions } from "./Parser.js"; +import { Writable } from "node:stream"; +/** + * WritableStream makes the `Parser` interface available as a NodeJS stream. + * + * @see Parser + */ +export declare class WritableStream extends Writable { + private readonly _parser; + private readonly _decoder; + constructor(cbs: Partial, options?: ParserOptions); + _write(chunk: string | Buffer, encoding: string, callback: () => void): void; + _final(callback: () => void): void; +} +//# sourceMappingURL=WritableStream.d.ts.map \ No newline at end of file diff --git a/node_modules/htmlparser2/lib/WritableStream.d.ts.map b/node_modules/htmlparser2/lib/WritableStream.d.ts.map new file mode 100644 index 00000000..dccb10e4 --- /dev/null +++ b/node_modules/htmlparser2/lib/WritableStream.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"WritableStream.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/htmlparser2/e2939a6c7b05d5c4845b4a2e458a4fc0a65a321d/src/","sources":["WritableStream.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAU,KAAK,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAKvE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAQvC;;;;GAIG;AACH,qBAAa,cAAe,SAAQ,QAAQ;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuB;gBAEpC,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,aAAa;IAKjD,MAAM,CACX,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,IAAI,GACrB,IAAI;IAOE,MAAM,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;CAI9C"} \ No newline at end of file diff --git a/node_modules/htmlparser2/lib/WritableStream.js b/node_modules/htmlparser2/lib/WritableStream.js new file mode 100644 index 00000000..3614c31b --- /dev/null +++ b/node_modules/htmlparser2/lib/WritableStream.js @@ -0,0 +1,54 @@ +"use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", { value: true }); +exports.WritableStream = void 0; +var Parser_js_1 = require("./Parser.js"); +/* + * NOTE: If either of these two imports produces a type error, + * please update your @types/node dependency! + */ +var node_stream_1 = require("node:stream"); +var node_string_decoder_1 = require("node:string_decoder"); +// Following the example in https://nodejs.org/api/stream.html#stream_decoding_buffers_in_a_writable_stream +function isBuffer(_chunk, encoding) { + return encoding === "buffer"; +} +/** + * WritableStream makes the `Parser` interface available as a NodeJS stream. + * + * @see Parser + */ +var WritableStream = /** @class */ (function (_super) { + __extends(WritableStream, _super); + function WritableStream(cbs, options) { + var _this = _super.call(this, { decodeStrings: false }) || this; + _this._decoder = new node_string_decoder_1.StringDecoder(); + _this._parser = new Parser_js_1.Parser(cbs, options); + return _this; + } + WritableStream.prototype._write = function (chunk, encoding, callback) { + this._parser.write(isBuffer(chunk, encoding) ? this._decoder.write(chunk) : chunk); + callback(); + }; + WritableStream.prototype._final = function (callback) { + this._parser.end(this._decoder.end()); + callback(); + }; + return WritableStream; +}(node_stream_1.Writable)); +exports.WritableStream = WritableStream; +//# sourceMappingURL=WritableStream.js.map \ No newline at end of file diff --git a/node_modules/htmlparser2/lib/WritableStream.js.map b/node_modules/htmlparser2/lib/WritableStream.js.map new file mode 100644 index 00000000..a33c95da --- /dev/null +++ b/node_modules/htmlparser2/lib/WritableStream.js.map @@ -0,0 +1 @@ +{"version":3,"file":"WritableStream.js","sourceRoot":"https://raw.githubusercontent.com/fb55/htmlparser2/e2939a6c7b05d5c4845b4a2e458a4fc0a65a321d/src/","sources":["WritableStream.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,yCAAuE;AACvE;;;GAGG;AACH,2CAAuC;AACvC,2DAAoD;AAEpD,2GAA2G;AAC3G,SAAS,QAAQ,CAAC,MAAuB,EAAE,QAAgB;IACvD,OAAO,QAAQ,KAAK,QAAQ,CAAC;AACjC,CAAC;AAED;;;;GAIG;AACH;IAAoC,kCAAQ;IAIxC,wBAAY,GAAqB,EAAE,OAAuB;QACtD,YAAA,MAAK,YAAC,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,SAAC;QAHnB,cAAQ,GAAG,IAAI,mCAAa,EAAE,CAAC;QAI5C,KAAI,CAAC,OAAO,GAAG,IAAI,kBAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;;IAC5C,CAAC;IAEQ,+BAAM,GAAf,UACI,KAAsB,EACtB,QAAgB,EAChB,QAAoB;QAEpB,IAAI,CAAC,OAAO,CAAC,KAAK,CACd,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CACjE,CAAC;QACF,QAAQ,EAAE,CAAC;IACf,CAAC;IAEQ,+BAAM,GAAf,UAAgB,QAAoB;QAChC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;QACtC,QAAQ,EAAE,CAAC;IACf,CAAC;IACL,qBAAC;AAAD,CAAC,AAxBD,CAAoC,sBAAQ,GAwB3C;AAxBY,wCAAc"} \ No newline at end of file diff --git a/node_modules/htmlparser2/lib/esm/Parser.d.ts b/node_modules/htmlparser2/lib/esm/Parser.d.ts new file mode 100644 index 00000000..b6176744 --- /dev/null +++ b/node_modules/htmlparser2/lib/esm/Parser.d.ts @@ -0,0 +1,198 @@ +import Tokenizer, { type Callbacks, QuoteType } from "./Tokenizer.js"; +export interface ParserOptions { + /** + * Indicates whether special tags (``. + this.sequenceIndex = Number(c === CharCodes.Lt); + } + } + stateCDATASequence(c) { + if (c === Sequences.Cdata[this.sequenceIndex]) { + if (++this.sequenceIndex === Sequences.Cdata.length) { + this.state = State.InCommentLike; + this.currentSequence = Sequences.CdataEnd; + this.sequenceIndex = 0; + this.sectionStart = this.index + 1; + } + } + else { + this.sequenceIndex = 0; + this.state = State.InDeclaration; + this.stateInDeclaration(c); // Reconsume the character + } + } + /** + * When we wait for one specific character, we can speed things up + * by skipping through the buffer until we find it. + * + * @returns Whether the character was found. + */ + fastForwardTo(c) { + while (++this.index < this.buffer.length + this.offset) { + if (this.buffer.charCodeAt(this.index - this.offset) === c) { + return true; + } + } + /* + * We increment the index at the end of the `parse` loop, + * so set it to `buffer.length - 1` here. + * + * TODO: Refactor `parse` to increment index before calling states. + */ + this.index = this.buffer.length + this.offset - 1; + return false; + } + /** + * Comments and CDATA end with `-->` and `]]>`. + * + * Their common qualities are: + * - Their end sequences have a distinct character they start with. + * - That character is then repeated, so we have to check multiple repeats. + * - All characters but the start character of the sequence can be skipped. + */ + stateInCommentLike(c) { + if (c === this.currentSequence[this.sequenceIndex]) { + if (++this.sequenceIndex === this.currentSequence.length) { + if (this.currentSequence === Sequences.CdataEnd) { + this.cbs.oncdata(this.sectionStart, this.index, 2); + } + else { + this.cbs.oncomment(this.sectionStart, this.index, 2); + } + this.sequenceIndex = 0; + this.sectionStart = this.index + 1; + this.state = State.Text; + } + } + else if (this.sequenceIndex === 0) { + // Fast-forward to the first character of the sequence + if (this.fastForwardTo(this.currentSequence[0])) { + this.sequenceIndex = 1; + } + } + else if (c !== this.currentSequence[this.sequenceIndex - 1]) { + // Allow long sequences, eg. --->, ]]]> + this.sequenceIndex = 0; + } + } + /** + * HTML only allows ASCII alpha characters (a-z and A-Z) at the beginning of a tag name. + * + * XML allows a lot more characters here (@see https://www.w3.org/TR/REC-xml/#NT-NameStartChar). + * We allow anything that wouldn't end the tag. + */ + isTagStartChar(c) { + return this.xmlMode ? !isEndOfTagSection(c) : isASCIIAlpha(c); + } + startSpecial(sequence, offset) { + this.isSpecial = true; + this.currentSequence = sequence; + this.sequenceIndex = offset; + this.state = State.SpecialStartSequence; + } + stateBeforeTagName(c) { + if (c === CharCodes.ExclamationMark) { + this.state = State.BeforeDeclaration; + this.sectionStart = this.index + 1; + } + else if (c === CharCodes.Questionmark) { + this.state = State.InProcessingInstruction; + this.sectionStart = this.index + 1; + } + else if (this.isTagStartChar(c)) { + const lower = c | 0x20; + this.sectionStart = this.index; + if (this.xmlMode) { + this.state = State.InTagName; + } + else if (lower === Sequences.ScriptEnd[2]) { + this.state = State.BeforeSpecialS; + } + else if (lower === Sequences.TitleEnd[2]) { + this.state = State.BeforeSpecialT; + } + else { + this.state = State.InTagName; + } + } + else if (c === CharCodes.Slash) { + this.state = State.BeforeClosingTagName; + } + else { + this.state = State.Text; + this.stateText(c); + } + } + stateInTagName(c) { + if (isEndOfTagSection(c)) { + this.cbs.onopentagname(this.sectionStart, this.index); + this.sectionStart = -1; + this.state = State.BeforeAttributeName; + this.stateBeforeAttributeName(c); + } + } + stateBeforeClosingTagName(c) { + if (isWhitespace(c)) { + // Ignore + } + else if (c === CharCodes.Gt) { + this.state = State.Text; + } + else { + this.state = this.isTagStartChar(c) + ? State.InClosingTagName + : State.InSpecialComment; + this.sectionStart = this.index; + } + } + stateInClosingTagName(c) { + if (c === CharCodes.Gt || isWhitespace(c)) { + this.cbs.onclosetag(this.sectionStart, this.index); + this.sectionStart = -1; + this.state = State.AfterClosingTagName; + this.stateAfterClosingTagName(c); + } + } + stateAfterClosingTagName(c) { + // Skip everything until ">" + if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) { + this.state = State.Text; + this.sectionStart = this.index + 1; + } + } + stateBeforeAttributeName(c) { + if (c === CharCodes.Gt) { + this.cbs.onopentagend(this.index); + if (this.isSpecial) { + this.state = State.InSpecialTag; + this.sequenceIndex = 0; + } + else { + this.state = State.Text; + } + this.sectionStart = this.index + 1; + } + else if (c === CharCodes.Slash) { + this.state = State.InSelfClosingTag; + } + else if (!isWhitespace(c)) { + this.state = State.InAttributeName; + this.sectionStart = this.index; + } + } + stateInSelfClosingTag(c) { + if (c === CharCodes.Gt) { + this.cbs.onselfclosingtag(this.index); + this.state = State.Text; + this.sectionStart = this.index + 1; + this.isSpecial = false; // Reset special state, in case of self-closing special tags + } + else if (!isWhitespace(c)) { + this.state = State.BeforeAttributeName; + this.stateBeforeAttributeName(c); + } + } + stateInAttributeName(c) { + if (c === CharCodes.Eq || isEndOfTagSection(c)) { + this.cbs.onattribname(this.sectionStart, this.index); + this.sectionStart = this.index; + this.state = State.AfterAttributeName; + this.stateAfterAttributeName(c); + } + } + stateAfterAttributeName(c) { + if (c === CharCodes.Eq) { + this.state = State.BeforeAttributeValue; + } + else if (c === CharCodes.Slash || c === CharCodes.Gt) { + this.cbs.onattribend(QuoteType.NoValue, this.sectionStart); + this.sectionStart = -1; + this.state = State.BeforeAttributeName; + this.stateBeforeAttributeName(c); + } + else if (!isWhitespace(c)) { + this.cbs.onattribend(QuoteType.NoValue, this.sectionStart); + this.state = State.InAttributeName; + this.sectionStart = this.index; + } + } + stateBeforeAttributeValue(c) { + if (c === CharCodes.DoubleQuote) { + this.state = State.InAttributeValueDq; + this.sectionStart = this.index + 1; + } + else if (c === CharCodes.SingleQuote) { + this.state = State.InAttributeValueSq; + this.sectionStart = this.index + 1; + } + else if (!isWhitespace(c)) { + this.sectionStart = this.index; + this.state = State.InAttributeValueNq; + this.stateInAttributeValueNoQuotes(c); // Reconsume token + } + } + handleInAttributeValue(c, quote) { + if (c === quote || + (!this.decodeEntities && this.fastForwardTo(quote))) { + this.cbs.onattribdata(this.sectionStart, this.index); + this.sectionStart = -1; + this.cbs.onattribend(quote === CharCodes.DoubleQuote + ? QuoteType.Double + : QuoteType.Single, this.index + 1); + this.state = State.BeforeAttributeName; + } + else if (this.decodeEntities && c === CharCodes.Amp) { + this.startEntity(); + } + } + stateInAttributeValueDoubleQuotes(c) { + this.handleInAttributeValue(c, CharCodes.DoubleQuote); + } + stateInAttributeValueSingleQuotes(c) { + this.handleInAttributeValue(c, CharCodes.SingleQuote); + } + stateInAttributeValueNoQuotes(c) { + if (isWhitespace(c) || c === CharCodes.Gt) { + this.cbs.onattribdata(this.sectionStart, this.index); + this.sectionStart = -1; + this.cbs.onattribend(QuoteType.Unquoted, this.index); + this.state = State.BeforeAttributeName; + this.stateBeforeAttributeName(c); + } + else if (this.decodeEntities && c === CharCodes.Amp) { + this.startEntity(); + } + } + stateBeforeDeclaration(c) { + if (c === CharCodes.OpeningSquareBracket) { + this.state = State.CDATASequence; + this.sequenceIndex = 0; + } + else { + this.state = + c === CharCodes.Dash + ? State.BeforeComment + : State.InDeclaration; + } + } + stateInDeclaration(c) { + if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) { + this.cbs.ondeclaration(this.sectionStart, this.index); + this.state = State.Text; + this.sectionStart = this.index + 1; + } + } + stateInProcessingInstruction(c) { + if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) { + this.cbs.onprocessinginstruction(this.sectionStart, this.index); + this.state = State.Text; + this.sectionStart = this.index + 1; + } + } + stateBeforeComment(c) { + if (c === CharCodes.Dash) { + this.state = State.InCommentLike; + this.currentSequence = Sequences.CommentEnd; + // Allow short comments (eg. ) + this.sequenceIndex = 2; + this.sectionStart = this.index + 1; + } + else { + this.state = State.InDeclaration; + } + } + stateInSpecialComment(c) { + if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) { + this.cbs.oncomment(this.sectionStart, this.index, 0); + this.state = State.Text; + this.sectionStart = this.index + 1; + } + } + stateBeforeSpecialS(c) { + const lower = c | 0x20; + if (lower === Sequences.ScriptEnd[3]) { + this.startSpecial(Sequences.ScriptEnd, 4); + } + else if (lower === Sequences.StyleEnd[3]) { + this.startSpecial(Sequences.StyleEnd, 4); + } + else { + this.state = State.InTagName; + this.stateInTagName(c); // Consume the token again + } + } + stateBeforeSpecialT(c) { + const lower = c | 0x20; + if (lower === Sequences.TitleEnd[3]) { + this.startSpecial(Sequences.TitleEnd, 4); + } + else if (lower === Sequences.TextareaEnd[3]) { + this.startSpecial(Sequences.TextareaEnd, 4); + } + else { + this.state = State.InTagName; + this.stateInTagName(c); // Consume the token again + } + } + startEntity() { + this.baseState = this.state; + this.state = State.InEntity; + this.entityStart = this.index; + this.entityDecoder.startEntity(this.xmlMode + ? DecodingMode.Strict + : this.baseState === State.Text || + this.baseState === State.InSpecialTag + ? DecodingMode.Legacy + : DecodingMode.Attribute); + } + stateInEntity() { + const length = this.entityDecoder.write(this.buffer, this.index - this.offset); + // If `length` is positive, we are done with the entity. + if (length >= 0) { + this.state = this.baseState; + if (length === 0) { + this.index = this.entityStart; + } + } + else { + // Mark buffer as consumed. + this.index = this.offset + this.buffer.length - 1; + } + } + /** + * Remove data that has already been consumed from the buffer. + */ + cleanup() { + // If we are inside of text or attributes, emit what we already have. + if (this.running && this.sectionStart !== this.index) { + if (this.state === State.Text || + (this.state === State.InSpecialTag && this.sequenceIndex === 0)) { + this.cbs.ontext(this.sectionStart, this.index); + this.sectionStart = this.index; + } + else if (this.state === State.InAttributeValueDq || + this.state === State.InAttributeValueSq || + this.state === State.InAttributeValueNq) { + this.cbs.onattribdata(this.sectionStart, this.index); + this.sectionStart = this.index; + } + } + } + shouldContinue() { + return this.index < this.buffer.length + this.offset && this.running; + } + /** + * Iterates through the buffer, calling the function corresponding to the current state. + * + * States that are more likely to be hit are higher up, as a performance improvement. + */ + parse() { + while (this.shouldContinue()) { + const c = this.buffer.charCodeAt(this.index - this.offset); + switch (this.state) { + case State.Text: { + this.stateText(c); + break; + } + case State.SpecialStartSequence: { + this.stateSpecialStartSequence(c); + break; + } + case State.InSpecialTag: { + this.stateInSpecialTag(c); + break; + } + case State.CDATASequence: { + this.stateCDATASequence(c); + break; + } + case State.InAttributeValueDq: { + this.stateInAttributeValueDoubleQuotes(c); + break; + } + case State.InAttributeName: { + this.stateInAttributeName(c); + break; + } + case State.InCommentLike: { + this.stateInCommentLike(c); + break; + } + case State.InSpecialComment: { + this.stateInSpecialComment(c); + break; + } + case State.BeforeAttributeName: { + this.stateBeforeAttributeName(c); + break; + } + case State.InTagName: { + this.stateInTagName(c); + break; + } + case State.InClosingTagName: { + this.stateInClosingTagName(c); + break; + } + case State.BeforeTagName: { + this.stateBeforeTagName(c); + break; + } + case State.AfterAttributeName: { + this.stateAfterAttributeName(c); + break; + } + case State.InAttributeValueSq: { + this.stateInAttributeValueSingleQuotes(c); + break; + } + case State.BeforeAttributeValue: { + this.stateBeforeAttributeValue(c); + break; + } + case State.BeforeClosingTagName: { + this.stateBeforeClosingTagName(c); + break; + } + case State.AfterClosingTagName: { + this.stateAfterClosingTagName(c); + break; + } + case State.BeforeSpecialS: { + this.stateBeforeSpecialS(c); + break; + } + case State.BeforeSpecialT: { + this.stateBeforeSpecialT(c); + break; + } + case State.InAttributeValueNq: { + this.stateInAttributeValueNoQuotes(c); + break; + } + case State.InSelfClosingTag: { + this.stateInSelfClosingTag(c); + break; + } + case State.InDeclaration: { + this.stateInDeclaration(c); + break; + } + case State.BeforeDeclaration: { + this.stateBeforeDeclaration(c); + break; + } + case State.BeforeComment: { + this.stateBeforeComment(c); + break; + } + case State.InProcessingInstruction: { + this.stateInProcessingInstruction(c); + break; + } + case State.InEntity: { + this.stateInEntity(); + break; + } + } + this.index++; + } + this.cleanup(); + } + finish() { + if (this.state === State.InEntity) { + this.entityDecoder.end(); + this.state = this.baseState; + } + this.handleTrailingData(); + this.cbs.onend(); + } + /** Handle any trailing data. */ + handleTrailingData() { + const endIndex = this.buffer.length + this.offset; + // If there is no remaining data, we are done. + if (this.sectionStart >= endIndex) { + return; + } + if (this.state === State.InCommentLike) { + if (this.currentSequence === Sequences.CdataEnd) { + this.cbs.oncdata(this.sectionStart, endIndex, 0); + } + else { + this.cbs.oncomment(this.sectionStart, endIndex, 0); + } + } + else if (this.state === State.InTagName || + this.state === State.BeforeAttributeName || + this.state === State.BeforeAttributeValue || + this.state === State.AfterAttributeName || + this.state === State.InAttributeName || + this.state === State.InAttributeValueSq || + this.state === State.InAttributeValueDq || + this.state === State.InAttributeValueNq || + this.state === State.InClosingTagName) { + /* + * If we are currently in an opening or closing tag, us not calling the + * respective callback signals that the tag should be ignored. + */ + } + else { + this.cbs.ontext(this.sectionStart, endIndex); + } + } + emitCodePoint(cp, consumed) { + if (this.baseState !== State.Text && + this.baseState !== State.InSpecialTag) { + if (this.sectionStart < this.entityStart) { + this.cbs.onattribdata(this.sectionStart, this.entityStart); + } + this.sectionStart = this.entityStart + consumed; + this.index = this.sectionStart - 1; + this.cbs.onattribentity(cp); + } + else { + if (this.sectionStart < this.entityStart) { + this.cbs.ontext(this.sectionStart, this.entityStart); + } + this.sectionStart = this.entityStart + consumed; + this.index = this.sectionStart - 1; + this.cbs.ontextentity(cp, this.sectionStart); + } + } +} +//# sourceMappingURL=Tokenizer.js.map \ No newline at end of file diff --git a/node_modules/htmlparser2/lib/esm/Tokenizer.js.map b/node_modules/htmlparser2/lib/esm/Tokenizer.js.map new file mode 100644 index 00000000..01b7b49f --- /dev/null +++ b/node_modules/htmlparser2/lib/esm/Tokenizer.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Tokenizer.js","sourceRoot":"https://raw.githubusercontent.com/fb55/htmlparser2/e2939a6c7b05d5c4845b4a2e458a4fc0a65a321d/src/","sources":["Tokenizer.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/htmlparser2/lib/esm/WritableStream.d.ts b/node_modules/htmlparser2/lib/esm/WritableStream.d.ts new file mode 100644 index 00000000..0459e278 --- /dev/null +++ b/node_modules/htmlparser2/lib/esm/WritableStream.d.ts @@ -0,0 +1,17 @@ +/// +/// +import { type Handler, type ParserOptions } from "./Parser.js"; +import { Writable } from "node:stream"; +/** + * WritableStream makes the `Parser` interface available as a NodeJS stream. + * + * @see Parser + */ +export declare class WritableStream extends Writable { + private readonly _parser; + private readonly _decoder; + constructor(cbs: Partial, options?: ParserOptions); + _write(chunk: string | Buffer, encoding: string, callback: () => void): void; + _final(callback: () => void): void; +} +//# sourceMappingURL=WritableStream.d.ts.map \ No newline at end of file diff --git a/node_modules/htmlparser2/lib/esm/WritableStream.d.ts.map b/node_modules/htmlparser2/lib/esm/WritableStream.d.ts.map new file mode 100644 index 00000000..dccb10e4 --- /dev/null +++ b/node_modules/htmlparser2/lib/esm/WritableStream.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"WritableStream.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/htmlparser2/e2939a6c7b05d5c4845b4a2e458a4fc0a65a321d/src/","sources":["WritableStream.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAU,KAAK,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAKvE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAQvC;;;;GAIG;AACH,qBAAa,cAAe,SAAQ,QAAQ;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuB;gBAEpC,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,aAAa;IAKjD,MAAM,CACX,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,IAAI,GACrB,IAAI;IAOE,MAAM,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;CAI9C"} \ No newline at end of file diff --git a/node_modules/htmlparser2/lib/esm/WritableStream.js b/node_modules/htmlparser2/lib/esm/WritableStream.js new file mode 100644 index 00000000..bf6093e7 --- /dev/null +++ b/node_modules/htmlparser2/lib/esm/WritableStream.js @@ -0,0 +1,32 @@ +import { Parser } from "./Parser.js"; +/* + * NOTE: If either of these two imports produces a type error, + * please update your @types/node dependency! + */ +import { Writable } from "node:stream"; +import { StringDecoder } from "node:string_decoder"; +// Following the example in https://nodejs.org/api/stream.html#stream_decoding_buffers_in_a_writable_stream +function isBuffer(_chunk, encoding) { + return encoding === "buffer"; +} +/** + * WritableStream makes the `Parser` interface available as a NodeJS stream. + * + * @see Parser + */ +export class WritableStream extends Writable { + constructor(cbs, options) { + super({ decodeStrings: false }); + this._decoder = new StringDecoder(); + this._parser = new Parser(cbs, options); + } + _write(chunk, encoding, callback) { + this._parser.write(isBuffer(chunk, encoding) ? this._decoder.write(chunk) : chunk); + callback(); + } + _final(callback) { + this._parser.end(this._decoder.end()); + callback(); + } +} +//# sourceMappingURL=WritableStream.js.map \ No newline at end of file diff --git a/node_modules/htmlparser2/lib/esm/WritableStream.js.map b/node_modules/htmlparser2/lib/esm/WritableStream.js.map new file mode 100644 index 00000000..22eba8e0 --- /dev/null +++ b/node_modules/htmlparser2/lib/esm/WritableStream.js.map @@ -0,0 +1 @@ +{"version":3,"file":"WritableStream.js","sourceRoot":"https://raw.githubusercontent.com/fb55/htmlparser2/e2939a6c7b05d5c4845b4a2e458a4fc0a65a321d/src/","sources":["WritableStream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAoC,MAAM,aAAa,CAAC;AACvE;;;GAGG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,2GAA2G;AAC3G,SAAS,QAAQ,CAAC,MAAuB,EAAE,QAAgB;IACvD,OAAO,QAAQ,KAAK,QAAQ,CAAC;AACjC,CAAC;AAED;;;;GAIG;AACH,MAAM,OAAO,cAAe,SAAQ,QAAQ;IAIxC,YAAY,GAAqB,EAAE,OAAuB;QACtD,KAAK,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC;QAHnB,aAAQ,GAAG,IAAI,aAAa,EAAE,CAAC;QAI5C,IAAI,CAAC,OAAO,GAAG,IAAI,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IAEQ,MAAM,CACX,KAAsB,EACtB,QAAgB,EAChB,QAAoB;QAEpB,IAAI,CAAC,OAAO,CAAC,KAAK,CACd,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CACjE,CAAC;QACF,QAAQ,EAAE,CAAC;IACf,CAAC;IAEQ,MAAM,CAAC,QAAoB;QAChC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;QACtC,QAAQ,EAAE,CAAC;IACf,CAAC;CACJ"} \ No newline at end of file diff --git a/node_modules/htmlparser2/lib/esm/index.d.ts b/node_modules/htmlparser2/lib/esm/index.d.ts new file mode 100644 index 00000000..c906b7f3 --- /dev/null +++ b/node_modules/htmlparser2/lib/esm/index.d.ts @@ -0,0 +1,54 @@ +import { Parser, type ParserOptions } from "./Parser.js"; +export type { Handler, ParserOptions } from "./Parser.js"; +export { Parser } from "./Parser.js"; +import { type DomHandlerOptions, type ChildNode, type Element, type Document } from "domhandler"; +export { DomHandler, DomHandler as DefaultHandler, type DomHandlerOptions, } from "domhandler"; +export type Options = ParserOptions & DomHandlerOptions; +/** + * Parses the data, returns the resulting document. + * + * @param data The data that should be parsed. + * @param options Optional options for the parser and DOM handler. + */ +export declare function parseDocument(data: string, options?: Options): Document; +/** + * Parses data, returns an array of the root nodes. + * + * Note that the root nodes still have a `Document` node as their parent. + * Use `parseDocument` to get the `Document` node instead. + * + * @param data The data that should be parsed. + * @param options Optional options for the parser and DOM handler. + * @deprecated Use `parseDocument` instead. + */ +export declare function parseDOM(data: string, options?: Options): ChildNode[]; +/** + * Creates a parser instance, with an attached DOM handler. + * + * @param callback A callback that will be called once parsing has been completed, with the resulting document. + * @param options Optional options for the parser and DOM handler. + * @param elementCallback An optional callback that will be called every time a tag has been completed inside of the DOM. + */ +export declare function createDocumentStream(callback: (error: Error | null, document: Document) => void, options?: Options, elementCallback?: (element: Element) => void): Parser; +/** + * Creates a parser instance, with an attached DOM handler. + * + * @param callback A callback that will be called once parsing has been completed, with an array of root nodes. + * @param options Optional options for the parser and DOM handler. + * @param elementCallback An optional callback that will be called every time a tag has been completed inside of the DOM. + * @deprecated Use `createDocumentStream` instead. + */ +export declare function createDomStream(callback: (error: Error | null, dom: ChildNode[]) => void, options?: Options, elementCallback?: (element: Element) => void): Parser; +export { default as Tokenizer, type Callbacks as TokenizerCallbacks, QuoteType, } from "./Tokenizer.js"; +export * as ElementType from "domelementtype"; +import { type Feed } from "domutils"; +export { getFeed, type Feed } from "domutils"; +/** + * Parse a feed. + * + * @param feed The feed that should be parsed, as a string. + * @param options Optionally, options for parsing. When using this, you should set `xmlMode` to `true`. + */ +export declare function parseFeed(feed: string, options?: Options): Feed | null; +export * as DomUtils from "domutils"; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/htmlparser2/lib/esm/index.d.ts.map b/node_modules/htmlparser2/lib/esm/index.d.ts.map new file mode 100644 index 00000000..a3745e3c --- /dev/null +++ b/node_modules/htmlparser2/lib/esm/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/htmlparser2/e2939a6c7b05d5c4845b4a2e458a4fc0a65a321d/src/","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AACzD,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAEH,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACd,KAAK,OAAO,EACZ,KAAK,QAAQ,EAChB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACH,UAAU,EAEV,UAAU,IAAI,cAAc,EAC5B,KAAK,iBAAiB,GACzB,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,OAAO,GAAG,aAAa,GAAG,iBAAiB,CAAC;AAIxD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,QAAQ,CAIvE;AACD;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,EAAE,CAErE;AACD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAChC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,EAAE,QAAQ,EAAE,QAAQ,KAAK,IAAI,EAC3D,OAAO,CAAC,EAAE,OAAO,EACjB,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAC7C,MAAM,CAOR;AACD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC3B,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,IAAI,EACzD,OAAO,CAAC,EAAE,OAAO,EACjB,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAC7C,MAAM,CAGR;AAED,OAAO,EACH,OAAO,IAAI,SAAS,EACpB,KAAK,SAAS,IAAI,kBAAkB,EACpC,SAAS,GACZ,MAAM,gBAAgB,CAAC;AAMxB,OAAO,KAAK,WAAW,MAAM,gBAAgB,CAAC;AAE9C,OAAO,EAAW,KAAK,IAAI,EAAE,MAAM,UAAU,CAAC;AAE9C,OAAO,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,UAAU,CAAC;AAI9C;;;;;GAKG;AACH,wBAAgB,SAAS,CACrB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,OAAiC,GAC3C,IAAI,GAAG,IAAI,CAEb;AAED,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAC"} \ No newline at end of file diff --git a/node_modules/htmlparser2/lib/esm/index.js b/node_modules/htmlparser2/lib/esm/index.js new file mode 100644 index 00000000..38bfe96f --- /dev/null +++ b/node_modules/htmlparser2/lib/esm/index.js @@ -0,0 +1,74 @@ +import { Parser } from "./Parser.js"; +export { Parser } from "./Parser.js"; +import { DomHandler, } from "domhandler"; +export { DomHandler, +// Old name for DomHandler +DomHandler as DefaultHandler, } from "domhandler"; +// Helper methods +/** + * Parses the data, returns the resulting document. + * + * @param data The data that should be parsed. + * @param options Optional options for the parser and DOM handler. + */ +export function parseDocument(data, options) { + const handler = new DomHandler(undefined, options); + new Parser(handler, options).end(data); + return handler.root; +} +/** + * Parses data, returns an array of the root nodes. + * + * Note that the root nodes still have a `Document` node as their parent. + * Use `parseDocument` to get the `Document` node instead. + * + * @param data The data that should be parsed. + * @param options Optional options for the parser and DOM handler. + * @deprecated Use `parseDocument` instead. + */ +export function parseDOM(data, options) { + return parseDocument(data, options).children; +} +/** + * Creates a parser instance, with an attached DOM handler. + * + * @param callback A callback that will be called once parsing has been completed, with the resulting document. + * @param options Optional options for the parser and DOM handler. + * @param elementCallback An optional callback that will be called every time a tag has been completed inside of the DOM. + */ +export function createDocumentStream(callback, options, elementCallback) { + const handler = new DomHandler((error) => callback(error, handler.root), options, elementCallback); + return new Parser(handler, options); +} +/** + * Creates a parser instance, with an attached DOM handler. + * + * @param callback A callback that will be called once parsing has been completed, with an array of root nodes. + * @param options Optional options for the parser and DOM handler. + * @param elementCallback An optional callback that will be called every time a tag has been completed inside of the DOM. + * @deprecated Use `createDocumentStream` instead. + */ +export function createDomStream(callback, options, elementCallback) { + const handler = new DomHandler(callback, options, elementCallback); + return new Parser(handler, options); +} +export { default as Tokenizer, QuoteType, } from "./Tokenizer.js"; +/* + * All of the following exports exist for backwards-compatibility. + * They should probably be removed eventually. + */ +export * as ElementType from "domelementtype"; +import { getFeed } from "domutils"; +export { getFeed } from "domutils"; +const parseFeedDefaultOptions = { xmlMode: true }; +/** + * Parse a feed. + * + * @param feed The feed that should be parsed, as a string. + * @param options Optionally, options for parsing. When using this, you should set `xmlMode` to `true`. + */ +export function parseFeed(feed, options = parseFeedDefaultOptions) { + return getFeed(parseDOM(feed, options)); +} +export * as DomUtils from "domutils"; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/node_modules/htmlparser2/lib/esm/index.js.map b/node_modules/htmlparser2/lib/esm/index.js.map new file mode 100644 index 00000000..e6c9566e --- /dev/null +++ b/node_modules/htmlparser2/lib/esm/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"https://raw.githubusercontent.com/fb55/htmlparser2/e2939a6c7b05d5c4845b4a2e458a4fc0a65a321d/src/","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAsB,MAAM,aAAa,CAAC;AAEzD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EACH,UAAU,GAKb,MAAM,YAAY,CAAC;AAEpB,OAAO,EACH,UAAU;AACV,0BAA0B;AAC1B,UAAU,IAAI,cAAc,GAE/B,MAAM,YAAY,CAAC;AAIpB,iBAAiB;AAEjB;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,OAAiB;IACzD,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACnD,IAAI,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACvC,OAAO,OAAO,CAAC,IAAI,CAAC;AACxB,CAAC;AACD;;;;;;;;;GASG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAY,EAAE,OAAiB;IACpD,OAAO,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC;AACjD,CAAC;AACD;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAChC,QAA2D,EAC3D,OAAiB,EACjB,eAA4C;IAE5C,MAAM,OAAO,GAAe,IAAI,UAAU,CACtC,CAAC,KAAmB,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,EACtD,OAAO,EACP,eAAe,CAClB,CAAC;IACF,OAAO,IAAI,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACxC,CAAC;AACD;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAC3B,QAAyD,EACzD,OAAiB,EACjB,eAA4C;IAE5C,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,QAAQ,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;IACnE,OAAO,IAAI,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACxC,CAAC;AAED,OAAO,EACH,OAAO,IAAI,SAAS,EAEpB,SAAS,GACZ,MAAM,gBAAgB,CAAC;AAExB;;;GAGG;AACH,OAAO,KAAK,WAAW,MAAM,gBAAgB,CAAC;AAE9C,OAAO,EAAE,OAAO,EAAa,MAAM,UAAU,CAAC;AAE9C,OAAO,EAAE,OAAO,EAAa,MAAM,UAAU,CAAC;AAE9C,MAAM,uBAAuB,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAElD;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CACrB,IAAY,EACZ,UAAmB,uBAAuB;IAE1C,OAAO,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAC"} \ No newline at end of file diff --git a/node_modules/htmlparser2/lib/esm/package.json b/node_modules/htmlparser2/lib/esm/package.json new file mode 100644 index 00000000..089153bc --- /dev/null +++ b/node_modules/htmlparser2/lib/esm/package.json @@ -0,0 +1 @@ +{"type":"module"} diff --git a/node_modules/htmlparser2/lib/index.d.ts b/node_modules/htmlparser2/lib/index.d.ts new file mode 100644 index 00000000..c906b7f3 --- /dev/null +++ b/node_modules/htmlparser2/lib/index.d.ts @@ -0,0 +1,54 @@ +import { Parser, type ParserOptions } from "./Parser.js"; +export type { Handler, ParserOptions } from "./Parser.js"; +export { Parser } from "./Parser.js"; +import { type DomHandlerOptions, type ChildNode, type Element, type Document } from "domhandler"; +export { DomHandler, DomHandler as DefaultHandler, type DomHandlerOptions, } from "domhandler"; +export type Options = ParserOptions & DomHandlerOptions; +/** + * Parses the data, returns the resulting document. + * + * @param data The data that should be parsed. + * @param options Optional options for the parser and DOM handler. + */ +export declare function parseDocument(data: string, options?: Options): Document; +/** + * Parses data, returns an array of the root nodes. + * + * Note that the root nodes still have a `Document` node as their parent. + * Use `parseDocument` to get the `Document` node instead. + * + * @param data The data that should be parsed. + * @param options Optional options for the parser and DOM handler. + * @deprecated Use `parseDocument` instead. + */ +export declare function parseDOM(data: string, options?: Options): ChildNode[]; +/** + * Creates a parser instance, with an attached DOM handler. + * + * @param callback A callback that will be called once parsing has been completed, with the resulting document. + * @param options Optional options for the parser and DOM handler. + * @param elementCallback An optional callback that will be called every time a tag has been completed inside of the DOM. + */ +export declare function createDocumentStream(callback: (error: Error | null, document: Document) => void, options?: Options, elementCallback?: (element: Element) => void): Parser; +/** + * Creates a parser instance, with an attached DOM handler. + * + * @param callback A callback that will be called once parsing has been completed, with an array of root nodes. + * @param options Optional options for the parser and DOM handler. + * @param elementCallback An optional callback that will be called every time a tag has been completed inside of the DOM. + * @deprecated Use `createDocumentStream` instead. + */ +export declare function createDomStream(callback: (error: Error | null, dom: ChildNode[]) => void, options?: Options, elementCallback?: (element: Element) => void): Parser; +export { default as Tokenizer, type Callbacks as TokenizerCallbacks, QuoteType, } from "./Tokenizer.js"; +export * as ElementType from "domelementtype"; +import { type Feed } from "domutils"; +export { getFeed, type Feed } from "domutils"; +/** + * Parse a feed. + * + * @param feed The feed that should be parsed, as a string. + * @param options Optionally, options for parsing. When using this, you should set `xmlMode` to `true`. + */ +export declare function parseFeed(feed: string, options?: Options): Feed | null; +export * as DomUtils from "domutils"; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/htmlparser2/lib/index.d.ts.map b/node_modules/htmlparser2/lib/index.d.ts.map new file mode 100644 index 00000000..a3745e3c --- /dev/null +++ b/node_modules/htmlparser2/lib/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/htmlparser2/e2939a6c7b05d5c4845b4a2e458a4fc0a65a321d/src/","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AACzD,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAEH,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACd,KAAK,OAAO,EACZ,KAAK,QAAQ,EAChB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACH,UAAU,EAEV,UAAU,IAAI,cAAc,EAC5B,KAAK,iBAAiB,GACzB,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,OAAO,GAAG,aAAa,GAAG,iBAAiB,CAAC;AAIxD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,QAAQ,CAIvE;AACD;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,EAAE,CAErE;AACD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAChC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,EAAE,QAAQ,EAAE,QAAQ,KAAK,IAAI,EAC3D,OAAO,CAAC,EAAE,OAAO,EACjB,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAC7C,MAAM,CAOR;AACD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC3B,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,IAAI,EACzD,OAAO,CAAC,EAAE,OAAO,EACjB,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAC7C,MAAM,CAGR;AAED,OAAO,EACH,OAAO,IAAI,SAAS,EACpB,KAAK,SAAS,IAAI,kBAAkB,EACpC,SAAS,GACZ,MAAM,gBAAgB,CAAC;AAMxB,OAAO,KAAK,WAAW,MAAM,gBAAgB,CAAC;AAE9C,OAAO,EAAW,KAAK,IAAI,EAAE,MAAM,UAAU,CAAC;AAE9C,OAAO,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,UAAU,CAAC;AAI9C;;;;;GAKG;AACH,wBAAgB,SAAS,CACrB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,OAAiC,GAC3C,IAAI,GAAG,IAAI,CAEb;AAED,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAC"} \ No newline at end of file diff --git a/node_modules/htmlparser2/lib/index.js b/node_modules/htmlparser2/lib/index.js new file mode 100644 index 00000000..a56fb981 --- /dev/null +++ b/node_modules/htmlparser2/lib/index.js @@ -0,0 +1,114 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.DomUtils = exports.parseFeed = exports.getFeed = exports.ElementType = exports.QuoteType = exports.Tokenizer = exports.createDomStream = exports.createDocumentStream = exports.parseDOM = exports.parseDocument = exports.DefaultHandler = exports.DomHandler = exports.Parser = void 0; +var Parser_js_1 = require("./Parser.js"); +var Parser_js_2 = require("./Parser.js"); +Object.defineProperty(exports, "Parser", { enumerable: true, get: function () { return Parser_js_2.Parser; } }); +var domhandler_1 = require("domhandler"); +var domhandler_2 = require("domhandler"); +Object.defineProperty(exports, "DomHandler", { enumerable: true, get: function () { return domhandler_2.DomHandler; } }); +// Old name for DomHandler +Object.defineProperty(exports, "DefaultHandler", { enumerable: true, get: function () { return domhandler_2.DomHandler; } }); +// Helper methods +/** + * Parses the data, returns the resulting document. + * + * @param data The data that should be parsed. + * @param options Optional options for the parser and DOM handler. + */ +function parseDocument(data, options) { + var handler = new domhandler_1.DomHandler(undefined, options); + new Parser_js_1.Parser(handler, options).end(data); + return handler.root; +} +exports.parseDocument = parseDocument; +/** + * Parses data, returns an array of the root nodes. + * + * Note that the root nodes still have a `Document` node as their parent. + * Use `parseDocument` to get the `Document` node instead. + * + * @param data The data that should be parsed. + * @param options Optional options for the parser and DOM handler. + * @deprecated Use `parseDocument` instead. + */ +function parseDOM(data, options) { + return parseDocument(data, options).children; +} +exports.parseDOM = parseDOM; +/** + * Creates a parser instance, with an attached DOM handler. + * + * @param callback A callback that will be called once parsing has been completed, with the resulting document. + * @param options Optional options for the parser and DOM handler. + * @param elementCallback An optional callback that will be called every time a tag has been completed inside of the DOM. + */ +function createDocumentStream(callback, options, elementCallback) { + var handler = new domhandler_1.DomHandler(function (error) { return callback(error, handler.root); }, options, elementCallback); + return new Parser_js_1.Parser(handler, options); +} +exports.createDocumentStream = createDocumentStream; +/** + * Creates a parser instance, with an attached DOM handler. + * + * @param callback A callback that will be called once parsing has been completed, with an array of root nodes. + * @param options Optional options for the parser and DOM handler. + * @param elementCallback An optional callback that will be called every time a tag has been completed inside of the DOM. + * @deprecated Use `createDocumentStream` instead. + */ +function createDomStream(callback, options, elementCallback) { + var handler = new domhandler_1.DomHandler(callback, options, elementCallback); + return new Parser_js_1.Parser(handler, options); +} +exports.createDomStream = createDomStream; +var Tokenizer_js_1 = require("./Tokenizer.js"); +Object.defineProperty(exports, "Tokenizer", { enumerable: true, get: function () { return __importDefault(Tokenizer_js_1).default; } }); +Object.defineProperty(exports, "QuoteType", { enumerable: true, get: function () { return Tokenizer_js_1.QuoteType; } }); +/* + * All of the following exports exist for backwards-compatibility. + * They should probably be removed eventually. + */ +exports.ElementType = __importStar(require("domelementtype")); +var domutils_1 = require("domutils"); +var domutils_2 = require("domutils"); +Object.defineProperty(exports, "getFeed", { enumerable: true, get: function () { return domutils_2.getFeed; } }); +var parseFeedDefaultOptions = { xmlMode: true }; +/** + * Parse a feed. + * + * @param feed The feed that should be parsed, as a string. + * @param options Optionally, options for parsing. When using this, you should set `xmlMode` to `true`. + */ +function parseFeed(feed, options) { + if (options === void 0) { options = parseFeedDefaultOptions; } + return (0, domutils_1.getFeed)(parseDOM(feed, options)); +} +exports.parseFeed = parseFeed; +exports.DomUtils = __importStar(require("domutils")); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/node_modules/htmlparser2/lib/index.js.map b/node_modules/htmlparser2/lib/index.js.map new file mode 100644 index 00000000..e8c2f549 --- /dev/null +++ b/node_modules/htmlparser2/lib/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"https://raw.githubusercontent.com/fb55/htmlparser2/e2939a6c7b05d5c4845b4a2e458a4fc0a65a321d/src/","sources":["index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAAyD;AAEzD,yCAAqC;AAA5B,mGAAA,MAAM,OAAA;AAEf,yCAMoB;AAEpB,yCAKoB;AAJhB,wGAAA,UAAU,OAAA;AACV,0BAA0B;AAC1B,4GAAA,UAAU,OAAkB;AAMhC,iBAAiB;AAEjB;;;;;GAKG;AACH,SAAgB,aAAa,CAAC,IAAY,EAAE,OAAiB;IACzD,IAAM,OAAO,GAAG,IAAI,uBAAU,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACnD,IAAI,kBAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACvC,OAAO,OAAO,CAAC,IAAI,CAAC;AACxB,CAAC;AAJD,sCAIC;AACD;;;;;;;;;GASG;AACH,SAAgB,QAAQ,CAAC,IAAY,EAAE,OAAiB;IACpD,OAAO,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC;AACjD,CAAC;AAFD,4BAEC;AACD;;;;;;GAMG;AACH,SAAgB,oBAAoB,CAChC,QAA2D,EAC3D,OAAiB,EACjB,eAA4C;IAE5C,IAAM,OAAO,GAAe,IAAI,uBAAU,CACtC,UAAC,KAAmB,IAAK,OAAA,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,EAA7B,CAA6B,EACtD,OAAO,EACP,eAAe,CAClB,CAAC;IACF,OAAO,IAAI,kBAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACxC,CAAC;AAXD,oDAWC;AACD;;;;;;;GAOG;AACH,SAAgB,eAAe,CAC3B,QAAyD,EACzD,OAAiB,EACjB,eAA4C;IAE5C,IAAM,OAAO,GAAG,IAAI,uBAAU,CAAC,QAAQ,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;IACnE,OAAO,IAAI,kBAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACxC,CAAC;AAPD,0CAOC;AAED,+CAIwB;AAHpB,0HAAA,OAAO,OAAa;AAEpB,yGAAA,SAAS,OAAA;AAGb;;;GAGG;AACH,8DAA8C;AAE9C,qCAA8C;AAE9C,qCAA8C;AAArC,mGAAA,OAAO,OAAA;AAEhB,IAAM,uBAAuB,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAElD;;;;;GAKG;AACH,SAAgB,SAAS,CACrB,IAAY,EACZ,OAA0C;IAA1C,wBAAA,EAAA,iCAA0C;IAE1C,OAAO,IAAA,kBAAO,EAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;AAC5C,CAAC;AALD,8BAKC;AAED,qDAAqC"} \ No newline at end of file diff --git a/node_modules/htmlparser2/package.json b/node_modules/htmlparser2/package.json new file mode 100644 index 00000000..708f6a4d --- /dev/null +++ b/node_modules/htmlparser2/package.json @@ -0,0 +1,97 @@ +{ + "name": "htmlparser2", + "description": "Fast & forgiving HTML/XML parser", + "version": "9.1.0", + "author": "Felix Boehm ", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "sideEffects": false, + "keywords": [ + "html", + "parser", + "streams", + "xml", + "dom", + "rss", + "feed", + "atom" + ], + "repository": { + "type": "git", + "url": "git://github.com/fb55/htmlparser2.git" + }, + "directories": { + "lib": "lib/" + }, + "main": "lib/index.js", + "types": "lib/index.d.ts", + "module": "lib/esm/index.js", + "exports": { + ".": { + "require": "./lib/index.js", + "import": "./lib/esm/index.js" + }, + "./lib/WritableStream": { + "require": "./lib/WritableStream.js", + "import": "./lib/esm/WritableStream.js" + } + }, + "files": [ + "lib/**/*" + ], + "scripts": { + "test": "npm run test:jest && npm run lint", + "test:jest": "jest", + "lint": "npm run lint:es && npm run lint:prettier", + "lint:es": "eslint src", + "lint:prettier": "npm run format:prettier:raw -- --check", + "format": "npm run format:es && npm run format:prettier", + "format:es": "npm run lint:es -- --fix", + "format:prettier": "npm run format:prettier:raw -- --write", + "format:prettier:raw": "prettier '**/*.{ts,md,json,yml}'", + "build": "npm run build:cjs && npm run build:esm", + "build:cjs": "tsc --sourceRoot https://raw.githubusercontent.com/fb55/htmlparser2/$(git rev-parse HEAD)/src/", + "build:esm": "npm run build:cjs -- --module esnext --target es2019 --outDir lib/esm && echo '{\"type\":\"module\"}' > lib/esm/package.json", + "prepare": "npm run build" + }, + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.1.0", + "entities": "^4.5.0" + }, + "devDependencies": { + "@types/jest": "^29.5.11", + "@types/node": "^20.10.6", + "@typescript-eslint/eslint-plugin": "^6.17.0", + "@typescript-eslint/parser": "^6.17.0", + "eslint": "^8.56.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-n": "^16.6.1", + "eslint-plugin-unicorn": "^50.0.1", + "jest": "^29.7.0", + "prettier": "^3.1.1", + "ts-jest": "^29.1.1", + "typescript": "^5.3.3" + }, + "jest": { + "preset": "ts-jest", + "testEnvironment": "node", + "coverageProvider": "v8", + "moduleNameMapper": { + "^(.*)\\.js$": [ + "$1", + "$1.js" + ] + } + }, + "prettier": { + "tabWidth": 4 + } +} diff --git a/node_modules/import-fresh/index.d.ts b/node_modules/import-fresh/index.d.ts new file mode 100644 index 00000000..36d7e208 --- /dev/null +++ b/node_modules/import-fresh/index.d.ts @@ -0,0 +1,30 @@ +/** +Import a module while bypassing the cache. + +@example +``` +// foo.js +let i = 0; +module.exports = () => ++i; + +// index.js +import importFresh = require('import-fresh'); + +require('./foo')(); +//=> 1 + +require('./foo')(); +//=> 2 + +importFresh('./foo')(); +//=> 1 + +importFresh('./foo')(); +//=> 1 + +const foo = importFresh('./foo'); +``` +*/ +declare function importFresh(moduleId: string): T; + +export = importFresh; diff --git a/node_modules/import-fresh/index.js b/node_modules/import-fresh/index.js new file mode 100644 index 00000000..0a4c5d52 --- /dev/null +++ b/node_modules/import-fresh/index.js @@ -0,0 +1,33 @@ +'use strict'; +const path = require('path'); +const resolveFrom = require('resolve-from'); +const parentModule = require('parent-module'); + +module.exports = moduleId => { + if (typeof moduleId !== 'string') { + throw new TypeError('Expected a string'); + } + + const parentPath = parentModule(__filename); + + const cwd = parentPath ? path.dirname(parentPath) : __dirname; + const filePath = resolveFrom(cwd, moduleId); + + const oldModule = require.cache[filePath]; + // Delete itself from module parent + if (oldModule && oldModule.parent) { + let i = oldModule.parent.children.length; + + while (i--) { + if (oldModule.parent.children[i].id === filePath) { + oldModule.parent.children.splice(i, 1); + } + } + } + + delete require.cache[filePath]; // Delete module from cache + + const parent = require.cache[parentPath]; // If `filePath` and `parentPath` are the same, cache will already be deleted so we won't get a memory leak in next step + + return parent === undefined ? require(filePath) : parent.require(filePath); // In case cache doesn't have parent, fall back to normal require +}; diff --git a/node_modules/import-fresh/license b/node_modules/import-fresh/license new file mode 100644 index 00000000..fa7ceba3 --- /dev/null +++ b/node_modules/import-fresh/license @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) Sindre Sorhus (https://sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/import-fresh/package.json b/node_modules/import-fresh/package.json new file mode 100644 index 00000000..0c093620 --- /dev/null +++ b/node_modules/import-fresh/package.json @@ -0,0 +1,43 @@ +{ + "name": "import-fresh", + "version": "3.3.0", + "description": "Import a module while bypassing the cache", + "license": "MIT", + "repository": "sindresorhus/import-fresh", + "funding": "https://github.com/sponsors/sindresorhus", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "https://sindresorhus.com" + }, + "engines": { + "node": ">=6" + }, + "scripts": { + "test": "xo && ava && tsd", + "heapdump": "node heapdump.js" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "keywords": [ + "require", + "cache", + "uncache", + "uncached", + "module", + "fresh", + "bypass" + ], + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "devDependencies": { + "ava": "^1.0.1", + "heapdump": "^0.3.12", + "tsd": "^0.7.3", + "xo": "^0.23.0" + } +} diff --git a/node_modules/import-fresh/readme.md b/node_modules/import-fresh/readme.md new file mode 100644 index 00000000..bd14c79c --- /dev/null +++ b/node_modules/import-fresh/readme.md @@ -0,0 +1,48 @@ +# import-fresh + +> Import a module while bypassing the [cache](https://nodejs.org/api/modules.html#modules_caching) + +Useful for testing purposes when you need to freshly import a module. + +## Install + +``` +$ npm install import-fresh +``` + +## Usage + +```js +// foo.js +let i = 0; +module.exports = () => ++i; +``` + +```js +const importFresh = require('import-fresh'); + +require('./foo')(); +//=> 1 + +require('./foo')(); +//=> 2 + +importFresh('./foo')(); +//=> 1 + +importFresh('./foo')(); +//=> 1 +``` + +## import-fresh for enterprise + +Available as part of the Tidelift Subscription. + +The maintainers of import-fresh and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-import-fresh?utm_source=npm-import-fresh&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) + +## Related + +- [clear-module](https://github.com/sindresorhus/clear-module) - Clear a module from the import cache +- [import-from](https://github.com/sindresorhus/import-from) - Import a module from a given path +- [import-cwd](https://github.com/sindresorhus/import-cwd) - Import a module from the current working directory +- [import-lazy](https://github.com/sindresorhus/import-lazy) - Import modules lazily diff --git a/node_modules/is-arrayish/.editorconfig b/node_modules/is-arrayish/.editorconfig new file mode 100644 index 00000000..4c017f8a --- /dev/null +++ b/node_modules/is-arrayish/.editorconfig @@ -0,0 +1,18 @@ +root = true + +[*] +indent_style = tab +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.coffee] +indent_style = space + +[{package.json,*.yml}] +indent_style = space +indent_size = 2 + +[*.md] +trim_trailing_whitespace = false diff --git a/node_modules/is-arrayish/.istanbul.yml b/node_modules/is-arrayish/.istanbul.yml new file mode 100644 index 00000000..19fbec32 --- /dev/null +++ b/node_modules/is-arrayish/.istanbul.yml @@ -0,0 +1,4 @@ +instrumentation: + excludes: + - test.js + - test/**/* diff --git a/node_modules/is-arrayish/.npmignore b/node_modules/is-arrayish/.npmignore new file mode 100644 index 00000000..8d5eacb3 --- /dev/null +++ b/node_modules/is-arrayish/.npmignore @@ -0,0 +1,5 @@ +/coverage/ +/test.js +/test/ +*.sw[a-p] +/node_modules/ diff --git a/node_modules/is-arrayish/.travis.yml b/node_modules/is-arrayish/.travis.yml new file mode 100644 index 00000000..5a042435 --- /dev/null +++ b/node_modules/is-arrayish/.travis.yml @@ -0,0 +1,17 @@ +language: node_js + +script: + - node_modules/.bin/istanbul cover node_modules/.bin/_mocha -- --compilers coffee:coffee-script/register + - cat coverage/lcov.info | node_modules/.bin/coveralls +node_js: + - "0.10" + - "0.11" + - "0.12" + - "iojs" +os: + - linux + - osx + +notifications: + slack: + secure: oOt8QGzdrPDsTMcyahtIq5Q+0U1iwfgJgFCxBLsomQ0bpIMn+y5m4viJydA2UinHPGc944HS3LMZS9iKQyv+DjTgbhUyNXqeVjtxCwRe37f5rKQlXVvdfmjHk2kln4H8DcK3r5Qd/+2hd9BeMsp2GImTrkRSud1CZQlhhe5IgZOboSoWpGVMMy1iazWT06tAtiB2LRVhmsdUaFZDWAhGZ+UAvCPf+mnBOAylIj+U0GDrofhfTi25RK0gddG2f/p2M1HCu49O6wECGWkt2hVei233DkNJyLLLJVcvmhf+aXkV5TjMyaoxh/HdcV4DrA7KvYuWmWWKsINa9hlwAsdd/FYmJ6PjRkKWas2JoQ1C+qOzDxyQvn3CaUZFKD99pdsq0rBBZujqXQKZZ/hWb/CE74BI6fKmqQkiEPaD/7uADj04FEg6HVBZaMCyauOaK5b3VC97twbALZ1qVxYV6mU+zSEvnUbpnjjvRO0fSl9ZHA+rzkW73kX3GmHY0wAozEZbSy7QLuZlQ2QtHmBLr+APaGMdL1sFF9qFfzqKy0WDbSE0WS6hpAEJpTsjYmeBrnI8UmK3m++iEgyQPvZoH9LhUT+ek7XIfHZMe04BmC6wuO24/RfpmR6bQK9VMarFCYlBiWxg/z30vkP0KTpUi3o/cqFm7/Noxc0i2LVqM3E0Sy4= diff --git a/node_modules/is-arrayish/LICENSE b/node_modules/is-arrayish/LICENSE new file mode 100644 index 00000000..0a5f461a --- /dev/null +++ b/node_modules/is-arrayish/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015 JD Ballard + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/is-arrayish/README.md b/node_modules/is-arrayish/README.md new file mode 100644 index 00000000..7d360724 --- /dev/null +++ b/node_modules/is-arrayish/README.md @@ -0,0 +1,16 @@ +# node-is-arrayish [![Travis-CI.org Build Status](https://img.shields.io/travis/Qix-/node-is-arrayish.svg?style=flat-square)](https://travis-ci.org/Qix-/node-is-arrayish) [![Coveralls.io Coverage Rating](https://img.shields.io/coveralls/Qix-/node-is-arrayish.svg?style=flat-square)](https://coveralls.io/r/Qix-/node-is-arrayish) +> Determines if an object can be used like an Array + +## Example +```javascript +var isArrayish = require('is-arrayish'); + +isArrayish([]); // true +isArrayish({__proto__: []}); // true +isArrayish({}); // false +isArrayish({length:10}); // false +``` + +## License +Licensed under the [MIT License](http://opensource.org/licenses/MIT). +You can find a copy of it in [LICENSE](LICENSE). diff --git a/node_modules/is-arrayish/index.js b/node_modules/is-arrayish/index.js new file mode 100644 index 00000000..5b971868 --- /dev/null +++ b/node_modules/is-arrayish/index.js @@ -0,0 +1,10 @@ +'use strict'; + +module.exports = function isArrayish(obj) { + if (!obj) { + return false; + } + + return obj instanceof Array || Array.isArray(obj) || + (obj.length >= 0 && obj.splice instanceof Function); +}; diff --git a/node_modules/is-arrayish/package.json b/node_modules/is-arrayish/package.json new file mode 100644 index 00000000..8b2d1c30 --- /dev/null +++ b/node_modules/is-arrayish/package.json @@ -0,0 +1,34 @@ +{ + "name": "is-arrayish", + "description": "Determines if an object can be used as an array", + "version": "0.2.1", + "author": "Qix (http://github.com/qix-)", + "keywords": [ + "is", + "array", + "duck", + "type", + "arrayish", + "similar", + "proto", + "prototype", + "type" + ], + "license": "MIT", + "scripts": { + "pretest": "xo", + "test": "mocha --compilers coffee:coffee-script/register" + }, + "repository": { + "type": "git", + "url": "https://github.com/qix-/node-is-arrayish.git" + }, + "devDependencies": { + "coffee-script": "^1.9.3", + "coveralls": "^2.11.2", + "istanbul": "^0.3.17", + "mocha": "^2.2.5", + "should": "^7.0.1", + "xo": "^0.6.1" + } +} diff --git a/node_modules/is-extglob/LICENSE b/node_modules/is-extglob/LICENSE new file mode 100644 index 00000000..842218cf --- /dev/null +++ b/node_modules/is-extglob/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014-2016, Jon Schlinkert + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/is-extglob/README.md b/node_modules/is-extglob/README.md new file mode 100644 index 00000000..0416af5c --- /dev/null +++ b/node_modules/is-extglob/README.md @@ -0,0 +1,107 @@ +# is-extglob [![NPM version](https://img.shields.io/npm/v/is-extglob.svg?style=flat)](https://www.npmjs.com/package/is-extglob) [![NPM downloads](https://img.shields.io/npm/dm/is-extglob.svg?style=flat)](https://npmjs.org/package/is-extglob) [![Build Status](https://img.shields.io/travis/jonschlinkert/is-extglob.svg?style=flat)](https://travis-ci.org/jonschlinkert/is-extglob) + +> Returns true if a string has an extglob. + +## Install + +Install with [npm](https://www.npmjs.com/): + +```sh +$ npm install --save is-extglob +``` + +## Usage + +```js +var isExtglob = require('is-extglob'); +``` + +**True** + +```js +isExtglob('?(abc)'); +isExtglob('@(abc)'); +isExtglob('!(abc)'); +isExtglob('*(abc)'); +isExtglob('+(abc)'); +``` + +**False** + +Escaped extglobs: + +```js +isExtglob('\\?(abc)'); +isExtglob('\\@(abc)'); +isExtglob('\\!(abc)'); +isExtglob('\\*(abc)'); +isExtglob('\\+(abc)'); +``` + +Everything else... + +```js +isExtglob('foo.js'); +isExtglob('!foo.js'); +isExtglob('*.js'); +isExtglob('**/abc.js'); +isExtglob('abc/*.js'); +isExtglob('abc/(aaa|bbb).js'); +isExtglob('abc/[a-z].js'); +isExtglob('abc/{a,b}.js'); +isExtglob('abc/?.js'); +isExtglob('abc.js'); +isExtglob('abc/def/ghi.js'); +``` + +## History + +**v2.0** + +Adds support for escaping. Escaped exglobs no longer return true. + +## About + +### Related projects + +* [has-glob](https://www.npmjs.com/package/has-glob): Returns `true` if an array has a glob pattern. | [homepage](https://github.com/jonschlinkert/has-glob "Returns `true` if an array has a glob pattern.") +* [is-glob](https://www.npmjs.com/package/is-glob): Returns `true` if the given string looks like a glob pattern or an extglob pattern… [more](https://github.com/jonschlinkert/is-glob) | [homepage](https://github.com/jonschlinkert/is-glob "Returns `true` if the given string looks like a glob pattern or an extglob pattern. This makes it easy to create code that only uses external modules like node-glob when necessary, resulting in much faster code execution and initialization time, and a bet") +* [micromatch](https://www.npmjs.com/package/micromatch): Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch. | [homepage](https://github.com/jonschlinkert/micromatch "Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch.") + +### Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). + +### Building docs + +_(This document was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme) (a [verb](https://github.com/verbose/verb) generator), please don't edit the readme directly. Any changes to the readme must be made in [.verb.md](.verb.md).)_ + +To generate the readme and API documentation with [verb](https://github.com/verbose/verb): + +```sh +$ npm install -g verb verb-generate-readme && verb +``` + +### Running tests + +Install dev dependencies: + +```sh +$ npm install -d && npm test +``` + +### Author + +**Jon Schlinkert** + +* [github/jonschlinkert](https://github.com/jonschlinkert) +* [twitter/jonschlinkert](http://twitter.com/jonschlinkert) + +### License + +Copyright © 2016, [Jon Schlinkert](https://github.com/jonschlinkert). +Released under the [MIT license](https://github.com/jonschlinkert/is-extglob/blob/master/LICENSE). + +*** + +_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.1.31, on October 12, 2016._ \ No newline at end of file diff --git a/node_modules/is-extglob/index.js b/node_modules/is-extglob/index.js new file mode 100644 index 00000000..c1d986fc --- /dev/null +++ b/node_modules/is-extglob/index.js @@ -0,0 +1,20 @@ +/*! + * is-extglob + * + * Copyright (c) 2014-2016, Jon Schlinkert. + * Licensed under the MIT License. + */ + +module.exports = function isExtglob(str) { + if (typeof str !== 'string' || str === '') { + return false; + } + + var match; + while ((match = /(\\).|([@?!+*]\(.*\))/g.exec(str))) { + if (match[2]) return true; + str = str.slice(match.index + match[0].length); + } + + return false; +}; diff --git a/node_modules/is-extglob/package.json b/node_modules/is-extglob/package.json new file mode 100644 index 00000000..7a908369 --- /dev/null +++ b/node_modules/is-extglob/package.json @@ -0,0 +1,69 @@ +{ + "name": "is-extglob", + "description": "Returns true if a string has an extglob.", + "version": "2.1.1", + "homepage": "https://github.com/jonschlinkert/is-extglob", + "author": "Jon Schlinkert (https://github.com/jonschlinkert)", + "repository": "jonschlinkert/is-extglob", + "bugs": { + "url": "https://github.com/jonschlinkert/is-extglob/issues" + }, + "license": "MIT", + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha" + }, + "devDependencies": { + "gulp-format-md": "^0.1.10", + "mocha": "^3.0.2" + }, + "keywords": [ + "bash", + "braces", + "check", + "exec", + "expression", + "extglob", + "glob", + "globbing", + "globstar", + "is", + "match", + "matches", + "pattern", + "regex", + "regular", + "string", + "test" + ], + "verb": { + "toc": false, + "layout": "default", + "tasks": [ + "readme" + ], + "plugins": [ + "gulp-format-md" + ], + "related": { + "list": [ + "has-glob", + "is-glob", + "micromatch" + ] + }, + "reflinks": [ + "verb", + "verb-generate-readme" + ], + "lint": { + "reflinks": true + } + } +} diff --git a/node_modules/is-glob/LICENSE b/node_modules/is-glob/LICENSE new file mode 100644 index 00000000..3f2eca18 --- /dev/null +++ b/node_modules/is-glob/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014-2017, Jon Schlinkert. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/is-glob/README.md b/node_modules/is-glob/README.md new file mode 100644 index 00000000..740724b2 --- /dev/null +++ b/node_modules/is-glob/README.md @@ -0,0 +1,206 @@ +# is-glob [![NPM version](https://img.shields.io/npm/v/is-glob.svg?style=flat)](https://www.npmjs.com/package/is-glob) [![NPM monthly downloads](https://img.shields.io/npm/dm/is-glob.svg?style=flat)](https://npmjs.org/package/is-glob) [![NPM total downloads](https://img.shields.io/npm/dt/is-glob.svg?style=flat)](https://npmjs.org/package/is-glob) [![Build Status](https://img.shields.io/github/workflow/status/micromatch/is-glob/dev)](https://github.com/micromatch/is-glob/actions) + +> Returns `true` if the given string looks like a glob pattern or an extglob pattern. This makes it easy to create code that only uses external modules like node-glob when necessary, resulting in much faster code execution and initialization time, and a better user experience. + +Please consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support. + +## Install + +Install with [npm](https://www.npmjs.com/): + +```sh +$ npm install --save is-glob +``` + +You might also be interested in [is-valid-glob](https://github.com/jonschlinkert/is-valid-glob) and [has-glob](https://github.com/jonschlinkert/has-glob). + +## Usage + +```js +var isGlob = require('is-glob'); +``` + +### Default behavior + +**True** + +Patterns that have glob characters or regex patterns will return `true`: + +```js +isGlob('!foo.js'); +isGlob('*.js'); +isGlob('**/abc.js'); +isGlob('abc/*.js'); +isGlob('abc/(aaa|bbb).js'); +isGlob('abc/[a-z].js'); +isGlob('abc/{a,b}.js'); +//=> true +``` + +Extglobs + +```js +isGlob('abc/@(a).js'); +isGlob('abc/!(a).js'); +isGlob('abc/+(a).js'); +isGlob('abc/*(a).js'); +isGlob('abc/?(a).js'); +//=> true +``` + +**False** + +Escaped globs or extglobs return `false`: + +```js +isGlob('abc/\\@(a).js'); +isGlob('abc/\\!(a).js'); +isGlob('abc/\\+(a).js'); +isGlob('abc/\\*(a).js'); +isGlob('abc/\\?(a).js'); +isGlob('\\!foo.js'); +isGlob('\\*.js'); +isGlob('\\*\\*/abc.js'); +isGlob('abc/\\*.js'); +isGlob('abc/\\(aaa|bbb).js'); +isGlob('abc/\\[a-z].js'); +isGlob('abc/\\{a,b}.js'); +//=> false +``` + +Patterns that do not have glob patterns return `false`: + +```js +isGlob('abc.js'); +isGlob('abc/def/ghi.js'); +isGlob('foo.js'); +isGlob('abc/@.js'); +isGlob('abc/+.js'); +isGlob('abc/?.js'); +isGlob(); +isGlob(null); +//=> false +``` + +Arrays are also `false` (If you want to check if an array has a glob pattern, use [has-glob](https://github.com/jonschlinkert/has-glob)): + +```js +isGlob(['**/*.js']); +isGlob(['foo.js']); +//=> false +``` + +### Option strict + +When `options.strict === false` the behavior is less strict in determining if a pattern is a glob. Meaning that +some patterns that would return `false` may return `true`. This is done so that matching libraries like [micromatch](https://github.com/micromatch/micromatch) have a chance at determining if the pattern is a glob or not. + +**True** + +Patterns that have glob characters or regex patterns will return `true`: + +```js +isGlob('!foo.js', {strict: false}); +isGlob('*.js', {strict: false}); +isGlob('**/abc.js', {strict: false}); +isGlob('abc/*.js', {strict: false}); +isGlob('abc/(aaa|bbb).js', {strict: false}); +isGlob('abc/[a-z].js', {strict: false}); +isGlob('abc/{a,b}.js', {strict: false}); +//=> true +``` + +Extglobs + +```js +isGlob('abc/@(a).js', {strict: false}); +isGlob('abc/!(a).js', {strict: false}); +isGlob('abc/+(a).js', {strict: false}); +isGlob('abc/*(a).js', {strict: false}); +isGlob('abc/?(a).js', {strict: false}); +//=> true +``` + +**False** + +Escaped globs or extglobs return `false`: + +```js +isGlob('\\!foo.js', {strict: false}); +isGlob('\\*.js', {strict: false}); +isGlob('\\*\\*/abc.js', {strict: false}); +isGlob('abc/\\*.js', {strict: false}); +isGlob('abc/\\(aaa|bbb).js', {strict: false}); +isGlob('abc/\\[a-z].js', {strict: false}); +isGlob('abc/\\{a,b}.js', {strict: false}); +//=> false +``` + +## About + +
+Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). + +
+ +
+Running Tests + +Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command: + +```sh +$ npm install && npm test +``` + +
+ +
+Building docs + +_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_ + +To generate the readme, run the following command: + +```sh +$ npm install -g verbose/verb#dev verb-generate-readme && verb +``` + +
+ +### Related projects + +You might also be interested in these projects: + +* [assemble](https://www.npmjs.com/package/assemble): Get the rocks out of your socks! Assemble makes you fast at creating web projects… [more](https://github.com/assemble/assemble) | [homepage](https://github.com/assemble/assemble "Get the rocks out of your socks! Assemble makes you fast at creating web projects. Assemble is used by thousands of projects for rapid prototyping, creating themes, scaffolds, boilerplates, e-books, UI components, API documentation, blogs, building websit") +* [base](https://www.npmjs.com/package/base): Framework for rapidly creating high quality, server-side node.js applications, using plugins like building blocks | [homepage](https://github.com/node-base/base "Framework for rapidly creating high quality, server-side node.js applications, using plugins like building blocks") +* [update](https://www.npmjs.com/package/update): Be scalable! Update is a new, open source developer framework and CLI for automating updates… [more](https://github.com/update/update) | [homepage](https://github.com/update/update "Be scalable! Update is a new, open source developer framework and CLI for automating updates of any kind in code projects.") +* [verb](https://www.npmjs.com/package/verb): Documentation generator for GitHub projects. Verb is extremely powerful, easy to use, and is used… [more](https://github.com/verbose/verb) | [homepage](https://github.com/verbose/verb "Documentation generator for GitHub projects. Verb is extremely powerful, easy to use, and is used on hundreds of projects of all sizes to generate everything from API docs to readmes.") + +### Contributors + +| **Commits** | **Contributor** | +| --- | --- | +| 47 | [jonschlinkert](https://github.com/jonschlinkert) | +| 5 | [doowb](https://github.com/doowb) | +| 1 | [phated](https://github.com/phated) | +| 1 | [danhper](https://github.com/danhper) | +| 1 | [paulmillr](https://github.com/paulmillr) | + +### Author + +**Jon Schlinkert** + +* [GitHub Profile](https://github.com/jonschlinkert) +* [Twitter Profile](https://twitter.com/jonschlinkert) +* [LinkedIn Profile](https://linkedin.com/in/jonschlinkert) + +### License + +Copyright © 2019, [Jon Schlinkert](https://github.com/jonschlinkert). +Released under the [MIT License](LICENSE). + +*** + +_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.8.0, on March 27, 2019._ \ No newline at end of file diff --git a/node_modules/is-glob/index.js b/node_modules/is-glob/index.js new file mode 100644 index 00000000..620f563e --- /dev/null +++ b/node_modules/is-glob/index.js @@ -0,0 +1,150 @@ +/*! + * is-glob + * + * Copyright (c) 2014-2017, Jon Schlinkert. + * Released under the MIT License. + */ + +var isExtglob = require('is-extglob'); +var chars = { '{': '}', '(': ')', '[': ']'}; +var strictCheck = function(str) { + if (str[0] === '!') { + return true; + } + var index = 0; + var pipeIndex = -2; + var closeSquareIndex = -2; + var closeCurlyIndex = -2; + var closeParenIndex = -2; + var backSlashIndex = -2; + while (index < str.length) { + if (str[index] === '*') { + return true; + } + + if (str[index + 1] === '?' && /[\].+)]/.test(str[index])) { + return true; + } + + if (closeSquareIndex !== -1 && str[index] === '[' && str[index + 1] !== ']') { + if (closeSquareIndex < index) { + closeSquareIndex = str.indexOf(']', index); + } + if (closeSquareIndex > index) { + if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) { + return true; + } + backSlashIndex = str.indexOf('\\', index); + if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) { + return true; + } + } + } + + if (closeCurlyIndex !== -1 && str[index] === '{' && str[index + 1] !== '}') { + closeCurlyIndex = str.indexOf('}', index); + if (closeCurlyIndex > index) { + backSlashIndex = str.indexOf('\\', index); + if (backSlashIndex === -1 || backSlashIndex > closeCurlyIndex) { + return true; + } + } + } + + if (closeParenIndex !== -1 && str[index] === '(' && str[index + 1] === '?' && /[:!=]/.test(str[index + 2]) && str[index + 3] !== ')') { + closeParenIndex = str.indexOf(')', index); + if (closeParenIndex > index) { + backSlashIndex = str.indexOf('\\', index); + if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) { + return true; + } + } + } + + if (pipeIndex !== -1 && str[index] === '(' && str[index + 1] !== '|') { + if (pipeIndex < index) { + pipeIndex = str.indexOf('|', index); + } + if (pipeIndex !== -1 && str[pipeIndex + 1] !== ')') { + closeParenIndex = str.indexOf(')', pipeIndex); + if (closeParenIndex > pipeIndex) { + backSlashIndex = str.indexOf('\\', pipeIndex); + if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) { + return true; + } + } + } + } + + if (str[index] === '\\') { + var open = str[index + 1]; + index += 2; + var close = chars[open]; + + if (close) { + var n = str.indexOf(close, index); + if (n !== -1) { + index = n + 1; + } + } + + if (str[index] === '!') { + return true; + } + } else { + index++; + } + } + return false; +}; + +var relaxedCheck = function(str) { + if (str[0] === '!') { + return true; + } + var index = 0; + while (index < str.length) { + if (/[*?{}()[\]]/.test(str[index])) { + return true; + } + + if (str[index] === '\\') { + var open = str[index + 1]; + index += 2; + var close = chars[open]; + + if (close) { + var n = str.indexOf(close, index); + if (n !== -1) { + index = n + 1; + } + } + + if (str[index] === '!') { + return true; + } + } else { + index++; + } + } + return false; +}; + +module.exports = function isGlob(str, options) { + if (typeof str !== 'string' || str === '') { + return false; + } + + if (isExtglob(str)) { + return true; + } + + var check = strictCheck; + + // optionally relax check + if (options && options.strict === false) { + check = relaxedCheck; + } + + return check(str); +}; diff --git a/node_modules/is-glob/package.json b/node_modules/is-glob/package.json new file mode 100644 index 00000000..858af037 --- /dev/null +++ b/node_modules/is-glob/package.json @@ -0,0 +1,81 @@ +{ + "name": "is-glob", + "description": "Returns `true` if the given string looks like a glob pattern or an extglob pattern. This makes it easy to create code that only uses external modules like node-glob when necessary, resulting in much faster code execution and initialization time, and a better user experience.", + "version": "4.0.3", + "homepage": "https://github.com/micromatch/is-glob", + "author": "Jon Schlinkert (https://github.com/jonschlinkert)", + "contributors": [ + "Brian Woodward (https://twitter.com/doowb)", + "Daniel Perez (https://tuvistavie.com)", + "Jon Schlinkert (http://twitter.com/jonschlinkert)" + ], + "repository": "micromatch/is-glob", + "bugs": { + "url": "https://github.com/micromatch/is-glob/issues" + }, + "license": "MIT", + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha && node benchmark.js" + }, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "devDependencies": { + "gulp-format-md": "^0.1.10", + "mocha": "^3.0.2" + }, + "keywords": [ + "bash", + "braces", + "check", + "exec", + "expression", + "extglob", + "glob", + "globbing", + "globstar", + "is", + "match", + "matches", + "pattern", + "regex", + "regular", + "string", + "test" + ], + "verb": { + "layout": "default", + "plugins": [ + "gulp-format-md" + ], + "related": { + "list": [ + "assemble", + "base", + "update", + "verb" + ] + }, + "reflinks": [ + "assemble", + "bach", + "base", + "composer", + "gulp", + "has-glob", + "is-valid-glob", + "micromatch", + "npm", + "scaffold", + "verb", + "vinyl" + ] + } +} diff --git a/node_modules/is-json/.npmignore b/node_modules/is-json/.npmignore new file mode 100644 index 00000000..b0e8ee77 --- /dev/null +++ b/node_modules/is-json/.npmignore @@ -0,0 +1,12 @@ +.*.swp +._* +.DS_Store +.git +.hg +.lock-wscript +.svn +.wafpickle-* +CVS +npm-debug.log +*.sublime-project +*.sublime-workspace \ No newline at end of file diff --git a/node_modules/is-json/.travis.yml b/node_modules/is-json/.travis.yml new file mode 100644 index 00000000..250e5ab6 --- /dev/null +++ b/node_modules/is-json/.travis.yml @@ -0,0 +1,14 @@ + language: node_js + node_js: + - "0.12" + - "0.10" + - "0.8" + branches: + only: + - master + notifications: + email: + - joaquim.serafim@gmail.com + script: npm test + before_install: + - npm install -g npm@~1.4.6 diff --git a/node_modules/is-json/LICENSE b/node_modules/is-json/LICENSE new file mode 100644 index 00000000..7773e29f --- /dev/null +++ b/node_modules/is-json/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) Joaquim José F. Serafim + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/is-json/README.md b/node_modules/is-json/README.md new file mode 100644 index 00000000..2fea1b45 --- /dev/null +++ b/node_modules/is-json/README.md @@ -0,0 +1,41 @@ +# is-json + + + +[![Build Status](https://travis-ci.org/joaquimserafim/is-json.png?branch=master)](https://travis-ci.org/joaquimserafim/is-json) + + +check if a string is a valid JSON string without using Try/Catch and is a JSON object + + + +**V1.2** + + +isJSON(str*, [passObjects=bool]) + +*with `passObjects = true` can pass a JSON object in `str`, default to `false` + + + var isJSON = require('is-json'); + + var good_json = '{"a":"obja","b":[0,1,2],"c":{"d":"some object"}}'; + var bad_json = '{"a":"obja""b":[0,1,2],"c":{"d":"some object"}}'; + var str_number = '121212'; + + + console.log(isJSON(good_json)); // true + console.log(isJSON(bad_json)); // false + console.log(isJSON(str_number)); // false + + + + // check is an object + + var object = {a: 12, b: [1,2,3]}; + + console.log(isJSON(object, true)); // true + + // can use isJSON.strict (uses try/catch) if wants something more robust + + console.log(isJSON.strict('{\n "config": 123,\n "test": "abcde" \n}')); // true diff --git a/node_modules/is-json/index.js b/node_modules/is-json/index.js new file mode 100644 index 00000000..2a09a3aa --- /dev/null +++ b/node_modules/is-json/index.js @@ -0,0 +1,48 @@ +'use strict' + +module.exports = isJSON; +isJSON.strict = strict; + +function isJSON (str, pass_object) { + if (pass_object && isObject(str)) return true; + + if (!isString(str)) return false; + + str = str.replace(/\s/g, '').replace(/\n|\r/, ''); + + if (/^\{(.*?)\}$/.test(str)) + return /"(.*?)":(.*?)/g.test(str); + + if (/^\[(.*?)\]$/.test(str)) { + return str.replace(/^\[/, '') + .replace(/\]$/, '') + .replace(/},{/g, '}\n{') + .split(/\n/) + .map(function (s) { return isJSON(s); }) + .reduce(function (prev, curr) { return !!curr; }); + } + + return false; +} + + +function strict (str) { + if (isObject(str)) { + return true; + } + + try { + return JSON.parse(str) && true; + } catch (ex) { + return false; + } +} + +function isString (x) { + return Object.prototype.toString.call(x) === '[object String]'; +} + +function isObject (obj) { + return Object.prototype.toString.call(obj) === '[object Object]'; +} + diff --git a/node_modules/is-json/package.json b/node_modules/is-json/package.json new file mode 100644 index 00000000..75ac1af1 --- /dev/null +++ b/node_modules/is-json/package.json @@ -0,0 +1,29 @@ +{ + "name": "is-json", + "version": "2.0.1", + "description": "check if a string is a valid JSON string without using Try/Catch", + "main": "index.js", + "directories": { + "test": "test" + }, + "scripts": { + "test": "node test" + }, + "repository": { + "type": "git", + "url": "git@github.com:joaquimserafim/is-json.git" + }, + "keywords": [ + "JSON", + "validation" + ], + "author": "@joaquimserafim", + "license": "ISC", + "bugs": { + "url": "https://github.com/joaquimserafim/is-json/issues" + }, + "homepage": "https://github.com/joaquimserafim/is-json", + "devDependencies": { + "tape": "^2.13.1" + } +} diff --git a/node_modules/is-json/test/index.js b/node_modules/is-json/test/index.js new file mode 100644 index 00000000..134d614a --- /dev/null +++ b/node_modules/is-json/test/index.js @@ -0,0 +1,33 @@ +var test = require('tape'); +var isJSON = require('../'); + + +test('performe isJSON verifications', function (assert) { + assert.deepEqual(isJSON('asdada[]asdadada sd asdasda das das'), false, '`asdada[]asdadada sd asdasda das das`, should return false'); + assert.deepEqual(isJSON(null), false, '`null`, should return false'); + assert.deepEqual(isJSON(false), false, '`false`, should return false'); + assert.deepEqual(isJSON(''), false, '`\'\'`, should return false'); + assert.deepEqual(isJSON('normal string'), false, '\'normal string\', should return false'); + assert.deepEqual(isJSON(2014), false, '`2014`, should return false'); + assert.deepEqual(isJSON(2014.5), false, '`2014.5`, should return false'); + assert.deepEqual(isJSON([1,2,3,4]), false, '`[1,2,3,4]`, should return false'); + assert.deepEqual(isJSON({a: 12, b: [1,2,3]}), false, 'a JSON object `{a: 12, b: [1,2,3]},`, should return false'); + assert.deepEqual(isJSON({a: 12, b: [1,2,3]}, true), true, + 'a JSON object `{a: 12, b: [1,2,3]}` but pass the 2 arg as true (check objects too), should return true'); + assert.deepEqual(isJSON('{"a":"obja","b":[0,1,2],"c":{"d":"some object"}}'), true, + '`{"a":"obja","b":[0,1,2],"c":{"d":"some object"}}`, should return true'); + assert.deepEqual(isJSON('1,2,3'), false, '`1,2,3`, should return false'); + assert.deepEqual(isJSON('{1,2,3}'), false, '`{1,2,3}`, should return false'); + assert.deepEqual(isJSON('[{"a": 123}, {1,2,3}}]'), false, '`[{"a": 123, {1,2,3}}]`, should return false'); + var cobj = '[{"a": {"aa": [1,2,3,4], "aaa": {"d": 1212}}}, {"b": "test", "c": [1,2,3], "date": "' + new Date() + '"}]'; + + assert.deepEqual(isJSON(cobj), true, cobj + ', should return true'); + assert.deepEqual(isJSON(new Date()), false, '`Date`, should return false'); + assert.deepEqual(isJSON.strict('{\n "config": 123,\n "test": "abcde" \n}'), true, '`{\n "config": 123,\n "test": "abcde" \n}`, should return true'); + assert.deepEqual( + isJSON.strict({a: 1}), + true, + 'should return true when passing a js object into `strict`' + ); + assert.end(); +}); diff --git a/node_modules/is-number/LICENSE b/node_modules/is-number/LICENSE new file mode 100644 index 00000000..9af4a67d --- /dev/null +++ b/node_modules/is-number/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014-present, Jon Schlinkert. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/is-number/README.md b/node_modules/is-number/README.md new file mode 100644 index 00000000..eb8149e8 --- /dev/null +++ b/node_modules/is-number/README.md @@ -0,0 +1,187 @@ +# is-number [![NPM version](https://img.shields.io/npm/v/is-number.svg?style=flat)](https://www.npmjs.com/package/is-number) [![NPM monthly downloads](https://img.shields.io/npm/dm/is-number.svg?style=flat)](https://npmjs.org/package/is-number) [![NPM total downloads](https://img.shields.io/npm/dt/is-number.svg?style=flat)](https://npmjs.org/package/is-number) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/is-number.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/is-number) + +> Returns true if the value is a finite number. + +Please consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support. + +## Install + +Install with [npm](https://www.npmjs.com/): + +```sh +$ npm install --save is-number +``` + +## Why is this needed? + +In JavaScript, it's not always as straightforward as it should be to reliably check if a value is a number. It's common for devs to use `+`, `-`, or `Number()` to cast a string value to a number (for example, when values are returned from user input, regex matches, parsers, etc). But there are many non-intuitive edge cases that yield unexpected results: + +```js +console.log(+[]); //=> 0 +console.log(+''); //=> 0 +console.log(+' '); //=> 0 +console.log(typeof NaN); //=> 'number' +``` + +This library offers a performant way to smooth out edge cases like these. + +## Usage + +```js +const isNumber = require('is-number'); +``` + +See the [tests](./test.js) for more examples. + +### true + +```js +isNumber(5e3); // true +isNumber(0xff); // true +isNumber(-1.1); // true +isNumber(0); // true +isNumber(1); // true +isNumber(1.1); // true +isNumber(10); // true +isNumber(10.10); // true +isNumber(100); // true +isNumber('-1.1'); // true +isNumber('0'); // true +isNumber('012'); // true +isNumber('0xff'); // true +isNumber('1'); // true +isNumber('1.1'); // true +isNumber('10'); // true +isNumber('10.10'); // true +isNumber('100'); // true +isNumber('5e3'); // true +isNumber(parseInt('012')); // true +isNumber(parseFloat('012')); // true +``` + +### False + +Everything else is false, as you would expect: + +```js +isNumber(Infinity); // false +isNumber(NaN); // false +isNumber(null); // false +isNumber(undefined); // false +isNumber(''); // false +isNumber(' '); // false +isNumber('foo'); // false +isNumber([1]); // false +isNumber([]); // false +isNumber(function () {}); // false +isNumber({}); // false +``` + +## Release history + +### 7.0.0 + +* Refactor. Now uses `.isFinite` if it exists. +* Performance is about the same as v6.0 when the value is a string or number. But it's now 3x-4x faster when the value is not a string or number. + +### 6.0.0 + +* Optimizations, thanks to @benaadams. + +### 5.0.0 + +**Breaking changes** + +* removed support for `instanceof Number` and `instanceof String` + +## Benchmarks + +As with all benchmarks, take these with a grain of salt. See the [benchmarks](./benchmark/index.js) for more detail. + +``` +# all +v7.0 x 413,222 ops/sec ±2.02% (86 runs sampled) +v6.0 x 111,061 ops/sec ±1.29% (85 runs sampled) +parseFloat x 317,596 ops/sec ±1.36% (86 runs sampled) +fastest is 'v7.0' + +# string +v7.0 x 3,054,496 ops/sec ±1.05% (89 runs sampled) +v6.0 x 2,957,781 ops/sec ±0.98% (88 runs sampled) +parseFloat x 3,071,060 ops/sec ±1.13% (88 runs sampled) +fastest is 'parseFloat,v7.0' + +# number +v7.0 x 3,146,895 ops/sec ±0.89% (89 runs sampled) +v6.0 x 3,214,038 ops/sec ±1.07% (89 runs sampled) +parseFloat x 3,077,588 ops/sec ±1.07% (87 runs sampled) +fastest is 'v6.0' +``` + +## About + +
+Contributing + +Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). + +
+ +
+Running Tests + +Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command: + +```sh +$ npm install && npm test +``` + +
+ +
+Building docs + +_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_ + +To generate the readme, run the following command: + +```sh +$ npm install -g verbose/verb#dev verb-generate-readme && verb +``` + +
+ +### Related projects + +You might also be interested in these projects: + +* [is-plain-object](https://www.npmjs.com/package/is-plain-object): Returns true if an object was created by the `Object` constructor. | [homepage](https://github.com/jonschlinkert/is-plain-object "Returns true if an object was created by the `Object` constructor.") +* [is-primitive](https://www.npmjs.com/package/is-primitive): Returns `true` if the value is a primitive. | [homepage](https://github.com/jonschlinkert/is-primitive "Returns `true` if the value is a primitive. ") +* [isobject](https://www.npmjs.com/package/isobject): Returns true if the value is an object and not an array or null. | [homepage](https://github.com/jonschlinkert/isobject "Returns true if the value is an object and not an array or null.") +* [kind-of](https://www.npmjs.com/package/kind-of): Get the native type of a value. | [homepage](https://github.com/jonschlinkert/kind-of "Get the native type of a value.") + +### Contributors + +| **Commits** | **Contributor** | +| --- | --- | +| 49 | [jonschlinkert](https://github.com/jonschlinkert) | +| 5 | [charlike-old](https://github.com/charlike-old) | +| 1 | [benaadams](https://github.com/benaadams) | +| 1 | [realityking](https://github.com/realityking) | + +### Author + +**Jon Schlinkert** + +* [LinkedIn Profile](https://linkedin.com/in/jonschlinkert) +* [GitHub Profile](https://github.com/jonschlinkert) +* [Twitter Profile](https://twitter.com/jonschlinkert) + +### License + +Copyright © 2018, [Jon Schlinkert](https://github.com/jonschlinkert). +Released under the [MIT License](LICENSE). + +*** + +_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on June 15, 2018._ \ No newline at end of file diff --git a/node_modules/is-number/index.js b/node_modules/is-number/index.js new file mode 100644 index 00000000..27f19b75 --- /dev/null +++ b/node_modules/is-number/index.js @@ -0,0 +1,18 @@ +/*! + * is-number + * + * Copyright (c) 2014-present, Jon Schlinkert. + * Released under the MIT License. + */ + +'use strict'; + +module.exports = function(num) { + if (typeof num === 'number') { + return num - num === 0; + } + if (typeof num === 'string' && num.trim() !== '') { + return Number.isFinite ? Number.isFinite(+num) : isFinite(+num); + } + return false; +}; diff --git a/node_modules/is-number/package.json b/node_modules/is-number/package.json new file mode 100644 index 00000000..37150726 --- /dev/null +++ b/node_modules/is-number/package.json @@ -0,0 +1,82 @@ +{ + "name": "is-number", + "description": "Returns true if a number or string value is a finite number. Useful for regex matches, parsing, user input, etc.", + "version": "7.0.0", + "homepage": "https://github.com/jonschlinkert/is-number", + "author": "Jon Schlinkert (https://github.com/jonschlinkert)", + "contributors": [ + "Jon Schlinkert (http://twitter.com/jonschlinkert)", + "Olsten Larck (https://i.am.charlike.online)", + "Rouven Weßling (www.rouvenwessling.de)" + ], + "repository": "jonschlinkert/is-number", + "bugs": { + "url": "https://github.com/jonschlinkert/is-number/issues" + }, + "license": "MIT", + "files": [ + "index.js" + ], + "main": "index.js", + "engines": { + "node": ">=0.12.0" + }, + "scripts": { + "test": "mocha" + }, + "devDependencies": { + "ansi": "^0.3.1", + "benchmark": "^2.1.4", + "gulp-format-md": "^1.0.0", + "mocha": "^3.5.3" + }, + "keywords": [ + "cast", + "check", + "coerce", + "coercion", + "finite", + "integer", + "is", + "isnan", + "is-nan", + "is-num", + "is-number", + "isnumber", + "isfinite", + "istype", + "kind", + "math", + "nan", + "num", + "number", + "numeric", + "parseFloat", + "parseInt", + "test", + "type", + "typeof", + "value" + ], + "verb": { + "toc": false, + "layout": "default", + "tasks": [ + "readme" + ], + "related": { + "list": [ + "is-plain-object", + "is-primitive", + "isobject", + "kind-of" + ] + }, + "plugins": [ + "gulp-format-md" + ], + "lint": { + "reflinks": true + } + } +} diff --git a/node_modules/js-tokens/CHANGELOG.md b/node_modules/js-tokens/CHANGELOG.md new file mode 100644 index 00000000..755e6f6e --- /dev/null +++ b/node_modules/js-tokens/CHANGELOG.md @@ -0,0 +1,151 @@ +### Version 4.0.0 (2018-01-28) ### + +- Added: Support for ES2018. The only change needed was recognizing the `s` + regex flag. +- Changed: _All_ tokens returned by the `matchToToken` function now have a + `closed` property. It is set to `undefined` for the tokens where “closed” + doesn’t make sense. This means that all tokens objects have the same shape, + which might improve performance. + +These are the breaking changes: + +- `'/a/s'.match(jsTokens)` no longer returns `['/', 'a', '/', 's']`, but + `['/a/s']`. (There are of course other variations of this.) +- Code that rely on some token objects not having the `closed` property could + now behave differently. + + +### Version 3.0.2 (2017-06-28) ### + +- No code changes. Just updates to the readme. + + +### Version 3.0.1 (2017-01-30) ### + +- Fixed: ES2015 unicode escapes with more than 6 hex digits are now matched + correctly. + + +### Version 3.0.0 (2017-01-11) ### + +This release contains one breaking change, that should [improve performance in +V8][v8-perf]: + +> So how can you, as a JavaScript developer, ensure that your RegExps are fast? +> If you are not interested in hooking into RegExp internals, make sure that +> neither the RegExp instance, nor its prototype is modified in order to get the +> best performance: +> +> ```js +> var re = /./g; +> re.exec(''); // Fast path. +> re.new_property = 'slow'; +> ``` + +This module used to export a single regex, with `.matchToToken` bolted +on, just like in the above example. This release changes the exports of +the module to avoid this issue. + +Before: + +```js +import jsTokens from "js-tokens" +// or: +var jsTokens = require("js-tokens") +var matchToToken = jsTokens.matchToToken +``` + +After: + +```js +import jsTokens, {matchToToken} from "js-tokens" +// or: +var jsTokens = require("js-tokens").default +var matchToToken = require("js-tokens").matchToToken +``` + +[v8-perf]: http://v8project.blogspot.se/2017/01/speeding-up-v8-regular-expressions.html + + +### Version 2.0.0 (2016-06-19) ### + +- Added: Support for ES2016. In other words, support for the `**` exponentiation + operator. + +These are the breaking changes: + +- `'**'.match(jsTokens)` no longer returns `['*', '*']`, but `['**']`. +- `'**='.match(jsTokens)` no longer returns `['*', '*=']`, but `['**=']`. + + +### Version 1.0.3 (2016-03-27) ### + +- Improved: Made the regex ever so slightly smaller. +- Updated: The readme. + + +### Version 1.0.2 (2015-10-18) ### + +- Improved: Limited npm package contents for a smaller download. Thanks to + @zertosh! + + +### Version 1.0.1 (2015-06-20) ### + +- Fixed: Declared an undeclared variable. + + +### Version 1.0.0 (2015-02-26) ### + +- Changed: Merged the 'operator' and 'punctuation' types into 'punctuator'. That + type is now equivalent to the Punctuator token in the ECMAScript + specification. (Backwards-incompatible change.) +- Fixed: A `-` followed by a number is now correctly matched as a punctuator + followed by a number. It used to be matched as just a number, but there is no + such thing as negative number literals. (Possibly backwards-incompatible + change.) + + +### Version 0.4.1 (2015-02-21) ### + +- Added: Support for the regex `u` flag. + + +### Version 0.4.0 (2015-02-21) ### + +- Improved: `jsTokens.matchToToken` performance. +- Added: Support for octal and binary number literals. +- Added: Support for template strings. + + +### Version 0.3.1 (2015-01-06) ### + +- Fixed: Support for unicode spaces. They used to be allowed in names (which is + very confusing), and some unicode newlines were wrongly allowed in strings and + regexes. + + +### Version 0.3.0 (2014-12-19) ### + +- Changed: The `jsTokens.names` array has been replaced with the + `jsTokens.matchToToken` function. The capturing groups of `jsTokens` are no + longer part of the public API; instead use said function. See this [gist] for + an example. (Backwards-incompatible change.) +- Changed: The empty string is now considered an “invalid” token, instead an + “empty” token (its own group). (Backwards-incompatible change.) +- Removed: component support. (Backwards-incompatible change.) + +[gist]: https://gist.github.com/lydell/be49dbf80c382c473004 + + +### Version 0.2.0 (2014-06-19) ### + +- Changed: Match ES6 function arrows (`=>`) as an operator, instead of its own + category (“functionArrow”), for simplicity. (Backwards-incompatible change.) +- Added: ES6 splats (`...`) are now matched as an operator (instead of three + punctuations). (Backwards-incompatible change.) + + +### Version 0.1.0 (2014-03-08) ### + +- Initial release. diff --git a/node_modules/js-tokens/LICENSE b/node_modules/js-tokens/LICENSE new file mode 100644 index 00000000..54aef52f --- /dev/null +++ b/node_modules/js-tokens/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014, 2015, 2016, 2017, 2018 Simon Lydell + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/js-tokens/README.md b/node_modules/js-tokens/README.md new file mode 100644 index 00000000..00cdf163 --- /dev/null +++ b/node_modules/js-tokens/README.md @@ -0,0 +1,240 @@ +Overview [![Build Status](https://travis-ci.org/lydell/js-tokens.svg?branch=master)](https://travis-ci.org/lydell/js-tokens) +======== + +A regex that tokenizes JavaScript. + +```js +var jsTokens = require("js-tokens").default + +var jsString = "var foo=opts.foo;\n..." + +jsString.match(jsTokens) +// ["var", " ", "foo", "=", "opts", ".", "foo", ";", "\n", ...] +``` + + +Installation +============ + +`npm install js-tokens` + +```js +import jsTokens from "js-tokens" +// or: +var jsTokens = require("js-tokens").default +``` + + +Usage +===== + +### `jsTokens` ### + +A regex with the `g` flag that matches JavaScript tokens. + +The regex _always_ matches, even invalid JavaScript and the empty string. + +The next match is always directly after the previous. + +### `var token = matchToToken(match)` ### + +```js +import {matchToToken} from "js-tokens" +// or: +var matchToToken = require("js-tokens").matchToToken +``` + +Takes a `match` returned by `jsTokens.exec(string)`, and returns a `{type: +String, value: String}` object. The following types are available: + +- string +- comment +- regex +- number +- name +- punctuator +- whitespace +- invalid + +Multi-line comments and strings also have a `closed` property indicating if the +token was closed or not (see below). + +Comments and strings both come in several flavors. To distinguish them, check if +the token starts with `//`, `/*`, `'`, `"` or `` ` ``. + +Names are ECMAScript IdentifierNames, that is, including both identifiers and +keywords. You may use [is-keyword-js] to tell them apart. + +Whitespace includes both line terminators and other whitespace. + +[is-keyword-js]: https://github.com/crissdev/is-keyword-js + + +ECMAScript support +================== + +The intention is to always support the latest ECMAScript version whose feature +set has been finalized. + +If adding support for a newer version requires changes, a new version with a +major verion bump will be released. + +Currently, ECMAScript 2018 is supported. + + +Invalid code handling +===================== + +Unterminated strings are still matched as strings. JavaScript strings cannot +contain (unescaped) newlines, so unterminated strings simply end at the end of +the line. Unterminated template strings can contain unescaped newlines, though, +so they go on to the end of input. + +Unterminated multi-line comments are also still matched as comments. They +simply go on to the end of the input. + +Unterminated regex literals are likely matched as division and whatever is +inside the regex. + +Invalid ASCII characters have their own capturing group. + +Invalid non-ASCII characters are treated as names, to simplify the matching of +names (except unicode spaces which are treated as whitespace). Note: See also +the [ES2018](#es2018) section. + +Regex literals may contain invalid regex syntax. They are still matched as +regex literals. They may also contain repeated regex flags, to keep the regex +simple. + +Strings may contain invalid escape sequences. + + +Limitations +=========== + +Tokenizing JavaScript using regexes—in fact, _one single regex_—won’t be +perfect. But that’s not the point either. + +You may compare jsTokens with [esprima] by using `esprima-compare.js`. +See `npm run esprima-compare`! + +[esprima]: http://esprima.org/ + +### Template string interpolation ### + +Template strings are matched as single tokens, from the starting `` ` `` to the +ending `` ` ``, including interpolations (whose tokens are not matched +individually). + +Matching template string interpolations requires recursive balancing of `{` and +`}`—something that JavaScript regexes cannot do. Only one level of nesting is +supported. + +### Division and regex literals collision ### + +Consider this example: + +```js +var g = 9.82 +var number = bar / 2/g + +var regex = / 2/g +``` + +A human can easily understand that in the `number` line we’re dealing with +division, and in the `regex` line we’re dealing with a regex literal. How come? +Because humans can look at the whole code to put the `/` characters in context. +A JavaScript regex cannot. It only sees forwards. (Well, ES2018 regexes can also +look backwards. See the [ES2018](#es2018) section). + +When the `jsTokens` regex scans throught the above, it will see the following +at the end of both the `number` and `regex` rows: + +```js +/ 2/g +``` + +It is then impossible to know if that is a regex literal, or part of an +expression dealing with division. + +Here is a similar case: + +```js +foo /= 2/g +foo(/= 2/g) +``` + +The first line divides the `foo` variable with `2/g`. The second line calls the +`foo` function with the regex literal `/= 2/g`. Again, since `jsTokens` only +sees forwards, it cannot tell the two cases apart. + +There are some cases where we _can_ tell division and regex literals apart, +though. + +First off, we have the simple cases where there’s only one slash in the line: + +```js +var foo = 2/g +foo /= 2 +``` + +Regex literals cannot contain newlines, so the above cases are correctly +identified as division. Things are only problematic when there are more than +one non-comment slash in a single line. + +Secondly, not every character is a valid regex flag. + +```js +var number = bar / 2/e +``` + +The above example is also correctly identified as division, because `e` is not a +valid regex flag. I initially wanted to future-proof by allowing `[a-zA-Z]*` +(any letter) as flags, but it is not worth it since it increases the amount of +ambigous cases. So only the standard `g`, `m`, `i`, `y` and `u` flags are +allowed. This means that the above example will be identified as division as +long as you don’t rename the `e` variable to some permutation of `gmiyus` 1 to 6 +characters long. + +Lastly, we can look _forward_ for information. + +- If the token following what looks like a regex literal is not valid after a + regex literal, but is valid in a division expression, then the regex literal + is treated as division instead. For example, a flagless regex cannot be + followed by a string, number or name, but all of those three can be the + denominator of a division. +- Generally, if what looks like a regex literal is followed by an operator, the + regex literal is treated as division instead. This is because regexes are + seldomly used with operators (such as `+`, `*`, `&&` and `==`), but division + could likely be part of such an expression. + +Please consult the regex source and the test cases for precise information on +when regex or division is matched (should you need to know). In short, you +could sum it up as: + +If the end of a statement looks like a regex literal (even if it isn’t), it +will be treated as one. Otherwise it should work as expected (if you write sane +code). + +### ES2018 ### + +ES2018 added some nice regex improvements to the language. + +- [Unicode property escapes] should allow telling names and invalid non-ASCII + characters apart without blowing up the regex size. +- [Lookbehind assertions] should allow matching telling division and regex + literals apart in more cases. +- [Named capture groups] might simplify some things. + +These things would be nice to do, but are not critical. They probably have to +wait until the oldest maintained Node.js LTS release supports those features. + +[Unicode property escapes]: http://2ality.com/2017/07/regexp-unicode-property-escapes.html +[Lookbehind assertions]: http://2ality.com/2017/05/regexp-lookbehind-assertions.html +[Named capture groups]: http://2ality.com/2017/05/regexp-named-capture-groups.html + + +License +======= + +[MIT](LICENSE). diff --git a/node_modules/js-tokens/index.js b/node_modules/js-tokens/index.js new file mode 100644 index 00000000..b23a4a0e --- /dev/null +++ b/node_modules/js-tokens/index.js @@ -0,0 +1,23 @@ +// Copyright 2014, 2015, 2016, 2017, 2018 Simon Lydell +// License: MIT. (See LICENSE.) + +Object.defineProperty(exports, "__esModule", { + value: true +}) + +// This regex comes from regex.coffee, and is inserted here by generate-index.js +// (run `npm run build`). +exports.default = /((['"])(?:(?!\2|\\).|\\(?:\r\n|[\s\S]))*(\2)?|`(?:[^`\\$]|\\[\s\S]|\$(?!\{)|\$\{(?:[^{}]|\{[^}]*\}?)*\}?)*(`)?)|(\/\/.*)|(\/\*(?:[^*]|\*(?!\/))*(\*\/)?)|(\/(?!\*)(?:\[(?:(?![\]\\]).|\\.)*\]|(?![\/\]\\]).|\\.)+\/(?:(?!\s*(?:\b|[\u0080-\uFFFF$\\'"~({]|[+\-!](?!=)|\.?\d))|[gmiyus]{1,6}\b(?![\u0080-\uFFFF$\\]|\s*(?:[+\-*%&|^<>!=?({]|\/(?![\/*])))))|(0[xX][\da-fA-F]+|0[oO][0-7]+|0[bB][01]+|(?:\d*\.\d+|\d+\.?)(?:[eE][+-]?\d+)?)|((?!\d)(?:(?!\s)[$\w\u0080-\uFFFF]|\\u[\da-fA-F]{4}|\\u\{[\da-fA-F]+\})+)|(--|\+\+|&&|\|\||=>|\.{3}|(?:[+\-\/%&|^]|\*{1,2}|<{1,2}|>{1,3}|!=?|={1,2})=?|[?~.,:;[\](){}])|(\s+)|(^$|[\s\S])/g + +exports.matchToToken = function(match) { + var token = {type: "invalid", value: match[0], closed: undefined} + if (match[ 1]) token.type = "string" , token.closed = !!(match[3] || match[4]) + else if (match[ 5]) token.type = "comment" + else if (match[ 6]) token.type = "comment", token.closed = !!match[7] + else if (match[ 8]) token.type = "regex" + else if (match[ 9]) token.type = "number" + else if (match[10]) token.type = "name" + else if (match[11]) token.type = "punctuator" + else if (match[12]) token.type = "whitespace" + return token +} diff --git a/node_modules/js-tokens/package.json b/node_modules/js-tokens/package.json new file mode 100644 index 00000000..66752fab --- /dev/null +++ b/node_modules/js-tokens/package.json @@ -0,0 +1,30 @@ +{ + "name": "js-tokens", + "version": "4.0.0", + "author": "Simon Lydell", + "license": "MIT", + "description": "A regex that tokenizes JavaScript.", + "keywords": [ + "JavaScript", + "js", + "token", + "tokenize", + "regex" + ], + "files": [ + "index.js" + ], + "repository": "lydell/js-tokens", + "scripts": { + "test": "mocha --ui tdd", + "esprima-compare": "node esprima-compare ./index.js everything.js/es5.js", + "build": "node generate-index.js", + "dev": "npm run build && npm test" + }, + "devDependencies": { + "coffeescript": "2.1.1", + "esprima": "4.0.0", + "everything.js": "1.0.3", + "mocha": "5.0.0" + } +} diff --git a/node_modules/js-yaml/CHANGELOG.md b/node_modules/js-yaml/CHANGELOG.md new file mode 100644 index 00000000..ff2375e0 --- /dev/null +++ b/node_modules/js-yaml/CHANGELOG.md @@ -0,0 +1,616 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + + +## [4.1.0] - 2021-04-15 +### Added +- Types are now exported as `yaml.types.XXX`. +- Every type now has `options` property with original arguments kept as they were + (see `yaml.types.int.options` as an example). + +### Changed +- `Schema.extend()` now keeps old type order in case of conflicts + (e.g. Schema.extend([ a, b, c ]).extend([ b, a, d ]) is now ordered as `abcd` instead of `cbad`). + + +## [4.0.0] - 2021-01-03 +### Changed +- Check [migration guide](migrate_v3_to_v4.md) to see details for all breaking changes. +- Breaking: "unsafe" tags `!!js/function`, `!!js/regexp`, `!!js/undefined` are + moved to [js-yaml-js-types](https://github.com/nodeca/js-yaml-js-types) package. +- Breaking: removed `safe*` functions. Use `load`, `loadAll`, `dump` + instead which are all now safe by default. +- `yaml.DEFAULT_SAFE_SCHEMA` and `yaml.DEFAULT_FULL_SCHEMA` are removed, use + `yaml.DEFAULT_SCHEMA` instead. +- `yaml.Schema.create(schema, tags)` is removed, use `schema.extend(tags)` instead. +- `!!binary` now always mapped to `Uint8Array` on load. +- Reduced nesting of `/lib` folder. +- Parse numbers according to YAML 1.2 instead of YAML 1.1 (`01234` is now decimal, + `0o1234` is octal, `1:23` is parsed as string instead of base60). +- `dump()` no longer quotes `:`, `[`, `]`, `(`, `)` except when necessary, #470, #557. +- Line and column in exceptions are now formatted as `(X:Y)` instead of + `at line X, column Y` (also present in compact format), #332. +- Code snippet created in exceptions now contains multiple lines with line numbers. +- `dump()` now serializes `undefined` as `null` in collections and removes keys with + `undefined` in mappings, #571. +- `dump()` with `skipInvalid=true` now serializes invalid items in collections as null. +- Custom tags starting with `!` are now dumped as `!tag` instead of `!`, #576. +- Custom tags starting with `tag:yaml.org,2002:` are now shorthanded using `!!`, #258. + +### Added +- Added `.mjs` (es modules) support. +- Added `quotingType` and `forceQuotes` options for dumper to configure + string literal style, #290, #529. +- Added `styles: { '!!null': 'empty' }` option for dumper + (serializes `{ foo: null }` as "`foo: `"), #570. +- Added `replacer` option (similar to option in JSON.stringify), #339. +- Custom `Tag` can now handle all tags or multiple tags with the same prefix, #385. + +### Fixed +- Astral characters are no longer encoded by `dump()`, #587. +- "duplicate mapping key" exception now points at the correct column, #452. +- Extra commas in flow collections (e.g. `[foo,,bar]`) now throw an exception + instead of producing null, #321. +- `__proto__` key no longer overrides object prototype, #164. +- Removed `bower.json`. +- Tags are now url-decoded in `load()` and url-encoded in `dump()` + (previously usage of custom non-ascii tags may have led to invalid YAML that can't be parsed). +- Anchors now work correctly with empty nodes, #301. +- Fix incorrect parsing of invalid block mapping syntax, #418. +- Throw an error if block sequence/mapping indent contains a tab, #80. + + +## [3.14.1] - 2020-12-07 +### Security +- Fix possible code execution in (already unsafe) `.load()` (in &anchor). + + +## [3.14.0] - 2020-05-22 +### Changed +- Support `safe/loadAll(input, options)` variant of call. +- CI: drop outdated nodejs versions. +- Dev deps bump. + +### Fixed +- Quote `=` in plain scalars #519. +- Check the node type for `!` tag in case user manually specifies it. +- Verify that there are no null-bytes in input. +- Fix wrong quote position when writing condensed flow, #526. + + +## [3.13.1] - 2019-04-05 +### Security +- Fix possible code execution in (already unsafe) `.load()`, #480. + + +## [3.13.0] - 2019-03-20 +### Security +- Security fix: `safeLoad()` can hang when arrays with nested refs + used as key. Now throws exception for nested arrays. #475. + + +## [3.12.2] - 2019-02-26 +### Fixed +- Fix `noArrayIndent` option for root level, #468. + + +## [3.12.1] - 2019-01-05 +### Added +- Added `noArrayIndent` option, #432. + + +## [3.12.0] - 2018-06-02 +### Changed +- Support arrow functions without a block statement, #421. + + +## [3.11.0] - 2018-03-05 +### Added +- Add arrow functions suport for `!!js/function`. + +### Fixed +- Fix dump in bin/octal/hex formats for negative integers, #399. + + +## [3.10.0] - 2017-09-10 +### Fixed +- Fix `condenseFlow` output (quote keys for sure, instead of spaces), #371, #370. +- Dump astrals as codepoints instead of surrogate pair, #368. + + +## [3.9.1] - 2017-07-08 +### Fixed +- Ensure stack is present for custom errors in node 7.+, #351. + + +## [3.9.0] - 2017-07-08 +### Added +- Add `condenseFlow` option (to create pretty URL query params), #346. + +### Fixed +- Support array return from safeLoadAll/loadAll, #350. + + +## [3.8.4] - 2017-05-08 +### Fixed +- Dumper: prevent space after dash for arrays that wrap, #343. + + +## [3.8.3] - 2017-04-05 +### Fixed +- Should not allow numbers to begin and end with underscore, #335. + + +## [3.8.2] - 2017-03-02 +### Fixed +- Fix `!!float 123` (integers) parse, #333. +- Don't allow leading zeros in floats (except 0, 0.xxx). +- Allow positive exponent without sign in floats. + + +## [3.8.1] - 2017-02-07 +### Changed +- Maintenance: update browserified build. + + +## [3.8.0] - 2017-02-07 +### Fixed +- Fix reported position for `duplicated mapping key` errors. + Now points to block start instead of block end. + (#243, thanks to @shockey). + + +## [3.7.0] - 2016-11-12 +### Added +- Support polymorphism for tags (#300, thanks to @monken). + +### Fixed +- Fix parsing of quotes followed by newlines (#304, thanks to @dplepage). + + +## [3.6.1] - 2016-05-11 +### Fixed +- Fix output cut on a pipe, #286. + + +## [3.6.0] - 2016-04-16 +### Fixed +- Dumper rewrite, fix multiple bugs with trailing `\n`. + Big thanks to @aepsilon! +- Loader: fix leading/trailing newlines in block scalars, @aepsilon. + + +## [3.5.5] - 2016-03-17 +### Fixed +- Date parse fix: don't allow dates with on digit in month and day, #268. + + +## [3.5.4] - 2016-03-09 +### Added +- `noCompatMode` for dumper, to disable quoting YAML 1.1 values. + + +## [3.5.3] - 2016-02-11 +### Changed +- Maintenance release. + + +## [3.5.2] - 2016-01-11 +### Changed +- Maintenance: missed comma in bower config. + + +## [3.5.1] - 2016-01-11 +### Changed +- Removed `inherit` dependency, #239. +- Better browserify workaround for esprima load. +- Demo rewrite. + + +## [3.5.0] - 2016-01-10 +### Fixed +- Dumper. Fold strings only, #217. +- Dumper. `norefs` option, to clone linked objects, #229. +- Loader. Throw a warning for duplicate keys, #166. +- Improved browserify support (mark `esprima` & `Buffer` excluded). + + +## [3.4.6] - 2015-11-26 +### Changed +- Use standalone `inherit` to keep browserified files clear. + + +## [3.4.5] - 2015-11-23 +### Added +- Added `lineWidth` option to dumper. + + +## [3.4.4] - 2015-11-21 +### Fixed +- Fixed floats dump (missed dot for scientific format), #220. +- Allow non-printable characters inside quoted scalars, #192. + + +## [3.4.3] - 2015-10-10 +### Changed +- Maintenance release - deps bump (esprima, argparse). + + +## [3.4.2] - 2015-09-09 +### Fixed +- Fixed serialization of duplicated entries in sequences, #205. + Thanks to @vogelsgesang. + + +## [3.4.1] - 2015-09-05 +### Fixed +- Fixed stacktrace handling in generated errors, for browsers (FF/IE). + + +## [3.4.0] - 2015-08-23 +### Changed +- Don't throw on warnings anymore. Use `onWarning` option to catch. +- Throw error on unknown tags (was warning before). +- Reworked internals of error class. + +### Fixed +- Fixed multiline keys dump, #197. Thanks to @tcr. +- Fixed heading line breaks in some scalars (regression). + + +## [3.3.1] - 2015-05-13 +### Added +- Added `.sortKeys` dumper option, thanks to @rjmunro. + +### Fixed +- Fixed astral characters support, #191. + + +## [3.3.0] - 2015-04-26 +### Changed +- Significantly improved long strings formatting in dumper, thanks to @isaacs. +- Strip BOM if exists. + + +## [3.2.7] - 2015-02-19 +### Changed +- Maintenance release. +- Updated dependencies. +- HISTORY.md -> CHANGELOG.md + + +## [3.2.6] - 2015-02-07 +### Fixed +- Fixed encoding of UTF-16 surrogate pairs. (e.g. "\U0001F431" CAT FACE). +- Fixed demo dates dump (#113, thanks to @Hypercubed). + + +## [3.2.5] - 2014-12-28 +### Fixed +- Fixed resolving of all built-in types on empty nodes. +- Fixed invalid warning on empty lines within quoted scalars and flow collections. +- Fixed bug: Tag on an empty node didn't resolve in some cases. + + +## [3.2.4] - 2014-12-19 +### Fixed +- Fixed resolving of !!null tag on an empty node. + + +## [3.2.3] - 2014-11-08 +### Fixed +- Implemented dumping of objects with circular and cross references. +- Partially fixed aliasing of constructed objects. (see issue #141 for details) + + +## [3.2.2] - 2014-09-07 +### Fixed +- Fixed infinite loop on unindented block scalars. +- Rewritten base64 encode/decode in binary type, to keep code licence clear. + + +## [3.2.1] - 2014-08-24 +### Fixed +- Nothig new. Just fix npm publish error. + + +## [3.2.0] - 2014-08-24 +### Added +- Added input piping support to CLI. + +### Fixed +- Fixed typo, that could cause hand on initial indent (#139). + + +## [3.1.0] - 2014-07-07 +### Changed +- 1.5x-2x speed boost. +- Removed deprecated `require('xxx.yml')` support. +- Significant code cleanup and refactoring. +- Internal API changed. If you used custom types - see updated examples. + Others are not affected. +- Even if the input string has no trailing line break character, + it will be parsed as if it has one. +- Added benchmark scripts. +- Moved bower files to /dist folder +- Bugfixes. + + +## [3.0.2] - 2014-02-27 +### Fixed +- Fixed bug: "constructor" string parsed as `null`. + + +## [3.0.1] - 2013-12-22 +### Fixed +- Fixed parsing of literal scalars. (issue #108) +- Prevented adding unnecessary spaces in object dumps. (issue #68) +- Fixed dumping of objects with very long (> 1024 in length) keys. + + +## [3.0.0] - 2013-12-16 +### Changed +- Refactored code. Changed API for custom types. +- Removed output colors in CLI, dump json by default. +- Removed big dependencies from browser version (esprima, buffer). Load `esprima` manually, if `!!js/function` needed. `!!bin` now returns Array in browser +- AMD support. +- Don't quote dumped strings because of `-` & `?` (if not first char). +- __Deprecated__ loading yaml files via `require()`, as not recommended + behaviour for node. + + +## [2.1.3] - 2013-10-16 +### Fixed +- Fix wrong loading of empty block scalars. + + +## [2.1.2] - 2013-10-07 +### Fixed +- Fix unwanted line breaks in folded scalars. + + +## [2.1.1] - 2013-10-02 +### Fixed +- Dumper now respects deprecated booleans syntax from YAML 1.0/1.1 +- Fixed reader bug in JSON-like sequences/mappings. + + +## [2.1.0] - 2013-06-05 +### Added +- Add standard YAML schemas: Failsafe (`FAILSAFE_SCHEMA`), + JSON (`JSON_SCHEMA`) and Core (`CORE_SCHEMA`). +- Add `skipInvalid` dumper option. + +### Changed +- Rename `DEFAULT_SCHEMA` to `DEFAULT_FULL_SCHEMA` + and `SAFE_SCHEMA` to `DEFAULT_SAFE_SCHEMA`. +- Use `safeLoad` for `require` extension. + +### Fixed +- Bug fix: export `NIL` constant from the public interface. + + +## [2.0.5] - 2013-04-26 +### Security +- Close security issue in !!js/function constructor. + Big thanks to @nealpoole for security audit. + + +## [2.0.4] - 2013-04-08 +### Changed +- Updated .npmignore to reduce package size + + +## [2.0.3] - 2013-02-26 +### Fixed +- Fixed dumping of empty arrays ans objects. ([] and {} instead of null) + + +## [2.0.2] - 2013-02-15 +### Fixed +- Fixed input validation: tabs are printable characters. + + +## [2.0.1] - 2013-02-09 +### Fixed +- Fixed error, when options not passed to function cass + + +## [2.0.0] - 2013-02-09 +### Changed +- Full rewrite. New architecture. Fast one-stage parsing. +- Changed custom types API. +- Added YAML dumper. + + +## [1.0.3] - 2012-11-05 +### Fixed +- Fixed utf-8 files loading. + + +## [1.0.2] - 2012-08-02 +### Fixed +- Pull out hand-written shims. Use ES5-Shims for old browsers support. See #44. +- Fix timstamps incorectly parsed in local time when no time part specified. + + +## [1.0.1] - 2012-07-07 +### Fixed +- Fixes `TypeError: 'undefined' is not an object` under Safari. Thanks Phuong. +- Fix timestamps incorrectly parsed in local time. Thanks @caolan. Closes #46. + + +## [1.0.0] - 2012-07-01 +### Changed +- `y`, `yes`, `n`, `no`, `on`, `off` are not converted to Booleans anymore. + Fixes #42. +- `require(filename)` now returns a single document and throws an Error if + file contains more than one document. +- CLI was merged back from js-yaml.bin + + +## [0.3.7] - 2012-02-28 +### Fixed +- Fix export of `addConstructor()`. Closes #39. + + +## [0.3.6] - 2012-02-22 +### Changed +- Removed AMD parts - too buggy to use. Need help to rewrite from scratch + +### Fixed +- Removed YUI compressor warning (renamed `double` variable). Closes #40. + + +## [0.3.5] - 2012-01-10 +### Fixed +- Workagound for .npmignore fuckup under windows. Thanks to airportyh. + + +## [0.3.4] - 2011-12-24 +### Fixed +- Fixes str[] for oldIEs support. +- Adds better has change support for browserified demo. +- improves compact output of Error. Closes #33. + + +## [0.3.3] - 2011-12-20 +### Added +- adds `compact` stringification of Errors. + +### Changed +- jsyaml executable moved to separate module. + + +## [0.3.2] - 2011-12-16 +### Added +- Added jsyaml executable. +- Added !!js/function support. Closes #12. + +### Fixed +- Fixes ug with block style scalars. Closes #26. +- All sources are passing JSLint now. +- Fixes bug in Safari. Closes #28. +- Fixes bug in Opers. Closes #29. +- Improves browser support. Closes #20. + + +## [0.3.1] - 2011-11-18 +### Added +- Added AMD support for browserified version. +- Added permalinks for online demo YAML snippets. Now we have YPaste service, lol. +- Added !!js/regexp and !!js/undefined types. Partially solves #12. + +### Changed +- Wrapped browserified js-yaml into closure. + +### Fixed +- Fixed the resolvement of non-specific tags. Closes #17. +- Fixed !!set mapping. +- Fixed month parse in dates. Closes #19. + + +## [0.3.0] - 2011-11-09 +### Added +- Added browserified version. Closes #13. +- Added live demo of browserified version. +- Ported some of the PyYAML tests. See #14. + +### Fixed +- Removed JS.Class dependency. Closes #3. +- Fixed timestamp bug when fraction was given. + + +## [0.2.2] - 2011-11-06 +### Fixed +- Fixed crash on docs without ---. Closes #8. +- Fixed multiline string parse +- Fixed tests/comments for using array as key + + +## [0.2.1] - 2011-11-02 +### Fixed +- Fixed short file read (<4k). Closes #9. + + +## [0.2.0] - 2011-11-02 +### Changed +- First public release + + +[4.1.0]: https://github.com/nodeca/js-yaml/compare/4.0.0...4.1.0 +[4.0.0]: https://github.com/nodeca/js-yaml/compare/3.14.0...4.0.0 +[3.14.0]: https://github.com/nodeca/js-yaml/compare/3.13.1...3.14.0 +[3.13.1]: https://github.com/nodeca/js-yaml/compare/3.13.0...3.13.1 +[3.13.0]: https://github.com/nodeca/js-yaml/compare/3.12.2...3.13.0 +[3.12.2]: https://github.com/nodeca/js-yaml/compare/3.12.1...3.12.2 +[3.12.1]: https://github.com/nodeca/js-yaml/compare/3.12.0...3.12.1 +[3.12.0]: https://github.com/nodeca/js-yaml/compare/3.11.0...3.12.0 +[3.11.0]: https://github.com/nodeca/js-yaml/compare/3.10.0...3.11.0 +[3.10.0]: https://github.com/nodeca/js-yaml/compare/3.9.1...3.10.0 +[3.9.1]: https://github.com/nodeca/js-yaml/compare/3.9.0...3.9.1 +[3.9.0]: https://github.com/nodeca/js-yaml/compare/3.8.4...3.9.0 +[3.8.4]: https://github.com/nodeca/js-yaml/compare/3.8.3...3.8.4 +[3.8.3]: https://github.com/nodeca/js-yaml/compare/3.8.2...3.8.3 +[3.8.2]: https://github.com/nodeca/js-yaml/compare/3.8.1...3.8.2 +[3.8.1]: https://github.com/nodeca/js-yaml/compare/3.8.0...3.8.1 +[3.8.0]: https://github.com/nodeca/js-yaml/compare/3.7.0...3.8.0 +[3.7.0]: https://github.com/nodeca/js-yaml/compare/3.6.1...3.7.0 +[3.6.1]: https://github.com/nodeca/js-yaml/compare/3.6.0...3.6.1 +[3.6.0]: https://github.com/nodeca/js-yaml/compare/3.5.5...3.6.0 +[3.5.5]: https://github.com/nodeca/js-yaml/compare/3.5.4...3.5.5 +[3.5.4]: https://github.com/nodeca/js-yaml/compare/3.5.3...3.5.4 +[3.5.3]: https://github.com/nodeca/js-yaml/compare/3.5.2...3.5.3 +[3.5.2]: https://github.com/nodeca/js-yaml/compare/3.5.1...3.5.2 +[3.5.1]: https://github.com/nodeca/js-yaml/compare/3.5.0...3.5.1 +[3.5.0]: https://github.com/nodeca/js-yaml/compare/3.4.6...3.5.0 +[3.4.6]: https://github.com/nodeca/js-yaml/compare/3.4.5...3.4.6 +[3.4.5]: https://github.com/nodeca/js-yaml/compare/3.4.4...3.4.5 +[3.4.4]: https://github.com/nodeca/js-yaml/compare/3.4.3...3.4.4 +[3.4.3]: https://github.com/nodeca/js-yaml/compare/3.4.2...3.4.3 +[3.4.2]: https://github.com/nodeca/js-yaml/compare/3.4.1...3.4.2 +[3.4.1]: https://github.com/nodeca/js-yaml/compare/3.4.0...3.4.1 +[3.4.0]: https://github.com/nodeca/js-yaml/compare/3.3.1...3.4.0 +[3.3.1]: https://github.com/nodeca/js-yaml/compare/3.3.0...3.3.1 +[3.3.0]: https://github.com/nodeca/js-yaml/compare/3.2.7...3.3.0 +[3.2.7]: https://github.com/nodeca/js-yaml/compare/3.2.6...3.2.7 +[3.2.6]: https://github.com/nodeca/js-yaml/compare/3.2.5...3.2.6 +[3.2.5]: https://github.com/nodeca/js-yaml/compare/3.2.4...3.2.5 +[3.2.4]: https://github.com/nodeca/js-yaml/compare/3.2.3...3.2.4 +[3.2.3]: https://github.com/nodeca/js-yaml/compare/3.2.2...3.2.3 +[3.2.2]: https://github.com/nodeca/js-yaml/compare/3.2.1...3.2.2 +[3.2.1]: https://github.com/nodeca/js-yaml/compare/3.2.0...3.2.1 +[3.2.0]: https://github.com/nodeca/js-yaml/compare/3.1.0...3.2.0 +[3.1.0]: https://github.com/nodeca/js-yaml/compare/3.0.2...3.1.0 +[3.0.2]: https://github.com/nodeca/js-yaml/compare/3.0.1...3.0.2 +[3.0.1]: https://github.com/nodeca/js-yaml/compare/3.0.0...3.0.1 +[3.0.0]: https://github.com/nodeca/js-yaml/compare/2.1.3...3.0.0 +[2.1.3]: https://github.com/nodeca/js-yaml/compare/2.1.2...2.1.3 +[2.1.2]: https://github.com/nodeca/js-yaml/compare/2.1.1...2.1.2 +[2.1.1]: https://github.com/nodeca/js-yaml/compare/2.1.0...2.1.1 +[2.1.0]: https://github.com/nodeca/js-yaml/compare/2.0.5...2.1.0 +[2.0.5]: https://github.com/nodeca/js-yaml/compare/2.0.4...2.0.5 +[2.0.4]: https://github.com/nodeca/js-yaml/compare/2.0.3...2.0.4 +[2.0.3]: https://github.com/nodeca/js-yaml/compare/2.0.2...2.0.3 +[2.0.2]: https://github.com/nodeca/js-yaml/compare/2.0.1...2.0.2 +[2.0.1]: https://github.com/nodeca/js-yaml/compare/2.0.0...2.0.1 +[2.0.0]: https://github.com/nodeca/js-yaml/compare/1.0.3...2.0.0 +[1.0.3]: https://github.com/nodeca/js-yaml/compare/1.0.2...1.0.3 +[1.0.2]: https://github.com/nodeca/js-yaml/compare/1.0.1...1.0.2 +[1.0.1]: https://github.com/nodeca/js-yaml/compare/1.0.0...1.0.1 +[1.0.0]: https://github.com/nodeca/js-yaml/compare/0.3.7...1.0.0 +[0.3.7]: https://github.com/nodeca/js-yaml/compare/0.3.6...0.3.7 +[0.3.6]: https://github.com/nodeca/js-yaml/compare/0.3.5...0.3.6 +[0.3.5]: https://github.com/nodeca/js-yaml/compare/0.3.4...0.3.5 +[0.3.4]: https://github.com/nodeca/js-yaml/compare/0.3.3...0.3.4 +[0.3.3]: https://github.com/nodeca/js-yaml/compare/0.3.2...0.3.3 +[0.3.2]: https://github.com/nodeca/js-yaml/compare/0.3.1...0.3.2 +[0.3.1]: https://github.com/nodeca/js-yaml/compare/0.3.0...0.3.1 +[0.3.0]: https://github.com/nodeca/js-yaml/compare/0.2.2...0.3.0 +[0.2.2]: https://github.com/nodeca/js-yaml/compare/0.2.1...0.2.2 +[0.2.1]: https://github.com/nodeca/js-yaml/compare/0.2.0...0.2.1 +[0.2.0]: https://github.com/nodeca/js-yaml/releases/tag/0.2.0 diff --git a/node_modules/js-yaml/LICENSE b/node_modules/js-yaml/LICENSE new file mode 100644 index 00000000..09d3a29e --- /dev/null +++ b/node_modules/js-yaml/LICENSE @@ -0,0 +1,21 @@ +(The MIT License) + +Copyright (C) 2011-2015 by Vitaly Puzrin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/js-yaml/README.md b/node_modules/js-yaml/README.md new file mode 100644 index 00000000..3cbc4bd2 --- /dev/null +++ b/node_modules/js-yaml/README.md @@ -0,0 +1,246 @@ +JS-YAML - YAML 1.2 parser / writer for JavaScript +================================================= + +[![CI](https://github.com/nodeca/js-yaml/workflows/CI/badge.svg?branch=master)](https://github.com/nodeca/js-yaml/actions) +[![NPM version](https://img.shields.io/npm/v/js-yaml.svg)](https://www.npmjs.org/package/js-yaml) + +__[Online Demo](http://nodeca.github.com/js-yaml/)__ + + +This is an implementation of [YAML](http://yaml.org/), a human-friendly data +serialization language. Started as [PyYAML](http://pyyaml.org/) port, it was +completely rewritten from scratch. Now it's very fast, and supports 1.2 spec. + + +Installation +------------ + +### YAML module for node.js + +``` +npm install js-yaml +``` + + +### CLI executable + +If you want to inspect your YAML files from CLI, install js-yaml globally: + +``` +npm install -g js-yaml +``` + +#### Usage + +``` +usage: js-yaml [-h] [-v] [-c] [-t] file + +Positional arguments: + file File with YAML document(s) + +Optional arguments: + -h, --help Show this help message and exit. + -v, --version Show program's version number and exit. + -c, --compact Display errors in compact mode + -t, --trace Show stack trace on error +``` + + +API +--- + +Here we cover the most 'useful' methods. If you need advanced details (creating +your own tags), see [examples](https://github.com/nodeca/js-yaml/tree/master/examples) +for more info. + +``` javascript +const yaml = require('js-yaml'); +const fs = require('fs'); + +// Get document, or throw exception on error +try { + const doc = yaml.load(fs.readFileSync('/home/ixti/example.yml', 'utf8')); + console.log(doc); +} catch (e) { + console.log(e); +} +``` + + +### load (string [ , options ]) + +Parses `string` as single YAML document. Returns either a +plain object, a string, a number, `null` or `undefined`, or throws `YAMLException` on error. By default, does +not support regexps, functions and undefined. + +options: + +- `filename` _(default: null)_ - string to be used as a file path in + error/warning messages. +- `onWarning` _(default: null)_ - function to call on warning messages. + Loader will call this function with an instance of `YAMLException` for each warning. +- `schema` _(default: `DEFAULT_SCHEMA`)_ - specifies a schema to use. + - `FAILSAFE_SCHEMA` - only strings, arrays and plain objects: + http://www.yaml.org/spec/1.2/spec.html#id2802346 + - `JSON_SCHEMA` - all JSON-supported types: + http://www.yaml.org/spec/1.2/spec.html#id2803231 + - `CORE_SCHEMA` - same as `JSON_SCHEMA`: + http://www.yaml.org/spec/1.2/spec.html#id2804923 + - `DEFAULT_SCHEMA` - all supported YAML types. +- `json` _(default: false)_ - compatibility with JSON.parse behaviour. If true, then duplicate keys in a mapping will override values rather than throwing an error. + +NOTE: This function **does not** understand multi-document sources, it throws +exception on those. + +NOTE: JS-YAML **does not** support schema-specific tag resolution restrictions. +So, the JSON schema is not as strictly defined in the YAML specification. +It allows numbers in any notation, use `Null` and `NULL` as `null`, etc. +The core schema also has no such restrictions. It allows binary notation for integers. + + +### loadAll (string [, iterator] [, options ]) + +Same as `load()`, but understands multi-document sources. Applies +`iterator` to each document if specified, or returns array of documents. + +``` javascript +const yaml = require('js-yaml'); + +yaml.loadAll(data, function (doc) { + console.log(doc); +}); +``` + + +### dump (object [ , options ]) + +Serializes `object` as a YAML document. Uses `DEFAULT_SCHEMA`, so it will +throw an exception if you try to dump regexps or functions. However, you can +disable exceptions by setting the `skipInvalid` option to `true`. + +options: + +- `indent` _(default: 2)_ - indentation width to use (in spaces). +- `noArrayIndent` _(default: false)_ - when true, will not add an indentation level to array elements +- `skipInvalid` _(default: false)_ - do not throw on invalid types (like function + in the safe schema) and skip pairs and single values with such types. +- `flowLevel` _(default: -1)_ - specifies level of nesting, when to switch from + block to flow style for collections. -1 means block style everwhere +- `styles` - "tag" => "style" map. Each tag may have own set of styles. +- `schema` _(default: `DEFAULT_SCHEMA`)_ specifies a schema to use. +- `sortKeys` _(default: `false`)_ - if `true`, sort keys when dumping YAML. If a + function, use the function to sort the keys. +- `lineWidth` _(default: `80`)_ - set max line width. Set `-1` for unlimited width. +- `noRefs` _(default: `false`)_ - if `true`, don't convert duplicate objects into references +- `noCompatMode` _(default: `false`)_ - if `true` don't try to be compatible with older + yaml versions. Currently: don't quote "yes", "no" and so on, as required for YAML 1.1 +- `condenseFlow` _(default: `false`)_ - if `true` flow sequences will be condensed, omitting the space between `a, b`. Eg. `'[a,b]'`, and omitting the space between `key: value` and quoting the key. Eg. `'{"a":b}'` Can be useful when using yaml for pretty URL query params as spaces are %-encoded. +- `quotingType` _(`'` or `"`, default: `'`)_ - strings will be quoted using this quoting style. If you specify single quotes, double quotes will still be used for non-printable characters. +- `forceQuotes` _(default: `false`)_ - if `true`, all non-key strings will be quoted even if they normally don't need to. +- `replacer` - callback `function (key, value)` called recursively on each key/value in source object (see `replacer` docs for `JSON.stringify`). + +The following table show availlable styles (e.g. "canonical", +"binary"...) available for each tag (.e.g. !!null, !!int ...). Yaml +output is shown on the right side after `=>` (default setting) or `->`: + +``` none +!!null + "canonical" -> "~" + "lowercase" => "null" + "uppercase" -> "NULL" + "camelcase" -> "Null" + +!!int + "binary" -> "0b1", "0b101010", "0b1110001111010" + "octal" -> "0o1", "0o52", "0o16172" + "decimal" => "1", "42", "7290" + "hexadecimal" -> "0x1", "0x2A", "0x1C7A" + +!!bool + "lowercase" => "true", "false" + "uppercase" -> "TRUE", "FALSE" + "camelcase" -> "True", "False" + +!!float + "lowercase" => ".nan", '.inf' + "uppercase" -> ".NAN", '.INF' + "camelcase" -> ".NaN", '.Inf' +``` + +Example: + +``` javascript +dump(object, { + 'styles': { + '!!null': 'canonical' // dump null as ~ + }, + 'sortKeys': true // sort object keys +}); +``` + +Supported YAML types +-------------------- + +The list of standard YAML tags and corresponding JavaScript types. See also +[YAML tag discussion](http://pyyaml.org/wiki/YAMLTagDiscussion) and +[YAML types repository](http://yaml.org/type/). + +``` +!!null '' # null +!!bool 'yes' # bool +!!int '3...' # number +!!float '3.14...' # number +!!binary '...base64...' # buffer +!!timestamp 'YYYY-...' # date +!!omap [ ... ] # array of key-value pairs +!!pairs [ ... ] # array or array pairs +!!set { ... } # array of objects with given keys and null values +!!str '...' # string +!!seq [ ... ] # array +!!map { ... } # object +``` + +**JavaScript-specific tags** + +See [js-yaml-js-types](https://github.com/nodeca/js-yaml-js-types) for +extra types. + + +Caveats +------- + +Note, that you use arrays or objects as key in JS-YAML. JS does not allow objects +or arrays as keys, and stringifies (by calling `toString()` method) them at the +moment of adding them. + +``` yaml +--- +? [ foo, bar ] +: - baz +? { foo: bar } +: - baz + - baz +``` + +``` javascript +{ "foo,bar": ["baz"], "[object Object]": ["baz", "baz"] } +``` + +Also, reading of properties on implicit block mapping keys is not supported yet. +So, the following YAML document cannot be loaded. + +``` yaml +&anchor foo: + foo: bar + *anchor: duplicate key + baz: bat + *anchor: duplicate key +``` + + +js-yaml for enterprise +---------------------- + +Available as part of the Tidelift Subscription + +The maintainers of js-yaml and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-js-yaml?utm_source=npm-js-yaml&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) diff --git a/node_modules/js-yaml/bin/js-yaml.js b/node_modules/js-yaml/bin/js-yaml.js new file mode 100755 index 00000000..a182f1af --- /dev/null +++ b/node_modules/js-yaml/bin/js-yaml.js @@ -0,0 +1,126 @@ +#!/usr/bin/env node + + +'use strict'; + +/*eslint-disable no-console*/ + + +var fs = require('fs'); +var argparse = require('argparse'); +var yaml = require('..'); + + +//////////////////////////////////////////////////////////////////////////////// + + +var cli = new argparse.ArgumentParser({ + prog: 'js-yaml', + add_help: true +}); + +cli.add_argument('-v', '--version', { + action: 'version', + version: require('../package.json').version +}); + +cli.add_argument('-c', '--compact', { + help: 'Display errors in compact mode', + action: 'store_true' +}); + +// deprecated (not needed after we removed output colors) +// option suppressed, but not completely removed for compatibility +cli.add_argument('-j', '--to-json', { + help: argparse.SUPPRESS, + dest: 'json', + action: 'store_true' +}); + +cli.add_argument('-t', '--trace', { + help: 'Show stack trace on error', + action: 'store_true' +}); + +cli.add_argument('file', { + help: 'File to read, utf-8 encoded without BOM', + nargs: '?', + default: '-' +}); + + +//////////////////////////////////////////////////////////////////////////////// + + +var options = cli.parse_args(); + + +//////////////////////////////////////////////////////////////////////////////// + +function readFile(filename, encoding, callback) { + if (options.file === '-') { + // read from stdin + + var chunks = []; + + process.stdin.on('data', function (chunk) { + chunks.push(chunk); + }); + + process.stdin.on('end', function () { + return callback(null, Buffer.concat(chunks).toString(encoding)); + }); + } else { + fs.readFile(filename, encoding, callback); + } +} + +readFile(options.file, 'utf8', function (error, input) { + var output, isYaml; + + if (error) { + if (error.code === 'ENOENT') { + console.error('File not found: ' + options.file); + process.exit(2); + } + + console.error( + options.trace && error.stack || + error.message || + String(error)); + + process.exit(1); + } + + try { + output = JSON.parse(input); + isYaml = false; + } catch (err) { + if (err instanceof SyntaxError) { + try { + output = []; + yaml.loadAll(input, function (doc) { output.push(doc); }, {}); + isYaml = true; + + if (output.length === 0) output = null; + else if (output.length === 1) output = output[0]; + + } catch (e) { + if (options.trace && err.stack) console.error(e.stack); + else console.error(e.toString(options.compact)); + + process.exit(1); + } + } else { + console.error( + options.trace && err.stack || + err.message || + String(err)); + + process.exit(1); + } + } + + if (isYaml) console.log(JSON.stringify(output, null, ' ')); + else console.log(yaml.dump(output)); +}); diff --git a/node_modules/js-yaml/dist/js-yaml.js b/node_modules/js-yaml/dist/js-yaml.js new file mode 100644 index 00000000..4cc0ddf6 --- /dev/null +++ b/node_modules/js-yaml/dist/js-yaml.js @@ -0,0 +1,3874 @@ + +/*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT */ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : + typeof define === 'function' && define.amd ? define(['exports'], factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.jsyaml = {})); +}(this, (function (exports) { 'use strict'; + + function isNothing(subject) { + return (typeof subject === 'undefined') || (subject === null); + } + + + function isObject(subject) { + return (typeof subject === 'object') && (subject !== null); + } + + + function toArray(sequence) { + if (Array.isArray(sequence)) return sequence; + else if (isNothing(sequence)) return []; + + return [ sequence ]; + } + + + function extend(target, source) { + var index, length, key, sourceKeys; + + if (source) { + sourceKeys = Object.keys(source); + + for (index = 0, length = sourceKeys.length; index < length; index += 1) { + key = sourceKeys[index]; + target[key] = source[key]; + } + } + + return target; + } + + + function repeat(string, count) { + var result = '', cycle; + + for (cycle = 0; cycle < count; cycle += 1) { + result += string; + } + + return result; + } + + + function isNegativeZero(number) { + return (number === 0) && (Number.NEGATIVE_INFINITY === 1 / number); + } + + + var isNothing_1 = isNothing; + var isObject_1 = isObject; + var toArray_1 = toArray; + var repeat_1 = repeat; + var isNegativeZero_1 = isNegativeZero; + var extend_1 = extend; + + var common = { + isNothing: isNothing_1, + isObject: isObject_1, + toArray: toArray_1, + repeat: repeat_1, + isNegativeZero: isNegativeZero_1, + extend: extend_1 + }; + + // YAML error class. http://stackoverflow.com/questions/8458984 + + + function formatError(exception, compact) { + var where = '', message = exception.reason || '(unknown reason)'; + + if (!exception.mark) return message; + + if (exception.mark.name) { + where += 'in "' + exception.mark.name + '" '; + } + + where += '(' + (exception.mark.line + 1) + ':' + (exception.mark.column + 1) + ')'; + + if (!compact && exception.mark.snippet) { + where += '\n\n' + exception.mark.snippet; + } + + return message + ' ' + where; + } + + + function YAMLException$1(reason, mark) { + // Super constructor + Error.call(this); + + this.name = 'YAMLException'; + this.reason = reason; + this.mark = mark; + this.message = formatError(this, false); + + // Include stack trace in error object + if (Error.captureStackTrace) { + // Chrome and NodeJS + Error.captureStackTrace(this, this.constructor); + } else { + // FF, IE 10+ and Safari 6+. Fallback for others + this.stack = (new Error()).stack || ''; + } + } + + + // Inherit from Error + YAMLException$1.prototype = Object.create(Error.prototype); + YAMLException$1.prototype.constructor = YAMLException$1; + + + YAMLException$1.prototype.toString = function toString(compact) { + return this.name + ': ' + formatError(this, compact); + }; + + + var exception = YAMLException$1; + + // get snippet for a single line, respecting maxLength + function getLine(buffer, lineStart, lineEnd, position, maxLineLength) { + var head = ''; + var tail = ''; + var maxHalfLength = Math.floor(maxLineLength / 2) - 1; + + if (position - lineStart > maxHalfLength) { + head = ' ... '; + lineStart = position - maxHalfLength + head.length; + } + + if (lineEnd - position > maxHalfLength) { + tail = ' ...'; + lineEnd = position + maxHalfLength - tail.length; + } + + return { + str: head + buffer.slice(lineStart, lineEnd).replace(/\t/g, '→') + tail, + pos: position - lineStart + head.length // relative position + }; + } + + + function padStart(string, max) { + return common.repeat(' ', max - string.length) + string; + } + + + function makeSnippet(mark, options) { + options = Object.create(options || null); + + if (!mark.buffer) return null; + + if (!options.maxLength) options.maxLength = 79; + if (typeof options.indent !== 'number') options.indent = 1; + if (typeof options.linesBefore !== 'number') options.linesBefore = 3; + if (typeof options.linesAfter !== 'number') options.linesAfter = 2; + + var re = /\r?\n|\r|\0/g; + var lineStarts = [ 0 ]; + var lineEnds = []; + var match; + var foundLineNo = -1; + + while ((match = re.exec(mark.buffer))) { + lineEnds.push(match.index); + lineStarts.push(match.index + match[0].length); + + if (mark.position <= match.index && foundLineNo < 0) { + foundLineNo = lineStarts.length - 2; + } + } + + if (foundLineNo < 0) foundLineNo = lineStarts.length - 1; + + var result = '', i, line; + var lineNoLength = Math.min(mark.line + options.linesAfter, lineEnds.length).toString().length; + var maxLineLength = options.maxLength - (options.indent + lineNoLength + 3); + + for (i = 1; i <= options.linesBefore; i++) { + if (foundLineNo - i < 0) break; + line = getLine( + mark.buffer, + lineStarts[foundLineNo - i], + lineEnds[foundLineNo - i], + mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo - i]), + maxLineLength + ); + result = common.repeat(' ', options.indent) + padStart((mark.line - i + 1).toString(), lineNoLength) + + ' | ' + line.str + '\n' + result; + } + + line = getLine(mark.buffer, lineStarts[foundLineNo], lineEnds[foundLineNo], mark.position, maxLineLength); + result += common.repeat(' ', options.indent) + padStart((mark.line + 1).toString(), lineNoLength) + + ' | ' + line.str + '\n'; + result += common.repeat('-', options.indent + lineNoLength + 3 + line.pos) + '^' + '\n'; + + for (i = 1; i <= options.linesAfter; i++) { + if (foundLineNo + i >= lineEnds.length) break; + line = getLine( + mark.buffer, + lineStarts[foundLineNo + i], + lineEnds[foundLineNo + i], + mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo + i]), + maxLineLength + ); + result += common.repeat(' ', options.indent) + padStart((mark.line + i + 1).toString(), lineNoLength) + + ' | ' + line.str + '\n'; + } + + return result.replace(/\n$/, ''); + } + + + var snippet = makeSnippet; + + var TYPE_CONSTRUCTOR_OPTIONS = [ + 'kind', + 'multi', + 'resolve', + 'construct', + 'instanceOf', + 'predicate', + 'represent', + 'representName', + 'defaultStyle', + 'styleAliases' + ]; + + var YAML_NODE_KINDS = [ + 'scalar', + 'sequence', + 'mapping' + ]; + + function compileStyleAliases(map) { + var result = {}; + + if (map !== null) { + Object.keys(map).forEach(function (style) { + map[style].forEach(function (alias) { + result[String(alias)] = style; + }); + }); + } + + return result; + } + + function Type$1(tag, options) { + options = options || {}; + + Object.keys(options).forEach(function (name) { + if (TYPE_CONSTRUCTOR_OPTIONS.indexOf(name) === -1) { + throw new exception('Unknown option "' + name + '" is met in definition of "' + tag + '" YAML type.'); + } + }); + + // TODO: Add tag format check. + this.options = options; // keep original options in case user wants to extend this type later + this.tag = tag; + this.kind = options['kind'] || null; + this.resolve = options['resolve'] || function () { return true; }; + this.construct = options['construct'] || function (data) { return data; }; + this.instanceOf = options['instanceOf'] || null; + this.predicate = options['predicate'] || null; + this.represent = options['represent'] || null; + this.representName = options['representName'] || null; + this.defaultStyle = options['defaultStyle'] || null; + this.multi = options['multi'] || false; + this.styleAliases = compileStyleAliases(options['styleAliases'] || null); + + if (YAML_NODE_KINDS.indexOf(this.kind) === -1) { + throw new exception('Unknown kind "' + this.kind + '" is specified for "' + tag + '" YAML type.'); + } + } + + var type = Type$1; + + /*eslint-disable max-len*/ + + + + + + function compileList(schema, name) { + var result = []; + + schema[name].forEach(function (currentType) { + var newIndex = result.length; + + result.forEach(function (previousType, previousIndex) { + if (previousType.tag === currentType.tag && + previousType.kind === currentType.kind && + previousType.multi === currentType.multi) { + + newIndex = previousIndex; + } + }); + + result[newIndex] = currentType; + }); + + return result; + } + + + function compileMap(/* lists... */) { + var result = { + scalar: {}, + sequence: {}, + mapping: {}, + fallback: {}, + multi: { + scalar: [], + sequence: [], + mapping: [], + fallback: [] + } + }, index, length; + + function collectType(type) { + if (type.multi) { + result.multi[type.kind].push(type); + result.multi['fallback'].push(type); + } else { + result[type.kind][type.tag] = result['fallback'][type.tag] = type; + } + } + + for (index = 0, length = arguments.length; index < length; index += 1) { + arguments[index].forEach(collectType); + } + return result; + } + + + function Schema$1(definition) { + return this.extend(definition); + } + + + Schema$1.prototype.extend = function extend(definition) { + var implicit = []; + var explicit = []; + + if (definition instanceof type) { + // Schema.extend(type) + explicit.push(definition); + + } else if (Array.isArray(definition)) { + // Schema.extend([ type1, type2, ... ]) + explicit = explicit.concat(definition); + + } else if (definition && (Array.isArray(definition.implicit) || Array.isArray(definition.explicit))) { + // Schema.extend({ explicit: [ type1, type2, ... ], implicit: [ type1, type2, ... ] }) + if (definition.implicit) implicit = implicit.concat(definition.implicit); + if (definition.explicit) explicit = explicit.concat(definition.explicit); + + } else { + throw new exception('Schema.extend argument should be a Type, [ Type ], ' + + 'or a schema definition ({ implicit: [...], explicit: [...] })'); + } + + implicit.forEach(function (type$1) { + if (!(type$1 instanceof type)) { + throw new exception('Specified list of YAML types (or a single Type object) contains a non-Type object.'); + } + + if (type$1.loadKind && type$1.loadKind !== 'scalar') { + throw new exception('There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.'); + } + + if (type$1.multi) { + throw new exception('There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.'); + } + }); + + explicit.forEach(function (type$1) { + if (!(type$1 instanceof type)) { + throw new exception('Specified list of YAML types (or a single Type object) contains a non-Type object.'); + } + }); + + var result = Object.create(Schema$1.prototype); + + result.implicit = (this.implicit || []).concat(implicit); + result.explicit = (this.explicit || []).concat(explicit); + + result.compiledImplicit = compileList(result, 'implicit'); + result.compiledExplicit = compileList(result, 'explicit'); + result.compiledTypeMap = compileMap(result.compiledImplicit, result.compiledExplicit); + + return result; + }; + + + var schema = Schema$1; + + var str = new type('tag:yaml.org,2002:str', { + kind: 'scalar', + construct: function (data) { return data !== null ? data : ''; } + }); + + var seq = new type('tag:yaml.org,2002:seq', { + kind: 'sequence', + construct: function (data) { return data !== null ? data : []; } + }); + + var map = new type('tag:yaml.org,2002:map', { + kind: 'mapping', + construct: function (data) { return data !== null ? data : {}; } + }); + + var failsafe = new schema({ + explicit: [ + str, + seq, + map + ] + }); + + function resolveYamlNull(data) { + if (data === null) return true; + + var max = data.length; + + return (max === 1 && data === '~') || + (max === 4 && (data === 'null' || data === 'Null' || data === 'NULL')); + } + + function constructYamlNull() { + return null; + } + + function isNull(object) { + return object === null; + } + + var _null = new type('tag:yaml.org,2002:null', { + kind: 'scalar', + resolve: resolveYamlNull, + construct: constructYamlNull, + predicate: isNull, + represent: { + canonical: function () { return '~'; }, + lowercase: function () { return 'null'; }, + uppercase: function () { return 'NULL'; }, + camelcase: function () { return 'Null'; }, + empty: function () { return ''; } + }, + defaultStyle: 'lowercase' + }); + + function resolveYamlBoolean(data) { + if (data === null) return false; + + var max = data.length; + + return (max === 4 && (data === 'true' || data === 'True' || data === 'TRUE')) || + (max === 5 && (data === 'false' || data === 'False' || data === 'FALSE')); + } + + function constructYamlBoolean(data) { + return data === 'true' || + data === 'True' || + data === 'TRUE'; + } + + function isBoolean(object) { + return Object.prototype.toString.call(object) === '[object Boolean]'; + } + + var bool = new type('tag:yaml.org,2002:bool', { + kind: 'scalar', + resolve: resolveYamlBoolean, + construct: constructYamlBoolean, + predicate: isBoolean, + represent: { + lowercase: function (object) { return object ? 'true' : 'false'; }, + uppercase: function (object) { return object ? 'TRUE' : 'FALSE'; }, + camelcase: function (object) { return object ? 'True' : 'False'; } + }, + defaultStyle: 'lowercase' + }); + + function isHexCode(c) { + return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) || + ((0x41/* A */ <= c) && (c <= 0x46/* F */)) || + ((0x61/* a */ <= c) && (c <= 0x66/* f */)); + } + + function isOctCode(c) { + return ((0x30/* 0 */ <= c) && (c <= 0x37/* 7 */)); + } + + function isDecCode(c) { + return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)); + } + + function resolveYamlInteger(data) { + if (data === null) return false; + + var max = data.length, + index = 0, + hasDigits = false, + ch; + + if (!max) return false; + + ch = data[index]; + + // sign + if (ch === '-' || ch === '+') { + ch = data[++index]; + } + + if (ch === '0') { + // 0 + if (index + 1 === max) return true; + ch = data[++index]; + + // base 2, base 8, base 16 + + if (ch === 'b') { + // base 2 + index++; + + for (; index < max; index++) { + ch = data[index]; + if (ch === '_') continue; + if (ch !== '0' && ch !== '1') return false; + hasDigits = true; + } + return hasDigits && ch !== '_'; + } + + + if (ch === 'x') { + // base 16 + index++; + + for (; index < max; index++) { + ch = data[index]; + if (ch === '_') continue; + if (!isHexCode(data.charCodeAt(index))) return false; + hasDigits = true; + } + return hasDigits && ch !== '_'; + } + + + if (ch === 'o') { + // base 8 + index++; + + for (; index < max; index++) { + ch = data[index]; + if (ch === '_') continue; + if (!isOctCode(data.charCodeAt(index))) return false; + hasDigits = true; + } + return hasDigits && ch !== '_'; + } + } + + // base 10 (except 0) + + // value should not start with `_`; + if (ch === '_') return false; + + for (; index < max; index++) { + ch = data[index]; + if (ch === '_') continue; + if (!isDecCode(data.charCodeAt(index))) { + return false; + } + hasDigits = true; + } + + // Should have digits and should not end with `_` + if (!hasDigits || ch === '_') return false; + + return true; + } + + function constructYamlInteger(data) { + var value = data, sign = 1, ch; + + if (value.indexOf('_') !== -1) { + value = value.replace(/_/g, ''); + } + + ch = value[0]; + + if (ch === '-' || ch === '+') { + if (ch === '-') sign = -1; + value = value.slice(1); + ch = value[0]; + } + + if (value === '0') return 0; + + if (ch === '0') { + if (value[1] === 'b') return sign * parseInt(value.slice(2), 2); + if (value[1] === 'x') return sign * parseInt(value.slice(2), 16); + if (value[1] === 'o') return sign * parseInt(value.slice(2), 8); + } + + return sign * parseInt(value, 10); + } + + function isInteger(object) { + return (Object.prototype.toString.call(object)) === '[object Number]' && + (object % 1 === 0 && !common.isNegativeZero(object)); + } + + var int = new type('tag:yaml.org,2002:int', { + kind: 'scalar', + resolve: resolveYamlInteger, + construct: constructYamlInteger, + predicate: isInteger, + represent: { + binary: function (obj) { return obj >= 0 ? '0b' + obj.toString(2) : '-0b' + obj.toString(2).slice(1); }, + octal: function (obj) { return obj >= 0 ? '0o' + obj.toString(8) : '-0o' + obj.toString(8).slice(1); }, + decimal: function (obj) { return obj.toString(10); }, + /* eslint-disable max-len */ + hexadecimal: function (obj) { return obj >= 0 ? '0x' + obj.toString(16).toUpperCase() : '-0x' + obj.toString(16).toUpperCase().slice(1); } + }, + defaultStyle: 'decimal', + styleAliases: { + binary: [ 2, 'bin' ], + octal: [ 8, 'oct' ], + decimal: [ 10, 'dec' ], + hexadecimal: [ 16, 'hex' ] + } + }); + + var YAML_FLOAT_PATTERN = new RegExp( + // 2.5e4, 2.5 and integers + '^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?' + + // .2e4, .2 + // special case, seems not from spec + '|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?' + + // .inf + '|[-+]?\\.(?:inf|Inf|INF)' + + // .nan + '|\\.(?:nan|NaN|NAN))$'); + + function resolveYamlFloat(data) { + if (data === null) return false; + + if (!YAML_FLOAT_PATTERN.test(data) || + // Quick hack to not allow integers end with `_` + // Probably should update regexp & check speed + data[data.length - 1] === '_') { + return false; + } + + return true; + } + + function constructYamlFloat(data) { + var value, sign; + + value = data.replace(/_/g, '').toLowerCase(); + sign = value[0] === '-' ? -1 : 1; + + if ('+-'.indexOf(value[0]) >= 0) { + value = value.slice(1); + } + + if (value === '.inf') { + return (sign === 1) ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY; + + } else if (value === '.nan') { + return NaN; + } + return sign * parseFloat(value, 10); + } + + + var SCIENTIFIC_WITHOUT_DOT = /^[-+]?[0-9]+e/; + + function representYamlFloat(object, style) { + var res; + + if (isNaN(object)) { + switch (style) { + case 'lowercase': return '.nan'; + case 'uppercase': return '.NAN'; + case 'camelcase': return '.NaN'; + } + } else if (Number.POSITIVE_INFINITY === object) { + switch (style) { + case 'lowercase': return '.inf'; + case 'uppercase': return '.INF'; + case 'camelcase': return '.Inf'; + } + } else if (Number.NEGATIVE_INFINITY === object) { + switch (style) { + case 'lowercase': return '-.inf'; + case 'uppercase': return '-.INF'; + case 'camelcase': return '-.Inf'; + } + } else if (common.isNegativeZero(object)) { + return '-0.0'; + } + + res = object.toString(10); + + // JS stringifier can build scientific format without dots: 5e-100, + // while YAML requres dot: 5.e-100. Fix it with simple hack + + return SCIENTIFIC_WITHOUT_DOT.test(res) ? res.replace('e', '.e') : res; + } + + function isFloat(object) { + return (Object.prototype.toString.call(object) === '[object Number]') && + (object % 1 !== 0 || common.isNegativeZero(object)); + } + + var float = new type('tag:yaml.org,2002:float', { + kind: 'scalar', + resolve: resolveYamlFloat, + construct: constructYamlFloat, + predicate: isFloat, + represent: representYamlFloat, + defaultStyle: 'lowercase' + }); + + var json = failsafe.extend({ + implicit: [ + _null, + bool, + int, + float + ] + }); + + var core = json; + + var YAML_DATE_REGEXP = new RegExp( + '^([0-9][0-9][0-9][0-9])' + // [1] year + '-([0-9][0-9])' + // [2] month + '-([0-9][0-9])$'); // [3] day + + var YAML_TIMESTAMP_REGEXP = new RegExp( + '^([0-9][0-9][0-9][0-9])' + // [1] year + '-([0-9][0-9]?)' + // [2] month + '-([0-9][0-9]?)' + // [3] day + '(?:[Tt]|[ \\t]+)' + // ... + '([0-9][0-9]?)' + // [4] hour + ':([0-9][0-9])' + // [5] minute + ':([0-9][0-9])' + // [6] second + '(?:\\.([0-9]*))?' + // [7] fraction + '(?:[ \\t]*(Z|([-+])([0-9][0-9]?)' + // [8] tz [9] tz_sign [10] tz_hour + '(?::([0-9][0-9]))?))?$'); // [11] tz_minute + + function resolveYamlTimestamp(data) { + if (data === null) return false; + if (YAML_DATE_REGEXP.exec(data) !== null) return true; + if (YAML_TIMESTAMP_REGEXP.exec(data) !== null) return true; + return false; + } + + function constructYamlTimestamp(data) { + var match, year, month, day, hour, minute, second, fraction = 0, + delta = null, tz_hour, tz_minute, date; + + match = YAML_DATE_REGEXP.exec(data); + if (match === null) match = YAML_TIMESTAMP_REGEXP.exec(data); + + if (match === null) throw new Error('Date resolve error'); + + // match: [1] year [2] month [3] day + + year = +(match[1]); + month = +(match[2]) - 1; // JS month starts with 0 + day = +(match[3]); + + if (!match[4]) { // no hour + return new Date(Date.UTC(year, month, day)); + } + + // match: [4] hour [5] minute [6] second [7] fraction + + hour = +(match[4]); + minute = +(match[5]); + second = +(match[6]); + + if (match[7]) { + fraction = match[7].slice(0, 3); + while (fraction.length < 3) { // milli-seconds + fraction += '0'; + } + fraction = +fraction; + } + + // match: [8] tz [9] tz_sign [10] tz_hour [11] tz_minute + + if (match[9]) { + tz_hour = +(match[10]); + tz_minute = +(match[11] || 0); + delta = (tz_hour * 60 + tz_minute) * 60000; // delta in mili-seconds + if (match[9] === '-') delta = -delta; + } + + date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction)); + + if (delta) date.setTime(date.getTime() - delta); + + return date; + } + + function representYamlTimestamp(object /*, style*/) { + return object.toISOString(); + } + + var timestamp = new type('tag:yaml.org,2002:timestamp', { + kind: 'scalar', + resolve: resolveYamlTimestamp, + construct: constructYamlTimestamp, + instanceOf: Date, + represent: representYamlTimestamp + }); + + function resolveYamlMerge(data) { + return data === '<<' || data === null; + } + + var merge = new type('tag:yaml.org,2002:merge', { + kind: 'scalar', + resolve: resolveYamlMerge + }); + + /*eslint-disable no-bitwise*/ + + + + + + // [ 64, 65, 66 ] -> [ padding, CR, LF ] + var BASE64_MAP = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r'; + + + function resolveYamlBinary(data) { + if (data === null) return false; + + var code, idx, bitlen = 0, max = data.length, map = BASE64_MAP; + + // Convert one by one. + for (idx = 0; idx < max; idx++) { + code = map.indexOf(data.charAt(idx)); + + // Skip CR/LF + if (code > 64) continue; + + // Fail on illegal characters + if (code < 0) return false; + + bitlen += 6; + } + + // If there are any bits left, source was corrupted + return (bitlen % 8) === 0; + } + + function constructYamlBinary(data) { + var idx, tailbits, + input = data.replace(/[\r\n=]/g, ''), // remove CR/LF & padding to simplify scan + max = input.length, + map = BASE64_MAP, + bits = 0, + result = []; + + // Collect by 6*4 bits (3 bytes) + + for (idx = 0; idx < max; idx++) { + if ((idx % 4 === 0) && idx) { + result.push((bits >> 16) & 0xFF); + result.push((bits >> 8) & 0xFF); + result.push(bits & 0xFF); + } + + bits = (bits << 6) | map.indexOf(input.charAt(idx)); + } + + // Dump tail + + tailbits = (max % 4) * 6; + + if (tailbits === 0) { + result.push((bits >> 16) & 0xFF); + result.push((bits >> 8) & 0xFF); + result.push(bits & 0xFF); + } else if (tailbits === 18) { + result.push((bits >> 10) & 0xFF); + result.push((bits >> 2) & 0xFF); + } else if (tailbits === 12) { + result.push((bits >> 4) & 0xFF); + } + + return new Uint8Array(result); + } + + function representYamlBinary(object /*, style*/) { + var result = '', bits = 0, idx, tail, + max = object.length, + map = BASE64_MAP; + + // Convert every three bytes to 4 ASCII characters. + + for (idx = 0; idx < max; idx++) { + if ((idx % 3 === 0) && idx) { + result += map[(bits >> 18) & 0x3F]; + result += map[(bits >> 12) & 0x3F]; + result += map[(bits >> 6) & 0x3F]; + result += map[bits & 0x3F]; + } + + bits = (bits << 8) + object[idx]; + } + + // Dump tail + + tail = max % 3; + + if (tail === 0) { + result += map[(bits >> 18) & 0x3F]; + result += map[(bits >> 12) & 0x3F]; + result += map[(bits >> 6) & 0x3F]; + result += map[bits & 0x3F]; + } else if (tail === 2) { + result += map[(bits >> 10) & 0x3F]; + result += map[(bits >> 4) & 0x3F]; + result += map[(bits << 2) & 0x3F]; + result += map[64]; + } else if (tail === 1) { + result += map[(bits >> 2) & 0x3F]; + result += map[(bits << 4) & 0x3F]; + result += map[64]; + result += map[64]; + } + + return result; + } + + function isBinary(obj) { + return Object.prototype.toString.call(obj) === '[object Uint8Array]'; + } + + var binary = new type('tag:yaml.org,2002:binary', { + kind: 'scalar', + resolve: resolveYamlBinary, + construct: constructYamlBinary, + predicate: isBinary, + represent: representYamlBinary + }); + + var _hasOwnProperty$3 = Object.prototype.hasOwnProperty; + var _toString$2 = Object.prototype.toString; + + function resolveYamlOmap(data) { + if (data === null) return true; + + var objectKeys = [], index, length, pair, pairKey, pairHasKey, + object = data; + + for (index = 0, length = object.length; index < length; index += 1) { + pair = object[index]; + pairHasKey = false; + + if (_toString$2.call(pair) !== '[object Object]') return false; + + for (pairKey in pair) { + if (_hasOwnProperty$3.call(pair, pairKey)) { + if (!pairHasKey) pairHasKey = true; + else return false; + } + } + + if (!pairHasKey) return false; + + if (objectKeys.indexOf(pairKey) === -1) objectKeys.push(pairKey); + else return false; + } + + return true; + } + + function constructYamlOmap(data) { + return data !== null ? data : []; + } + + var omap = new type('tag:yaml.org,2002:omap', { + kind: 'sequence', + resolve: resolveYamlOmap, + construct: constructYamlOmap + }); + + var _toString$1 = Object.prototype.toString; + + function resolveYamlPairs(data) { + if (data === null) return true; + + var index, length, pair, keys, result, + object = data; + + result = new Array(object.length); + + for (index = 0, length = object.length; index < length; index += 1) { + pair = object[index]; + + if (_toString$1.call(pair) !== '[object Object]') return false; + + keys = Object.keys(pair); + + if (keys.length !== 1) return false; + + result[index] = [ keys[0], pair[keys[0]] ]; + } + + return true; + } + + function constructYamlPairs(data) { + if (data === null) return []; + + var index, length, pair, keys, result, + object = data; + + result = new Array(object.length); + + for (index = 0, length = object.length; index < length; index += 1) { + pair = object[index]; + + keys = Object.keys(pair); + + result[index] = [ keys[0], pair[keys[0]] ]; + } + + return result; + } + + var pairs = new type('tag:yaml.org,2002:pairs', { + kind: 'sequence', + resolve: resolveYamlPairs, + construct: constructYamlPairs + }); + + var _hasOwnProperty$2 = Object.prototype.hasOwnProperty; + + function resolveYamlSet(data) { + if (data === null) return true; + + var key, object = data; + + for (key in object) { + if (_hasOwnProperty$2.call(object, key)) { + if (object[key] !== null) return false; + } + } + + return true; + } + + function constructYamlSet(data) { + return data !== null ? data : {}; + } + + var set = new type('tag:yaml.org,2002:set', { + kind: 'mapping', + resolve: resolveYamlSet, + construct: constructYamlSet + }); + + var _default = core.extend({ + implicit: [ + timestamp, + merge + ], + explicit: [ + binary, + omap, + pairs, + set + ] + }); + + /*eslint-disable max-len,no-use-before-define*/ + + + + + + + + var _hasOwnProperty$1 = Object.prototype.hasOwnProperty; + + + var CONTEXT_FLOW_IN = 1; + var CONTEXT_FLOW_OUT = 2; + var CONTEXT_BLOCK_IN = 3; + var CONTEXT_BLOCK_OUT = 4; + + + var CHOMPING_CLIP = 1; + var CHOMPING_STRIP = 2; + var CHOMPING_KEEP = 3; + + + var PATTERN_NON_PRINTABLE = /[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; + var PATTERN_NON_ASCII_LINE_BREAKS = /[\x85\u2028\u2029]/; + var PATTERN_FLOW_INDICATORS = /[,\[\]\{\}]/; + var PATTERN_TAG_HANDLE = /^(?:!|!!|![a-z\-]+!)$/i; + var PATTERN_TAG_URI = /^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i; + + + function _class(obj) { return Object.prototype.toString.call(obj); } + + function is_EOL(c) { + return (c === 0x0A/* LF */) || (c === 0x0D/* CR */); + } + + function is_WHITE_SPACE(c) { + return (c === 0x09/* Tab */) || (c === 0x20/* Space */); + } + + function is_WS_OR_EOL(c) { + return (c === 0x09/* Tab */) || + (c === 0x20/* Space */) || + (c === 0x0A/* LF */) || + (c === 0x0D/* CR */); + } + + function is_FLOW_INDICATOR(c) { + return c === 0x2C/* , */ || + c === 0x5B/* [ */ || + c === 0x5D/* ] */ || + c === 0x7B/* { */ || + c === 0x7D/* } */; + } + + function fromHexCode(c) { + var lc; + + if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) { + return c - 0x30; + } + + /*eslint-disable no-bitwise*/ + lc = c | 0x20; + + if ((0x61/* a */ <= lc) && (lc <= 0x66/* f */)) { + return lc - 0x61 + 10; + } + + return -1; + } + + function escapedHexLen(c) { + if (c === 0x78/* x */) { return 2; } + if (c === 0x75/* u */) { return 4; } + if (c === 0x55/* U */) { return 8; } + return 0; + } + + function fromDecimalCode(c) { + if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) { + return c - 0x30; + } + + return -1; + } + + function simpleEscapeSequence(c) { + /* eslint-disable indent */ + return (c === 0x30/* 0 */) ? '\x00' : + (c === 0x61/* a */) ? '\x07' : + (c === 0x62/* b */) ? '\x08' : + (c === 0x74/* t */) ? '\x09' : + (c === 0x09/* Tab */) ? '\x09' : + (c === 0x6E/* n */) ? '\x0A' : + (c === 0x76/* v */) ? '\x0B' : + (c === 0x66/* f */) ? '\x0C' : + (c === 0x72/* r */) ? '\x0D' : + (c === 0x65/* e */) ? '\x1B' : + (c === 0x20/* Space */) ? ' ' : + (c === 0x22/* " */) ? '\x22' : + (c === 0x2F/* / */) ? '/' : + (c === 0x5C/* \ */) ? '\x5C' : + (c === 0x4E/* N */) ? '\x85' : + (c === 0x5F/* _ */) ? '\xA0' : + (c === 0x4C/* L */) ? '\u2028' : + (c === 0x50/* P */) ? '\u2029' : ''; + } + + function charFromCodepoint(c) { + if (c <= 0xFFFF) { + return String.fromCharCode(c); + } + // Encode UTF-16 surrogate pair + // https://en.wikipedia.org/wiki/UTF-16#Code_points_U.2B010000_to_U.2B10FFFF + return String.fromCharCode( + ((c - 0x010000) >> 10) + 0xD800, + ((c - 0x010000) & 0x03FF) + 0xDC00 + ); + } + + var simpleEscapeCheck = new Array(256); // integer, for fast access + var simpleEscapeMap = new Array(256); + for (var i = 0; i < 256; i++) { + simpleEscapeCheck[i] = simpleEscapeSequence(i) ? 1 : 0; + simpleEscapeMap[i] = simpleEscapeSequence(i); + } + + + function State$1(input, options) { + this.input = input; + + this.filename = options['filename'] || null; + this.schema = options['schema'] || _default; + this.onWarning = options['onWarning'] || null; + // (Hidden) Remove? makes the loader to expect YAML 1.1 documents + // if such documents have no explicit %YAML directive + this.legacy = options['legacy'] || false; + + this.json = options['json'] || false; + this.listener = options['listener'] || null; + + this.implicitTypes = this.schema.compiledImplicit; + this.typeMap = this.schema.compiledTypeMap; + + this.length = input.length; + this.position = 0; + this.line = 0; + this.lineStart = 0; + this.lineIndent = 0; + + // position of first leading tab in the current line, + // used to make sure there are no tabs in the indentation + this.firstTabInLine = -1; + + this.documents = []; + + /* + this.version; + this.checkLineBreaks; + this.tagMap; + this.anchorMap; + this.tag; + this.anchor; + this.kind; + this.result;*/ + + } + + + function generateError(state, message) { + var mark = { + name: state.filename, + buffer: state.input.slice(0, -1), // omit trailing \0 + position: state.position, + line: state.line, + column: state.position - state.lineStart + }; + + mark.snippet = snippet(mark); + + return new exception(message, mark); + } + + function throwError(state, message) { + throw generateError(state, message); + } + + function throwWarning(state, message) { + if (state.onWarning) { + state.onWarning.call(null, generateError(state, message)); + } + } + + + var directiveHandlers = { + + YAML: function handleYamlDirective(state, name, args) { + + var match, major, minor; + + if (state.version !== null) { + throwError(state, 'duplication of %YAML directive'); + } + + if (args.length !== 1) { + throwError(state, 'YAML directive accepts exactly one argument'); + } + + match = /^([0-9]+)\.([0-9]+)$/.exec(args[0]); + + if (match === null) { + throwError(state, 'ill-formed argument of the YAML directive'); + } + + major = parseInt(match[1], 10); + minor = parseInt(match[2], 10); + + if (major !== 1) { + throwError(state, 'unacceptable YAML version of the document'); + } + + state.version = args[0]; + state.checkLineBreaks = (minor < 2); + + if (minor !== 1 && minor !== 2) { + throwWarning(state, 'unsupported YAML version of the document'); + } + }, + + TAG: function handleTagDirective(state, name, args) { + + var handle, prefix; + + if (args.length !== 2) { + throwError(state, 'TAG directive accepts exactly two arguments'); + } + + handle = args[0]; + prefix = args[1]; + + if (!PATTERN_TAG_HANDLE.test(handle)) { + throwError(state, 'ill-formed tag handle (first argument) of the TAG directive'); + } + + if (_hasOwnProperty$1.call(state.tagMap, handle)) { + throwError(state, 'there is a previously declared suffix for "' + handle + '" tag handle'); + } + + if (!PATTERN_TAG_URI.test(prefix)) { + throwError(state, 'ill-formed tag prefix (second argument) of the TAG directive'); + } + + try { + prefix = decodeURIComponent(prefix); + } catch (err) { + throwError(state, 'tag prefix is malformed: ' + prefix); + } + + state.tagMap[handle] = prefix; + } + }; + + + function captureSegment(state, start, end, checkJson) { + var _position, _length, _character, _result; + + if (start < end) { + _result = state.input.slice(start, end); + + if (checkJson) { + for (_position = 0, _length = _result.length; _position < _length; _position += 1) { + _character = _result.charCodeAt(_position); + if (!(_character === 0x09 || + (0x20 <= _character && _character <= 0x10FFFF))) { + throwError(state, 'expected valid JSON character'); + } + } + } else if (PATTERN_NON_PRINTABLE.test(_result)) { + throwError(state, 'the stream contains non-printable characters'); + } + + state.result += _result; + } + } + + function mergeMappings(state, destination, source, overridableKeys) { + var sourceKeys, key, index, quantity; + + if (!common.isObject(source)) { + throwError(state, 'cannot merge mappings; the provided source object is unacceptable'); + } + + sourceKeys = Object.keys(source); + + for (index = 0, quantity = sourceKeys.length; index < quantity; index += 1) { + key = sourceKeys[index]; + + if (!_hasOwnProperty$1.call(destination, key)) { + destination[key] = source[key]; + overridableKeys[key] = true; + } + } + } + + function storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, + startLine, startLineStart, startPos) { + + var index, quantity; + + // The output is a plain object here, so keys can only be strings. + // We need to convert keyNode to a string, but doing so can hang the process + // (deeply nested arrays that explode exponentially using aliases). + if (Array.isArray(keyNode)) { + keyNode = Array.prototype.slice.call(keyNode); + + for (index = 0, quantity = keyNode.length; index < quantity; index += 1) { + if (Array.isArray(keyNode[index])) { + throwError(state, 'nested arrays are not supported inside keys'); + } + + if (typeof keyNode === 'object' && _class(keyNode[index]) === '[object Object]') { + keyNode[index] = '[object Object]'; + } + } + } + + // Avoid code execution in load() via toString property + // (still use its own toString for arrays, timestamps, + // and whatever user schema extensions happen to have @@toStringTag) + if (typeof keyNode === 'object' && _class(keyNode) === '[object Object]') { + keyNode = '[object Object]'; + } + + + keyNode = String(keyNode); + + if (_result === null) { + _result = {}; + } + + if (keyTag === 'tag:yaml.org,2002:merge') { + if (Array.isArray(valueNode)) { + for (index = 0, quantity = valueNode.length; index < quantity; index += 1) { + mergeMappings(state, _result, valueNode[index], overridableKeys); + } + } else { + mergeMappings(state, _result, valueNode, overridableKeys); + } + } else { + if (!state.json && + !_hasOwnProperty$1.call(overridableKeys, keyNode) && + _hasOwnProperty$1.call(_result, keyNode)) { + state.line = startLine || state.line; + state.lineStart = startLineStart || state.lineStart; + state.position = startPos || state.position; + throwError(state, 'duplicated mapping key'); + } + + // used for this specific key only because Object.defineProperty is slow + if (keyNode === '__proto__') { + Object.defineProperty(_result, keyNode, { + configurable: true, + enumerable: true, + writable: true, + value: valueNode + }); + } else { + _result[keyNode] = valueNode; + } + delete overridableKeys[keyNode]; + } + + return _result; + } + + function readLineBreak(state) { + var ch; + + ch = state.input.charCodeAt(state.position); + + if (ch === 0x0A/* LF */) { + state.position++; + } else if (ch === 0x0D/* CR */) { + state.position++; + if (state.input.charCodeAt(state.position) === 0x0A/* LF */) { + state.position++; + } + } else { + throwError(state, 'a line break is expected'); + } + + state.line += 1; + state.lineStart = state.position; + state.firstTabInLine = -1; + } + + function skipSeparationSpace(state, allowComments, checkIndent) { + var lineBreaks = 0, + ch = state.input.charCodeAt(state.position); + + while (ch !== 0) { + while (is_WHITE_SPACE(ch)) { + if (ch === 0x09/* Tab */ && state.firstTabInLine === -1) { + state.firstTabInLine = state.position; + } + ch = state.input.charCodeAt(++state.position); + } + + if (allowComments && ch === 0x23/* # */) { + do { + ch = state.input.charCodeAt(++state.position); + } while (ch !== 0x0A/* LF */ && ch !== 0x0D/* CR */ && ch !== 0); + } + + if (is_EOL(ch)) { + readLineBreak(state); + + ch = state.input.charCodeAt(state.position); + lineBreaks++; + state.lineIndent = 0; + + while (ch === 0x20/* Space */) { + state.lineIndent++; + ch = state.input.charCodeAt(++state.position); + } + } else { + break; + } + } + + if (checkIndent !== -1 && lineBreaks !== 0 && state.lineIndent < checkIndent) { + throwWarning(state, 'deficient indentation'); + } + + return lineBreaks; + } + + function testDocumentSeparator(state) { + var _position = state.position, + ch; + + ch = state.input.charCodeAt(_position); + + // Condition state.position === state.lineStart is tested + // in parent on each call, for efficiency. No needs to test here again. + if ((ch === 0x2D/* - */ || ch === 0x2E/* . */) && + ch === state.input.charCodeAt(_position + 1) && + ch === state.input.charCodeAt(_position + 2)) { + + _position += 3; + + ch = state.input.charCodeAt(_position); + + if (ch === 0 || is_WS_OR_EOL(ch)) { + return true; + } + } + + return false; + } + + function writeFoldedLines(state, count) { + if (count === 1) { + state.result += ' '; + } else if (count > 1) { + state.result += common.repeat('\n', count - 1); + } + } + + + function readPlainScalar(state, nodeIndent, withinFlowCollection) { + var preceding, + following, + captureStart, + captureEnd, + hasPendingContent, + _line, + _lineStart, + _lineIndent, + _kind = state.kind, + _result = state.result, + ch; + + ch = state.input.charCodeAt(state.position); + + if (is_WS_OR_EOL(ch) || + is_FLOW_INDICATOR(ch) || + ch === 0x23/* # */ || + ch === 0x26/* & */ || + ch === 0x2A/* * */ || + ch === 0x21/* ! */ || + ch === 0x7C/* | */ || + ch === 0x3E/* > */ || + ch === 0x27/* ' */ || + ch === 0x22/* " */ || + ch === 0x25/* % */ || + ch === 0x40/* @ */ || + ch === 0x60/* ` */) { + return false; + } + + if (ch === 0x3F/* ? */ || ch === 0x2D/* - */) { + following = state.input.charCodeAt(state.position + 1); + + if (is_WS_OR_EOL(following) || + withinFlowCollection && is_FLOW_INDICATOR(following)) { + return false; + } + } + + state.kind = 'scalar'; + state.result = ''; + captureStart = captureEnd = state.position; + hasPendingContent = false; + + while (ch !== 0) { + if (ch === 0x3A/* : */) { + following = state.input.charCodeAt(state.position + 1); + + if (is_WS_OR_EOL(following) || + withinFlowCollection && is_FLOW_INDICATOR(following)) { + break; + } + + } else if (ch === 0x23/* # */) { + preceding = state.input.charCodeAt(state.position - 1); + + if (is_WS_OR_EOL(preceding)) { + break; + } + + } else if ((state.position === state.lineStart && testDocumentSeparator(state)) || + withinFlowCollection && is_FLOW_INDICATOR(ch)) { + break; + + } else if (is_EOL(ch)) { + _line = state.line; + _lineStart = state.lineStart; + _lineIndent = state.lineIndent; + skipSeparationSpace(state, false, -1); + + if (state.lineIndent >= nodeIndent) { + hasPendingContent = true; + ch = state.input.charCodeAt(state.position); + continue; + } else { + state.position = captureEnd; + state.line = _line; + state.lineStart = _lineStart; + state.lineIndent = _lineIndent; + break; + } + } + + if (hasPendingContent) { + captureSegment(state, captureStart, captureEnd, false); + writeFoldedLines(state, state.line - _line); + captureStart = captureEnd = state.position; + hasPendingContent = false; + } + + if (!is_WHITE_SPACE(ch)) { + captureEnd = state.position + 1; + } + + ch = state.input.charCodeAt(++state.position); + } + + captureSegment(state, captureStart, captureEnd, false); + + if (state.result) { + return true; + } + + state.kind = _kind; + state.result = _result; + return false; + } + + function readSingleQuotedScalar(state, nodeIndent) { + var ch, + captureStart, captureEnd; + + ch = state.input.charCodeAt(state.position); + + if (ch !== 0x27/* ' */) { + return false; + } + + state.kind = 'scalar'; + state.result = ''; + state.position++; + captureStart = captureEnd = state.position; + + while ((ch = state.input.charCodeAt(state.position)) !== 0) { + if (ch === 0x27/* ' */) { + captureSegment(state, captureStart, state.position, true); + ch = state.input.charCodeAt(++state.position); + + if (ch === 0x27/* ' */) { + captureStart = state.position; + state.position++; + captureEnd = state.position; + } else { + return true; + } + + } else if (is_EOL(ch)) { + captureSegment(state, captureStart, captureEnd, true); + writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent)); + captureStart = captureEnd = state.position; + + } else if (state.position === state.lineStart && testDocumentSeparator(state)) { + throwError(state, 'unexpected end of the document within a single quoted scalar'); + + } else { + state.position++; + captureEnd = state.position; + } + } + + throwError(state, 'unexpected end of the stream within a single quoted scalar'); + } + + function readDoubleQuotedScalar(state, nodeIndent) { + var captureStart, + captureEnd, + hexLength, + hexResult, + tmp, + ch; + + ch = state.input.charCodeAt(state.position); + + if (ch !== 0x22/* " */) { + return false; + } + + state.kind = 'scalar'; + state.result = ''; + state.position++; + captureStart = captureEnd = state.position; + + while ((ch = state.input.charCodeAt(state.position)) !== 0) { + if (ch === 0x22/* " */) { + captureSegment(state, captureStart, state.position, true); + state.position++; + return true; + + } else if (ch === 0x5C/* \ */) { + captureSegment(state, captureStart, state.position, true); + ch = state.input.charCodeAt(++state.position); + + if (is_EOL(ch)) { + skipSeparationSpace(state, false, nodeIndent); + + // TODO: rework to inline fn with no type cast? + } else if (ch < 256 && simpleEscapeCheck[ch]) { + state.result += simpleEscapeMap[ch]; + state.position++; + + } else if ((tmp = escapedHexLen(ch)) > 0) { + hexLength = tmp; + hexResult = 0; + + for (; hexLength > 0; hexLength--) { + ch = state.input.charCodeAt(++state.position); + + if ((tmp = fromHexCode(ch)) >= 0) { + hexResult = (hexResult << 4) + tmp; + + } else { + throwError(state, 'expected hexadecimal character'); + } + } + + state.result += charFromCodepoint(hexResult); + + state.position++; + + } else { + throwError(state, 'unknown escape sequence'); + } + + captureStart = captureEnd = state.position; + + } else if (is_EOL(ch)) { + captureSegment(state, captureStart, captureEnd, true); + writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent)); + captureStart = captureEnd = state.position; + + } else if (state.position === state.lineStart && testDocumentSeparator(state)) { + throwError(state, 'unexpected end of the document within a double quoted scalar'); + + } else { + state.position++; + captureEnd = state.position; + } + } + + throwError(state, 'unexpected end of the stream within a double quoted scalar'); + } + + function readFlowCollection(state, nodeIndent) { + var readNext = true, + _line, + _lineStart, + _pos, + _tag = state.tag, + _result, + _anchor = state.anchor, + following, + terminator, + isPair, + isExplicitPair, + isMapping, + overridableKeys = Object.create(null), + keyNode, + keyTag, + valueNode, + ch; + + ch = state.input.charCodeAt(state.position); + + if (ch === 0x5B/* [ */) { + terminator = 0x5D;/* ] */ + isMapping = false; + _result = []; + } else if (ch === 0x7B/* { */) { + terminator = 0x7D;/* } */ + isMapping = true; + _result = {}; + } else { + return false; + } + + if (state.anchor !== null) { + state.anchorMap[state.anchor] = _result; + } + + ch = state.input.charCodeAt(++state.position); + + while (ch !== 0) { + skipSeparationSpace(state, true, nodeIndent); + + ch = state.input.charCodeAt(state.position); + + if (ch === terminator) { + state.position++; + state.tag = _tag; + state.anchor = _anchor; + state.kind = isMapping ? 'mapping' : 'sequence'; + state.result = _result; + return true; + } else if (!readNext) { + throwError(state, 'missed comma between flow collection entries'); + } else if (ch === 0x2C/* , */) { + // "flow collection entries can never be completely empty", as per YAML 1.2, section 7.4 + throwError(state, "expected the node content, but found ','"); + } + + keyTag = keyNode = valueNode = null; + isPair = isExplicitPair = false; + + if (ch === 0x3F/* ? */) { + following = state.input.charCodeAt(state.position + 1); + + if (is_WS_OR_EOL(following)) { + isPair = isExplicitPair = true; + state.position++; + skipSeparationSpace(state, true, nodeIndent); + } + } + + _line = state.line; // Save the current line. + _lineStart = state.lineStart; + _pos = state.position; + composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true); + keyTag = state.tag; + keyNode = state.result; + skipSeparationSpace(state, true, nodeIndent); + + ch = state.input.charCodeAt(state.position); + + if ((isExplicitPair || state.line === _line) && ch === 0x3A/* : */) { + isPair = true; + ch = state.input.charCodeAt(++state.position); + skipSeparationSpace(state, true, nodeIndent); + composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true); + valueNode = state.result; + } + + if (isMapping) { + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos); + } else if (isPair) { + _result.push(storeMappingPair(state, null, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos)); + } else { + _result.push(keyNode); + } + + skipSeparationSpace(state, true, nodeIndent); + + ch = state.input.charCodeAt(state.position); + + if (ch === 0x2C/* , */) { + readNext = true; + ch = state.input.charCodeAt(++state.position); + } else { + readNext = false; + } + } + + throwError(state, 'unexpected end of the stream within a flow collection'); + } + + function readBlockScalar(state, nodeIndent) { + var captureStart, + folding, + chomping = CHOMPING_CLIP, + didReadContent = false, + detectedIndent = false, + textIndent = nodeIndent, + emptyLines = 0, + atMoreIndented = false, + tmp, + ch; + + ch = state.input.charCodeAt(state.position); + + if (ch === 0x7C/* | */) { + folding = false; + } else if (ch === 0x3E/* > */) { + folding = true; + } else { + return false; + } + + state.kind = 'scalar'; + state.result = ''; + + while (ch !== 0) { + ch = state.input.charCodeAt(++state.position); + + if (ch === 0x2B/* + */ || ch === 0x2D/* - */) { + if (CHOMPING_CLIP === chomping) { + chomping = (ch === 0x2B/* + */) ? CHOMPING_KEEP : CHOMPING_STRIP; + } else { + throwError(state, 'repeat of a chomping mode identifier'); + } + + } else if ((tmp = fromDecimalCode(ch)) >= 0) { + if (tmp === 0) { + throwError(state, 'bad explicit indentation width of a block scalar; it cannot be less than one'); + } else if (!detectedIndent) { + textIndent = nodeIndent + tmp - 1; + detectedIndent = true; + } else { + throwError(state, 'repeat of an indentation width identifier'); + } + + } else { + break; + } + } + + if (is_WHITE_SPACE(ch)) { + do { ch = state.input.charCodeAt(++state.position); } + while (is_WHITE_SPACE(ch)); + + if (ch === 0x23/* # */) { + do { ch = state.input.charCodeAt(++state.position); } + while (!is_EOL(ch) && (ch !== 0)); + } + } + + while (ch !== 0) { + readLineBreak(state); + state.lineIndent = 0; + + ch = state.input.charCodeAt(state.position); + + while ((!detectedIndent || state.lineIndent < textIndent) && + (ch === 0x20/* Space */)) { + state.lineIndent++; + ch = state.input.charCodeAt(++state.position); + } + + if (!detectedIndent && state.lineIndent > textIndent) { + textIndent = state.lineIndent; + } + + if (is_EOL(ch)) { + emptyLines++; + continue; + } + + // End of the scalar. + if (state.lineIndent < textIndent) { + + // Perform the chomping. + if (chomping === CHOMPING_KEEP) { + state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); + } else if (chomping === CHOMPING_CLIP) { + if (didReadContent) { // i.e. only if the scalar is not empty. + state.result += '\n'; + } + } + + // Break this `while` cycle and go to the funciton's epilogue. + break; + } + + // Folded style: use fancy rules to handle line breaks. + if (folding) { + + // Lines starting with white space characters (more-indented lines) are not folded. + if (is_WHITE_SPACE(ch)) { + atMoreIndented = true; + // except for the first content line (cf. Example 8.1) + state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); + + // End of more-indented block. + } else if (atMoreIndented) { + atMoreIndented = false; + state.result += common.repeat('\n', emptyLines + 1); + + // Just one line break - perceive as the same line. + } else if (emptyLines === 0) { + if (didReadContent) { // i.e. only if we have already read some scalar content. + state.result += ' '; + } + + // Several line breaks - perceive as different lines. + } else { + state.result += common.repeat('\n', emptyLines); + } + + // Literal style: just add exact number of line breaks between content lines. + } else { + // Keep all line breaks except the header line break. + state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); + } + + didReadContent = true; + detectedIndent = true; + emptyLines = 0; + captureStart = state.position; + + while (!is_EOL(ch) && (ch !== 0)) { + ch = state.input.charCodeAt(++state.position); + } + + captureSegment(state, captureStart, state.position, false); + } + + return true; + } + + function readBlockSequence(state, nodeIndent) { + var _line, + _tag = state.tag, + _anchor = state.anchor, + _result = [], + following, + detected = false, + ch; + + // there is a leading tab before this token, so it can't be a block sequence/mapping; + // it can still be flow sequence/mapping or a scalar + if (state.firstTabInLine !== -1) return false; + + if (state.anchor !== null) { + state.anchorMap[state.anchor] = _result; + } + + ch = state.input.charCodeAt(state.position); + + while (ch !== 0) { + if (state.firstTabInLine !== -1) { + state.position = state.firstTabInLine; + throwError(state, 'tab characters must not be used in indentation'); + } + + if (ch !== 0x2D/* - */) { + break; + } + + following = state.input.charCodeAt(state.position + 1); + + if (!is_WS_OR_EOL(following)) { + break; + } + + detected = true; + state.position++; + + if (skipSeparationSpace(state, true, -1)) { + if (state.lineIndent <= nodeIndent) { + _result.push(null); + ch = state.input.charCodeAt(state.position); + continue; + } + } + + _line = state.line; + composeNode(state, nodeIndent, CONTEXT_BLOCK_IN, false, true); + _result.push(state.result); + skipSeparationSpace(state, true, -1); + + ch = state.input.charCodeAt(state.position); + + if ((state.line === _line || state.lineIndent > nodeIndent) && (ch !== 0)) { + throwError(state, 'bad indentation of a sequence entry'); + } else if (state.lineIndent < nodeIndent) { + break; + } + } + + if (detected) { + state.tag = _tag; + state.anchor = _anchor; + state.kind = 'sequence'; + state.result = _result; + return true; + } + return false; + } + + function readBlockMapping(state, nodeIndent, flowIndent) { + var following, + allowCompact, + _line, + _keyLine, + _keyLineStart, + _keyPos, + _tag = state.tag, + _anchor = state.anchor, + _result = {}, + overridableKeys = Object.create(null), + keyTag = null, + keyNode = null, + valueNode = null, + atExplicitKey = false, + detected = false, + ch; + + // there is a leading tab before this token, so it can't be a block sequence/mapping; + // it can still be flow sequence/mapping or a scalar + if (state.firstTabInLine !== -1) return false; + + if (state.anchor !== null) { + state.anchorMap[state.anchor] = _result; + } + + ch = state.input.charCodeAt(state.position); + + while (ch !== 0) { + if (!atExplicitKey && state.firstTabInLine !== -1) { + state.position = state.firstTabInLine; + throwError(state, 'tab characters must not be used in indentation'); + } + + following = state.input.charCodeAt(state.position + 1); + _line = state.line; // Save the current line. + + // + // Explicit notation case. There are two separate blocks: + // first for the key (denoted by "?") and second for the value (denoted by ":") + // + if ((ch === 0x3F/* ? */ || ch === 0x3A/* : */) && is_WS_OR_EOL(following)) { + + if (ch === 0x3F/* ? */) { + if (atExplicitKey) { + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos); + keyTag = keyNode = valueNode = null; + } + + detected = true; + atExplicitKey = true; + allowCompact = true; + + } else if (atExplicitKey) { + // i.e. 0x3A/* : */ === character after the explicit key. + atExplicitKey = false; + allowCompact = true; + + } else { + throwError(state, 'incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line'); + } + + state.position += 1; + ch = following; + + // + // Implicit notation case. Flow-style node as the key first, then ":", and the value. + // + } else { + _keyLine = state.line; + _keyLineStart = state.lineStart; + _keyPos = state.position; + + if (!composeNode(state, flowIndent, CONTEXT_FLOW_OUT, false, true)) { + // Neither implicit nor explicit notation. + // Reading is done. Go to the epilogue. + break; + } + + if (state.line === _line) { + ch = state.input.charCodeAt(state.position); + + while (is_WHITE_SPACE(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + if (ch === 0x3A/* : */) { + ch = state.input.charCodeAt(++state.position); + + if (!is_WS_OR_EOL(ch)) { + throwError(state, 'a whitespace character is expected after the key-value separator within a block mapping'); + } + + if (atExplicitKey) { + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos); + keyTag = keyNode = valueNode = null; + } + + detected = true; + atExplicitKey = false; + allowCompact = false; + keyTag = state.tag; + keyNode = state.result; + + } else if (detected) { + throwError(state, 'can not read an implicit mapping pair; a colon is missed'); + + } else { + state.tag = _tag; + state.anchor = _anchor; + return true; // Keep the result of `composeNode`. + } + + } else if (detected) { + throwError(state, 'can not read a block mapping entry; a multiline key may not be an implicit key'); + + } else { + state.tag = _tag; + state.anchor = _anchor; + return true; // Keep the result of `composeNode`. + } + } + + // + // Common reading code for both explicit and implicit notations. + // + if (state.line === _line || state.lineIndent > nodeIndent) { + if (atExplicitKey) { + _keyLine = state.line; + _keyLineStart = state.lineStart; + _keyPos = state.position; + } + + if (composeNode(state, nodeIndent, CONTEXT_BLOCK_OUT, true, allowCompact)) { + if (atExplicitKey) { + keyNode = state.result; + } else { + valueNode = state.result; + } + } + + if (!atExplicitKey) { + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _keyLine, _keyLineStart, _keyPos); + keyTag = keyNode = valueNode = null; + } + + skipSeparationSpace(state, true, -1); + ch = state.input.charCodeAt(state.position); + } + + if ((state.line === _line || state.lineIndent > nodeIndent) && (ch !== 0)) { + throwError(state, 'bad indentation of a mapping entry'); + } else if (state.lineIndent < nodeIndent) { + break; + } + } + + // + // Epilogue. + // + + // Special case: last mapping's node contains only the key in explicit notation. + if (atExplicitKey) { + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos); + } + + // Expose the resulting mapping. + if (detected) { + state.tag = _tag; + state.anchor = _anchor; + state.kind = 'mapping'; + state.result = _result; + } + + return detected; + } + + function readTagProperty(state) { + var _position, + isVerbatim = false, + isNamed = false, + tagHandle, + tagName, + ch; + + ch = state.input.charCodeAt(state.position); + + if (ch !== 0x21/* ! */) return false; + + if (state.tag !== null) { + throwError(state, 'duplication of a tag property'); + } + + ch = state.input.charCodeAt(++state.position); + + if (ch === 0x3C/* < */) { + isVerbatim = true; + ch = state.input.charCodeAt(++state.position); + + } else if (ch === 0x21/* ! */) { + isNamed = true; + tagHandle = '!!'; + ch = state.input.charCodeAt(++state.position); + + } else { + tagHandle = '!'; + } + + _position = state.position; + + if (isVerbatim) { + do { ch = state.input.charCodeAt(++state.position); } + while (ch !== 0 && ch !== 0x3E/* > */); + + if (state.position < state.length) { + tagName = state.input.slice(_position, state.position); + ch = state.input.charCodeAt(++state.position); + } else { + throwError(state, 'unexpected end of the stream within a verbatim tag'); + } + } else { + while (ch !== 0 && !is_WS_OR_EOL(ch)) { + + if (ch === 0x21/* ! */) { + if (!isNamed) { + tagHandle = state.input.slice(_position - 1, state.position + 1); + + if (!PATTERN_TAG_HANDLE.test(tagHandle)) { + throwError(state, 'named tag handle cannot contain such characters'); + } + + isNamed = true; + _position = state.position + 1; + } else { + throwError(state, 'tag suffix cannot contain exclamation marks'); + } + } + + ch = state.input.charCodeAt(++state.position); + } + + tagName = state.input.slice(_position, state.position); + + if (PATTERN_FLOW_INDICATORS.test(tagName)) { + throwError(state, 'tag suffix cannot contain flow indicator characters'); + } + } + + if (tagName && !PATTERN_TAG_URI.test(tagName)) { + throwError(state, 'tag name cannot contain such characters: ' + tagName); + } + + try { + tagName = decodeURIComponent(tagName); + } catch (err) { + throwError(state, 'tag name is malformed: ' + tagName); + } + + if (isVerbatim) { + state.tag = tagName; + + } else if (_hasOwnProperty$1.call(state.tagMap, tagHandle)) { + state.tag = state.tagMap[tagHandle] + tagName; + + } else if (tagHandle === '!') { + state.tag = '!' + tagName; + + } else if (tagHandle === '!!') { + state.tag = 'tag:yaml.org,2002:' + tagName; + + } else { + throwError(state, 'undeclared tag handle "' + tagHandle + '"'); + } + + return true; + } + + function readAnchorProperty(state) { + var _position, + ch; + + ch = state.input.charCodeAt(state.position); + + if (ch !== 0x26/* & */) return false; + + if (state.anchor !== null) { + throwError(state, 'duplication of an anchor property'); + } + + ch = state.input.charCodeAt(++state.position); + _position = state.position; + + while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + if (state.position === _position) { + throwError(state, 'name of an anchor node must contain at least one character'); + } + + state.anchor = state.input.slice(_position, state.position); + return true; + } + + function readAlias(state) { + var _position, alias, + ch; + + ch = state.input.charCodeAt(state.position); + + if (ch !== 0x2A/* * */) return false; + + ch = state.input.charCodeAt(++state.position); + _position = state.position; + + while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + if (state.position === _position) { + throwError(state, 'name of an alias node must contain at least one character'); + } + + alias = state.input.slice(_position, state.position); + + if (!_hasOwnProperty$1.call(state.anchorMap, alias)) { + throwError(state, 'unidentified alias "' + alias + '"'); + } + + state.result = state.anchorMap[alias]; + skipSeparationSpace(state, true, -1); + return true; + } + + function composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact) { + var allowBlockStyles, + allowBlockScalars, + allowBlockCollections, + indentStatus = 1, // 1: this>parent, 0: this=parent, -1: this parentIndent) { + indentStatus = 1; + } else if (state.lineIndent === parentIndent) { + indentStatus = 0; + } else if (state.lineIndent < parentIndent) { + indentStatus = -1; + } + } + } + + if (indentStatus === 1) { + while (readTagProperty(state) || readAnchorProperty(state)) { + if (skipSeparationSpace(state, true, -1)) { + atNewLine = true; + allowBlockCollections = allowBlockStyles; + + if (state.lineIndent > parentIndent) { + indentStatus = 1; + } else if (state.lineIndent === parentIndent) { + indentStatus = 0; + } else if (state.lineIndent < parentIndent) { + indentStatus = -1; + } + } else { + allowBlockCollections = false; + } + } + } + + if (allowBlockCollections) { + allowBlockCollections = atNewLine || allowCompact; + } + + if (indentStatus === 1 || CONTEXT_BLOCK_OUT === nodeContext) { + if (CONTEXT_FLOW_IN === nodeContext || CONTEXT_FLOW_OUT === nodeContext) { + flowIndent = parentIndent; + } else { + flowIndent = parentIndent + 1; + } + + blockIndent = state.position - state.lineStart; + + if (indentStatus === 1) { + if (allowBlockCollections && + (readBlockSequence(state, blockIndent) || + readBlockMapping(state, blockIndent, flowIndent)) || + readFlowCollection(state, flowIndent)) { + hasContent = true; + } else { + if ((allowBlockScalars && readBlockScalar(state, flowIndent)) || + readSingleQuotedScalar(state, flowIndent) || + readDoubleQuotedScalar(state, flowIndent)) { + hasContent = true; + + } else if (readAlias(state)) { + hasContent = true; + + if (state.tag !== null || state.anchor !== null) { + throwError(state, 'alias node should not have any properties'); + } + + } else if (readPlainScalar(state, flowIndent, CONTEXT_FLOW_IN === nodeContext)) { + hasContent = true; + + if (state.tag === null) { + state.tag = '?'; + } + } + + if (state.anchor !== null) { + state.anchorMap[state.anchor] = state.result; + } + } + } else if (indentStatus === 0) { + // Special case: block sequences are allowed to have same indentation level as the parent. + // http://www.yaml.org/spec/1.2/spec.html#id2799784 + hasContent = allowBlockCollections && readBlockSequence(state, blockIndent); + } + } + + if (state.tag === null) { + if (state.anchor !== null) { + state.anchorMap[state.anchor] = state.result; + } + + } else if (state.tag === '?') { + // Implicit resolving is not allowed for non-scalar types, and '?' + // non-specific tag is only automatically assigned to plain scalars. + // + // We only need to check kind conformity in case user explicitly assigns '?' + // tag, for example like this: "! [0]" + // + if (state.result !== null && state.kind !== 'scalar') { + throwError(state, 'unacceptable node kind for ! tag; it should be "scalar", not "' + state.kind + '"'); + } + + for (typeIndex = 0, typeQuantity = state.implicitTypes.length; typeIndex < typeQuantity; typeIndex += 1) { + type = state.implicitTypes[typeIndex]; + + if (type.resolve(state.result)) { // `state.result` updated in resolver if matched + state.result = type.construct(state.result); + state.tag = type.tag; + if (state.anchor !== null) { + state.anchorMap[state.anchor] = state.result; + } + break; + } + } + } else if (state.tag !== '!') { + if (_hasOwnProperty$1.call(state.typeMap[state.kind || 'fallback'], state.tag)) { + type = state.typeMap[state.kind || 'fallback'][state.tag]; + } else { + // looking for multi type + type = null; + typeList = state.typeMap.multi[state.kind || 'fallback']; + + for (typeIndex = 0, typeQuantity = typeList.length; typeIndex < typeQuantity; typeIndex += 1) { + if (state.tag.slice(0, typeList[typeIndex].tag.length) === typeList[typeIndex].tag) { + type = typeList[typeIndex]; + break; + } + } + } + + if (!type) { + throwError(state, 'unknown tag !<' + state.tag + '>'); + } + + if (state.result !== null && type.kind !== state.kind) { + throwError(state, 'unacceptable node kind for !<' + state.tag + '> tag; it should be "' + type.kind + '", not "' + state.kind + '"'); + } + + if (!type.resolve(state.result, state.tag)) { // `state.result` updated in resolver if matched + throwError(state, 'cannot resolve a node with !<' + state.tag + '> explicit tag'); + } else { + state.result = type.construct(state.result, state.tag); + if (state.anchor !== null) { + state.anchorMap[state.anchor] = state.result; + } + } + } + + if (state.listener !== null) { + state.listener('close', state); + } + return state.tag !== null || state.anchor !== null || hasContent; + } + + function readDocument(state) { + var documentStart = state.position, + _position, + directiveName, + directiveArgs, + hasDirectives = false, + ch; + + state.version = null; + state.checkLineBreaks = state.legacy; + state.tagMap = Object.create(null); + state.anchorMap = Object.create(null); + + while ((ch = state.input.charCodeAt(state.position)) !== 0) { + skipSeparationSpace(state, true, -1); + + ch = state.input.charCodeAt(state.position); + + if (state.lineIndent > 0 || ch !== 0x25/* % */) { + break; + } + + hasDirectives = true; + ch = state.input.charCodeAt(++state.position); + _position = state.position; + + while (ch !== 0 && !is_WS_OR_EOL(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + directiveName = state.input.slice(_position, state.position); + directiveArgs = []; + + if (directiveName.length < 1) { + throwError(state, 'directive name must not be less than one character in length'); + } + + while (ch !== 0) { + while (is_WHITE_SPACE(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + if (ch === 0x23/* # */) { + do { ch = state.input.charCodeAt(++state.position); } + while (ch !== 0 && !is_EOL(ch)); + break; + } + + if (is_EOL(ch)) break; + + _position = state.position; + + while (ch !== 0 && !is_WS_OR_EOL(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + directiveArgs.push(state.input.slice(_position, state.position)); + } + + if (ch !== 0) readLineBreak(state); + + if (_hasOwnProperty$1.call(directiveHandlers, directiveName)) { + directiveHandlers[directiveName](state, directiveName, directiveArgs); + } else { + throwWarning(state, 'unknown document directive "' + directiveName + '"'); + } + } + + skipSeparationSpace(state, true, -1); + + if (state.lineIndent === 0 && + state.input.charCodeAt(state.position) === 0x2D/* - */ && + state.input.charCodeAt(state.position + 1) === 0x2D/* - */ && + state.input.charCodeAt(state.position + 2) === 0x2D/* - */) { + state.position += 3; + skipSeparationSpace(state, true, -1); + + } else if (hasDirectives) { + throwError(state, 'directives end mark is expected'); + } + + composeNode(state, state.lineIndent - 1, CONTEXT_BLOCK_OUT, false, true); + skipSeparationSpace(state, true, -1); + + if (state.checkLineBreaks && + PATTERN_NON_ASCII_LINE_BREAKS.test(state.input.slice(documentStart, state.position))) { + throwWarning(state, 'non-ASCII line breaks are interpreted as content'); + } + + state.documents.push(state.result); + + if (state.position === state.lineStart && testDocumentSeparator(state)) { + + if (state.input.charCodeAt(state.position) === 0x2E/* . */) { + state.position += 3; + skipSeparationSpace(state, true, -1); + } + return; + } + + if (state.position < (state.length - 1)) { + throwError(state, 'end of the stream or a document separator is expected'); + } else { + return; + } + } + + + function loadDocuments(input, options) { + input = String(input); + options = options || {}; + + if (input.length !== 0) { + + // Add tailing `\n` if not exists + if (input.charCodeAt(input.length - 1) !== 0x0A/* LF */ && + input.charCodeAt(input.length - 1) !== 0x0D/* CR */) { + input += '\n'; + } + + // Strip BOM + if (input.charCodeAt(0) === 0xFEFF) { + input = input.slice(1); + } + } + + var state = new State$1(input, options); + + var nullpos = input.indexOf('\0'); + + if (nullpos !== -1) { + state.position = nullpos; + throwError(state, 'null byte is not allowed in input'); + } + + // Use 0 as string terminator. That significantly simplifies bounds check. + state.input += '\0'; + + while (state.input.charCodeAt(state.position) === 0x20/* Space */) { + state.lineIndent += 1; + state.position += 1; + } + + while (state.position < (state.length - 1)) { + readDocument(state); + } + + return state.documents; + } + + + function loadAll$1(input, iterator, options) { + if (iterator !== null && typeof iterator === 'object' && typeof options === 'undefined') { + options = iterator; + iterator = null; + } + + var documents = loadDocuments(input, options); + + if (typeof iterator !== 'function') { + return documents; + } + + for (var index = 0, length = documents.length; index < length; index += 1) { + iterator(documents[index]); + } + } + + + function load$1(input, options) { + var documents = loadDocuments(input, options); + + if (documents.length === 0) { + /*eslint-disable no-undefined*/ + return undefined; + } else if (documents.length === 1) { + return documents[0]; + } + throw new exception('expected a single document in the stream, but found more'); + } + + + var loadAll_1 = loadAll$1; + var load_1 = load$1; + + var loader = { + loadAll: loadAll_1, + load: load_1 + }; + + /*eslint-disable no-use-before-define*/ + + + + + + var _toString = Object.prototype.toString; + var _hasOwnProperty = Object.prototype.hasOwnProperty; + + var CHAR_BOM = 0xFEFF; + var CHAR_TAB = 0x09; /* Tab */ + var CHAR_LINE_FEED = 0x0A; /* LF */ + var CHAR_CARRIAGE_RETURN = 0x0D; /* CR */ + var CHAR_SPACE = 0x20; /* Space */ + var CHAR_EXCLAMATION = 0x21; /* ! */ + var CHAR_DOUBLE_QUOTE = 0x22; /* " */ + var CHAR_SHARP = 0x23; /* # */ + var CHAR_PERCENT = 0x25; /* % */ + var CHAR_AMPERSAND = 0x26; /* & */ + var CHAR_SINGLE_QUOTE = 0x27; /* ' */ + var CHAR_ASTERISK = 0x2A; /* * */ + var CHAR_COMMA = 0x2C; /* , */ + var CHAR_MINUS = 0x2D; /* - */ + var CHAR_COLON = 0x3A; /* : */ + var CHAR_EQUALS = 0x3D; /* = */ + var CHAR_GREATER_THAN = 0x3E; /* > */ + var CHAR_QUESTION = 0x3F; /* ? */ + var CHAR_COMMERCIAL_AT = 0x40; /* @ */ + var CHAR_LEFT_SQUARE_BRACKET = 0x5B; /* [ */ + var CHAR_RIGHT_SQUARE_BRACKET = 0x5D; /* ] */ + var CHAR_GRAVE_ACCENT = 0x60; /* ` */ + var CHAR_LEFT_CURLY_BRACKET = 0x7B; /* { */ + var CHAR_VERTICAL_LINE = 0x7C; /* | */ + var CHAR_RIGHT_CURLY_BRACKET = 0x7D; /* } */ + + var ESCAPE_SEQUENCES = {}; + + ESCAPE_SEQUENCES[0x00] = '\\0'; + ESCAPE_SEQUENCES[0x07] = '\\a'; + ESCAPE_SEQUENCES[0x08] = '\\b'; + ESCAPE_SEQUENCES[0x09] = '\\t'; + ESCAPE_SEQUENCES[0x0A] = '\\n'; + ESCAPE_SEQUENCES[0x0B] = '\\v'; + ESCAPE_SEQUENCES[0x0C] = '\\f'; + ESCAPE_SEQUENCES[0x0D] = '\\r'; + ESCAPE_SEQUENCES[0x1B] = '\\e'; + ESCAPE_SEQUENCES[0x22] = '\\"'; + ESCAPE_SEQUENCES[0x5C] = '\\\\'; + ESCAPE_SEQUENCES[0x85] = '\\N'; + ESCAPE_SEQUENCES[0xA0] = '\\_'; + ESCAPE_SEQUENCES[0x2028] = '\\L'; + ESCAPE_SEQUENCES[0x2029] = '\\P'; + + var DEPRECATED_BOOLEANS_SYNTAX = [ + 'y', 'Y', 'yes', 'Yes', 'YES', 'on', 'On', 'ON', + 'n', 'N', 'no', 'No', 'NO', 'off', 'Off', 'OFF' + ]; + + var DEPRECATED_BASE60_SYNTAX = /^[-+]?[0-9_]+(?::[0-9_]+)+(?:\.[0-9_]*)?$/; + + function compileStyleMap(schema, map) { + var result, keys, index, length, tag, style, type; + + if (map === null) return {}; + + result = {}; + keys = Object.keys(map); + + for (index = 0, length = keys.length; index < length; index += 1) { + tag = keys[index]; + style = String(map[tag]); + + if (tag.slice(0, 2) === '!!') { + tag = 'tag:yaml.org,2002:' + tag.slice(2); + } + type = schema.compiledTypeMap['fallback'][tag]; + + if (type && _hasOwnProperty.call(type.styleAliases, style)) { + style = type.styleAliases[style]; + } + + result[tag] = style; + } + + return result; + } + + function encodeHex(character) { + var string, handle, length; + + string = character.toString(16).toUpperCase(); + + if (character <= 0xFF) { + handle = 'x'; + length = 2; + } else if (character <= 0xFFFF) { + handle = 'u'; + length = 4; + } else if (character <= 0xFFFFFFFF) { + handle = 'U'; + length = 8; + } else { + throw new exception('code point within a string may not be greater than 0xFFFFFFFF'); + } + + return '\\' + handle + common.repeat('0', length - string.length) + string; + } + + + var QUOTING_TYPE_SINGLE = 1, + QUOTING_TYPE_DOUBLE = 2; + + function State(options) { + this.schema = options['schema'] || _default; + this.indent = Math.max(1, (options['indent'] || 2)); + this.noArrayIndent = options['noArrayIndent'] || false; + this.skipInvalid = options['skipInvalid'] || false; + this.flowLevel = (common.isNothing(options['flowLevel']) ? -1 : options['flowLevel']); + this.styleMap = compileStyleMap(this.schema, options['styles'] || null); + this.sortKeys = options['sortKeys'] || false; + this.lineWidth = options['lineWidth'] || 80; + this.noRefs = options['noRefs'] || false; + this.noCompatMode = options['noCompatMode'] || false; + this.condenseFlow = options['condenseFlow'] || false; + this.quotingType = options['quotingType'] === '"' ? QUOTING_TYPE_DOUBLE : QUOTING_TYPE_SINGLE; + this.forceQuotes = options['forceQuotes'] || false; + this.replacer = typeof options['replacer'] === 'function' ? options['replacer'] : null; + + this.implicitTypes = this.schema.compiledImplicit; + this.explicitTypes = this.schema.compiledExplicit; + + this.tag = null; + this.result = ''; + + this.duplicates = []; + this.usedDuplicates = null; + } + + // Indents every line in a string. Empty lines (\n only) are not indented. + function indentString(string, spaces) { + var ind = common.repeat(' ', spaces), + position = 0, + next = -1, + result = '', + line, + length = string.length; + + while (position < length) { + next = string.indexOf('\n', position); + if (next === -1) { + line = string.slice(position); + position = length; + } else { + line = string.slice(position, next + 1); + position = next + 1; + } + + if (line.length && line !== '\n') result += ind; + + result += line; + } + + return result; + } + + function generateNextLine(state, level) { + return '\n' + common.repeat(' ', state.indent * level); + } + + function testImplicitResolving(state, str) { + var index, length, type; + + for (index = 0, length = state.implicitTypes.length; index < length; index += 1) { + type = state.implicitTypes[index]; + + if (type.resolve(str)) { + return true; + } + } + + return false; + } + + // [33] s-white ::= s-space | s-tab + function isWhitespace(c) { + return c === CHAR_SPACE || c === CHAR_TAB; + } + + // Returns true if the character can be printed without escaping. + // From YAML 1.2: "any allowed characters known to be non-printable + // should also be escaped. [However,] This isn’t mandatory" + // Derived from nb-char - \t - #x85 - #xA0 - #x2028 - #x2029. + function isPrintable(c) { + return (0x00020 <= c && c <= 0x00007E) + || ((0x000A1 <= c && c <= 0x00D7FF) && c !== 0x2028 && c !== 0x2029) + || ((0x0E000 <= c && c <= 0x00FFFD) && c !== CHAR_BOM) + || (0x10000 <= c && c <= 0x10FFFF); + } + + // [34] ns-char ::= nb-char - s-white + // [27] nb-char ::= c-printable - b-char - c-byte-order-mark + // [26] b-char ::= b-line-feed | b-carriage-return + // Including s-white (for some reason, examples doesn't match specs in this aspect) + // ns-char ::= c-printable - b-line-feed - b-carriage-return - c-byte-order-mark + function isNsCharOrWhitespace(c) { + return isPrintable(c) + && c !== CHAR_BOM + // - b-char + && c !== CHAR_CARRIAGE_RETURN + && c !== CHAR_LINE_FEED; + } + + // [127] ns-plain-safe(c) ::= c = flow-out ⇒ ns-plain-safe-out + // c = flow-in ⇒ ns-plain-safe-in + // c = block-key ⇒ ns-plain-safe-out + // c = flow-key ⇒ ns-plain-safe-in + // [128] ns-plain-safe-out ::= ns-char + // [129] ns-plain-safe-in ::= ns-char - c-flow-indicator + // [130] ns-plain-char(c) ::= ( ns-plain-safe(c) - “:” - “#” ) + // | ( /* An ns-char preceding */ “#” ) + // | ( “:” /* Followed by an ns-plain-safe(c) */ ) + function isPlainSafe(c, prev, inblock) { + var cIsNsCharOrWhitespace = isNsCharOrWhitespace(c); + var cIsNsChar = cIsNsCharOrWhitespace && !isWhitespace(c); + return ( + // ns-plain-safe + inblock ? // c = flow-in + cIsNsCharOrWhitespace + : cIsNsCharOrWhitespace + // - c-flow-indicator + && c !== CHAR_COMMA + && c !== CHAR_LEFT_SQUARE_BRACKET + && c !== CHAR_RIGHT_SQUARE_BRACKET + && c !== CHAR_LEFT_CURLY_BRACKET + && c !== CHAR_RIGHT_CURLY_BRACKET + ) + // ns-plain-char + && c !== CHAR_SHARP // false on '#' + && !(prev === CHAR_COLON && !cIsNsChar) // false on ': ' + || (isNsCharOrWhitespace(prev) && !isWhitespace(prev) && c === CHAR_SHARP) // change to true on '[^ ]#' + || (prev === CHAR_COLON && cIsNsChar); // change to true on ':[^ ]' + } + + // Simplified test for values allowed as the first character in plain style. + function isPlainSafeFirst(c) { + // Uses a subset of ns-char - c-indicator + // where ns-char = nb-char - s-white. + // No support of ( ( “?” | “:” | “-” ) /* Followed by an ns-plain-safe(c)) */ ) part + return isPrintable(c) && c !== CHAR_BOM + && !isWhitespace(c) // - s-white + // - (c-indicator ::= + // “-” | “?” | “:” | “,” | “[” | “]” | “{” | “}” + && c !== CHAR_MINUS + && c !== CHAR_QUESTION + && c !== CHAR_COLON + && c !== CHAR_COMMA + && c !== CHAR_LEFT_SQUARE_BRACKET + && c !== CHAR_RIGHT_SQUARE_BRACKET + && c !== CHAR_LEFT_CURLY_BRACKET + && c !== CHAR_RIGHT_CURLY_BRACKET + // | “#” | “&” | “*” | “!” | “|” | “=” | “>” | “'” | “"” + && c !== CHAR_SHARP + && c !== CHAR_AMPERSAND + && c !== CHAR_ASTERISK + && c !== CHAR_EXCLAMATION + && c !== CHAR_VERTICAL_LINE + && c !== CHAR_EQUALS + && c !== CHAR_GREATER_THAN + && c !== CHAR_SINGLE_QUOTE + && c !== CHAR_DOUBLE_QUOTE + // | “%” | “@” | “`”) + && c !== CHAR_PERCENT + && c !== CHAR_COMMERCIAL_AT + && c !== CHAR_GRAVE_ACCENT; + } + + // Simplified test for values allowed as the last character in plain style. + function isPlainSafeLast(c) { + // just not whitespace or colon, it will be checked to be plain character later + return !isWhitespace(c) && c !== CHAR_COLON; + } + + // Same as 'string'.codePointAt(pos), but works in older browsers. + function codePointAt(string, pos) { + var first = string.charCodeAt(pos), second; + if (first >= 0xD800 && first <= 0xDBFF && pos + 1 < string.length) { + second = string.charCodeAt(pos + 1); + if (second >= 0xDC00 && second <= 0xDFFF) { + // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae + return (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000; + } + } + return first; + } + + // Determines whether block indentation indicator is required. + function needIndentIndicator(string) { + var leadingSpaceRe = /^\n* /; + return leadingSpaceRe.test(string); + } + + var STYLE_PLAIN = 1, + STYLE_SINGLE = 2, + STYLE_LITERAL = 3, + STYLE_FOLDED = 4, + STYLE_DOUBLE = 5; + + // Determines which scalar styles are possible and returns the preferred style. + // lineWidth = -1 => no limit. + // Pre-conditions: str.length > 0. + // Post-conditions: + // STYLE_PLAIN or STYLE_SINGLE => no \n are in the string. + // STYLE_LITERAL => no lines are suitable for folding (or lineWidth is -1). + // STYLE_FOLDED => a line > lineWidth and can be folded (and lineWidth != -1). + function chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineWidth, + testAmbiguousType, quotingType, forceQuotes, inblock) { + + var i; + var char = 0; + var prevChar = null; + var hasLineBreak = false; + var hasFoldableLine = false; // only checked if shouldTrackWidth + var shouldTrackWidth = lineWidth !== -1; + var previousLineBreak = -1; // count the first line correctly + var plain = isPlainSafeFirst(codePointAt(string, 0)) + && isPlainSafeLast(codePointAt(string, string.length - 1)); + + if (singleLineOnly || forceQuotes) { + // Case: no block styles. + // Check for disallowed characters to rule out plain and single. + for (i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) { + char = codePointAt(string, i); + if (!isPrintable(char)) { + return STYLE_DOUBLE; + } + plain = plain && isPlainSafe(char, prevChar, inblock); + prevChar = char; + } + } else { + // Case: block styles permitted. + for (i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) { + char = codePointAt(string, i); + if (char === CHAR_LINE_FEED) { + hasLineBreak = true; + // Check if any line can be folded. + if (shouldTrackWidth) { + hasFoldableLine = hasFoldableLine || + // Foldable line = too long, and not more-indented. + (i - previousLineBreak - 1 > lineWidth && + string[previousLineBreak + 1] !== ' '); + previousLineBreak = i; + } + } else if (!isPrintable(char)) { + return STYLE_DOUBLE; + } + plain = plain && isPlainSafe(char, prevChar, inblock); + prevChar = char; + } + // in case the end is missing a \n + hasFoldableLine = hasFoldableLine || (shouldTrackWidth && + (i - previousLineBreak - 1 > lineWidth && + string[previousLineBreak + 1] !== ' ')); + } + // Although every style can represent \n without escaping, prefer block styles + // for multiline, since they're more readable and they don't add empty lines. + // Also prefer folding a super-long line. + if (!hasLineBreak && !hasFoldableLine) { + // Strings interpretable as another type have to be quoted; + // e.g. the string 'true' vs. the boolean true. + if (plain && !forceQuotes && !testAmbiguousType(string)) { + return STYLE_PLAIN; + } + return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE; + } + // Edge case: block indentation indicator can only have one digit. + if (indentPerLevel > 9 && needIndentIndicator(string)) { + return STYLE_DOUBLE; + } + // At this point we know block styles are valid. + // Prefer literal style unless we want to fold. + if (!forceQuotes) { + return hasFoldableLine ? STYLE_FOLDED : STYLE_LITERAL; + } + return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE; + } + + // Note: line breaking/folding is implemented for only the folded style. + // NB. We drop the last trailing newline (if any) of a returned block scalar + // since the dumper adds its own newline. This always works: + // • No ending newline => unaffected; already using strip "-" chomping. + // • Ending newline => removed then restored. + // Importantly, this keeps the "+" chomp indicator from gaining an extra line. + function writeScalar(state, string, level, iskey, inblock) { + state.dump = (function () { + if (string.length === 0) { + return state.quotingType === QUOTING_TYPE_DOUBLE ? '""' : "''"; + } + if (!state.noCompatMode) { + if (DEPRECATED_BOOLEANS_SYNTAX.indexOf(string) !== -1 || DEPRECATED_BASE60_SYNTAX.test(string)) { + return state.quotingType === QUOTING_TYPE_DOUBLE ? ('"' + string + '"') : ("'" + string + "'"); + } + } + + var indent = state.indent * Math.max(1, level); // no 0-indent scalars + // As indentation gets deeper, let the width decrease monotonically + // to the lower bound min(state.lineWidth, 40). + // Note that this implies + // state.lineWidth ≤ 40 + state.indent: width is fixed at the lower bound. + // state.lineWidth > 40 + state.indent: width decreases until the lower bound. + // This behaves better than a constant minimum width which disallows narrower options, + // or an indent threshold which causes the width to suddenly increase. + var lineWidth = state.lineWidth === -1 + ? -1 : Math.max(Math.min(state.lineWidth, 40), state.lineWidth - indent); + + // Without knowing if keys are implicit/explicit, assume implicit for safety. + var singleLineOnly = iskey + // No block styles in flow mode. + || (state.flowLevel > -1 && level >= state.flowLevel); + function testAmbiguity(string) { + return testImplicitResolving(state, string); + } + + switch (chooseScalarStyle(string, singleLineOnly, state.indent, lineWidth, + testAmbiguity, state.quotingType, state.forceQuotes && !iskey, inblock)) { + + case STYLE_PLAIN: + return string; + case STYLE_SINGLE: + return "'" + string.replace(/'/g, "''") + "'"; + case STYLE_LITERAL: + return '|' + blockHeader(string, state.indent) + + dropEndingNewline(indentString(string, indent)); + case STYLE_FOLDED: + return '>' + blockHeader(string, state.indent) + + dropEndingNewline(indentString(foldString(string, lineWidth), indent)); + case STYLE_DOUBLE: + return '"' + escapeString(string) + '"'; + default: + throw new exception('impossible error: invalid scalar style'); + } + }()); + } + + // Pre-conditions: string is valid for a block scalar, 1 <= indentPerLevel <= 9. + function blockHeader(string, indentPerLevel) { + var indentIndicator = needIndentIndicator(string) ? String(indentPerLevel) : ''; + + // note the special case: the string '\n' counts as a "trailing" empty line. + var clip = string[string.length - 1] === '\n'; + var keep = clip && (string[string.length - 2] === '\n' || string === '\n'); + var chomp = keep ? '+' : (clip ? '' : '-'); + + return indentIndicator + chomp + '\n'; + } + + // (See the note for writeScalar.) + function dropEndingNewline(string) { + return string[string.length - 1] === '\n' ? string.slice(0, -1) : string; + } + + // Note: a long line without a suitable break point will exceed the width limit. + // Pre-conditions: every char in str isPrintable, str.length > 0, width > 0. + function foldString(string, width) { + // In folded style, $k$ consecutive newlines output as $k+1$ newlines— + // unless they're before or after a more-indented line, or at the very + // beginning or end, in which case $k$ maps to $k$. + // Therefore, parse each chunk as newline(s) followed by a content line. + var lineRe = /(\n+)([^\n]*)/g; + + // first line (possibly an empty line) + var result = (function () { + var nextLF = string.indexOf('\n'); + nextLF = nextLF !== -1 ? nextLF : string.length; + lineRe.lastIndex = nextLF; + return foldLine(string.slice(0, nextLF), width); + }()); + // If we haven't reached the first content line yet, don't add an extra \n. + var prevMoreIndented = string[0] === '\n' || string[0] === ' '; + var moreIndented; + + // rest of the lines + var match; + while ((match = lineRe.exec(string))) { + var prefix = match[1], line = match[2]; + moreIndented = (line[0] === ' '); + result += prefix + + (!prevMoreIndented && !moreIndented && line !== '' + ? '\n' : '') + + foldLine(line, width); + prevMoreIndented = moreIndented; + } + + return result; + } + + // Greedy line breaking. + // Picks the longest line under the limit each time, + // otherwise settles for the shortest line over the limit. + // NB. More-indented lines *cannot* be folded, as that would add an extra \n. + function foldLine(line, width) { + if (line === '' || line[0] === ' ') return line; + + // Since a more-indented line adds a \n, breaks can't be followed by a space. + var breakRe = / [^ ]/g; // note: the match index will always be <= length-2. + var match; + // start is an inclusive index. end, curr, and next are exclusive. + var start = 0, end, curr = 0, next = 0; + var result = ''; + + // Invariants: 0 <= start <= length-1. + // 0 <= curr <= next <= max(0, length-2). curr - start <= width. + // Inside the loop: + // A match implies length >= 2, so curr and next are <= length-2. + while ((match = breakRe.exec(line))) { + next = match.index; + // maintain invariant: curr - start <= width + if (next - start > width) { + end = (curr > start) ? curr : next; // derive end <= length-2 + result += '\n' + line.slice(start, end); + // skip the space that was output as \n + start = end + 1; // derive start <= length-1 + } + curr = next; + } + + // By the invariants, start <= length-1, so there is something left over. + // It is either the whole string or a part starting from non-whitespace. + result += '\n'; + // Insert a break if the remainder is too long and there is a break available. + if (line.length - start > width && curr > start) { + result += line.slice(start, curr) + '\n' + line.slice(curr + 1); + } else { + result += line.slice(start); + } + + return result.slice(1); // drop extra \n joiner + } + + // Escapes a double-quoted string. + function escapeString(string) { + var result = ''; + var char = 0; + var escapeSeq; + + for (var i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) { + char = codePointAt(string, i); + escapeSeq = ESCAPE_SEQUENCES[char]; + + if (!escapeSeq && isPrintable(char)) { + result += string[i]; + if (char >= 0x10000) result += string[i + 1]; + } else { + result += escapeSeq || encodeHex(char); + } + } + + return result; + } + + function writeFlowSequence(state, level, object) { + var _result = '', + _tag = state.tag, + index, + length, + value; + + for (index = 0, length = object.length; index < length; index += 1) { + value = object[index]; + + if (state.replacer) { + value = state.replacer.call(object, String(index), value); + } + + // Write only valid elements, put null instead of invalid elements. + if (writeNode(state, level, value, false, false) || + (typeof value === 'undefined' && + writeNode(state, level, null, false, false))) { + + if (_result !== '') _result += ',' + (!state.condenseFlow ? ' ' : ''); + _result += state.dump; + } + } + + state.tag = _tag; + state.dump = '[' + _result + ']'; + } + + function writeBlockSequence(state, level, object, compact) { + var _result = '', + _tag = state.tag, + index, + length, + value; + + for (index = 0, length = object.length; index < length; index += 1) { + value = object[index]; + + if (state.replacer) { + value = state.replacer.call(object, String(index), value); + } + + // Write only valid elements, put null instead of invalid elements. + if (writeNode(state, level + 1, value, true, true, false, true) || + (typeof value === 'undefined' && + writeNode(state, level + 1, null, true, true, false, true))) { + + if (!compact || _result !== '') { + _result += generateNextLine(state, level); + } + + if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { + _result += '-'; + } else { + _result += '- '; + } + + _result += state.dump; + } + } + + state.tag = _tag; + state.dump = _result || '[]'; // Empty sequence if no valid values. + } + + function writeFlowMapping(state, level, object) { + var _result = '', + _tag = state.tag, + objectKeyList = Object.keys(object), + index, + length, + objectKey, + objectValue, + pairBuffer; + + for (index = 0, length = objectKeyList.length; index < length; index += 1) { + + pairBuffer = ''; + if (_result !== '') pairBuffer += ', '; + + if (state.condenseFlow) pairBuffer += '"'; + + objectKey = objectKeyList[index]; + objectValue = object[objectKey]; + + if (state.replacer) { + objectValue = state.replacer.call(object, objectKey, objectValue); + } + + if (!writeNode(state, level, objectKey, false, false)) { + continue; // Skip this pair because of invalid key; + } + + if (state.dump.length > 1024) pairBuffer += '? '; + + pairBuffer += state.dump + (state.condenseFlow ? '"' : '') + ':' + (state.condenseFlow ? '' : ' '); + + if (!writeNode(state, level, objectValue, false, false)) { + continue; // Skip this pair because of invalid value. + } + + pairBuffer += state.dump; + + // Both key and value are valid. + _result += pairBuffer; + } + + state.tag = _tag; + state.dump = '{' + _result + '}'; + } + + function writeBlockMapping(state, level, object, compact) { + var _result = '', + _tag = state.tag, + objectKeyList = Object.keys(object), + index, + length, + objectKey, + objectValue, + explicitPair, + pairBuffer; + + // Allow sorting keys so that the output file is deterministic + if (state.sortKeys === true) { + // Default sorting + objectKeyList.sort(); + } else if (typeof state.sortKeys === 'function') { + // Custom sort function + objectKeyList.sort(state.sortKeys); + } else if (state.sortKeys) { + // Something is wrong + throw new exception('sortKeys must be a boolean or a function'); + } + + for (index = 0, length = objectKeyList.length; index < length; index += 1) { + pairBuffer = ''; + + if (!compact || _result !== '') { + pairBuffer += generateNextLine(state, level); + } + + objectKey = objectKeyList[index]; + objectValue = object[objectKey]; + + if (state.replacer) { + objectValue = state.replacer.call(object, objectKey, objectValue); + } + + if (!writeNode(state, level + 1, objectKey, true, true, true)) { + continue; // Skip this pair because of invalid key. + } + + explicitPair = (state.tag !== null && state.tag !== '?') || + (state.dump && state.dump.length > 1024); + + if (explicitPair) { + if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { + pairBuffer += '?'; + } else { + pairBuffer += '? '; + } + } + + pairBuffer += state.dump; + + if (explicitPair) { + pairBuffer += generateNextLine(state, level); + } + + if (!writeNode(state, level + 1, objectValue, true, explicitPair)) { + continue; // Skip this pair because of invalid value. + } + + if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { + pairBuffer += ':'; + } else { + pairBuffer += ': '; + } + + pairBuffer += state.dump; + + // Both key and value are valid. + _result += pairBuffer; + } + + state.tag = _tag; + state.dump = _result || '{}'; // Empty mapping if no valid pairs. + } + + function detectType(state, object, explicit) { + var _result, typeList, index, length, type, style; + + typeList = explicit ? state.explicitTypes : state.implicitTypes; + + for (index = 0, length = typeList.length; index < length; index += 1) { + type = typeList[index]; + + if ((type.instanceOf || type.predicate) && + (!type.instanceOf || ((typeof object === 'object') && (object instanceof type.instanceOf))) && + (!type.predicate || type.predicate(object))) { + + if (explicit) { + if (type.multi && type.representName) { + state.tag = type.representName(object); + } else { + state.tag = type.tag; + } + } else { + state.tag = '?'; + } + + if (type.represent) { + style = state.styleMap[type.tag] || type.defaultStyle; + + if (_toString.call(type.represent) === '[object Function]') { + _result = type.represent(object, style); + } else if (_hasOwnProperty.call(type.represent, style)) { + _result = type.represent[style](object, style); + } else { + throw new exception('!<' + type.tag + '> tag resolver accepts not "' + style + '" style'); + } + + state.dump = _result; + } + + return true; + } + } + + return false; + } + + // Serializes `object` and writes it to global `result`. + // Returns true on success, or false on invalid object. + // + function writeNode(state, level, object, block, compact, iskey, isblockseq) { + state.tag = null; + state.dump = object; + + if (!detectType(state, object, false)) { + detectType(state, object, true); + } + + var type = _toString.call(state.dump); + var inblock = block; + var tagStr; + + if (block) { + block = (state.flowLevel < 0 || state.flowLevel > level); + } + + var objectOrArray = type === '[object Object]' || type === '[object Array]', + duplicateIndex, + duplicate; + + if (objectOrArray) { + duplicateIndex = state.duplicates.indexOf(object); + duplicate = duplicateIndex !== -1; + } + + if ((state.tag !== null && state.tag !== '?') || duplicate || (state.indent !== 2 && level > 0)) { + compact = false; + } + + if (duplicate && state.usedDuplicates[duplicateIndex]) { + state.dump = '*ref_' + duplicateIndex; + } else { + if (objectOrArray && duplicate && !state.usedDuplicates[duplicateIndex]) { + state.usedDuplicates[duplicateIndex] = true; + } + if (type === '[object Object]') { + if (block && (Object.keys(state.dump).length !== 0)) { + writeBlockMapping(state, level, state.dump, compact); + if (duplicate) { + state.dump = '&ref_' + duplicateIndex + state.dump; + } + } else { + writeFlowMapping(state, level, state.dump); + if (duplicate) { + state.dump = '&ref_' + duplicateIndex + ' ' + state.dump; + } + } + } else if (type === '[object Array]') { + if (block && (state.dump.length !== 0)) { + if (state.noArrayIndent && !isblockseq && level > 0) { + writeBlockSequence(state, level - 1, state.dump, compact); + } else { + writeBlockSequence(state, level, state.dump, compact); + } + if (duplicate) { + state.dump = '&ref_' + duplicateIndex + state.dump; + } + } else { + writeFlowSequence(state, level, state.dump); + if (duplicate) { + state.dump = '&ref_' + duplicateIndex + ' ' + state.dump; + } + } + } else if (type === '[object String]') { + if (state.tag !== '?') { + writeScalar(state, state.dump, level, iskey, inblock); + } + } else if (type === '[object Undefined]') { + return false; + } else { + if (state.skipInvalid) return false; + throw new exception('unacceptable kind of an object to dump ' + type); + } + + if (state.tag !== null && state.tag !== '?') { + // Need to encode all characters except those allowed by the spec: + // + // [35] ns-dec-digit ::= [#x30-#x39] /* 0-9 */ + // [36] ns-hex-digit ::= ns-dec-digit + // | [#x41-#x46] /* A-F */ | [#x61-#x66] /* a-f */ + // [37] ns-ascii-letter ::= [#x41-#x5A] /* A-Z */ | [#x61-#x7A] /* a-z */ + // [38] ns-word-char ::= ns-dec-digit | ns-ascii-letter | “-” + // [39] ns-uri-char ::= “%” ns-hex-digit ns-hex-digit | ns-word-char | “#” + // | “;” | “/” | “?” | “:” | “@” | “&” | “=” | “+” | “$” | “,” + // | “_” | “.” | “!” | “~” | “*” | “'” | “(” | “)” | “[” | “]” + // + // Also need to encode '!' because it has special meaning (end of tag prefix). + // + tagStr = encodeURI( + state.tag[0] === '!' ? state.tag.slice(1) : state.tag + ).replace(/!/g, '%21'); + + if (state.tag[0] === '!') { + tagStr = '!' + tagStr; + } else if (tagStr.slice(0, 18) === 'tag:yaml.org,2002:') { + tagStr = '!!' + tagStr.slice(18); + } else { + tagStr = '!<' + tagStr + '>'; + } + + state.dump = tagStr + ' ' + state.dump; + } + } + + return true; + } + + function getDuplicateReferences(object, state) { + var objects = [], + duplicatesIndexes = [], + index, + length; + + inspectNode(object, objects, duplicatesIndexes); + + for (index = 0, length = duplicatesIndexes.length; index < length; index += 1) { + state.duplicates.push(objects[duplicatesIndexes[index]]); + } + state.usedDuplicates = new Array(length); + } + + function inspectNode(object, objects, duplicatesIndexes) { + var objectKeyList, + index, + length; + + if (object !== null && typeof object === 'object') { + index = objects.indexOf(object); + if (index !== -1) { + if (duplicatesIndexes.indexOf(index) === -1) { + duplicatesIndexes.push(index); + } + } else { + objects.push(object); + + if (Array.isArray(object)) { + for (index = 0, length = object.length; index < length; index += 1) { + inspectNode(object[index], objects, duplicatesIndexes); + } + } else { + objectKeyList = Object.keys(object); + + for (index = 0, length = objectKeyList.length; index < length; index += 1) { + inspectNode(object[objectKeyList[index]], objects, duplicatesIndexes); + } + } + } + } + } + + function dump$1(input, options) { + options = options || {}; + + var state = new State(options); + + if (!state.noRefs) getDuplicateReferences(input, state); + + var value = input; + + if (state.replacer) { + value = state.replacer.call({ '': value }, '', value); + } + + if (writeNode(state, 0, value, true, true)) return state.dump + '\n'; + + return ''; + } + + var dump_1 = dump$1; + + var dumper = { + dump: dump_1 + }; + + function renamed(from, to) { + return function () { + throw new Error('Function yaml.' + from + ' is removed in js-yaml 4. ' + + 'Use yaml.' + to + ' instead, which is now safe by default.'); + }; + } + + + var Type = type; + var Schema = schema; + var FAILSAFE_SCHEMA = failsafe; + var JSON_SCHEMA = json; + var CORE_SCHEMA = core; + var DEFAULT_SCHEMA = _default; + var load = loader.load; + var loadAll = loader.loadAll; + var dump = dumper.dump; + var YAMLException = exception; + + // Re-export all types in case user wants to create custom schema + var types = { + binary: binary, + float: float, + map: map, + null: _null, + pairs: pairs, + set: set, + timestamp: timestamp, + bool: bool, + int: int, + merge: merge, + omap: omap, + seq: seq, + str: str + }; + + // Removed functions from JS-YAML 3.0.x + var safeLoad = renamed('safeLoad', 'load'); + var safeLoadAll = renamed('safeLoadAll', 'loadAll'); + var safeDump = renamed('safeDump', 'dump'); + + var jsYaml = { + Type: Type, + Schema: Schema, + FAILSAFE_SCHEMA: FAILSAFE_SCHEMA, + JSON_SCHEMA: JSON_SCHEMA, + CORE_SCHEMA: CORE_SCHEMA, + DEFAULT_SCHEMA: DEFAULT_SCHEMA, + load: load, + loadAll: loadAll, + dump: dump, + YAMLException: YAMLException, + types: types, + safeLoad: safeLoad, + safeLoadAll: safeLoadAll, + safeDump: safeDump + }; + + exports.CORE_SCHEMA = CORE_SCHEMA; + exports.DEFAULT_SCHEMA = DEFAULT_SCHEMA; + exports.FAILSAFE_SCHEMA = FAILSAFE_SCHEMA; + exports.JSON_SCHEMA = JSON_SCHEMA; + exports.Schema = Schema; + exports.Type = Type; + exports.YAMLException = YAMLException; + exports.default = jsYaml; + exports.dump = dump; + exports.load = load; + exports.loadAll = loadAll; + exports.safeDump = safeDump; + exports.safeLoad = safeLoad; + exports.safeLoadAll = safeLoadAll; + exports.types = types; + + Object.defineProperty(exports, '__esModule', { value: true }); + +}))); diff --git a/node_modules/js-yaml/dist/js-yaml.min.js b/node_modules/js-yaml/dist/js-yaml.min.js new file mode 100644 index 00000000..bdd8eef5 --- /dev/null +++ b/node_modules/js-yaml/dist/js-yaml.min.js @@ -0,0 +1,2 @@ +/*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).jsyaml={})}(this,(function(e){"use strict";function t(e){return null==e}var n={isNothing:t,isObject:function(e){return"object"==typeof e&&null!==e},toArray:function(e){return Array.isArray(e)?e:t(e)?[]:[e]},repeat:function(e,t){var n,i="";for(n=0;nl&&(t=i-l+(o=" ... ").length),n-i>l&&(n=i+l-(a=" ...").length),{str:o+e.slice(t,n).replace(/\t/g,"→")+a,pos:i-t+o.length}}function l(e,t){return n.repeat(" ",t-e.length)+e}var c=function(e,t){if(t=Object.create(t||null),!e.buffer)return null;t.maxLength||(t.maxLength=79),"number"!=typeof t.indent&&(t.indent=1),"number"!=typeof t.linesBefore&&(t.linesBefore=3),"number"!=typeof t.linesAfter&&(t.linesAfter=2);for(var i,r=/\r?\n|\r|\0/g,o=[0],c=[],s=-1;i=r.exec(e.buffer);)c.push(i.index),o.push(i.index+i[0].length),e.position<=i.index&&s<0&&(s=o.length-2);s<0&&(s=o.length-1);var u,p,f="",d=Math.min(e.line+t.linesAfter,c.length).toString().length,h=t.maxLength-(t.indent+d+3);for(u=1;u<=t.linesBefore&&!(s-u<0);u++)p=a(e.buffer,o[s-u],c[s-u],e.position-(o[s]-o[s-u]),h),f=n.repeat(" ",t.indent)+l((e.line-u+1).toString(),d)+" | "+p.str+"\n"+f;for(p=a(e.buffer,o[s],c[s],e.position,h),f+=n.repeat(" ",t.indent)+l((e.line+1).toString(),d)+" | "+p.str+"\n",f+=n.repeat("-",t.indent+d+3+p.pos)+"^\n",u=1;u<=t.linesAfter&&!(s+u>=c.length);u++)p=a(e.buffer,o[s+u],c[s+u],e.position-(o[s]-o[s+u]),h),f+=n.repeat(" ",t.indent)+l((e.line+u+1).toString(),d)+" | "+p.str+"\n";return f.replace(/\n$/,"")},s=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],u=["scalar","sequence","mapping"];var p=function(e,t){if(t=t||{},Object.keys(t).forEach((function(t){if(-1===s.indexOf(t))throw new o('Unknown option "'+t+'" is met in definition of "'+e+'" YAML type.')})),this.options=t,this.tag=e,this.kind=t.kind||null,this.resolve=t.resolve||function(){return!0},this.construct=t.construct||function(e){return e},this.instanceOf=t.instanceOf||null,this.predicate=t.predicate||null,this.represent=t.represent||null,this.representName=t.representName||null,this.defaultStyle=t.defaultStyle||null,this.multi=t.multi||!1,this.styleAliases=function(e){var t={};return null!==e&&Object.keys(e).forEach((function(n){e[n].forEach((function(e){t[String(e)]=n}))})),t}(t.styleAliases||null),-1===u.indexOf(this.kind))throw new o('Unknown kind "'+this.kind+'" is specified for "'+e+'" YAML type.')};function f(e,t){var n=[];return e[t].forEach((function(e){var t=n.length;n.forEach((function(n,i){n.tag===e.tag&&n.kind===e.kind&&n.multi===e.multi&&(t=i)})),n[t]=e})),n}function d(e){return this.extend(e)}d.prototype.extend=function(e){var t=[],n=[];if(e instanceof p)n.push(e);else if(Array.isArray(e))n=n.concat(e);else{if(!e||!Array.isArray(e.implicit)&&!Array.isArray(e.explicit))throw new o("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");e.implicit&&(t=t.concat(e.implicit)),e.explicit&&(n=n.concat(e.explicit))}t.forEach((function(e){if(!(e instanceof p))throw new o("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(e.loadKind&&"scalar"!==e.loadKind)throw new o("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.");if(e.multi)throw new o("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")})),n.forEach((function(e){if(!(e instanceof p))throw new o("Specified list of YAML types (or a single Type object) contains a non-Type object.")}));var i=Object.create(d.prototype);return i.implicit=(this.implicit||[]).concat(t),i.explicit=(this.explicit||[]).concat(n),i.compiledImplicit=f(i,"implicit"),i.compiledExplicit=f(i,"explicit"),i.compiledTypeMap=function(){var e,t,n={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}};function i(e){e.multi?(n.multi[e.kind].push(e),n.multi.fallback.push(e)):n[e.kind][e.tag]=n.fallback[e.tag]=e}for(e=0,t=arguments.length;e=0?"0b"+e.toString(2):"-0b"+e.toString(2).slice(1)},octal:function(e){return e>=0?"0o"+e.toString(8):"-0o"+e.toString(8).slice(1)},decimal:function(e){return e.toString(10)},hexadecimal:function(e){return e>=0?"0x"+e.toString(16).toUpperCase():"-0x"+e.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),x=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");var I=/^[-+]?[0-9]+e/;var S=new p("tag:yaml.org,2002:float",{kind:"scalar",resolve:function(e){return null!==e&&!(!x.test(e)||"_"===e[e.length-1])},construct:function(e){var t,n;return n="-"===(t=e.replace(/_/g,"").toLowerCase())[0]?-1:1,"+-".indexOf(t[0])>=0&&(t=t.slice(1)),".inf"===t?1===n?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:".nan"===t?NaN:n*parseFloat(t,10)},predicate:function(e){return"[object Number]"===Object.prototype.toString.call(e)&&(e%1!=0||n.isNegativeZero(e))},represent:function(e,t){var i;if(isNaN(e))switch(t){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===e)switch(t){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===e)switch(t){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(n.isNegativeZero(e))return"-0.0";return i=e.toString(10),I.test(i)?i.replace("e",".e"):i},defaultStyle:"lowercase"}),O=b.extend({implicit:[A,v,C,S]}),j=O,T=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),N=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");var F=new p("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:function(e){return null!==e&&(null!==T.exec(e)||null!==N.exec(e))},construct:function(e){var t,n,i,r,o,a,l,c,s=0,u=null;if(null===(t=T.exec(e))&&(t=N.exec(e)),null===t)throw new Error("Date resolve error");if(n=+t[1],i=+t[2]-1,r=+t[3],!t[4])return new Date(Date.UTC(n,i,r));if(o=+t[4],a=+t[5],l=+t[6],t[7]){for(s=t[7].slice(0,3);s.length<3;)s+="0";s=+s}return t[9]&&(u=6e4*(60*+t[10]+ +(t[11]||0)),"-"===t[9]&&(u=-u)),c=new Date(Date.UTC(n,i,r,o,a,l,s)),u&&c.setTime(c.getTime()-u),c},instanceOf:Date,represent:function(e){return e.toISOString()}});var E=new p("tag:yaml.org,2002:merge",{kind:"scalar",resolve:function(e){return"<<"===e||null===e}}),M="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r";var L=new p("tag:yaml.org,2002:binary",{kind:"scalar",resolve:function(e){if(null===e)return!1;var t,n,i=0,r=e.length,o=M;for(n=0;n64)){if(t<0)return!1;i+=6}return i%8==0},construct:function(e){var t,n,i=e.replace(/[\r\n=]/g,""),r=i.length,o=M,a=0,l=[];for(t=0;t>16&255),l.push(a>>8&255),l.push(255&a)),a=a<<6|o.indexOf(i.charAt(t));return 0===(n=r%4*6)?(l.push(a>>16&255),l.push(a>>8&255),l.push(255&a)):18===n?(l.push(a>>10&255),l.push(a>>2&255)):12===n&&l.push(a>>4&255),new Uint8Array(l)},predicate:function(e){return"[object Uint8Array]"===Object.prototype.toString.call(e)},represent:function(e){var t,n,i="",r=0,o=e.length,a=M;for(t=0;t>18&63],i+=a[r>>12&63],i+=a[r>>6&63],i+=a[63&r]),r=(r<<8)+e[t];return 0===(n=o%3)?(i+=a[r>>18&63],i+=a[r>>12&63],i+=a[r>>6&63],i+=a[63&r]):2===n?(i+=a[r>>10&63],i+=a[r>>4&63],i+=a[r<<2&63],i+=a[64]):1===n&&(i+=a[r>>2&63],i+=a[r<<4&63],i+=a[64],i+=a[64]),i}}),_=Object.prototype.hasOwnProperty,D=Object.prototype.toString;var U=new p("tag:yaml.org,2002:omap",{kind:"sequence",resolve:function(e){if(null===e)return!0;var t,n,i,r,o,a=[],l=e;for(t=0,n=l.length;t>10),56320+(e-65536&1023))}for(var ie=new Array(256),re=new Array(256),oe=0;oe<256;oe++)ie[oe]=te(oe)?1:0,re[oe]=te(oe);function ae(e,t){this.input=e,this.filename=t.filename||null,this.schema=t.schema||K,this.onWarning=t.onWarning||null,this.legacy=t.legacy||!1,this.json=t.json||!1,this.listener=t.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=e.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function le(e,t){var n={name:e.filename,buffer:e.input.slice(0,-1),position:e.position,line:e.line,column:e.position-e.lineStart};return n.snippet=c(n),new o(t,n)}function ce(e,t){throw le(e,t)}function se(e,t){e.onWarning&&e.onWarning.call(null,le(e,t))}var ue={YAML:function(e,t,n){var i,r,o;null!==e.version&&ce(e,"duplication of %YAML directive"),1!==n.length&&ce(e,"YAML directive accepts exactly one argument"),null===(i=/^([0-9]+)\.([0-9]+)$/.exec(n[0]))&&ce(e,"ill-formed argument of the YAML directive"),r=parseInt(i[1],10),o=parseInt(i[2],10),1!==r&&ce(e,"unacceptable YAML version of the document"),e.version=n[0],e.checkLineBreaks=o<2,1!==o&&2!==o&&se(e,"unsupported YAML version of the document")},TAG:function(e,t,n){var i,r;2!==n.length&&ce(e,"TAG directive accepts exactly two arguments"),i=n[0],r=n[1],G.test(i)||ce(e,"ill-formed tag handle (first argument) of the TAG directive"),P.call(e.tagMap,i)&&ce(e,'there is a previously declared suffix for "'+i+'" tag handle'),V.test(r)||ce(e,"ill-formed tag prefix (second argument) of the TAG directive");try{r=decodeURIComponent(r)}catch(t){ce(e,"tag prefix is malformed: "+r)}e.tagMap[i]=r}};function pe(e,t,n,i){var r,o,a,l;if(t1&&(e.result+=n.repeat("\n",t-1))}function be(e,t){var n,i,r=e.tag,o=e.anchor,a=[],l=!1;if(-1!==e.firstTabInLine)return!1;for(null!==e.anchor&&(e.anchorMap[e.anchor]=a),i=e.input.charCodeAt(e.position);0!==i&&(-1!==e.firstTabInLine&&(e.position=e.firstTabInLine,ce(e,"tab characters must not be used in indentation")),45===i)&&z(e.input.charCodeAt(e.position+1));)if(l=!0,e.position++,ge(e,!0,-1)&&e.lineIndent<=t)a.push(null),i=e.input.charCodeAt(e.position);else if(n=e.line,we(e,t,3,!1,!0),a.push(e.result),ge(e,!0,-1),i=e.input.charCodeAt(e.position),(e.line===n||e.lineIndent>t)&&0!==i)ce(e,"bad indentation of a sequence entry");else if(e.lineIndentt?g=1:e.lineIndent===t?g=0:e.lineIndentt?g=1:e.lineIndent===t?g=0:e.lineIndentt)&&(y&&(a=e.line,l=e.lineStart,c=e.position),we(e,t,4,!0,r)&&(y?g=e.result:m=e.result),y||(de(e,f,d,h,g,m,a,l,c),h=g=m=null),ge(e,!0,-1),s=e.input.charCodeAt(e.position)),(e.line===o||e.lineIndent>t)&&0!==s)ce(e,"bad indentation of a mapping entry");else if(e.lineIndent=0))break;0===o?ce(e,"bad explicit indentation width of a block scalar; it cannot be less than one"):u?ce(e,"repeat of an indentation width identifier"):(p=t+o-1,u=!0)}if(Q(a)){do{a=e.input.charCodeAt(++e.position)}while(Q(a));if(35===a)do{a=e.input.charCodeAt(++e.position)}while(!J(a)&&0!==a)}for(;0!==a;){for(he(e),e.lineIndent=0,a=e.input.charCodeAt(e.position);(!u||e.lineIndentp&&(p=e.lineIndent),J(a))f++;else{if(e.lineIndent0){for(r=a,o=0;r>0;r--)(a=ee(l=e.input.charCodeAt(++e.position)))>=0?o=(o<<4)+a:ce(e,"expected hexadecimal character");e.result+=ne(o),e.position++}else ce(e,"unknown escape sequence");n=i=e.position}else J(l)?(pe(e,n,i,!0),ye(e,ge(e,!1,t)),n=i=e.position):e.position===e.lineStart&&me(e)?ce(e,"unexpected end of the document within a double quoted scalar"):(e.position++,i=e.position)}ce(e,"unexpected end of the stream within a double quoted scalar")}(e,d)?y=!0:!function(e){var t,n,i;if(42!==(i=e.input.charCodeAt(e.position)))return!1;for(i=e.input.charCodeAt(++e.position),t=e.position;0!==i&&!z(i)&&!X(i);)i=e.input.charCodeAt(++e.position);return e.position===t&&ce(e,"name of an alias node must contain at least one character"),n=e.input.slice(t,e.position),P.call(e.anchorMap,n)||ce(e,'unidentified alias "'+n+'"'),e.result=e.anchorMap[n],ge(e,!0,-1),!0}(e)?function(e,t,n){var i,r,o,a,l,c,s,u,p=e.kind,f=e.result;if(z(u=e.input.charCodeAt(e.position))||X(u)||35===u||38===u||42===u||33===u||124===u||62===u||39===u||34===u||37===u||64===u||96===u)return!1;if((63===u||45===u)&&(z(i=e.input.charCodeAt(e.position+1))||n&&X(i)))return!1;for(e.kind="scalar",e.result="",r=o=e.position,a=!1;0!==u;){if(58===u){if(z(i=e.input.charCodeAt(e.position+1))||n&&X(i))break}else if(35===u){if(z(e.input.charCodeAt(e.position-1)))break}else{if(e.position===e.lineStart&&me(e)||n&&X(u))break;if(J(u)){if(l=e.line,c=e.lineStart,s=e.lineIndent,ge(e,!1,-1),e.lineIndent>=t){a=!0,u=e.input.charCodeAt(e.position);continue}e.position=o,e.line=l,e.lineStart=c,e.lineIndent=s;break}}a&&(pe(e,r,o,!1),ye(e,e.line-l),r=o=e.position,a=!1),Q(u)||(o=e.position+1),u=e.input.charCodeAt(++e.position)}return pe(e,r,o,!1),!!e.result||(e.kind=p,e.result=f,!1)}(e,d,1===i)&&(y=!0,null===e.tag&&(e.tag="?")):(y=!0,null===e.tag&&null===e.anchor||ce(e,"alias node should not have any properties")),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):0===g&&(y=c&&be(e,h))),null===e.tag)null!==e.anchor&&(e.anchorMap[e.anchor]=e.result);else if("?"===e.tag){for(null!==e.result&&"scalar"!==e.kind&&ce(e,'unacceptable node kind for ! tag; it should be "scalar", not "'+e.kind+'"'),s=0,u=e.implicitTypes.length;s"),null!==e.result&&f.kind!==e.kind&&ce(e,"unacceptable node kind for !<"+e.tag+'> tag; it should be "'+f.kind+'", not "'+e.kind+'"'),f.resolve(e.result,e.tag)?(e.result=f.construct(e.result,e.tag),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):ce(e,"cannot resolve a node with !<"+e.tag+"> explicit tag")}return null!==e.listener&&e.listener("close",e),null!==e.tag||null!==e.anchor||y}function ke(e){var t,n,i,r,o=e.position,a=!1;for(e.version=null,e.checkLineBreaks=e.legacy,e.tagMap=Object.create(null),e.anchorMap=Object.create(null);0!==(r=e.input.charCodeAt(e.position))&&(ge(e,!0,-1),r=e.input.charCodeAt(e.position),!(e.lineIndent>0||37!==r));){for(a=!0,r=e.input.charCodeAt(++e.position),t=e.position;0!==r&&!z(r);)r=e.input.charCodeAt(++e.position);for(i=[],(n=e.input.slice(t,e.position)).length<1&&ce(e,"directive name must not be less than one character in length");0!==r;){for(;Q(r);)r=e.input.charCodeAt(++e.position);if(35===r){do{r=e.input.charCodeAt(++e.position)}while(0!==r&&!J(r));break}if(J(r))break;for(t=e.position;0!==r&&!z(r);)r=e.input.charCodeAt(++e.position);i.push(e.input.slice(t,e.position))}0!==r&&he(e),P.call(ue,n)?ue[n](e,n,i):se(e,'unknown document directive "'+n+'"')}ge(e,!0,-1),0===e.lineIndent&&45===e.input.charCodeAt(e.position)&&45===e.input.charCodeAt(e.position+1)&&45===e.input.charCodeAt(e.position+2)?(e.position+=3,ge(e,!0,-1)):a&&ce(e,"directives end mark is expected"),we(e,e.lineIndent-1,4,!1,!0),ge(e,!0,-1),e.checkLineBreaks&&H.test(e.input.slice(o,e.position))&&se(e,"non-ASCII line breaks are interpreted as content"),e.documents.push(e.result),e.position===e.lineStart&&me(e)?46===e.input.charCodeAt(e.position)&&(e.position+=3,ge(e,!0,-1)):e.position=55296&&i<=56319&&t+1=56320&&n<=57343?1024*(i-55296)+n-56320+65536:i}function Re(e){return/^\n* /.test(e)}function Be(e,t,n,i,r,o,a,l){var c,s,u=0,p=null,f=!1,d=!1,h=-1!==i,g=-1,m=De(s=Ye(e,0))&&s!==Oe&&!_e(s)&&45!==s&&63!==s&&58!==s&&44!==s&&91!==s&&93!==s&&123!==s&&125!==s&&35!==s&&38!==s&&42!==s&&33!==s&&124!==s&&61!==s&&62!==s&&39!==s&&34!==s&&37!==s&&64!==s&&96!==s&&function(e){return!_e(e)&&58!==e}(Ye(e,e.length-1));if(t||a)for(c=0;c=65536?c+=2:c++){if(!De(u=Ye(e,c)))return 5;m=m&&qe(u,p,l),p=u}else{for(c=0;c=65536?c+=2:c++){if(10===(u=Ye(e,c)))f=!0,h&&(d=d||c-g-1>i&&" "!==e[g+1],g=c);else if(!De(u))return 5;m=m&&qe(u,p,l),p=u}d=d||h&&c-g-1>i&&" "!==e[g+1]}return f||d?n>9&&Re(e)?5:a?2===o?5:2:d?4:3:!m||a||r(e)?2===o?5:2:1}function Ke(e,t,n,i,r){e.dump=function(){if(0===t.length)return 2===e.quotingType?'""':"''";if(!e.noCompatMode&&(-1!==Te.indexOf(t)||Ne.test(t)))return 2===e.quotingType?'"'+t+'"':"'"+t+"'";var a=e.indent*Math.max(1,n),l=-1===e.lineWidth?-1:Math.max(Math.min(e.lineWidth,40),e.lineWidth-a),c=i||e.flowLevel>-1&&n>=e.flowLevel;switch(Be(t,c,e.indent,l,(function(t){return function(e,t){var n,i;for(n=0,i=e.implicitTypes.length;n"+Pe(t,e.indent)+We(Me(function(e,t){var n,i,r=/(\n+)([^\n]*)/g,o=(l=e.indexOf("\n"),l=-1!==l?l:e.length,r.lastIndex=l,He(e.slice(0,l),t)),a="\n"===e[0]||" "===e[0];var l;for(;i=r.exec(e);){var c=i[1],s=i[2];n=" "===s[0],o+=c+(a||n||""===s?"":"\n")+He(s,t),a=n}return o}(t,l),a));case 5:return'"'+function(e){for(var t,n="",i=0,r=0;r=65536?r+=2:r++)i=Ye(e,r),!(t=je[i])&&De(i)?(n+=e[r],i>=65536&&(n+=e[r+1])):n+=t||Fe(i);return n}(t)+'"';default:throw new o("impossible error: invalid scalar style")}}()}function Pe(e,t){var n=Re(e)?String(t):"",i="\n"===e[e.length-1];return n+(i&&("\n"===e[e.length-2]||"\n"===e)?"+":i?"":"-")+"\n"}function We(e){return"\n"===e[e.length-1]?e.slice(0,-1):e}function He(e,t){if(""===e||" "===e[0])return e;for(var n,i,r=/ [^ ]/g,o=0,a=0,l=0,c="";n=r.exec(e);)(l=n.index)-o>t&&(i=a>o?a:l,c+="\n"+e.slice(o,i),o=i+1),a=l;return c+="\n",e.length-o>t&&a>o?c+=e.slice(o,a)+"\n"+e.slice(a+1):c+=e.slice(o),c.slice(1)}function $e(e,t,n,i){var r,o,a,l="",c=e.tag;for(r=0,o=n.length;r tag resolver accepts not "'+s+'" style');i=c.represent[s](t,s)}e.dump=i}return!0}return!1}function Ve(e,t,n,i,r,a,l){e.tag=null,e.dump=n,Ge(e,n,!1)||Ge(e,n,!0);var c,s=Ie.call(e.dump),u=i;i&&(i=e.flowLevel<0||e.flowLevel>t);var p,f,d="[object Object]"===s||"[object Array]"===s;if(d&&(f=-1!==(p=e.duplicates.indexOf(n))),(null!==e.tag&&"?"!==e.tag||f||2!==e.indent&&t>0)&&(r=!1),f&&e.usedDuplicates[p])e.dump="*ref_"+p;else{if(d&&f&&!e.usedDuplicates[p]&&(e.usedDuplicates[p]=!0),"[object Object]"===s)i&&0!==Object.keys(e.dump).length?(!function(e,t,n,i){var r,a,l,c,s,u,p="",f=e.tag,d=Object.keys(n);if(!0===e.sortKeys)d.sort();else if("function"==typeof e.sortKeys)d.sort(e.sortKeys);else if(e.sortKeys)throw new o("sortKeys must be a boolean or a function");for(r=0,a=d.length;r1024)&&(e.dump&&10===e.dump.charCodeAt(0)?u+="?":u+="? "),u+=e.dump,s&&(u+=Le(e,t)),Ve(e,t+1,c,!0,s)&&(e.dump&&10===e.dump.charCodeAt(0)?u+=":":u+=": ",p+=u+=e.dump));e.tag=f,e.dump=p||"{}"}(e,t,e.dump,r),f&&(e.dump="&ref_"+p+e.dump)):(!function(e,t,n){var i,r,o,a,l,c="",s=e.tag,u=Object.keys(n);for(i=0,r=u.length;i1024&&(l+="? "),l+=e.dump+(e.condenseFlow?'"':"")+":"+(e.condenseFlow?"":" "),Ve(e,t,a,!1,!1)&&(c+=l+=e.dump));e.tag=s,e.dump="{"+c+"}"}(e,t,e.dump),f&&(e.dump="&ref_"+p+" "+e.dump));else if("[object Array]"===s)i&&0!==e.dump.length?(e.noArrayIndent&&!l&&t>0?$e(e,t-1,e.dump,r):$e(e,t,e.dump,r),f&&(e.dump="&ref_"+p+e.dump)):(!function(e,t,n){var i,r,o,a="",l=e.tag;for(i=0,r=n.length;i",e.dump=c+" "+e.dump)}return!0}function Ze(e,t){var n,i,r=[],o=[];for(Je(e,r,o),n=0,i=o.length;n maxHalfLength) { + head = ' ... '; + lineStart = position - maxHalfLength + head.length; + } + + if (lineEnd - position > maxHalfLength) { + tail = ' ...'; + lineEnd = position + maxHalfLength - tail.length; + } + + return { + str: head + buffer.slice(lineStart, lineEnd).replace(/\t/g, '→') + tail, + pos: position - lineStart + head.length // relative position + }; +} + + +function padStart(string, max) { + return common.repeat(' ', max - string.length) + string; +} + + +function makeSnippet(mark, options) { + options = Object.create(options || null); + + if (!mark.buffer) return null; + + if (!options.maxLength) options.maxLength = 79; + if (typeof options.indent !== 'number') options.indent = 1; + if (typeof options.linesBefore !== 'number') options.linesBefore = 3; + if (typeof options.linesAfter !== 'number') options.linesAfter = 2; + + var re = /\r?\n|\r|\0/g; + var lineStarts = [ 0 ]; + var lineEnds = []; + var match; + var foundLineNo = -1; + + while ((match = re.exec(mark.buffer))) { + lineEnds.push(match.index); + lineStarts.push(match.index + match[0].length); + + if (mark.position <= match.index && foundLineNo < 0) { + foundLineNo = lineStarts.length - 2; + } + } + + if (foundLineNo < 0) foundLineNo = lineStarts.length - 1; + + var result = '', i, line; + var lineNoLength = Math.min(mark.line + options.linesAfter, lineEnds.length).toString().length; + var maxLineLength = options.maxLength - (options.indent + lineNoLength + 3); + + for (i = 1; i <= options.linesBefore; i++) { + if (foundLineNo - i < 0) break; + line = getLine( + mark.buffer, + lineStarts[foundLineNo - i], + lineEnds[foundLineNo - i], + mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo - i]), + maxLineLength + ); + result = common.repeat(' ', options.indent) + padStart((mark.line - i + 1).toString(), lineNoLength) + + ' | ' + line.str + '\n' + result; + } + + line = getLine(mark.buffer, lineStarts[foundLineNo], lineEnds[foundLineNo], mark.position, maxLineLength); + result += common.repeat(' ', options.indent) + padStart((mark.line + 1).toString(), lineNoLength) + + ' | ' + line.str + '\n'; + result += common.repeat('-', options.indent + lineNoLength + 3 + line.pos) + '^' + '\n'; + + for (i = 1; i <= options.linesAfter; i++) { + if (foundLineNo + i >= lineEnds.length) break; + line = getLine( + mark.buffer, + lineStarts[foundLineNo + i], + lineEnds[foundLineNo + i], + mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo + i]), + maxLineLength + ); + result += common.repeat(' ', options.indent) + padStart((mark.line + i + 1).toString(), lineNoLength) + + ' | ' + line.str + '\n'; + } + + return result.replace(/\n$/, ''); +} + + +var snippet = makeSnippet; + +var TYPE_CONSTRUCTOR_OPTIONS = [ + 'kind', + 'multi', + 'resolve', + 'construct', + 'instanceOf', + 'predicate', + 'represent', + 'representName', + 'defaultStyle', + 'styleAliases' +]; + +var YAML_NODE_KINDS = [ + 'scalar', + 'sequence', + 'mapping' +]; + +function compileStyleAliases(map) { + var result = {}; + + if (map !== null) { + Object.keys(map).forEach(function (style) { + map[style].forEach(function (alias) { + result[String(alias)] = style; + }); + }); + } + + return result; +} + +function Type$1(tag, options) { + options = options || {}; + + Object.keys(options).forEach(function (name) { + if (TYPE_CONSTRUCTOR_OPTIONS.indexOf(name) === -1) { + throw new exception('Unknown option "' + name + '" is met in definition of "' + tag + '" YAML type.'); + } + }); + + // TODO: Add tag format check. + this.options = options; // keep original options in case user wants to extend this type later + this.tag = tag; + this.kind = options['kind'] || null; + this.resolve = options['resolve'] || function () { return true; }; + this.construct = options['construct'] || function (data) { return data; }; + this.instanceOf = options['instanceOf'] || null; + this.predicate = options['predicate'] || null; + this.represent = options['represent'] || null; + this.representName = options['representName'] || null; + this.defaultStyle = options['defaultStyle'] || null; + this.multi = options['multi'] || false; + this.styleAliases = compileStyleAliases(options['styleAliases'] || null); + + if (YAML_NODE_KINDS.indexOf(this.kind) === -1) { + throw new exception('Unknown kind "' + this.kind + '" is specified for "' + tag + '" YAML type.'); + } +} + +var type = Type$1; + +/*eslint-disable max-len*/ + + + + + +function compileList(schema, name) { + var result = []; + + schema[name].forEach(function (currentType) { + var newIndex = result.length; + + result.forEach(function (previousType, previousIndex) { + if (previousType.tag === currentType.tag && + previousType.kind === currentType.kind && + previousType.multi === currentType.multi) { + + newIndex = previousIndex; + } + }); + + result[newIndex] = currentType; + }); + + return result; +} + + +function compileMap(/* lists... */) { + var result = { + scalar: {}, + sequence: {}, + mapping: {}, + fallback: {}, + multi: { + scalar: [], + sequence: [], + mapping: [], + fallback: [] + } + }, index, length; + + function collectType(type) { + if (type.multi) { + result.multi[type.kind].push(type); + result.multi['fallback'].push(type); + } else { + result[type.kind][type.tag] = result['fallback'][type.tag] = type; + } + } + + for (index = 0, length = arguments.length; index < length; index += 1) { + arguments[index].forEach(collectType); + } + return result; +} + + +function Schema$1(definition) { + return this.extend(definition); +} + + +Schema$1.prototype.extend = function extend(definition) { + var implicit = []; + var explicit = []; + + if (definition instanceof type) { + // Schema.extend(type) + explicit.push(definition); + + } else if (Array.isArray(definition)) { + // Schema.extend([ type1, type2, ... ]) + explicit = explicit.concat(definition); + + } else if (definition && (Array.isArray(definition.implicit) || Array.isArray(definition.explicit))) { + // Schema.extend({ explicit: [ type1, type2, ... ], implicit: [ type1, type2, ... ] }) + if (definition.implicit) implicit = implicit.concat(definition.implicit); + if (definition.explicit) explicit = explicit.concat(definition.explicit); + + } else { + throw new exception('Schema.extend argument should be a Type, [ Type ], ' + + 'or a schema definition ({ implicit: [...], explicit: [...] })'); + } + + implicit.forEach(function (type$1) { + if (!(type$1 instanceof type)) { + throw new exception('Specified list of YAML types (or a single Type object) contains a non-Type object.'); + } + + if (type$1.loadKind && type$1.loadKind !== 'scalar') { + throw new exception('There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.'); + } + + if (type$1.multi) { + throw new exception('There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.'); + } + }); + + explicit.forEach(function (type$1) { + if (!(type$1 instanceof type)) { + throw new exception('Specified list of YAML types (or a single Type object) contains a non-Type object.'); + } + }); + + var result = Object.create(Schema$1.prototype); + + result.implicit = (this.implicit || []).concat(implicit); + result.explicit = (this.explicit || []).concat(explicit); + + result.compiledImplicit = compileList(result, 'implicit'); + result.compiledExplicit = compileList(result, 'explicit'); + result.compiledTypeMap = compileMap(result.compiledImplicit, result.compiledExplicit); + + return result; +}; + + +var schema = Schema$1; + +var str = new type('tag:yaml.org,2002:str', { + kind: 'scalar', + construct: function (data) { return data !== null ? data : ''; } +}); + +var seq = new type('tag:yaml.org,2002:seq', { + kind: 'sequence', + construct: function (data) { return data !== null ? data : []; } +}); + +var map = new type('tag:yaml.org,2002:map', { + kind: 'mapping', + construct: function (data) { return data !== null ? data : {}; } +}); + +var failsafe = new schema({ + explicit: [ + str, + seq, + map + ] +}); + +function resolveYamlNull(data) { + if (data === null) return true; + + var max = data.length; + + return (max === 1 && data === '~') || + (max === 4 && (data === 'null' || data === 'Null' || data === 'NULL')); +} + +function constructYamlNull() { + return null; +} + +function isNull(object) { + return object === null; +} + +var _null = new type('tag:yaml.org,2002:null', { + kind: 'scalar', + resolve: resolveYamlNull, + construct: constructYamlNull, + predicate: isNull, + represent: { + canonical: function () { return '~'; }, + lowercase: function () { return 'null'; }, + uppercase: function () { return 'NULL'; }, + camelcase: function () { return 'Null'; }, + empty: function () { return ''; } + }, + defaultStyle: 'lowercase' +}); + +function resolveYamlBoolean(data) { + if (data === null) return false; + + var max = data.length; + + return (max === 4 && (data === 'true' || data === 'True' || data === 'TRUE')) || + (max === 5 && (data === 'false' || data === 'False' || data === 'FALSE')); +} + +function constructYamlBoolean(data) { + return data === 'true' || + data === 'True' || + data === 'TRUE'; +} + +function isBoolean(object) { + return Object.prototype.toString.call(object) === '[object Boolean]'; +} + +var bool = new type('tag:yaml.org,2002:bool', { + kind: 'scalar', + resolve: resolveYamlBoolean, + construct: constructYamlBoolean, + predicate: isBoolean, + represent: { + lowercase: function (object) { return object ? 'true' : 'false'; }, + uppercase: function (object) { return object ? 'TRUE' : 'FALSE'; }, + camelcase: function (object) { return object ? 'True' : 'False'; } + }, + defaultStyle: 'lowercase' +}); + +function isHexCode(c) { + return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) || + ((0x41/* A */ <= c) && (c <= 0x46/* F */)) || + ((0x61/* a */ <= c) && (c <= 0x66/* f */)); +} + +function isOctCode(c) { + return ((0x30/* 0 */ <= c) && (c <= 0x37/* 7 */)); +} + +function isDecCode(c) { + return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)); +} + +function resolveYamlInteger(data) { + if (data === null) return false; + + var max = data.length, + index = 0, + hasDigits = false, + ch; + + if (!max) return false; + + ch = data[index]; + + // sign + if (ch === '-' || ch === '+') { + ch = data[++index]; + } + + if (ch === '0') { + // 0 + if (index + 1 === max) return true; + ch = data[++index]; + + // base 2, base 8, base 16 + + if (ch === 'b') { + // base 2 + index++; + + for (; index < max; index++) { + ch = data[index]; + if (ch === '_') continue; + if (ch !== '0' && ch !== '1') return false; + hasDigits = true; + } + return hasDigits && ch !== '_'; + } + + + if (ch === 'x') { + // base 16 + index++; + + for (; index < max; index++) { + ch = data[index]; + if (ch === '_') continue; + if (!isHexCode(data.charCodeAt(index))) return false; + hasDigits = true; + } + return hasDigits && ch !== '_'; + } + + + if (ch === 'o') { + // base 8 + index++; + + for (; index < max; index++) { + ch = data[index]; + if (ch === '_') continue; + if (!isOctCode(data.charCodeAt(index))) return false; + hasDigits = true; + } + return hasDigits && ch !== '_'; + } + } + + // base 10 (except 0) + + // value should not start with `_`; + if (ch === '_') return false; + + for (; index < max; index++) { + ch = data[index]; + if (ch === '_') continue; + if (!isDecCode(data.charCodeAt(index))) { + return false; + } + hasDigits = true; + } + + // Should have digits and should not end with `_` + if (!hasDigits || ch === '_') return false; + + return true; +} + +function constructYamlInteger(data) { + var value = data, sign = 1, ch; + + if (value.indexOf('_') !== -1) { + value = value.replace(/_/g, ''); + } + + ch = value[0]; + + if (ch === '-' || ch === '+') { + if (ch === '-') sign = -1; + value = value.slice(1); + ch = value[0]; + } + + if (value === '0') return 0; + + if (ch === '0') { + if (value[1] === 'b') return sign * parseInt(value.slice(2), 2); + if (value[1] === 'x') return sign * parseInt(value.slice(2), 16); + if (value[1] === 'o') return sign * parseInt(value.slice(2), 8); + } + + return sign * parseInt(value, 10); +} + +function isInteger(object) { + return (Object.prototype.toString.call(object)) === '[object Number]' && + (object % 1 === 0 && !common.isNegativeZero(object)); +} + +var int = new type('tag:yaml.org,2002:int', { + kind: 'scalar', + resolve: resolveYamlInteger, + construct: constructYamlInteger, + predicate: isInteger, + represent: { + binary: function (obj) { return obj >= 0 ? '0b' + obj.toString(2) : '-0b' + obj.toString(2).slice(1); }, + octal: function (obj) { return obj >= 0 ? '0o' + obj.toString(8) : '-0o' + obj.toString(8).slice(1); }, + decimal: function (obj) { return obj.toString(10); }, + /* eslint-disable max-len */ + hexadecimal: function (obj) { return obj >= 0 ? '0x' + obj.toString(16).toUpperCase() : '-0x' + obj.toString(16).toUpperCase().slice(1); } + }, + defaultStyle: 'decimal', + styleAliases: { + binary: [ 2, 'bin' ], + octal: [ 8, 'oct' ], + decimal: [ 10, 'dec' ], + hexadecimal: [ 16, 'hex' ] + } +}); + +var YAML_FLOAT_PATTERN = new RegExp( + // 2.5e4, 2.5 and integers + '^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?' + + // .2e4, .2 + // special case, seems not from spec + '|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?' + + // .inf + '|[-+]?\\.(?:inf|Inf|INF)' + + // .nan + '|\\.(?:nan|NaN|NAN))$'); + +function resolveYamlFloat(data) { + if (data === null) return false; + + if (!YAML_FLOAT_PATTERN.test(data) || + // Quick hack to not allow integers end with `_` + // Probably should update regexp & check speed + data[data.length - 1] === '_') { + return false; + } + + return true; +} + +function constructYamlFloat(data) { + var value, sign; + + value = data.replace(/_/g, '').toLowerCase(); + sign = value[0] === '-' ? -1 : 1; + + if ('+-'.indexOf(value[0]) >= 0) { + value = value.slice(1); + } + + if (value === '.inf') { + return (sign === 1) ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY; + + } else if (value === '.nan') { + return NaN; + } + return sign * parseFloat(value, 10); +} + + +var SCIENTIFIC_WITHOUT_DOT = /^[-+]?[0-9]+e/; + +function representYamlFloat(object, style) { + var res; + + if (isNaN(object)) { + switch (style) { + case 'lowercase': return '.nan'; + case 'uppercase': return '.NAN'; + case 'camelcase': return '.NaN'; + } + } else if (Number.POSITIVE_INFINITY === object) { + switch (style) { + case 'lowercase': return '.inf'; + case 'uppercase': return '.INF'; + case 'camelcase': return '.Inf'; + } + } else if (Number.NEGATIVE_INFINITY === object) { + switch (style) { + case 'lowercase': return '-.inf'; + case 'uppercase': return '-.INF'; + case 'camelcase': return '-.Inf'; + } + } else if (common.isNegativeZero(object)) { + return '-0.0'; + } + + res = object.toString(10); + + // JS stringifier can build scientific format without dots: 5e-100, + // while YAML requres dot: 5.e-100. Fix it with simple hack + + return SCIENTIFIC_WITHOUT_DOT.test(res) ? res.replace('e', '.e') : res; +} + +function isFloat(object) { + return (Object.prototype.toString.call(object) === '[object Number]') && + (object % 1 !== 0 || common.isNegativeZero(object)); +} + +var float = new type('tag:yaml.org,2002:float', { + kind: 'scalar', + resolve: resolveYamlFloat, + construct: constructYamlFloat, + predicate: isFloat, + represent: representYamlFloat, + defaultStyle: 'lowercase' +}); + +var json = failsafe.extend({ + implicit: [ + _null, + bool, + int, + float + ] +}); + +var core = json; + +var YAML_DATE_REGEXP = new RegExp( + '^([0-9][0-9][0-9][0-9])' + // [1] year + '-([0-9][0-9])' + // [2] month + '-([0-9][0-9])$'); // [3] day + +var YAML_TIMESTAMP_REGEXP = new RegExp( + '^([0-9][0-9][0-9][0-9])' + // [1] year + '-([0-9][0-9]?)' + // [2] month + '-([0-9][0-9]?)' + // [3] day + '(?:[Tt]|[ \\t]+)' + // ... + '([0-9][0-9]?)' + // [4] hour + ':([0-9][0-9])' + // [5] minute + ':([0-9][0-9])' + // [6] second + '(?:\\.([0-9]*))?' + // [7] fraction + '(?:[ \\t]*(Z|([-+])([0-9][0-9]?)' + // [8] tz [9] tz_sign [10] tz_hour + '(?::([0-9][0-9]))?))?$'); // [11] tz_minute + +function resolveYamlTimestamp(data) { + if (data === null) return false; + if (YAML_DATE_REGEXP.exec(data) !== null) return true; + if (YAML_TIMESTAMP_REGEXP.exec(data) !== null) return true; + return false; +} + +function constructYamlTimestamp(data) { + var match, year, month, day, hour, minute, second, fraction = 0, + delta = null, tz_hour, tz_minute, date; + + match = YAML_DATE_REGEXP.exec(data); + if (match === null) match = YAML_TIMESTAMP_REGEXP.exec(data); + + if (match === null) throw new Error('Date resolve error'); + + // match: [1] year [2] month [3] day + + year = +(match[1]); + month = +(match[2]) - 1; // JS month starts with 0 + day = +(match[3]); + + if (!match[4]) { // no hour + return new Date(Date.UTC(year, month, day)); + } + + // match: [4] hour [5] minute [6] second [7] fraction + + hour = +(match[4]); + minute = +(match[5]); + second = +(match[6]); + + if (match[7]) { + fraction = match[7].slice(0, 3); + while (fraction.length < 3) { // milli-seconds + fraction += '0'; + } + fraction = +fraction; + } + + // match: [8] tz [9] tz_sign [10] tz_hour [11] tz_minute + + if (match[9]) { + tz_hour = +(match[10]); + tz_minute = +(match[11] || 0); + delta = (tz_hour * 60 + tz_minute) * 60000; // delta in mili-seconds + if (match[9] === '-') delta = -delta; + } + + date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction)); + + if (delta) date.setTime(date.getTime() - delta); + + return date; +} + +function representYamlTimestamp(object /*, style*/) { + return object.toISOString(); +} + +var timestamp = new type('tag:yaml.org,2002:timestamp', { + kind: 'scalar', + resolve: resolveYamlTimestamp, + construct: constructYamlTimestamp, + instanceOf: Date, + represent: representYamlTimestamp +}); + +function resolveYamlMerge(data) { + return data === '<<' || data === null; +} + +var merge = new type('tag:yaml.org,2002:merge', { + kind: 'scalar', + resolve: resolveYamlMerge +}); + +/*eslint-disable no-bitwise*/ + + + + + +// [ 64, 65, 66 ] -> [ padding, CR, LF ] +var BASE64_MAP = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r'; + + +function resolveYamlBinary(data) { + if (data === null) return false; + + var code, idx, bitlen = 0, max = data.length, map = BASE64_MAP; + + // Convert one by one. + for (idx = 0; idx < max; idx++) { + code = map.indexOf(data.charAt(idx)); + + // Skip CR/LF + if (code > 64) continue; + + // Fail on illegal characters + if (code < 0) return false; + + bitlen += 6; + } + + // If there are any bits left, source was corrupted + return (bitlen % 8) === 0; +} + +function constructYamlBinary(data) { + var idx, tailbits, + input = data.replace(/[\r\n=]/g, ''), // remove CR/LF & padding to simplify scan + max = input.length, + map = BASE64_MAP, + bits = 0, + result = []; + + // Collect by 6*4 bits (3 bytes) + + for (idx = 0; idx < max; idx++) { + if ((idx % 4 === 0) && idx) { + result.push((bits >> 16) & 0xFF); + result.push((bits >> 8) & 0xFF); + result.push(bits & 0xFF); + } + + bits = (bits << 6) | map.indexOf(input.charAt(idx)); + } + + // Dump tail + + tailbits = (max % 4) * 6; + + if (tailbits === 0) { + result.push((bits >> 16) & 0xFF); + result.push((bits >> 8) & 0xFF); + result.push(bits & 0xFF); + } else if (tailbits === 18) { + result.push((bits >> 10) & 0xFF); + result.push((bits >> 2) & 0xFF); + } else if (tailbits === 12) { + result.push((bits >> 4) & 0xFF); + } + + return new Uint8Array(result); +} + +function representYamlBinary(object /*, style*/) { + var result = '', bits = 0, idx, tail, + max = object.length, + map = BASE64_MAP; + + // Convert every three bytes to 4 ASCII characters. + + for (idx = 0; idx < max; idx++) { + if ((idx % 3 === 0) && idx) { + result += map[(bits >> 18) & 0x3F]; + result += map[(bits >> 12) & 0x3F]; + result += map[(bits >> 6) & 0x3F]; + result += map[bits & 0x3F]; + } + + bits = (bits << 8) + object[idx]; + } + + // Dump tail + + tail = max % 3; + + if (tail === 0) { + result += map[(bits >> 18) & 0x3F]; + result += map[(bits >> 12) & 0x3F]; + result += map[(bits >> 6) & 0x3F]; + result += map[bits & 0x3F]; + } else if (tail === 2) { + result += map[(bits >> 10) & 0x3F]; + result += map[(bits >> 4) & 0x3F]; + result += map[(bits << 2) & 0x3F]; + result += map[64]; + } else if (tail === 1) { + result += map[(bits >> 2) & 0x3F]; + result += map[(bits << 4) & 0x3F]; + result += map[64]; + result += map[64]; + } + + return result; +} + +function isBinary(obj) { + return Object.prototype.toString.call(obj) === '[object Uint8Array]'; +} + +var binary = new type('tag:yaml.org,2002:binary', { + kind: 'scalar', + resolve: resolveYamlBinary, + construct: constructYamlBinary, + predicate: isBinary, + represent: representYamlBinary +}); + +var _hasOwnProperty$3 = Object.prototype.hasOwnProperty; +var _toString$2 = Object.prototype.toString; + +function resolveYamlOmap(data) { + if (data === null) return true; + + var objectKeys = [], index, length, pair, pairKey, pairHasKey, + object = data; + + for (index = 0, length = object.length; index < length; index += 1) { + pair = object[index]; + pairHasKey = false; + + if (_toString$2.call(pair) !== '[object Object]') return false; + + for (pairKey in pair) { + if (_hasOwnProperty$3.call(pair, pairKey)) { + if (!pairHasKey) pairHasKey = true; + else return false; + } + } + + if (!pairHasKey) return false; + + if (objectKeys.indexOf(pairKey) === -1) objectKeys.push(pairKey); + else return false; + } + + return true; +} + +function constructYamlOmap(data) { + return data !== null ? data : []; +} + +var omap = new type('tag:yaml.org,2002:omap', { + kind: 'sequence', + resolve: resolveYamlOmap, + construct: constructYamlOmap +}); + +var _toString$1 = Object.prototype.toString; + +function resolveYamlPairs(data) { + if (data === null) return true; + + var index, length, pair, keys, result, + object = data; + + result = new Array(object.length); + + for (index = 0, length = object.length; index < length; index += 1) { + pair = object[index]; + + if (_toString$1.call(pair) !== '[object Object]') return false; + + keys = Object.keys(pair); + + if (keys.length !== 1) return false; + + result[index] = [ keys[0], pair[keys[0]] ]; + } + + return true; +} + +function constructYamlPairs(data) { + if (data === null) return []; + + var index, length, pair, keys, result, + object = data; + + result = new Array(object.length); + + for (index = 0, length = object.length; index < length; index += 1) { + pair = object[index]; + + keys = Object.keys(pair); + + result[index] = [ keys[0], pair[keys[0]] ]; + } + + return result; +} + +var pairs = new type('tag:yaml.org,2002:pairs', { + kind: 'sequence', + resolve: resolveYamlPairs, + construct: constructYamlPairs +}); + +var _hasOwnProperty$2 = Object.prototype.hasOwnProperty; + +function resolveYamlSet(data) { + if (data === null) return true; + + var key, object = data; + + for (key in object) { + if (_hasOwnProperty$2.call(object, key)) { + if (object[key] !== null) return false; + } + } + + return true; +} + +function constructYamlSet(data) { + return data !== null ? data : {}; +} + +var set = new type('tag:yaml.org,2002:set', { + kind: 'mapping', + resolve: resolveYamlSet, + construct: constructYamlSet +}); + +var _default = core.extend({ + implicit: [ + timestamp, + merge + ], + explicit: [ + binary, + omap, + pairs, + set + ] +}); + +/*eslint-disable max-len,no-use-before-define*/ + + + + + + + +var _hasOwnProperty$1 = Object.prototype.hasOwnProperty; + + +var CONTEXT_FLOW_IN = 1; +var CONTEXT_FLOW_OUT = 2; +var CONTEXT_BLOCK_IN = 3; +var CONTEXT_BLOCK_OUT = 4; + + +var CHOMPING_CLIP = 1; +var CHOMPING_STRIP = 2; +var CHOMPING_KEEP = 3; + + +var PATTERN_NON_PRINTABLE = /[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; +var PATTERN_NON_ASCII_LINE_BREAKS = /[\x85\u2028\u2029]/; +var PATTERN_FLOW_INDICATORS = /[,\[\]\{\}]/; +var PATTERN_TAG_HANDLE = /^(?:!|!!|![a-z\-]+!)$/i; +var PATTERN_TAG_URI = /^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i; + + +function _class(obj) { return Object.prototype.toString.call(obj); } + +function is_EOL(c) { + return (c === 0x0A/* LF */) || (c === 0x0D/* CR */); +} + +function is_WHITE_SPACE(c) { + return (c === 0x09/* Tab */) || (c === 0x20/* Space */); +} + +function is_WS_OR_EOL(c) { + return (c === 0x09/* Tab */) || + (c === 0x20/* Space */) || + (c === 0x0A/* LF */) || + (c === 0x0D/* CR */); +} + +function is_FLOW_INDICATOR(c) { + return c === 0x2C/* , */ || + c === 0x5B/* [ */ || + c === 0x5D/* ] */ || + c === 0x7B/* { */ || + c === 0x7D/* } */; +} + +function fromHexCode(c) { + var lc; + + if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) { + return c - 0x30; + } + + /*eslint-disable no-bitwise*/ + lc = c | 0x20; + + if ((0x61/* a */ <= lc) && (lc <= 0x66/* f */)) { + return lc - 0x61 + 10; + } + + return -1; +} + +function escapedHexLen(c) { + if (c === 0x78/* x */) { return 2; } + if (c === 0x75/* u */) { return 4; } + if (c === 0x55/* U */) { return 8; } + return 0; +} + +function fromDecimalCode(c) { + if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) { + return c - 0x30; + } + + return -1; +} + +function simpleEscapeSequence(c) { + /* eslint-disable indent */ + return (c === 0x30/* 0 */) ? '\x00' : + (c === 0x61/* a */) ? '\x07' : + (c === 0x62/* b */) ? '\x08' : + (c === 0x74/* t */) ? '\x09' : + (c === 0x09/* Tab */) ? '\x09' : + (c === 0x6E/* n */) ? '\x0A' : + (c === 0x76/* v */) ? '\x0B' : + (c === 0x66/* f */) ? '\x0C' : + (c === 0x72/* r */) ? '\x0D' : + (c === 0x65/* e */) ? '\x1B' : + (c === 0x20/* Space */) ? ' ' : + (c === 0x22/* " */) ? '\x22' : + (c === 0x2F/* / */) ? '/' : + (c === 0x5C/* \ */) ? '\x5C' : + (c === 0x4E/* N */) ? '\x85' : + (c === 0x5F/* _ */) ? '\xA0' : + (c === 0x4C/* L */) ? '\u2028' : + (c === 0x50/* P */) ? '\u2029' : ''; +} + +function charFromCodepoint(c) { + if (c <= 0xFFFF) { + return String.fromCharCode(c); + } + // Encode UTF-16 surrogate pair + // https://en.wikipedia.org/wiki/UTF-16#Code_points_U.2B010000_to_U.2B10FFFF + return String.fromCharCode( + ((c - 0x010000) >> 10) + 0xD800, + ((c - 0x010000) & 0x03FF) + 0xDC00 + ); +} + +var simpleEscapeCheck = new Array(256); // integer, for fast access +var simpleEscapeMap = new Array(256); +for (var i = 0; i < 256; i++) { + simpleEscapeCheck[i] = simpleEscapeSequence(i) ? 1 : 0; + simpleEscapeMap[i] = simpleEscapeSequence(i); +} + + +function State$1(input, options) { + this.input = input; + + this.filename = options['filename'] || null; + this.schema = options['schema'] || _default; + this.onWarning = options['onWarning'] || null; + // (Hidden) Remove? makes the loader to expect YAML 1.1 documents + // if such documents have no explicit %YAML directive + this.legacy = options['legacy'] || false; + + this.json = options['json'] || false; + this.listener = options['listener'] || null; + + this.implicitTypes = this.schema.compiledImplicit; + this.typeMap = this.schema.compiledTypeMap; + + this.length = input.length; + this.position = 0; + this.line = 0; + this.lineStart = 0; + this.lineIndent = 0; + + // position of first leading tab in the current line, + // used to make sure there are no tabs in the indentation + this.firstTabInLine = -1; + + this.documents = []; + + /* + this.version; + this.checkLineBreaks; + this.tagMap; + this.anchorMap; + this.tag; + this.anchor; + this.kind; + this.result;*/ + +} + + +function generateError(state, message) { + var mark = { + name: state.filename, + buffer: state.input.slice(0, -1), // omit trailing \0 + position: state.position, + line: state.line, + column: state.position - state.lineStart + }; + + mark.snippet = snippet(mark); + + return new exception(message, mark); +} + +function throwError(state, message) { + throw generateError(state, message); +} + +function throwWarning(state, message) { + if (state.onWarning) { + state.onWarning.call(null, generateError(state, message)); + } +} + + +var directiveHandlers = { + + YAML: function handleYamlDirective(state, name, args) { + + var match, major, minor; + + if (state.version !== null) { + throwError(state, 'duplication of %YAML directive'); + } + + if (args.length !== 1) { + throwError(state, 'YAML directive accepts exactly one argument'); + } + + match = /^([0-9]+)\.([0-9]+)$/.exec(args[0]); + + if (match === null) { + throwError(state, 'ill-formed argument of the YAML directive'); + } + + major = parseInt(match[1], 10); + minor = parseInt(match[2], 10); + + if (major !== 1) { + throwError(state, 'unacceptable YAML version of the document'); + } + + state.version = args[0]; + state.checkLineBreaks = (minor < 2); + + if (minor !== 1 && minor !== 2) { + throwWarning(state, 'unsupported YAML version of the document'); + } + }, + + TAG: function handleTagDirective(state, name, args) { + + var handle, prefix; + + if (args.length !== 2) { + throwError(state, 'TAG directive accepts exactly two arguments'); + } + + handle = args[0]; + prefix = args[1]; + + if (!PATTERN_TAG_HANDLE.test(handle)) { + throwError(state, 'ill-formed tag handle (first argument) of the TAG directive'); + } + + if (_hasOwnProperty$1.call(state.tagMap, handle)) { + throwError(state, 'there is a previously declared suffix for "' + handle + '" tag handle'); + } + + if (!PATTERN_TAG_URI.test(prefix)) { + throwError(state, 'ill-formed tag prefix (second argument) of the TAG directive'); + } + + try { + prefix = decodeURIComponent(prefix); + } catch (err) { + throwError(state, 'tag prefix is malformed: ' + prefix); + } + + state.tagMap[handle] = prefix; + } +}; + + +function captureSegment(state, start, end, checkJson) { + var _position, _length, _character, _result; + + if (start < end) { + _result = state.input.slice(start, end); + + if (checkJson) { + for (_position = 0, _length = _result.length; _position < _length; _position += 1) { + _character = _result.charCodeAt(_position); + if (!(_character === 0x09 || + (0x20 <= _character && _character <= 0x10FFFF))) { + throwError(state, 'expected valid JSON character'); + } + } + } else if (PATTERN_NON_PRINTABLE.test(_result)) { + throwError(state, 'the stream contains non-printable characters'); + } + + state.result += _result; + } +} + +function mergeMappings(state, destination, source, overridableKeys) { + var sourceKeys, key, index, quantity; + + if (!common.isObject(source)) { + throwError(state, 'cannot merge mappings; the provided source object is unacceptable'); + } + + sourceKeys = Object.keys(source); + + for (index = 0, quantity = sourceKeys.length; index < quantity; index += 1) { + key = sourceKeys[index]; + + if (!_hasOwnProperty$1.call(destination, key)) { + destination[key] = source[key]; + overridableKeys[key] = true; + } + } +} + +function storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, + startLine, startLineStart, startPos) { + + var index, quantity; + + // The output is a plain object here, so keys can only be strings. + // We need to convert keyNode to a string, but doing so can hang the process + // (deeply nested arrays that explode exponentially using aliases). + if (Array.isArray(keyNode)) { + keyNode = Array.prototype.slice.call(keyNode); + + for (index = 0, quantity = keyNode.length; index < quantity; index += 1) { + if (Array.isArray(keyNode[index])) { + throwError(state, 'nested arrays are not supported inside keys'); + } + + if (typeof keyNode === 'object' && _class(keyNode[index]) === '[object Object]') { + keyNode[index] = '[object Object]'; + } + } + } + + // Avoid code execution in load() via toString property + // (still use its own toString for arrays, timestamps, + // and whatever user schema extensions happen to have @@toStringTag) + if (typeof keyNode === 'object' && _class(keyNode) === '[object Object]') { + keyNode = '[object Object]'; + } + + + keyNode = String(keyNode); + + if (_result === null) { + _result = {}; + } + + if (keyTag === 'tag:yaml.org,2002:merge') { + if (Array.isArray(valueNode)) { + for (index = 0, quantity = valueNode.length; index < quantity; index += 1) { + mergeMappings(state, _result, valueNode[index], overridableKeys); + } + } else { + mergeMappings(state, _result, valueNode, overridableKeys); + } + } else { + if (!state.json && + !_hasOwnProperty$1.call(overridableKeys, keyNode) && + _hasOwnProperty$1.call(_result, keyNode)) { + state.line = startLine || state.line; + state.lineStart = startLineStart || state.lineStart; + state.position = startPos || state.position; + throwError(state, 'duplicated mapping key'); + } + + // used for this specific key only because Object.defineProperty is slow + if (keyNode === '__proto__') { + Object.defineProperty(_result, keyNode, { + configurable: true, + enumerable: true, + writable: true, + value: valueNode + }); + } else { + _result[keyNode] = valueNode; + } + delete overridableKeys[keyNode]; + } + + return _result; +} + +function readLineBreak(state) { + var ch; + + ch = state.input.charCodeAt(state.position); + + if (ch === 0x0A/* LF */) { + state.position++; + } else if (ch === 0x0D/* CR */) { + state.position++; + if (state.input.charCodeAt(state.position) === 0x0A/* LF */) { + state.position++; + } + } else { + throwError(state, 'a line break is expected'); + } + + state.line += 1; + state.lineStart = state.position; + state.firstTabInLine = -1; +} + +function skipSeparationSpace(state, allowComments, checkIndent) { + var lineBreaks = 0, + ch = state.input.charCodeAt(state.position); + + while (ch !== 0) { + while (is_WHITE_SPACE(ch)) { + if (ch === 0x09/* Tab */ && state.firstTabInLine === -1) { + state.firstTabInLine = state.position; + } + ch = state.input.charCodeAt(++state.position); + } + + if (allowComments && ch === 0x23/* # */) { + do { + ch = state.input.charCodeAt(++state.position); + } while (ch !== 0x0A/* LF */ && ch !== 0x0D/* CR */ && ch !== 0); + } + + if (is_EOL(ch)) { + readLineBreak(state); + + ch = state.input.charCodeAt(state.position); + lineBreaks++; + state.lineIndent = 0; + + while (ch === 0x20/* Space */) { + state.lineIndent++; + ch = state.input.charCodeAt(++state.position); + } + } else { + break; + } + } + + if (checkIndent !== -1 && lineBreaks !== 0 && state.lineIndent < checkIndent) { + throwWarning(state, 'deficient indentation'); + } + + return lineBreaks; +} + +function testDocumentSeparator(state) { + var _position = state.position, + ch; + + ch = state.input.charCodeAt(_position); + + // Condition state.position === state.lineStart is tested + // in parent on each call, for efficiency. No needs to test here again. + if ((ch === 0x2D/* - */ || ch === 0x2E/* . */) && + ch === state.input.charCodeAt(_position + 1) && + ch === state.input.charCodeAt(_position + 2)) { + + _position += 3; + + ch = state.input.charCodeAt(_position); + + if (ch === 0 || is_WS_OR_EOL(ch)) { + return true; + } + } + + return false; +} + +function writeFoldedLines(state, count) { + if (count === 1) { + state.result += ' '; + } else if (count > 1) { + state.result += common.repeat('\n', count - 1); + } +} + + +function readPlainScalar(state, nodeIndent, withinFlowCollection) { + var preceding, + following, + captureStart, + captureEnd, + hasPendingContent, + _line, + _lineStart, + _lineIndent, + _kind = state.kind, + _result = state.result, + ch; + + ch = state.input.charCodeAt(state.position); + + if (is_WS_OR_EOL(ch) || + is_FLOW_INDICATOR(ch) || + ch === 0x23/* # */ || + ch === 0x26/* & */ || + ch === 0x2A/* * */ || + ch === 0x21/* ! */ || + ch === 0x7C/* | */ || + ch === 0x3E/* > */ || + ch === 0x27/* ' */ || + ch === 0x22/* " */ || + ch === 0x25/* % */ || + ch === 0x40/* @ */ || + ch === 0x60/* ` */) { + return false; + } + + if (ch === 0x3F/* ? */ || ch === 0x2D/* - */) { + following = state.input.charCodeAt(state.position + 1); + + if (is_WS_OR_EOL(following) || + withinFlowCollection && is_FLOW_INDICATOR(following)) { + return false; + } + } + + state.kind = 'scalar'; + state.result = ''; + captureStart = captureEnd = state.position; + hasPendingContent = false; + + while (ch !== 0) { + if (ch === 0x3A/* : */) { + following = state.input.charCodeAt(state.position + 1); + + if (is_WS_OR_EOL(following) || + withinFlowCollection && is_FLOW_INDICATOR(following)) { + break; + } + + } else if (ch === 0x23/* # */) { + preceding = state.input.charCodeAt(state.position - 1); + + if (is_WS_OR_EOL(preceding)) { + break; + } + + } else if ((state.position === state.lineStart && testDocumentSeparator(state)) || + withinFlowCollection && is_FLOW_INDICATOR(ch)) { + break; + + } else if (is_EOL(ch)) { + _line = state.line; + _lineStart = state.lineStart; + _lineIndent = state.lineIndent; + skipSeparationSpace(state, false, -1); + + if (state.lineIndent >= nodeIndent) { + hasPendingContent = true; + ch = state.input.charCodeAt(state.position); + continue; + } else { + state.position = captureEnd; + state.line = _line; + state.lineStart = _lineStart; + state.lineIndent = _lineIndent; + break; + } + } + + if (hasPendingContent) { + captureSegment(state, captureStart, captureEnd, false); + writeFoldedLines(state, state.line - _line); + captureStart = captureEnd = state.position; + hasPendingContent = false; + } + + if (!is_WHITE_SPACE(ch)) { + captureEnd = state.position + 1; + } + + ch = state.input.charCodeAt(++state.position); + } + + captureSegment(state, captureStart, captureEnd, false); + + if (state.result) { + return true; + } + + state.kind = _kind; + state.result = _result; + return false; +} + +function readSingleQuotedScalar(state, nodeIndent) { + var ch, + captureStart, captureEnd; + + ch = state.input.charCodeAt(state.position); + + if (ch !== 0x27/* ' */) { + return false; + } + + state.kind = 'scalar'; + state.result = ''; + state.position++; + captureStart = captureEnd = state.position; + + while ((ch = state.input.charCodeAt(state.position)) !== 0) { + if (ch === 0x27/* ' */) { + captureSegment(state, captureStart, state.position, true); + ch = state.input.charCodeAt(++state.position); + + if (ch === 0x27/* ' */) { + captureStart = state.position; + state.position++; + captureEnd = state.position; + } else { + return true; + } + + } else if (is_EOL(ch)) { + captureSegment(state, captureStart, captureEnd, true); + writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent)); + captureStart = captureEnd = state.position; + + } else if (state.position === state.lineStart && testDocumentSeparator(state)) { + throwError(state, 'unexpected end of the document within a single quoted scalar'); + + } else { + state.position++; + captureEnd = state.position; + } + } + + throwError(state, 'unexpected end of the stream within a single quoted scalar'); +} + +function readDoubleQuotedScalar(state, nodeIndent) { + var captureStart, + captureEnd, + hexLength, + hexResult, + tmp, + ch; + + ch = state.input.charCodeAt(state.position); + + if (ch !== 0x22/* " */) { + return false; + } + + state.kind = 'scalar'; + state.result = ''; + state.position++; + captureStart = captureEnd = state.position; + + while ((ch = state.input.charCodeAt(state.position)) !== 0) { + if (ch === 0x22/* " */) { + captureSegment(state, captureStart, state.position, true); + state.position++; + return true; + + } else if (ch === 0x5C/* \ */) { + captureSegment(state, captureStart, state.position, true); + ch = state.input.charCodeAt(++state.position); + + if (is_EOL(ch)) { + skipSeparationSpace(state, false, nodeIndent); + + // TODO: rework to inline fn with no type cast? + } else if (ch < 256 && simpleEscapeCheck[ch]) { + state.result += simpleEscapeMap[ch]; + state.position++; + + } else if ((tmp = escapedHexLen(ch)) > 0) { + hexLength = tmp; + hexResult = 0; + + for (; hexLength > 0; hexLength--) { + ch = state.input.charCodeAt(++state.position); + + if ((tmp = fromHexCode(ch)) >= 0) { + hexResult = (hexResult << 4) + tmp; + + } else { + throwError(state, 'expected hexadecimal character'); + } + } + + state.result += charFromCodepoint(hexResult); + + state.position++; + + } else { + throwError(state, 'unknown escape sequence'); + } + + captureStart = captureEnd = state.position; + + } else if (is_EOL(ch)) { + captureSegment(state, captureStart, captureEnd, true); + writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent)); + captureStart = captureEnd = state.position; + + } else if (state.position === state.lineStart && testDocumentSeparator(state)) { + throwError(state, 'unexpected end of the document within a double quoted scalar'); + + } else { + state.position++; + captureEnd = state.position; + } + } + + throwError(state, 'unexpected end of the stream within a double quoted scalar'); +} + +function readFlowCollection(state, nodeIndent) { + var readNext = true, + _line, + _lineStart, + _pos, + _tag = state.tag, + _result, + _anchor = state.anchor, + following, + terminator, + isPair, + isExplicitPair, + isMapping, + overridableKeys = Object.create(null), + keyNode, + keyTag, + valueNode, + ch; + + ch = state.input.charCodeAt(state.position); + + if (ch === 0x5B/* [ */) { + terminator = 0x5D;/* ] */ + isMapping = false; + _result = []; + } else if (ch === 0x7B/* { */) { + terminator = 0x7D;/* } */ + isMapping = true; + _result = {}; + } else { + return false; + } + + if (state.anchor !== null) { + state.anchorMap[state.anchor] = _result; + } + + ch = state.input.charCodeAt(++state.position); + + while (ch !== 0) { + skipSeparationSpace(state, true, nodeIndent); + + ch = state.input.charCodeAt(state.position); + + if (ch === terminator) { + state.position++; + state.tag = _tag; + state.anchor = _anchor; + state.kind = isMapping ? 'mapping' : 'sequence'; + state.result = _result; + return true; + } else if (!readNext) { + throwError(state, 'missed comma between flow collection entries'); + } else if (ch === 0x2C/* , */) { + // "flow collection entries can never be completely empty", as per YAML 1.2, section 7.4 + throwError(state, "expected the node content, but found ','"); + } + + keyTag = keyNode = valueNode = null; + isPair = isExplicitPair = false; + + if (ch === 0x3F/* ? */) { + following = state.input.charCodeAt(state.position + 1); + + if (is_WS_OR_EOL(following)) { + isPair = isExplicitPair = true; + state.position++; + skipSeparationSpace(state, true, nodeIndent); + } + } + + _line = state.line; // Save the current line. + _lineStart = state.lineStart; + _pos = state.position; + composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true); + keyTag = state.tag; + keyNode = state.result; + skipSeparationSpace(state, true, nodeIndent); + + ch = state.input.charCodeAt(state.position); + + if ((isExplicitPair || state.line === _line) && ch === 0x3A/* : */) { + isPair = true; + ch = state.input.charCodeAt(++state.position); + skipSeparationSpace(state, true, nodeIndent); + composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true); + valueNode = state.result; + } + + if (isMapping) { + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos); + } else if (isPair) { + _result.push(storeMappingPair(state, null, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos)); + } else { + _result.push(keyNode); + } + + skipSeparationSpace(state, true, nodeIndent); + + ch = state.input.charCodeAt(state.position); + + if (ch === 0x2C/* , */) { + readNext = true; + ch = state.input.charCodeAt(++state.position); + } else { + readNext = false; + } + } + + throwError(state, 'unexpected end of the stream within a flow collection'); +} + +function readBlockScalar(state, nodeIndent) { + var captureStart, + folding, + chomping = CHOMPING_CLIP, + didReadContent = false, + detectedIndent = false, + textIndent = nodeIndent, + emptyLines = 0, + atMoreIndented = false, + tmp, + ch; + + ch = state.input.charCodeAt(state.position); + + if (ch === 0x7C/* | */) { + folding = false; + } else if (ch === 0x3E/* > */) { + folding = true; + } else { + return false; + } + + state.kind = 'scalar'; + state.result = ''; + + while (ch !== 0) { + ch = state.input.charCodeAt(++state.position); + + if (ch === 0x2B/* + */ || ch === 0x2D/* - */) { + if (CHOMPING_CLIP === chomping) { + chomping = (ch === 0x2B/* + */) ? CHOMPING_KEEP : CHOMPING_STRIP; + } else { + throwError(state, 'repeat of a chomping mode identifier'); + } + + } else if ((tmp = fromDecimalCode(ch)) >= 0) { + if (tmp === 0) { + throwError(state, 'bad explicit indentation width of a block scalar; it cannot be less than one'); + } else if (!detectedIndent) { + textIndent = nodeIndent + tmp - 1; + detectedIndent = true; + } else { + throwError(state, 'repeat of an indentation width identifier'); + } + + } else { + break; + } + } + + if (is_WHITE_SPACE(ch)) { + do { ch = state.input.charCodeAt(++state.position); } + while (is_WHITE_SPACE(ch)); + + if (ch === 0x23/* # */) { + do { ch = state.input.charCodeAt(++state.position); } + while (!is_EOL(ch) && (ch !== 0)); + } + } + + while (ch !== 0) { + readLineBreak(state); + state.lineIndent = 0; + + ch = state.input.charCodeAt(state.position); + + while ((!detectedIndent || state.lineIndent < textIndent) && + (ch === 0x20/* Space */)) { + state.lineIndent++; + ch = state.input.charCodeAt(++state.position); + } + + if (!detectedIndent && state.lineIndent > textIndent) { + textIndent = state.lineIndent; + } + + if (is_EOL(ch)) { + emptyLines++; + continue; + } + + // End of the scalar. + if (state.lineIndent < textIndent) { + + // Perform the chomping. + if (chomping === CHOMPING_KEEP) { + state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); + } else if (chomping === CHOMPING_CLIP) { + if (didReadContent) { // i.e. only if the scalar is not empty. + state.result += '\n'; + } + } + + // Break this `while` cycle and go to the funciton's epilogue. + break; + } + + // Folded style: use fancy rules to handle line breaks. + if (folding) { + + // Lines starting with white space characters (more-indented lines) are not folded. + if (is_WHITE_SPACE(ch)) { + atMoreIndented = true; + // except for the first content line (cf. Example 8.1) + state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); + + // End of more-indented block. + } else if (atMoreIndented) { + atMoreIndented = false; + state.result += common.repeat('\n', emptyLines + 1); + + // Just one line break - perceive as the same line. + } else if (emptyLines === 0) { + if (didReadContent) { // i.e. only if we have already read some scalar content. + state.result += ' '; + } + + // Several line breaks - perceive as different lines. + } else { + state.result += common.repeat('\n', emptyLines); + } + + // Literal style: just add exact number of line breaks between content lines. + } else { + // Keep all line breaks except the header line break. + state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); + } + + didReadContent = true; + detectedIndent = true; + emptyLines = 0; + captureStart = state.position; + + while (!is_EOL(ch) && (ch !== 0)) { + ch = state.input.charCodeAt(++state.position); + } + + captureSegment(state, captureStart, state.position, false); + } + + return true; +} + +function readBlockSequence(state, nodeIndent) { + var _line, + _tag = state.tag, + _anchor = state.anchor, + _result = [], + following, + detected = false, + ch; + + // there is a leading tab before this token, so it can't be a block sequence/mapping; + // it can still be flow sequence/mapping or a scalar + if (state.firstTabInLine !== -1) return false; + + if (state.anchor !== null) { + state.anchorMap[state.anchor] = _result; + } + + ch = state.input.charCodeAt(state.position); + + while (ch !== 0) { + if (state.firstTabInLine !== -1) { + state.position = state.firstTabInLine; + throwError(state, 'tab characters must not be used in indentation'); + } + + if (ch !== 0x2D/* - */) { + break; + } + + following = state.input.charCodeAt(state.position + 1); + + if (!is_WS_OR_EOL(following)) { + break; + } + + detected = true; + state.position++; + + if (skipSeparationSpace(state, true, -1)) { + if (state.lineIndent <= nodeIndent) { + _result.push(null); + ch = state.input.charCodeAt(state.position); + continue; + } + } + + _line = state.line; + composeNode(state, nodeIndent, CONTEXT_BLOCK_IN, false, true); + _result.push(state.result); + skipSeparationSpace(state, true, -1); + + ch = state.input.charCodeAt(state.position); + + if ((state.line === _line || state.lineIndent > nodeIndent) && (ch !== 0)) { + throwError(state, 'bad indentation of a sequence entry'); + } else if (state.lineIndent < nodeIndent) { + break; + } + } + + if (detected) { + state.tag = _tag; + state.anchor = _anchor; + state.kind = 'sequence'; + state.result = _result; + return true; + } + return false; +} + +function readBlockMapping(state, nodeIndent, flowIndent) { + var following, + allowCompact, + _line, + _keyLine, + _keyLineStart, + _keyPos, + _tag = state.tag, + _anchor = state.anchor, + _result = {}, + overridableKeys = Object.create(null), + keyTag = null, + keyNode = null, + valueNode = null, + atExplicitKey = false, + detected = false, + ch; + + // there is a leading tab before this token, so it can't be a block sequence/mapping; + // it can still be flow sequence/mapping or a scalar + if (state.firstTabInLine !== -1) return false; + + if (state.anchor !== null) { + state.anchorMap[state.anchor] = _result; + } + + ch = state.input.charCodeAt(state.position); + + while (ch !== 0) { + if (!atExplicitKey && state.firstTabInLine !== -1) { + state.position = state.firstTabInLine; + throwError(state, 'tab characters must not be used in indentation'); + } + + following = state.input.charCodeAt(state.position + 1); + _line = state.line; // Save the current line. + + // + // Explicit notation case. There are two separate blocks: + // first for the key (denoted by "?") and second for the value (denoted by ":") + // + if ((ch === 0x3F/* ? */ || ch === 0x3A/* : */) && is_WS_OR_EOL(following)) { + + if (ch === 0x3F/* ? */) { + if (atExplicitKey) { + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos); + keyTag = keyNode = valueNode = null; + } + + detected = true; + atExplicitKey = true; + allowCompact = true; + + } else if (atExplicitKey) { + // i.e. 0x3A/* : */ === character after the explicit key. + atExplicitKey = false; + allowCompact = true; + + } else { + throwError(state, 'incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line'); + } + + state.position += 1; + ch = following; + + // + // Implicit notation case. Flow-style node as the key first, then ":", and the value. + // + } else { + _keyLine = state.line; + _keyLineStart = state.lineStart; + _keyPos = state.position; + + if (!composeNode(state, flowIndent, CONTEXT_FLOW_OUT, false, true)) { + // Neither implicit nor explicit notation. + // Reading is done. Go to the epilogue. + break; + } + + if (state.line === _line) { + ch = state.input.charCodeAt(state.position); + + while (is_WHITE_SPACE(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + if (ch === 0x3A/* : */) { + ch = state.input.charCodeAt(++state.position); + + if (!is_WS_OR_EOL(ch)) { + throwError(state, 'a whitespace character is expected after the key-value separator within a block mapping'); + } + + if (atExplicitKey) { + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos); + keyTag = keyNode = valueNode = null; + } + + detected = true; + atExplicitKey = false; + allowCompact = false; + keyTag = state.tag; + keyNode = state.result; + + } else if (detected) { + throwError(state, 'can not read an implicit mapping pair; a colon is missed'); + + } else { + state.tag = _tag; + state.anchor = _anchor; + return true; // Keep the result of `composeNode`. + } + + } else if (detected) { + throwError(state, 'can not read a block mapping entry; a multiline key may not be an implicit key'); + + } else { + state.tag = _tag; + state.anchor = _anchor; + return true; // Keep the result of `composeNode`. + } + } + + // + // Common reading code for both explicit and implicit notations. + // + if (state.line === _line || state.lineIndent > nodeIndent) { + if (atExplicitKey) { + _keyLine = state.line; + _keyLineStart = state.lineStart; + _keyPos = state.position; + } + + if (composeNode(state, nodeIndent, CONTEXT_BLOCK_OUT, true, allowCompact)) { + if (atExplicitKey) { + keyNode = state.result; + } else { + valueNode = state.result; + } + } + + if (!atExplicitKey) { + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _keyLine, _keyLineStart, _keyPos); + keyTag = keyNode = valueNode = null; + } + + skipSeparationSpace(state, true, -1); + ch = state.input.charCodeAt(state.position); + } + + if ((state.line === _line || state.lineIndent > nodeIndent) && (ch !== 0)) { + throwError(state, 'bad indentation of a mapping entry'); + } else if (state.lineIndent < nodeIndent) { + break; + } + } + + // + // Epilogue. + // + + // Special case: last mapping's node contains only the key in explicit notation. + if (atExplicitKey) { + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos); + } + + // Expose the resulting mapping. + if (detected) { + state.tag = _tag; + state.anchor = _anchor; + state.kind = 'mapping'; + state.result = _result; + } + + return detected; +} + +function readTagProperty(state) { + var _position, + isVerbatim = false, + isNamed = false, + tagHandle, + tagName, + ch; + + ch = state.input.charCodeAt(state.position); + + if (ch !== 0x21/* ! */) return false; + + if (state.tag !== null) { + throwError(state, 'duplication of a tag property'); + } + + ch = state.input.charCodeAt(++state.position); + + if (ch === 0x3C/* < */) { + isVerbatim = true; + ch = state.input.charCodeAt(++state.position); + + } else if (ch === 0x21/* ! */) { + isNamed = true; + tagHandle = '!!'; + ch = state.input.charCodeAt(++state.position); + + } else { + tagHandle = '!'; + } + + _position = state.position; + + if (isVerbatim) { + do { ch = state.input.charCodeAt(++state.position); } + while (ch !== 0 && ch !== 0x3E/* > */); + + if (state.position < state.length) { + tagName = state.input.slice(_position, state.position); + ch = state.input.charCodeAt(++state.position); + } else { + throwError(state, 'unexpected end of the stream within a verbatim tag'); + } + } else { + while (ch !== 0 && !is_WS_OR_EOL(ch)) { + + if (ch === 0x21/* ! */) { + if (!isNamed) { + tagHandle = state.input.slice(_position - 1, state.position + 1); + + if (!PATTERN_TAG_HANDLE.test(tagHandle)) { + throwError(state, 'named tag handle cannot contain such characters'); + } + + isNamed = true; + _position = state.position + 1; + } else { + throwError(state, 'tag suffix cannot contain exclamation marks'); + } + } + + ch = state.input.charCodeAt(++state.position); + } + + tagName = state.input.slice(_position, state.position); + + if (PATTERN_FLOW_INDICATORS.test(tagName)) { + throwError(state, 'tag suffix cannot contain flow indicator characters'); + } + } + + if (tagName && !PATTERN_TAG_URI.test(tagName)) { + throwError(state, 'tag name cannot contain such characters: ' + tagName); + } + + try { + tagName = decodeURIComponent(tagName); + } catch (err) { + throwError(state, 'tag name is malformed: ' + tagName); + } + + if (isVerbatim) { + state.tag = tagName; + + } else if (_hasOwnProperty$1.call(state.tagMap, tagHandle)) { + state.tag = state.tagMap[tagHandle] + tagName; + + } else if (tagHandle === '!') { + state.tag = '!' + tagName; + + } else if (tagHandle === '!!') { + state.tag = 'tag:yaml.org,2002:' + tagName; + + } else { + throwError(state, 'undeclared tag handle "' + tagHandle + '"'); + } + + return true; +} + +function readAnchorProperty(state) { + var _position, + ch; + + ch = state.input.charCodeAt(state.position); + + if (ch !== 0x26/* & */) return false; + + if (state.anchor !== null) { + throwError(state, 'duplication of an anchor property'); + } + + ch = state.input.charCodeAt(++state.position); + _position = state.position; + + while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + if (state.position === _position) { + throwError(state, 'name of an anchor node must contain at least one character'); + } + + state.anchor = state.input.slice(_position, state.position); + return true; +} + +function readAlias(state) { + var _position, alias, + ch; + + ch = state.input.charCodeAt(state.position); + + if (ch !== 0x2A/* * */) return false; + + ch = state.input.charCodeAt(++state.position); + _position = state.position; + + while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + if (state.position === _position) { + throwError(state, 'name of an alias node must contain at least one character'); + } + + alias = state.input.slice(_position, state.position); + + if (!_hasOwnProperty$1.call(state.anchorMap, alias)) { + throwError(state, 'unidentified alias "' + alias + '"'); + } + + state.result = state.anchorMap[alias]; + skipSeparationSpace(state, true, -1); + return true; +} + +function composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact) { + var allowBlockStyles, + allowBlockScalars, + allowBlockCollections, + indentStatus = 1, // 1: this>parent, 0: this=parent, -1: this parentIndent) { + indentStatus = 1; + } else if (state.lineIndent === parentIndent) { + indentStatus = 0; + } else if (state.lineIndent < parentIndent) { + indentStatus = -1; + } + } + } + + if (indentStatus === 1) { + while (readTagProperty(state) || readAnchorProperty(state)) { + if (skipSeparationSpace(state, true, -1)) { + atNewLine = true; + allowBlockCollections = allowBlockStyles; + + if (state.lineIndent > parentIndent) { + indentStatus = 1; + } else if (state.lineIndent === parentIndent) { + indentStatus = 0; + } else if (state.lineIndent < parentIndent) { + indentStatus = -1; + } + } else { + allowBlockCollections = false; + } + } + } + + if (allowBlockCollections) { + allowBlockCollections = atNewLine || allowCompact; + } + + if (indentStatus === 1 || CONTEXT_BLOCK_OUT === nodeContext) { + if (CONTEXT_FLOW_IN === nodeContext || CONTEXT_FLOW_OUT === nodeContext) { + flowIndent = parentIndent; + } else { + flowIndent = parentIndent + 1; + } + + blockIndent = state.position - state.lineStart; + + if (indentStatus === 1) { + if (allowBlockCollections && + (readBlockSequence(state, blockIndent) || + readBlockMapping(state, blockIndent, flowIndent)) || + readFlowCollection(state, flowIndent)) { + hasContent = true; + } else { + if ((allowBlockScalars && readBlockScalar(state, flowIndent)) || + readSingleQuotedScalar(state, flowIndent) || + readDoubleQuotedScalar(state, flowIndent)) { + hasContent = true; + + } else if (readAlias(state)) { + hasContent = true; + + if (state.tag !== null || state.anchor !== null) { + throwError(state, 'alias node should not have any properties'); + } + + } else if (readPlainScalar(state, flowIndent, CONTEXT_FLOW_IN === nodeContext)) { + hasContent = true; + + if (state.tag === null) { + state.tag = '?'; + } + } + + if (state.anchor !== null) { + state.anchorMap[state.anchor] = state.result; + } + } + } else if (indentStatus === 0) { + // Special case: block sequences are allowed to have same indentation level as the parent. + // http://www.yaml.org/spec/1.2/spec.html#id2799784 + hasContent = allowBlockCollections && readBlockSequence(state, blockIndent); + } + } + + if (state.tag === null) { + if (state.anchor !== null) { + state.anchorMap[state.anchor] = state.result; + } + + } else if (state.tag === '?') { + // Implicit resolving is not allowed for non-scalar types, and '?' + // non-specific tag is only automatically assigned to plain scalars. + // + // We only need to check kind conformity in case user explicitly assigns '?' + // tag, for example like this: "! [0]" + // + if (state.result !== null && state.kind !== 'scalar') { + throwError(state, 'unacceptable node kind for ! tag; it should be "scalar", not "' + state.kind + '"'); + } + + for (typeIndex = 0, typeQuantity = state.implicitTypes.length; typeIndex < typeQuantity; typeIndex += 1) { + type = state.implicitTypes[typeIndex]; + + if (type.resolve(state.result)) { // `state.result` updated in resolver if matched + state.result = type.construct(state.result); + state.tag = type.tag; + if (state.anchor !== null) { + state.anchorMap[state.anchor] = state.result; + } + break; + } + } + } else if (state.tag !== '!') { + if (_hasOwnProperty$1.call(state.typeMap[state.kind || 'fallback'], state.tag)) { + type = state.typeMap[state.kind || 'fallback'][state.tag]; + } else { + // looking for multi type + type = null; + typeList = state.typeMap.multi[state.kind || 'fallback']; + + for (typeIndex = 0, typeQuantity = typeList.length; typeIndex < typeQuantity; typeIndex += 1) { + if (state.tag.slice(0, typeList[typeIndex].tag.length) === typeList[typeIndex].tag) { + type = typeList[typeIndex]; + break; + } + } + } + + if (!type) { + throwError(state, 'unknown tag !<' + state.tag + '>'); + } + + if (state.result !== null && type.kind !== state.kind) { + throwError(state, 'unacceptable node kind for !<' + state.tag + '> tag; it should be "' + type.kind + '", not "' + state.kind + '"'); + } + + if (!type.resolve(state.result, state.tag)) { // `state.result` updated in resolver if matched + throwError(state, 'cannot resolve a node with !<' + state.tag + '> explicit tag'); + } else { + state.result = type.construct(state.result, state.tag); + if (state.anchor !== null) { + state.anchorMap[state.anchor] = state.result; + } + } + } + + if (state.listener !== null) { + state.listener('close', state); + } + return state.tag !== null || state.anchor !== null || hasContent; +} + +function readDocument(state) { + var documentStart = state.position, + _position, + directiveName, + directiveArgs, + hasDirectives = false, + ch; + + state.version = null; + state.checkLineBreaks = state.legacy; + state.tagMap = Object.create(null); + state.anchorMap = Object.create(null); + + while ((ch = state.input.charCodeAt(state.position)) !== 0) { + skipSeparationSpace(state, true, -1); + + ch = state.input.charCodeAt(state.position); + + if (state.lineIndent > 0 || ch !== 0x25/* % */) { + break; + } + + hasDirectives = true; + ch = state.input.charCodeAt(++state.position); + _position = state.position; + + while (ch !== 0 && !is_WS_OR_EOL(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + directiveName = state.input.slice(_position, state.position); + directiveArgs = []; + + if (directiveName.length < 1) { + throwError(state, 'directive name must not be less than one character in length'); + } + + while (ch !== 0) { + while (is_WHITE_SPACE(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + if (ch === 0x23/* # */) { + do { ch = state.input.charCodeAt(++state.position); } + while (ch !== 0 && !is_EOL(ch)); + break; + } + + if (is_EOL(ch)) break; + + _position = state.position; + + while (ch !== 0 && !is_WS_OR_EOL(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + directiveArgs.push(state.input.slice(_position, state.position)); + } + + if (ch !== 0) readLineBreak(state); + + if (_hasOwnProperty$1.call(directiveHandlers, directiveName)) { + directiveHandlers[directiveName](state, directiveName, directiveArgs); + } else { + throwWarning(state, 'unknown document directive "' + directiveName + '"'); + } + } + + skipSeparationSpace(state, true, -1); + + if (state.lineIndent === 0 && + state.input.charCodeAt(state.position) === 0x2D/* - */ && + state.input.charCodeAt(state.position + 1) === 0x2D/* - */ && + state.input.charCodeAt(state.position + 2) === 0x2D/* - */) { + state.position += 3; + skipSeparationSpace(state, true, -1); + + } else if (hasDirectives) { + throwError(state, 'directives end mark is expected'); + } + + composeNode(state, state.lineIndent - 1, CONTEXT_BLOCK_OUT, false, true); + skipSeparationSpace(state, true, -1); + + if (state.checkLineBreaks && + PATTERN_NON_ASCII_LINE_BREAKS.test(state.input.slice(documentStart, state.position))) { + throwWarning(state, 'non-ASCII line breaks are interpreted as content'); + } + + state.documents.push(state.result); + + if (state.position === state.lineStart && testDocumentSeparator(state)) { + + if (state.input.charCodeAt(state.position) === 0x2E/* . */) { + state.position += 3; + skipSeparationSpace(state, true, -1); + } + return; + } + + if (state.position < (state.length - 1)) { + throwError(state, 'end of the stream or a document separator is expected'); + } else { + return; + } +} + + +function loadDocuments(input, options) { + input = String(input); + options = options || {}; + + if (input.length !== 0) { + + // Add tailing `\n` if not exists + if (input.charCodeAt(input.length - 1) !== 0x0A/* LF */ && + input.charCodeAt(input.length - 1) !== 0x0D/* CR */) { + input += '\n'; + } + + // Strip BOM + if (input.charCodeAt(0) === 0xFEFF) { + input = input.slice(1); + } + } + + var state = new State$1(input, options); + + var nullpos = input.indexOf('\0'); + + if (nullpos !== -1) { + state.position = nullpos; + throwError(state, 'null byte is not allowed in input'); + } + + // Use 0 as string terminator. That significantly simplifies bounds check. + state.input += '\0'; + + while (state.input.charCodeAt(state.position) === 0x20/* Space */) { + state.lineIndent += 1; + state.position += 1; + } + + while (state.position < (state.length - 1)) { + readDocument(state); + } + + return state.documents; +} + + +function loadAll$1(input, iterator, options) { + if (iterator !== null && typeof iterator === 'object' && typeof options === 'undefined') { + options = iterator; + iterator = null; + } + + var documents = loadDocuments(input, options); + + if (typeof iterator !== 'function') { + return documents; + } + + for (var index = 0, length = documents.length; index < length; index += 1) { + iterator(documents[index]); + } +} + + +function load$1(input, options) { + var documents = loadDocuments(input, options); + + if (documents.length === 0) { + /*eslint-disable no-undefined*/ + return undefined; + } else if (documents.length === 1) { + return documents[0]; + } + throw new exception('expected a single document in the stream, but found more'); +} + + +var loadAll_1 = loadAll$1; +var load_1 = load$1; + +var loader = { + loadAll: loadAll_1, + load: load_1 +}; + +/*eslint-disable no-use-before-define*/ + + + + + +var _toString = Object.prototype.toString; +var _hasOwnProperty = Object.prototype.hasOwnProperty; + +var CHAR_BOM = 0xFEFF; +var CHAR_TAB = 0x09; /* Tab */ +var CHAR_LINE_FEED = 0x0A; /* LF */ +var CHAR_CARRIAGE_RETURN = 0x0D; /* CR */ +var CHAR_SPACE = 0x20; /* Space */ +var CHAR_EXCLAMATION = 0x21; /* ! */ +var CHAR_DOUBLE_QUOTE = 0x22; /* " */ +var CHAR_SHARP = 0x23; /* # */ +var CHAR_PERCENT = 0x25; /* % */ +var CHAR_AMPERSAND = 0x26; /* & */ +var CHAR_SINGLE_QUOTE = 0x27; /* ' */ +var CHAR_ASTERISK = 0x2A; /* * */ +var CHAR_COMMA = 0x2C; /* , */ +var CHAR_MINUS = 0x2D; /* - */ +var CHAR_COLON = 0x3A; /* : */ +var CHAR_EQUALS = 0x3D; /* = */ +var CHAR_GREATER_THAN = 0x3E; /* > */ +var CHAR_QUESTION = 0x3F; /* ? */ +var CHAR_COMMERCIAL_AT = 0x40; /* @ */ +var CHAR_LEFT_SQUARE_BRACKET = 0x5B; /* [ */ +var CHAR_RIGHT_SQUARE_BRACKET = 0x5D; /* ] */ +var CHAR_GRAVE_ACCENT = 0x60; /* ` */ +var CHAR_LEFT_CURLY_BRACKET = 0x7B; /* { */ +var CHAR_VERTICAL_LINE = 0x7C; /* | */ +var CHAR_RIGHT_CURLY_BRACKET = 0x7D; /* } */ + +var ESCAPE_SEQUENCES = {}; + +ESCAPE_SEQUENCES[0x00] = '\\0'; +ESCAPE_SEQUENCES[0x07] = '\\a'; +ESCAPE_SEQUENCES[0x08] = '\\b'; +ESCAPE_SEQUENCES[0x09] = '\\t'; +ESCAPE_SEQUENCES[0x0A] = '\\n'; +ESCAPE_SEQUENCES[0x0B] = '\\v'; +ESCAPE_SEQUENCES[0x0C] = '\\f'; +ESCAPE_SEQUENCES[0x0D] = '\\r'; +ESCAPE_SEQUENCES[0x1B] = '\\e'; +ESCAPE_SEQUENCES[0x22] = '\\"'; +ESCAPE_SEQUENCES[0x5C] = '\\\\'; +ESCAPE_SEQUENCES[0x85] = '\\N'; +ESCAPE_SEQUENCES[0xA0] = '\\_'; +ESCAPE_SEQUENCES[0x2028] = '\\L'; +ESCAPE_SEQUENCES[0x2029] = '\\P'; + +var DEPRECATED_BOOLEANS_SYNTAX = [ + 'y', 'Y', 'yes', 'Yes', 'YES', 'on', 'On', 'ON', + 'n', 'N', 'no', 'No', 'NO', 'off', 'Off', 'OFF' +]; + +var DEPRECATED_BASE60_SYNTAX = /^[-+]?[0-9_]+(?::[0-9_]+)+(?:\.[0-9_]*)?$/; + +function compileStyleMap(schema, map) { + var result, keys, index, length, tag, style, type; + + if (map === null) return {}; + + result = {}; + keys = Object.keys(map); + + for (index = 0, length = keys.length; index < length; index += 1) { + tag = keys[index]; + style = String(map[tag]); + + if (tag.slice(0, 2) === '!!') { + tag = 'tag:yaml.org,2002:' + tag.slice(2); + } + type = schema.compiledTypeMap['fallback'][tag]; + + if (type && _hasOwnProperty.call(type.styleAliases, style)) { + style = type.styleAliases[style]; + } + + result[tag] = style; + } + + return result; +} + +function encodeHex(character) { + var string, handle, length; + + string = character.toString(16).toUpperCase(); + + if (character <= 0xFF) { + handle = 'x'; + length = 2; + } else if (character <= 0xFFFF) { + handle = 'u'; + length = 4; + } else if (character <= 0xFFFFFFFF) { + handle = 'U'; + length = 8; + } else { + throw new exception('code point within a string may not be greater than 0xFFFFFFFF'); + } + + return '\\' + handle + common.repeat('0', length - string.length) + string; +} + + +var QUOTING_TYPE_SINGLE = 1, + QUOTING_TYPE_DOUBLE = 2; + +function State(options) { + this.schema = options['schema'] || _default; + this.indent = Math.max(1, (options['indent'] || 2)); + this.noArrayIndent = options['noArrayIndent'] || false; + this.skipInvalid = options['skipInvalid'] || false; + this.flowLevel = (common.isNothing(options['flowLevel']) ? -1 : options['flowLevel']); + this.styleMap = compileStyleMap(this.schema, options['styles'] || null); + this.sortKeys = options['sortKeys'] || false; + this.lineWidth = options['lineWidth'] || 80; + this.noRefs = options['noRefs'] || false; + this.noCompatMode = options['noCompatMode'] || false; + this.condenseFlow = options['condenseFlow'] || false; + this.quotingType = options['quotingType'] === '"' ? QUOTING_TYPE_DOUBLE : QUOTING_TYPE_SINGLE; + this.forceQuotes = options['forceQuotes'] || false; + this.replacer = typeof options['replacer'] === 'function' ? options['replacer'] : null; + + this.implicitTypes = this.schema.compiledImplicit; + this.explicitTypes = this.schema.compiledExplicit; + + this.tag = null; + this.result = ''; + + this.duplicates = []; + this.usedDuplicates = null; +} + +// Indents every line in a string. Empty lines (\n only) are not indented. +function indentString(string, spaces) { + var ind = common.repeat(' ', spaces), + position = 0, + next = -1, + result = '', + line, + length = string.length; + + while (position < length) { + next = string.indexOf('\n', position); + if (next === -1) { + line = string.slice(position); + position = length; + } else { + line = string.slice(position, next + 1); + position = next + 1; + } + + if (line.length && line !== '\n') result += ind; + + result += line; + } + + return result; +} + +function generateNextLine(state, level) { + return '\n' + common.repeat(' ', state.indent * level); +} + +function testImplicitResolving(state, str) { + var index, length, type; + + for (index = 0, length = state.implicitTypes.length; index < length; index += 1) { + type = state.implicitTypes[index]; + + if (type.resolve(str)) { + return true; + } + } + + return false; +} + +// [33] s-white ::= s-space | s-tab +function isWhitespace(c) { + return c === CHAR_SPACE || c === CHAR_TAB; +} + +// Returns true if the character can be printed without escaping. +// From YAML 1.2: "any allowed characters known to be non-printable +// should also be escaped. [However,] This isn’t mandatory" +// Derived from nb-char - \t - #x85 - #xA0 - #x2028 - #x2029. +function isPrintable(c) { + return (0x00020 <= c && c <= 0x00007E) + || ((0x000A1 <= c && c <= 0x00D7FF) && c !== 0x2028 && c !== 0x2029) + || ((0x0E000 <= c && c <= 0x00FFFD) && c !== CHAR_BOM) + || (0x10000 <= c && c <= 0x10FFFF); +} + +// [34] ns-char ::= nb-char - s-white +// [27] nb-char ::= c-printable - b-char - c-byte-order-mark +// [26] b-char ::= b-line-feed | b-carriage-return +// Including s-white (for some reason, examples doesn't match specs in this aspect) +// ns-char ::= c-printable - b-line-feed - b-carriage-return - c-byte-order-mark +function isNsCharOrWhitespace(c) { + return isPrintable(c) + && c !== CHAR_BOM + // - b-char + && c !== CHAR_CARRIAGE_RETURN + && c !== CHAR_LINE_FEED; +} + +// [127] ns-plain-safe(c) ::= c = flow-out ⇒ ns-plain-safe-out +// c = flow-in ⇒ ns-plain-safe-in +// c = block-key ⇒ ns-plain-safe-out +// c = flow-key ⇒ ns-plain-safe-in +// [128] ns-plain-safe-out ::= ns-char +// [129] ns-plain-safe-in ::= ns-char - c-flow-indicator +// [130] ns-plain-char(c) ::= ( ns-plain-safe(c) - “:” - “#” ) +// | ( /* An ns-char preceding */ “#” ) +// | ( “:” /* Followed by an ns-plain-safe(c) */ ) +function isPlainSafe(c, prev, inblock) { + var cIsNsCharOrWhitespace = isNsCharOrWhitespace(c); + var cIsNsChar = cIsNsCharOrWhitespace && !isWhitespace(c); + return ( + // ns-plain-safe + inblock ? // c = flow-in + cIsNsCharOrWhitespace + : cIsNsCharOrWhitespace + // - c-flow-indicator + && c !== CHAR_COMMA + && c !== CHAR_LEFT_SQUARE_BRACKET + && c !== CHAR_RIGHT_SQUARE_BRACKET + && c !== CHAR_LEFT_CURLY_BRACKET + && c !== CHAR_RIGHT_CURLY_BRACKET + ) + // ns-plain-char + && c !== CHAR_SHARP // false on '#' + && !(prev === CHAR_COLON && !cIsNsChar) // false on ': ' + || (isNsCharOrWhitespace(prev) && !isWhitespace(prev) && c === CHAR_SHARP) // change to true on '[^ ]#' + || (prev === CHAR_COLON && cIsNsChar); // change to true on ':[^ ]' +} + +// Simplified test for values allowed as the first character in plain style. +function isPlainSafeFirst(c) { + // Uses a subset of ns-char - c-indicator + // where ns-char = nb-char - s-white. + // No support of ( ( “?” | “:” | “-” ) /* Followed by an ns-plain-safe(c)) */ ) part + return isPrintable(c) && c !== CHAR_BOM + && !isWhitespace(c) // - s-white + // - (c-indicator ::= + // “-” | “?” | “:” | “,” | “[” | “]” | “{” | “}” + && c !== CHAR_MINUS + && c !== CHAR_QUESTION + && c !== CHAR_COLON + && c !== CHAR_COMMA + && c !== CHAR_LEFT_SQUARE_BRACKET + && c !== CHAR_RIGHT_SQUARE_BRACKET + && c !== CHAR_LEFT_CURLY_BRACKET + && c !== CHAR_RIGHT_CURLY_BRACKET + // | “#” | “&” | “*” | “!” | “|” | “=” | “>” | “'” | “"” + && c !== CHAR_SHARP + && c !== CHAR_AMPERSAND + && c !== CHAR_ASTERISK + && c !== CHAR_EXCLAMATION + && c !== CHAR_VERTICAL_LINE + && c !== CHAR_EQUALS + && c !== CHAR_GREATER_THAN + && c !== CHAR_SINGLE_QUOTE + && c !== CHAR_DOUBLE_QUOTE + // | “%” | “@” | “`”) + && c !== CHAR_PERCENT + && c !== CHAR_COMMERCIAL_AT + && c !== CHAR_GRAVE_ACCENT; +} + +// Simplified test for values allowed as the last character in plain style. +function isPlainSafeLast(c) { + // just not whitespace or colon, it will be checked to be plain character later + return !isWhitespace(c) && c !== CHAR_COLON; +} + +// Same as 'string'.codePointAt(pos), but works in older browsers. +function codePointAt(string, pos) { + var first = string.charCodeAt(pos), second; + if (first >= 0xD800 && first <= 0xDBFF && pos + 1 < string.length) { + second = string.charCodeAt(pos + 1); + if (second >= 0xDC00 && second <= 0xDFFF) { + // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae + return (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000; + } + } + return first; +} + +// Determines whether block indentation indicator is required. +function needIndentIndicator(string) { + var leadingSpaceRe = /^\n* /; + return leadingSpaceRe.test(string); +} + +var STYLE_PLAIN = 1, + STYLE_SINGLE = 2, + STYLE_LITERAL = 3, + STYLE_FOLDED = 4, + STYLE_DOUBLE = 5; + +// Determines which scalar styles are possible and returns the preferred style. +// lineWidth = -1 => no limit. +// Pre-conditions: str.length > 0. +// Post-conditions: +// STYLE_PLAIN or STYLE_SINGLE => no \n are in the string. +// STYLE_LITERAL => no lines are suitable for folding (or lineWidth is -1). +// STYLE_FOLDED => a line > lineWidth and can be folded (and lineWidth != -1). +function chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineWidth, + testAmbiguousType, quotingType, forceQuotes, inblock) { + + var i; + var char = 0; + var prevChar = null; + var hasLineBreak = false; + var hasFoldableLine = false; // only checked if shouldTrackWidth + var shouldTrackWidth = lineWidth !== -1; + var previousLineBreak = -1; // count the first line correctly + var plain = isPlainSafeFirst(codePointAt(string, 0)) + && isPlainSafeLast(codePointAt(string, string.length - 1)); + + if (singleLineOnly || forceQuotes) { + // Case: no block styles. + // Check for disallowed characters to rule out plain and single. + for (i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) { + char = codePointAt(string, i); + if (!isPrintable(char)) { + return STYLE_DOUBLE; + } + plain = plain && isPlainSafe(char, prevChar, inblock); + prevChar = char; + } + } else { + // Case: block styles permitted. + for (i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) { + char = codePointAt(string, i); + if (char === CHAR_LINE_FEED) { + hasLineBreak = true; + // Check if any line can be folded. + if (shouldTrackWidth) { + hasFoldableLine = hasFoldableLine || + // Foldable line = too long, and not more-indented. + (i - previousLineBreak - 1 > lineWidth && + string[previousLineBreak + 1] !== ' '); + previousLineBreak = i; + } + } else if (!isPrintable(char)) { + return STYLE_DOUBLE; + } + plain = plain && isPlainSafe(char, prevChar, inblock); + prevChar = char; + } + // in case the end is missing a \n + hasFoldableLine = hasFoldableLine || (shouldTrackWidth && + (i - previousLineBreak - 1 > lineWidth && + string[previousLineBreak + 1] !== ' ')); + } + // Although every style can represent \n without escaping, prefer block styles + // for multiline, since they're more readable and they don't add empty lines. + // Also prefer folding a super-long line. + if (!hasLineBreak && !hasFoldableLine) { + // Strings interpretable as another type have to be quoted; + // e.g. the string 'true' vs. the boolean true. + if (plain && !forceQuotes && !testAmbiguousType(string)) { + return STYLE_PLAIN; + } + return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE; + } + // Edge case: block indentation indicator can only have one digit. + if (indentPerLevel > 9 && needIndentIndicator(string)) { + return STYLE_DOUBLE; + } + // At this point we know block styles are valid. + // Prefer literal style unless we want to fold. + if (!forceQuotes) { + return hasFoldableLine ? STYLE_FOLDED : STYLE_LITERAL; + } + return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE; +} + +// Note: line breaking/folding is implemented for only the folded style. +// NB. We drop the last trailing newline (if any) of a returned block scalar +// since the dumper adds its own newline. This always works: +// • No ending newline => unaffected; already using strip "-" chomping. +// • Ending newline => removed then restored. +// Importantly, this keeps the "+" chomp indicator from gaining an extra line. +function writeScalar(state, string, level, iskey, inblock) { + state.dump = (function () { + if (string.length === 0) { + return state.quotingType === QUOTING_TYPE_DOUBLE ? '""' : "''"; + } + if (!state.noCompatMode) { + if (DEPRECATED_BOOLEANS_SYNTAX.indexOf(string) !== -1 || DEPRECATED_BASE60_SYNTAX.test(string)) { + return state.quotingType === QUOTING_TYPE_DOUBLE ? ('"' + string + '"') : ("'" + string + "'"); + } + } + + var indent = state.indent * Math.max(1, level); // no 0-indent scalars + // As indentation gets deeper, let the width decrease monotonically + // to the lower bound min(state.lineWidth, 40). + // Note that this implies + // state.lineWidth ≤ 40 + state.indent: width is fixed at the lower bound. + // state.lineWidth > 40 + state.indent: width decreases until the lower bound. + // This behaves better than a constant minimum width which disallows narrower options, + // or an indent threshold which causes the width to suddenly increase. + var lineWidth = state.lineWidth === -1 + ? -1 : Math.max(Math.min(state.lineWidth, 40), state.lineWidth - indent); + + // Without knowing if keys are implicit/explicit, assume implicit for safety. + var singleLineOnly = iskey + // No block styles in flow mode. + || (state.flowLevel > -1 && level >= state.flowLevel); + function testAmbiguity(string) { + return testImplicitResolving(state, string); + } + + switch (chooseScalarStyle(string, singleLineOnly, state.indent, lineWidth, + testAmbiguity, state.quotingType, state.forceQuotes && !iskey, inblock)) { + + case STYLE_PLAIN: + return string; + case STYLE_SINGLE: + return "'" + string.replace(/'/g, "''") + "'"; + case STYLE_LITERAL: + return '|' + blockHeader(string, state.indent) + + dropEndingNewline(indentString(string, indent)); + case STYLE_FOLDED: + return '>' + blockHeader(string, state.indent) + + dropEndingNewline(indentString(foldString(string, lineWidth), indent)); + case STYLE_DOUBLE: + return '"' + escapeString(string) + '"'; + default: + throw new exception('impossible error: invalid scalar style'); + } + }()); +} + +// Pre-conditions: string is valid for a block scalar, 1 <= indentPerLevel <= 9. +function blockHeader(string, indentPerLevel) { + var indentIndicator = needIndentIndicator(string) ? String(indentPerLevel) : ''; + + // note the special case: the string '\n' counts as a "trailing" empty line. + var clip = string[string.length - 1] === '\n'; + var keep = clip && (string[string.length - 2] === '\n' || string === '\n'); + var chomp = keep ? '+' : (clip ? '' : '-'); + + return indentIndicator + chomp + '\n'; +} + +// (See the note for writeScalar.) +function dropEndingNewline(string) { + return string[string.length - 1] === '\n' ? string.slice(0, -1) : string; +} + +// Note: a long line without a suitable break point will exceed the width limit. +// Pre-conditions: every char in str isPrintable, str.length > 0, width > 0. +function foldString(string, width) { + // In folded style, $k$ consecutive newlines output as $k+1$ newlines— + // unless they're before or after a more-indented line, or at the very + // beginning or end, in which case $k$ maps to $k$. + // Therefore, parse each chunk as newline(s) followed by a content line. + var lineRe = /(\n+)([^\n]*)/g; + + // first line (possibly an empty line) + var result = (function () { + var nextLF = string.indexOf('\n'); + nextLF = nextLF !== -1 ? nextLF : string.length; + lineRe.lastIndex = nextLF; + return foldLine(string.slice(0, nextLF), width); + }()); + // If we haven't reached the first content line yet, don't add an extra \n. + var prevMoreIndented = string[0] === '\n' || string[0] === ' '; + var moreIndented; + + // rest of the lines + var match; + while ((match = lineRe.exec(string))) { + var prefix = match[1], line = match[2]; + moreIndented = (line[0] === ' '); + result += prefix + + (!prevMoreIndented && !moreIndented && line !== '' + ? '\n' : '') + + foldLine(line, width); + prevMoreIndented = moreIndented; + } + + return result; +} + +// Greedy line breaking. +// Picks the longest line under the limit each time, +// otherwise settles for the shortest line over the limit. +// NB. More-indented lines *cannot* be folded, as that would add an extra \n. +function foldLine(line, width) { + if (line === '' || line[0] === ' ') return line; + + // Since a more-indented line adds a \n, breaks can't be followed by a space. + var breakRe = / [^ ]/g; // note: the match index will always be <= length-2. + var match; + // start is an inclusive index. end, curr, and next are exclusive. + var start = 0, end, curr = 0, next = 0; + var result = ''; + + // Invariants: 0 <= start <= length-1. + // 0 <= curr <= next <= max(0, length-2). curr - start <= width. + // Inside the loop: + // A match implies length >= 2, so curr and next are <= length-2. + while ((match = breakRe.exec(line))) { + next = match.index; + // maintain invariant: curr - start <= width + if (next - start > width) { + end = (curr > start) ? curr : next; // derive end <= length-2 + result += '\n' + line.slice(start, end); + // skip the space that was output as \n + start = end + 1; // derive start <= length-1 + } + curr = next; + } + + // By the invariants, start <= length-1, so there is something left over. + // It is either the whole string or a part starting from non-whitespace. + result += '\n'; + // Insert a break if the remainder is too long and there is a break available. + if (line.length - start > width && curr > start) { + result += line.slice(start, curr) + '\n' + line.slice(curr + 1); + } else { + result += line.slice(start); + } + + return result.slice(1); // drop extra \n joiner +} + +// Escapes a double-quoted string. +function escapeString(string) { + var result = ''; + var char = 0; + var escapeSeq; + + for (var i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) { + char = codePointAt(string, i); + escapeSeq = ESCAPE_SEQUENCES[char]; + + if (!escapeSeq && isPrintable(char)) { + result += string[i]; + if (char >= 0x10000) result += string[i + 1]; + } else { + result += escapeSeq || encodeHex(char); + } + } + + return result; +} + +function writeFlowSequence(state, level, object) { + var _result = '', + _tag = state.tag, + index, + length, + value; + + for (index = 0, length = object.length; index < length; index += 1) { + value = object[index]; + + if (state.replacer) { + value = state.replacer.call(object, String(index), value); + } + + // Write only valid elements, put null instead of invalid elements. + if (writeNode(state, level, value, false, false) || + (typeof value === 'undefined' && + writeNode(state, level, null, false, false))) { + + if (_result !== '') _result += ',' + (!state.condenseFlow ? ' ' : ''); + _result += state.dump; + } + } + + state.tag = _tag; + state.dump = '[' + _result + ']'; +} + +function writeBlockSequence(state, level, object, compact) { + var _result = '', + _tag = state.tag, + index, + length, + value; + + for (index = 0, length = object.length; index < length; index += 1) { + value = object[index]; + + if (state.replacer) { + value = state.replacer.call(object, String(index), value); + } + + // Write only valid elements, put null instead of invalid elements. + if (writeNode(state, level + 1, value, true, true, false, true) || + (typeof value === 'undefined' && + writeNode(state, level + 1, null, true, true, false, true))) { + + if (!compact || _result !== '') { + _result += generateNextLine(state, level); + } + + if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { + _result += '-'; + } else { + _result += '- '; + } + + _result += state.dump; + } + } + + state.tag = _tag; + state.dump = _result || '[]'; // Empty sequence if no valid values. +} + +function writeFlowMapping(state, level, object) { + var _result = '', + _tag = state.tag, + objectKeyList = Object.keys(object), + index, + length, + objectKey, + objectValue, + pairBuffer; + + for (index = 0, length = objectKeyList.length; index < length; index += 1) { + + pairBuffer = ''; + if (_result !== '') pairBuffer += ', '; + + if (state.condenseFlow) pairBuffer += '"'; + + objectKey = objectKeyList[index]; + objectValue = object[objectKey]; + + if (state.replacer) { + objectValue = state.replacer.call(object, objectKey, objectValue); + } + + if (!writeNode(state, level, objectKey, false, false)) { + continue; // Skip this pair because of invalid key; + } + + if (state.dump.length > 1024) pairBuffer += '? '; + + pairBuffer += state.dump + (state.condenseFlow ? '"' : '') + ':' + (state.condenseFlow ? '' : ' '); + + if (!writeNode(state, level, objectValue, false, false)) { + continue; // Skip this pair because of invalid value. + } + + pairBuffer += state.dump; + + // Both key and value are valid. + _result += pairBuffer; + } + + state.tag = _tag; + state.dump = '{' + _result + '}'; +} + +function writeBlockMapping(state, level, object, compact) { + var _result = '', + _tag = state.tag, + objectKeyList = Object.keys(object), + index, + length, + objectKey, + objectValue, + explicitPair, + pairBuffer; + + // Allow sorting keys so that the output file is deterministic + if (state.sortKeys === true) { + // Default sorting + objectKeyList.sort(); + } else if (typeof state.sortKeys === 'function') { + // Custom sort function + objectKeyList.sort(state.sortKeys); + } else if (state.sortKeys) { + // Something is wrong + throw new exception('sortKeys must be a boolean or a function'); + } + + for (index = 0, length = objectKeyList.length; index < length; index += 1) { + pairBuffer = ''; + + if (!compact || _result !== '') { + pairBuffer += generateNextLine(state, level); + } + + objectKey = objectKeyList[index]; + objectValue = object[objectKey]; + + if (state.replacer) { + objectValue = state.replacer.call(object, objectKey, objectValue); + } + + if (!writeNode(state, level + 1, objectKey, true, true, true)) { + continue; // Skip this pair because of invalid key. + } + + explicitPair = (state.tag !== null && state.tag !== '?') || + (state.dump && state.dump.length > 1024); + + if (explicitPair) { + if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { + pairBuffer += '?'; + } else { + pairBuffer += '? '; + } + } + + pairBuffer += state.dump; + + if (explicitPair) { + pairBuffer += generateNextLine(state, level); + } + + if (!writeNode(state, level + 1, objectValue, true, explicitPair)) { + continue; // Skip this pair because of invalid value. + } + + if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { + pairBuffer += ':'; + } else { + pairBuffer += ': '; + } + + pairBuffer += state.dump; + + // Both key and value are valid. + _result += pairBuffer; + } + + state.tag = _tag; + state.dump = _result || '{}'; // Empty mapping if no valid pairs. +} + +function detectType(state, object, explicit) { + var _result, typeList, index, length, type, style; + + typeList = explicit ? state.explicitTypes : state.implicitTypes; + + for (index = 0, length = typeList.length; index < length; index += 1) { + type = typeList[index]; + + if ((type.instanceOf || type.predicate) && + (!type.instanceOf || ((typeof object === 'object') && (object instanceof type.instanceOf))) && + (!type.predicate || type.predicate(object))) { + + if (explicit) { + if (type.multi && type.representName) { + state.tag = type.representName(object); + } else { + state.tag = type.tag; + } + } else { + state.tag = '?'; + } + + if (type.represent) { + style = state.styleMap[type.tag] || type.defaultStyle; + + if (_toString.call(type.represent) === '[object Function]') { + _result = type.represent(object, style); + } else if (_hasOwnProperty.call(type.represent, style)) { + _result = type.represent[style](object, style); + } else { + throw new exception('!<' + type.tag + '> tag resolver accepts not "' + style + '" style'); + } + + state.dump = _result; + } + + return true; + } + } + + return false; +} + +// Serializes `object` and writes it to global `result`. +// Returns true on success, or false on invalid object. +// +function writeNode(state, level, object, block, compact, iskey, isblockseq) { + state.tag = null; + state.dump = object; + + if (!detectType(state, object, false)) { + detectType(state, object, true); + } + + var type = _toString.call(state.dump); + var inblock = block; + var tagStr; + + if (block) { + block = (state.flowLevel < 0 || state.flowLevel > level); + } + + var objectOrArray = type === '[object Object]' || type === '[object Array]', + duplicateIndex, + duplicate; + + if (objectOrArray) { + duplicateIndex = state.duplicates.indexOf(object); + duplicate = duplicateIndex !== -1; + } + + if ((state.tag !== null && state.tag !== '?') || duplicate || (state.indent !== 2 && level > 0)) { + compact = false; + } + + if (duplicate && state.usedDuplicates[duplicateIndex]) { + state.dump = '*ref_' + duplicateIndex; + } else { + if (objectOrArray && duplicate && !state.usedDuplicates[duplicateIndex]) { + state.usedDuplicates[duplicateIndex] = true; + } + if (type === '[object Object]') { + if (block && (Object.keys(state.dump).length !== 0)) { + writeBlockMapping(state, level, state.dump, compact); + if (duplicate) { + state.dump = '&ref_' + duplicateIndex + state.dump; + } + } else { + writeFlowMapping(state, level, state.dump); + if (duplicate) { + state.dump = '&ref_' + duplicateIndex + ' ' + state.dump; + } + } + } else if (type === '[object Array]') { + if (block && (state.dump.length !== 0)) { + if (state.noArrayIndent && !isblockseq && level > 0) { + writeBlockSequence(state, level - 1, state.dump, compact); + } else { + writeBlockSequence(state, level, state.dump, compact); + } + if (duplicate) { + state.dump = '&ref_' + duplicateIndex + state.dump; + } + } else { + writeFlowSequence(state, level, state.dump); + if (duplicate) { + state.dump = '&ref_' + duplicateIndex + ' ' + state.dump; + } + } + } else if (type === '[object String]') { + if (state.tag !== '?') { + writeScalar(state, state.dump, level, iskey, inblock); + } + } else if (type === '[object Undefined]') { + return false; + } else { + if (state.skipInvalid) return false; + throw new exception('unacceptable kind of an object to dump ' + type); + } + + if (state.tag !== null && state.tag !== '?') { + // Need to encode all characters except those allowed by the spec: + // + // [35] ns-dec-digit ::= [#x30-#x39] /* 0-9 */ + // [36] ns-hex-digit ::= ns-dec-digit + // | [#x41-#x46] /* A-F */ | [#x61-#x66] /* a-f */ + // [37] ns-ascii-letter ::= [#x41-#x5A] /* A-Z */ | [#x61-#x7A] /* a-z */ + // [38] ns-word-char ::= ns-dec-digit | ns-ascii-letter | “-” + // [39] ns-uri-char ::= “%” ns-hex-digit ns-hex-digit | ns-word-char | “#” + // | “;” | “/” | “?” | “:” | “@” | “&” | “=” | “+” | “$” | “,” + // | “_” | “.” | “!” | “~” | “*” | “'” | “(” | “)” | “[” | “]” + // + // Also need to encode '!' because it has special meaning (end of tag prefix). + // + tagStr = encodeURI( + state.tag[0] === '!' ? state.tag.slice(1) : state.tag + ).replace(/!/g, '%21'); + + if (state.tag[0] === '!') { + tagStr = '!' + tagStr; + } else if (tagStr.slice(0, 18) === 'tag:yaml.org,2002:') { + tagStr = '!!' + tagStr.slice(18); + } else { + tagStr = '!<' + tagStr + '>'; + } + + state.dump = tagStr + ' ' + state.dump; + } + } + + return true; +} + +function getDuplicateReferences(object, state) { + var objects = [], + duplicatesIndexes = [], + index, + length; + + inspectNode(object, objects, duplicatesIndexes); + + for (index = 0, length = duplicatesIndexes.length; index < length; index += 1) { + state.duplicates.push(objects[duplicatesIndexes[index]]); + } + state.usedDuplicates = new Array(length); +} + +function inspectNode(object, objects, duplicatesIndexes) { + var objectKeyList, + index, + length; + + if (object !== null && typeof object === 'object') { + index = objects.indexOf(object); + if (index !== -1) { + if (duplicatesIndexes.indexOf(index) === -1) { + duplicatesIndexes.push(index); + } + } else { + objects.push(object); + + if (Array.isArray(object)) { + for (index = 0, length = object.length; index < length; index += 1) { + inspectNode(object[index], objects, duplicatesIndexes); + } + } else { + objectKeyList = Object.keys(object); + + for (index = 0, length = objectKeyList.length; index < length; index += 1) { + inspectNode(object[objectKeyList[index]], objects, duplicatesIndexes); + } + } + } + } +} + +function dump$1(input, options) { + options = options || {}; + + var state = new State(options); + + if (!state.noRefs) getDuplicateReferences(input, state); + + var value = input; + + if (state.replacer) { + value = state.replacer.call({ '': value }, '', value); + } + + if (writeNode(state, 0, value, true, true)) return state.dump + '\n'; + + return ''; +} + +var dump_1 = dump$1; + +var dumper = { + dump: dump_1 +}; + +function renamed(from, to) { + return function () { + throw new Error('Function yaml.' + from + ' is removed in js-yaml 4. ' + + 'Use yaml.' + to + ' instead, which is now safe by default.'); + }; +} + + +var Type = type; +var Schema = schema; +var FAILSAFE_SCHEMA = failsafe; +var JSON_SCHEMA = json; +var CORE_SCHEMA = core; +var DEFAULT_SCHEMA = _default; +var load = loader.load; +var loadAll = loader.loadAll; +var dump = dumper.dump; +var YAMLException = exception; + +// Re-export all types in case user wants to create custom schema +var types = { + binary: binary, + float: float, + map: map, + null: _null, + pairs: pairs, + set: set, + timestamp: timestamp, + bool: bool, + int: int, + merge: merge, + omap: omap, + seq: seq, + str: str +}; + +// Removed functions from JS-YAML 3.0.x +var safeLoad = renamed('safeLoad', 'load'); +var safeLoadAll = renamed('safeLoadAll', 'loadAll'); +var safeDump = renamed('safeDump', 'dump'); + +var jsYaml = { + Type: Type, + Schema: Schema, + FAILSAFE_SCHEMA: FAILSAFE_SCHEMA, + JSON_SCHEMA: JSON_SCHEMA, + CORE_SCHEMA: CORE_SCHEMA, + DEFAULT_SCHEMA: DEFAULT_SCHEMA, + load: load, + loadAll: loadAll, + dump: dump, + YAMLException: YAMLException, + types: types, + safeLoad: safeLoad, + safeLoadAll: safeLoadAll, + safeDump: safeDump +}; + +export default jsYaml; +export { CORE_SCHEMA, DEFAULT_SCHEMA, FAILSAFE_SCHEMA, JSON_SCHEMA, Schema, Type, YAMLException, dump, load, loadAll, safeDump, safeLoad, safeLoadAll, types }; diff --git a/node_modules/js-yaml/index.js b/node_modules/js-yaml/index.js new file mode 100644 index 00000000..bcb7eba7 --- /dev/null +++ b/node_modules/js-yaml/index.js @@ -0,0 +1,47 @@ +'use strict'; + + +var loader = require('./lib/loader'); +var dumper = require('./lib/dumper'); + + +function renamed(from, to) { + return function () { + throw new Error('Function yaml.' + from + ' is removed in js-yaml 4. ' + + 'Use yaml.' + to + ' instead, which is now safe by default.'); + }; +} + + +module.exports.Type = require('./lib/type'); +module.exports.Schema = require('./lib/schema'); +module.exports.FAILSAFE_SCHEMA = require('./lib/schema/failsafe'); +module.exports.JSON_SCHEMA = require('./lib/schema/json'); +module.exports.CORE_SCHEMA = require('./lib/schema/core'); +module.exports.DEFAULT_SCHEMA = require('./lib/schema/default'); +module.exports.load = loader.load; +module.exports.loadAll = loader.loadAll; +module.exports.dump = dumper.dump; +module.exports.YAMLException = require('./lib/exception'); + +// Re-export all types in case user wants to create custom schema +module.exports.types = { + binary: require('./lib/type/binary'), + float: require('./lib/type/float'), + map: require('./lib/type/map'), + null: require('./lib/type/null'), + pairs: require('./lib/type/pairs'), + set: require('./lib/type/set'), + timestamp: require('./lib/type/timestamp'), + bool: require('./lib/type/bool'), + int: require('./lib/type/int'), + merge: require('./lib/type/merge'), + omap: require('./lib/type/omap'), + seq: require('./lib/type/seq'), + str: require('./lib/type/str') +}; + +// Removed functions from JS-YAML 3.0.x +module.exports.safeLoad = renamed('safeLoad', 'load'); +module.exports.safeLoadAll = renamed('safeLoadAll', 'loadAll'); +module.exports.safeDump = renamed('safeDump', 'dump'); diff --git a/node_modules/js-yaml/lib/common.js b/node_modules/js-yaml/lib/common.js new file mode 100644 index 00000000..25ef7d8e --- /dev/null +++ b/node_modules/js-yaml/lib/common.js @@ -0,0 +1,59 @@ +'use strict'; + + +function isNothing(subject) { + return (typeof subject === 'undefined') || (subject === null); +} + + +function isObject(subject) { + return (typeof subject === 'object') && (subject !== null); +} + + +function toArray(sequence) { + if (Array.isArray(sequence)) return sequence; + else if (isNothing(sequence)) return []; + + return [ sequence ]; +} + + +function extend(target, source) { + var index, length, key, sourceKeys; + + if (source) { + sourceKeys = Object.keys(source); + + for (index = 0, length = sourceKeys.length; index < length; index += 1) { + key = sourceKeys[index]; + target[key] = source[key]; + } + } + + return target; +} + + +function repeat(string, count) { + var result = '', cycle; + + for (cycle = 0; cycle < count; cycle += 1) { + result += string; + } + + return result; +} + + +function isNegativeZero(number) { + return (number === 0) && (Number.NEGATIVE_INFINITY === 1 / number); +} + + +module.exports.isNothing = isNothing; +module.exports.isObject = isObject; +module.exports.toArray = toArray; +module.exports.repeat = repeat; +module.exports.isNegativeZero = isNegativeZero; +module.exports.extend = extend; diff --git a/node_modules/js-yaml/lib/dumper.js b/node_modules/js-yaml/lib/dumper.js new file mode 100644 index 00000000..f357a6ae --- /dev/null +++ b/node_modules/js-yaml/lib/dumper.js @@ -0,0 +1,965 @@ +'use strict'; + +/*eslint-disable no-use-before-define*/ + +var common = require('./common'); +var YAMLException = require('./exception'); +var DEFAULT_SCHEMA = require('./schema/default'); + +var _toString = Object.prototype.toString; +var _hasOwnProperty = Object.prototype.hasOwnProperty; + +var CHAR_BOM = 0xFEFF; +var CHAR_TAB = 0x09; /* Tab */ +var CHAR_LINE_FEED = 0x0A; /* LF */ +var CHAR_CARRIAGE_RETURN = 0x0D; /* CR */ +var CHAR_SPACE = 0x20; /* Space */ +var CHAR_EXCLAMATION = 0x21; /* ! */ +var CHAR_DOUBLE_QUOTE = 0x22; /* " */ +var CHAR_SHARP = 0x23; /* # */ +var CHAR_PERCENT = 0x25; /* % */ +var CHAR_AMPERSAND = 0x26; /* & */ +var CHAR_SINGLE_QUOTE = 0x27; /* ' */ +var CHAR_ASTERISK = 0x2A; /* * */ +var CHAR_COMMA = 0x2C; /* , */ +var CHAR_MINUS = 0x2D; /* - */ +var CHAR_COLON = 0x3A; /* : */ +var CHAR_EQUALS = 0x3D; /* = */ +var CHAR_GREATER_THAN = 0x3E; /* > */ +var CHAR_QUESTION = 0x3F; /* ? */ +var CHAR_COMMERCIAL_AT = 0x40; /* @ */ +var CHAR_LEFT_SQUARE_BRACKET = 0x5B; /* [ */ +var CHAR_RIGHT_SQUARE_BRACKET = 0x5D; /* ] */ +var CHAR_GRAVE_ACCENT = 0x60; /* ` */ +var CHAR_LEFT_CURLY_BRACKET = 0x7B; /* { */ +var CHAR_VERTICAL_LINE = 0x7C; /* | */ +var CHAR_RIGHT_CURLY_BRACKET = 0x7D; /* } */ + +var ESCAPE_SEQUENCES = {}; + +ESCAPE_SEQUENCES[0x00] = '\\0'; +ESCAPE_SEQUENCES[0x07] = '\\a'; +ESCAPE_SEQUENCES[0x08] = '\\b'; +ESCAPE_SEQUENCES[0x09] = '\\t'; +ESCAPE_SEQUENCES[0x0A] = '\\n'; +ESCAPE_SEQUENCES[0x0B] = '\\v'; +ESCAPE_SEQUENCES[0x0C] = '\\f'; +ESCAPE_SEQUENCES[0x0D] = '\\r'; +ESCAPE_SEQUENCES[0x1B] = '\\e'; +ESCAPE_SEQUENCES[0x22] = '\\"'; +ESCAPE_SEQUENCES[0x5C] = '\\\\'; +ESCAPE_SEQUENCES[0x85] = '\\N'; +ESCAPE_SEQUENCES[0xA0] = '\\_'; +ESCAPE_SEQUENCES[0x2028] = '\\L'; +ESCAPE_SEQUENCES[0x2029] = '\\P'; + +var DEPRECATED_BOOLEANS_SYNTAX = [ + 'y', 'Y', 'yes', 'Yes', 'YES', 'on', 'On', 'ON', + 'n', 'N', 'no', 'No', 'NO', 'off', 'Off', 'OFF' +]; + +var DEPRECATED_BASE60_SYNTAX = /^[-+]?[0-9_]+(?::[0-9_]+)+(?:\.[0-9_]*)?$/; + +function compileStyleMap(schema, map) { + var result, keys, index, length, tag, style, type; + + if (map === null) return {}; + + result = {}; + keys = Object.keys(map); + + for (index = 0, length = keys.length; index < length; index += 1) { + tag = keys[index]; + style = String(map[tag]); + + if (tag.slice(0, 2) === '!!') { + tag = 'tag:yaml.org,2002:' + tag.slice(2); + } + type = schema.compiledTypeMap['fallback'][tag]; + + if (type && _hasOwnProperty.call(type.styleAliases, style)) { + style = type.styleAliases[style]; + } + + result[tag] = style; + } + + return result; +} + +function encodeHex(character) { + var string, handle, length; + + string = character.toString(16).toUpperCase(); + + if (character <= 0xFF) { + handle = 'x'; + length = 2; + } else if (character <= 0xFFFF) { + handle = 'u'; + length = 4; + } else if (character <= 0xFFFFFFFF) { + handle = 'U'; + length = 8; + } else { + throw new YAMLException('code point within a string may not be greater than 0xFFFFFFFF'); + } + + return '\\' + handle + common.repeat('0', length - string.length) + string; +} + + +var QUOTING_TYPE_SINGLE = 1, + QUOTING_TYPE_DOUBLE = 2; + +function State(options) { + this.schema = options['schema'] || DEFAULT_SCHEMA; + this.indent = Math.max(1, (options['indent'] || 2)); + this.noArrayIndent = options['noArrayIndent'] || false; + this.skipInvalid = options['skipInvalid'] || false; + this.flowLevel = (common.isNothing(options['flowLevel']) ? -1 : options['flowLevel']); + this.styleMap = compileStyleMap(this.schema, options['styles'] || null); + this.sortKeys = options['sortKeys'] || false; + this.lineWidth = options['lineWidth'] || 80; + this.noRefs = options['noRefs'] || false; + this.noCompatMode = options['noCompatMode'] || false; + this.condenseFlow = options['condenseFlow'] || false; + this.quotingType = options['quotingType'] === '"' ? QUOTING_TYPE_DOUBLE : QUOTING_TYPE_SINGLE; + this.forceQuotes = options['forceQuotes'] || false; + this.replacer = typeof options['replacer'] === 'function' ? options['replacer'] : null; + + this.implicitTypes = this.schema.compiledImplicit; + this.explicitTypes = this.schema.compiledExplicit; + + this.tag = null; + this.result = ''; + + this.duplicates = []; + this.usedDuplicates = null; +} + +// Indents every line in a string. Empty lines (\n only) are not indented. +function indentString(string, spaces) { + var ind = common.repeat(' ', spaces), + position = 0, + next = -1, + result = '', + line, + length = string.length; + + while (position < length) { + next = string.indexOf('\n', position); + if (next === -1) { + line = string.slice(position); + position = length; + } else { + line = string.slice(position, next + 1); + position = next + 1; + } + + if (line.length && line !== '\n') result += ind; + + result += line; + } + + return result; +} + +function generateNextLine(state, level) { + return '\n' + common.repeat(' ', state.indent * level); +} + +function testImplicitResolving(state, str) { + var index, length, type; + + for (index = 0, length = state.implicitTypes.length; index < length; index += 1) { + type = state.implicitTypes[index]; + + if (type.resolve(str)) { + return true; + } + } + + return false; +} + +// [33] s-white ::= s-space | s-tab +function isWhitespace(c) { + return c === CHAR_SPACE || c === CHAR_TAB; +} + +// Returns true if the character can be printed without escaping. +// From YAML 1.2: "any allowed characters known to be non-printable +// should also be escaped. [However,] This isn’t mandatory" +// Derived from nb-char - \t - #x85 - #xA0 - #x2028 - #x2029. +function isPrintable(c) { + return (0x00020 <= c && c <= 0x00007E) + || ((0x000A1 <= c && c <= 0x00D7FF) && c !== 0x2028 && c !== 0x2029) + || ((0x0E000 <= c && c <= 0x00FFFD) && c !== CHAR_BOM) + || (0x10000 <= c && c <= 0x10FFFF); +} + +// [34] ns-char ::= nb-char - s-white +// [27] nb-char ::= c-printable - b-char - c-byte-order-mark +// [26] b-char ::= b-line-feed | b-carriage-return +// Including s-white (for some reason, examples doesn't match specs in this aspect) +// ns-char ::= c-printable - b-line-feed - b-carriage-return - c-byte-order-mark +function isNsCharOrWhitespace(c) { + return isPrintable(c) + && c !== CHAR_BOM + // - b-char + && c !== CHAR_CARRIAGE_RETURN + && c !== CHAR_LINE_FEED; +} + +// [127] ns-plain-safe(c) ::= c = flow-out ⇒ ns-plain-safe-out +// c = flow-in ⇒ ns-plain-safe-in +// c = block-key ⇒ ns-plain-safe-out +// c = flow-key ⇒ ns-plain-safe-in +// [128] ns-plain-safe-out ::= ns-char +// [129] ns-plain-safe-in ::= ns-char - c-flow-indicator +// [130] ns-plain-char(c) ::= ( ns-plain-safe(c) - “:” - “#” ) +// | ( /* An ns-char preceding */ “#” ) +// | ( “:” /* Followed by an ns-plain-safe(c) */ ) +function isPlainSafe(c, prev, inblock) { + var cIsNsCharOrWhitespace = isNsCharOrWhitespace(c); + var cIsNsChar = cIsNsCharOrWhitespace && !isWhitespace(c); + return ( + // ns-plain-safe + inblock ? // c = flow-in + cIsNsCharOrWhitespace + : cIsNsCharOrWhitespace + // - c-flow-indicator + && c !== CHAR_COMMA + && c !== CHAR_LEFT_SQUARE_BRACKET + && c !== CHAR_RIGHT_SQUARE_BRACKET + && c !== CHAR_LEFT_CURLY_BRACKET + && c !== CHAR_RIGHT_CURLY_BRACKET + ) + // ns-plain-char + && c !== CHAR_SHARP // false on '#' + && !(prev === CHAR_COLON && !cIsNsChar) // false on ': ' + || (isNsCharOrWhitespace(prev) && !isWhitespace(prev) && c === CHAR_SHARP) // change to true on '[^ ]#' + || (prev === CHAR_COLON && cIsNsChar); // change to true on ':[^ ]' +} + +// Simplified test for values allowed as the first character in plain style. +function isPlainSafeFirst(c) { + // Uses a subset of ns-char - c-indicator + // where ns-char = nb-char - s-white. + // No support of ( ( “?” | “:” | “-” ) /* Followed by an ns-plain-safe(c)) */ ) part + return isPrintable(c) && c !== CHAR_BOM + && !isWhitespace(c) // - s-white + // - (c-indicator ::= + // “-” | “?” | “:” | “,” | “[” | “]” | “{” | “}” + && c !== CHAR_MINUS + && c !== CHAR_QUESTION + && c !== CHAR_COLON + && c !== CHAR_COMMA + && c !== CHAR_LEFT_SQUARE_BRACKET + && c !== CHAR_RIGHT_SQUARE_BRACKET + && c !== CHAR_LEFT_CURLY_BRACKET + && c !== CHAR_RIGHT_CURLY_BRACKET + // | “#” | “&” | “*” | “!” | “|” | “=” | “>” | “'” | “"” + && c !== CHAR_SHARP + && c !== CHAR_AMPERSAND + && c !== CHAR_ASTERISK + && c !== CHAR_EXCLAMATION + && c !== CHAR_VERTICAL_LINE + && c !== CHAR_EQUALS + && c !== CHAR_GREATER_THAN + && c !== CHAR_SINGLE_QUOTE + && c !== CHAR_DOUBLE_QUOTE + // | “%” | “@” | “`”) + && c !== CHAR_PERCENT + && c !== CHAR_COMMERCIAL_AT + && c !== CHAR_GRAVE_ACCENT; +} + +// Simplified test for values allowed as the last character in plain style. +function isPlainSafeLast(c) { + // just not whitespace or colon, it will be checked to be plain character later + return !isWhitespace(c) && c !== CHAR_COLON; +} + +// Same as 'string'.codePointAt(pos), but works in older browsers. +function codePointAt(string, pos) { + var first = string.charCodeAt(pos), second; + if (first >= 0xD800 && first <= 0xDBFF && pos + 1 < string.length) { + second = string.charCodeAt(pos + 1); + if (second >= 0xDC00 && second <= 0xDFFF) { + // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae + return (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000; + } + } + return first; +} + +// Determines whether block indentation indicator is required. +function needIndentIndicator(string) { + var leadingSpaceRe = /^\n* /; + return leadingSpaceRe.test(string); +} + +var STYLE_PLAIN = 1, + STYLE_SINGLE = 2, + STYLE_LITERAL = 3, + STYLE_FOLDED = 4, + STYLE_DOUBLE = 5; + +// Determines which scalar styles are possible and returns the preferred style. +// lineWidth = -1 => no limit. +// Pre-conditions: str.length > 0. +// Post-conditions: +// STYLE_PLAIN or STYLE_SINGLE => no \n are in the string. +// STYLE_LITERAL => no lines are suitable for folding (or lineWidth is -1). +// STYLE_FOLDED => a line > lineWidth and can be folded (and lineWidth != -1). +function chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineWidth, + testAmbiguousType, quotingType, forceQuotes, inblock) { + + var i; + var char = 0; + var prevChar = null; + var hasLineBreak = false; + var hasFoldableLine = false; // only checked if shouldTrackWidth + var shouldTrackWidth = lineWidth !== -1; + var previousLineBreak = -1; // count the first line correctly + var plain = isPlainSafeFirst(codePointAt(string, 0)) + && isPlainSafeLast(codePointAt(string, string.length - 1)); + + if (singleLineOnly || forceQuotes) { + // Case: no block styles. + // Check for disallowed characters to rule out plain and single. + for (i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) { + char = codePointAt(string, i); + if (!isPrintable(char)) { + return STYLE_DOUBLE; + } + plain = plain && isPlainSafe(char, prevChar, inblock); + prevChar = char; + } + } else { + // Case: block styles permitted. + for (i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) { + char = codePointAt(string, i); + if (char === CHAR_LINE_FEED) { + hasLineBreak = true; + // Check if any line can be folded. + if (shouldTrackWidth) { + hasFoldableLine = hasFoldableLine || + // Foldable line = too long, and not more-indented. + (i - previousLineBreak - 1 > lineWidth && + string[previousLineBreak + 1] !== ' '); + previousLineBreak = i; + } + } else if (!isPrintable(char)) { + return STYLE_DOUBLE; + } + plain = plain && isPlainSafe(char, prevChar, inblock); + prevChar = char; + } + // in case the end is missing a \n + hasFoldableLine = hasFoldableLine || (shouldTrackWidth && + (i - previousLineBreak - 1 > lineWidth && + string[previousLineBreak + 1] !== ' ')); + } + // Although every style can represent \n without escaping, prefer block styles + // for multiline, since they're more readable and they don't add empty lines. + // Also prefer folding a super-long line. + if (!hasLineBreak && !hasFoldableLine) { + // Strings interpretable as another type have to be quoted; + // e.g. the string 'true' vs. the boolean true. + if (plain && !forceQuotes && !testAmbiguousType(string)) { + return STYLE_PLAIN; + } + return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE; + } + // Edge case: block indentation indicator can only have one digit. + if (indentPerLevel > 9 && needIndentIndicator(string)) { + return STYLE_DOUBLE; + } + // At this point we know block styles are valid. + // Prefer literal style unless we want to fold. + if (!forceQuotes) { + return hasFoldableLine ? STYLE_FOLDED : STYLE_LITERAL; + } + return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE; +} + +// Note: line breaking/folding is implemented for only the folded style. +// NB. We drop the last trailing newline (if any) of a returned block scalar +// since the dumper adds its own newline. This always works: +// • No ending newline => unaffected; already using strip "-" chomping. +// • Ending newline => removed then restored. +// Importantly, this keeps the "+" chomp indicator from gaining an extra line. +function writeScalar(state, string, level, iskey, inblock) { + state.dump = (function () { + if (string.length === 0) { + return state.quotingType === QUOTING_TYPE_DOUBLE ? '""' : "''"; + } + if (!state.noCompatMode) { + if (DEPRECATED_BOOLEANS_SYNTAX.indexOf(string) !== -1 || DEPRECATED_BASE60_SYNTAX.test(string)) { + return state.quotingType === QUOTING_TYPE_DOUBLE ? ('"' + string + '"') : ("'" + string + "'"); + } + } + + var indent = state.indent * Math.max(1, level); // no 0-indent scalars + // As indentation gets deeper, let the width decrease monotonically + // to the lower bound min(state.lineWidth, 40). + // Note that this implies + // state.lineWidth ≤ 40 + state.indent: width is fixed at the lower bound. + // state.lineWidth > 40 + state.indent: width decreases until the lower bound. + // This behaves better than a constant minimum width which disallows narrower options, + // or an indent threshold which causes the width to suddenly increase. + var lineWidth = state.lineWidth === -1 + ? -1 : Math.max(Math.min(state.lineWidth, 40), state.lineWidth - indent); + + // Without knowing if keys are implicit/explicit, assume implicit for safety. + var singleLineOnly = iskey + // No block styles in flow mode. + || (state.flowLevel > -1 && level >= state.flowLevel); + function testAmbiguity(string) { + return testImplicitResolving(state, string); + } + + switch (chooseScalarStyle(string, singleLineOnly, state.indent, lineWidth, + testAmbiguity, state.quotingType, state.forceQuotes && !iskey, inblock)) { + + case STYLE_PLAIN: + return string; + case STYLE_SINGLE: + return "'" + string.replace(/'/g, "''") + "'"; + case STYLE_LITERAL: + return '|' + blockHeader(string, state.indent) + + dropEndingNewline(indentString(string, indent)); + case STYLE_FOLDED: + return '>' + blockHeader(string, state.indent) + + dropEndingNewline(indentString(foldString(string, lineWidth), indent)); + case STYLE_DOUBLE: + return '"' + escapeString(string, lineWidth) + '"'; + default: + throw new YAMLException('impossible error: invalid scalar style'); + } + }()); +} + +// Pre-conditions: string is valid for a block scalar, 1 <= indentPerLevel <= 9. +function blockHeader(string, indentPerLevel) { + var indentIndicator = needIndentIndicator(string) ? String(indentPerLevel) : ''; + + // note the special case: the string '\n' counts as a "trailing" empty line. + var clip = string[string.length - 1] === '\n'; + var keep = clip && (string[string.length - 2] === '\n' || string === '\n'); + var chomp = keep ? '+' : (clip ? '' : '-'); + + return indentIndicator + chomp + '\n'; +} + +// (See the note for writeScalar.) +function dropEndingNewline(string) { + return string[string.length - 1] === '\n' ? string.slice(0, -1) : string; +} + +// Note: a long line without a suitable break point will exceed the width limit. +// Pre-conditions: every char in str isPrintable, str.length > 0, width > 0. +function foldString(string, width) { + // In folded style, $k$ consecutive newlines output as $k+1$ newlines— + // unless they're before or after a more-indented line, or at the very + // beginning or end, in which case $k$ maps to $k$. + // Therefore, parse each chunk as newline(s) followed by a content line. + var lineRe = /(\n+)([^\n]*)/g; + + // first line (possibly an empty line) + var result = (function () { + var nextLF = string.indexOf('\n'); + nextLF = nextLF !== -1 ? nextLF : string.length; + lineRe.lastIndex = nextLF; + return foldLine(string.slice(0, nextLF), width); + }()); + // If we haven't reached the first content line yet, don't add an extra \n. + var prevMoreIndented = string[0] === '\n' || string[0] === ' '; + var moreIndented; + + // rest of the lines + var match; + while ((match = lineRe.exec(string))) { + var prefix = match[1], line = match[2]; + moreIndented = (line[0] === ' '); + result += prefix + + (!prevMoreIndented && !moreIndented && line !== '' + ? '\n' : '') + + foldLine(line, width); + prevMoreIndented = moreIndented; + } + + return result; +} + +// Greedy line breaking. +// Picks the longest line under the limit each time, +// otherwise settles for the shortest line over the limit. +// NB. More-indented lines *cannot* be folded, as that would add an extra \n. +function foldLine(line, width) { + if (line === '' || line[0] === ' ') return line; + + // Since a more-indented line adds a \n, breaks can't be followed by a space. + var breakRe = / [^ ]/g; // note: the match index will always be <= length-2. + var match; + // start is an inclusive index. end, curr, and next are exclusive. + var start = 0, end, curr = 0, next = 0; + var result = ''; + + // Invariants: 0 <= start <= length-1. + // 0 <= curr <= next <= max(0, length-2). curr - start <= width. + // Inside the loop: + // A match implies length >= 2, so curr and next are <= length-2. + while ((match = breakRe.exec(line))) { + next = match.index; + // maintain invariant: curr - start <= width + if (next - start > width) { + end = (curr > start) ? curr : next; // derive end <= length-2 + result += '\n' + line.slice(start, end); + // skip the space that was output as \n + start = end + 1; // derive start <= length-1 + } + curr = next; + } + + // By the invariants, start <= length-1, so there is something left over. + // It is either the whole string or a part starting from non-whitespace. + result += '\n'; + // Insert a break if the remainder is too long and there is a break available. + if (line.length - start > width && curr > start) { + result += line.slice(start, curr) + '\n' + line.slice(curr + 1); + } else { + result += line.slice(start); + } + + return result.slice(1); // drop extra \n joiner +} + +// Escapes a double-quoted string. +function escapeString(string) { + var result = ''; + var char = 0; + var escapeSeq; + + for (var i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) { + char = codePointAt(string, i); + escapeSeq = ESCAPE_SEQUENCES[char]; + + if (!escapeSeq && isPrintable(char)) { + result += string[i]; + if (char >= 0x10000) result += string[i + 1]; + } else { + result += escapeSeq || encodeHex(char); + } + } + + return result; +} + +function writeFlowSequence(state, level, object) { + var _result = '', + _tag = state.tag, + index, + length, + value; + + for (index = 0, length = object.length; index < length; index += 1) { + value = object[index]; + + if (state.replacer) { + value = state.replacer.call(object, String(index), value); + } + + // Write only valid elements, put null instead of invalid elements. + if (writeNode(state, level, value, false, false) || + (typeof value === 'undefined' && + writeNode(state, level, null, false, false))) { + + if (_result !== '') _result += ',' + (!state.condenseFlow ? ' ' : ''); + _result += state.dump; + } + } + + state.tag = _tag; + state.dump = '[' + _result + ']'; +} + +function writeBlockSequence(state, level, object, compact) { + var _result = '', + _tag = state.tag, + index, + length, + value; + + for (index = 0, length = object.length; index < length; index += 1) { + value = object[index]; + + if (state.replacer) { + value = state.replacer.call(object, String(index), value); + } + + // Write only valid elements, put null instead of invalid elements. + if (writeNode(state, level + 1, value, true, true, false, true) || + (typeof value === 'undefined' && + writeNode(state, level + 1, null, true, true, false, true))) { + + if (!compact || _result !== '') { + _result += generateNextLine(state, level); + } + + if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { + _result += '-'; + } else { + _result += '- '; + } + + _result += state.dump; + } + } + + state.tag = _tag; + state.dump = _result || '[]'; // Empty sequence if no valid values. +} + +function writeFlowMapping(state, level, object) { + var _result = '', + _tag = state.tag, + objectKeyList = Object.keys(object), + index, + length, + objectKey, + objectValue, + pairBuffer; + + for (index = 0, length = objectKeyList.length; index < length; index += 1) { + + pairBuffer = ''; + if (_result !== '') pairBuffer += ', '; + + if (state.condenseFlow) pairBuffer += '"'; + + objectKey = objectKeyList[index]; + objectValue = object[objectKey]; + + if (state.replacer) { + objectValue = state.replacer.call(object, objectKey, objectValue); + } + + if (!writeNode(state, level, objectKey, false, false)) { + continue; // Skip this pair because of invalid key; + } + + if (state.dump.length > 1024) pairBuffer += '? '; + + pairBuffer += state.dump + (state.condenseFlow ? '"' : '') + ':' + (state.condenseFlow ? '' : ' '); + + if (!writeNode(state, level, objectValue, false, false)) { + continue; // Skip this pair because of invalid value. + } + + pairBuffer += state.dump; + + // Both key and value are valid. + _result += pairBuffer; + } + + state.tag = _tag; + state.dump = '{' + _result + '}'; +} + +function writeBlockMapping(state, level, object, compact) { + var _result = '', + _tag = state.tag, + objectKeyList = Object.keys(object), + index, + length, + objectKey, + objectValue, + explicitPair, + pairBuffer; + + // Allow sorting keys so that the output file is deterministic + if (state.sortKeys === true) { + // Default sorting + objectKeyList.sort(); + } else if (typeof state.sortKeys === 'function') { + // Custom sort function + objectKeyList.sort(state.sortKeys); + } else if (state.sortKeys) { + // Something is wrong + throw new YAMLException('sortKeys must be a boolean or a function'); + } + + for (index = 0, length = objectKeyList.length; index < length; index += 1) { + pairBuffer = ''; + + if (!compact || _result !== '') { + pairBuffer += generateNextLine(state, level); + } + + objectKey = objectKeyList[index]; + objectValue = object[objectKey]; + + if (state.replacer) { + objectValue = state.replacer.call(object, objectKey, objectValue); + } + + if (!writeNode(state, level + 1, objectKey, true, true, true)) { + continue; // Skip this pair because of invalid key. + } + + explicitPair = (state.tag !== null && state.tag !== '?') || + (state.dump && state.dump.length > 1024); + + if (explicitPair) { + if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { + pairBuffer += '?'; + } else { + pairBuffer += '? '; + } + } + + pairBuffer += state.dump; + + if (explicitPair) { + pairBuffer += generateNextLine(state, level); + } + + if (!writeNode(state, level + 1, objectValue, true, explicitPair)) { + continue; // Skip this pair because of invalid value. + } + + if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { + pairBuffer += ':'; + } else { + pairBuffer += ': '; + } + + pairBuffer += state.dump; + + // Both key and value are valid. + _result += pairBuffer; + } + + state.tag = _tag; + state.dump = _result || '{}'; // Empty mapping if no valid pairs. +} + +function detectType(state, object, explicit) { + var _result, typeList, index, length, type, style; + + typeList = explicit ? state.explicitTypes : state.implicitTypes; + + for (index = 0, length = typeList.length; index < length; index += 1) { + type = typeList[index]; + + if ((type.instanceOf || type.predicate) && + (!type.instanceOf || ((typeof object === 'object') && (object instanceof type.instanceOf))) && + (!type.predicate || type.predicate(object))) { + + if (explicit) { + if (type.multi && type.representName) { + state.tag = type.representName(object); + } else { + state.tag = type.tag; + } + } else { + state.tag = '?'; + } + + if (type.represent) { + style = state.styleMap[type.tag] || type.defaultStyle; + + if (_toString.call(type.represent) === '[object Function]') { + _result = type.represent(object, style); + } else if (_hasOwnProperty.call(type.represent, style)) { + _result = type.represent[style](object, style); + } else { + throw new YAMLException('!<' + type.tag + '> tag resolver accepts not "' + style + '" style'); + } + + state.dump = _result; + } + + return true; + } + } + + return false; +} + +// Serializes `object` and writes it to global `result`. +// Returns true on success, or false on invalid object. +// +function writeNode(state, level, object, block, compact, iskey, isblockseq) { + state.tag = null; + state.dump = object; + + if (!detectType(state, object, false)) { + detectType(state, object, true); + } + + var type = _toString.call(state.dump); + var inblock = block; + var tagStr; + + if (block) { + block = (state.flowLevel < 0 || state.flowLevel > level); + } + + var objectOrArray = type === '[object Object]' || type === '[object Array]', + duplicateIndex, + duplicate; + + if (objectOrArray) { + duplicateIndex = state.duplicates.indexOf(object); + duplicate = duplicateIndex !== -1; + } + + if ((state.tag !== null && state.tag !== '?') || duplicate || (state.indent !== 2 && level > 0)) { + compact = false; + } + + if (duplicate && state.usedDuplicates[duplicateIndex]) { + state.dump = '*ref_' + duplicateIndex; + } else { + if (objectOrArray && duplicate && !state.usedDuplicates[duplicateIndex]) { + state.usedDuplicates[duplicateIndex] = true; + } + if (type === '[object Object]') { + if (block && (Object.keys(state.dump).length !== 0)) { + writeBlockMapping(state, level, state.dump, compact); + if (duplicate) { + state.dump = '&ref_' + duplicateIndex + state.dump; + } + } else { + writeFlowMapping(state, level, state.dump); + if (duplicate) { + state.dump = '&ref_' + duplicateIndex + ' ' + state.dump; + } + } + } else if (type === '[object Array]') { + if (block && (state.dump.length !== 0)) { + if (state.noArrayIndent && !isblockseq && level > 0) { + writeBlockSequence(state, level - 1, state.dump, compact); + } else { + writeBlockSequence(state, level, state.dump, compact); + } + if (duplicate) { + state.dump = '&ref_' + duplicateIndex + state.dump; + } + } else { + writeFlowSequence(state, level, state.dump); + if (duplicate) { + state.dump = '&ref_' + duplicateIndex + ' ' + state.dump; + } + } + } else if (type === '[object String]') { + if (state.tag !== '?') { + writeScalar(state, state.dump, level, iskey, inblock); + } + } else if (type === '[object Undefined]') { + return false; + } else { + if (state.skipInvalid) return false; + throw new YAMLException('unacceptable kind of an object to dump ' + type); + } + + if (state.tag !== null && state.tag !== '?') { + // Need to encode all characters except those allowed by the spec: + // + // [35] ns-dec-digit ::= [#x30-#x39] /* 0-9 */ + // [36] ns-hex-digit ::= ns-dec-digit + // | [#x41-#x46] /* A-F */ | [#x61-#x66] /* a-f */ + // [37] ns-ascii-letter ::= [#x41-#x5A] /* A-Z */ | [#x61-#x7A] /* a-z */ + // [38] ns-word-char ::= ns-dec-digit | ns-ascii-letter | “-” + // [39] ns-uri-char ::= “%” ns-hex-digit ns-hex-digit | ns-word-char | “#” + // | “;” | “/” | “?” | “:” | “@” | “&” | “=” | “+” | “$” | “,” + // | “_” | “.” | “!” | “~” | “*” | “'” | “(” | “)” | “[” | “]” + // + // Also need to encode '!' because it has special meaning (end of tag prefix). + // + tagStr = encodeURI( + state.tag[0] === '!' ? state.tag.slice(1) : state.tag + ).replace(/!/g, '%21'); + + if (state.tag[0] === '!') { + tagStr = '!' + tagStr; + } else if (tagStr.slice(0, 18) === 'tag:yaml.org,2002:') { + tagStr = '!!' + tagStr.slice(18); + } else { + tagStr = '!<' + tagStr + '>'; + } + + state.dump = tagStr + ' ' + state.dump; + } + } + + return true; +} + +function getDuplicateReferences(object, state) { + var objects = [], + duplicatesIndexes = [], + index, + length; + + inspectNode(object, objects, duplicatesIndexes); + + for (index = 0, length = duplicatesIndexes.length; index < length; index += 1) { + state.duplicates.push(objects[duplicatesIndexes[index]]); + } + state.usedDuplicates = new Array(length); +} + +function inspectNode(object, objects, duplicatesIndexes) { + var objectKeyList, + index, + length; + + if (object !== null && typeof object === 'object') { + index = objects.indexOf(object); + if (index !== -1) { + if (duplicatesIndexes.indexOf(index) === -1) { + duplicatesIndexes.push(index); + } + } else { + objects.push(object); + + if (Array.isArray(object)) { + for (index = 0, length = object.length; index < length; index += 1) { + inspectNode(object[index], objects, duplicatesIndexes); + } + } else { + objectKeyList = Object.keys(object); + + for (index = 0, length = objectKeyList.length; index < length; index += 1) { + inspectNode(object[objectKeyList[index]], objects, duplicatesIndexes); + } + } + } + } +} + +function dump(input, options) { + options = options || {}; + + var state = new State(options); + + if (!state.noRefs) getDuplicateReferences(input, state); + + var value = input; + + if (state.replacer) { + value = state.replacer.call({ '': value }, '', value); + } + + if (writeNode(state, 0, value, true, true)) return state.dump + '\n'; + + return ''; +} + +module.exports.dump = dump; diff --git a/node_modules/js-yaml/lib/exception.js b/node_modules/js-yaml/lib/exception.js new file mode 100644 index 00000000..7f62daae --- /dev/null +++ b/node_modules/js-yaml/lib/exception.js @@ -0,0 +1,55 @@ +// YAML error class. http://stackoverflow.com/questions/8458984 +// +'use strict'; + + +function formatError(exception, compact) { + var where = '', message = exception.reason || '(unknown reason)'; + + if (!exception.mark) return message; + + if (exception.mark.name) { + where += 'in "' + exception.mark.name + '" '; + } + + where += '(' + (exception.mark.line + 1) + ':' + (exception.mark.column + 1) + ')'; + + if (!compact && exception.mark.snippet) { + where += '\n\n' + exception.mark.snippet; + } + + return message + ' ' + where; +} + + +function YAMLException(reason, mark) { + // Super constructor + Error.call(this); + + this.name = 'YAMLException'; + this.reason = reason; + this.mark = mark; + this.message = formatError(this, false); + + // Include stack trace in error object + if (Error.captureStackTrace) { + // Chrome and NodeJS + Error.captureStackTrace(this, this.constructor); + } else { + // FF, IE 10+ and Safari 6+. Fallback for others + this.stack = (new Error()).stack || ''; + } +} + + +// Inherit from Error +YAMLException.prototype = Object.create(Error.prototype); +YAMLException.prototype.constructor = YAMLException; + + +YAMLException.prototype.toString = function toString(compact) { + return this.name + ': ' + formatError(this, compact); +}; + + +module.exports = YAMLException; diff --git a/node_modules/js-yaml/lib/loader.js b/node_modules/js-yaml/lib/loader.js new file mode 100644 index 00000000..39f13f56 --- /dev/null +++ b/node_modules/js-yaml/lib/loader.js @@ -0,0 +1,1727 @@ +'use strict'; + +/*eslint-disable max-len,no-use-before-define*/ + +var common = require('./common'); +var YAMLException = require('./exception'); +var makeSnippet = require('./snippet'); +var DEFAULT_SCHEMA = require('./schema/default'); + + +var _hasOwnProperty = Object.prototype.hasOwnProperty; + + +var CONTEXT_FLOW_IN = 1; +var CONTEXT_FLOW_OUT = 2; +var CONTEXT_BLOCK_IN = 3; +var CONTEXT_BLOCK_OUT = 4; + + +var CHOMPING_CLIP = 1; +var CHOMPING_STRIP = 2; +var CHOMPING_KEEP = 3; + + +var PATTERN_NON_PRINTABLE = /[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; +var PATTERN_NON_ASCII_LINE_BREAKS = /[\x85\u2028\u2029]/; +var PATTERN_FLOW_INDICATORS = /[,\[\]\{\}]/; +var PATTERN_TAG_HANDLE = /^(?:!|!!|![a-z\-]+!)$/i; +var PATTERN_TAG_URI = /^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i; + + +function _class(obj) { return Object.prototype.toString.call(obj); } + +function is_EOL(c) { + return (c === 0x0A/* LF */) || (c === 0x0D/* CR */); +} + +function is_WHITE_SPACE(c) { + return (c === 0x09/* Tab */) || (c === 0x20/* Space */); +} + +function is_WS_OR_EOL(c) { + return (c === 0x09/* Tab */) || + (c === 0x20/* Space */) || + (c === 0x0A/* LF */) || + (c === 0x0D/* CR */); +} + +function is_FLOW_INDICATOR(c) { + return c === 0x2C/* , */ || + c === 0x5B/* [ */ || + c === 0x5D/* ] */ || + c === 0x7B/* { */ || + c === 0x7D/* } */; +} + +function fromHexCode(c) { + var lc; + + if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) { + return c - 0x30; + } + + /*eslint-disable no-bitwise*/ + lc = c | 0x20; + + if ((0x61/* a */ <= lc) && (lc <= 0x66/* f */)) { + return lc - 0x61 + 10; + } + + return -1; +} + +function escapedHexLen(c) { + if (c === 0x78/* x */) { return 2; } + if (c === 0x75/* u */) { return 4; } + if (c === 0x55/* U */) { return 8; } + return 0; +} + +function fromDecimalCode(c) { + if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) { + return c - 0x30; + } + + return -1; +} + +function simpleEscapeSequence(c) { + /* eslint-disable indent */ + return (c === 0x30/* 0 */) ? '\x00' : + (c === 0x61/* a */) ? '\x07' : + (c === 0x62/* b */) ? '\x08' : + (c === 0x74/* t */) ? '\x09' : + (c === 0x09/* Tab */) ? '\x09' : + (c === 0x6E/* n */) ? '\x0A' : + (c === 0x76/* v */) ? '\x0B' : + (c === 0x66/* f */) ? '\x0C' : + (c === 0x72/* r */) ? '\x0D' : + (c === 0x65/* e */) ? '\x1B' : + (c === 0x20/* Space */) ? ' ' : + (c === 0x22/* " */) ? '\x22' : + (c === 0x2F/* / */) ? '/' : + (c === 0x5C/* \ */) ? '\x5C' : + (c === 0x4E/* N */) ? '\x85' : + (c === 0x5F/* _ */) ? '\xA0' : + (c === 0x4C/* L */) ? '\u2028' : + (c === 0x50/* P */) ? '\u2029' : ''; +} + +function charFromCodepoint(c) { + if (c <= 0xFFFF) { + return String.fromCharCode(c); + } + // Encode UTF-16 surrogate pair + // https://en.wikipedia.org/wiki/UTF-16#Code_points_U.2B010000_to_U.2B10FFFF + return String.fromCharCode( + ((c - 0x010000) >> 10) + 0xD800, + ((c - 0x010000) & 0x03FF) + 0xDC00 + ); +} + +var simpleEscapeCheck = new Array(256); // integer, for fast access +var simpleEscapeMap = new Array(256); +for (var i = 0; i < 256; i++) { + simpleEscapeCheck[i] = simpleEscapeSequence(i) ? 1 : 0; + simpleEscapeMap[i] = simpleEscapeSequence(i); +} + + +function State(input, options) { + this.input = input; + + this.filename = options['filename'] || null; + this.schema = options['schema'] || DEFAULT_SCHEMA; + this.onWarning = options['onWarning'] || null; + // (Hidden) Remove? makes the loader to expect YAML 1.1 documents + // if such documents have no explicit %YAML directive + this.legacy = options['legacy'] || false; + + this.json = options['json'] || false; + this.listener = options['listener'] || null; + + this.implicitTypes = this.schema.compiledImplicit; + this.typeMap = this.schema.compiledTypeMap; + + this.length = input.length; + this.position = 0; + this.line = 0; + this.lineStart = 0; + this.lineIndent = 0; + + // position of first leading tab in the current line, + // used to make sure there are no tabs in the indentation + this.firstTabInLine = -1; + + this.documents = []; + + /* + this.version; + this.checkLineBreaks; + this.tagMap; + this.anchorMap; + this.tag; + this.anchor; + this.kind; + this.result;*/ + +} + + +function generateError(state, message) { + var mark = { + name: state.filename, + buffer: state.input.slice(0, -1), // omit trailing \0 + position: state.position, + line: state.line, + column: state.position - state.lineStart + }; + + mark.snippet = makeSnippet(mark); + + return new YAMLException(message, mark); +} + +function throwError(state, message) { + throw generateError(state, message); +} + +function throwWarning(state, message) { + if (state.onWarning) { + state.onWarning.call(null, generateError(state, message)); + } +} + + +var directiveHandlers = { + + YAML: function handleYamlDirective(state, name, args) { + + var match, major, minor; + + if (state.version !== null) { + throwError(state, 'duplication of %YAML directive'); + } + + if (args.length !== 1) { + throwError(state, 'YAML directive accepts exactly one argument'); + } + + match = /^([0-9]+)\.([0-9]+)$/.exec(args[0]); + + if (match === null) { + throwError(state, 'ill-formed argument of the YAML directive'); + } + + major = parseInt(match[1], 10); + minor = parseInt(match[2], 10); + + if (major !== 1) { + throwError(state, 'unacceptable YAML version of the document'); + } + + state.version = args[0]; + state.checkLineBreaks = (minor < 2); + + if (minor !== 1 && minor !== 2) { + throwWarning(state, 'unsupported YAML version of the document'); + } + }, + + TAG: function handleTagDirective(state, name, args) { + + var handle, prefix; + + if (args.length !== 2) { + throwError(state, 'TAG directive accepts exactly two arguments'); + } + + handle = args[0]; + prefix = args[1]; + + if (!PATTERN_TAG_HANDLE.test(handle)) { + throwError(state, 'ill-formed tag handle (first argument) of the TAG directive'); + } + + if (_hasOwnProperty.call(state.tagMap, handle)) { + throwError(state, 'there is a previously declared suffix for "' + handle + '" tag handle'); + } + + if (!PATTERN_TAG_URI.test(prefix)) { + throwError(state, 'ill-formed tag prefix (second argument) of the TAG directive'); + } + + try { + prefix = decodeURIComponent(prefix); + } catch (err) { + throwError(state, 'tag prefix is malformed: ' + prefix); + } + + state.tagMap[handle] = prefix; + } +}; + + +function captureSegment(state, start, end, checkJson) { + var _position, _length, _character, _result; + + if (start < end) { + _result = state.input.slice(start, end); + + if (checkJson) { + for (_position = 0, _length = _result.length; _position < _length; _position += 1) { + _character = _result.charCodeAt(_position); + if (!(_character === 0x09 || + (0x20 <= _character && _character <= 0x10FFFF))) { + throwError(state, 'expected valid JSON character'); + } + } + } else if (PATTERN_NON_PRINTABLE.test(_result)) { + throwError(state, 'the stream contains non-printable characters'); + } + + state.result += _result; + } +} + +function mergeMappings(state, destination, source, overridableKeys) { + var sourceKeys, key, index, quantity; + + if (!common.isObject(source)) { + throwError(state, 'cannot merge mappings; the provided source object is unacceptable'); + } + + sourceKeys = Object.keys(source); + + for (index = 0, quantity = sourceKeys.length; index < quantity; index += 1) { + key = sourceKeys[index]; + + if (!_hasOwnProperty.call(destination, key)) { + destination[key] = source[key]; + overridableKeys[key] = true; + } + } +} + +function storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, + startLine, startLineStart, startPos) { + + var index, quantity; + + // The output is a plain object here, so keys can only be strings. + // We need to convert keyNode to a string, but doing so can hang the process + // (deeply nested arrays that explode exponentially using aliases). + if (Array.isArray(keyNode)) { + keyNode = Array.prototype.slice.call(keyNode); + + for (index = 0, quantity = keyNode.length; index < quantity; index += 1) { + if (Array.isArray(keyNode[index])) { + throwError(state, 'nested arrays are not supported inside keys'); + } + + if (typeof keyNode === 'object' && _class(keyNode[index]) === '[object Object]') { + keyNode[index] = '[object Object]'; + } + } + } + + // Avoid code execution in load() via toString property + // (still use its own toString for arrays, timestamps, + // and whatever user schema extensions happen to have @@toStringTag) + if (typeof keyNode === 'object' && _class(keyNode) === '[object Object]') { + keyNode = '[object Object]'; + } + + + keyNode = String(keyNode); + + if (_result === null) { + _result = {}; + } + + if (keyTag === 'tag:yaml.org,2002:merge') { + if (Array.isArray(valueNode)) { + for (index = 0, quantity = valueNode.length; index < quantity; index += 1) { + mergeMappings(state, _result, valueNode[index], overridableKeys); + } + } else { + mergeMappings(state, _result, valueNode, overridableKeys); + } + } else { + if (!state.json && + !_hasOwnProperty.call(overridableKeys, keyNode) && + _hasOwnProperty.call(_result, keyNode)) { + state.line = startLine || state.line; + state.lineStart = startLineStart || state.lineStart; + state.position = startPos || state.position; + throwError(state, 'duplicated mapping key'); + } + + // used for this specific key only because Object.defineProperty is slow + if (keyNode === '__proto__') { + Object.defineProperty(_result, keyNode, { + configurable: true, + enumerable: true, + writable: true, + value: valueNode + }); + } else { + _result[keyNode] = valueNode; + } + delete overridableKeys[keyNode]; + } + + return _result; +} + +function readLineBreak(state) { + var ch; + + ch = state.input.charCodeAt(state.position); + + if (ch === 0x0A/* LF */) { + state.position++; + } else if (ch === 0x0D/* CR */) { + state.position++; + if (state.input.charCodeAt(state.position) === 0x0A/* LF */) { + state.position++; + } + } else { + throwError(state, 'a line break is expected'); + } + + state.line += 1; + state.lineStart = state.position; + state.firstTabInLine = -1; +} + +function skipSeparationSpace(state, allowComments, checkIndent) { + var lineBreaks = 0, + ch = state.input.charCodeAt(state.position); + + while (ch !== 0) { + while (is_WHITE_SPACE(ch)) { + if (ch === 0x09/* Tab */ && state.firstTabInLine === -1) { + state.firstTabInLine = state.position; + } + ch = state.input.charCodeAt(++state.position); + } + + if (allowComments && ch === 0x23/* # */) { + do { + ch = state.input.charCodeAt(++state.position); + } while (ch !== 0x0A/* LF */ && ch !== 0x0D/* CR */ && ch !== 0); + } + + if (is_EOL(ch)) { + readLineBreak(state); + + ch = state.input.charCodeAt(state.position); + lineBreaks++; + state.lineIndent = 0; + + while (ch === 0x20/* Space */) { + state.lineIndent++; + ch = state.input.charCodeAt(++state.position); + } + } else { + break; + } + } + + if (checkIndent !== -1 && lineBreaks !== 0 && state.lineIndent < checkIndent) { + throwWarning(state, 'deficient indentation'); + } + + return lineBreaks; +} + +function testDocumentSeparator(state) { + var _position = state.position, + ch; + + ch = state.input.charCodeAt(_position); + + // Condition state.position === state.lineStart is tested + // in parent on each call, for efficiency. No needs to test here again. + if ((ch === 0x2D/* - */ || ch === 0x2E/* . */) && + ch === state.input.charCodeAt(_position + 1) && + ch === state.input.charCodeAt(_position + 2)) { + + _position += 3; + + ch = state.input.charCodeAt(_position); + + if (ch === 0 || is_WS_OR_EOL(ch)) { + return true; + } + } + + return false; +} + +function writeFoldedLines(state, count) { + if (count === 1) { + state.result += ' '; + } else if (count > 1) { + state.result += common.repeat('\n', count - 1); + } +} + + +function readPlainScalar(state, nodeIndent, withinFlowCollection) { + var preceding, + following, + captureStart, + captureEnd, + hasPendingContent, + _line, + _lineStart, + _lineIndent, + _kind = state.kind, + _result = state.result, + ch; + + ch = state.input.charCodeAt(state.position); + + if (is_WS_OR_EOL(ch) || + is_FLOW_INDICATOR(ch) || + ch === 0x23/* # */ || + ch === 0x26/* & */ || + ch === 0x2A/* * */ || + ch === 0x21/* ! */ || + ch === 0x7C/* | */ || + ch === 0x3E/* > */ || + ch === 0x27/* ' */ || + ch === 0x22/* " */ || + ch === 0x25/* % */ || + ch === 0x40/* @ */ || + ch === 0x60/* ` */) { + return false; + } + + if (ch === 0x3F/* ? */ || ch === 0x2D/* - */) { + following = state.input.charCodeAt(state.position + 1); + + if (is_WS_OR_EOL(following) || + withinFlowCollection && is_FLOW_INDICATOR(following)) { + return false; + } + } + + state.kind = 'scalar'; + state.result = ''; + captureStart = captureEnd = state.position; + hasPendingContent = false; + + while (ch !== 0) { + if (ch === 0x3A/* : */) { + following = state.input.charCodeAt(state.position + 1); + + if (is_WS_OR_EOL(following) || + withinFlowCollection && is_FLOW_INDICATOR(following)) { + break; + } + + } else if (ch === 0x23/* # */) { + preceding = state.input.charCodeAt(state.position - 1); + + if (is_WS_OR_EOL(preceding)) { + break; + } + + } else if ((state.position === state.lineStart && testDocumentSeparator(state)) || + withinFlowCollection && is_FLOW_INDICATOR(ch)) { + break; + + } else if (is_EOL(ch)) { + _line = state.line; + _lineStart = state.lineStart; + _lineIndent = state.lineIndent; + skipSeparationSpace(state, false, -1); + + if (state.lineIndent >= nodeIndent) { + hasPendingContent = true; + ch = state.input.charCodeAt(state.position); + continue; + } else { + state.position = captureEnd; + state.line = _line; + state.lineStart = _lineStart; + state.lineIndent = _lineIndent; + break; + } + } + + if (hasPendingContent) { + captureSegment(state, captureStart, captureEnd, false); + writeFoldedLines(state, state.line - _line); + captureStart = captureEnd = state.position; + hasPendingContent = false; + } + + if (!is_WHITE_SPACE(ch)) { + captureEnd = state.position + 1; + } + + ch = state.input.charCodeAt(++state.position); + } + + captureSegment(state, captureStart, captureEnd, false); + + if (state.result) { + return true; + } + + state.kind = _kind; + state.result = _result; + return false; +} + +function readSingleQuotedScalar(state, nodeIndent) { + var ch, + captureStart, captureEnd; + + ch = state.input.charCodeAt(state.position); + + if (ch !== 0x27/* ' */) { + return false; + } + + state.kind = 'scalar'; + state.result = ''; + state.position++; + captureStart = captureEnd = state.position; + + while ((ch = state.input.charCodeAt(state.position)) !== 0) { + if (ch === 0x27/* ' */) { + captureSegment(state, captureStart, state.position, true); + ch = state.input.charCodeAt(++state.position); + + if (ch === 0x27/* ' */) { + captureStart = state.position; + state.position++; + captureEnd = state.position; + } else { + return true; + } + + } else if (is_EOL(ch)) { + captureSegment(state, captureStart, captureEnd, true); + writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent)); + captureStart = captureEnd = state.position; + + } else if (state.position === state.lineStart && testDocumentSeparator(state)) { + throwError(state, 'unexpected end of the document within a single quoted scalar'); + + } else { + state.position++; + captureEnd = state.position; + } + } + + throwError(state, 'unexpected end of the stream within a single quoted scalar'); +} + +function readDoubleQuotedScalar(state, nodeIndent) { + var captureStart, + captureEnd, + hexLength, + hexResult, + tmp, + ch; + + ch = state.input.charCodeAt(state.position); + + if (ch !== 0x22/* " */) { + return false; + } + + state.kind = 'scalar'; + state.result = ''; + state.position++; + captureStart = captureEnd = state.position; + + while ((ch = state.input.charCodeAt(state.position)) !== 0) { + if (ch === 0x22/* " */) { + captureSegment(state, captureStart, state.position, true); + state.position++; + return true; + + } else if (ch === 0x5C/* \ */) { + captureSegment(state, captureStart, state.position, true); + ch = state.input.charCodeAt(++state.position); + + if (is_EOL(ch)) { + skipSeparationSpace(state, false, nodeIndent); + + // TODO: rework to inline fn with no type cast? + } else if (ch < 256 && simpleEscapeCheck[ch]) { + state.result += simpleEscapeMap[ch]; + state.position++; + + } else if ((tmp = escapedHexLen(ch)) > 0) { + hexLength = tmp; + hexResult = 0; + + for (; hexLength > 0; hexLength--) { + ch = state.input.charCodeAt(++state.position); + + if ((tmp = fromHexCode(ch)) >= 0) { + hexResult = (hexResult << 4) + tmp; + + } else { + throwError(state, 'expected hexadecimal character'); + } + } + + state.result += charFromCodepoint(hexResult); + + state.position++; + + } else { + throwError(state, 'unknown escape sequence'); + } + + captureStart = captureEnd = state.position; + + } else if (is_EOL(ch)) { + captureSegment(state, captureStart, captureEnd, true); + writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent)); + captureStart = captureEnd = state.position; + + } else if (state.position === state.lineStart && testDocumentSeparator(state)) { + throwError(state, 'unexpected end of the document within a double quoted scalar'); + + } else { + state.position++; + captureEnd = state.position; + } + } + + throwError(state, 'unexpected end of the stream within a double quoted scalar'); +} + +function readFlowCollection(state, nodeIndent) { + var readNext = true, + _line, + _lineStart, + _pos, + _tag = state.tag, + _result, + _anchor = state.anchor, + following, + terminator, + isPair, + isExplicitPair, + isMapping, + overridableKeys = Object.create(null), + keyNode, + keyTag, + valueNode, + ch; + + ch = state.input.charCodeAt(state.position); + + if (ch === 0x5B/* [ */) { + terminator = 0x5D;/* ] */ + isMapping = false; + _result = []; + } else if (ch === 0x7B/* { */) { + terminator = 0x7D;/* } */ + isMapping = true; + _result = {}; + } else { + return false; + } + + if (state.anchor !== null) { + state.anchorMap[state.anchor] = _result; + } + + ch = state.input.charCodeAt(++state.position); + + while (ch !== 0) { + skipSeparationSpace(state, true, nodeIndent); + + ch = state.input.charCodeAt(state.position); + + if (ch === terminator) { + state.position++; + state.tag = _tag; + state.anchor = _anchor; + state.kind = isMapping ? 'mapping' : 'sequence'; + state.result = _result; + return true; + } else if (!readNext) { + throwError(state, 'missed comma between flow collection entries'); + } else if (ch === 0x2C/* , */) { + // "flow collection entries can never be completely empty", as per YAML 1.2, section 7.4 + throwError(state, "expected the node content, but found ','"); + } + + keyTag = keyNode = valueNode = null; + isPair = isExplicitPair = false; + + if (ch === 0x3F/* ? */) { + following = state.input.charCodeAt(state.position + 1); + + if (is_WS_OR_EOL(following)) { + isPair = isExplicitPair = true; + state.position++; + skipSeparationSpace(state, true, nodeIndent); + } + } + + _line = state.line; // Save the current line. + _lineStart = state.lineStart; + _pos = state.position; + composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true); + keyTag = state.tag; + keyNode = state.result; + skipSeparationSpace(state, true, nodeIndent); + + ch = state.input.charCodeAt(state.position); + + if ((isExplicitPair || state.line === _line) && ch === 0x3A/* : */) { + isPair = true; + ch = state.input.charCodeAt(++state.position); + skipSeparationSpace(state, true, nodeIndent); + composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true); + valueNode = state.result; + } + + if (isMapping) { + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos); + } else if (isPair) { + _result.push(storeMappingPair(state, null, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos)); + } else { + _result.push(keyNode); + } + + skipSeparationSpace(state, true, nodeIndent); + + ch = state.input.charCodeAt(state.position); + + if (ch === 0x2C/* , */) { + readNext = true; + ch = state.input.charCodeAt(++state.position); + } else { + readNext = false; + } + } + + throwError(state, 'unexpected end of the stream within a flow collection'); +} + +function readBlockScalar(state, nodeIndent) { + var captureStart, + folding, + chomping = CHOMPING_CLIP, + didReadContent = false, + detectedIndent = false, + textIndent = nodeIndent, + emptyLines = 0, + atMoreIndented = false, + tmp, + ch; + + ch = state.input.charCodeAt(state.position); + + if (ch === 0x7C/* | */) { + folding = false; + } else if (ch === 0x3E/* > */) { + folding = true; + } else { + return false; + } + + state.kind = 'scalar'; + state.result = ''; + + while (ch !== 0) { + ch = state.input.charCodeAt(++state.position); + + if (ch === 0x2B/* + */ || ch === 0x2D/* - */) { + if (CHOMPING_CLIP === chomping) { + chomping = (ch === 0x2B/* + */) ? CHOMPING_KEEP : CHOMPING_STRIP; + } else { + throwError(state, 'repeat of a chomping mode identifier'); + } + + } else if ((tmp = fromDecimalCode(ch)) >= 0) { + if (tmp === 0) { + throwError(state, 'bad explicit indentation width of a block scalar; it cannot be less than one'); + } else if (!detectedIndent) { + textIndent = nodeIndent + tmp - 1; + detectedIndent = true; + } else { + throwError(state, 'repeat of an indentation width identifier'); + } + + } else { + break; + } + } + + if (is_WHITE_SPACE(ch)) { + do { ch = state.input.charCodeAt(++state.position); } + while (is_WHITE_SPACE(ch)); + + if (ch === 0x23/* # */) { + do { ch = state.input.charCodeAt(++state.position); } + while (!is_EOL(ch) && (ch !== 0)); + } + } + + while (ch !== 0) { + readLineBreak(state); + state.lineIndent = 0; + + ch = state.input.charCodeAt(state.position); + + while ((!detectedIndent || state.lineIndent < textIndent) && + (ch === 0x20/* Space */)) { + state.lineIndent++; + ch = state.input.charCodeAt(++state.position); + } + + if (!detectedIndent && state.lineIndent > textIndent) { + textIndent = state.lineIndent; + } + + if (is_EOL(ch)) { + emptyLines++; + continue; + } + + // End of the scalar. + if (state.lineIndent < textIndent) { + + // Perform the chomping. + if (chomping === CHOMPING_KEEP) { + state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); + } else if (chomping === CHOMPING_CLIP) { + if (didReadContent) { // i.e. only if the scalar is not empty. + state.result += '\n'; + } + } + + // Break this `while` cycle and go to the funciton's epilogue. + break; + } + + // Folded style: use fancy rules to handle line breaks. + if (folding) { + + // Lines starting with white space characters (more-indented lines) are not folded. + if (is_WHITE_SPACE(ch)) { + atMoreIndented = true; + // except for the first content line (cf. Example 8.1) + state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); + + // End of more-indented block. + } else if (atMoreIndented) { + atMoreIndented = false; + state.result += common.repeat('\n', emptyLines + 1); + + // Just one line break - perceive as the same line. + } else if (emptyLines === 0) { + if (didReadContent) { // i.e. only if we have already read some scalar content. + state.result += ' '; + } + + // Several line breaks - perceive as different lines. + } else { + state.result += common.repeat('\n', emptyLines); + } + + // Literal style: just add exact number of line breaks between content lines. + } else { + // Keep all line breaks except the header line break. + state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); + } + + didReadContent = true; + detectedIndent = true; + emptyLines = 0; + captureStart = state.position; + + while (!is_EOL(ch) && (ch !== 0)) { + ch = state.input.charCodeAt(++state.position); + } + + captureSegment(state, captureStart, state.position, false); + } + + return true; +} + +function readBlockSequence(state, nodeIndent) { + var _line, + _tag = state.tag, + _anchor = state.anchor, + _result = [], + following, + detected = false, + ch; + + // there is a leading tab before this token, so it can't be a block sequence/mapping; + // it can still be flow sequence/mapping or a scalar + if (state.firstTabInLine !== -1) return false; + + if (state.anchor !== null) { + state.anchorMap[state.anchor] = _result; + } + + ch = state.input.charCodeAt(state.position); + + while (ch !== 0) { + if (state.firstTabInLine !== -1) { + state.position = state.firstTabInLine; + throwError(state, 'tab characters must not be used in indentation'); + } + + if (ch !== 0x2D/* - */) { + break; + } + + following = state.input.charCodeAt(state.position + 1); + + if (!is_WS_OR_EOL(following)) { + break; + } + + detected = true; + state.position++; + + if (skipSeparationSpace(state, true, -1)) { + if (state.lineIndent <= nodeIndent) { + _result.push(null); + ch = state.input.charCodeAt(state.position); + continue; + } + } + + _line = state.line; + composeNode(state, nodeIndent, CONTEXT_BLOCK_IN, false, true); + _result.push(state.result); + skipSeparationSpace(state, true, -1); + + ch = state.input.charCodeAt(state.position); + + if ((state.line === _line || state.lineIndent > nodeIndent) && (ch !== 0)) { + throwError(state, 'bad indentation of a sequence entry'); + } else if (state.lineIndent < nodeIndent) { + break; + } + } + + if (detected) { + state.tag = _tag; + state.anchor = _anchor; + state.kind = 'sequence'; + state.result = _result; + return true; + } + return false; +} + +function readBlockMapping(state, nodeIndent, flowIndent) { + var following, + allowCompact, + _line, + _keyLine, + _keyLineStart, + _keyPos, + _tag = state.tag, + _anchor = state.anchor, + _result = {}, + overridableKeys = Object.create(null), + keyTag = null, + keyNode = null, + valueNode = null, + atExplicitKey = false, + detected = false, + ch; + + // there is a leading tab before this token, so it can't be a block sequence/mapping; + // it can still be flow sequence/mapping or a scalar + if (state.firstTabInLine !== -1) return false; + + if (state.anchor !== null) { + state.anchorMap[state.anchor] = _result; + } + + ch = state.input.charCodeAt(state.position); + + while (ch !== 0) { + if (!atExplicitKey && state.firstTabInLine !== -1) { + state.position = state.firstTabInLine; + throwError(state, 'tab characters must not be used in indentation'); + } + + following = state.input.charCodeAt(state.position + 1); + _line = state.line; // Save the current line. + + // + // Explicit notation case. There are two separate blocks: + // first for the key (denoted by "?") and second for the value (denoted by ":") + // + if ((ch === 0x3F/* ? */ || ch === 0x3A/* : */) && is_WS_OR_EOL(following)) { + + if (ch === 0x3F/* ? */) { + if (atExplicitKey) { + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos); + keyTag = keyNode = valueNode = null; + } + + detected = true; + atExplicitKey = true; + allowCompact = true; + + } else if (atExplicitKey) { + // i.e. 0x3A/* : */ === character after the explicit key. + atExplicitKey = false; + allowCompact = true; + + } else { + throwError(state, 'incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line'); + } + + state.position += 1; + ch = following; + + // + // Implicit notation case. Flow-style node as the key first, then ":", and the value. + // + } else { + _keyLine = state.line; + _keyLineStart = state.lineStart; + _keyPos = state.position; + + if (!composeNode(state, flowIndent, CONTEXT_FLOW_OUT, false, true)) { + // Neither implicit nor explicit notation. + // Reading is done. Go to the epilogue. + break; + } + + if (state.line === _line) { + ch = state.input.charCodeAt(state.position); + + while (is_WHITE_SPACE(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + if (ch === 0x3A/* : */) { + ch = state.input.charCodeAt(++state.position); + + if (!is_WS_OR_EOL(ch)) { + throwError(state, 'a whitespace character is expected after the key-value separator within a block mapping'); + } + + if (atExplicitKey) { + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos); + keyTag = keyNode = valueNode = null; + } + + detected = true; + atExplicitKey = false; + allowCompact = false; + keyTag = state.tag; + keyNode = state.result; + + } else if (detected) { + throwError(state, 'can not read an implicit mapping pair; a colon is missed'); + + } else { + state.tag = _tag; + state.anchor = _anchor; + return true; // Keep the result of `composeNode`. + } + + } else if (detected) { + throwError(state, 'can not read a block mapping entry; a multiline key may not be an implicit key'); + + } else { + state.tag = _tag; + state.anchor = _anchor; + return true; // Keep the result of `composeNode`. + } + } + + // + // Common reading code for both explicit and implicit notations. + // + if (state.line === _line || state.lineIndent > nodeIndent) { + if (atExplicitKey) { + _keyLine = state.line; + _keyLineStart = state.lineStart; + _keyPos = state.position; + } + + if (composeNode(state, nodeIndent, CONTEXT_BLOCK_OUT, true, allowCompact)) { + if (atExplicitKey) { + keyNode = state.result; + } else { + valueNode = state.result; + } + } + + if (!atExplicitKey) { + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _keyLine, _keyLineStart, _keyPos); + keyTag = keyNode = valueNode = null; + } + + skipSeparationSpace(state, true, -1); + ch = state.input.charCodeAt(state.position); + } + + if ((state.line === _line || state.lineIndent > nodeIndent) && (ch !== 0)) { + throwError(state, 'bad indentation of a mapping entry'); + } else if (state.lineIndent < nodeIndent) { + break; + } + } + + // + // Epilogue. + // + + // Special case: last mapping's node contains only the key in explicit notation. + if (atExplicitKey) { + storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos); + } + + // Expose the resulting mapping. + if (detected) { + state.tag = _tag; + state.anchor = _anchor; + state.kind = 'mapping'; + state.result = _result; + } + + return detected; +} + +function readTagProperty(state) { + var _position, + isVerbatim = false, + isNamed = false, + tagHandle, + tagName, + ch; + + ch = state.input.charCodeAt(state.position); + + if (ch !== 0x21/* ! */) return false; + + if (state.tag !== null) { + throwError(state, 'duplication of a tag property'); + } + + ch = state.input.charCodeAt(++state.position); + + if (ch === 0x3C/* < */) { + isVerbatim = true; + ch = state.input.charCodeAt(++state.position); + + } else if (ch === 0x21/* ! */) { + isNamed = true; + tagHandle = '!!'; + ch = state.input.charCodeAt(++state.position); + + } else { + tagHandle = '!'; + } + + _position = state.position; + + if (isVerbatim) { + do { ch = state.input.charCodeAt(++state.position); } + while (ch !== 0 && ch !== 0x3E/* > */); + + if (state.position < state.length) { + tagName = state.input.slice(_position, state.position); + ch = state.input.charCodeAt(++state.position); + } else { + throwError(state, 'unexpected end of the stream within a verbatim tag'); + } + } else { + while (ch !== 0 && !is_WS_OR_EOL(ch)) { + + if (ch === 0x21/* ! */) { + if (!isNamed) { + tagHandle = state.input.slice(_position - 1, state.position + 1); + + if (!PATTERN_TAG_HANDLE.test(tagHandle)) { + throwError(state, 'named tag handle cannot contain such characters'); + } + + isNamed = true; + _position = state.position + 1; + } else { + throwError(state, 'tag suffix cannot contain exclamation marks'); + } + } + + ch = state.input.charCodeAt(++state.position); + } + + tagName = state.input.slice(_position, state.position); + + if (PATTERN_FLOW_INDICATORS.test(tagName)) { + throwError(state, 'tag suffix cannot contain flow indicator characters'); + } + } + + if (tagName && !PATTERN_TAG_URI.test(tagName)) { + throwError(state, 'tag name cannot contain such characters: ' + tagName); + } + + try { + tagName = decodeURIComponent(tagName); + } catch (err) { + throwError(state, 'tag name is malformed: ' + tagName); + } + + if (isVerbatim) { + state.tag = tagName; + + } else if (_hasOwnProperty.call(state.tagMap, tagHandle)) { + state.tag = state.tagMap[tagHandle] + tagName; + + } else if (tagHandle === '!') { + state.tag = '!' + tagName; + + } else if (tagHandle === '!!') { + state.tag = 'tag:yaml.org,2002:' + tagName; + + } else { + throwError(state, 'undeclared tag handle "' + tagHandle + '"'); + } + + return true; +} + +function readAnchorProperty(state) { + var _position, + ch; + + ch = state.input.charCodeAt(state.position); + + if (ch !== 0x26/* & */) return false; + + if (state.anchor !== null) { + throwError(state, 'duplication of an anchor property'); + } + + ch = state.input.charCodeAt(++state.position); + _position = state.position; + + while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + if (state.position === _position) { + throwError(state, 'name of an anchor node must contain at least one character'); + } + + state.anchor = state.input.slice(_position, state.position); + return true; +} + +function readAlias(state) { + var _position, alias, + ch; + + ch = state.input.charCodeAt(state.position); + + if (ch !== 0x2A/* * */) return false; + + ch = state.input.charCodeAt(++state.position); + _position = state.position; + + while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + if (state.position === _position) { + throwError(state, 'name of an alias node must contain at least one character'); + } + + alias = state.input.slice(_position, state.position); + + if (!_hasOwnProperty.call(state.anchorMap, alias)) { + throwError(state, 'unidentified alias "' + alias + '"'); + } + + state.result = state.anchorMap[alias]; + skipSeparationSpace(state, true, -1); + return true; +} + +function composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact) { + var allowBlockStyles, + allowBlockScalars, + allowBlockCollections, + indentStatus = 1, // 1: this>parent, 0: this=parent, -1: this parentIndent) { + indentStatus = 1; + } else if (state.lineIndent === parentIndent) { + indentStatus = 0; + } else if (state.lineIndent < parentIndent) { + indentStatus = -1; + } + } + } + + if (indentStatus === 1) { + while (readTagProperty(state) || readAnchorProperty(state)) { + if (skipSeparationSpace(state, true, -1)) { + atNewLine = true; + allowBlockCollections = allowBlockStyles; + + if (state.lineIndent > parentIndent) { + indentStatus = 1; + } else if (state.lineIndent === parentIndent) { + indentStatus = 0; + } else if (state.lineIndent < parentIndent) { + indentStatus = -1; + } + } else { + allowBlockCollections = false; + } + } + } + + if (allowBlockCollections) { + allowBlockCollections = atNewLine || allowCompact; + } + + if (indentStatus === 1 || CONTEXT_BLOCK_OUT === nodeContext) { + if (CONTEXT_FLOW_IN === nodeContext || CONTEXT_FLOW_OUT === nodeContext) { + flowIndent = parentIndent; + } else { + flowIndent = parentIndent + 1; + } + + blockIndent = state.position - state.lineStart; + + if (indentStatus === 1) { + if (allowBlockCollections && + (readBlockSequence(state, blockIndent) || + readBlockMapping(state, blockIndent, flowIndent)) || + readFlowCollection(state, flowIndent)) { + hasContent = true; + } else { + if ((allowBlockScalars && readBlockScalar(state, flowIndent)) || + readSingleQuotedScalar(state, flowIndent) || + readDoubleQuotedScalar(state, flowIndent)) { + hasContent = true; + + } else if (readAlias(state)) { + hasContent = true; + + if (state.tag !== null || state.anchor !== null) { + throwError(state, 'alias node should not have any properties'); + } + + } else if (readPlainScalar(state, flowIndent, CONTEXT_FLOW_IN === nodeContext)) { + hasContent = true; + + if (state.tag === null) { + state.tag = '?'; + } + } + + if (state.anchor !== null) { + state.anchorMap[state.anchor] = state.result; + } + } + } else if (indentStatus === 0) { + // Special case: block sequences are allowed to have same indentation level as the parent. + // http://www.yaml.org/spec/1.2/spec.html#id2799784 + hasContent = allowBlockCollections && readBlockSequence(state, blockIndent); + } + } + + if (state.tag === null) { + if (state.anchor !== null) { + state.anchorMap[state.anchor] = state.result; + } + + } else if (state.tag === '?') { + // Implicit resolving is not allowed for non-scalar types, and '?' + // non-specific tag is only automatically assigned to plain scalars. + // + // We only need to check kind conformity in case user explicitly assigns '?' + // tag, for example like this: "! [0]" + // + if (state.result !== null && state.kind !== 'scalar') { + throwError(state, 'unacceptable node kind for ! tag; it should be "scalar", not "' + state.kind + '"'); + } + + for (typeIndex = 0, typeQuantity = state.implicitTypes.length; typeIndex < typeQuantity; typeIndex += 1) { + type = state.implicitTypes[typeIndex]; + + if (type.resolve(state.result)) { // `state.result` updated in resolver if matched + state.result = type.construct(state.result); + state.tag = type.tag; + if (state.anchor !== null) { + state.anchorMap[state.anchor] = state.result; + } + break; + } + } + } else if (state.tag !== '!') { + if (_hasOwnProperty.call(state.typeMap[state.kind || 'fallback'], state.tag)) { + type = state.typeMap[state.kind || 'fallback'][state.tag]; + } else { + // looking for multi type + type = null; + typeList = state.typeMap.multi[state.kind || 'fallback']; + + for (typeIndex = 0, typeQuantity = typeList.length; typeIndex < typeQuantity; typeIndex += 1) { + if (state.tag.slice(0, typeList[typeIndex].tag.length) === typeList[typeIndex].tag) { + type = typeList[typeIndex]; + break; + } + } + } + + if (!type) { + throwError(state, 'unknown tag !<' + state.tag + '>'); + } + + if (state.result !== null && type.kind !== state.kind) { + throwError(state, 'unacceptable node kind for !<' + state.tag + '> tag; it should be "' + type.kind + '", not "' + state.kind + '"'); + } + + if (!type.resolve(state.result, state.tag)) { // `state.result` updated in resolver if matched + throwError(state, 'cannot resolve a node with !<' + state.tag + '> explicit tag'); + } else { + state.result = type.construct(state.result, state.tag); + if (state.anchor !== null) { + state.anchorMap[state.anchor] = state.result; + } + } + } + + if (state.listener !== null) { + state.listener('close', state); + } + return state.tag !== null || state.anchor !== null || hasContent; +} + +function readDocument(state) { + var documentStart = state.position, + _position, + directiveName, + directiveArgs, + hasDirectives = false, + ch; + + state.version = null; + state.checkLineBreaks = state.legacy; + state.tagMap = Object.create(null); + state.anchorMap = Object.create(null); + + while ((ch = state.input.charCodeAt(state.position)) !== 0) { + skipSeparationSpace(state, true, -1); + + ch = state.input.charCodeAt(state.position); + + if (state.lineIndent > 0 || ch !== 0x25/* % */) { + break; + } + + hasDirectives = true; + ch = state.input.charCodeAt(++state.position); + _position = state.position; + + while (ch !== 0 && !is_WS_OR_EOL(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + directiveName = state.input.slice(_position, state.position); + directiveArgs = []; + + if (directiveName.length < 1) { + throwError(state, 'directive name must not be less than one character in length'); + } + + while (ch !== 0) { + while (is_WHITE_SPACE(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + if (ch === 0x23/* # */) { + do { ch = state.input.charCodeAt(++state.position); } + while (ch !== 0 && !is_EOL(ch)); + break; + } + + if (is_EOL(ch)) break; + + _position = state.position; + + while (ch !== 0 && !is_WS_OR_EOL(ch)) { + ch = state.input.charCodeAt(++state.position); + } + + directiveArgs.push(state.input.slice(_position, state.position)); + } + + if (ch !== 0) readLineBreak(state); + + if (_hasOwnProperty.call(directiveHandlers, directiveName)) { + directiveHandlers[directiveName](state, directiveName, directiveArgs); + } else { + throwWarning(state, 'unknown document directive "' + directiveName + '"'); + } + } + + skipSeparationSpace(state, true, -1); + + if (state.lineIndent === 0 && + state.input.charCodeAt(state.position) === 0x2D/* - */ && + state.input.charCodeAt(state.position + 1) === 0x2D/* - */ && + state.input.charCodeAt(state.position + 2) === 0x2D/* - */) { + state.position += 3; + skipSeparationSpace(state, true, -1); + + } else if (hasDirectives) { + throwError(state, 'directives end mark is expected'); + } + + composeNode(state, state.lineIndent - 1, CONTEXT_BLOCK_OUT, false, true); + skipSeparationSpace(state, true, -1); + + if (state.checkLineBreaks && + PATTERN_NON_ASCII_LINE_BREAKS.test(state.input.slice(documentStart, state.position))) { + throwWarning(state, 'non-ASCII line breaks are interpreted as content'); + } + + state.documents.push(state.result); + + if (state.position === state.lineStart && testDocumentSeparator(state)) { + + if (state.input.charCodeAt(state.position) === 0x2E/* . */) { + state.position += 3; + skipSeparationSpace(state, true, -1); + } + return; + } + + if (state.position < (state.length - 1)) { + throwError(state, 'end of the stream or a document separator is expected'); + } else { + return; + } +} + + +function loadDocuments(input, options) { + input = String(input); + options = options || {}; + + if (input.length !== 0) { + + // Add tailing `\n` if not exists + if (input.charCodeAt(input.length - 1) !== 0x0A/* LF */ && + input.charCodeAt(input.length - 1) !== 0x0D/* CR */) { + input += '\n'; + } + + // Strip BOM + if (input.charCodeAt(0) === 0xFEFF) { + input = input.slice(1); + } + } + + var state = new State(input, options); + + var nullpos = input.indexOf('\0'); + + if (nullpos !== -1) { + state.position = nullpos; + throwError(state, 'null byte is not allowed in input'); + } + + // Use 0 as string terminator. That significantly simplifies bounds check. + state.input += '\0'; + + while (state.input.charCodeAt(state.position) === 0x20/* Space */) { + state.lineIndent += 1; + state.position += 1; + } + + while (state.position < (state.length - 1)) { + readDocument(state); + } + + return state.documents; +} + + +function loadAll(input, iterator, options) { + if (iterator !== null && typeof iterator === 'object' && typeof options === 'undefined') { + options = iterator; + iterator = null; + } + + var documents = loadDocuments(input, options); + + if (typeof iterator !== 'function') { + return documents; + } + + for (var index = 0, length = documents.length; index < length; index += 1) { + iterator(documents[index]); + } +} + + +function load(input, options) { + var documents = loadDocuments(input, options); + + if (documents.length === 0) { + /*eslint-disable no-undefined*/ + return undefined; + } else if (documents.length === 1) { + return documents[0]; + } + throw new YAMLException('expected a single document in the stream, but found more'); +} + + +module.exports.loadAll = loadAll; +module.exports.load = load; diff --git a/node_modules/js-yaml/lib/schema.js b/node_modules/js-yaml/lib/schema.js new file mode 100644 index 00000000..65b41f40 --- /dev/null +++ b/node_modules/js-yaml/lib/schema.js @@ -0,0 +1,121 @@ +'use strict'; + +/*eslint-disable max-len*/ + +var YAMLException = require('./exception'); +var Type = require('./type'); + + +function compileList(schema, name) { + var result = []; + + schema[name].forEach(function (currentType) { + var newIndex = result.length; + + result.forEach(function (previousType, previousIndex) { + if (previousType.tag === currentType.tag && + previousType.kind === currentType.kind && + previousType.multi === currentType.multi) { + + newIndex = previousIndex; + } + }); + + result[newIndex] = currentType; + }); + + return result; +} + + +function compileMap(/* lists... */) { + var result = { + scalar: {}, + sequence: {}, + mapping: {}, + fallback: {}, + multi: { + scalar: [], + sequence: [], + mapping: [], + fallback: [] + } + }, index, length; + + function collectType(type) { + if (type.multi) { + result.multi[type.kind].push(type); + result.multi['fallback'].push(type); + } else { + result[type.kind][type.tag] = result['fallback'][type.tag] = type; + } + } + + for (index = 0, length = arguments.length; index < length; index += 1) { + arguments[index].forEach(collectType); + } + return result; +} + + +function Schema(definition) { + return this.extend(definition); +} + + +Schema.prototype.extend = function extend(definition) { + var implicit = []; + var explicit = []; + + if (definition instanceof Type) { + // Schema.extend(type) + explicit.push(definition); + + } else if (Array.isArray(definition)) { + // Schema.extend([ type1, type2, ... ]) + explicit = explicit.concat(definition); + + } else if (definition && (Array.isArray(definition.implicit) || Array.isArray(definition.explicit))) { + // Schema.extend({ explicit: [ type1, type2, ... ], implicit: [ type1, type2, ... ] }) + if (definition.implicit) implicit = implicit.concat(definition.implicit); + if (definition.explicit) explicit = explicit.concat(definition.explicit); + + } else { + throw new YAMLException('Schema.extend argument should be a Type, [ Type ], ' + + 'or a schema definition ({ implicit: [...], explicit: [...] })'); + } + + implicit.forEach(function (type) { + if (!(type instanceof Type)) { + throw new YAMLException('Specified list of YAML types (or a single Type object) contains a non-Type object.'); + } + + if (type.loadKind && type.loadKind !== 'scalar') { + throw new YAMLException('There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.'); + } + + if (type.multi) { + throw new YAMLException('There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.'); + } + }); + + explicit.forEach(function (type) { + if (!(type instanceof Type)) { + throw new YAMLException('Specified list of YAML types (or a single Type object) contains a non-Type object.'); + } + }); + + var result = Object.create(Schema.prototype); + + result.implicit = (this.implicit || []).concat(implicit); + result.explicit = (this.explicit || []).concat(explicit); + + result.compiledImplicit = compileList(result, 'implicit'); + result.compiledExplicit = compileList(result, 'explicit'); + result.compiledTypeMap = compileMap(result.compiledImplicit, result.compiledExplicit); + + return result; +}; + + +module.exports = Schema; diff --git a/node_modules/js-yaml/lib/schema/core.js b/node_modules/js-yaml/lib/schema/core.js new file mode 100644 index 00000000..608b26de --- /dev/null +++ b/node_modules/js-yaml/lib/schema/core.js @@ -0,0 +1,11 @@ +// Standard YAML's Core schema. +// http://www.yaml.org/spec/1.2/spec.html#id2804923 +// +// NOTE: JS-YAML does not support schema-specific tag resolution restrictions. +// So, Core schema has no distinctions from JSON schema is JS-YAML. + + +'use strict'; + + +module.exports = require('./json'); diff --git a/node_modules/js-yaml/lib/schema/default.js b/node_modules/js-yaml/lib/schema/default.js new file mode 100644 index 00000000..3af0520d --- /dev/null +++ b/node_modules/js-yaml/lib/schema/default.js @@ -0,0 +1,22 @@ +// JS-YAML's default schema for `safeLoad` function. +// It is not described in the YAML specification. +// +// This schema is based on standard YAML's Core schema and includes most of +// extra types described at YAML tag repository. (http://yaml.org/type/) + + +'use strict'; + + +module.exports = require('./core').extend({ + implicit: [ + require('../type/timestamp'), + require('../type/merge') + ], + explicit: [ + require('../type/binary'), + require('../type/omap'), + require('../type/pairs'), + require('../type/set') + ] +}); diff --git a/node_modules/js-yaml/lib/schema/failsafe.js b/node_modules/js-yaml/lib/schema/failsafe.js new file mode 100644 index 00000000..b7a33eb7 --- /dev/null +++ b/node_modules/js-yaml/lib/schema/failsafe.js @@ -0,0 +1,17 @@ +// Standard YAML's Failsafe schema. +// http://www.yaml.org/spec/1.2/spec.html#id2802346 + + +'use strict'; + + +var Schema = require('../schema'); + + +module.exports = new Schema({ + explicit: [ + require('../type/str'), + require('../type/seq'), + require('../type/map') + ] +}); diff --git a/node_modules/js-yaml/lib/schema/json.js b/node_modules/js-yaml/lib/schema/json.js new file mode 100644 index 00000000..b73df78e --- /dev/null +++ b/node_modules/js-yaml/lib/schema/json.js @@ -0,0 +1,19 @@ +// Standard YAML's JSON schema. +// http://www.yaml.org/spec/1.2/spec.html#id2803231 +// +// NOTE: JS-YAML does not support schema-specific tag resolution restrictions. +// So, this schema is not such strict as defined in the YAML specification. +// It allows numbers in binary notaion, use `Null` and `NULL` as `null`, etc. + + +'use strict'; + + +module.exports = require('./failsafe').extend({ + implicit: [ + require('../type/null'), + require('../type/bool'), + require('../type/int'), + require('../type/float') + ] +}); diff --git a/node_modules/js-yaml/lib/snippet.js b/node_modules/js-yaml/lib/snippet.js new file mode 100644 index 00000000..00e2133c --- /dev/null +++ b/node_modules/js-yaml/lib/snippet.js @@ -0,0 +1,101 @@ +'use strict'; + + +var common = require('./common'); + + +// get snippet for a single line, respecting maxLength +function getLine(buffer, lineStart, lineEnd, position, maxLineLength) { + var head = ''; + var tail = ''; + var maxHalfLength = Math.floor(maxLineLength / 2) - 1; + + if (position - lineStart > maxHalfLength) { + head = ' ... '; + lineStart = position - maxHalfLength + head.length; + } + + if (lineEnd - position > maxHalfLength) { + tail = ' ...'; + lineEnd = position + maxHalfLength - tail.length; + } + + return { + str: head + buffer.slice(lineStart, lineEnd).replace(/\t/g, '→') + tail, + pos: position - lineStart + head.length // relative position + }; +} + + +function padStart(string, max) { + return common.repeat(' ', max - string.length) + string; +} + + +function makeSnippet(mark, options) { + options = Object.create(options || null); + + if (!mark.buffer) return null; + + if (!options.maxLength) options.maxLength = 79; + if (typeof options.indent !== 'number') options.indent = 1; + if (typeof options.linesBefore !== 'number') options.linesBefore = 3; + if (typeof options.linesAfter !== 'number') options.linesAfter = 2; + + var re = /\r?\n|\r|\0/g; + var lineStarts = [ 0 ]; + var lineEnds = []; + var match; + var foundLineNo = -1; + + while ((match = re.exec(mark.buffer))) { + lineEnds.push(match.index); + lineStarts.push(match.index + match[0].length); + + if (mark.position <= match.index && foundLineNo < 0) { + foundLineNo = lineStarts.length - 2; + } + } + + if (foundLineNo < 0) foundLineNo = lineStarts.length - 1; + + var result = '', i, line; + var lineNoLength = Math.min(mark.line + options.linesAfter, lineEnds.length).toString().length; + var maxLineLength = options.maxLength - (options.indent + lineNoLength + 3); + + for (i = 1; i <= options.linesBefore; i++) { + if (foundLineNo - i < 0) break; + line = getLine( + mark.buffer, + lineStarts[foundLineNo - i], + lineEnds[foundLineNo - i], + mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo - i]), + maxLineLength + ); + result = common.repeat(' ', options.indent) + padStart((mark.line - i + 1).toString(), lineNoLength) + + ' | ' + line.str + '\n' + result; + } + + line = getLine(mark.buffer, lineStarts[foundLineNo], lineEnds[foundLineNo], mark.position, maxLineLength); + result += common.repeat(' ', options.indent) + padStart((mark.line + 1).toString(), lineNoLength) + + ' | ' + line.str + '\n'; + result += common.repeat('-', options.indent + lineNoLength + 3 + line.pos) + '^' + '\n'; + + for (i = 1; i <= options.linesAfter; i++) { + if (foundLineNo + i >= lineEnds.length) break; + line = getLine( + mark.buffer, + lineStarts[foundLineNo + i], + lineEnds[foundLineNo + i], + mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo + i]), + maxLineLength + ); + result += common.repeat(' ', options.indent) + padStart((mark.line + i + 1).toString(), lineNoLength) + + ' | ' + line.str + '\n'; + } + + return result.replace(/\n$/, ''); +} + + +module.exports = makeSnippet; diff --git a/node_modules/js-yaml/lib/type.js b/node_modules/js-yaml/lib/type.js new file mode 100644 index 00000000..5e57877f --- /dev/null +++ b/node_modules/js-yaml/lib/type.js @@ -0,0 +1,66 @@ +'use strict'; + +var YAMLException = require('./exception'); + +var TYPE_CONSTRUCTOR_OPTIONS = [ + 'kind', + 'multi', + 'resolve', + 'construct', + 'instanceOf', + 'predicate', + 'represent', + 'representName', + 'defaultStyle', + 'styleAliases' +]; + +var YAML_NODE_KINDS = [ + 'scalar', + 'sequence', + 'mapping' +]; + +function compileStyleAliases(map) { + var result = {}; + + if (map !== null) { + Object.keys(map).forEach(function (style) { + map[style].forEach(function (alias) { + result[String(alias)] = style; + }); + }); + } + + return result; +} + +function Type(tag, options) { + options = options || {}; + + Object.keys(options).forEach(function (name) { + if (TYPE_CONSTRUCTOR_OPTIONS.indexOf(name) === -1) { + throw new YAMLException('Unknown option "' + name + '" is met in definition of "' + tag + '" YAML type.'); + } + }); + + // TODO: Add tag format check. + this.options = options; // keep original options in case user wants to extend this type later + this.tag = tag; + this.kind = options['kind'] || null; + this.resolve = options['resolve'] || function () { return true; }; + this.construct = options['construct'] || function (data) { return data; }; + this.instanceOf = options['instanceOf'] || null; + this.predicate = options['predicate'] || null; + this.represent = options['represent'] || null; + this.representName = options['representName'] || null; + this.defaultStyle = options['defaultStyle'] || null; + this.multi = options['multi'] || false; + this.styleAliases = compileStyleAliases(options['styleAliases'] || null); + + if (YAML_NODE_KINDS.indexOf(this.kind) === -1) { + throw new YAMLException('Unknown kind "' + this.kind + '" is specified for "' + tag + '" YAML type.'); + } +} + +module.exports = Type; diff --git a/node_modules/js-yaml/lib/type/binary.js b/node_modules/js-yaml/lib/type/binary.js new file mode 100644 index 00000000..e1523513 --- /dev/null +++ b/node_modules/js-yaml/lib/type/binary.js @@ -0,0 +1,125 @@ +'use strict'; + +/*eslint-disable no-bitwise*/ + + +var Type = require('../type'); + + +// [ 64, 65, 66 ] -> [ padding, CR, LF ] +var BASE64_MAP = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r'; + + +function resolveYamlBinary(data) { + if (data === null) return false; + + var code, idx, bitlen = 0, max = data.length, map = BASE64_MAP; + + // Convert one by one. + for (idx = 0; idx < max; idx++) { + code = map.indexOf(data.charAt(idx)); + + // Skip CR/LF + if (code > 64) continue; + + // Fail on illegal characters + if (code < 0) return false; + + bitlen += 6; + } + + // If there are any bits left, source was corrupted + return (bitlen % 8) === 0; +} + +function constructYamlBinary(data) { + var idx, tailbits, + input = data.replace(/[\r\n=]/g, ''), // remove CR/LF & padding to simplify scan + max = input.length, + map = BASE64_MAP, + bits = 0, + result = []; + + // Collect by 6*4 bits (3 bytes) + + for (idx = 0; idx < max; idx++) { + if ((idx % 4 === 0) && idx) { + result.push((bits >> 16) & 0xFF); + result.push((bits >> 8) & 0xFF); + result.push(bits & 0xFF); + } + + bits = (bits << 6) | map.indexOf(input.charAt(idx)); + } + + // Dump tail + + tailbits = (max % 4) * 6; + + if (tailbits === 0) { + result.push((bits >> 16) & 0xFF); + result.push((bits >> 8) & 0xFF); + result.push(bits & 0xFF); + } else if (tailbits === 18) { + result.push((bits >> 10) & 0xFF); + result.push((bits >> 2) & 0xFF); + } else if (tailbits === 12) { + result.push((bits >> 4) & 0xFF); + } + + return new Uint8Array(result); +} + +function representYamlBinary(object /*, style*/) { + var result = '', bits = 0, idx, tail, + max = object.length, + map = BASE64_MAP; + + // Convert every three bytes to 4 ASCII characters. + + for (idx = 0; idx < max; idx++) { + if ((idx % 3 === 0) && idx) { + result += map[(bits >> 18) & 0x3F]; + result += map[(bits >> 12) & 0x3F]; + result += map[(bits >> 6) & 0x3F]; + result += map[bits & 0x3F]; + } + + bits = (bits << 8) + object[idx]; + } + + // Dump tail + + tail = max % 3; + + if (tail === 0) { + result += map[(bits >> 18) & 0x3F]; + result += map[(bits >> 12) & 0x3F]; + result += map[(bits >> 6) & 0x3F]; + result += map[bits & 0x3F]; + } else if (tail === 2) { + result += map[(bits >> 10) & 0x3F]; + result += map[(bits >> 4) & 0x3F]; + result += map[(bits << 2) & 0x3F]; + result += map[64]; + } else if (tail === 1) { + result += map[(bits >> 2) & 0x3F]; + result += map[(bits << 4) & 0x3F]; + result += map[64]; + result += map[64]; + } + + return result; +} + +function isBinary(obj) { + return Object.prototype.toString.call(obj) === '[object Uint8Array]'; +} + +module.exports = new Type('tag:yaml.org,2002:binary', { + kind: 'scalar', + resolve: resolveYamlBinary, + construct: constructYamlBinary, + predicate: isBinary, + represent: representYamlBinary +}); diff --git a/node_modules/js-yaml/lib/type/bool.js b/node_modules/js-yaml/lib/type/bool.js new file mode 100644 index 00000000..cb774593 --- /dev/null +++ b/node_modules/js-yaml/lib/type/bool.js @@ -0,0 +1,35 @@ +'use strict'; + +var Type = require('../type'); + +function resolveYamlBoolean(data) { + if (data === null) return false; + + var max = data.length; + + return (max === 4 && (data === 'true' || data === 'True' || data === 'TRUE')) || + (max === 5 && (data === 'false' || data === 'False' || data === 'FALSE')); +} + +function constructYamlBoolean(data) { + return data === 'true' || + data === 'True' || + data === 'TRUE'; +} + +function isBoolean(object) { + return Object.prototype.toString.call(object) === '[object Boolean]'; +} + +module.exports = new Type('tag:yaml.org,2002:bool', { + kind: 'scalar', + resolve: resolveYamlBoolean, + construct: constructYamlBoolean, + predicate: isBoolean, + represent: { + lowercase: function (object) { return object ? 'true' : 'false'; }, + uppercase: function (object) { return object ? 'TRUE' : 'FALSE'; }, + camelcase: function (object) { return object ? 'True' : 'False'; } + }, + defaultStyle: 'lowercase' +}); diff --git a/node_modules/js-yaml/lib/type/float.js b/node_modules/js-yaml/lib/type/float.js new file mode 100644 index 00000000..74d77ec2 --- /dev/null +++ b/node_modules/js-yaml/lib/type/float.js @@ -0,0 +1,97 @@ +'use strict'; + +var common = require('../common'); +var Type = require('../type'); + +var YAML_FLOAT_PATTERN = new RegExp( + // 2.5e4, 2.5 and integers + '^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?' + + // .2e4, .2 + // special case, seems not from spec + '|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?' + + // .inf + '|[-+]?\\.(?:inf|Inf|INF)' + + // .nan + '|\\.(?:nan|NaN|NAN))$'); + +function resolveYamlFloat(data) { + if (data === null) return false; + + if (!YAML_FLOAT_PATTERN.test(data) || + // Quick hack to not allow integers end with `_` + // Probably should update regexp & check speed + data[data.length - 1] === '_') { + return false; + } + + return true; +} + +function constructYamlFloat(data) { + var value, sign; + + value = data.replace(/_/g, '').toLowerCase(); + sign = value[0] === '-' ? -1 : 1; + + if ('+-'.indexOf(value[0]) >= 0) { + value = value.slice(1); + } + + if (value === '.inf') { + return (sign === 1) ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY; + + } else if (value === '.nan') { + return NaN; + } + return sign * parseFloat(value, 10); +} + + +var SCIENTIFIC_WITHOUT_DOT = /^[-+]?[0-9]+e/; + +function representYamlFloat(object, style) { + var res; + + if (isNaN(object)) { + switch (style) { + case 'lowercase': return '.nan'; + case 'uppercase': return '.NAN'; + case 'camelcase': return '.NaN'; + } + } else if (Number.POSITIVE_INFINITY === object) { + switch (style) { + case 'lowercase': return '.inf'; + case 'uppercase': return '.INF'; + case 'camelcase': return '.Inf'; + } + } else if (Number.NEGATIVE_INFINITY === object) { + switch (style) { + case 'lowercase': return '-.inf'; + case 'uppercase': return '-.INF'; + case 'camelcase': return '-.Inf'; + } + } else if (common.isNegativeZero(object)) { + return '-0.0'; + } + + res = object.toString(10); + + // JS stringifier can build scientific format without dots: 5e-100, + // while YAML requres dot: 5.e-100. Fix it with simple hack + + return SCIENTIFIC_WITHOUT_DOT.test(res) ? res.replace('e', '.e') : res; +} + +function isFloat(object) { + return (Object.prototype.toString.call(object) === '[object Number]') && + (object % 1 !== 0 || common.isNegativeZero(object)); +} + +module.exports = new Type('tag:yaml.org,2002:float', { + kind: 'scalar', + resolve: resolveYamlFloat, + construct: constructYamlFloat, + predicate: isFloat, + represent: representYamlFloat, + defaultStyle: 'lowercase' +}); diff --git a/node_modules/js-yaml/lib/type/int.js b/node_modules/js-yaml/lib/type/int.js new file mode 100644 index 00000000..3fe3a443 --- /dev/null +++ b/node_modules/js-yaml/lib/type/int.js @@ -0,0 +1,156 @@ +'use strict'; + +var common = require('../common'); +var Type = require('../type'); + +function isHexCode(c) { + return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) || + ((0x41/* A */ <= c) && (c <= 0x46/* F */)) || + ((0x61/* a */ <= c) && (c <= 0x66/* f */)); +} + +function isOctCode(c) { + return ((0x30/* 0 */ <= c) && (c <= 0x37/* 7 */)); +} + +function isDecCode(c) { + return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)); +} + +function resolveYamlInteger(data) { + if (data === null) return false; + + var max = data.length, + index = 0, + hasDigits = false, + ch; + + if (!max) return false; + + ch = data[index]; + + // sign + if (ch === '-' || ch === '+') { + ch = data[++index]; + } + + if (ch === '0') { + // 0 + if (index + 1 === max) return true; + ch = data[++index]; + + // base 2, base 8, base 16 + + if (ch === 'b') { + // base 2 + index++; + + for (; index < max; index++) { + ch = data[index]; + if (ch === '_') continue; + if (ch !== '0' && ch !== '1') return false; + hasDigits = true; + } + return hasDigits && ch !== '_'; + } + + + if (ch === 'x') { + // base 16 + index++; + + for (; index < max; index++) { + ch = data[index]; + if (ch === '_') continue; + if (!isHexCode(data.charCodeAt(index))) return false; + hasDigits = true; + } + return hasDigits && ch !== '_'; + } + + + if (ch === 'o') { + // base 8 + index++; + + for (; index < max; index++) { + ch = data[index]; + if (ch === '_') continue; + if (!isOctCode(data.charCodeAt(index))) return false; + hasDigits = true; + } + return hasDigits && ch !== '_'; + } + } + + // base 10 (except 0) + + // value should not start with `_`; + if (ch === '_') return false; + + for (; index < max; index++) { + ch = data[index]; + if (ch === '_') continue; + if (!isDecCode(data.charCodeAt(index))) { + return false; + } + hasDigits = true; + } + + // Should have digits and should not end with `_` + if (!hasDigits || ch === '_') return false; + + return true; +} + +function constructYamlInteger(data) { + var value = data, sign = 1, ch; + + if (value.indexOf('_') !== -1) { + value = value.replace(/_/g, ''); + } + + ch = value[0]; + + if (ch === '-' || ch === '+') { + if (ch === '-') sign = -1; + value = value.slice(1); + ch = value[0]; + } + + if (value === '0') return 0; + + if (ch === '0') { + if (value[1] === 'b') return sign * parseInt(value.slice(2), 2); + if (value[1] === 'x') return sign * parseInt(value.slice(2), 16); + if (value[1] === 'o') return sign * parseInt(value.slice(2), 8); + } + + return sign * parseInt(value, 10); +} + +function isInteger(object) { + return (Object.prototype.toString.call(object)) === '[object Number]' && + (object % 1 === 0 && !common.isNegativeZero(object)); +} + +module.exports = new Type('tag:yaml.org,2002:int', { + kind: 'scalar', + resolve: resolveYamlInteger, + construct: constructYamlInteger, + predicate: isInteger, + represent: { + binary: function (obj) { return obj >= 0 ? '0b' + obj.toString(2) : '-0b' + obj.toString(2).slice(1); }, + octal: function (obj) { return obj >= 0 ? '0o' + obj.toString(8) : '-0o' + obj.toString(8).slice(1); }, + decimal: function (obj) { return obj.toString(10); }, + /* eslint-disable max-len */ + hexadecimal: function (obj) { return obj >= 0 ? '0x' + obj.toString(16).toUpperCase() : '-0x' + obj.toString(16).toUpperCase().slice(1); } + }, + defaultStyle: 'decimal', + styleAliases: { + binary: [ 2, 'bin' ], + octal: [ 8, 'oct' ], + decimal: [ 10, 'dec' ], + hexadecimal: [ 16, 'hex' ] + } +}); diff --git a/node_modules/js-yaml/lib/type/map.js b/node_modules/js-yaml/lib/type/map.js new file mode 100644 index 00000000..f327beeb --- /dev/null +++ b/node_modules/js-yaml/lib/type/map.js @@ -0,0 +1,8 @@ +'use strict'; + +var Type = require('../type'); + +module.exports = new Type('tag:yaml.org,2002:map', { + kind: 'mapping', + construct: function (data) { return data !== null ? data : {}; } +}); diff --git a/node_modules/js-yaml/lib/type/merge.js b/node_modules/js-yaml/lib/type/merge.js new file mode 100644 index 00000000..ae08a864 --- /dev/null +++ b/node_modules/js-yaml/lib/type/merge.js @@ -0,0 +1,12 @@ +'use strict'; + +var Type = require('../type'); + +function resolveYamlMerge(data) { + return data === '<<' || data === null; +} + +module.exports = new Type('tag:yaml.org,2002:merge', { + kind: 'scalar', + resolve: resolveYamlMerge +}); diff --git a/node_modules/js-yaml/lib/type/null.js b/node_modules/js-yaml/lib/type/null.js new file mode 100644 index 00000000..315ca4e2 --- /dev/null +++ b/node_modules/js-yaml/lib/type/null.js @@ -0,0 +1,35 @@ +'use strict'; + +var Type = require('../type'); + +function resolveYamlNull(data) { + if (data === null) return true; + + var max = data.length; + + return (max === 1 && data === '~') || + (max === 4 && (data === 'null' || data === 'Null' || data === 'NULL')); +} + +function constructYamlNull() { + return null; +} + +function isNull(object) { + return object === null; +} + +module.exports = new Type('tag:yaml.org,2002:null', { + kind: 'scalar', + resolve: resolveYamlNull, + construct: constructYamlNull, + predicate: isNull, + represent: { + canonical: function () { return '~'; }, + lowercase: function () { return 'null'; }, + uppercase: function () { return 'NULL'; }, + camelcase: function () { return 'Null'; }, + empty: function () { return ''; } + }, + defaultStyle: 'lowercase' +}); diff --git a/node_modules/js-yaml/lib/type/omap.js b/node_modules/js-yaml/lib/type/omap.js new file mode 100644 index 00000000..b2b5323b --- /dev/null +++ b/node_modules/js-yaml/lib/type/omap.js @@ -0,0 +1,44 @@ +'use strict'; + +var Type = require('../type'); + +var _hasOwnProperty = Object.prototype.hasOwnProperty; +var _toString = Object.prototype.toString; + +function resolveYamlOmap(data) { + if (data === null) return true; + + var objectKeys = [], index, length, pair, pairKey, pairHasKey, + object = data; + + for (index = 0, length = object.length; index < length; index += 1) { + pair = object[index]; + pairHasKey = false; + + if (_toString.call(pair) !== '[object Object]') return false; + + for (pairKey in pair) { + if (_hasOwnProperty.call(pair, pairKey)) { + if (!pairHasKey) pairHasKey = true; + else return false; + } + } + + if (!pairHasKey) return false; + + if (objectKeys.indexOf(pairKey) === -1) objectKeys.push(pairKey); + else return false; + } + + return true; +} + +function constructYamlOmap(data) { + return data !== null ? data : []; +} + +module.exports = new Type('tag:yaml.org,2002:omap', { + kind: 'sequence', + resolve: resolveYamlOmap, + construct: constructYamlOmap +}); diff --git a/node_modules/js-yaml/lib/type/pairs.js b/node_modules/js-yaml/lib/type/pairs.js new file mode 100644 index 00000000..74b52403 --- /dev/null +++ b/node_modules/js-yaml/lib/type/pairs.js @@ -0,0 +1,53 @@ +'use strict'; + +var Type = require('../type'); + +var _toString = Object.prototype.toString; + +function resolveYamlPairs(data) { + if (data === null) return true; + + var index, length, pair, keys, result, + object = data; + + result = new Array(object.length); + + for (index = 0, length = object.length; index < length; index += 1) { + pair = object[index]; + + if (_toString.call(pair) !== '[object Object]') return false; + + keys = Object.keys(pair); + + if (keys.length !== 1) return false; + + result[index] = [ keys[0], pair[keys[0]] ]; + } + + return true; +} + +function constructYamlPairs(data) { + if (data === null) return []; + + var index, length, pair, keys, result, + object = data; + + result = new Array(object.length); + + for (index = 0, length = object.length; index < length; index += 1) { + pair = object[index]; + + keys = Object.keys(pair); + + result[index] = [ keys[0], pair[keys[0]] ]; + } + + return result; +} + +module.exports = new Type('tag:yaml.org,2002:pairs', { + kind: 'sequence', + resolve: resolveYamlPairs, + construct: constructYamlPairs +}); diff --git a/node_modules/js-yaml/lib/type/seq.js b/node_modules/js-yaml/lib/type/seq.js new file mode 100644 index 00000000..be8f77f2 --- /dev/null +++ b/node_modules/js-yaml/lib/type/seq.js @@ -0,0 +1,8 @@ +'use strict'; + +var Type = require('../type'); + +module.exports = new Type('tag:yaml.org,2002:seq', { + kind: 'sequence', + construct: function (data) { return data !== null ? data : []; } +}); diff --git a/node_modules/js-yaml/lib/type/set.js b/node_modules/js-yaml/lib/type/set.js new file mode 100644 index 00000000..f885a329 --- /dev/null +++ b/node_modules/js-yaml/lib/type/set.js @@ -0,0 +1,29 @@ +'use strict'; + +var Type = require('../type'); + +var _hasOwnProperty = Object.prototype.hasOwnProperty; + +function resolveYamlSet(data) { + if (data === null) return true; + + var key, object = data; + + for (key in object) { + if (_hasOwnProperty.call(object, key)) { + if (object[key] !== null) return false; + } + } + + return true; +} + +function constructYamlSet(data) { + return data !== null ? data : {}; +} + +module.exports = new Type('tag:yaml.org,2002:set', { + kind: 'mapping', + resolve: resolveYamlSet, + construct: constructYamlSet +}); diff --git a/node_modules/js-yaml/lib/type/str.js b/node_modules/js-yaml/lib/type/str.js new file mode 100644 index 00000000..27acc106 --- /dev/null +++ b/node_modules/js-yaml/lib/type/str.js @@ -0,0 +1,8 @@ +'use strict'; + +var Type = require('../type'); + +module.exports = new Type('tag:yaml.org,2002:str', { + kind: 'scalar', + construct: function (data) { return data !== null ? data : ''; } +}); diff --git a/node_modules/js-yaml/lib/type/timestamp.js b/node_modules/js-yaml/lib/type/timestamp.js new file mode 100644 index 00000000..8fa9c586 --- /dev/null +++ b/node_modules/js-yaml/lib/type/timestamp.js @@ -0,0 +1,88 @@ +'use strict'; + +var Type = require('../type'); + +var YAML_DATE_REGEXP = new RegExp( + '^([0-9][0-9][0-9][0-9])' + // [1] year + '-([0-9][0-9])' + // [2] month + '-([0-9][0-9])$'); // [3] day + +var YAML_TIMESTAMP_REGEXP = new RegExp( + '^([0-9][0-9][0-9][0-9])' + // [1] year + '-([0-9][0-9]?)' + // [2] month + '-([0-9][0-9]?)' + // [3] day + '(?:[Tt]|[ \\t]+)' + // ... + '([0-9][0-9]?)' + // [4] hour + ':([0-9][0-9])' + // [5] minute + ':([0-9][0-9])' + // [6] second + '(?:\\.([0-9]*))?' + // [7] fraction + '(?:[ \\t]*(Z|([-+])([0-9][0-9]?)' + // [8] tz [9] tz_sign [10] tz_hour + '(?::([0-9][0-9]))?))?$'); // [11] tz_minute + +function resolveYamlTimestamp(data) { + if (data === null) return false; + if (YAML_DATE_REGEXP.exec(data) !== null) return true; + if (YAML_TIMESTAMP_REGEXP.exec(data) !== null) return true; + return false; +} + +function constructYamlTimestamp(data) { + var match, year, month, day, hour, minute, second, fraction = 0, + delta = null, tz_hour, tz_minute, date; + + match = YAML_DATE_REGEXP.exec(data); + if (match === null) match = YAML_TIMESTAMP_REGEXP.exec(data); + + if (match === null) throw new Error('Date resolve error'); + + // match: [1] year [2] month [3] day + + year = +(match[1]); + month = +(match[2]) - 1; // JS month starts with 0 + day = +(match[3]); + + if (!match[4]) { // no hour + return new Date(Date.UTC(year, month, day)); + } + + // match: [4] hour [5] minute [6] second [7] fraction + + hour = +(match[4]); + minute = +(match[5]); + second = +(match[6]); + + if (match[7]) { + fraction = match[7].slice(0, 3); + while (fraction.length < 3) { // milli-seconds + fraction += '0'; + } + fraction = +fraction; + } + + // match: [8] tz [9] tz_sign [10] tz_hour [11] tz_minute + + if (match[9]) { + tz_hour = +(match[10]); + tz_minute = +(match[11] || 0); + delta = (tz_hour * 60 + tz_minute) * 60000; // delta in mili-seconds + if (match[9] === '-') delta = -delta; + } + + date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction)); + + if (delta) date.setTime(date.getTime() - delta); + + return date; +} + +function representYamlTimestamp(object /*, style*/) { + return object.toISOString(); +} + +module.exports = new Type('tag:yaml.org,2002:timestamp', { + kind: 'scalar', + resolve: resolveYamlTimestamp, + construct: constructYamlTimestamp, + instanceOf: Date, + represent: representYamlTimestamp +}); diff --git a/node_modules/js-yaml/package.json b/node_modules/js-yaml/package.json new file mode 100644 index 00000000..17574da8 --- /dev/null +++ b/node_modules/js-yaml/package.json @@ -0,0 +1,66 @@ +{ + "name": "js-yaml", + "version": "4.1.0", + "description": "YAML 1.2 parser and serializer", + "keywords": [ + "yaml", + "parser", + "serializer", + "pyyaml" + ], + "author": "Vladimir Zapparov ", + "contributors": [ + "Aleksey V Zapparov (http://www.ixti.net/)", + "Vitaly Puzrin (https://github.com/puzrin)", + "Martin Grenfell (http://got-ravings.blogspot.com)" + ], + "license": "MIT", + "repository": "nodeca/js-yaml", + "files": [ + "index.js", + "lib/", + "bin/", + "dist/" + ], + "bin": { + "js-yaml": "bin/js-yaml.js" + }, + "module": "./dist/js-yaml.mjs", + "exports": { + ".": { + "import": "./dist/js-yaml.mjs", + "require": "./index.js" + }, + "./package.json": "./package.json" + }, + "scripts": { + "lint": "eslint .", + "test": "npm run lint && mocha", + "coverage": "npm run lint && nyc mocha && nyc report --reporter html", + "demo": "npm run lint && node support/build_demo.js", + "gh-demo": "npm run demo && gh-pages -d demo -f", + "browserify": "rollup -c support/rollup.config.js", + "prepublishOnly": "npm run gh-demo" + }, + "unpkg": "dist/js-yaml.min.js", + "jsdelivr": "dist/js-yaml.min.js", + "dependencies": { + "argparse": "^2.0.1" + }, + "devDependencies": { + "@rollup/plugin-commonjs": "^17.0.0", + "@rollup/plugin-node-resolve": "^11.0.0", + "ansi": "^0.3.1", + "benchmark": "^2.1.4", + "codemirror": "^5.13.4", + "eslint": "^7.0.0", + "fast-check": "^2.8.0", + "gh-pages": "^3.1.0", + "mocha": "^8.2.1", + "nyc": "^15.1.0", + "rollup": "^2.34.1", + "rollup-plugin-node-polyfills": "^0.2.1", + "rollup-plugin-terser": "^7.0.2", + "shelljs": "^0.8.4" + } +} diff --git a/node_modules/json-parse-even-better-errors/CHANGELOG.md b/node_modules/json-parse-even-better-errors/CHANGELOG.md new file mode 100644 index 00000000..dfd67330 --- /dev/null +++ b/node_modules/json-parse-even-better-errors/CHANGELOG.md @@ -0,0 +1,50 @@ +# Change Log + +All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. + +## 2.0.0 + +* Add custom error classes + + +## [1.0.2](https://github.com/npm/json-parse-even-better-errors/compare/v1.0.1...v1.0.2) (2018-03-30) + + +### Bug Fixes + +* **messages:** More friendly messages for non-string ([#1](https://github.com/npm/json-parse-even-better-errors/issues/1)) ([a476d42](https://github.com/npm/json-parse-even-better-errors/commit/a476d42)) + + + + +## [1.0.1](https://github.com/npm/json-parse-even-better-errors/compare/v1.0.0...v1.0.1) (2017-08-16) + + +### Bug Fixes + +* **license:** oops. Forgot to update license.md ([efe2958](https://github.com/npm/json-parse-even-better-errors/commit/efe2958)) + + + + +# 1.0.0 (2017-08-15) + + +### Features + +* **init:** Initial Commit ([562c977](https://github.com/npm/json-parse-even-better-errors/commit/562c977)) + + +### BREAKING CHANGES + +* **init:** This is the first commit! + + + + +# 0.1.0 (2017-08-15) + + +### Features + +* **init:** Initial Commit ([9dd1a19](https://github.com/npm/json-parse-even-better-errors/commit/9dd1a19)) diff --git a/node_modules/json-parse-even-better-errors/LICENSE.md b/node_modules/json-parse-even-better-errors/LICENSE.md new file mode 100644 index 00000000..6991b7cb --- /dev/null +++ b/node_modules/json-parse-even-better-errors/LICENSE.md @@ -0,0 +1,25 @@ +Copyright 2017 Kat Marchán +Copyright npm, Inc. + +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. + +--- + +This library is a fork of 'better-json-errors' by Kat Marchán, extended and +distributed under the terms of the MIT license above. diff --git a/node_modules/json-parse-even-better-errors/README.md b/node_modules/json-parse-even-better-errors/README.md new file mode 100644 index 00000000..2799efe6 --- /dev/null +++ b/node_modules/json-parse-even-better-errors/README.md @@ -0,0 +1,96 @@ +# json-parse-even-better-errors + +[`json-parse-even-better-errors`](https://github.com/npm/json-parse-even-better-errors) +is a Node.js library for getting nicer errors out of `JSON.parse()`, +including context and position of the parse errors. + +It also preserves the newline and indentation styles of the JSON data, by +putting them in the object or array in the `Symbol.for('indent')` and +`Symbol.for('newline')` properties. + +## Install + +`$ npm install --save json-parse-even-better-errors` + +## Table of Contents + +* [Example](#example) +* [Features](#features) +* [Contributing](#contributing) +* [API](#api) + * [`parse`](#parse) + +### Example + +```javascript +const parseJson = require('json-parse-even-better-errors') + +parseJson('"foo"') // returns the string 'foo' +parseJson('garbage') // more useful error message +parseJson.noExceptions('garbage') // returns undefined +``` + +### Features + +* Like JSON.parse, but the errors are better. +* Strips a leading byte-order-mark that you sometimes get reading files. +* Has a `noExceptions` method that returns undefined rather than throwing. +* Attaches the newline character(s) used to the `Symbol.for('newline')` + property on objects and arrays. +* Attaches the indentation character(s) used to the `Symbol.for('indent')` + property on objects and arrays. + +## Indentation + +To preserve indentation when the file is saved back to disk, use +`data[Symbol.for('indent')]` as the third argument to `JSON.stringify`, and +if you want to preserve windows `\r\n` newlines, replace the `\n` chars in +the string with `data[Symbol.for('newline')]`. + +For example: + +```js +const txt = await readFile('./package.json', 'utf8') +const data = parseJsonEvenBetterErrors(txt) +const indent = Symbol.for('indent') +const newline = Symbol.for('newline') +// .. do some stuff to the data .. +const string = JSON.stringify(data, null, data[indent]) + '\n' +const eolFixed = data[newline] === '\n' ? string + : string.replace(/\n/g, data[newline]) +await writeFile('./package.json', eolFixed) +``` + +Indentation is determined by looking at the whitespace between the initial +`{` and `[` and the character that follows it. If you have lots of weird +inconsistent indentation, then it won't track that or give you any way to +preserve it. Whether this is a bug or a feature is debatable ;) + +### API + +#### `parse(txt, reviver = null, context = 20)` + +Works just like `JSON.parse`, but will include a bit more information when +an error happens, and attaches a `Symbol.for('indent')` and +`Symbol.for('newline')` on objects and arrays. This throws a +`JSONParseError`. + +#### `parse.noExceptions(txt, reviver = null)` + +Works just like `JSON.parse`, but will return `undefined` rather than +throwing an error. + +#### `class JSONParseError(er, text, context = 20, caller = null)` + +Extends the JavaScript `SyntaxError` class to parse the message and provide +better metadata. + +Pass in the error thrown by the built-in `JSON.parse`, and the text being +parsed, and it'll parse out the bits needed to be helpful. + +`context` defaults to 20. + +Set a `caller` function to trim internal implementation details out of the +stack trace. When calling `parseJson`, this is set to the `parseJson` +function. If not set, then the constructor defaults to itself, so the +stack trace will point to the spot where you call `new JSONParseError`. diff --git a/node_modules/json-parse-even-better-errors/index.js b/node_modules/json-parse-even-better-errors/index.js new file mode 100644 index 00000000..86a1fdc1 --- /dev/null +++ b/node_modules/json-parse-even-better-errors/index.js @@ -0,0 +1,121 @@ +'use strict' + +const hexify = char => { + const h = char.charCodeAt(0).toString(16).toUpperCase() + return '0x' + (h.length % 2 ? '0' : '') + h +} + +const parseError = (e, txt, context) => { + if (!txt) { + return { + message: e.message + ' while parsing empty string', + position: 0, + } + } + const badToken = e.message.match(/^Unexpected token (.) .*position\s+(\d+)/i) + const errIdx = badToken ? +badToken[2] + : e.message.match(/^Unexpected end of JSON.*/i) ? txt.length - 1 + : null + + const msg = badToken ? e.message.replace(/^Unexpected token ./, `Unexpected token ${ + JSON.stringify(badToken[1]) + } (${hexify(badToken[1])})`) + : e.message + + if (errIdx !== null && errIdx !== undefined) { + const start = errIdx <= context ? 0 + : errIdx - context + + const end = errIdx + context >= txt.length ? txt.length + : errIdx + context + + const slice = (start === 0 ? '' : '...') + + txt.slice(start, end) + + (end === txt.length ? '' : '...') + + const near = txt === slice ? '' : 'near ' + + return { + message: msg + ` while parsing ${near}${JSON.stringify(slice)}`, + position: errIdx, + } + } else { + return { + message: msg + ` while parsing '${txt.slice(0, context * 2)}'`, + position: 0, + } + } +} + +class JSONParseError extends SyntaxError { + constructor (er, txt, context, caller) { + context = context || 20 + const metadata = parseError(er, txt, context) + super(metadata.message) + Object.assign(this, metadata) + this.code = 'EJSONPARSE' + this.systemError = er + Error.captureStackTrace(this, caller || this.constructor) + } + get name () { return this.constructor.name } + set name (n) {} + get [Symbol.toStringTag] () { return this.constructor.name } +} + +const kIndent = Symbol.for('indent') +const kNewline = Symbol.for('newline') +// only respect indentation if we got a line break, otherwise squash it +// things other than objects and arrays aren't indented, so ignore those +// Important: in both of these regexps, the $1 capture group is the newline +// or undefined, and the $2 capture group is the indent, or undefined. +const formatRE = /^\s*[{\[]((?:\r?\n)+)([\s\t]*)/ +const emptyRE = /^(?:\{\}|\[\])((?:\r?\n)+)?$/ + +const parseJson = (txt, reviver, context) => { + const parseText = stripBOM(txt) + context = context || 20 + try { + // get the indentation so that we can save it back nicely + // if the file starts with {" then we have an indent of '', ie, none + // otherwise, pick the indentation of the next line after the first \n + // If the pattern doesn't match, then it means no indentation. + // JSON.stringify ignores symbols, so this is reasonably safe. + // if the string is '{}' or '[]', then use the default 2-space indent. + const [, newline = '\n', indent = ' '] = parseText.match(emptyRE) || + parseText.match(formatRE) || + [, '', ''] + + const result = JSON.parse(parseText, reviver) + if (result && typeof result === 'object') { + result[kNewline] = newline + result[kIndent] = indent + } + return result + } catch (e) { + if (typeof txt !== 'string' && !Buffer.isBuffer(txt)) { + const isEmptyArray = Array.isArray(txt) && txt.length === 0 + throw Object.assign(new TypeError( + `Cannot parse ${isEmptyArray ? 'an empty array' : String(txt)}` + ), { + code: 'EJSONPARSE', + systemError: e, + }) + } + + throw new JSONParseError(e, parseText, context, parseJson) + } +} + +// Remove byte order marker. This catches EF BB BF (the UTF-8 BOM) +// because the buffer-to-string conversion in `fs.readFileSync()` +// translates it to FEFF, the UTF-16 BOM. +const stripBOM = txt => String(txt).replace(/^\uFEFF/, '') + +module.exports = parseJson +parseJson.JSONParseError = JSONParseError + +parseJson.noExceptions = (txt, reviver) => { + try { + return JSON.parse(stripBOM(txt), reviver) + } catch (e) {} +} diff --git a/node_modules/json-parse-even-better-errors/package.json b/node_modules/json-parse-even-better-errors/package.json new file mode 100644 index 00000000..ed0fdaf2 --- /dev/null +++ b/node_modules/json-parse-even-better-errors/package.json @@ -0,0 +1,33 @@ +{ + "name": "json-parse-even-better-errors", + "version": "2.3.1", + "description": "JSON.parse with context information on error", + "main": "index.js", + "files": [ + "*.js" + ], + "scripts": { + "preversion": "npm t", + "postversion": "npm publish", + "prepublishOnly": "git push --follow-tags", + "test": "tap", + "snap": "tap" + }, + "repository": "https://github.com/npm/json-parse-even-better-errors", + "keywords": [ + "JSON", + "parser" + ], + "author": { + "name": "Kat Marchán", + "email": "kzm@zkat.tech", + "twitter": "maybekatz" + }, + "license": "MIT", + "devDependencies": { + "tap": "^14.6.5" + }, + "tap": { + "check-coverage": true + } +} diff --git a/node_modules/json5/LICENSE.md b/node_modules/json5/LICENSE.md new file mode 100644 index 00000000..2171aca5 --- /dev/null +++ b/node_modules/json5/LICENSE.md @@ -0,0 +1,23 @@ +MIT License + +Copyright (c) 2012-2018 Aseem Kishore, and [others]. + +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. + +[others]: https://github.com/json5/json5/contributors diff --git a/node_modules/json5/README.md b/node_modules/json5/README.md new file mode 100644 index 00000000..00ee7939 --- /dev/null +++ b/node_modules/json5/README.md @@ -0,0 +1,282 @@ +# JSON5 – JSON for Humans + +[![Build Status](https://app.travis-ci.com/json5/json5.svg?branch=main)][Build +Status] [![Coverage +Status](https://coveralls.io/repos/github/json5/json5/badge.svg)][Coverage +Status] + +JSON5 is an extension to the popular [JSON] file format that aims to be +easier to **write and maintain _by hand_ (e.g. for config files)**. +It is _not intended_ to be used for machine-to-machine communication. +(Keep using JSON or other file formats for that. 🙂) + +JSON5 was started in 2012, and as of 2022, now gets **[>65M downloads/week](https://www.npmjs.com/package/json5)**, +ranks in the **[top 0.1%](https://gist.github.com/anvaka/8e8fa57c7ee1350e3491)** of the most depended-upon packages on npm, +and has been adopted by major projects like +**[Chromium](https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/platform/runtime_enabled_features.json5;drc=5de823b36e68fd99009a29281b17bc3a1d6b329c), +[Next.js](https://github.com/vercel/next.js/blob/b88f20c90bf4659b8ad5cb2a27956005eac2c7e8/packages/next/lib/find-config.ts#L43-L46), +[Babel](https://babeljs.io/docs/en/config-files#supported-file-extensions), +[Retool](https://community.retool.com/t/i-am-attempting-to-append-several-text-fields-to-a-google-sheet-but-receiving-a-json5-invalid-character-error/7626), +[WebStorm](https://www.jetbrains.com/help/webstorm/json.html), +and [more](https://github.com/json5/json5/wiki/In-the-Wild)**. +It's also natively supported on **[Apple platforms](https://developer.apple.com/documentation/foundation/jsondecoder/3766916-allowsjson5)** +like **MacOS** and **iOS**. + +Formally, the **[JSON5 Data Interchange Format](https://spec.json5.org/)** is a superset of JSON +(so valid JSON files will always be valid JSON5 files) +that expands its syntax to include some productions from [ECMAScript 5.1] (ES5). +It's also a strict _subset_ of ES5, so valid JSON5 files will always be valid ES5. + +This JavaScript library is a reference implementation for JSON5 parsing and serialization, +and is directly used in many of the popular projects mentioned above +(where e.g. extreme performance isn't necessary), +but others have created [many other libraries](https://github.com/json5/json5/wiki/In-the-Wild) +across many other platforms. + +[Build Status]: https://app.travis-ci.com/json5/json5 + +[Coverage Status]: https://coveralls.io/github/json5/json5 + +[JSON]: https://tools.ietf.org/html/rfc7159 + +[ECMAScript 5.1]: https://www.ecma-international.org/ecma-262/5.1/ + +## Summary of Features +The following ECMAScript 5.1 features, which are not supported in JSON, have +been extended to JSON5. + +### Objects +- Object keys may be an ECMAScript 5.1 _[IdentifierName]_. +- Objects may have a single trailing comma. + +### Arrays +- Arrays may have a single trailing comma. + +### Strings +- Strings may be single quoted. +- Strings may span multiple lines by escaping new line characters. +- Strings may include character escapes. + +### Numbers +- Numbers may be hexadecimal. +- Numbers may have a leading or trailing decimal point. +- Numbers may be [IEEE 754] positive infinity, negative infinity, and NaN. +- Numbers may begin with an explicit plus sign. + +### Comments +- Single and multi-line comments are allowed. + +### White Space +- Additional white space characters are allowed. + +[IdentifierName]: https://www.ecma-international.org/ecma-262/5.1/#sec-7.6 + +[IEEE 754]: http://ieeexplore.ieee.org/servlet/opac?punumber=4610933 + +## Example +Kitchen-sink example: + +```js +{ + // comments + unquoted: 'and you can quote me on that', + singleQuotes: 'I can use "double quotes" here', + lineBreaks: "Look, Mom! \ +No \\n's!", + hexadecimal: 0xdecaf, + leadingDecimalPoint: .8675309, andTrailing: 8675309., + positiveSign: +1, + trailingComma: 'in objects', andIn: ['arrays',], + "backwardsCompatible": "with JSON", +} +``` + +A more real-world example is [this config file](https://github.com/chromium/chromium/blob/feb3c9f670515edf9a88f185301cbd7794ee3e52/third_party/blink/renderer/platform/runtime_enabled_features.json5) +from the Chromium/Blink project. + +## Specification +For a detailed explanation of the JSON5 format, please read the [official +specification](https://json5.github.io/json5-spec/). + +## Installation and Usage +### Node.js +```sh +npm install json5 +``` + +#### CommonJS +```js +const JSON5 = require('json5') +``` + +#### Modules +```js +import JSON5 from 'json5' +``` + +### Browsers +#### UMD +```html + + +``` + +#### Modules +```html + +``` + +## API +The JSON5 API is compatible with the [JSON API]. + +[JSON API]: +https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON + +### JSON5.parse() +Parses a JSON5 string, constructing the JavaScript value or object described by +the string. An optional reviver function can be provided to perform a +transformation on the resulting object before it is returned. + +#### Syntax + JSON5.parse(text[, reviver]) + +#### Parameters +- `text`: The string to parse as JSON5. +- `reviver`: If a function, this prescribes how the value originally produced by + parsing is transformed, before being returned. + +#### Return value +The object corresponding to the given JSON5 text. + +### JSON5.stringify() +Converts a JavaScript value to a JSON5 string, optionally replacing values if a +replacer function is specified, or optionally including only the specified +properties if a replacer array is specified. + +#### Syntax + JSON5.stringify(value[, replacer[, space]]) + JSON5.stringify(value[, options]) + +#### Parameters +- `value`: The value to convert to a JSON5 string. +- `replacer`: A function that alters the behavior of the stringification + process, or an array of String and Number objects that serve as a whitelist + for selecting/filtering the properties of the value object to be included in + the JSON5 string. If this value is null or not provided, all properties of the + object are included in the resulting JSON5 string. +- `space`: A String or Number object that's used to insert white space into the + output JSON5 string for readability purposes. If this is a Number, it + indicates the number of space characters to use as white space; this number is + capped at 10 (if it is greater, the value is just 10). Values less than 1 + indicate that no space should be used. If this is a String, the string (or the + first 10 characters of the string, if it's longer than that) is used as white + space. If this parameter is not provided (or is null), no white space is used. + If white space is used, trailing commas will be used in objects and arrays. +- `options`: An object with the following properties: + - `replacer`: Same as the `replacer` parameter. + - `space`: Same as the `space` parameter. + - `quote`: A String representing the quote character to use when serializing + strings. + +#### Return value +A JSON5 string representing the value. + +### Node.js `require()` JSON5 files +When using Node.js, you can `require()` JSON5 files by adding the following +statement. + +```js +require('json5/lib/register') +``` + +Then you can load a JSON5 file with a Node.js `require()` statement. For +example: + +```js +const config = require('./config.json5') +``` + +## CLI +Since JSON is more widely used than JSON5, this package includes a CLI for +converting JSON5 to JSON and for validating the syntax of JSON5 documents. + +### Installation +```sh +npm install --global json5 +``` + +### Usage +```sh +json5 [options] +``` + +If `` is not provided, then STDIN is used. + +#### Options: +- `-s`, `--space`: The number of spaces to indent or `t` for tabs +- `-o`, `--out-file [file]`: Output to the specified file, otherwise STDOUT +- `-v`, `--validate`: Validate JSON5 but do not output JSON +- `-V`, `--version`: Output the version number +- `-h`, `--help`: Output usage information + +## Contributing +### Development +```sh +git clone https://github.com/json5/json5 +cd json5 +npm install +``` + +When contributing code, please write relevant tests and run `npm test` and `npm +run lint` before submitting pull requests. Please use an editor that supports +[EditorConfig](http://editorconfig.org/). + +### Issues +To report bugs or request features regarding the JSON5 **data format**, +please submit an issue to the official +**[_specification_ repository](https://github.com/json5/json5-spec)**. + +Note that we will never add any features that make JSON5 incompatible with ES5; +that compatibility is a fundamental premise of JSON5. + +To report bugs or request features regarding this **JavaScript implementation** +of JSON5, please submit an issue to **_this_ repository**. + +### Security Vulnerabilities and Disclosures +To report a security vulnerability, please follow the follow the guidelines +described in our [security policy](./SECURITY.md). + +## License +MIT. See [LICENSE.md](./LICENSE.md) for details. + +## Credits +[Aseem Kishore](https://github.com/aseemk) founded this project. +He wrote a [blog post](https://aseemk.substack.com/p/ignore-the-f-ing-haters-json5) +about the journey and lessons learned 10 years in. + +[Michael Bolin](http://bolinfest.com/) independently arrived at and published +some of these same ideas with awesome explanations and detail. Recommended +reading: [Suggested Improvements to JSON](http://bolinfest.com/essays/json.html) + +[Douglas Crockford](http://www.crockford.com/) of course designed and built +JSON, but his state machine diagrams on the [JSON website](http://json.org/), as +cheesy as it may sound, gave us motivation and confidence that building a new +parser to implement these ideas was within reach! The original +implementation of JSON5 was also modeled directly off of Doug’s open-source +[json_parse.js] parser. We’re grateful for that clean and well-documented +code. + +[json_parse.js]: +https://github.com/douglascrockford/JSON-js/blob/03157639c7a7cddd2e9f032537f346f1a87c0f6d/json_parse.js + +[Max Nanasy](https://github.com/MaxNanasy) has been an early and prolific +supporter, contributing multiple patches and ideas. + +[Andrew Eisenberg](https://github.com/aeisenberg) contributed the original +`stringify` method. + +[Jordan Tucker](https://github.com/jordanbtucker) has aligned JSON5 more closely +with ES5, wrote the official JSON5 specification, completely rewrote the +codebase from the ground up, and is actively maintaining this project. diff --git a/node_modules/json5/dist/index.js b/node_modules/json5/dist/index.js new file mode 100644 index 00000000..bf86533e --- /dev/null +++ b/node_modules/json5/dist/index.js @@ -0,0 +1,1737 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global.JSON5 = factory()); +}(this, (function () { 'use strict'; + + function createCommonjsModule(fn, module) { + return module = { exports: {} }, fn(module, module.exports), module.exports; + } + + var _global = createCommonjsModule(function (module) { + // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 + var global = module.exports = typeof window != 'undefined' && window.Math == Math + ? window : typeof self != 'undefined' && self.Math == Math ? self + // eslint-disable-next-line no-new-func + : Function('return this')(); + if (typeof __g == 'number') { __g = global; } // eslint-disable-line no-undef + }); + + var _core = createCommonjsModule(function (module) { + var core = module.exports = { version: '2.6.5' }; + if (typeof __e == 'number') { __e = core; } // eslint-disable-line no-undef + }); + var _core_1 = _core.version; + + var _isObject = function (it) { + return typeof it === 'object' ? it !== null : typeof it === 'function'; + }; + + var _anObject = function (it) { + if (!_isObject(it)) { throw TypeError(it + ' is not an object!'); } + return it; + }; + + var _fails = function (exec) { + try { + return !!exec(); + } catch (e) { + return true; + } + }; + + // Thank's IE8 for his funny defineProperty + var _descriptors = !_fails(function () { + return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7; + }); + + var document = _global.document; + // typeof document.createElement is 'object' in old IE + var is = _isObject(document) && _isObject(document.createElement); + var _domCreate = function (it) { + return is ? document.createElement(it) : {}; + }; + + var _ie8DomDefine = !_descriptors && !_fails(function () { + return Object.defineProperty(_domCreate('div'), 'a', { get: function () { return 7; } }).a != 7; + }); + + // 7.1.1 ToPrimitive(input [, PreferredType]) + + // instead of the ES6 spec version, we didn't implement @@toPrimitive case + // and the second argument - flag - preferred type is a string + var _toPrimitive = function (it, S) { + if (!_isObject(it)) { return it; } + var fn, val; + if (S && typeof (fn = it.toString) == 'function' && !_isObject(val = fn.call(it))) { return val; } + if (typeof (fn = it.valueOf) == 'function' && !_isObject(val = fn.call(it))) { return val; } + if (!S && typeof (fn = it.toString) == 'function' && !_isObject(val = fn.call(it))) { return val; } + throw TypeError("Can't convert object to primitive value"); + }; + + var dP = Object.defineProperty; + + var f = _descriptors ? Object.defineProperty : function defineProperty(O, P, Attributes) { + _anObject(O); + P = _toPrimitive(P, true); + _anObject(Attributes); + if (_ie8DomDefine) { try { + return dP(O, P, Attributes); + } catch (e) { /* empty */ } } + if ('get' in Attributes || 'set' in Attributes) { throw TypeError('Accessors not supported!'); } + if ('value' in Attributes) { O[P] = Attributes.value; } + return O; + }; + + var _objectDp = { + f: f + }; + + var _propertyDesc = function (bitmap, value) { + return { + enumerable: !(bitmap & 1), + configurable: !(bitmap & 2), + writable: !(bitmap & 4), + value: value + }; + }; + + var _hide = _descriptors ? function (object, key, value) { + return _objectDp.f(object, key, _propertyDesc(1, value)); + } : function (object, key, value) { + object[key] = value; + return object; + }; + + var hasOwnProperty = {}.hasOwnProperty; + var _has = function (it, key) { + return hasOwnProperty.call(it, key); + }; + + var id = 0; + var px = Math.random(); + var _uid = function (key) { + return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36)); + }; + + var _library = false; + + var _shared = createCommonjsModule(function (module) { + var SHARED = '__core-js_shared__'; + var store = _global[SHARED] || (_global[SHARED] = {}); + + (module.exports = function (key, value) { + return store[key] || (store[key] = value !== undefined ? value : {}); + })('versions', []).push({ + version: _core.version, + mode: _library ? 'pure' : 'global', + copyright: '© 2019 Denis Pushkarev (zloirock.ru)' + }); + }); + + var _functionToString = _shared('native-function-to-string', Function.toString); + + var _redefine = createCommonjsModule(function (module) { + var SRC = _uid('src'); + + var TO_STRING = 'toString'; + var TPL = ('' + _functionToString).split(TO_STRING); + + _core.inspectSource = function (it) { + return _functionToString.call(it); + }; + + (module.exports = function (O, key, val, safe) { + var isFunction = typeof val == 'function'; + if (isFunction) { _has(val, 'name') || _hide(val, 'name', key); } + if (O[key] === val) { return; } + if (isFunction) { _has(val, SRC) || _hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key))); } + if (O === _global) { + O[key] = val; + } else if (!safe) { + delete O[key]; + _hide(O, key, val); + } else if (O[key]) { + O[key] = val; + } else { + _hide(O, key, val); + } + // add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative + })(Function.prototype, TO_STRING, function toString() { + return typeof this == 'function' && this[SRC] || _functionToString.call(this); + }); + }); + + var _aFunction = function (it) { + if (typeof it != 'function') { throw TypeError(it + ' is not a function!'); } + return it; + }; + + // optional / simple context binding + + var _ctx = function (fn, that, length) { + _aFunction(fn); + if (that === undefined) { return fn; } + switch (length) { + case 1: return function (a) { + return fn.call(that, a); + }; + case 2: return function (a, b) { + return fn.call(that, a, b); + }; + case 3: return function (a, b, c) { + return fn.call(that, a, b, c); + }; + } + return function (/* ...args */) { + return fn.apply(that, arguments); + }; + }; + + var PROTOTYPE = 'prototype'; + + var $export = function (type, name, source) { + var IS_FORCED = type & $export.F; + var IS_GLOBAL = type & $export.G; + var IS_STATIC = type & $export.S; + var IS_PROTO = type & $export.P; + var IS_BIND = type & $export.B; + var target = IS_GLOBAL ? _global : IS_STATIC ? _global[name] || (_global[name] = {}) : (_global[name] || {})[PROTOTYPE]; + var exports = IS_GLOBAL ? _core : _core[name] || (_core[name] = {}); + var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {}); + var key, own, out, exp; + if (IS_GLOBAL) { source = name; } + for (key in source) { + // contains in native + own = !IS_FORCED && target && target[key] !== undefined; + // export native or passed + out = (own ? target : source)[key]; + // bind timers to global for call from export context + exp = IS_BIND && own ? _ctx(out, _global) : IS_PROTO && typeof out == 'function' ? _ctx(Function.call, out) : out; + // extend global + if (target) { _redefine(target, key, out, type & $export.U); } + // export + if (exports[key] != out) { _hide(exports, key, exp); } + if (IS_PROTO && expProto[key] != out) { expProto[key] = out; } + } + }; + _global.core = _core; + // type bitmap + $export.F = 1; // forced + $export.G = 2; // global + $export.S = 4; // static + $export.P = 8; // proto + $export.B = 16; // bind + $export.W = 32; // wrap + $export.U = 64; // safe + $export.R = 128; // real proto method for `library` + var _export = $export; + + // 7.1.4 ToInteger + var ceil = Math.ceil; + var floor = Math.floor; + var _toInteger = function (it) { + return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it); + }; + + // 7.2.1 RequireObjectCoercible(argument) + var _defined = function (it) { + if (it == undefined) { throw TypeError("Can't call method on " + it); } + return it; + }; + + // true -> String#at + // false -> String#codePointAt + var _stringAt = function (TO_STRING) { + return function (that, pos) { + var s = String(_defined(that)); + var i = _toInteger(pos); + var l = s.length; + var a, b; + if (i < 0 || i >= l) { return TO_STRING ? '' : undefined; } + a = s.charCodeAt(i); + return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff + ? TO_STRING ? s.charAt(i) : a + : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000; + }; + }; + + var $at = _stringAt(false); + _export(_export.P, 'String', { + // 21.1.3.3 String.prototype.codePointAt(pos) + codePointAt: function codePointAt(pos) { + return $at(this, pos); + } + }); + + var codePointAt = _core.String.codePointAt; + + var max = Math.max; + var min = Math.min; + var _toAbsoluteIndex = function (index, length) { + index = _toInteger(index); + return index < 0 ? max(index + length, 0) : min(index, length); + }; + + var fromCharCode = String.fromCharCode; + var $fromCodePoint = String.fromCodePoint; + + // length should be 1, old FF problem + _export(_export.S + _export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', { + // 21.1.2.2 String.fromCodePoint(...codePoints) + fromCodePoint: function fromCodePoint(x) { + var arguments$1 = arguments; + // eslint-disable-line no-unused-vars + var res = []; + var aLen = arguments.length; + var i = 0; + var code; + while (aLen > i) { + code = +arguments$1[i++]; + if (_toAbsoluteIndex(code, 0x10ffff) !== code) { throw RangeError(code + ' is not a valid code point'); } + res.push(code < 0x10000 + ? fromCharCode(code) + : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00) + ); + } return res.join(''); + } + }); + + var fromCodePoint = _core.String.fromCodePoint; + + // This is a generated file. Do not edit. + var Space_Separator = /[\u1680\u2000-\u200A\u202F\u205F\u3000]/; + var ID_Start = /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE83\uDE86-\uDE89\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]/; + var ID_Continue = /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u08D4-\u08E1\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u09FC\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9-\u0AFF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C80-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D00-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D54-\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1CD0-\u1CD2\u1CD4-\u1CF9\u1D00-\u1DF9\u1DFB-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C5\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE3E\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC00-\uDC4A\uDC50-\uDC59\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDE00-\uDE3E\uDE47\uDE50-\uDE83\uDE86-\uDE99\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC36\uDC38-\uDC40\uDC50-\uDC59\uDC72-\uDC8F\uDC92-\uDCA7\uDCA9-\uDCB6\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD47\uDD50-\uDD59]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6\uDD00-\uDD4A\uDD50-\uDD59]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/; + + var unicode = { + Space_Separator: Space_Separator, + ID_Start: ID_Start, + ID_Continue: ID_Continue + }; + + var util = { + isSpaceSeparator: function isSpaceSeparator (c) { + return typeof c === 'string' && unicode.Space_Separator.test(c) + }, + + isIdStartChar: function isIdStartChar (c) { + return typeof c === 'string' && ( + (c >= 'a' && c <= 'z') || + (c >= 'A' && c <= 'Z') || + (c === '$') || (c === '_') || + unicode.ID_Start.test(c) + ) + }, + + isIdContinueChar: function isIdContinueChar (c) { + return typeof c === 'string' && ( + (c >= 'a' && c <= 'z') || + (c >= 'A' && c <= 'Z') || + (c >= '0' && c <= '9') || + (c === '$') || (c === '_') || + (c === '\u200C') || (c === '\u200D') || + unicode.ID_Continue.test(c) + ) + }, + + isDigit: function isDigit (c) { + return typeof c === 'string' && /[0-9]/.test(c) + }, + + isHexDigit: function isHexDigit (c) { + return typeof c === 'string' && /[0-9A-Fa-f]/.test(c) + }, + }; + + var source; + var parseState; + var stack; + var pos; + var line; + var column; + var token; + var key; + var root; + + var parse = function parse (text, reviver) { + source = String(text); + parseState = 'start'; + stack = []; + pos = 0; + line = 1; + column = 0; + token = undefined; + key = undefined; + root = undefined; + + do { + token = lex(); + + // This code is unreachable. + // if (!parseStates[parseState]) { + // throw invalidParseState() + // } + + parseStates[parseState](); + } while (token.type !== 'eof') + + if (typeof reviver === 'function') { + return internalize({'': root}, '', reviver) + } + + return root + }; + + function internalize (holder, name, reviver) { + var value = holder[name]; + if (value != null && typeof value === 'object') { + if (Array.isArray(value)) { + for (var i = 0; i < value.length; i++) { + var key = String(i); + var replacement = internalize(value, key, reviver); + if (replacement === undefined) { + delete value[key]; + } else { + Object.defineProperty(value, key, { + value: replacement, + writable: true, + enumerable: true, + configurable: true, + }); + } + } + } else { + for (var key$1 in value) { + var replacement$1 = internalize(value, key$1, reviver); + if (replacement$1 === undefined) { + delete value[key$1]; + } else { + Object.defineProperty(value, key$1, { + value: replacement$1, + writable: true, + enumerable: true, + configurable: true, + }); + } + } + } + } + + return reviver.call(holder, name, value) + } + + var lexState; + var buffer; + var doubleQuote; + var sign; + var c; + + function lex () { + lexState = 'default'; + buffer = ''; + doubleQuote = false; + sign = 1; + + for (;;) { + c = peek(); + + // This code is unreachable. + // if (!lexStates[lexState]) { + // throw invalidLexState(lexState) + // } + + var token = lexStates[lexState](); + if (token) { + return token + } + } + } + + function peek () { + if (source[pos]) { + return String.fromCodePoint(source.codePointAt(pos)) + } + } + + function read () { + var c = peek(); + + if (c === '\n') { + line++; + column = 0; + } else if (c) { + column += c.length; + } else { + column++; + } + + if (c) { + pos += c.length; + } + + return c + } + + var lexStates = { + default: function default$1 () { + switch (c) { + case '\t': + case '\v': + case '\f': + case ' ': + case '\u00A0': + case '\uFEFF': + case '\n': + case '\r': + case '\u2028': + case '\u2029': + read(); + return + + case '/': + read(); + lexState = 'comment'; + return + + case undefined: + read(); + return newToken('eof') + } + + if (util.isSpaceSeparator(c)) { + read(); + return + } + + // This code is unreachable. + // if (!lexStates[parseState]) { + // throw invalidLexState(parseState) + // } + + return lexStates[parseState]() + }, + + comment: function comment () { + switch (c) { + case '*': + read(); + lexState = 'multiLineComment'; + return + + case '/': + read(); + lexState = 'singleLineComment'; + return + } + + throw invalidChar(read()) + }, + + multiLineComment: function multiLineComment () { + switch (c) { + case '*': + read(); + lexState = 'multiLineCommentAsterisk'; + return + + case undefined: + throw invalidChar(read()) + } + + read(); + }, + + multiLineCommentAsterisk: function multiLineCommentAsterisk () { + switch (c) { + case '*': + read(); + return + + case '/': + read(); + lexState = 'default'; + return + + case undefined: + throw invalidChar(read()) + } + + read(); + lexState = 'multiLineComment'; + }, + + singleLineComment: function singleLineComment () { + switch (c) { + case '\n': + case '\r': + case '\u2028': + case '\u2029': + read(); + lexState = 'default'; + return + + case undefined: + read(); + return newToken('eof') + } + + read(); + }, + + value: function value () { + switch (c) { + case '{': + case '[': + return newToken('punctuator', read()) + + case 'n': + read(); + literal('ull'); + return newToken('null', null) + + case 't': + read(); + literal('rue'); + return newToken('boolean', true) + + case 'f': + read(); + literal('alse'); + return newToken('boolean', false) + + case '-': + case '+': + if (read() === '-') { + sign = -1; + } + + lexState = 'sign'; + return + + case '.': + buffer = read(); + lexState = 'decimalPointLeading'; + return + + case '0': + buffer = read(); + lexState = 'zero'; + return + + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + buffer = read(); + lexState = 'decimalInteger'; + return + + case 'I': + read(); + literal('nfinity'); + return newToken('numeric', Infinity) + + case 'N': + read(); + literal('aN'); + return newToken('numeric', NaN) + + case '"': + case "'": + doubleQuote = (read() === '"'); + buffer = ''; + lexState = 'string'; + return + } + + throw invalidChar(read()) + }, + + identifierNameStartEscape: function identifierNameStartEscape () { + if (c !== 'u') { + throw invalidChar(read()) + } + + read(); + var u = unicodeEscape(); + switch (u) { + case '$': + case '_': + break + + default: + if (!util.isIdStartChar(u)) { + throw invalidIdentifier() + } + + break + } + + buffer += u; + lexState = 'identifierName'; + }, + + identifierName: function identifierName () { + switch (c) { + case '$': + case '_': + case '\u200C': + case '\u200D': + buffer += read(); + return + + case '\\': + read(); + lexState = 'identifierNameEscape'; + return + } + + if (util.isIdContinueChar(c)) { + buffer += read(); + return + } + + return newToken('identifier', buffer) + }, + + identifierNameEscape: function identifierNameEscape () { + if (c !== 'u') { + throw invalidChar(read()) + } + + read(); + var u = unicodeEscape(); + switch (u) { + case '$': + case '_': + case '\u200C': + case '\u200D': + break + + default: + if (!util.isIdContinueChar(u)) { + throw invalidIdentifier() + } + + break + } + + buffer += u; + lexState = 'identifierName'; + }, + + sign: function sign$1 () { + switch (c) { + case '.': + buffer = read(); + lexState = 'decimalPointLeading'; + return + + case '0': + buffer = read(); + lexState = 'zero'; + return + + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + buffer = read(); + lexState = 'decimalInteger'; + return + + case 'I': + read(); + literal('nfinity'); + return newToken('numeric', sign * Infinity) + + case 'N': + read(); + literal('aN'); + return newToken('numeric', NaN) + } + + throw invalidChar(read()) + }, + + zero: function zero () { + switch (c) { + case '.': + buffer += read(); + lexState = 'decimalPoint'; + return + + case 'e': + case 'E': + buffer += read(); + lexState = 'decimalExponent'; + return + + case 'x': + case 'X': + buffer += read(); + lexState = 'hexadecimal'; + return + } + + return newToken('numeric', sign * 0) + }, + + decimalInteger: function decimalInteger () { + switch (c) { + case '.': + buffer += read(); + lexState = 'decimalPoint'; + return + + case 'e': + case 'E': + buffer += read(); + lexState = 'decimalExponent'; + return + } + + if (util.isDigit(c)) { + buffer += read(); + return + } + + return newToken('numeric', sign * Number(buffer)) + }, + + decimalPointLeading: function decimalPointLeading () { + if (util.isDigit(c)) { + buffer += read(); + lexState = 'decimalFraction'; + return + } + + throw invalidChar(read()) + }, + + decimalPoint: function decimalPoint () { + switch (c) { + case 'e': + case 'E': + buffer += read(); + lexState = 'decimalExponent'; + return + } + + if (util.isDigit(c)) { + buffer += read(); + lexState = 'decimalFraction'; + return + } + + return newToken('numeric', sign * Number(buffer)) + }, + + decimalFraction: function decimalFraction () { + switch (c) { + case 'e': + case 'E': + buffer += read(); + lexState = 'decimalExponent'; + return + } + + if (util.isDigit(c)) { + buffer += read(); + return + } + + return newToken('numeric', sign * Number(buffer)) + }, + + decimalExponent: function decimalExponent () { + switch (c) { + case '+': + case '-': + buffer += read(); + lexState = 'decimalExponentSign'; + return + } + + if (util.isDigit(c)) { + buffer += read(); + lexState = 'decimalExponentInteger'; + return + } + + throw invalidChar(read()) + }, + + decimalExponentSign: function decimalExponentSign () { + if (util.isDigit(c)) { + buffer += read(); + lexState = 'decimalExponentInteger'; + return + } + + throw invalidChar(read()) + }, + + decimalExponentInteger: function decimalExponentInteger () { + if (util.isDigit(c)) { + buffer += read(); + return + } + + return newToken('numeric', sign * Number(buffer)) + }, + + hexadecimal: function hexadecimal () { + if (util.isHexDigit(c)) { + buffer += read(); + lexState = 'hexadecimalInteger'; + return + } + + throw invalidChar(read()) + }, + + hexadecimalInteger: function hexadecimalInteger () { + if (util.isHexDigit(c)) { + buffer += read(); + return + } + + return newToken('numeric', sign * Number(buffer)) + }, + + string: function string () { + switch (c) { + case '\\': + read(); + buffer += escape(); + return + + case '"': + if (doubleQuote) { + read(); + return newToken('string', buffer) + } + + buffer += read(); + return + + case "'": + if (!doubleQuote) { + read(); + return newToken('string', buffer) + } + + buffer += read(); + return + + case '\n': + case '\r': + throw invalidChar(read()) + + case '\u2028': + case '\u2029': + separatorChar(c); + break + + case undefined: + throw invalidChar(read()) + } + + buffer += read(); + }, + + start: function start () { + switch (c) { + case '{': + case '[': + return newToken('punctuator', read()) + + // This code is unreachable since the default lexState handles eof. + // case undefined: + // return newToken('eof') + } + + lexState = 'value'; + }, + + beforePropertyName: function beforePropertyName () { + switch (c) { + case '$': + case '_': + buffer = read(); + lexState = 'identifierName'; + return + + case '\\': + read(); + lexState = 'identifierNameStartEscape'; + return + + case '}': + return newToken('punctuator', read()) + + case '"': + case "'": + doubleQuote = (read() === '"'); + lexState = 'string'; + return + } + + if (util.isIdStartChar(c)) { + buffer += read(); + lexState = 'identifierName'; + return + } + + throw invalidChar(read()) + }, + + afterPropertyName: function afterPropertyName () { + if (c === ':') { + return newToken('punctuator', read()) + } + + throw invalidChar(read()) + }, + + beforePropertyValue: function beforePropertyValue () { + lexState = 'value'; + }, + + afterPropertyValue: function afterPropertyValue () { + switch (c) { + case ',': + case '}': + return newToken('punctuator', read()) + } + + throw invalidChar(read()) + }, + + beforeArrayValue: function beforeArrayValue () { + if (c === ']') { + return newToken('punctuator', read()) + } + + lexState = 'value'; + }, + + afterArrayValue: function afterArrayValue () { + switch (c) { + case ',': + case ']': + return newToken('punctuator', read()) + } + + throw invalidChar(read()) + }, + + end: function end () { + // This code is unreachable since it's handled by the default lexState. + // if (c === undefined) { + // read() + // return newToken('eof') + // } + + throw invalidChar(read()) + }, + }; + + function newToken (type, value) { + return { + type: type, + value: value, + line: line, + column: column, + } + } + + function literal (s) { + for (var i = 0, list = s; i < list.length; i += 1) { + var c = list[i]; + + var p = peek(); + + if (p !== c) { + throw invalidChar(read()) + } + + read(); + } + } + + function escape () { + var c = peek(); + switch (c) { + case 'b': + read(); + return '\b' + + case 'f': + read(); + return '\f' + + case 'n': + read(); + return '\n' + + case 'r': + read(); + return '\r' + + case 't': + read(); + return '\t' + + case 'v': + read(); + return '\v' + + case '0': + read(); + if (util.isDigit(peek())) { + throw invalidChar(read()) + } + + return '\0' + + case 'x': + read(); + return hexEscape() + + case 'u': + read(); + return unicodeEscape() + + case '\n': + case '\u2028': + case '\u2029': + read(); + return '' + + case '\r': + read(); + if (peek() === '\n') { + read(); + } + + return '' + + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + throw invalidChar(read()) + + case undefined: + throw invalidChar(read()) + } + + return read() + } + + function hexEscape () { + var buffer = ''; + var c = peek(); + + if (!util.isHexDigit(c)) { + throw invalidChar(read()) + } + + buffer += read(); + + c = peek(); + if (!util.isHexDigit(c)) { + throw invalidChar(read()) + } + + buffer += read(); + + return String.fromCodePoint(parseInt(buffer, 16)) + } + + function unicodeEscape () { + var buffer = ''; + var count = 4; + + while (count-- > 0) { + var c = peek(); + if (!util.isHexDigit(c)) { + throw invalidChar(read()) + } + + buffer += read(); + } + + return String.fromCodePoint(parseInt(buffer, 16)) + } + + var parseStates = { + start: function start () { + if (token.type === 'eof') { + throw invalidEOF() + } + + push(); + }, + + beforePropertyName: function beforePropertyName () { + switch (token.type) { + case 'identifier': + case 'string': + key = token.value; + parseState = 'afterPropertyName'; + return + + case 'punctuator': + // This code is unreachable since it's handled by the lexState. + // if (token.value !== '}') { + // throw invalidToken() + // } + + pop(); + return + + case 'eof': + throw invalidEOF() + } + + // This code is unreachable since it's handled by the lexState. + // throw invalidToken() + }, + + afterPropertyName: function afterPropertyName () { + // This code is unreachable since it's handled by the lexState. + // if (token.type !== 'punctuator' || token.value !== ':') { + // throw invalidToken() + // } + + if (token.type === 'eof') { + throw invalidEOF() + } + + parseState = 'beforePropertyValue'; + }, + + beforePropertyValue: function beforePropertyValue () { + if (token.type === 'eof') { + throw invalidEOF() + } + + push(); + }, + + beforeArrayValue: function beforeArrayValue () { + if (token.type === 'eof') { + throw invalidEOF() + } + + if (token.type === 'punctuator' && token.value === ']') { + pop(); + return + } + + push(); + }, + + afterPropertyValue: function afterPropertyValue () { + // This code is unreachable since it's handled by the lexState. + // if (token.type !== 'punctuator') { + // throw invalidToken() + // } + + if (token.type === 'eof') { + throw invalidEOF() + } + + switch (token.value) { + case ',': + parseState = 'beforePropertyName'; + return + + case '}': + pop(); + } + + // This code is unreachable since it's handled by the lexState. + // throw invalidToken() + }, + + afterArrayValue: function afterArrayValue () { + // This code is unreachable since it's handled by the lexState. + // if (token.type !== 'punctuator') { + // throw invalidToken() + // } + + if (token.type === 'eof') { + throw invalidEOF() + } + + switch (token.value) { + case ',': + parseState = 'beforeArrayValue'; + return + + case ']': + pop(); + } + + // This code is unreachable since it's handled by the lexState. + // throw invalidToken() + }, + + end: function end () { + // This code is unreachable since it's handled by the lexState. + // if (token.type !== 'eof') { + // throw invalidToken() + // } + }, + }; + + function push () { + var value; + + switch (token.type) { + case 'punctuator': + switch (token.value) { + case '{': + value = {}; + break + + case '[': + value = []; + break + } + + break + + case 'null': + case 'boolean': + case 'numeric': + case 'string': + value = token.value; + break + + // This code is unreachable. + // default: + // throw invalidToken() + } + + if (root === undefined) { + root = value; + } else { + var parent = stack[stack.length - 1]; + if (Array.isArray(parent)) { + parent.push(value); + } else { + Object.defineProperty(parent, key, { + value: value, + writable: true, + enumerable: true, + configurable: true, + }); + } + } + + if (value !== null && typeof value === 'object') { + stack.push(value); + + if (Array.isArray(value)) { + parseState = 'beforeArrayValue'; + } else { + parseState = 'beforePropertyName'; + } + } else { + var current = stack[stack.length - 1]; + if (current == null) { + parseState = 'end'; + } else if (Array.isArray(current)) { + parseState = 'afterArrayValue'; + } else { + parseState = 'afterPropertyValue'; + } + } + } + + function pop () { + stack.pop(); + + var current = stack[stack.length - 1]; + if (current == null) { + parseState = 'end'; + } else if (Array.isArray(current)) { + parseState = 'afterArrayValue'; + } else { + parseState = 'afterPropertyValue'; + } + } + + // This code is unreachable. + // function invalidParseState () { + // return new Error(`JSON5: invalid parse state '${parseState}'`) + // } + + // This code is unreachable. + // function invalidLexState (state) { + // return new Error(`JSON5: invalid lex state '${state}'`) + // } + + function invalidChar (c) { + if (c === undefined) { + return syntaxError(("JSON5: invalid end of input at " + line + ":" + column)) + } + + return syntaxError(("JSON5: invalid character '" + (formatChar(c)) + "' at " + line + ":" + column)) + } + + function invalidEOF () { + return syntaxError(("JSON5: invalid end of input at " + line + ":" + column)) + } + + // This code is unreachable. + // function invalidToken () { + // if (token.type === 'eof') { + // return syntaxError(`JSON5: invalid end of input at ${line}:${column}`) + // } + + // const c = String.fromCodePoint(token.value.codePointAt(0)) + // return syntaxError(`JSON5: invalid character '${formatChar(c)}' at ${line}:${column}`) + // } + + function invalidIdentifier () { + column -= 5; + return syntaxError(("JSON5: invalid identifier character at " + line + ":" + column)) + } + + function separatorChar (c) { + console.warn(("JSON5: '" + (formatChar(c)) + "' in strings is not valid ECMAScript; consider escaping")); + } + + function formatChar (c) { + var replacements = { + "'": "\\'", + '"': '\\"', + '\\': '\\\\', + '\b': '\\b', + '\f': '\\f', + '\n': '\\n', + '\r': '\\r', + '\t': '\\t', + '\v': '\\v', + '\0': '\\0', + '\u2028': '\\u2028', + '\u2029': '\\u2029', + }; + + if (replacements[c]) { + return replacements[c] + } + + if (c < ' ') { + var hexString = c.charCodeAt(0).toString(16); + return '\\x' + ('00' + hexString).substring(hexString.length) + } + + return c + } + + function syntaxError (message) { + var err = new SyntaxError(message); + err.lineNumber = line; + err.columnNumber = column; + return err + } + + var stringify = function stringify (value, replacer, space) { + var stack = []; + var indent = ''; + var propertyList; + var replacerFunc; + var gap = ''; + var quote; + + if ( + replacer != null && + typeof replacer === 'object' && + !Array.isArray(replacer) + ) { + space = replacer.space; + quote = replacer.quote; + replacer = replacer.replacer; + } + + if (typeof replacer === 'function') { + replacerFunc = replacer; + } else if (Array.isArray(replacer)) { + propertyList = []; + for (var i = 0, list = replacer; i < list.length; i += 1) { + var v = list[i]; + + var item = (void 0); + + if (typeof v === 'string') { + item = v; + } else if ( + typeof v === 'number' || + v instanceof String || + v instanceof Number + ) { + item = String(v); + } + + if (item !== undefined && propertyList.indexOf(item) < 0) { + propertyList.push(item); + } + } + } + + if (space instanceof Number) { + space = Number(space); + } else if (space instanceof String) { + space = String(space); + } + + if (typeof space === 'number') { + if (space > 0) { + space = Math.min(10, Math.floor(space)); + gap = ' '.substr(0, space); + } + } else if (typeof space === 'string') { + gap = space.substr(0, 10); + } + + return serializeProperty('', {'': value}) + + function serializeProperty (key, holder) { + var value = holder[key]; + if (value != null) { + if (typeof value.toJSON5 === 'function') { + value = value.toJSON5(key); + } else if (typeof value.toJSON === 'function') { + value = value.toJSON(key); + } + } + + if (replacerFunc) { + value = replacerFunc.call(holder, key, value); + } + + if (value instanceof Number) { + value = Number(value); + } else if (value instanceof String) { + value = String(value); + } else if (value instanceof Boolean) { + value = value.valueOf(); + } + + switch (value) { + case null: return 'null' + case true: return 'true' + case false: return 'false' + } + + if (typeof value === 'string') { + return quoteString(value, false) + } + + if (typeof value === 'number') { + return String(value) + } + + if (typeof value === 'object') { + return Array.isArray(value) ? serializeArray(value) : serializeObject(value) + } + + return undefined + } + + function quoteString (value) { + var quotes = { + "'": 0.1, + '"': 0.2, + }; + + var replacements = { + "'": "\\'", + '"': '\\"', + '\\': '\\\\', + '\b': '\\b', + '\f': '\\f', + '\n': '\\n', + '\r': '\\r', + '\t': '\\t', + '\v': '\\v', + '\0': '\\0', + '\u2028': '\\u2028', + '\u2029': '\\u2029', + }; + + var product = ''; + + for (var i = 0; i < value.length; i++) { + var c = value[i]; + switch (c) { + case "'": + case '"': + quotes[c]++; + product += c; + continue + + case '\0': + if (util.isDigit(value[i + 1])) { + product += '\\x00'; + continue + } + } + + if (replacements[c]) { + product += replacements[c]; + continue + } + + if (c < ' ') { + var hexString = c.charCodeAt(0).toString(16); + product += '\\x' + ('00' + hexString).substring(hexString.length); + continue + } + + product += c; + } + + var quoteChar = quote || Object.keys(quotes).reduce(function (a, b) { return (quotes[a] < quotes[b]) ? a : b; }); + + product = product.replace(new RegExp(quoteChar, 'g'), replacements[quoteChar]); + + return quoteChar + product + quoteChar + } + + function serializeObject (value) { + if (stack.indexOf(value) >= 0) { + throw TypeError('Converting circular structure to JSON5') + } + + stack.push(value); + + var stepback = indent; + indent = indent + gap; + + var keys = propertyList || Object.keys(value); + var partial = []; + for (var i = 0, list = keys; i < list.length; i += 1) { + var key = list[i]; + + var propertyString = serializeProperty(key, value); + if (propertyString !== undefined) { + var member = serializeKey(key) + ':'; + if (gap !== '') { + member += ' '; + } + member += propertyString; + partial.push(member); + } + } + + var final; + if (partial.length === 0) { + final = '{}'; + } else { + var properties; + if (gap === '') { + properties = partial.join(','); + final = '{' + properties + '}'; + } else { + var separator = ',\n' + indent; + properties = partial.join(separator); + final = '{\n' + indent + properties + ',\n' + stepback + '}'; + } + } + + stack.pop(); + indent = stepback; + return final + } + + function serializeKey (key) { + if (key.length === 0) { + return quoteString(key, true) + } + + var firstChar = String.fromCodePoint(key.codePointAt(0)); + if (!util.isIdStartChar(firstChar)) { + return quoteString(key, true) + } + + for (var i = firstChar.length; i < key.length; i++) { + if (!util.isIdContinueChar(String.fromCodePoint(key.codePointAt(i)))) { + return quoteString(key, true) + } + } + + return key + } + + function serializeArray (value) { + if (stack.indexOf(value) >= 0) { + throw TypeError('Converting circular structure to JSON5') + } + + stack.push(value); + + var stepback = indent; + indent = indent + gap; + + var partial = []; + for (var i = 0; i < value.length; i++) { + var propertyString = serializeProperty(String(i), value); + partial.push((propertyString !== undefined) ? propertyString : 'null'); + } + + var final; + if (partial.length === 0) { + final = '[]'; + } else { + if (gap === '') { + var properties = partial.join(','); + final = '[' + properties + ']'; + } else { + var separator = ',\n' + indent; + var properties$1 = partial.join(separator); + final = '[\n' + indent + properties$1 + ',\n' + stepback + ']'; + } + } + + stack.pop(); + indent = stepback; + return final + } + }; + + var JSON5 = { + parse: parse, + stringify: stringify, + }; + + var lib = JSON5; + + var es5 = lib; + + return es5; + +}))); diff --git a/node_modules/json5/dist/index.min.js b/node_modules/json5/dist/index.min.js new file mode 100644 index 00000000..ddce3e2d --- /dev/null +++ b/node_modules/json5/dist/index.min.js @@ -0,0 +1 @@ +!function(u,D){"object"==typeof exports&&"undefined"!=typeof module?module.exports=D():"function"==typeof define&&define.amd?define(D):u.JSON5=D()}(this,function(){"use strict";function u(u,D){return u(D={exports:{}},D.exports),D.exports}var D=u(function(u){var D=u.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=D)}),e=u(function(u){var D=u.exports={version:"2.6.5"};"number"==typeof __e&&(__e=D)}),r=(e.version,function(u){return"object"==typeof u?null!==u:"function"==typeof u}),t=function(u){if(!r(u))throw TypeError(u+" is not an object!");return u},n=function(u){try{return!!u()}catch(u){return!0}},F=!n(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}),C=D.document,A=r(C)&&r(C.createElement),i=!F&&!n(function(){return 7!=Object.defineProperty((u="div",A?C.createElement(u):{}),"a",{get:function(){return 7}}).a;var u}),E=Object.defineProperty,o={f:F?Object.defineProperty:function(u,D,e){if(t(u),D=function(u,D){if(!r(u))return u;var e,t;if(D&&"function"==typeof(e=u.toString)&&!r(t=e.call(u)))return t;if("function"==typeof(e=u.valueOf)&&!r(t=e.call(u)))return t;if(!D&&"function"==typeof(e=u.toString)&&!r(t=e.call(u)))return t;throw TypeError("Can't convert object to primitive value")}(D,!0),t(e),i)try{return E(u,D,e)}catch(u){}if("get"in e||"set"in e)throw TypeError("Accessors not supported!");return"value"in e&&(u[D]=e.value),u}},a=F?function(u,D,e){return o.f(u,D,function(u,D){return{enumerable:!(1&u),configurable:!(2&u),writable:!(4&u),value:D}}(1,e))}:function(u,D,e){return u[D]=e,u},c={}.hasOwnProperty,B=function(u,D){return c.call(u,D)},s=0,f=Math.random(),l=u(function(u){var r=D["__core-js_shared__"]||(D["__core-js_shared__"]={});(u.exports=function(u,D){return r[u]||(r[u]=void 0!==D?D:{})})("versions",[]).push({version:e.version,mode:"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})})("native-function-to-string",Function.toString),d=u(function(u){var r,t="Symbol(".concat(void 0===(r="src")?"":r,")_",(++s+f).toString(36)),n=(""+l).split("toString");e.inspectSource=function(u){return l.call(u)},(u.exports=function(u,e,r,F){var C="function"==typeof r;C&&(B(r,"name")||a(r,"name",e)),u[e]!==r&&(C&&(B(r,t)||a(r,t,u[e]?""+u[e]:n.join(String(e)))),u===D?u[e]=r:F?u[e]?u[e]=r:a(u,e,r):(delete u[e],a(u,e,r)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[t]||l.call(this)})}),v=function(u,D,e){if(function(u){if("function"!=typeof u)throw TypeError(u+" is not a function!")}(u),void 0===D)return u;switch(e){case 1:return function(e){return u.call(D,e)};case 2:return function(e,r){return u.call(D,e,r)};case 3:return function(e,r,t){return u.call(D,e,r,t)}}return function(){return u.apply(D,arguments)}},p=function(u,r,t){var n,F,C,A,i=u&p.F,E=u&p.G,o=u&p.S,c=u&p.P,B=u&p.B,s=E?D:o?D[r]||(D[r]={}):(D[r]||{}).prototype,f=E?e:e[r]||(e[r]={}),l=f.prototype||(f.prototype={});for(n in E&&(t=r),t)C=((F=!i&&s&&void 0!==s[n])?s:t)[n],A=B&&F?v(C,D):c&&"function"==typeof C?v(Function.call,C):C,s&&d(s,n,C,u&p.U),f[n]!=C&&a(f,n,A),c&&l[n]!=C&&(l[n]=C)};D.core=e,p.F=1,p.G=2,p.S=4,p.P=8,p.B=16,p.W=32,p.U=64,p.R=128;var h,m=p,g=Math.ceil,y=Math.floor,w=function(u){return isNaN(u=+u)?0:(u>0?y:g)(u)},b=(h=!1,function(u,D){var e,r,t=String(function(u){if(null==u)throw TypeError("Can't call method on "+u);return u}(u)),n=w(D),F=t.length;return n<0||n>=F?h?"":void 0:(e=t.charCodeAt(n))<55296||e>56319||n+1===F||(r=t.charCodeAt(n+1))<56320||r>57343?h?t.charAt(n):e:h?t.slice(n,n+2):r-56320+(e-55296<<10)+65536});m(m.P,"String",{codePointAt:function(u){return b(this,u)}});e.String.codePointAt;var S=Math.max,x=Math.min,N=String.fromCharCode,P=String.fromCodePoint;m(m.S+m.F*(!!P&&1!=P.length),"String",{fromCodePoint:function(u){for(var D,e,r,t=arguments,n=[],F=arguments.length,C=0;F>C;){if(D=+t[C++],r=1114111,((e=w(e=D))<0?S(e+r,0):x(e,r))!==D)throw RangeError(D+" is not a valid code point");n.push(D<65536?N(D):N(55296+((D-=65536)>>10),D%1024+56320))}return n.join("")}});e.String.fromCodePoint;var _,O,j,I,V,J,M,k,L,T,z,H,$,R,G={Space_Separator:/[\u1680\u2000-\u200A\u202F\u205F\u3000]/,ID_Start:/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE83\uDE86-\uDE89\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]/,ID_Continue:/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u08D4-\u08E1\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u09FC\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9-\u0AFF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C80-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D00-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D54-\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1CD0-\u1CD2\u1CD4-\u1CF9\u1D00-\u1DF9\u1DFB-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C5\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE3E\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC00-\uDC4A\uDC50-\uDC59\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDE00-\uDE3E\uDE47\uDE50-\uDE83\uDE86-\uDE99\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC36\uDC38-\uDC40\uDC50-\uDC59\uDC72-\uDC8F\uDC92-\uDCA7\uDCA9-\uDCB6\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD47\uDD50-\uDD59]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6\uDD00-\uDD4A\uDD50-\uDD59]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/},U={isSpaceSeparator:function(u){return"string"==typeof u&&G.Space_Separator.test(u)},isIdStartChar:function(u){return"string"==typeof u&&(u>="a"&&u<="z"||u>="A"&&u<="Z"||"$"===u||"_"===u||G.ID_Start.test(u))},isIdContinueChar:function(u){return"string"==typeof u&&(u>="a"&&u<="z"||u>="A"&&u<="Z"||u>="0"&&u<="9"||"$"===u||"_"===u||"‌"===u||"‍"===u||G.ID_Continue.test(u))},isDigit:function(u){return"string"==typeof u&&/[0-9]/.test(u)},isHexDigit:function(u){return"string"==typeof u&&/[0-9A-Fa-f]/.test(u)}};function Z(){for(T="default",z="",H=!1,$=1;;){R=q();var u=X[T]();if(u)return u}}function q(){if(_[I])return String.fromCodePoint(_.codePointAt(I))}function W(){var u=q();return"\n"===u?(V++,J=0):u?J+=u.length:J++,u&&(I+=u.length),u}var X={default:function(){switch(R){case"\t":case"\v":case"\f":case" ":case" ":case"\ufeff":case"\n":case"\r":case"\u2028":case"\u2029":return void W();case"/":return W(),void(T="comment");case void 0:return W(),K("eof")}if(!U.isSpaceSeparator(R))return X[O]();W()},comment:function(){switch(R){case"*":return W(),void(T="multiLineComment");case"/":return W(),void(T="singleLineComment")}throw ru(W())},multiLineComment:function(){switch(R){case"*":return W(),void(T="multiLineCommentAsterisk");case void 0:throw ru(W())}W()},multiLineCommentAsterisk:function(){switch(R){case"*":return void W();case"/":return W(),void(T="default");case void 0:throw ru(W())}W(),T="multiLineComment"},singleLineComment:function(){switch(R){case"\n":case"\r":case"\u2028":case"\u2029":return W(),void(T="default");case void 0:return W(),K("eof")}W()},value:function(){switch(R){case"{":case"[":return K("punctuator",W());case"n":return W(),Q("ull"),K("null",null);case"t":return W(),Q("rue"),K("boolean",!0);case"f":return W(),Q("alse"),K("boolean",!1);case"-":case"+":return"-"===W()&&($=-1),void(T="sign");case".":return z=W(),void(T="decimalPointLeading");case"0":return z=W(),void(T="zero");case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":return z=W(),void(T="decimalInteger");case"I":return W(),Q("nfinity"),K("numeric",1/0);case"N":return W(),Q("aN"),K("numeric",NaN);case'"':case"'":return H='"'===W(),z="",void(T="string")}throw ru(W())},identifierNameStartEscape:function(){if("u"!==R)throw ru(W());W();var u=Y();switch(u){case"$":case"_":break;default:if(!U.isIdStartChar(u))throw nu()}z+=u,T="identifierName"},identifierName:function(){switch(R){case"$":case"_":case"‌":case"‍":return void(z+=W());case"\\":return W(),void(T="identifierNameEscape")}if(!U.isIdContinueChar(R))return K("identifier",z);z+=W()},identifierNameEscape:function(){if("u"!==R)throw ru(W());W();var u=Y();switch(u){case"$":case"_":case"‌":case"‍":break;default:if(!U.isIdContinueChar(u))throw nu()}z+=u,T="identifierName"},sign:function(){switch(R){case".":return z=W(),void(T="decimalPointLeading");case"0":return z=W(),void(T="zero");case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":return z=W(),void(T="decimalInteger");case"I":return W(),Q("nfinity"),K("numeric",$*(1/0));case"N":return W(),Q("aN"),K("numeric",NaN)}throw ru(W())},zero:function(){switch(R){case".":return z+=W(),void(T="decimalPoint");case"e":case"E":return z+=W(),void(T="decimalExponent");case"x":case"X":return z+=W(),void(T="hexadecimal")}return K("numeric",0*$)},decimalInteger:function(){switch(R){case".":return z+=W(),void(T="decimalPoint");case"e":case"E":return z+=W(),void(T="decimalExponent")}if(!U.isDigit(R))return K("numeric",$*Number(z));z+=W()},decimalPointLeading:function(){if(U.isDigit(R))return z+=W(),void(T="decimalFraction");throw ru(W())},decimalPoint:function(){switch(R){case"e":case"E":return z+=W(),void(T="decimalExponent")}return U.isDigit(R)?(z+=W(),void(T="decimalFraction")):K("numeric",$*Number(z))},decimalFraction:function(){switch(R){case"e":case"E":return z+=W(),void(T="decimalExponent")}if(!U.isDigit(R))return K("numeric",$*Number(z));z+=W()},decimalExponent:function(){switch(R){case"+":case"-":return z+=W(),void(T="decimalExponentSign")}if(U.isDigit(R))return z+=W(),void(T="decimalExponentInteger");throw ru(W())},decimalExponentSign:function(){if(U.isDigit(R))return z+=W(),void(T="decimalExponentInteger");throw ru(W())},decimalExponentInteger:function(){if(!U.isDigit(R))return K("numeric",$*Number(z));z+=W()},hexadecimal:function(){if(U.isHexDigit(R))return z+=W(),void(T="hexadecimalInteger");throw ru(W())},hexadecimalInteger:function(){if(!U.isHexDigit(R))return K("numeric",$*Number(z));z+=W()},string:function(){switch(R){case"\\":return W(),void(z+=function(){switch(q()){case"b":return W(),"\b";case"f":return W(),"\f";case"n":return W(),"\n";case"r":return W(),"\r";case"t":return W(),"\t";case"v":return W(),"\v";case"0":if(W(),U.isDigit(q()))throw ru(W());return"\0";case"x":return W(),function(){var u="",D=q();if(!U.isHexDigit(D))throw ru(W());if(u+=W(),D=q(),!U.isHexDigit(D))throw ru(W());return u+=W(),String.fromCodePoint(parseInt(u,16))}();case"u":return W(),Y();case"\n":case"\u2028":case"\u2029":return W(),"";case"\r":return W(),"\n"===q()&&W(),"";case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":case void 0:throw ru(W())}return W()}());case'"':return H?(W(),K("string",z)):void(z+=W());case"'":return H?void(z+=W()):(W(),K("string",z));case"\n":case"\r":throw ru(W());case"\u2028":case"\u2029":!function(u){console.warn("JSON5: '"+Fu(u)+"' in strings is not valid ECMAScript; consider escaping")}(R);break;case void 0:throw ru(W())}z+=W()},start:function(){switch(R){case"{":case"[":return K("punctuator",W())}T="value"},beforePropertyName:function(){switch(R){case"$":case"_":return z=W(),void(T="identifierName");case"\\":return W(),void(T="identifierNameStartEscape");case"}":return K("punctuator",W());case'"':case"'":return H='"'===W(),void(T="string")}if(U.isIdStartChar(R))return z+=W(),void(T="identifierName");throw ru(W())},afterPropertyName:function(){if(":"===R)return K("punctuator",W());throw ru(W())},beforePropertyValue:function(){T="value"},afterPropertyValue:function(){switch(R){case",":case"}":return K("punctuator",W())}throw ru(W())},beforeArrayValue:function(){if("]"===R)return K("punctuator",W());T="value"},afterArrayValue:function(){switch(R){case",":case"]":return K("punctuator",W())}throw ru(W())},end:function(){throw ru(W())}};function K(u,D){return{type:u,value:D,line:V,column:J}}function Q(u){for(var D=0,e=u;D0;){var e=q();if(!U.isHexDigit(e))throw ru(W());u+=W()}return String.fromCodePoint(parseInt(u,16))}var uu={start:function(){if("eof"===M.type)throw tu();Du()},beforePropertyName:function(){switch(M.type){case"identifier":case"string":return k=M.value,void(O="afterPropertyName");case"punctuator":return void eu();case"eof":throw tu()}},afterPropertyName:function(){if("eof"===M.type)throw tu();O="beforePropertyValue"},beforePropertyValue:function(){if("eof"===M.type)throw tu();Du()},beforeArrayValue:function(){if("eof"===M.type)throw tu();"punctuator"!==M.type||"]"!==M.value?Du():eu()},afterPropertyValue:function(){if("eof"===M.type)throw tu();switch(M.value){case",":return void(O="beforePropertyName");case"}":eu()}},afterArrayValue:function(){if("eof"===M.type)throw tu();switch(M.value){case",":return void(O="beforeArrayValue");case"]":eu()}},end:function(){}};function Du(){var u;switch(M.type){case"punctuator":switch(M.value){case"{":u={};break;case"[":u=[]}break;case"null":case"boolean":case"numeric":case"string":u=M.value}if(void 0===L)L=u;else{var D=j[j.length-1];Array.isArray(D)?D.push(u):Object.defineProperty(D,k,{value:u,writable:!0,enumerable:!0,configurable:!0})}if(null!==u&&"object"==typeof u)j.push(u),O=Array.isArray(u)?"beforeArrayValue":"beforePropertyName";else{var e=j[j.length-1];O=null==e?"end":Array.isArray(e)?"afterArrayValue":"afterPropertyValue"}}function eu(){j.pop();var u=j[j.length-1];O=null==u?"end":Array.isArray(u)?"afterArrayValue":"afterPropertyValue"}function ru(u){return Cu(void 0===u?"JSON5: invalid end of input at "+V+":"+J:"JSON5: invalid character '"+Fu(u)+"' at "+V+":"+J)}function tu(){return Cu("JSON5: invalid end of input at "+V+":"+J)}function nu(){return Cu("JSON5: invalid identifier character at "+V+":"+(J-=5))}function Fu(u){var D={"'":"\\'",'"':'\\"',"\\":"\\\\","\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r","\t":"\\t","\v":"\\v","\0":"\\0","\u2028":"\\u2028","\u2029":"\\u2029"};if(D[u])return D[u];if(u<" "){var e=u.charCodeAt(0).toString(16);return"\\x"+("00"+e).substring(e.length)}return u}function Cu(u){var D=new SyntaxError(u);return D.lineNumber=V,D.columnNumber=J,D}return{parse:function(u,D){_=String(u),O="start",j=[],I=0,V=1,J=0,M=void 0,k=void 0,L=void 0;do{M=Z(),uu[O]()}while("eof"!==M.type);return"function"==typeof D?function u(D,e,r){var t=D[e];if(null!=t&&"object"==typeof t)if(Array.isArray(t))for(var n=0;n0&&(e=Math.min(10,Math.floor(e)),A=" ".substr(0,e)):"string"==typeof e&&(A=e.substr(0,10)),c("",{"":u});function c(u,D){var e=D[u];switch(null!=e&&("function"==typeof e.toJSON5?e=e.toJSON5(u):"function"==typeof e.toJSON&&(e=e.toJSON(u))),t&&(e=t.call(D,u,e)),e instanceof Number?e=Number(e):e instanceof String?e=String(e):e instanceof Boolean&&(e=e.valueOf()),e){case null:return"null";case!0:return"true";case!1:return"false"}return"string"==typeof e?B(e):"number"==typeof e?String(e):"object"==typeof e?Array.isArray(e)?function(u){if(F.indexOf(u)>=0)throw TypeError("Converting circular structure to JSON5");F.push(u);var D=C;C+=A;for(var e,r=[],t=0;t=0)throw TypeError("Converting circular structure to JSON5");F.push(u);var D=C;C+=A;for(var e,t,n=r||Object.keys(u),i=[],E=0,o=n;E"string"==typeof u&&unicode.Space_Separator.test(u),isIdStartChar:u=>"string"==typeof u&&(u>="a"&&u<="z"||u>="A"&&u<="Z"||"$"===u||"_"===u||unicode.ID_Start.test(u)),isIdContinueChar:u=>"string"==typeof u&&(u>="a"&&u<="z"||u>="A"&&u<="Z"||u>="0"&&u<="9"||"$"===u||"_"===u||"‌"===u||"‍"===u||unicode.ID_Continue.test(u)),isDigit:u=>"string"==typeof u&&/[0-9]/.test(u),isHexDigit:u=>"string"==typeof u&&/[0-9A-Fa-f]/.test(u)};let source,parseState,stack,pos,line,column,token,key,root;var parse=function(u,D){source=String(u),parseState="start",stack=[],pos=0,line=1,column=0,token=void 0,key=void 0,root=void 0;do{token=lex(),parseStates[parseState]()}while("eof"!==token.type);return"function"==typeof D?internalize({"":root},"",D):root};function internalize(u,D,e){const r=u[D];if(null!=r&&"object"==typeof r)if(Array.isArray(r))for(let u=0;u0;){const D=peek();if(!util.isHexDigit(D))throw invalidChar(read());u+=read()}return String.fromCodePoint(parseInt(u,16))}const parseStates={start(){if("eof"===token.type)throw invalidEOF();push()},beforePropertyName(){switch(token.type){case"identifier":case"string":return key=token.value,void(parseState="afterPropertyName");case"punctuator":return void pop();case"eof":throw invalidEOF()}},afterPropertyName(){if("eof"===token.type)throw invalidEOF();parseState="beforePropertyValue"},beforePropertyValue(){if("eof"===token.type)throw invalidEOF();push()},beforeArrayValue(){if("eof"===token.type)throw invalidEOF();"punctuator"!==token.type||"]"!==token.value?push():pop()},afterPropertyValue(){if("eof"===token.type)throw invalidEOF();switch(token.value){case",":return void(parseState="beforePropertyName");case"}":pop()}},afterArrayValue(){if("eof"===token.type)throw invalidEOF();switch(token.value){case",":return void(parseState="beforeArrayValue");case"]":pop()}},end(){}};function push(){let u;switch(token.type){case"punctuator":switch(token.value){case"{":u={};break;case"[":u=[]}break;case"null":case"boolean":case"numeric":case"string":u=token.value}if(void 0===root)root=u;else{const D=stack[stack.length-1];Array.isArray(D)?D.push(u):Object.defineProperty(D,key,{value:u,writable:!0,enumerable:!0,configurable:!0})}if(null!==u&&"object"==typeof u)stack.push(u),parseState=Array.isArray(u)?"beforeArrayValue":"beforePropertyName";else{const u=stack[stack.length-1];parseState=null==u?"end":Array.isArray(u)?"afterArrayValue":"afterPropertyValue"}}function pop(){stack.pop();const u=stack[stack.length-1];parseState=null==u?"end":Array.isArray(u)?"afterArrayValue":"afterPropertyValue"}function invalidChar(u){return syntaxError(void 0===u?`JSON5: invalid end of input at ${line}:${column}`:`JSON5: invalid character '${formatChar(u)}' at ${line}:${column}`)}function invalidEOF(){return syntaxError(`JSON5: invalid end of input at ${line}:${column}`)}function invalidIdentifier(){return syntaxError(`JSON5: invalid identifier character at ${line}:${column-=5}`)}function separatorChar(u){console.warn(`JSON5: '${formatChar(u)}' in strings is not valid ECMAScript; consider escaping`)}function formatChar(u){const D={"'":"\\'",'"':'\\"',"\\":"\\\\","\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r","\t":"\\t","\v":"\\v","\0":"\\0","\u2028":"\\u2028","\u2029":"\\u2029"};if(D[u])return D[u];if(u<" "){const D=u.charCodeAt(0).toString(16);return"\\x"+("00"+D).substring(D.length)}return u}function syntaxError(u){const D=new SyntaxError(u);return D.lineNumber=line,D.columnNumber=column,D}var stringify=function(u,D,e){const r=[];let t,F,C,a="",A="";if(null==D||"object"!=typeof D||Array.isArray(D)||(e=D.space,C=D.quote,D=D.replacer),"function"==typeof D)F=D;else if(Array.isArray(D)){t=[];for(const u of D){let D;"string"==typeof u?D=u:("number"==typeof u||u instanceof String||u instanceof Number)&&(D=String(u)),void 0!==D&&t.indexOf(D)<0&&t.push(D)}}return e instanceof Number?e=Number(e):e instanceof String&&(e=String(e)),"number"==typeof e?e>0&&(e=Math.min(10,Math.floor(e)),A=" ".substr(0,e)):"string"==typeof e&&(A=e.substr(0,10)),n("",{"":u});function n(u,D){let e=D[u];switch(null!=e&&("function"==typeof e.toJSON5?e=e.toJSON5(u):"function"==typeof e.toJSON&&(e=e.toJSON(u))),F&&(e=F.call(D,u,e)),e instanceof Number?e=Number(e):e instanceof String?e=String(e):e instanceof Boolean&&(e=e.valueOf()),e){case null:return"null";case!0:return"true";case!1:return"false"}return"string"==typeof e?E(e):"number"==typeof e?String(e):"object"==typeof e?Array.isArray(e)?function(u){if(r.indexOf(u)>=0)throw TypeError("Converting circular structure to JSON5");r.push(u);let D=a;a+=A;let e,t=[];for(let D=0;D=0)throw TypeError("Converting circular structure to JSON5");r.push(u);let D=a;a+=A;let e,F=t||Object.keys(u),C=[];for(const D of F){const e=n(D,u);if(void 0!==e){let u=i(D)+":";""!==A&&(u+=" "),u+=e,C.push(u)}}if(0===C.length)e="{}";else{let u;if(""===A)u=C.join(","),e="{"+u+"}";else{let r=",\n"+a;u=C.join(r),e="{\n"+a+u+",\n"+D+"}"}}return r.pop(),a=D,e}(e):void 0}function E(u){const D={"'":.1,'"':.2},e={"'":"\\'",'"':'\\"',"\\":"\\\\","\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r","\t":"\\t","\v":"\\v","\0":"\\0","\u2028":"\\u2028","\u2029":"\\u2029"};let r="";for(let t=0;tD[u]= 'a' && c <= 'z') || + (c >= 'A' && c <= 'Z') || + (c === '$') || (c === '_') || + unicode.ID_Start.test(c) + ) + }, + + isIdContinueChar (c) { + return typeof c === 'string' && ( + (c >= 'a' && c <= 'z') || + (c >= 'A' && c <= 'Z') || + (c >= '0' && c <= '9') || + (c === '$') || (c === '_') || + (c === '\u200C') || (c === '\u200D') || + unicode.ID_Continue.test(c) + ) + }, + + isDigit (c) { + return typeof c === 'string' && /[0-9]/.test(c) + }, + + isHexDigit (c) { + return typeof c === 'string' && /[0-9A-Fa-f]/.test(c) + }, +}; + +let source; +let parseState; +let stack; +let pos; +let line; +let column; +let token; +let key; +let root; + +var parse = function parse (text, reviver) { + source = String(text); + parseState = 'start'; + stack = []; + pos = 0; + line = 1; + column = 0; + token = undefined; + key = undefined; + root = undefined; + + do { + token = lex(); + + // This code is unreachable. + // if (!parseStates[parseState]) { + // throw invalidParseState() + // } + + parseStates[parseState](); + } while (token.type !== 'eof') + + if (typeof reviver === 'function') { + return internalize({'': root}, '', reviver) + } + + return root +}; + +function internalize (holder, name, reviver) { + const value = holder[name]; + if (value != null && typeof value === 'object') { + if (Array.isArray(value)) { + for (let i = 0; i < value.length; i++) { + const key = String(i); + const replacement = internalize(value, key, reviver); + if (replacement === undefined) { + delete value[key]; + } else { + Object.defineProperty(value, key, { + value: replacement, + writable: true, + enumerable: true, + configurable: true, + }); + } + } + } else { + for (const key in value) { + const replacement = internalize(value, key, reviver); + if (replacement === undefined) { + delete value[key]; + } else { + Object.defineProperty(value, key, { + value: replacement, + writable: true, + enumerable: true, + configurable: true, + }); + } + } + } + } + + return reviver.call(holder, name, value) +} + +let lexState; +let buffer; +let doubleQuote; +let sign; +let c; + +function lex () { + lexState = 'default'; + buffer = ''; + doubleQuote = false; + sign = 1; + + for (;;) { + c = peek(); + + // This code is unreachable. + // if (!lexStates[lexState]) { + // throw invalidLexState(lexState) + // } + + const token = lexStates[lexState](); + if (token) { + return token + } + } +} + +function peek () { + if (source[pos]) { + return String.fromCodePoint(source.codePointAt(pos)) + } +} + +function read () { + const c = peek(); + + if (c === '\n') { + line++; + column = 0; + } else if (c) { + column += c.length; + } else { + column++; + } + + if (c) { + pos += c.length; + } + + return c +} + +const lexStates = { + default () { + switch (c) { + case '\t': + case '\v': + case '\f': + case ' ': + case '\u00A0': + case '\uFEFF': + case '\n': + case '\r': + case '\u2028': + case '\u2029': + read(); + return + + case '/': + read(); + lexState = 'comment'; + return + + case undefined: + read(); + return newToken('eof') + } + + if (util.isSpaceSeparator(c)) { + read(); + return + } + + // This code is unreachable. + // if (!lexStates[parseState]) { + // throw invalidLexState(parseState) + // } + + return lexStates[parseState]() + }, + + comment () { + switch (c) { + case '*': + read(); + lexState = 'multiLineComment'; + return + + case '/': + read(); + lexState = 'singleLineComment'; + return + } + + throw invalidChar(read()) + }, + + multiLineComment () { + switch (c) { + case '*': + read(); + lexState = 'multiLineCommentAsterisk'; + return + + case undefined: + throw invalidChar(read()) + } + + read(); + }, + + multiLineCommentAsterisk () { + switch (c) { + case '*': + read(); + return + + case '/': + read(); + lexState = 'default'; + return + + case undefined: + throw invalidChar(read()) + } + + read(); + lexState = 'multiLineComment'; + }, + + singleLineComment () { + switch (c) { + case '\n': + case '\r': + case '\u2028': + case '\u2029': + read(); + lexState = 'default'; + return + + case undefined: + read(); + return newToken('eof') + } + + read(); + }, + + value () { + switch (c) { + case '{': + case '[': + return newToken('punctuator', read()) + + case 'n': + read(); + literal('ull'); + return newToken('null', null) + + case 't': + read(); + literal('rue'); + return newToken('boolean', true) + + case 'f': + read(); + literal('alse'); + return newToken('boolean', false) + + case '-': + case '+': + if (read() === '-') { + sign = -1; + } + + lexState = 'sign'; + return + + case '.': + buffer = read(); + lexState = 'decimalPointLeading'; + return + + case '0': + buffer = read(); + lexState = 'zero'; + return + + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + buffer = read(); + lexState = 'decimalInteger'; + return + + case 'I': + read(); + literal('nfinity'); + return newToken('numeric', Infinity) + + case 'N': + read(); + literal('aN'); + return newToken('numeric', NaN) + + case '"': + case "'": + doubleQuote = (read() === '"'); + buffer = ''; + lexState = 'string'; + return + } + + throw invalidChar(read()) + }, + + identifierNameStartEscape () { + if (c !== 'u') { + throw invalidChar(read()) + } + + read(); + const u = unicodeEscape(); + switch (u) { + case '$': + case '_': + break + + default: + if (!util.isIdStartChar(u)) { + throw invalidIdentifier() + } + + break + } + + buffer += u; + lexState = 'identifierName'; + }, + + identifierName () { + switch (c) { + case '$': + case '_': + case '\u200C': + case '\u200D': + buffer += read(); + return + + case '\\': + read(); + lexState = 'identifierNameEscape'; + return + } + + if (util.isIdContinueChar(c)) { + buffer += read(); + return + } + + return newToken('identifier', buffer) + }, + + identifierNameEscape () { + if (c !== 'u') { + throw invalidChar(read()) + } + + read(); + const u = unicodeEscape(); + switch (u) { + case '$': + case '_': + case '\u200C': + case '\u200D': + break + + default: + if (!util.isIdContinueChar(u)) { + throw invalidIdentifier() + } + + break + } + + buffer += u; + lexState = 'identifierName'; + }, + + sign () { + switch (c) { + case '.': + buffer = read(); + lexState = 'decimalPointLeading'; + return + + case '0': + buffer = read(); + lexState = 'zero'; + return + + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + buffer = read(); + lexState = 'decimalInteger'; + return + + case 'I': + read(); + literal('nfinity'); + return newToken('numeric', sign * Infinity) + + case 'N': + read(); + literal('aN'); + return newToken('numeric', NaN) + } + + throw invalidChar(read()) + }, + + zero () { + switch (c) { + case '.': + buffer += read(); + lexState = 'decimalPoint'; + return + + case 'e': + case 'E': + buffer += read(); + lexState = 'decimalExponent'; + return + + case 'x': + case 'X': + buffer += read(); + lexState = 'hexadecimal'; + return + } + + return newToken('numeric', sign * 0) + }, + + decimalInteger () { + switch (c) { + case '.': + buffer += read(); + lexState = 'decimalPoint'; + return + + case 'e': + case 'E': + buffer += read(); + lexState = 'decimalExponent'; + return + } + + if (util.isDigit(c)) { + buffer += read(); + return + } + + return newToken('numeric', sign * Number(buffer)) + }, + + decimalPointLeading () { + if (util.isDigit(c)) { + buffer += read(); + lexState = 'decimalFraction'; + return + } + + throw invalidChar(read()) + }, + + decimalPoint () { + switch (c) { + case 'e': + case 'E': + buffer += read(); + lexState = 'decimalExponent'; + return + } + + if (util.isDigit(c)) { + buffer += read(); + lexState = 'decimalFraction'; + return + } + + return newToken('numeric', sign * Number(buffer)) + }, + + decimalFraction () { + switch (c) { + case 'e': + case 'E': + buffer += read(); + lexState = 'decimalExponent'; + return + } + + if (util.isDigit(c)) { + buffer += read(); + return + } + + return newToken('numeric', sign * Number(buffer)) + }, + + decimalExponent () { + switch (c) { + case '+': + case '-': + buffer += read(); + lexState = 'decimalExponentSign'; + return + } + + if (util.isDigit(c)) { + buffer += read(); + lexState = 'decimalExponentInteger'; + return + } + + throw invalidChar(read()) + }, + + decimalExponentSign () { + if (util.isDigit(c)) { + buffer += read(); + lexState = 'decimalExponentInteger'; + return + } + + throw invalidChar(read()) + }, + + decimalExponentInteger () { + if (util.isDigit(c)) { + buffer += read(); + return + } + + return newToken('numeric', sign * Number(buffer)) + }, + + hexadecimal () { + if (util.isHexDigit(c)) { + buffer += read(); + lexState = 'hexadecimalInteger'; + return + } + + throw invalidChar(read()) + }, + + hexadecimalInteger () { + if (util.isHexDigit(c)) { + buffer += read(); + return + } + + return newToken('numeric', sign * Number(buffer)) + }, + + string () { + switch (c) { + case '\\': + read(); + buffer += escape(); + return + + case '"': + if (doubleQuote) { + read(); + return newToken('string', buffer) + } + + buffer += read(); + return + + case "'": + if (!doubleQuote) { + read(); + return newToken('string', buffer) + } + + buffer += read(); + return + + case '\n': + case '\r': + throw invalidChar(read()) + + case '\u2028': + case '\u2029': + separatorChar(c); + break + + case undefined: + throw invalidChar(read()) + } + + buffer += read(); + }, + + start () { + switch (c) { + case '{': + case '[': + return newToken('punctuator', read()) + + // This code is unreachable since the default lexState handles eof. + // case undefined: + // return newToken('eof') + } + + lexState = 'value'; + }, + + beforePropertyName () { + switch (c) { + case '$': + case '_': + buffer = read(); + lexState = 'identifierName'; + return + + case '\\': + read(); + lexState = 'identifierNameStartEscape'; + return + + case '}': + return newToken('punctuator', read()) + + case '"': + case "'": + doubleQuote = (read() === '"'); + lexState = 'string'; + return + } + + if (util.isIdStartChar(c)) { + buffer += read(); + lexState = 'identifierName'; + return + } + + throw invalidChar(read()) + }, + + afterPropertyName () { + if (c === ':') { + return newToken('punctuator', read()) + } + + throw invalidChar(read()) + }, + + beforePropertyValue () { + lexState = 'value'; + }, + + afterPropertyValue () { + switch (c) { + case ',': + case '}': + return newToken('punctuator', read()) + } + + throw invalidChar(read()) + }, + + beforeArrayValue () { + if (c === ']') { + return newToken('punctuator', read()) + } + + lexState = 'value'; + }, + + afterArrayValue () { + switch (c) { + case ',': + case ']': + return newToken('punctuator', read()) + } + + throw invalidChar(read()) + }, + + end () { + // This code is unreachable since it's handled by the default lexState. + // if (c === undefined) { + // read() + // return newToken('eof') + // } + + throw invalidChar(read()) + }, +}; + +function newToken (type, value) { + return { + type, + value, + line, + column, + } +} + +function literal (s) { + for (const c of s) { + const p = peek(); + + if (p !== c) { + throw invalidChar(read()) + } + + read(); + } +} + +function escape () { + const c = peek(); + switch (c) { + case 'b': + read(); + return '\b' + + case 'f': + read(); + return '\f' + + case 'n': + read(); + return '\n' + + case 'r': + read(); + return '\r' + + case 't': + read(); + return '\t' + + case 'v': + read(); + return '\v' + + case '0': + read(); + if (util.isDigit(peek())) { + throw invalidChar(read()) + } + + return '\0' + + case 'x': + read(); + return hexEscape() + + case 'u': + read(); + return unicodeEscape() + + case '\n': + case '\u2028': + case '\u2029': + read(); + return '' + + case '\r': + read(); + if (peek() === '\n') { + read(); + } + + return '' + + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + throw invalidChar(read()) + + case undefined: + throw invalidChar(read()) + } + + return read() +} + +function hexEscape () { + let buffer = ''; + let c = peek(); + + if (!util.isHexDigit(c)) { + throw invalidChar(read()) + } + + buffer += read(); + + c = peek(); + if (!util.isHexDigit(c)) { + throw invalidChar(read()) + } + + buffer += read(); + + return String.fromCodePoint(parseInt(buffer, 16)) +} + +function unicodeEscape () { + let buffer = ''; + let count = 4; + + while (count-- > 0) { + const c = peek(); + if (!util.isHexDigit(c)) { + throw invalidChar(read()) + } + + buffer += read(); + } + + return String.fromCodePoint(parseInt(buffer, 16)) +} + +const parseStates = { + start () { + if (token.type === 'eof') { + throw invalidEOF() + } + + push(); + }, + + beforePropertyName () { + switch (token.type) { + case 'identifier': + case 'string': + key = token.value; + parseState = 'afterPropertyName'; + return + + case 'punctuator': + // This code is unreachable since it's handled by the lexState. + // if (token.value !== '}') { + // throw invalidToken() + // } + + pop(); + return + + case 'eof': + throw invalidEOF() + } + + // This code is unreachable since it's handled by the lexState. + // throw invalidToken() + }, + + afterPropertyName () { + // This code is unreachable since it's handled by the lexState. + // if (token.type !== 'punctuator' || token.value !== ':') { + // throw invalidToken() + // } + + if (token.type === 'eof') { + throw invalidEOF() + } + + parseState = 'beforePropertyValue'; + }, + + beforePropertyValue () { + if (token.type === 'eof') { + throw invalidEOF() + } + + push(); + }, + + beforeArrayValue () { + if (token.type === 'eof') { + throw invalidEOF() + } + + if (token.type === 'punctuator' && token.value === ']') { + pop(); + return + } + + push(); + }, + + afterPropertyValue () { + // This code is unreachable since it's handled by the lexState. + // if (token.type !== 'punctuator') { + // throw invalidToken() + // } + + if (token.type === 'eof') { + throw invalidEOF() + } + + switch (token.value) { + case ',': + parseState = 'beforePropertyName'; + return + + case '}': + pop(); + } + + // This code is unreachable since it's handled by the lexState. + // throw invalidToken() + }, + + afterArrayValue () { + // This code is unreachable since it's handled by the lexState. + // if (token.type !== 'punctuator') { + // throw invalidToken() + // } + + if (token.type === 'eof') { + throw invalidEOF() + } + + switch (token.value) { + case ',': + parseState = 'beforeArrayValue'; + return + + case ']': + pop(); + } + + // This code is unreachable since it's handled by the lexState. + // throw invalidToken() + }, + + end () { + // This code is unreachable since it's handled by the lexState. + // if (token.type !== 'eof') { + // throw invalidToken() + // } + }, +}; + +function push () { + let value; + + switch (token.type) { + case 'punctuator': + switch (token.value) { + case '{': + value = {}; + break + + case '[': + value = []; + break + } + + break + + case 'null': + case 'boolean': + case 'numeric': + case 'string': + value = token.value; + break + + // This code is unreachable. + // default: + // throw invalidToken() + } + + if (root === undefined) { + root = value; + } else { + const parent = stack[stack.length - 1]; + if (Array.isArray(parent)) { + parent.push(value); + } else { + Object.defineProperty(parent, key, { + value, + writable: true, + enumerable: true, + configurable: true, + }); + } + } + + if (value !== null && typeof value === 'object') { + stack.push(value); + + if (Array.isArray(value)) { + parseState = 'beforeArrayValue'; + } else { + parseState = 'beforePropertyName'; + } + } else { + const current = stack[stack.length - 1]; + if (current == null) { + parseState = 'end'; + } else if (Array.isArray(current)) { + parseState = 'afterArrayValue'; + } else { + parseState = 'afterPropertyValue'; + } + } +} + +function pop () { + stack.pop(); + + const current = stack[stack.length - 1]; + if (current == null) { + parseState = 'end'; + } else if (Array.isArray(current)) { + parseState = 'afterArrayValue'; + } else { + parseState = 'afterPropertyValue'; + } +} + +// This code is unreachable. +// function invalidParseState () { +// return new Error(`JSON5: invalid parse state '${parseState}'`) +// } + +// This code is unreachable. +// function invalidLexState (state) { +// return new Error(`JSON5: invalid lex state '${state}'`) +// } + +function invalidChar (c) { + if (c === undefined) { + return syntaxError(`JSON5: invalid end of input at ${line}:${column}`) + } + + return syntaxError(`JSON5: invalid character '${formatChar(c)}' at ${line}:${column}`) +} + +function invalidEOF () { + return syntaxError(`JSON5: invalid end of input at ${line}:${column}`) +} + +// This code is unreachable. +// function invalidToken () { +// if (token.type === 'eof') { +// return syntaxError(`JSON5: invalid end of input at ${line}:${column}`) +// } + +// const c = String.fromCodePoint(token.value.codePointAt(0)) +// return syntaxError(`JSON5: invalid character '${formatChar(c)}' at ${line}:${column}`) +// } + +function invalidIdentifier () { + column -= 5; + return syntaxError(`JSON5: invalid identifier character at ${line}:${column}`) +} + +function separatorChar (c) { + console.warn(`JSON5: '${formatChar(c)}' in strings is not valid ECMAScript; consider escaping`); +} + +function formatChar (c) { + const replacements = { + "'": "\\'", + '"': '\\"', + '\\': '\\\\', + '\b': '\\b', + '\f': '\\f', + '\n': '\\n', + '\r': '\\r', + '\t': '\\t', + '\v': '\\v', + '\0': '\\0', + '\u2028': '\\u2028', + '\u2029': '\\u2029', + }; + + if (replacements[c]) { + return replacements[c] + } + + if (c < ' ') { + const hexString = c.charCodeAt(0).toString(16); + return '\\x' + ('00' + hexString).substring(hexString.length) + } + + return c +} + +function syntaxError (message) { + const err = new SyntaxError(message); + err.lineNumber = line; + err.columnNumber = column; + return err +} + +var stringify = function stringify (value, replacer, space) { + const stack = []; + let indent = ''; + let propertyList; + let replacerFunc; + let gap = ''; + let quote; + + if ( + replacer != null && + typeof replacer === 'object' && + !Array.isArray(replacer) + ) { + space = replacer.space; + quote = replacer.quote; + replacer = replacer.replacer; + } + + if (typeof replacer === 'function') { + replacerFunc = replacer; + } else if (Array.isArray(replacer)) { + propertyList = []; + for (const v of replacer) { + let item; + + if (typeof v === 'string') { + item = v; + } else if ( + typeof v === 'number' || + v instanceof String || + v instanceof Number + ) { + item = String(v); + } + + if (item !== undefined && propertyList.indexOf(item) < 0) { + propertyList.push(item); + } + } + } + + if (space instanceof Number) { + space = Number(space); + } else if (space instanceof String) { + space = String(space); + } + + if (typeof space === 'number') { + if (space > 0) { + space = Math.min(10, Math.floor(space)); + gap = ' '.substr(0, space); + } + } else if (typeof space === 'string') { + gap = space.substr(0, 10); + } + + return serializeProperty('', {'': value}) + + function serializeProperty (key, holder) { + let value = holder[key]; + if (value != null) { + if (typeof value.toJSON5 === 'function') { + value = value.toJSON5(key); + } else if (typeof value.toJSON === 'function') { + value = value.toJSON(key); + } + } + + if (replacerFunc) { + value = replacerFunc.call(holder, key, value); + } + + if (value instanceof Number) { + value = Number(value); + } else if (value instanceof String) { + value = String(value); + } else if (value instanceof Boolean) { + value = value.valueOf(); + } + + switch (value) { + case null: return 'null' + case true: return 'true' + case false: return 'false' + } + + if (typeof value === 'string') { + return quoteString(value, false) + } + + if (typeof value === 'number') { + return String(value) + } + + if (typeof value === 'object') { + return Array.isArray(value) ? serializeArray(value) : serializeObject(value) + } + + return undefined + } + + function quoteString (value) { + const quotes = { + "'": 0.1, + '"': 0.2, + }; + + const replacements = { + "'": "\\'", + '"': '\\"', + '\\': '\\\\', + '\b': '\\b', + '\f': '\\f', + '\n': '\\n', + '\r': '\\r', + '\t': '\\t', + '\v': '\\v', + '\0': '\\0', + '\u2028': '\\u2028', + '\u2029': '\\u2029', + }; + + let product = ''; + + for (let i = 0; i < value.length; i++) { + const c = value[i]; + switch (c) { + case "'": + case '"': + quotes[c]++; + product += c; + continue + + case '\0': + if (util.isDigit(value[i + 1])) { + product += '\\x00'; + continue + } + } + + if (replacements[c]) { + product += replacements[c]; + continue + } + + if (c < ' ') { + let hexString = c.charCodeAt(0).toString(16); + product += '\\x' + ('00' + hexString).substring(hexString.length); + continue + } + + product += c; + } + + const quoteChar = quote || Object.keys(quotes).reduce((a, b) => (quotes[a] < quotes[b]) ? a : b); + + product = product.replace(new RegExp(quoteChar, 'g'), replacements[quoteChar]); + + return quoteChar + product + quoteChar + } + + function serializeObject (value) { + if (stack.indexOf(value) >= 0) { + throw TypeError('Converting circular structure to JSON5') + } + + stack.push(value); + + let stepback = indent; + indent = indent + gap; + + let keys = propertyList || Object.keys(value); + let partial = []; + for (const key of keys) { + const propertyString = serializeProperty(key, value); + if (propertyString !== undefined) { + let member = serializeKey(key) + ':'; + if (gap !== '') { + member += ' '; + } + member += propertyString; + partial.push(member); + } + } + + let final; + if (partial.length === 0) { + final = '{}'; + } else { + let properties; + if (gap === '') { + properties = partial.join(','); + final = '{' + properties + '}'; + } else { + let separator = ',\n' + indent; + properties = partial.join(separator); + final = '{\n' + indent + properties + ',\n' + stepback + '}'; + } + } + + stack.pop(); + indent = stepback; + return final + } + + function serializeKey (key) { + if (key.length === 0) { + return quoteString(key, true) + } + + const firstChar = String.fromCodePoint(key.codePointAt(0)); + if (!util.isIdStartChar(firstChar)) { + return quoteString(key, true) + } + + for (let i = firstChar.length; i < key.length; i++) { + if (!util.isIdContinueChar(String.fromCodePoint(key.codePointAt(i)))) { + return quoteString(key, true) + } + } + + return key + } + + function serializeArray (value) { + if (stack.indexOf(value) >= 0) { + throw TypeError('Converting circular structure to JSON5') + } + + stack.push(value); + + let stepback = indent; + indent = indent + gap; + + let partial = []; + for (let i = 0; i < value.length; i++) { + const propertyString = serializeProperty(String(i), value); + partial.push((propertyString !== undefined) ? propertyString : 'null'); + } + + let final; + if (partial.length === 0) { + final = '[]'; + } else { + if (gap === '') { + let properties = partial.join(','); + final = '[' + properties + ']'; + } else { + let separator = ',\n' + indent; + let properties = partial.join(separator); + final = '[\n' + indent + properties + ',\n' + stepback + ']'; + } + } + + stack.pop(); + indent = stepback; + return final + } +}; + +const JSON5 = { + parse, + stringify, +}; + +var lib = JSON5; + +export default lib; diff --git a/node_modules/json5/lib/cli.js b/node_modules/json5/lib/cli.js new file mode 100755 index 00000000..93cb8092 --- /dev/null +++ b/node_modules/json5/lib/cli.js @@ -0,0 +1,152 @@ +#!/usr/bin/env node + +const fs = require('fs') +const path = require('path') +const pkg = require('../package.json') +const JSON5 = require('./') + +const argv = parseArgs() + +if (argv.version) { + version() +} else if (argv.help) { + usage() +} else { + const inFilename = argv.defaults[0] + + let readStream + if (inFilename) { + readStream = fs.createReadStream(inFilename) + } else { + readStream = process.stdin + } + + let json5 = '' + readStream.on('data', data => { + json5 += data + }) + + readStream.on('end', () => { + let space + if (argv.space === 't' || argv.space === 'tab') { + space = '\t' + } else { + space = Number(argv.space) + } + + let value + try { + value = JSON5.parse(json5) + if (!argv.validate) { + const json = JSON.stringify(value, null, space) + + let writeStream + + // --convert is for backward compatibility with v0.5.1. If + // specified with and not --out-file, then a file with + // the same name but with a .json extension will be written. + if (argv.convert && inFilename && !argv.outFile) { + const parsedFilename = path.parse(inFilename) + const outFilename = path.format( + Object.assign( + parsedFilename, + {base: path.basename(parsedFilename.base, parsedFilename.ext) + '.json'} + ) + ) + + writeStream = fs.createWriteStream(outFilename) + } else if (argv.outFile) { + writeStream = fs.createWriteStream(argv.outFile) + } else { + writeStream = process.stdout + } + + writeStream.write(json) + } + } catch (err) { + console.error(err.message) + process.exit(1) + } + }) +} + +function parseArgs () { + let convert + let space + let validate + let outFile + let version + let help + const defaults = [] + + const args = process.argv.slice(2) + for (let i = 0; i < args.length; i++) { + const arg = args[i] + switch (arg) { + case '--convert': + case '-c': + convert = true + break + + case '--space': + case '-s': + space = args[++i] + break + + case '--validate': + case '-v': + validate = true + break + + case '--out-file': + case '-o': + outFile = args[++i] + break + + case '--version': + case '-V': + version = true + break + + case '--help': + case '-h': + help = true + break + + default: + defaults.push(arg) + break + } + } + + return { + convert, + space, + validate, + outFile, + version, + help, + defaults, + } +} + +function version () { + console.log(pkg.version) +} + +function usage () { + console.log( + ` + Usage: json5 [options] + + If is not provided, then STDIN is used. + + Options: + + -s, --space The number of spaces to indent or 't' for tabs + -o, --out-file [file] Output to the specified file, otherwise STDOUT + -v, --validate Validate JSON5 but do not output JSON + -V, --version Output the version number + -h, --help Output usage information` + ) +} diff --git a/node_modules/json5/lib/index.d.ts b/node_modules/json5/lib/index.d.ts new file mode 100644 index 00000000..1c45bca5 --- /dev/null +++ b/node_modules/json5/lib/index.d.ts @@ -0,0 +1,4 @@ +import parse = require('./parse') +import stringify = require('./stringify') + +export {parse, stringify} diff --git a/node_modules/json5/lib/index.js b/node_modules/json5/lib/index.js new file mode 100644 index 00000000..36796388 --- /dev/null +++ b/node_modules/json5/lib/index.js @@ -0,0 +1,9 @@ +const parse = require('./parse') +const stringify = require('./stringify') + +const JSON5 = { + parse, + stringify, +} + +module.exports = JSON5 diff --git a/node_modules/json5/lib/parse.d.ts b/node_modules/json5/lib/parse.d.ts new file mode 100644 index 00000000..8c8d883a --- /dev/null +++ b/node_modules/json5/lib/parse.d.ts @@ -0,0 +1,15 @@ +/** + * Parses a JSON5 string, constructing the JavaScript value or object described + * by the string. + * @template T The type of the return value. + * @param text The string to parse as JSON5. + * @param reviver A function that prescribes how the value originally produced + * by parsing is transformed before being returned. + * @returns The JavaScript value converted from the JSON5 string. + */ +declare function parse( + text: string, + reviver?: ((this: any, key: string, value: any) => any) | null, +): T + +export = parse diff --git a/node_modules/json5/lib/parse.js b/node_modules/json5/lib/parse.js new file mode 100644 index 00000000..da2078a6 --- /dev/null +++ b/node_modules/json5/lib/parse.js @@ -0,0 +1,1114 @@ +const util = require('./util') + +let source +let parseState +let stack +let pos +let line +let column +let token +let key +let root + +module.exports = function parse (text, reviver) { + source = String(text) + parseState = 'start' + stack = [] + pos = 0 + line = 1 + column = 0 + token = undefined + key = undefined + root = undefined + + do { + token = lex() + + // This code is unreachable. + // if (!parseStates[parseState]) { + // throw invalidParseState() + // } + + parseStates[parseState]() + } while (token.type !== 'eof') + + if (typeof reviver === 'function') { + return internalize({'': root}, '', reviver) + } + + return root +} + +function internalize (holder, name, reviver) { + const value = holder[name] + if (value != null && typeof value === 'object') { + if (Array.isArray(value)) { + for (let i = 0; i < value.length; i++) { + const key = String(i) + const replacement = internalize(value, key, reviver) + if (replacement === undefined) { + delete value[key] + } else { + Object.defineProperty(value, key, { + value: replacement, + writable: true, + enumerable: true, + configurable: true, + }) + } + } + } else { + for (const key in value) { + const replacement = internalize(value, key, reviver) + if (replacement === undefined) { + delete value[key] + } else { + Object.defineProperty(value, key, { + value: replacement, + writable: true, + enumerable: true, + configurable: true, + }) + } + } + } + } + + return reviver.call(holder, name, value) +} + +let lexState +let buffer +let doubleQuote +let sign +let c + +function lex () { + lexState = 'default' + buffer = '' + doubleQuote = false + sign = 1 + + for (;;) { + c = peek() + + // This code is unreachable. + // if (!lexStates[lexState]) { + // throw invalidLexState(lexState) + // } + + const token = lexStates[lexState]() + if (token) { + return token + } + } +} + +function peek () { + if (source[pos]) { + return String.fromCodePoint(source.codePointAt(pos)) + } +} + +function read () { + const c = peek() + + if (c === '\n') { + line++ + column = 0 + } else if (c) { + column += c.length + } else { + column++ + } + + if (c) { + pos += c.length + } + + return c +} + +const lexStates = { + default () { + switch (c) { + case '\t': + case '\v': + case '\f': + case ' ': + case '\u00A0': + case '\uFEFF': + case '\n': + case '\r': + case '\u2028': + case '\u2029': + read() + return + + case '/': + read() + lexState = 'comment' + return + + case undefined: + read() + return newToken('eof') + } + + if (util.isSpaceSeparator(c)) { + read() + return + } + + // This code is unreachable. + // if (!lexStates[parseState]) { + // throw invalidLexState(parseState) + // } + + return lexStates[parseState]() + }, + + comment () { + switch (c) { + case '*': + read() + lexState = 'multiLineComment' + return + + case '/': + read() + lexState = 'singleLineComment' + return + } + + throw invalidChar(read()) + }, + + multiLineComment () { + switch (c) { + case '*': + read() + lexState = 'multiLineCommentAsterisk' + return + + case undefined: + throw invalidChar(read()) + } + + read() + }, + + multiLineCommentAsterisk () { + switch (c) { + case '*': + read() + return + + case '/': + read() + lexState = 'default' + return + + case undefined: + throw invalidChar(read()) + } + + read() + lexState = 'multiLineComment' + }, + + singleLineComment () { + switch (c) { + case '\n': + case '\r': + case '\u2028': + case '\u2029': + read() + lexState = 'default' + return + + case undefined: + read() + return newToken('eof') + } + + read() + }, + + value () { + switch (c) { + case '{': + case '[': + return newToken('punctuator', read()) + + case 'n': + read() + literal('ull') + return newToken('null', null) + + case 't': + read() + literal('rue') + return newToken('boolean', true) + + case 'f': + read() + literal('alse') + return newToken('boolean', false) + + case '-': + case '+': + if (read() === '-') { + sign = -1 + } + + lexState = 'sign' + return + + case '.': + buffer = read() + lexState = 'decimalPointLeading' + return + + case '0': + buffer = read() + lexState = 'zero' + return + + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + buffer = read() + lexState = 'decimalInteger' + return + + case 'I': + read() + literal('nfinity') + return newToken('numeric', Infinity) + + case 'N': + read() + literal('aN') + return newToken('numeric', NaN) + + case '"': + case "'": + doubleQuote = (read() === '"') + buffer = '' + lexState = 'string' + return + } + + throw invalidChar(read()) + }, + + identifierNameStartEscape () { + if (c !== 'u') { + throw invalidChar(read()) + } + + read() + const u = unicodeEscape() + switch (u) { + case '$': + case '_': + break + + default: + if (!util.isIdStartChar(u)) { + throw invalidIdentifier() + } + + break + } + + buffer += u + lexState = 'identifierName' + }, + + identifierName () { + switch (c) { + case '$': + case '_': + case '\u200C': + case '\u200D': + buffer += read() + return + + case '\\': + read() + lexState = 'identifierNameEscape' + return + } + + if (util.isIdContinueChar(c)) { + buffer += read() + return + } + + return newToken('identifier', buffer) + }, + + identifierNameEscape () { + if (c !== 'u') { + throw invalidChar(read()) + } + + read() + const u = unicodeEscape() + switch (u) { + case '$': + case '_': + case '\u200C': + case '\u200D': + break + + default: + if (!util.isIdContinueChar(u)) { + throw invalidIdentifier() + } + + break + } + + buffer += u + lexState = 'identifierName' + }, + + sign () { + switch (c) { + case '.': + buffer = read() + lexState = 'decimalPointLeading' + return + + case '0': + buffer = read() + lexState = 'zero' + return + + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + buffer = read() + lexState = 'decimalInteger' + return + + case 'I': + read() + literal('nfinity') + return newToken('numeric', sign * Infinity) + + case 'N': + read() + literal('aN') + return newToken('numeric', NaN) + } + + throw invalidChar(read()) + }, + + zero () { + switch (c) { + case '.': + buffer += read() + lexState = 'decimalPoint' + return + + case 'e': + case 'E': + buffer += read() + lexState = 'decimalExponent' + return + + case 'x': + case 'X': + buffer += read() + lexState = 'hexadecimal' + return + } + + return newToken('numeric', sign * 0) + }, + + decimalInteger () { + switch (c) { + case '.': + buffer += read() + lexState = 'decimalPoint' + return + + case 'e': + case 'E': + buffer += read() + lexState = 'decimalExponent' + return + } + + if (util.isDigit(c)) { + buffer += read() + return + } + + return newToken('numeric', sign * Number(buffer)) + }, + + decimalPointLeading () { + if (util.isDigit(c)) { + buffer += read() + lexState = 'decimalFraction' + return + } + + throw invalidChar(read()) + }, + + decimalPoint () { + switch (c) { + case 'e': + case 'E': + buffer += read() + lexState = 'decimalExponent' + return + } + + if (util.isDigit(c)) { + buffer += read() + lexState = 'decimalFraction' + return + } + + return newToken('numeric', sign * Number(buffer)) + }, + + decimalFraction () { + switch (c) { + case 'e': + case 'E': + buffer += read() + lexState = 'decimalExponent' + return + } + + if (util.isDigit(c)) { + buffer += read() + return + } + + return newToken('numeric', sign * Number(buffer)) + }, + + decimalExponent () { + switch (c) { + case '+': + case '-': + buffer += read() + lexState = 'decimalExponentSign' + return + } + + if (util.isDigit(c)) { + buffer += read() + lexState = 'decimalExponentInteger' + return + } + + throw invalidChar(read()) + }, + + decimalExponentSign () { + if (util.isDigit(c)) { + buffer += read() + lexState = 'decimalExponentInteger' + return + } + + throw invalidChar(read()) + }, + + decimalExponentInteger () { + if (util.isDigit(c)) { + buffer += read() + return + } + + return newToken('numeric', sign * Number(buffer)) + }, + + hexadecimal () { + if (util.isHexDigit(c)) { + buffer += read() + lexState = 'hexadecimalInteger' + return + } + + throw invalidChar(read()) + }, + + hexadecimalInteger () { + if (util.isHexDigit(c)) { + buffer += read() + return + } + + return newToken('numeric', sign * Number(buffer)) + }, + + string () { + switch (c) { + case '\\': + read() + buffer += escape() + return + + case '"': + if (doubleQuote) { + read() + return newToken('string', buffer) + } + + buffer += read() + return + + case "'": + if (!doubleQuote) { + read() + return newToken('string', buffer) + } + + buffer += read() + return + + case '\n': + case '\r': + throw invalidChar(read()) + + case '\u2028': + case '\u2029': + separatorChar(c) + break + + case undefined: + throw invalidChar(read()) + } + + buffer += read() + }, + + start () { + switch (c) { + case '{': + case '[': + return newToken('punctuator', read()) + + // This code is unreachable since the default lexState handles eof. + // case undefined: + // return newToken('eof') + } + + lexState = 'value' + }, + + beforePropertyName () { + switch (c) { + case '$': + case '_': + buffer = read() + lexState = 'identifierName' + return + + case '\\': + read() + lexState = 'identifierNameStartEscape' + return + + case '}': + return newToken('punctuator', read()) + + case '"': + case "'": + doubleQuote = (read() === '"') + lexState = 'string' + return + } + + if (util.isIdStartChar(c)) { + buffer += read() + lexState = 'identifierName' + return + } + + throw invalidChar(read()) + }, + + afterPropertyName () { + if (c === ':') { + return newToken('punctuator', read()) + } + + throw invalidChar(read()) + }, + + beforePropertyValue () { + lexState = 'value' + }, + + afterPropertyValue () { + switch (c) { + case ',': + case '}': + return newToken('punctuator', read()) + } + + throw invalidChar(read()) + }, + + beforeArrayValue () { + if (c === ']') { + return newToken('punctuator', read()) + } + + lexState = 'value' + }, + + afterArrayValue () { + switch (c) { + case ',': + case ']': + return newToken('punctuator', read()) + } + + throw invalidChar(read()) + }, + + end () { + // This code is unreachable since it's handled by the default lexState. + // if (c === undefined) { + // read() + // return newToken('eof') + // } + + throw invalidChar(read()) + }, +} + +function newToken (type, value) { + return { + type, + value, + line, + column, + } +} + +function literal (s) { + for (const c of s) { + const p = peek() + + if (p !== c) { + throw invalidChar(read()) + } + + read() + } +} + +function escape () { + const c = peek() + switch (c) { + case 'b': + read() + return '\b' + + case 'f': + read() + return '\f' + + case 'n': + read() + return '\n' + + case 'r': + read() + return '\r' + + case 't': + read() + return '\t' + + case 'v': + read() + return '\v' + + case '0': + read() + if (util.isDigit(peek())) { + throw invalidChar(read()) + } + + return '\0' + + case 'x': + read() + return hexEscape() + + case 'u': + read() + return unicodeEscape() + + case '\n': + case '\u2028': + case '\u2029': + read() + return '' + + case '\r': + read() + if (peek() === '\n') { + read() + } + + return '' + + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + throw invalidChar(read()) + + case undefined: + throw invalidChar(read()) + } + + return read() +} + +function hexEscape () { + let buffer = '' + let c = peek() + + if (!util.isHexDigit(c)) { + throw invalidChar(read()) + } + + buffer += read() + + c = peek() + if (!util.isHexDigit(c)) { + throw invalidChar(read()) + } + + buffer += read() + + return String.fromCodePoint(parseInt(buffer, 16)) +} + +function unicodeEscape () { + let buffer = '' + let count = 4 + + while (count-- > 0) { + const c = peek() + if (!util.isHexDigit(c)) { + throw invalidChar(read()) + } + + buffer += read() + } + + return String.fromCodePoint(parseInt(buffer, 16)) +} + +const parseStates = { + start () { + if (token.type === 'eof') { + throw invalidEOF() + } + + push() + }, + + beforePropertyName () { + switch (token.type) { + case 'identifier': + case 'string': + key = token.value + parseState = 'afterPropertyName' + return + + case 'punctuator': + // This code is unreachable since it's handled by the lexState. + // if (token.value !== '}') { + // throw invalidToken() + // } + + pop() + return + + case 'eof': + throw invalidEOF() + } + + // This code is unreachable since it's handled by the lexState. + // throw invalidToken() + }, + + afterPropertyName () { + // This code is unreachable since it's handled by the lexState. + // if (token.type !== 'punctuator' || token.value !== ':') { + // throw invalidToken() + // } + + if (token.type === 'eof') { + throw invalidEOF() + } + + parseState = 'beforePropertyValue' + }, + + beforePropertyValue () { + if (token.type === 'eof') { + throw invalidEOF() + } + + push() + }, + + beforeArrayValue () { + if (token.type === 'eof') { + throw invalidEOF() + } + + if (token.type === 'punctuator' && token.value === ']') { + pop() + return + } + + push() + }, + + afterPropertyValue () { + // This code is unreachable since it's handled by the lexState. + // if (token.type !== 'punctuator') { + // throw invalidToken() + // } + + if (token.type === 'eof') { + throw invalidEOF() + } + + switch (token.value) { + case ',': + parseState = 'beforePropertyName' + return + + case '}': + pop() + } + + // This code is unreachable since it's handled by the lexState. + // throw invalidToken() + }, + + afterArrayValue () { + // This code is unreachable since it's handled by the lexState. + // if (token.type !== 'punctuator') { + // throw invalidToken() + // } + + if (token.type === 'eof') { + throw invalidEOF() + } + + switch (token.value) { + case ',': + parseState = 'beforeArrayValue' + return + + case ']': + pop() + } + + // This code is unreachable since it's handled by the lexState. + // throw invalidToken() + }, + + end () { + // This code is unreachable since it's handled by the lexState. + // if (token.type !== 'eof') { + // throw invalidToken() + // } + }, +} + +function push () { + let value + + switch (token.type) { + case 'punctuator': + switch (token.value) { + case '{': + value = {} + break + + case '[': + value = [] + break + } + + break + + case 'null': + case 'boolean': + case 'numeric': + case 'string': + value = token.value + break + + // This code is unreachable. + // default: + // throw invalidToken() + } + + if (root === undefined) { + root = value + } else { + const parent = stack[stack.length - 1] + if (Array.isArray(parent)) { + parent.push(value) + } else { + Object.defineProperty(parent, key, { + value, + writable: true, + enumerable: true, + configurable: true, + }) + } + } + + if (value !== null && typeof value === 'object') { + stack.push(value) + + if (Array.isArray(value)) { + parseState = 'beforeArrayValue' + } else { + parseState = 'beforePropertyName' + } + } else { + const current = stack[stack.length - 1] + if (current == null) { + parseState = 'end' + } else if (Array.isArray(current)) { + parseState = 'afterArrayValue' + } else { + parseState = 'afterPropertyValue' + } + } +} + +function pop () { + stack.pop() + + const current = stack[stack.length - 1] + if (current == null) { + parseState = 'end' + } else if (Array.isArray(current)) { + parseState = 'afterArrayValue' + } else { + parseState = 'afterPropertyValue' + } +} + +// This code is unreachable. +// function invalidParseState () { +// return new Error(`JSON5: invalid parse state '${parseState}'`) +// } + +// This code is unreachable. +// function invalidLexState (state) { +// return new Error(`JSON5: invalid lex state '${state}'`) +// } + +function invalidChar (c) { + if (c === undefined) { + return syntaxError(`JSON5: invalid end of input at ${line}:${column}`) + } + + return syntaxError(`JSON5: invalid character '${formatChar(c)}' at ${line}:${column}`) +} + +function invalidEOF () { + return syntaxError(`JSON5: invalid end of input at ${line}:${column}`) +} + +// This code is unreachable. +// function invalidToken () { +// if (token.type === 'eof') { +// return syntaxError(`JSON5: invalid end of input at ${line}:${column}`) +// } + +// const c = String.fromCodePoint(token.value.codePointAt(0)) +// return syntaxError(`JSON5: invalid character '${formatChar(c)}' at ${line}:${column}`) +// } + +function invalidIdentifier () { + column -= 5 + return syntaxError(`JSON5: invalid identifier character at ${line}:${column}`) +} + +function separatorChar (c) { + console.warn(`JSON5: '${formatChar(c)}' in strings is not valid ECMAScript; consider escaping`) +} + +function formatChar (c) { + const replacements = { + "'": "\\'", + '"': '\\"', + '\\': '\\\\', + '\b': '\\b', + '\f': '\\f', + '\n': '\\n', + '\r': '\\r', + '\t': '\\t', + '\v': '\\v', + '\0': '\\0', + '\u2028': '\\u2028', + '\u2029': '\\u2029', + } + + if (replacements[c]) { + return replacements[c] + } + + if (c < ' ') { + const hexString = c.charCodeAt(0).toString(16) + return '\\x' + ('00' + hexString).substring(hexString.length) + } + + return c +} + +function syntaxError (message) { + const err = new SyntaxError(message) + err.lineNumber = line + err.columnNumber = column + return err +} diff --git a/node_modules/json5/lib/register.js b/node_modules/json5/lib/register.js new file mode 100644 index 00000000..935cdbaf --- /dev/null +++ b/node_modules/json5/lib/register.js @@ -0,0 +1,13 @@ +const fs = require('fs') +const JSON5 = require('./') + +// eslint-disable-next-line node/no-deprecated-api +require.extensions['.json5'] = function (module, filename) { + const content = fs.readFileSync(filename, 'utf8') + try { + module.exports = JSON5.parse(content) + } catch (err) { + err.message = filename + ': ' + err.message + throw err + } +} diff --git a/node_modules/json5/lib/require.js b/node_modules/json5/lib/require.js new file mode 100644 index 00000000..3aa29bee --- /dev/null +++ b/node_modules/json5/lib/require.js @@ -0,0 +1,4 @@ +// This file is for backward compatibility with v0.5.1. +require('./register') + +console.warn("'json5/require' is deprecated. Please use 'json5/register' instead.") diff --git a/node_modules/json5/lib/stringify.d.ts b/node_modules/json5/lib/stringify.d.ts new file mode 100644 index 00000000..3c348389 --- /dev/null +++ b/node_modules/json5/lib/stringify.d.ts @@ -0,0 +1,89 @@ +declare type StringifyOptions = { + /** + * A function that alters the behavior of the stringification process, or an + * array of String and Number objects that serve as a allowlist for + * selecting/filtering the properties of the value object to be included in + * the JSON5 string. If this value is null or not provided, all properties + * of the object are included in the resulting JSON5 string. + */ + replacer?: + | ((this: any, key: string, value: any) => any) + | (string | number)[] + | null + + /** + * A String or Number object that's used to insert white space into the + * output JSON5 string for readability purposes. If this is a Number, it + * indicates the number of space characters to use as white space; this + * number is capped at 10 (if it is greater, the value is just 10). Values + * less than 1 indicate that no space should be used. If this is a String, + * the string (or the first 10 characters of the string, if it's longer than + * that) is used as white space. If this parameter is not provided (or is + * null), no white space is used. If white space is used, trailing commas + * will be used in objects and arrays. + */ + space?: string | number | null + + /** + * A String representing the quote character to use when serializing + * strings. + */ + quote?: string | null +} + +/** + * Converts a JavaScript value to a JSON5 string. + * @param value The value to convert to a JSON5 string. + * @param replacer A function that alters the behavior of the stringification + * process. If this value is null or not provided, all properties of the object + * are included in the resulting JSON5 string. + * @param space A String or Number object that's used to insert white space into + * the output JSON5 string for readability purposes. If this is a Number, it + * indicates the number of space characters to use as white space; this number + * is capped at 10 (if it is greater, the value is just 10). Values less than 1 + * indicate that no space should be used. If this is a String, the string (or + * the first 10 characters of the string, if it's longer than that) is used as + * white space. If this parameter is not provided (or is null), no white space + * is used. If white space is used, trailing commas will be used in objects and + * arrays. + * @returns The JSON5 string converted from the JavaScript value. + */ +declare function stringify( + value: any, + replacer?: ((this: any, key: string, value: any) => any) | null, + space?: string | number | null, +): string + +/** + * Converts a JavaScript value to a JSON5 string. + * @param value The value to convert to a JSON5 string. + * @param replacer An array of String and Number objects that serve as a + * allowlist for selecting/filtering the properties of the value object to be + * included in the JSON5 string. If this value is null or not provided, all + * properties of the object are included in the resulting JSON5 string. + * @param space A String or Number object that's used to insert white space into + * the output JSON5 string for readability purposes. If this is a Number, it + * indicates the number of space characters to use as white space; this number + * is capped at 10 (if it is greater, the value is just 10). Values less than 1 + * indicate that no space should be used. If this is a String, the string (or + * the first 10 characters of the string, if it's longer than that) is used as + * white space. If this parameter is not provided (or is null), no white space + * is used. If white space is used, trailing commas will be used in objects and + * arrays. + * @returns The JSON5 string converted from the JavaScript value. + */ +declare function stringify( + value: any, + replacer: (string | number)[], + space?: string | number | null, +): string + +/** + * Converts a JavaScript value to a JSON5 string. + * @param value The value to convert to a JSON5 string. + * @param options An object specifying options. + * @returns The JSON5 string converted from the JavaScript value. + */ +declare function stringify(value: any, options: StringifyOptions): string + +export = stringify diff --git a/node_modules/json5/lib/stringify.js b/node_modules/json5/lib/stringify.js new file mode 100644 index 00000000..7cb3b0e1 --- /dev/null +++ b/node_modules/json5/lib/stringify.js @@ -0,0 +1,261 @@ +const util = require('./util') + +module.exports = function stringify (value, replacer, space) { + const stack = [] + let indent = '' + let propertyList + let replacerFunc + let gap = '' + let quote + + if ( + replacer != null && + typeof replacer === 'object' && + !Array.isArray(replacer) + ) { + space = replacer.space + quote = replacer.quote + replacer = replacer.replacer + } + + if (typeof replacer === 'function') { + replacerFunc = replacer + } else if (Array.isArray(replacer)) { + propertyList = [] + for (const v of replacer) { + let item + + if (typeof v === 'string') { + item = v + } else if ( + typeof v === 'number' || + v instanceof String || + v instanceof Number + ) { + item = String(v) + } + + if (item !== undefined && propertyList.indexOf(item) < 0) { + propertyList.push(item) + } + } + } + + if (space instanceof Number) { + space = Number(space) + } else if (space instanceof String) { + space = String(space) + } + + if (typeof space === 'number') { + if (space > 0) { + space = Math.min(10, Math.floor(space)) + gap = ' '.substr(0, space) + } + } else if (typeof space === 'string') { + gap = space.substr(0, 10) + } + + return serializeProperty('', {'': value}) + + function serializeProperty (key, holder) { + let value = holder[key] + if (value != null) { + if (typeof value.toJSON5 === 'function') { + value = value.toJSON5(key) + } else if (typeof value.toJSON === 'function') { + value = value.toJSON(key) + } + } + + if (replacerFunc) { + value = replacerFunc.call(holder, key, value) + } + + if (value instanceof Number) { + value = Number(value) + } else if (value instanceof String) { + value = String(value) + } else if (value instanceof Boolean) { + value = value.valueOf() + } + + switch (value) { + case null: return 'null' + case true: return 'true' + case false: return 'false' + } + + if (typeof value === 'string') { + return quoteString(value, false) + } + + if (typeof value === 'number') { + return String(value) + } + + if (typeof value === 'object') { + return Array.isArray(value) ? serializeArray(value) : serializeObject(value) + } + + return undefined + } + + function quoteString (value) { + const quotes = { + "'": 0.1, + '"': 0.2, + } + + const replacements = { + "'": "\\'", + '"': '\\"', + '\\': '\\\\', + '\b': '\\b', + '\f': '\\f', + '\n': '\\n', + '\r': '\\r', + '\t': '\\t', + '\v': '\\v', + '\0': '\\0', + '\u2028': '\\u2028', + '\u2029': '\\u2029', + } + + let product = '' + + for (let i = 0; i < value.length; i++) { + const c = value[i] + switch (c) { + case "'": + case '"': + quotes[c]++ + product += c + continue + + case '\0': + if (util.isDigit(value[i + 1])) { + product += '\\x00' + continue + } + } + + if (replacements[c]) { + product += replacements[c] + continue + } + + if (c < ' ') { + let hexString = c.charCodeAt(0).toString(16) + product += '\\x' + ('00' + hexString).substring(hexString.length) + continue + } + + product += c + } + + const quoteChar = quote || Object.keys(quotes).reduce((a, b) => (quotes[a] < quotes[b]) ? a : b) + + product = product.replace(new RegExp(quoteChar, 'g'), replacements[quoteChar]) + + return quoteChar + product + quoteChar + } + + function serializeObject (value) { + if (stack.indexOf(value) >= 0) { + throw TypeError('Converting circular structure to JSON5') + } + + stack.push(value) + + let stepback = indent + indent = indent + gap + + let keys = propertyList || Object.keys(value) + let partial = [] + for (const key of keys) { + const propertyString = serializeProperty(key, value) + if (propertyString !== undefined) { + let member = serializeKey(key) + ':' + if (gap !== '') { + member += ' ' + } + member += propertyString + partial.push(member) + } + } + + let final + if (partial.length === 0) { + final = '{}' + } else { + let properties + if (gap === '') { + properties = partial.join(',') + final = '{' + properties + '}' + } else { + let separator = ',\n' + indent + properties = partial.join(separator) + final = '{\n' + indent + properties + ',\n' + stepback + '}' + } + } + + stack.pop() + indent = stepback + return final + } + + function serializeKey (key) { + if (key.length === 0) { + return quoteString(key, true) + } + + const firstChar = String.fromCodePoint(key.codePointAt(0)) + if (!util.isIdStartChar(firstChar)) { + return quoteString(key, true) + } + + for (let i = firstChar.length; i < key.length; i++) { + if (!util.isIdContinueChar(String.fromCodePoint(key.codePointAt(i)))) { + return quoteString(key, true) + } + } + + return key + } + + function serializeArray (value) { + if (stack.indexOf(value) >= 0) { + throw TypeError('Converting circular structure to JSON5') + } + + stack.push(value) + + let stepback = indent + indent = indent + gap + + let partial = [] + for (let i = 0; i < value.length; i++) { + const propertyString = serializeProperty(String(i), value) + partial.push((propertyString !== undefined) ? propertyString : 'null') + } + + let final + if (partial.length === 0) { + final = '[]' + } else { + if (gap === '') { + let properties = partial.join(',') + final = '[' + properties + ']' + } else { + let separator = ',\n' + indent + let properties = partial.join(separator) + final = '[\n' + indent + properties + ',\n' + stepback + ']' + } + } + + stack.pop() + indent = stepback + return final + } +} diff --git a/node_modules/json5/lib/unicode.d.ts b/node_modules/json5/lib/unicode.d.ts new file mode 100644 index 00000000..610f8057 --- /dev/null +++ b/node_modules/json5/lib/unicode.d.ts @@ -0,0 +1,3 @@ +export declare const Space_Separator: RegExp +export declare const ID_Start: RegExp +export declare const ID_Continue: RegExp diff --git a/node_modules/json5/lib/unicode.js b/node_modules/json5/lib/unicode.js new file mode 100644 index 00000000..215ccd84 --- /dev/null +++ b/node_modules/json5/lib/unicode.js @@ -0,0 +1,4 @@ +// This is a generated file. Do not edit. +module.exports.Space_Separator = /[\u1680\u2000-\u200A\u202F\u205F\u3000]/ +module.exports.ID_Start = /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE83\uDE86-\uDE89\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]/ +module.exports.ID_Continue = /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u08D4-\u08E1\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u09FC\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9-\u0AFF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C80-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D00-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D54-\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1CD0-\u1CD2\u1CD4-\u1CF9\u1D00-\u1DF9\u1DFB-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C5\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE3E\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC00-\uDC4A\uDC50-\uDC59\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDE00-\uDE3E\uDE47\uDE50-\uDE83\uDE86-\uDE99\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC36\uDC38-\uDC40\uDC50-\uDC59\uDC72-\uDC8F\uDC92-\uDCA7\uDCA9-\uDCB6\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD47\uDD50-\uDD59]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6\uDD00-\uDD4A\uDD50-\uDD59]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/ diff --git a/node_modules/json5/lib/util.d.ts b/node_modules/json5/lib/util.d.ts new file mode 100644 index 00000000..a940cead --- /dev/null +++ b/node_modules/json5/lib/util.d.ts @@ -0,0 +1,5 @@ +export declare function isSpaceSeparator(c?: string): boolean +export declare function isIdStartChar(c?: string): boolean +export declare function isIdContinueChar(c?: string): boolean +export declare function isDigit(c?: string): boolean +export declare function isHexDigit(c?: string): boolean diff --git a/node_modules/json5/lib/util.js b/node_modules/json5/lib/util.js new file mode 100644 index 00000000..40bfe2fa --- /dev/null +++ b/node_modules/json5/lib/util.js @@ -0,0 +1,35 @@ +const unicode = require('../lib/unicode') + +module.exports = { + isSpaceSeparator (c) { + return typeof c === 'string' && unicode.Space_Separator.test(c) + }, + + isIdStartChar (c) { + return typeof c === 'string' && ( + (c >= 'a' && c <= 'z') || + (c >= 'A' && c <= 'Z') || + (c === '$') || (c === '_') || + unicode.ID_Start.test(c) + ) + }, + + isIdContinueChar (c) { + return typeof c === 'string' && ( + (c >= 'a' && c <= 'z') || + (c >= 'A' && c <= 'Z') || + (c >= '0' && c <= '9') || + (c === '$') || (c === '_') || + (c === '\u200C') || (c === '\u200D') || + unicode.ID_Continue.test(c) + ) + }, + + isDigit (c) { + return typeof c === 'string' && /[0-9]/.test(c) + }, + + isHexDigit (c) { + return typeof c === 'string' && /[0-9A-Fa-f]/.test(c) + }, +} diff --git a/node_modules/json5/package.json b/node_modules/json5/package.json new file mode 100644 index 00000000..60c51d93 --- /dev/null +++ b/node_modules/json5/package.json @@ -0,0 +1,72 @@ +{ + "name": "json5", + "version": "2.2.3", + "description": "JSON for Humans", + "main": "lib/index.js", + "module": "dist/index.mjs", + "bin": "lib/cli.js", + "browser": "dist/index.js", + "types": "lib/index.d.ts", + "files": [ + "lib/", + "dist/" + ], + "engines": { + "node": ">=6" + }, + "scripts": { + "build": "rollup -c", + "build-package": "node build/package.js", + "build-unicode": "node build/unicode.js", + "coverage": "tap --coverage-report html test", + "lint": "eslint --fix .", + "lint-report": "eslint .", + "prepublishOnly": "npm run production", + "preversion": "npm run production", + "production": "run-s test build", + "tap": "tap -Rspec --100 test", + "test": "run-s lint-report tap", + "version": "npm run build-package && git add package.json5" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/json5/json5.git" + }, + "keywords": [ + "json", + "json5", + "es5", + "es2015", + "ecmascript" + ], + "author": "Aseem Kishore ", + "contributors": [ + "Max Nanasy ", + "Andrew Eisenberg ", + "Jordan Tucker " + ], + "license": "MIT", + "bugs": { + "url": "https://github.com/json5/json5/issues" + }, + "homepage": "http://json5.org/", + "devDependencies": { + "core-js": "^2.6.5", + "eslint": "^5.15.3", + "eslint-config-standard": "^12.0.0", + "eslint-plugin-import": "^2.16.0", + "eslint-plugin-node": "^8.0.1", + "eslint-plugin-promise": "^4.0.1", + "eslint-plugin-standard": "^4.0.0", + "npm-run-all": "^4.1.5", + "regenerate": "^1.4.0", + "rollup": "^0.64.1", + "rollup-plugin-buble": "^0.19.6", + "rollup-plugin-commonjs": "^9.2.1", + "rollup-plugin-node-resolve": "^3.4.0", + "rollup-plugin-terser": "^1.0.1", + "sinon": "^6.3.5", + "tap": "^12.6.0", + "unicode-10.0.0": "^0.7.5" + } +} diff --git a/node_modules/lightningcss-linux-x64-gnu/LICENSE b/node_modules/lightningcss-linux-x64-gnu/LICENSE new file mode 100644 index 00000000..89fe5b20 --- /dev/null +++ b/node_modules/lightningcss-linux-x64-gnu/LICENSE @@ -0,0 +1,373 @@ + Mozilla Public License Version 2.0 +================================== + +1. Definitions +-------------- + +1.1. "Contributor" +means each individual or legal entity that creates, contributes to +the creation of, or owns Covered Software. + +1.2. "Contributor Version" +means the combination of the Contributions of others (if any) used +by a Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" +means Covered Software of a particular Contributor. + +1.4. "Covered Software" +means Source Code Form to which the initial Contributor has attached +the notice in Exhibit A, the Executable Form of such Source Code +Form, and Modifications of such Source Code Form, in each case +including portions thereof. + +1.5. "Incompatible With Secondary Licenses" +means + +(a) that the initial Contributor has attached the notice described +in Exhibit B to the Covered Software; or + +(b) that the Covered Software was made available under the terms of +version 1.1 or earlier of the License, but not also under the +terms of a Secondary License. + +1.6. "Executable Form" +means any form of the work other than Source Code Form. + +1.7. "Larger Work" +means a work that combines Covered Software with other material, in +a separate file or files, that is not Covered Software. + +1.8. "License" +means this document. + +1.9. "Licensable" +means having the right to grant, to the maximum extent possible, +whether at the time of the initial grant or subsequently, any and +all of the rights conveyed by this License. + +1.10. "Modifications" +means any of the following: + +(a) any file in Source Code Form that results from an addition to, +deletion from, or modification of the contents of Covered +Software; or + +(b) any new file in Source Code Form that contains any Covered +Software. + +1.11. "Patent Claims" of a Contributor +means any patent claim(s), including without limitation, method, +process, and apparatus claims, in any patent Licensable by such +Contributor that would be infringed, but for the grant of the +License, by the making, using, selling, offering for sale, having +made, import, or transfer of either its Contributions or its +Contributor Version. + +1.12. "Secondary License" +means either the GNU General Public License, Version 2.0, the GNU +Lesser General Public License, Version 2.1, the GNU Affero General +Public License, Version 3.0, or any later versions of those +licenses. + +1.13. "Source Code Form" +means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") +means an individual or a legal entity exercising rights under this +License. For legal entities, "You" includes any entity that +controls, is controlled by, or is under common control with You. For +purposes of this definition, "control" means (a) the power, direct +or indirect, to cause the direction or management of such entity, +whether by contract or otherwise, or (b) ownership of more than +fifty percent (50%) of the outstanding shares or beneficial +ownership of such entity. + +2. License Grants and Conditions +-------------------------------- + +2.1. Grants + +Each Contributor hereby grants You a world-wide, royalty-free, +non-exclusive license: + +(a) under intellectual property rights (other than patent or trademark) +Licensable by such Contributor to use, reproduce, make available, +modify, display, perform, distribute, and otherwise exploit its +Contributions, either on an unmodified basis, with Modifications, or +as part of a Larger Work; and + +(b) under Patent Claims of such Contributor to make, use, sell, offer +for sale, have made, import, and otherwise transfer either its +Contributions or its Contributor Version. + +2.2. Effective Date + +The licenses granted in Section 2.1 with respect to any Contribution +become effective for each Contribution on the date the Contributor first +distributes such Contribution. + +2.3. Limitations on Grant Scope + +The licenses granted in this Section 2 are the only rights granted under +this License. No additional rights or licenses will be implied from the +distribution or licensing of Covered Software under this License. +Notwithstanding Section 2.1(b) above, no patent license is granted by a +Contributor: + +(a) for any code that a Contributor has removed from Covered Software; +or + +(b) for infringements caused by: (i) Your and any other third party's +modifications of Covered Software, or (ii) the combination of its +Contributions with other software (except as part of its Contributor +Version); or + +(c) under Patent Claims infringed by Covered Software in the absence of +its Contributions. + +This License does not grant any rights in the trademarks, service marks, +or logos of any Contributor (except as may be necessary to comply with +the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + +No Contributor makes additional grants as a result of Your choice to +distribute the Covered Software under a subsequent version of this +License (see Section 10.2) or under the terms of a Secondary License (if +permitted under the terms of Section 3.3). + +2.5. Representation + +Each Contributor represents that the Contributor believes its +Contributions are its original creation(s) or it has sufficient rights +to grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + +This License is not intended to limit any rights You have under +applicable copyright doctrines of fair use, fair dealing, or other +equivalents. + +2.7. Conditions + +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted +in Section 2.1. + +3. Responsibilities +------------------- + +3.1. Distribution of Source Form + +All distribution of Covered Software in Source Code Form, including any +Modifications that You create or to which You contribute, must be under +the terms of this License. You must inform recipients that the Source +Code Form of the Covered Software is governed by the terms of this +License, and how they can obtain a copy of this License. You may not +attempt to alter or restrict the recipients' rights in the Source Code +Form. + +3.2. Distribution of Executable Form + +If You distribute Covered Software in Executable Form then: + +(a) such Covered Software must also be made available in Source Code +Form, as described in Section 3.1, and You must inform recipients of +the Executable Form how they can obtain a copy of such Source Code +Form by reasonable means in a timely manner, at a charge no more +than the cost of distribution to the recipient; and + +(b) You may distribute such Executable Form under the terms of this +License, or sublicense it under different terms, provided that the +license for the Executable Form does not attempt to limit or alter +the recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + +You may create and distribute a Larger Work under terms of Your choice, +provided that You also comply with the requirements of this License for +the Covered Software. If the Larger Work is a combination of Covered +Software with a work governed by one or more Secondary Licenses, and the +Covered Software is not Incompatible With Secondary Licenses, this +License permits You to additionally distribute such Covered Software +under the terms of such Secondary License(s), so that the recipient of +the Larger Work may, at their option, further distribute the Covered +Software under the terms of either this License or such Secondary +License(s). + +3.4. Notices + +You may not remove or alter the substance of any license notices +(including copyright notices, patent notices, disclaimers of warranty, +or limitations of liability) contained within the Source Code Form of +the Covered Software, except that You may alter any license notices to +the extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + +You may choose to offer, and to charge a fee for, warranty, support, +indemnity or liability obligations to one or more recipients of Covered +Software. However, You may do so only on Your own behalf, and not on +behalf of any Contributor. You must make it absolutely clear that any +such warranty, support, indemnity, or liability obligation is offered by +You alone, and You hereby agree to indemnify every Contributor for any +liability incurred by such Contributor as a result of warranty, support, +indemnity or liability terms You offer. You may include additional +disclaimers of warranty and limitations of liability specific to any +jurisdiction. + +4. Inability to Comply Due to Statute or Regulation +--------------------------------------------------- + +If it is impossible for You to comply with any of the terms of this +License with respect to some or all of the Covered Software due to +statute, judicial order, or regulation then You must: (a) comply with +the terms of this License to the maximum extent possible; and (b) +describe the limitations and the code they affect. Such description must +be placed in a text file included with all distributions of the Covered +Software under this License. Except to the extent prohibited by statute +or regulation, such description must be sufficiently detailed for a +recipient of ordinary skill to be able to understand it. + +5. Termination +-------------- + +5.1. The rights granted under this License will terminate automatically +if You fail to comply with any of its terms. However, if You become +compliant, then the rights granted under this License from a particular +Contributor are reinstated (a) provisionally, unless and until such +Contributor explicitly and finally terminates Your grants, and (b) on an +ongoing basis, if such Contributor fails to notify You of the +non-compliance by some reasonable means prior to 60 days after You have +come back into compliance. Moreover, Your grants from a particular +Contributor are reinstated on an ongoing basis if such Contributor +notifies You of the non-compliance by some reasonable means, this is the +first time You have received notice of non-compliance with this License +from such Contributor, and You become compliant prior to 30 days after +Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent +infringement claim (excluding declaratory judgment actions, +counter-claims, and cross-claims) alleging that a Contributor Version +directly or indirectly infringes any patent, then the rights granted to +You by any and all Contributors for the Covered Software under Section +2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all +end user license agreements (excluding distributors and resellers) which +have been validly granted by You or Your distributors under this License +prior to termination shall survive termination. + +************************************************************************ +* * +* 6. Disclaimer of Warranty * +* ------------------------- * +* * +* Covered Software is provided under this License on an "as is" * +* basis, without warranty of any kind, either expressed, implied, or * +* statutory, including, without limitation, warranties that the * +* Covered Software is free of defects, merchantable, fit for a * +* particular purpose or non-infringing. The entire risk as to the * +* quality and performance of the Covered Software is with You. * +* Should any Covered Software prove defective in any respect, You * +* (not any Contributor) assume the cost of any necessary servicing, * +* repair, or correction. This disclaimer of warranty constitutes an * +* essential part of this License. No use of any Covered Software is * +* authorized under this License except under this disclaimer. * +* * +************************************************************************ + +************************************************************************ +* * +* 7. Limitation of Liability * +* -------------------------- * +* * +* Under no circumstances and under no legal theory, whether tort * +* (including negligence), contract, or otherwise, shall any * +* Contributor, or anyone who distributes Covered Software as * +* permitted above, be liable to You for any direct, indirect, * +* special, incidental, or consequential damages of any character * +* including, without limitation, damages for lost profits, loss of * +* goodwill, work stoppage, computer failure or malfunction, or any * +* and all other commercial damages or losses, even if such party * +* shall have been informed of the possibility of such damages. This * +* limitation of liability shall not apply to liability for death or * +* personal injury resulting from such party's negligence to the * +* extent applicable law prohibits such limitation. Some * +* jurisdictions do not allow the exclusion or limitation of * +* incidental or consequential damages, so this exclusion and * +* limitation may not apply to You. * +* * +************************************************************************ + +8. Litigation +------------- + +Any litigation relating to this License may be brought only in the +courts of a jurisdiction where the defendant maintains its principal +place of business and such litigation shall be governed by laws of that +jurisdiction, without reference to its conflict-of-law provisions. +Nothing in this Section shall prevent a party's ability to bring +cross-claims or counter-claims. + +9. Miscellaneous +---------------- + +This License represents the complete agreement concerning the subject +matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent +necessary to make it enforceable. Any law or regulation which provides +that the language of a contract shall be construed against the drafter +shall not be used to construe this License against a Contributor. + +10. Versions of the License +--------------------------- + +10.1. New Versions + +Mozilla Foundation is the license steward. Except as provided in Section +10.3, no one other than the license steward has the right to modify or +publish new versions of this License. Each version will be given a +distinguishing version number. + +10.2. Effect of New Versions + +You may distribute the Covered Software under the terms of the version +of the License under which You originally received the Covered Software, +or under the terms of any subsequent version published by the license +steward. + +10.3. Modified Versions + +If you create software not governed by this License, and you want to +create a new license for such software, you may create and use a +modified version of this License if you rename the license and remove +any references to the name of the license steward (except to note that +such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary +Licenses + +If You choose to distribute Source Code Form that is Incompatible With +Secondary Licenses under the terms of this version of the License, the +notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice +------------------------------------------- + +This Source Code Form is subject to the terms of the Mozilla Public +License, v. 2.0. If a copy of the MPL was not distributed with this +file, You can obtain one at https://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular +file, then You may include the notice in a location (such as a LICENSE +file in a relevant directory) where a recipient would be likely to look +for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice +--------------------------------------------------------- + +This Source Code Form is "Incompatible With Secondary Licenses", as +defined by the Mozilla Public License, v. 2.0. diff --git a/node_modules/lightningcss-linux-x64-gnu/README.md b/node_modules/lightningcss-linux-x64-gnu/README.md new file mode 100644 index 00000000..84f87d32 --- /dev/null +++ b/node_modules/lightningcss-linux-x64-gnu/README.md @@ -0,0 +1 @@ +This is the x86_64-unknown-linux-gnu build of lightningcss. See https://github.com/parcel-bundler/lightningcss for details. \ No newline at end of file diff --git a/node_modules/lightningcss-linux-x64-gnu/lightningcss.linux-x64-gnu.node b/node_modules/lightningcss-linux-x64-gnu/lightningcss.linux-x64-gnu.node new file mode 100644 index 00000000..6c0277d6 Binary files /dev/null and b/node_modules/lightningcss-linux-x64-gnu/lightningcss.linux-x64-gnu.node differ diff --git a/node_modules/lightningcss-linux-x64-gnu/package.json b/node_modules/lightningcss-linux-x64-gnu/package.json new file mode 100644 index 00000000..cb85a981 --- /dev/null +++ b/node_modules/lightningcss-linux-x64-gnu/package.json @@ -0,0 +1,38 @@ +{ + "name": "lightningcss-linux-x64-gnu", + "version": "1.29.1", + "license": "MPL-2.0", + "description": "A CSS parser, transformer, and minifier written in Rust", + "main": "lightningcss.linux-x64-gnu.node", + "browserslist": "last 2 versions, not dead", + "publishConfig": { + "access": "public" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "repository": { + "type": "git", + "url": "https://github.com/parcel-bundler/lightningcss.git" + }, + "engines": { + "node": ">= 12.0.0" + }, + "files": [ + "lightningcss.linux-x64-gnu.node" + ], + "resolutions": { + "lightningcss": "link:.", + "caniuse-lite": "^1.0.30001677" + }, + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ] +} diff --git a/node_modules/lightningcss-linux-x64-musl/LICENSE b/node_modules/lightningcss-linux-x64-musl/LICENSE new file mode 100644 index 00000000..89fe5b20 --- /dev/null +++ b/node_modules/lightningcss-linux-x64-musl/LICENSE @@ -0,0 +1,373 @@ + Mozilla Public License Version 2.0 +================================== + +1. Definitions +-------------- + +1.1. "Contributor" +means each individual or legal entity that creates, contributes to +the creation of, or owns Covered Software. + +1.2. "Contributor Version" +means the combination of the Contributions of others (if any) used +by a Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" +means Covered Software of a particular Contributor. + +1.4. "Covered Software" +means Source Code Form to which the initial Contributor has attached +the notice in Exhibit A, the Executable Form of such Source Code +Form, and Modifications of such Source Code Form, in each case +including portions thereof. + +1.5. "Incompatible With Secondary Licenses" +means + +(a) that the initial Contributor has attached the notice described +in Exhibit B to the Covered Software; or + +(b) that the Covered Software was made available under the terms of +version 1.1 or earlier of the License, but not also under the +terms of a Secondary License. + +1.6. "Executable Form" +means any form of the work other than Source Code Form. + +1.7. "Larger Work" +means a work that combines Covered Software with other material, in +a separate file or files, that is not Covered Software. + +1.8. "License" +means this document. + +1.9. "Licensable" +means having the right to grant, to the maximum extent possible, +whether at the time of the initial grant or subsequently, any and +all of the rights conveyed by this License. + +1.10. "Modifications" +means any of the following: + +(a) any file in Source Code Form that results from an addition to, +deletion from, or modification of the contents of Covered +Software; or + +(b) any new file in Source Code Form that contains any Covered +Software. + +1.11. "Patent Claims" of a Contributor +means any patent claim(s), including without limitation, method, +process, and apparatus claims, in any patent Licensable by such +Contributor that would be infringed, but for the grant of the +License, by the making, using, selling, offering for sale, having +made, import, or transfer of either its Contributions or its +Contributor Version. + +1.12. "Secondary License" +means either the GNU General Public License, Version 2.0, the GNU +Lesser General Public License, Version 2.1, the GNU Affero General +Public License, Version 3.0, or any later versions of those +licenses. + +1.13. "Source Code Form" +means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") +means an individual or a legal entity exercising rights under this +License. For legal entities, "You" includes any entity that +controls, is controlled by, or is under common control with You. For +purposes of this definition, "control" means (a) the power, direct +or indirect, to cause the direction or management of such entity, +whether by contract or otherwise, or (b) ownership of more than +fifty percent (50%) of the outstanding shares or beneficial +ownership of such entity. + +2. License Grants and Conditions +-------------------------------- + +2.1. Grants + +Each Contributor hereby grants You a world-wide, royalty-free, +non-exclusive license: + +(a) under intellectual property rights (other than patent or trademark) +Licensable by such Contributor to use, reproduce, make available, +modify, display, perform, distribute, and otherwise exploit its +Contributions, either on an unmodified basis, with Modifications, or +as part of a Larger Work; and + +(b) under Patent Claims of such Contributor to make, use, sell, offer +for sale, have made, import, and otherwise transfer either its +Contributions or its Contributor Version. + +2.2. Effective Date + +The licenses granted in Section 2.1 with respect to any Contribution +become effective for each Contribution on the date the Contributor first +distributes such Contribution. + +2.3. Limitations on Grant Scope + +The licenses granted in this Section 2 are the only rights granted under +this License. No additional rights or licenses will be implied from the +distribution or licensing of Covered Software under this License. +Notwithstanding Section 2.1(b) above, no patent license is granted by a +Contributor: + +(a) for any code that a Contributor has removed from Covered Software; +or + +(b) for infringements caused by: (i) Your and any other third party's +modifications of Covered Software, or (ii) the combination of its +Contributions with other software (except as part of its Contributor +Version); or + +(c) under Patent Claims infringed by Covered Software in the absence of +its Contributions. + +This License does not grant any rights in the trademarks, service marks, +or logos of any Contributor (except as may be necessary to comply with +the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + +No Contributor makes additional grants as a result of Your choice to +distribute the Covered Software under a subsequent version of this +License (see Section 10.2) or under the terms of a Secondary License (if +permitted under the terms of Section 3.3). + +2.5. Representation + +Each Contributor represents that the Contributor believes its +Contributions are its original creation(s) or it has sufficient rights +to grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + +This License is not intended to limit any rights You have under +applicable copyright doctrines of fair use, fair dealing, or other +equivalents. + +2.7. Conditions + +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted +in Section 2.1. + +3. Responsibilities +------------------- + +3.1. Distribution of Source Form + +All distribution of Covered Software in Source Code Form, including any +Modifications that You create or to which You contribute, must be under +the terms of this License. You must inform recipients that the Source +Code Form of the Covered Software is governed by the terms of this +License, and how they can obtain a copy of this License. You may not +attempt to alter or restrict the recipients' rights in the Source Code +Form. + +3.2. Distribution of Executable Form + +If You distribute Covered Software in Executable Form then: + +(a) such Covered Software must also be made available in Source Code +Form, as described in Section 3.1, and You must inform recipients of +the Executable Form how they can obtain a copy of such Source Code +Form by reasonable means in a timely manner, at a charge no more +than the cost of distribution to the recipient; and + +(b) You may distribute such Executable Form under the terms of this +License, or sublicense it under different terms, provided that the +license for the Executable Form does not attempt to limit or alter +the recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + +You may create and distribute a Larger Work under terms of Your choice, +provided that You also comply with the requirements of this License for +the Covered Software. If the Larger Work is a combination of Covered +Software with a work governed by one or more Secondary Licenses, and the +Covered Software is not Incompatible With Secondary Licenses, this +License permits You to additionally distribute such Covered Software +under the terms of such Secondary License(s), so that the recipient of +the Larger Work may, at their option, further distribute the Covered +Software under the terms of either this License or such Secondary +License(s). + +3.4. Notices + +You may not remove or alter the substance of any license notices +(including copyright notices, patent notices, disclaimers of warranty, +or limitations of liability) contained within the Source Code Form of +the Covered Software, except that You may alter any license notices to +the extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + +You may choose to offer, and to charge a fee for, warranty, support, +indemnity or liability obligations to one or more recipients of Covered +Software. However, You may do so only on Your own behalf, and not on +behalf of any Contributor. You must make it absolutely clear that any +such warranty, support, indemnity, or liability obligation is offered by +You alone, and You hereby agree to indemnify every Contributor for any +liability incurred by such Contributor as a result of warranty, support, +indemnity or liability terms You offer. You may include additional +disclaimers of warranty and limitations of liability specific to any +jurisdiction. + +4. Inability to Comply Due to Statute or Regulation +--------------------------------------------------- + +If it is impossible for You to comply with any of the terms of this +License with respect to some or all of the Covered Software due to +statute, judicial order, or regulation then You must: (a) comply with +the terms of this License to the maximum extent possible; and (b) +describe the limitations and the code they affect. Such description must +be placed in a text file included with all distributions of the Covered +Software under this License. Except to the extent prohibited by statute +or regulation, such description must be sufficiently detailed for a +recipient of ordinary skill to be able to understand it. + +5. Termination +-------------- + +5.1. The rights granted under this License will terminate automatically +if You fail to comply with any of its terms. However, if You become +compliant, then the rights granted under this License from a particular +Contributor are reinstated (a) provisionally, unless and until such +Contributor explicitly and finally terminates Your grants, and (b) on an +ongoing basis, if such Contributor fails to notify You of the +non-compliance by some reasonable means prior to 60 days after You have +come back into compliance. Moreover, Your grants from a particular +Contributor are reinstated on an ongoing basis if such Contributor +notifies You of the non-compliance by some reasonable means, this is the +first time You have received notice of non-compliance with this License +from such Contributor, and You become compliant prior to 30 days after +Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent +infringement claim (excluding declaratory judgment actions, +counter-claims, and cross-claims) alleging that a Contributor Version +directly or indirectly infringes any patent, then the rights granted to +You by any and all Contributors for the Covered Software under Section +2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all +end user license agreements (excluding distributors and resellers) which +have been validly granted by You or Your distributors under this License +prior to termination shall survive termination. + +************************************************************************ +* * +* 6. Disclaimer of Warranty * +* ------------------------- * +* * +* Covered Software is provided under this License on an "as is" * +* basis, without warranty of any kind, either expressed, implied, or * +* statutory, including, without limitation, warranties that the * +* Covered Software is free of defects, merchantable, fit for a * +* particular purpose or non-infringing. The entire risk as to the * +* quality and performance of the Covered Software is with You. * +* Should any Covered Software prove defective in any respect, You * +* (not any Contributor) assume the cost of any necessary servicing, * +* repair, or correction. This disclaimer of warranty constitutes an * +* essential part of this License. No use of any Covered Software is * +* authorized under this License except under this disclaimer. * +* * +************************************************************************ + +************************************************************************ +* * +* 7. Limitation of Liability * +* -------------------------- * +* * +* Under no circumstances and under no legal theory, whether tort * +* (including negligence), contract, or otherwise, shall any * +* Contributor, or anyone who distributes Covered Software as * +* permitted above, be liable to You for any direct, indirect, * +* special, incidental, or consequential damages of any character * +* including, without limitation, damages for lost profits, loss of * +* goodwill, work stoppage, computer failure or malfunction, or any * +* and all other commercial damages or losses, even if such party * +* shall have been informed of the possibility of such damages. This * +* limitation of liability shall not apply to liability for death or * +* personal injury resulting from such party's negligence to the * +* extent applicable law prohibits such limitation. Some * +* jurisdictions do not allow the exclusion or limitation of * +* incidental or consequential damages, so this exclusion and * +* limitation may not apply to You. * +* * +************************************************************************ + +8. Litigation +------------- + +Any litigation relating to this License may be brought only in the +courts of a jurisdiction where the defendant maintains its principal +place of business and such litigation shall be governed by laws of that +jurisdiction, without reference to its conflict-of-law provisions. +Nothing in this Section shall prevent a party's ability to bring +cross-claims or counter-claims. + +9. Miscellaneous +---------------- + +This License represents the complete agreement concerning the subject +matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent +necessary to make it enforceable. Any law or regulation which provides +that the language of a contract shall be construed against the drafter +shall not be used to construe this License against a Contributor. + +10. Versions of the License +--------------------------- + +10.1. New Versions + +Mozilla Foundation is the license steward. Except as provided in Section +10.3, no one other than the license steward has the right to modify or +publish new versions of this License. Each version will be given a +distinguishing version number. + +10.2. Effect of New Versions + +You may distribute the Covered Software under the terms of the version +of the License under which You originally received the Covered Software, +or under the terms of any subsequent version published by the license +steward. + +10.3. Modified Versions + +If you create software not governed by this License, and you want to +create a new license for such software, you may create and use a +modified version of this License if you rename the license and remove +any references to the name of the license steward (except to note that +such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary +Licenses + +If You choose to distribute Source Code Form that is Incompatible With +Secondary Licenses under the terms of this version of the License, the +notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice +------------------------------------------- + +This Source Code Form is subject to the terms of the Mozilla Public +License, v. 2.0. If a copy of the MPL was not distributed with this +file, You can obtain one at https://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular +file, then You may include the notice in a location (such as a LICENSE +file in a relevant directory) where a recipient would be likely to look +for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice +--------------------------------------------------------- + +This Source Code Form is "Incompatible With Secondary Licenses", as +defined by the Mozilla Public License, v. 2.0. diff --git a/node_modules/lightningcss-linux-x64-musl/README.md b/node_modules/lightningcss-linux-x64-musl/README.md new file mode 100644 index 00000000..527d999c --- /dev/null +++ b/node_modules/lightningcss-linux-x64-musl/README.md @@ -0,0 +1 @@ +This is the x86_64-unknown-linux-musl build of lightningcss. See https://github.com/parcel-bundler/lightningcss for details. \ No newline at end of file diff --git a/node_modules/lightningcss-linux-x64-musl/lightningcss.linux-x64-musl.node b/node_modules/lightningcss-linux-x64-musl/lightningcss.linux-x64-musl.node new file mode 100644 index 00000000..6536e589 Binary files /dev/null and b/node_modules/lightningcss-linux-x64-musl/lightningcss.linux-x64-musl.node differ diff --git a/node_modules/lightningcss-linux-x64-musl/package.json b/node_modules/lightningcss-linux-x64-musl/package.json new file mode 100644 index 00000000..d6794750 --- /dev/null +++ b/node_modules/lightningcss-linux-x64-musl/package.json @@ -0,0 +1,38 @@ +{ + "name": "lightningcss-linux-x64-musl", + "version": "1.29.1", + "license": "MPL-2.0", + "description": "A CSS parser, transformer, and minifier written in Rust", + "main": "lightningcss.linux-x64-musl.node", + "browserslist": "last 2 versions, not dead", + "publishConfig": { + "access": "public" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "repository": { + "type": "git", + "url": "https://github.com/parcel-bundler/lightningcss.git" + }, + "engines": { + "node": ">= 12.0.0" + }, + "files": [ + "lightningcss.linux-x64-musl.node" + ], + "resolutions": { + "lightningcss": "link:.", + "caniuse-lite": "^1.0.30001677" + }, + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ] +} diff --git a/node_modules/lightningcss/LICENSE b/node_modules/lightningcss/LICENSE new file mode 100644 index 00000000..89fe5b20 --- /dev/null +++ b/node_modules/lightningcss/LICENSE @@ -0,0 +1,373 @@ + Mozilla Public License Version 2.0 +================================== + +1. Definitions +-------------- + +1.1. "Contributor" +means each individual or legal entity that creates, contributes to +the creation of, or owns Covered Software. + +1.2. "Contributor Version" +means the combination of the Contributions of others (if any) used +by a Contributor and that particular Contributor's Contribution. + +1.3. "Contribution" +means Covered Software of a particular Contributor. + +1.4. "Covered Software" +means Source Code Form to which the initial Contributor has attached +the notice in Exhibit A, the Executable Form of such Source Code +Form, and Modifications of such Source Code Form, in each case +including portions thereof. + +1.5. "Incompatible With Secondary Licenses" +means + +(a) that the initial Contributor has attached the notice described +in Exhibit B to the Covered Software; or + +(b) that the Covered Software was made available under the terms of +version 1.1 or earlier of the License, but not also under the +terms of a Secondary License. + +1.6. "Executable Form" +means any form of the work other than Source Code Form. + +1.7. "Larger Work" +means a work that combines Covered Software with other material, in +a separate file or files, that is not Covered Software. + +1.8. "License" +means this document. + +1.9. "Licensable" +means having the right to grant, to the maximum extent possible, +whether at the time of the initial grant or subsequently, any and +all of the rights conveyed by this License. + +1.10. "Modifications" +means any of the following: + +(a) any file in Source Code Form that results from an addition to, +deletion from, or modification of the contents of Covered +Software; or + +(b) any new file in Source Code Form that contains any Covered +Software. + +1.11. "Patent Claims" of a Contributor +means any patent claim(s), including without limitation, method, +process, and apparatus claims, in any patent Licensable by such +Contributor that would be infringed, but for the grant of the +License, by the making, using, selling, offering for sale, having +made, import, or transfer of either its Contributions or its +Contributor Version. + +1.12. "Secondary License" +means either the GNU General Public License, Version 2.0, the GNU +Lesser General Public License, Version 2.1, the GNU Affero General +Public License, Version 3.0, or any later versions of those +licenses. + +1.13. "Source Code Form" +means the form of the work preferred for making modifications. + +1.14. "You" (or "Your") +means an individual or a legal entity exercising rights under this +License. For legal entities, "You" includes any entity that +controls, is controlled by, or is under common control with You. For +purposes of this definition, "control" means (a) the power, direct +or indirect, to cause the direction or management of such entity, +whether by contract or otherwise, or (b) ownership of more than +fifty percent (50%) of the outstanding shares or beneficial +ownership of such entity. + +2. License Grants and Conditions +-------------------------------- + +2.1. Grants + +Each Contributor hereby grants You a world-wide, royalty-free, +non-exclusive license: + +(a) under intellectual property rights (other than patent or trademark) +Licensable by such Contributor to use, reproduce, make available, +modify, display, perform, distribute, and otherwise exploit its +Contributions, either on an unmodified basis, with Modifications, or +as part of a Larger Work; and + +(b) under Patent Claims of such Contributor to make, use, sell, offer +for sale, have made, import, and otherwise transfer either its +Contributions or its Contributor Version. + +2.2. Effective Date + +The licenses granted in Section 2.1 with respect to any Contribution +become effective for each Contribution on the date the Contributor first +distributes such Contribution. + +2.3. Limitations on Grant Scope + +The licenses granted in this Section 2 are the only rights granted under +this License. No additional rights or licenses will be implied from the +distribution or licensing of Covered Software under this License. +Notwithstanding Section 2.1(b) above, no patent license is granted by a +Contributor: + +(a) for any code that a Contributor has removed from Covered Software; +or + +(b) for infringements caused by: (i) Your and any other third party's +modifications of Covered Software, or (ii) the combination of its +Contributions with other software (except as part of its Contributor +Version); or + +(c) under Patent Claims infringed by Covered Software in the absence of +its Contributions. + +This License does not grant any rights in the trademarks, service marks, +or logos of any Contributor (except as may be necessary to comply with +the notice requirements in Section 3.4). + +2.4. Subsequent Licenses + +No Contributor makes additional grants as a result of Your choice to +distribute the Covered Software under a subsequent version of this +License (see Section 10.2) or under the terms of a Secondary License (if +permitted under the terms of Section 3.3). + +2.5. Representation + +Each Contributor represents that the Contributor believes its +Contributions are its original creation(s) or it has sufficient rights +to grant the rights to its Contributions conveyed by this License. + +2.6. Fair Use + +This License is not intended to limit any rights You have under +applicable copyright doctrines of fair use, fair dealing, or other +equivalents. + +2.7. Conditions + +Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted +in Section 2.1. + +3. Responsibilities +------------------- + +3.1. Distribution of Source Form + +All distribution of Covered Software in Source Code Form, including any +Modifications that You create or to which You contribute, must be under +the terms of this License. You must inform recipients that the Source +Code Form of the Covered Software is governed by the terms of this +License, and how they can obtain a copy of this License. You may not +attempt to alter or restrict the recipients' rights in the Source Code +Form. + +3.2. Distribution of Executable Form + +If You distribute Covered Software in Executable Form then: + +(a) such Covered Software must also be made available in Source Code +Form, as described in Section 3.1, and You must inform recipients of +the Executable Form how they can obtain a copy of such Source Code +Form by reasonable means in a timely manner, at a charge no more +than the cost of distribution to the recipient; and + +(b) You may distribute such Executable Form under the terms of this +License, or sublicense it under different terms, provided that the +license for the Executable Form does not attempt to limit or alter +the recipients' rights in the Source Code Form under this License. + +3.3. Distribution of a Larger Work + +You may create and distribute a Larger Work under terms of Your choice, +provided that You also comply with the requirements of this License for +the Covered Software. If the Larger Work is a combination of Covered +Software with a work governed by one or more Secondary Licenses, and the +Covered Software is not Incompatible With Secondary Licenses, this +License permits You to additionally distribute such Covered Software +under the terms of such Secondary License(s), so that the recipient of +the Larger Work may, at their option, further distribute the Covered +Software under the terms of either this License or such Secondary +License(s). + +3.4. Notices + +You may not remove or alter the substance of any license notices +(including copyright notices, patent notices, disclaimers of warranty, +or limitations of liability) contained within the Source Code Form of +the Covered Software, except that You may alter any license notices to +the extent required to remedy known factual inaccuracies. + +3.5. Application of Additional Terms + +You may choose to offer, and to charge a fee for, warranty, support, +indemnity or liability obligations to one or more recipients of Covered +Software. However, You may do so only on Your own behalf, and not on +behalf of any Contributor. You must make it absolutely clear that any +such warranty, support, indemnity, or liability obligation is offered by +You alone, and You hereby agree to indemnify every Contributor for any +liability incurred by such Contributor as a result of warranty, support, +indemnity or liability terms You offer. You may include additional +disclaimers of warranty and limitations of liability specific to any +jurisdiction. + +4. Inability to Comply Due to Statute or Regulation +--------------------------------------------------- + +If it is impossible for You to comply with any of the terms of this +License with respect to some or all of the Covered Software due to +statute, judicial order, or regulation then You must: (a) comply with +the terms of this License to the maximum extent possible; and (b) +describe the limitations and the code they affect. Such description must +be placed in a text file included with all distributions of the Covered +Software under this License. Except to the extent prohibited by statute +or regulation, such description must be sufficiently detailed for a +recipient of ordinary skill to be able to understand it. + +5. Termination +-------------- + +5.1. The rights granted under this License will terminate automatically +if You fail to comply with any of its terms. However, if You become +compliant, then the rights granted under this License from a particular +Contributor are reinstated (a) provisionally, unless and until such +Contributor explicitly and finally terminates Your grants, and (b) on an +ongoing basis, if such Contributor fails to notify You of the +non-compliance by some reasonable means prior to 60 days after You have +come back into compliance. Moreover, Your grants from a particular +Contributor are reinstated on an ongoing basis if such Contributor +notifies You of the non-compliance by some reasonable means, this is the +first time You have received notice of non-compliance with this License +from such Contributor, and You become compliant prior to 30 days after +Your receipt of the notice. + +5.2. If You initiate litigation against any entity by asserting a patent +infringement claim (excluding declaratory judgment actions, +counter-claims, and cross-claims) alleging that a Contributor Version +directly or indirectly infringes any patent, then the rights granted to +You by any and all Contributors for the Covered Software under Section +2.1 of this License shall terminate. + +5.3. In the event of termination under Sections 5.1 or 5.2 above, all +end user license agreements (excluding distributors and resellers) which +have been validly granted by You or Your distributors under this License +prior to termination shall survive termination. + +************************************************************************ +* * +* 6. Disclaimer of Warranty * +* ------------------------- * +* * +* Covered Software is provided under this License on an "as is" * +* basis, without warranty of any kind, either expressed, implied, or * +* statutory, including, without limitation, warranties that the * +* Covered Software is free of defects, merchantable, fit for a * +* particular purpose or non-infringing. The entire risk as to the * +* quality and performance of the Covered Software is with You. * +* Should any Covered Software prove defective in any respect, You * +* (not any Contributor) assume the cost of any necessary servicing, * +* repair, or correction. This disclaimer of warranty constitutes an * +* essential part of this License. No use of any Covered Software is * +* authorized under this License except under this disclaimer. * +* * +************************************************************************ + +************************************************************************ +* * +* 7. Limitation of Liability * +* -------------------------- * +* * +* Under no circumstances and under no legal theory, whether tort * +* (including negligence), contract, or otherwise, shall any * +* Contributor, or anyone who distributes Covered Software as * +* permitted above, be liable to You for any direct, indirect, * +* special, incidental, or consequential damages of any character * +* including, without limitation, damages for lost profits, loss of * +* goodwill, work stoppage, computer failure or malfunction, or any * +* and all other commercial damages or losses, even if such party * +* shall have been informed of the possibility of such damages. This * +* limitation of liability shall not apply to liability for death or * +* personal injury resulting from such party's negligence to the * +* extent applicable law prohibits such limitation. Some * +* jurisdictions do not allow the exclusion or limitation of * +* incidental or consequential damages, so this exclusion and * +* limitation may not apply to You. * +* * +************************************************************************ + +8. Litigation +------------- + +Any litigation relating to this License may be brought only in the +courts of a jurisdiction where the defendant maintains its principal +place of business and such litigation shall be governed by laws of that +jurisdiction, without reference to its conflict-of-law provisions. +Nothing in this Section shall prevent a party's ability to bring +cross-claims or counter-claims. + +9. Miscellaneous +---------------- + +This License represents the complete agreement concerning the subject +matter hereof. If any provision of this License is held to be +unenforceable, such provision shall be reformed only to the extent +necessary to make it enforceable. Any law or regulation which provides +that the language of a contract shall be construed against the drafter +shall not be used to construe this License against a Contributor. + +10. Versions of the License +--------------------------- + +10.1. New Versions + +Mozilla Foundation is the license steward. Except as provided in Section +10.3, no one other than the license steward has the right to modify or +publish new versions of this License. Each version will be given a +distinguishing version number. + +10.2. Effect of New Versions + +You may distribute the Covered Software under the terms of the version +of the License under which You originally received the Covered Software, +or under the terms of any subsequent version published by the license +steward. + +10.3. Modified Versions + +If you create software not governed by this License, and you want to +create a new license for such software, you may create and use a +modified version of this License if you rename the license and remove +any references to the name of the license steward (except to note that +such modified license differs from this License). + +10.4. Distributing Source Code Form that is Incompatible With Secondary +Licenses + +If You choose to distribute Source Code Form that is Incompatible With +Secondary Licenses under the terms of this version of the License, the +notice described in Exhibit B of this License must be attached. + +Exhibit A - Source Code Form License Notice +------------------------------------------- + +This Source Code Form is subject to the terms of the Mozilla Public +License, v. 2.0. If a copy of the MPL was not distributed with this +file, You can obtain one at https://mozilla.org/MPL/2.0/. + +If it is not possible or desirable to put the notice in a particular +file, then You may include the notice in a location (such as a LICENSE +file in a relevant directory) where a recipient would be likely to look +for such a notice. + +You may add additional accurate notices of copyright ownership. + +Exhibit B - "Incompatible With Secondary Licenses" Notice +--------------------------------------------------------- + +This Source Code Form is "Incompatible With Secondary Licenses", as +defined by the Mozilla Public License, v. 2.0. diff --git a/node_modules/lightningcss/README.md b/node_modules/lightningcss/README.md new file mode 100644 index 00000000..f44d7b3c --- /dev/null +++ b/node_modules/lightningcss/README.md @@ -0,0 +1,105 @@ +# ⚡️ Lightning CSS + +An extremely fast CSS parser, transformer, and minifier written in Rust. Use it with [Parcel](https://parceljs.org), as a standalone library or CLI, or via a plugin with any other tool. + +performance and build size charts +performance and build size charts + +## Features + +- **Extremely fast** – Parsing and minifying large files is completed in milliseconds, often with significantly smaller output than other tools. See [benchmarks](#benchmarks) below. +- **Typed property values** – many other CSS parsers treat property values as an untyped series of tokens. This means that each transformer that wants to do something with these values must interpret them itself, leading to duplicate work and inconsistencies. Lightning CSS parses all values using the grammar from the CSS specification, and exposes a specific value type for each property. +- **Browser-grade parser** – Lightning CSS is built on the [cssparser](https://github.com/servo/rust-cssparser) and [selectors](https://github.com/servo/stylo/tree/main/selectors) crates created by Mozilla and used by Firefox and Servo. These provide a solid general purpose CSS-parsing foundation on top of which Lightning CSS implements support for all specific CSS rules and properties. +- **Minification** – One of the main purposes of Lightning CSS is to minify CSS to make it smaller. This includes many optimizations including: + - Combining longhand properties into shorthands where possible. + - Merging adjacent rules with the same selectors or declarations when it is safe to do so. + - Combining CSS transforms into a single matrix or vice versa when smaller. + - Removing vendor prefixes that are not needed, based on the provided browser targets. + - Reducing `calc()` expressions where possible. + - Converting colors to shorter hex notation where possible. + - Minifying gradients. + - Minifying CSS grid templates. + - Normalizing property value order. + - Removing default property sub-values which will be inferred by browsers. + - Many micro-optimizations, e.g. converting to shorter units, removing unnecessary quotation marks, etc. +- **Vendor prefixing** – Lightning CSS accepts a list of browser targets, and automatically adds (and removes) vendor prefixes. +- **Browserslist configuration** – Lightning CSS supports opt-in browserslist configuration discovery to resolve browser targets and integrate with your existing tools and config setup. +- **Syntax lowering** – Lightning CSS parses modern CSS syntax, and generates more compatible output where needed, based on browser targets. + - CSS Nesting + - Custom media queries (draft spec) + - Logical properties + * [Color Level 5](https://drafts.csswg.org/css-color-5/) + - `color-mix()` function + - Relative color syntax, e.g. `lab(from purple calc(l * .8) a b)` + - [Color Level 4](https://drafts.csswg.org/css-color-4/) + - `lab()`, `lch()`, `oklab()`, and `oklch()` colors + - `color()` function supporting predefined color spaces such as `display-p3` and `xyz` + - Space separated components in `rgb` and `hsl` functions + - Hex with alpha syntax + - `hwb()` color syntax + - Percent syntax for opacity + - `#rgba` and `#rrggbbaa` hex colors + - Selectors + - `:not` with multiple arguments + - `:lang` with multiple arguments + - `:dir` + - `:is` + - Double position gradient stops (e.g. `red 40% 80%`) + - `clamp()`, `round()`, `rem()`, and `mod()` math functions + - Alignment shorthands (e.g. `place-items`) + - Two-value `overflow` shorthand + - Media query range syntax (e.g. `@media (width <= 100px)` or `@media (100px < width < 500px)`) + - Multi-value `display` property (e.g. `inline flex`) + - `system-ui` font family fallbacks +- **CSS modules** – Lightning CSS supports compiling a subset of [CSS modules](https://github.com/css-modules/css-modules) features. + - Locally scoped class and id selectors + - Locally scoped custom identifiers, e.g. `@keyframes` names, grid lines/areas, `@counter-style` names, etc. + - Opt-in support for locally scoped CSS variables and other dashed identifiers. + - `:local()` and `:global()` selectors + - The `composes` property +- **Custom transforms** – The Lightning CSS visitor API can be used to implement custom transform plugins. + +## Documentation + +Lightning CSS can be used from [Parcel](https://parceljs.org), as a standalone library from JavaScript or Rust, using a standalone CLI, or wrapped as a plugin within any other tool. See the [Lightning CSS website](https://lightningcss.dev/docs.html) for documentation. + +## Benchmarks + +performance and build size charts +performance and build size charts + +``` +$ node bench.js bootstrap-4.css +cssnano: 544.809ms +159636 bytes + +esbuild: 17.199ms +160332 bytes + +lightningcss: 4.16ms +143091 bytes + + +$ node bench.js animate.css +cssnano: 283.105ms +71723 bytes + +esbuild: 11.858ms +72183 bytes + +lightningcss: 1.973ms +23666 bytes + + +$ node bench.js tailwind.css +cssnano: 2.198s +1925626 bytes + +esbuild: 107.668ms +1961642 bytes + +lightningcss: 43.368ms +1824130 bytes +``` + +For more benchmarks comparing more tools and input, see [here](http://goalsmashers.github.io/css-minification-benchmark/). Note that some of the tools shown perform unsafe optimizations that may change the behavior of the original CSS in favor of smaller file size. Lightning CSS does not do this – the output CSS should always behave identically to the input. Keep this in mind when comparing file sizes between tools. diff --git a/node_modules/lightningcss/node/ast.d.ts b/node_modules/lightningcss/node/ast.d.ts new file mode 100644 index 00000000..cc198e2e --- /dev/null +++ b/node_modules/lightningcss/node/ast.d.ts @@ -0,0 +1,9712 @@ +/* eslint-disable */ +/** + * This file was automatically generated by json-schema-to-typescript. + * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file, + * and run json-schema-to-typescript to regenerate this file. + */ + +export type String = string; +/** + * A CSS rule. + */ +export type Rule = | { + type: "media"; + value: MediaRule; + } +| { + type: "import"; + value: ImportRule; + } +| { + type: "style"; + value: StyleRule; + } +| { + type: "keyframes"; + value: KeyframesRule; + } +| { + type: "font-face"; + value: FontFaceRule; + } +| { + type: "font-palette-values"; + value: FontPaletteValuesRule; + } +| { + type: "font-feature-values"; + value: FontFeatureValuesRule; + } +| { + type: "page"; + value: PageRule; + } +| { + type: "supports"; + value: SupportsRule; + } +| { + type: "counter-style"; + value: CounterStyleRule; + } +| { + type: "namespace"; + value: NamespaceRule; + } +| { + type: "moz-document"; + value: MozDocumentRule; + } +| { + type: "nesting"; + value: NestingRule; + } +| { + type: "viewport"; + value: ViewportRule; + } +| { + type: "custom-media"; + value: CustomMediaRule; + } +| { + type: "layer-statement"; + value: LayerStatementRule; + } +| { + type: "layer-block"; + value: LayerBlockRule; + } +| { + type: "property"; + value: PropertyRule; + } +| { + type: "container"; + value: ContainerRule; + } +| { + type: "scope"; + value: ScopeRule; + } +| { + type: "starting-style"; + value: StartingStyleRule; + } +| { + type: "view-transition"; + value: ViewTransitionRule; + } +| { + type: "ignored"; + } +| { + type: "unknown"; + value: UnknownAtRule; + } +| { + type: "custom"; + value: DefaultAtRule; + }; +/** + * Represents a media condition. + */ +export type MediaCondition = + | { + type: "feature"; + value: QueryFeatureFor_MediaFeatureId; + } + | { + type: "not"; + value: MediaCondition; + } + | { + /** + * The conditions for the operator. + */ + conditions: MediaCondition[]; + /** + * The operator for the conditions. + */ + operator: Operator; + type: "operation"; + }; +/** + * A generic media feature or container feature. + */ +export type QueryFeatureFor_MediaFeatureId = + | { + /** + * The name of the feature. + */ + name: MediaFeatureNameFor_MediaFeatureId; + type: "plain"; + /** + * The feature value. + */ + value: MediaFeatureValue; + } + | { + /** + * The name of the feature. + */ + name: MediaFeatureNameFor_MediaFeatureId; + type: "boolean"; + } + | { + /** + * The name of the feature. + */ + name: MediaFeatureNameFor_MediaFeatureId; + /** + * A comparator. + */ + operator: MediaFeatureComparison; + type: "range"; + /** + * The feature value. + */ + value: MediaFeatureValue; + } + | { + /** + * The end value. + */ + end: MediaFeatureValue; + /** + * A comparator for the end value. + */ + endOperator: MediaFeatureComparison; + /** + * The name of the feature. + */ + name: MediaFeatureNameFor_MediaFeatureId; + /** + * A start value. + */ + start: MediaFeatureValue; + /** + * A comparator for the start value. + */ + startOperator: MediaFeatureComparison; + type: "interval"; + }; +/** + * A media feature name. + */ +export type MediaFeatureNameFor_MediaFeatureId = MediaFeatureId | String | String; +/** + * A media query feature identifier. + */ +export type MediaFeatureId = + | "width" + | "height" + | "aspect-ratio" + | "orientation" + | "overflow-block" + | "overflow-inline" + | "horizontal-viewport-segments" + | "vertical-viewport-segments" + | "display-mode" + | "resolution" + | "scan" + | "grid" + | "update" + | "environment-blending" + | "color" + | "color-index" + | "monochrome" + | "color-gamut" + | "dynamic-range" + | "inverted-colors" + | "pointer" + | "hover" + | "any-pointer" + | "any-hover" + | "nav-controls" + | "video-color-gamut" + | "video-dynamic-range" + | "scripting" + | "prefers-reduced-motion" + | "prefers-reduced-transparency" + | "prefers-contrast" + | "forced-colors" + | "prefers-color-scheme" + | "prefers-reduced-data" + | "device-width" + | "device-height" + | "device-aspect-ratio" + | "-webkit-device-pixel-ratio" + | "-moz-device-pixel-ratio"; +/** + * [media feature value](https://drafts.csswg.org/mediaqueries/#typedef-mf-value) within a media query. + * + * See [MediaFeature](MediaFeature). + */ +export type MediaFeatureValue = + | { + type: "length"; + value: Length; + } + | { + type: "number"; + value: number; + } + | { + type: "integer"; + value: number; + } + | { + type: "boolean"; + value: boolean; + } + | { + type: "resolution"; + value: Resolution; + } + | { + type: "ratio"; + value: Ratio; + } + | { + type: "ident"; + value: String; + } + | { + type: "env"; + value: EnvironmentVariable; + }; +/** + * A CSS [``](https://www.w3.org/TR/css-values-4/#lengths) value, with support for `calc()`. + */ +export type Length = + | { + type: "value"; + value: LengthValue; + } + | { + type: "calc"; + value: CalcFor_Length; + }; +export type LengthUnit = + | "px" + | "in" + | "cm" + | "mm" + | "q" + | "pt" + | "pc" + | "em" + | "rem" + | "ex" + | "rex" + | "ch" + | "rch" + | "cap" + | "rcap" + | "ic" + | "ric" + | "lh" + | "rlh" + | "vw" + | "lvw" + | "svw" + | "dvw" + | "cqw" + | "vh" + | "lvh" + | "svh" + | "dvh" + | "cqh" + | "vi" + | "svi" + | "lvi" + | "dvi" + | "cqi" + | "vb" + | "svb" + | "lvb" + | "dvb" + | "cqb" + | "vmin" + | "svmin" + | "lvmin" + | "dvmin" + | "cqmin" + | "vmax" + | "svmax" + | "lvmax" + | "dvmax" + | "cqmax"; +/** + * A mathematical expression used within the [`calc()`](https://www.w3.org/TR/css-values-4/#calc-func) function. + * + * This type supports generic value types. Values such as [Length](super::length::Length), [Percentage](super::percentage::Percentage), [Time](super::time::Time), and [Angle](super::angle::Angle) support `calc()` expressions. + */ +export type CalcFor_Length = + | { + type: "value"; + value: Length; + } + | { + type: "number"; + value: number; + } + | { + type: "sum"; + /** + * @minItems 2 + * @maxItems 2 + */ + value: [CalcFor_Length, CalcFor_Length]; + } + | { + type: "product"; + /** + * @minItems 2 + * @maxItems 2 + */ + value: [number, CalcFor_Length]; + } + | { + type: "function"; + value: MathFunctionFor_Length; + }; +/** + * A CSS [math function](https://www.w3.org/TR/css-values-4/#math-function). + * + * Math functions may be used in most properties and values that accept numeric values, including lengths, percentages, angles, times, etc. + */ +export type MathFunctionFor_Length = + | { + type: "calc"; + value: CalcFor_Length; + } + | { + type: "min"; + value: CalcFor_Length[]; + } + | { + type: "max"; + value: CalcFor_Length[]; + } + | { + type: "clamp"; + /** + * @minItems 3 + * @maxItems 3 + */ + value: [CalcFor_Length, CalcFor_Length, CalcFor_Length]; + } + | { + type: "round"; + /** + * @minItems 3 + * @maxItems 3 + */ + value: [RoundingStrategy, CalcFor_Length, CalcFor_Length]; + } + | { + type: "rem"; + /** + * @minItems 2 + * @maxItems 2 + */ + value: [CalcFor_Length, CalcFor_Length]; + } + | { + type: "mod"; + /** + * @minItems 2 + * @maxItems 2 + */ + value: [CalcFor_Length, CalcFor_Length]; + } + | { + type: "abs"; + value: CalcFor_Length; + } + | { + type: "sign"; + value: CalcFor_Length; + } + | { + type: "hypot"; + value: CalcFor_Length[]; + }; +/** + * A [rounding strategy](https://www.w3.org/TR/css-values-4/#typedef-rounding-strategy), as used in the `round()` function. + */ +export type RoundingStrategy = "nearest" | "up" | "down" | "to-zero"; +/** + * A CSS [``](https://www.w3.org/TR/css-values-4/#resolution) value. + */ +export type Resolution = + | { + type: "dpi"; + value: number; + } + | { + type: "dpcm"; + value: number; + } + | { + type: "dppx"; + value: number; + }; +/** + * A CSS [``](https://www.w3.org/TR/css-values-4/#ratios) value, representing the ratio of two numeric values. + * + * @minItems 2 + * @maxItems 2 + */ +export type Ratio = [number, number]; +/** + * A raw CSS token, or a parsed value. + */ +export type TokenOrValue = + | { + type: "token"; + value: Token; + } + | { + type: "color"; + value: CssColor; + } + | { + type: "unresolved-color"; + value: UnresolvedColor; + } + | { + type: "url"; + value: Url; + } + | { + type: "var"; + value: Variable; + } + | { + type: "env"; + value: EnvironmentVariable; + } + | { + type: "function"; + value: Function; + } + | { + type: "length"; + value: LengthValue; + } + | { + type: "angle"; + value: Angle; + } + | { + type: "time"; + value: Time; + } + | { + type: "resolution"; + value: Resolution; + } + | { + type: "dashed-ident"; + value: String; + } + | { + type: "animation-name"; + value: AnimationName; + }; +/** + * A raw CSS token. + */ +export type Token = + | { + type: "ident"; + value: String; + } + | { + type: "at-keyword"; + value: String; + } + | { + type: "hash"; + value: String; + } + | { + type: "id-hash"; + value: String; + } + | { + type: "string"; + value: String; + } + | { + type: "unquoted-url"; + value: String; + } + | { + type: "delim"; + value: string; + } + | { + type: "number"; + /** + * The value as a float + */ + value: number; + } + | { + type: "percentage"; + /** + * The value as a float, divided by 100 so that the nominal range is 0.0 to 1.0. + */ + value: number; + } + | { + type: "dimension"; + /** + * The unit, e.g. "px" in `12px` + */ + unit: String; + /** + * The value as a float + */ + value: number; + } + | { + type: "white-space"; + value: String; + } + | { + type: "comment"; + value: String; + } + | { + type: "colon"; + } + | { + type: "semicolon"; + } + | { + type: "comma"; + } + | { + type: "include-match"; + } + | { + type: "dash-match"; + } + | { + type: "prefix-match"; + } + | { + type: "suffix-match"; + } + | { + type: "substring-match"; + } + | { + type: "cdo"; + } + | { + type: "cdc"; + } + | { + type: "function"; + value: String; + } + | { + type: "parenthesis-block"; + } + | { + type: "square-bracket-block"; + } + | { + type: "curly-bracket-block"; + } + | { + type: "bad-url"; + value: String; + } + | { + type: "bad-string"; + value: String; + } + | { + type: "close-parenthesis"; + } + | { + type: "close-square-bracket"; + } + | { + type: "close-curly-bracket"; + }; +/** + * A CSS [``](https://www.w3.org/TR/css-color-4/#color-type) value. + * + * CSS supports many different color spaces to represent colors. The most common values are stored as RGBA using a single byte per component. Less common values are stored using a `Box` to reduce the amount of memory used per color. + * + * Each color space is represented as a struct that implements the `From` and `Into` traits for all other color spaces, so it is possible to convert between color spaces easily. In addition, colors support [interpolation](#method.interpolate) as in the `color-mix()` function. + */ +export type CssColor = CurrentColor | RGBColor | LABColor | PredefinedColor | FloatColor | LightDark | SystemColor; +export type CurrentColor = { + type: "currentcolor"; +}; +export type RGBColor = { + /** + * The alpha component. + */ + alpha: number; + /** + * The blue component. + */ + b: number; + /** + * The green component. + */ + g: number; + /** + * The red component. + */ + r: number; + type: "rgb"; +}; +/** + * A color in a LAB color space, including the `lab()`, `lch()`, `oklab()`, and `oklch()` functions. + */ +export type LABColor = + | { + /** + * The a component. + */ + a: number; + /** + * The alpha component. + */ + alpha: number; + /** + * The b component. + */ + b: number; + /** + * The lightness component. + */ + l: number; + type: "lab"; + } + | { + /** + * The alpha component. + */ + alpha: number; + /** + * The chroma component. + */ + c: number; + /** + * The hue component. + */ + h: number; + /** + * The lightness component. + */ + l: number; + type: "lch"; + } + | { + /** + * The a component. + */ + a: number; + /** + * The alpha component. + */ + alpha: number; + /** + * The b component. + */ + b: number; + /** + * The lightness component. + */ + l: number; + type: "oklab"; + } + | { + /** + * The alpha component. + */ + alpha: number; + /** + * The chroma component. + */ + c: number; + /** + * The hue component. + */ + h: number; + /** + * The lightness component. + */ + l: number; + type: "oklch"; + }; +/** + * A color in a predefined color space, e.g. `display-p3`. + */ +export type PredefinedColor = + | { + /** + * The alpha component. + */ + alpha: number; + /** + * The blue component. + */ + b: number; + /** + * The green component. + */ + g: number; + /** + * The red component. + */ + r: number; + type: "srgb"; + } + | { + /** + * The alpha component. + */ + alpha: number; + /** + * The blue component. + */ + b: number; + /** + * The green component. + */ + g: number; + /** + * The red component. + */ + r: number; + type: "srgb-linear"; + } + | { + /** + * The alpha component. + */ + alpha: number; + /** + * The blue component. + */ + b: number; + /** + * The green component. + */ + g: number; + /** + * The red component. + */ + r: number; + type: "display-p3"; + } + | { + /** + * The alpha component. + */ + alpha: number; + /** + * The blue component. + */ + b: number; + /** + * The green component. + */ + g: number; + /** + * The red component. + */ + r: number; + type: "a98-rgb"; + } + | { + /** + * The alpha component. + */ + alpha: number; + /** + * The blue component. + */ + b: number; + /** + * The green component. + */ + g: number; + /** + * The red component. + */ + r: number; + type: "prophoto-rgb"; + } + | { + /** + * The alpha component. + */ + alpha: number; + /** + * The blue component. + */ + b: number; + /** + * The green component. + */ + g: number; + /** + * The red component. + */ + r: number; + type: "rec2020"; + } + | { + /** + * The alpha component. + */ + alpha: number; + type: "xyz-d50"; + /** + * The x component. + */ + x: number; + /** + * The y component. + */ + y: number; + /** + * The z component. + */ + z: number; + } + | { + /** + * The alpha component. + */ + alpha: number; + type: "xyz-d65"; + /** + * The x component. + */ + x: number; + /** + * The y component. + */ + y: number; + /** + * The z component. + */ + z: number; + }; +/** + * A floating point representation of color types that are usually stored as RGBA. These are used when there are any `none` components, which are represented as NaN. + */ +export type FloatColor = + | { + /** + * The alpha component. + */ + alpha: number; + /** + * The blue component. + */ + b: number; + /** + * The green component. + */ + g: number; + /** + * The red component. + */ + r: number; + type: "rgb"; + } + | { + /** + * The alpha component. + */ + alpha: number; + /** + * The hue component. + */ + h: number; + /** + * The lightness component. + */ + l: number; + /** + * The saturation component. + */ + s: number; + type: "hsl"; + } + | { + /** + * The alpha component. + */ + alpha: number; + /** + * The blackness component. + */ + b: number; + /** + * The hue component. + */ + h: number; + type: "hwb"; + /** + * The whiteness component. + */ + w: number; + }; +export type LightDark = { + dark: CssColor; + light: CssColor; + type: "light-dark"; +}; +/** + * A CSS [system color](https://drafts.csswg.org/css-color/#css-system-colors) keyword. + */ +export type SystemColor = + | "accentcolor" + | "accentcolortext" + | "activetext" + | "buttonborder" + | "buttonface" + | "buttontext" + | "canvas" + | "canvastext" + | "field" + | "fieldtext" + | "graytext" + | "highlight" + | "highlighttext" + | "linktext" + | "mark" + | "marktext" + | "selecteditem" + | "selecteditemtext" + | "visitedtext" + | "activeborder" + | "activecaption" + | "appworkspace" + | "background" + | "buttonhighlight" + | "buttonshadow" + | "captiontext" + | "inactiveborder" + | "inactivecaption" + | "inactivecaptiontext" + | "infobackground" + | "infotext" + | "menu" + | "menutext" + | "scrollbar" + | "threeddarkshadow" + | "threedface" + | "threedhighlight" + | "threedlightshadow" + | "threedshadow" + | "window" + | "windowframe" + | "windowtext"; +/** + * A color value with an unresolved alpha value (e.g. a variable). These can be converted from the modern slash syntax to older comma syntax. This can only be done when the only unresolved component is the alpha since variables can resolve to multiple tokens. + */ +export type UnresolvedColor = + | { + /** + * The unresolved alpha component. + */ + alpha: TokenOrValue[]; + /** + * The blue component. + */ + b: number; + /** + * The green component. + */ + g: number; + /** + * The red component. + */ + r: number; + type: "rgb"; + } + | { + /** + * The unresolved alpha component. + */ + alpha: TokenOrValue[]; + /** + * The hue component. + */ + h: number; + /** + * The lightness component. + */ + l: number; + /** + * The saturation component. + */ + s: number; + type: "hsl"; + } + | { + /** + * The dark value. + */ + dark: TokenOrValue[]; + /** + * The light value. + */ + light: TokenOrValue[]; + type: "light-dark"; + }; +/** + * Defines where the class names referenced in the `composes` property are located. + * + * See [Composes](Composes). + */ +export type Specifier = + | { + type: "global"; + } + | { + type: "file"; + value: String; + } + | { + type: "source-index"; + value: number; + }; +/** + * A CSS [``](https://www.w3.org/TR/css-values-4/#angles) value. + * + * Angles may be explicit or computed by `calc()`, but are always stored and serialized as their computed value. + */ +export type Angle = + | { + type: "deg"; + value: number; + } + | { + type: "rad"; + value: number; + } + | { + type: "grad"; + value: number; + } + | { + type: "turn"; + value: number; + }; +/** + * A CSS [`