From 16c948649867a21babc65673c77b21c92b06f8da Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Sat, 20 Apr 2024 15:06:00 +0000 Subject: [PATCH] deploy files --- .../{1440_985-505dc5db.png => 1440_985.png} | Bin assets/{ASPER-49e5ec4a.png => ASPER.png} | Bin ...aac.png => AWS_logo_white_v2-1024x612.png} | Bin .../AnimatedButton.jpg | Bin ...e-3a7b541a.png => Auth0_by_Okta_White.png} | Bin assets/Box.gif | Bin 0 -> 364 bytes Button.png => assets/Button.png | Bin ...Techies-fdb97384.png => CampusTechies.png} | Bin .../{DDC_Logo-40ec3c61.png => DDC_Logo.png} | Bin .../{Devfolio-88f610a1.svg => Devfolio.svg} | 0 assets/ETHIndia.png | Bin 0 -> 8012 bytes ...FastRoller-bc26e3dc.gif => FastRoller.gif} | Bin .../{Filecoin-ff8b0181.svg => Filecoin.svg} | 0 ...ite-f53b383c.png => GitHub_Logo_White.png} | Bin ...6ee1937.png => Hack_Unicorn_Club_Logo.png} | Bin ...tlin_logo-9cc98145.png => Kotlin_logo.png} | Bin .../{NewRoller-89b11e8a.gif => NewRoller.gif} | Bin assets/{Polygon-49522c6d.svg => Polygon.svg} | 0 assets/{Replit-1ee11cfb.svg => Replit.svg} | 0 assets/Skull.gif | Bin 0 -> 923 bytes ...SlowRoller-f88f8d18.gif => SlowRoller.gif} | Bin assets/Social3-Logo_on_White_blue.svg | 61 + assets/Social3-Logo_on_White_pur.svg | 26 + assets/{Solana-793e8952.svg => Solana.svg} | 0 ...o cp-a6f4779d.png => Zetapass logo cp.png} | Bin assets/asset (1).svg | 13 + assets/auth0.svg | 49 + assets/autho_white.png | Bin 0 -> 9746 bytes assets/avatars/aayushi.png | Bin 0 -> 45600 bytes assets/avatars/akshita.png | Bin 0 -> 46028 bytes assets/avatars/ayush.png | Bin 0 -> 33450 bytes assets/avatars/hamdaan.png | Bin 0 -> 35746 bytes assets/avatars/oindrila.png | Bin 0 -> 39399 bytes assets/avatars/sagar.png | Bin 0 -> 34262 bytes assets/avatars/vishal.png | Bin 0 -> 40752 bytes .../{blue_add-0e80fced.svg => blue_add.svg} | 0 assets/borders.svg | 4 + ...rd_border-055fab2a.png => card_border.png} | Bin assets/chalice.png | Bin 0 -> 2111 bytes assets/cp-08f5a905.css | 1 - assets/cp-17341f2c.js | 3 - .../{d_border-dd8d4fd3.svg => d_border.svg} | 0 assets/d_t_border.svg | 3 + ...vsdungeon-6c3eb695.svg => devsdungeon.svg} | 0 assets/dotted-box.svg | 170 + assets/dotted_borders.svg | 47 + ...2-b4574401.png => echo3D_brand_logo_2.png} | Bin assets/edugraph-og-image.png | Bin 0 -> 21381 bytes assets/edugraph-og.png | Bin 0 -> 17669 bytes assets/{eduhub-abe05838.png => eduhub.png} | Bin .../favicon.ico} | Bin assets/flyingComputer.gif | Bin 0 -> 2518 bytes assets/{footer-5a07628a.png => footer.png} | Bin ...b cp-891bd71e.png => frontend Club cp.png} | Bin assets/{gdg kol-91876630.png => gdg kol.png} | Bin ...c logo-2524e40c.png => gdsc kgec logo.png} | Bin ...ogo-cd292579.png => iiit_kalyani_logo.png} | Bin assets/images/discord_logo.png | Bin 0 -> 1207 bytes assets/images/insta_logo.png | Bin 0 -> 2227 bytes assets/images/linkedin_logo.png | Bin 0 -> 1360 bytes assets/images/tech_logo.png | Bin 0 -> 3638 bytes assets/images/tier1.png | Bin 0 -> 2761 bytes assets/images/tier2.png | Bin 0 -> 2861 bytes assets/images/tier3.png | Bin 0 -> 2904 bytes assets/images/tier4.png | Bin 0 -> 2834 bytes assets/images/twitter_logo.png | Bin 0 -> 1591 bytes assets/index-9868bc17.css | 1 - ...iupgz4ve 1-2aa14036.png => iupgz4ve 1.png} | Bin assets/{jina-85da331a.png => jina.png} | Bin ...l_d_border-7d597197.svg => l_d_border.svg} | 0 ...l_g_border-444f9075.svg => l_g_border.svg} | 0 assets/l_h_border.svg | 7 + ...l_m_border-c9ab541e.svg => l_m_border.svg} | 0 ...l_p_border-b5b252e6.svg => l_p_border.svg} | 0 ...l_s_border-2cd8d94c.svg => l_s_border.svg} | 0 assets/ladder.png | Bin 0 -> 987 bytes assets/laddermobile.png | Bin 0 -> 1881 bytes .../{left_key-2ad608af.svg => left_key.svg} | 0 assets/linkedin_pixel_logo_icon_181925 1.png | Bin 0 -> 656 bytes assets/main-5a0e1c25.js | 1 - assets/{mascot-9cf2466a.gif => mascot.gif} | Bin ...-white-74b961d7.svg => mlh-logo-white.svg} | 0 ...orange_add-dd2a9cfe.svg => orange_add.svg} | 0 .../{ph guild-6285d464.png => ph guild.png} | Bin .../{pink_add-112d7d41.svg => pink_add.svg} | 0 assets/{postman-2f2ccaee.svg => postman.svg} | 0 .../{preloader-db1393e0.gif => preloader.gif} | Bin ...purple_add-92002ffa.svg => purple_add.svg} | 0 ...r_g_border-8e6a00b9.svg => r_g_border.svg} | 0 assets/r_h_border.svg | 7 + ...r_m_border-19f64874.svg => r_m_border.svg} | 0 ...r_p_border-c96764d5.svg => r_p_border.svg} | 0 ...r_s_border-b735965e.svg => r_s_border.svg} | 0 assets/{red_add-5e4845fe.svg => red_add.svg} | 0 .../{right_key-599b096e.svg => right_key.svg} | 0 assets/start.gif | Bin 0 -> 43649 bytes ...e-icon-8d639348.svg => terminate-icon.svg} | 0 ...ks_auth0-0d6005d9.png => tracks_auth0.png} | Bin ...ack-416e3678.png => tracks_auth0_back.png} | Bin ...e-363b102e.png => tracks_auth0_mobile.png} | Bin ...resher-06a87e97.png => tracks_fresher.png} | Bin ...k-3317338f.png => tracks_fresher_back.png} | Bin ..._github-5eb60d75.png => tracks_github.png} | Bin ...ck-981ed7b8.png => tracks_github_back.png} | Bin ...-9938e4d7.png => tracks_github_mobile.png} | Bin ...odaddy-43de5481.png => tracks_godaddy.png} | Bin ...k-1a81f32c.png => tracks_godaddy_back.png} | Bin ...07d5b203.png => tracks_godaddy_mobile.png} | Bin ...dware-82edd0e3.png => tracks_hardware.png} | Bin ...-6e2e916b.png => tracks_hardware_back.png} | Bin ...orks-8cbcbdc8.png => tracks_mathworks.png} | Bin ...12b994f4.png => tracks_mathworks_back.png} | Bin ...b59190.png => tracks_mathworks_mobile.png} | Bin ...ongodb-cb4aa5a7.png => tracks_mongodb.png} | Bin ...k-81332911.png => tracks_mongodb_back.png} | Bin ...7a6670e7.png => tracks_mongodb_mobile.png} | Bin ...ostman-c6800b99.png => tracks_postman.png} | Bin ...k-0e850092.png => tracks_postman_back.png} | Bin ...44a1da9f.png => tracks_postman_mobile.png} | Bin ...mlit-a8f886eb.png => tracks_streamlit.png} | Bin ...1508cedc.png => tracks_streamlit_back.png} | Bin ...af7.png => tracks_streamlit_mobilepng.png} | Bin ..._bronze-770ae1d8.png => trophy_bronze.png} | Bin ...ck-ebfb6a1a.png => trophy_bronze_back.png} | Bin ...ophy_gold-90423f7b.png => trophy_gold.png} | Bin ...back-c7b1666e.png => trophy_gold_back.png} | Bin ..._silver-734c74f4.png => trophy_silver.png} | Bin ...ck-f0c78ead.png => trophy_silver_back.png} | Bin assets/trophy_tracks.png | Bin 0 -> 59143 bytes assets/trophy_tracks_back.png | Bin 0 -> 28733 bytes assets/twitter_pixel_logo_icon_181924 1.png | Bin 0 -> 784 bytes ...g 1000-bdd28daa.png => zeeve png 1000.png} | Bin challenges/assets/1440_985.png | Bin 0 -> 91698 bytes .../assets/AWS_logo_white_v2-1024x612.png | Bin 0 -> 207077 bytes .../assets/AnimatedButton.jpg | Bin challenges/assets/Auth0_by_Okta_White.png | Bin 0 -> 22194 bytes challenges/assets/Box.gif | Bin 0 -> 364 bytes challenges/assets/Button.png | Bin 0 -> 6949 bytes challenges/assets/Devfolio.svg | 17 + challenges/assets/FastRoller.gif | Bin 0 -> 199271 bytes challenges/assets/Filecoin.svg | 5 + challenges/assets/GitHub_Logo_White.png | Bin 0 -> 31120 bytes challenges/assets/NewRoller.gif | Bin 0 -> 210715 bytes challenges/assets/Polygon.svg | 10 + challenges/assets/Replit.svg | 17 + challenges/assets/Skull.gif | Bin 0 -> 923 bytes challenges/assets/SlowRoller.gif | Bin 0 -> 83506 bytes challenges/assets/Solana.svg | 24 + challenges/assets/asset (1).svg | 13 + challenges/assets/auth0.svg | 49 + challenges/assets/autho_white.png | Bin 0 -> 9746 bytes challenges/assets/avatars/aayushi.png | Bin 0 -> 45600 bytes challenges/assets/avatars/akshita.png | Bin 0 -> 46028 bytes challenges/assets/avatars/ayush.png | Bin 0 -> 33450 bytes challenges/assets/avatars/hamdaan.png | Bin 0 -> 35746 bytes challenges/assets/avatars/oindrila.png | Bin 0 -> 39399 bytes challenges/assets/avatars/sagar.png | Bin 0 -> 34262 bytes challenges/assets/avatars/vishal.png | Bin 0 -> 40752 bytes challenges/assets/blue_add.svg | 21 + challenges/assets/borders.svg | 4 + challenges/assets/card_border.png | Bin 0 -> 13438 bytes challenges/assets/chalice.png | Bin 0 -> 2111 bytes challenges/assets/d_border.svg | 7 + challenges/assets/d_t_border.svg | 3 + challenges/assets/devsdungeon.svg | 9 + challenges/assets/dotted-box.svg | 170 + challenges/assets/dotted_borders.svg | 47 + challenges/assets/echo3D_brand_logo_2.png | Bin 0 -> 22301 bytes challenges/assets/favicon_io/favicon.ico | Bin 0 -> 15406 bytes challenges/assets/flyingComputer.gif | Bin 0 -> 2518 bytes challenges/assets/footer.png | Bin 0 -> 22767 bytes challenges/assets/images/discord_logo.png | Bin 0 -> 1207 bytes challenges/assets/images/insta_logo.png | Bin 0 -> 2227 bytes challenges/assets/images/linkedin_logo.png | Bin 0 -> 1360 bytes challenges/assets/images/tech_logo.png | Bin 0 -> 3638 bytes challenges/assets/images/tier1.png | Bin 0 -> 2761 bytes challenges/assets/images/tier2.png | Bin 0 -> 2861 bytes challenges/assets/images/tier3.png | Bin 0 -> 2904 bytes challenges/assets/images/tier4.png | Bin 0 -> 2834 bytes challenges/assets/images/twitter_logo.png | Bin 0 -> 1591 bytes challenges/assets/iupgz4ve 1.png | Bin 0 -> 123552 bytes challenges/assets/jina.png | Bin 0 -> 8148 bytes challenges/assets/l_d_border.svg | 7 + challenges/assets/l_g_border.svg | 7 + challenges/assets/l_p_border.svg | 7 + challenges/assets/l_s_border.svg | 7 + challenges/assets/ladder.png | Bin 0 -> 987 bytes challenges/assets/laddermobile.png | Bin 0 -> 1881 bytes challenges/assets/left_key.svg | 7 + .../linkedin_pixel_logo_icon_181925 1.png | Bin 0 -> 656 bytes challenges/assets/mascot.gif | Bin 0 -> 924464 bytes challenges/assets/mlh-logo-white.svg | 38 + challenges/assets/orange_add.svg | 21 + challenges/assets/pink_add.svg | 21 + challenges/assets/preloader.gif | Bin 0 -> 32786 bytes challenges/assets/purple_add.svg | 21 + challenges/assets/r_g_border.svg | 7 + challenges/assets/r_p_border.svg | 7 + challenges/assets/r_s_border.svg | 7 + challenges/assets/red_add.svg | 21 + challenges/assets/right_key.svg | 7 + challenges/assets/start.gif | Bin 0 -> 43649 bytes challenges/assets/terminate-icon.svg | 3 + challenges/assets/trophy_bronze.png | Bin 0 -> 2821 bytes challenges/assets/trophy_gold.png | Bin 0 -> 2665 bytes challenges/assets/trophy_silver.png | Bin 0 -> 2804 bytes .../twitter_pixel_logo_icon_181924 1.png | Bin 0 -> 784 bytes challenges/index.html | 45 +- challenges/style.css | 805 ++ cp.html | 38 +- index.html | 815 +- node_modules/.bin/atob | 1 - node_modules/.bin/live-server | 1 - node_modules/.bin/mime | 1 - node_modules/.bin/uuid | 1 - node_modules/.package-lock.json | 2076 ---- node_modules/accepts/HISTORY.md | 243 - node_modules/accepts/LICENSE | 23 - node_modules/accepts/README.md | 140 - node_modules/accepts/index.js | 238 - node_modules/accepts/package.json | 47 - node_modules/anymatch/LICENSE | 15 - node_modules/anymatch/README.md | 99 - node_modules/anymatch/index.js | 67 - .../node_modules/normalize-path/LICENSE | 21 - .../node_modules/normalize-path/README.md | 92 - .../node_modules/normalize-path/index.js | 19 - .../node_modules/normalize-path/package.json | 78 - node_modules/anymatch/package.json | 47 - node_modules/apache-crypt/LICENSE | 20 - node_modules/apache-crypt/README.md | 43 - node_modules/apache-crypt/package.json | 53 - node_modules/apache-crypt/src/index.js | 20 - node_modules/apache-md5/LICENSE | 20 - node_modules/apache-md5/README.md | 43 - node_modules/apache-md5/package.json | 51 - node_modules/apache-md5/src/apache-md5.d.ts | 4 - node_modules/apache-md5/src/index.js | 148 - node_modules/arr-diff/LICENSE | 21 - node_modules/arr-diff/README.md | 130 - node_modules/arr-diff/index.js | 47 - node_modules/arr-diff/package.json | 69 - node_modules/arr-flatten/LICENSE | 21 - node_modules/arr-flatten/README.md | 86 - node_modules/arr-flatten/index.js | 22 - node_modules/arr-flatten/package.json | 76 - node_modules/arr-union/LICENSE | 21 - node_modules/arr-union/README.md | 99 - node_modules/arr-union/index.js | 29 - node_modules/arr-union/package.json | 76 - node_modules/array-unique/LICENSE | 21 - node_modules/array-unique/README.md | 77 - node_modules/array-unique/index.js | 43 - node_modules/array-unique/package.json | 62 - node_modules/assign-symbols/LICENSE | 21 - node_modules/assign-symbols/README.md | 73 - node_modules/assign-symbols/index.js | 40 - node_modules/assign-symbols/package.json | 40 - node_modules/async-each/LICENSE | 21 - node_modules/async-each/README.md | 35 - node_modules/async-each/index.js | 39 - node_modules/async-each/package.json | 38 - node_modules/atob/LICENSE | 230 - node_modules/atob/LICENSE.DOCS | 319 - node_modules/atob/README.md | 49 - node_modules/atob/bin/atob.js | 6 - node_modules/atob/bower.json | 24 - node_modules/atob/browser-atob.js | 44 - node_modules/atob/node-atob.js | 7 - node_modules/atob/package.json | 24 - node_modules/atob/test.js | 18 - node_modules/base/LICENSE | 21 - node_modules/base/README.md | 491 - node_modules/base/index.js | 435 - .../base/node_modules/define-property/LICENSE | 21 - .../node_modules/define-property/README.md | 95 - .../node_modules/define-property/index.js | 31 - .../node_modules/define-property/package.json | 62 - node_modules/base/package.json | 111 - node_modules/basic-auth/HISTORY.md | 52 - node_modules/basic-auth/LICENSE | 24 - node_modules/basic-auth/README.md | 113 - node_modules/basic-auth/index.js | 133 - node_modules/basic-auth/package.json | 41 - node_modules/batch/.npmignore | 4 - node_modules/batch/History.md | 93 - node_modules/batch/LICENSE | 22 - node_modules/batch/Makefile | 6 - node_modules/batch/Readme.md | 53 - node_modules/batch/component.json | 14 - node_modules/batch/index.js | 173 - node_modules/batch/package.json | 19 - node_modules/bcryptjs/.npmignore | 6 - node_modules/bcryptjs/.travis.yml | 18 - node_modules/bcryptjs/.vscode/settings.json | 3 - node_modules/bcryptjs/LICENSE | 50 - node_modules/bcryptjs/README.md | 251 - node_modules/bcryptjs/bin/bcrypt | 25 - node_modules/bcryptjs/bower.json | 22 - node_modules/bcryptjs/dist/README.md | 15 - node_modules/bcryptjs/dist/bcrypt.js | 1379 --- node_modules/bcryptjs/dist/bcrypt.min.js | 48 - node_modules/bcryptjs/dist/bcrypt.min.js.gz | Bin 9443 -> 0 bytes node_modules/bcryptjs/dist/bcrypt.min.map | 8 - node_modules/bcryptjs/externs/bcrypt.js | 91 - node_modules/bcryptjs/externs/minimal-env.js | 98 - node_modules/bcryptjs/index.js | 29 - node_modules/bcryptjs/package.json | 47 - node_modules/bcryptjs/scripts/build.js | 37 - node_modules/bcryptjs/src/bcrypt.js | 327 - node_modules/bcryptjs/src/bcrypt/impl.js | 669 -- .../bcryptjs/src/bcrypt/prng/README.md | 5 - .../bcryptjs/src/bcrypt/prng/accum.js | 133 - .../bcryptjs/src/bcrypt/prng/isaac.js | 140 - node_modules/bcryptjs/src/bcrypt/util.js | 33 - .../bcryptjs/src/bcrypt/util/base64.js | 115 - node_modules/bcryptjs/src/bower.json | 22 - node_modules/bcryptjs/src/wrap.js | 50 - node_modules/bcryptjs/tests/quickbrown.txt | 150 - node_modules/bcryptjs/tests/suite.js | 197 - .../binary-extensions/binary-extensions.json | 252 - node_modules/binary-extensions/license | 9 - node_modules/binary-extensions/package.json | 36 - node_modules/binary-extensions/readme.md | 33 - node_modules/braces/LICENSE | 21 - node_modules/braces/README.md | 640 -- node_modules/braces/index.js | 318 - node_modules/braces/lib/braces.js | 104 - node_modules/braces/lib/compilers.js | 282 - node_modules/braces/lib/parsers.js | 360 - node_modules/braces/lib/utils.js | 343 - node_modules/braces/package.json | 108 - node_modules/cache-base/LICENSE | 21 - node_modules/cache-base/README.md | 291 - node_modules/cache-base/index.js | 261 - node_modules/cache-base/package.json | 82 - node_modules/chokidar/CHANGELOG.md | 317 - node_modules/chokidar/README.md | 294 - node_modules/chokidar/index.js | 747 -- node_modules/chokidar/lib/fsevents-handler.js | 412 - node_modules/chokidar/lib/nodefs-handler.js | 506 - node_modules/chokidar/package.json | 63 - node_modules/chokidar/types/index.d.ts | 191 - node_modules/class-utils/LICENSE | 21 - node_modules/class-utils/README.md | 300 - node_modules/class-utils/index.js | 370 - .../node_modules/define-property/LICENSE | 21 - .../node_modules/define-property/README.md | 77 - .../node_modules/define-property/index.js | 31 - .../node_modules/define-property/package.json | 51 - .../is-accessor-descriptor/LICENSE | 21 - .../is-accessor-descriptor/README.md | 123 - .../is-accessor-descriptor/index.js | 69 - .../is-accessor-descriptor/package.json | 61 - .../node_modules/is-data-descriptor/LICENSE | 21 - .../node_modules/is-data-descriptor/README.md | 128 - .../node_modules/is-data-descriptor/index.js | 55 - .../is-data-descriptor/package.json | 60 - .../node_modules/is-descriptor/LICENSE | 21 - .../node_modules/is-descriptor/README.md | 193 - .../node_modules/is-descriptor/index.js | 22 - .../node_modules/kind-of/LICENSE | 21 - .../node_modules/kind-of/README.md | 342 - .../node_modules/kind-of/index.js | 147 - .../node_modules/kind-of/package.json | 91 - .../node_modules/is-descriptor/package.json | 75 - node_modules/class-utils/package.json | 90 - node_modules/collection-visit/LICENSE | 21 - node_modules/collection-visit/README.md | 89 - node_modules/collection-visit/index.js | 30 - node_modules/collection-visit/package.json | 76 - node_modules/colors/LICENSE | 25 - node_modules/colors/README.md | 221 - node_modules/colors/examples/normal-usage.js | 82 - node_modules/colors/examples/safe-string.js | 79 - node_modules/colors/index.d.ts | 136 - node_modules/colors/lib/colors.js | 211 - node_modules/colors/lib/custom/trap.js | 46 - node_modules/colors/lib/custom/zalgo.js | 110 - .../colors/lib/extendStringPrototype.js | 110 - node_modules/colors/lib/index.js | 13 - node_modules/colors/lib/maps/america.js | 10 - node_modules/colors/lib/maps/rainbow.js | 12 - node_modules/colors/lib/maps/random.js | 11 - node_modules/colors/lib/maps/zebra.js | 5 - node_modules/colors/lib/styles.js | 95 - node_modules/colors/lib/system/has-flag.js | 35 - .../colors/lib/system/supports-colors.js | 151 - node_modules/colors/package.json | 45 - node_modules/colors/safe.d.ts | 48 - node_modules/colors/safe.js | 10 - node_modules/colors/themes/generic-logging.js | 12 - node_modules/component-emitter/History.md | 75 - node_modules/component-emitter/LICENSE | 24 - node_modules/component-emitter/Readme.md | 74 - node_modules/component-emitter/index.js | 175 - node_modules/component-emitter/package.json | 27 - node_modules/connect/HISTORY.md | 2503 ----- node_modules/connect/LICENSE | 25 - node_modules/connect/README.md | 295 - node_modules/connect/SECURITY.md | 43 - node_modules/connect/index.js | 279 - node_modules/connect/package.json | 48 - node_modules/copy-descriptor/LICENSE | 21 - node_modules/copy-descriptor/index.js | 81 - node_modules/copy-descriptor/package.json | 56 - node_modules/core-util-is/LICENSE | 19 - node_modules/core-util-is/README.md | 3 - node_modules/core-util-is/lib/util.js | 107 - node_modules/core-util-is/package.json | 38 - node_modules/cors/CONTRIBUTING.md | 33 - node_modules/cors/HISTORY.md | 58 - node_modules/cors/LICENSE | 22 - node_modules/cors/README.md | 243 - node_modules/cors/lib/index.js | 238 - node_modules/cors/package.json | 41 - node_modules/debug/.coveralls.yml | 1 - node_modules/debug/.eslintrc | 11 - node_modules/debug/.npmignore | 9 - node_modules/debug/.travis.yml | 14 - node_modules/debug/CHANGELOG.md | 362 - node_modules/debug/LICENSE | 19 - node_modules/debug/Makefile | 50 - node_modules/debug/README.md | 312 - node_modules/debug/component.json | 19 - node_modules/debug/karma.conf.js | 70 - node_modules/debug/node.js | 1 - node_modules/debug/package.json | 49 - node_modules/debug/src/browser.js | 185 - node_modules/debug/src/debug.js | 202 - node_modules/debug/src/index.js | 10 - node_modules/debug/src/inspector-log.js | 15 - node_modules/debug/src/node.js | 248 - node_modules/decode-uri-component/index.js | 94 - node_modules/decode-uri-component/license | 9 - .../decode-uri-component/package.json | 37 - node_modules/decode-uri-component/readme.md | 83 - node_modules/define-property/CHANGELOG.md | 82 - node_modules/define-property/LICENSE | 21 - node_modules/define-property/README.md | 117 - node_modules/define-property/index.js | 38 - node_modules/define-property/package.json | 67 - node_modules/depd/History.md | 103 - node_modules/depd/LICENSE | 22 - node_modules/depd/Readme.md | 280 - node_modules/depd/index.js | 538 -- node_modules/depd/lib/browser/index.js | 77 - node_modules/depd/package.json | 45 - node_modules/destroy/LICENSE | 23 - node_modules/destroy/README.md | 63 - node_modules/destroy/index.js | 209 - node_modules/destroy/package.json | 48 - node_modules/duplexer/.travis.yml | 6 - node_modules/duplexer/LICENCE | 19 - node_modules/duplexer/README.md | 49 - node_modules/duplexer/index.js | 87 - node_modules/duplexer/package.json | 42 - node_modules/duplexer/test/index.js | 31 - node_modules/ee-first/LICENSE | 22 - node_modules/ee-first/README.md | 80 - node_modules/ee-first/index.js | 95 - node_modules/ee-first/package.json | 29 - node_modules/encodeurl/HISTORY.md | 14 - node_modules/encodeurl/LICENSE | 22 - node_modules/encodeurl/README.md | 128 - node_modules/encodeurl/index.js | 60 - node_modules/encodeurl/package.json | 40 - node_modules/escape-html/LICENSE | 24 - node_modules/escape-html/Readme.md | 43 - node_modules/escape-html/index.js | 78 - node_modules/escape-html/package.json | 24 - node_modules/etag/HISTORY.md | 83 - node_modules/etag/LICENSE | 22 - node_modules/etag/README.md | 159 - node_modules/etag/index.js | 131 - node_modules/etag/package.json | 47 - node_modules/event-stream/.npmignore | 3 - node_modules/event-stream/.travis.yml | 3 - node_modules/event-stream/LICENCE | 24 - node_modules/event-stream/examples/pretty.js | 25 - node_modules/event-stream/index.js | 324 - node_modules/event-stream/package.json | 54 - node_modules/event-stream/readme.markdown | 314 - .../event-stream/test/connect.asynct.js | 86 - .../event-stream/test/helper/index.js | 12 - .../event-stream/test/merge.asynct.js | 29 - .../event-stream/test/parse.asynct.js | 32 - .../event-stream/test/pause.asynct.js | 39 - .../event-stream/test/pipeline.asynct.js | 52 - .../event-stream/test/readArray.asynct.js | 89 - .../event-stream/test/readable.asynct.js | 197 - .../event-stream/test/replace.asynct.js | 76 - .../event-stream/test/simple-map.asynct.js | 343 - node_modules/event-stream/test/spec.asynct.js | 86 - .../event-stream/test/split.asynct.js | 47 - node_modules/event-stream/test/stringify.js | 15 - .../event-stream/test/writeArray.asynct.js | 31 - node_modules/expand-brackets/LICENSE | 21 - node_modules/expand-brackets/README.md | 302 - node_modules/expand-brackets/changelog.md | 35 - node_modules/expand-brackets/index.js | 211 - node_modules/expand-brackets/lib/compilers.js | 87 - node_modules/expand-brackets/lib/parsers.js | 219 - node_modules/expand-brackets/lib/utils.js | 34 - .../node_modules/define-property/LICENSE | 21 - .../node_modules/define-property/README.md | 77 - .../node_modules/define-property/index.js | 31 - .../node_modules/define-property/package.json | 51 - .../is-accessor-descriptor/LICENSE | 21 - .../is-accessor-descriptor/README.md | 123 - .../is-accessor-descriptor/index.js | 69 - .../is-accessor-descriptor/package.json | 61 - .../node_modules/is-data-descriptor/LICENSE | 21 - .../node_modules/is-data-descriptor/README.md | 128 - .../node_modules/is-data-descriptor/index.js | 55 - .../is-data-descriptor/package.json | 60 - .../node_modules/is-descriptor/LICENSE | 21 - .../node_modules/is-descriptor/README.md | 193 - .../node_modules/is-descriptor/index.js | 22 - .../node_modules/kind-of/LICENSE | 21 - .../node_modules/kind-of/README.md | 342 - .../node_modules/kind-of/index.js | 147 - .../node_modules/kind-of/package.json | 91 - .../node_modules/is-descriptor/package.json | 75 - node_modules/expand-brackets/package.json | 85 - node_modules/extend-shallow/LICENSE | 21 - node_modules/extend-shallow/README.md | 61 - node_modules/extend-shallow/index.js | 33 - node_modules/extend-shallow/package.json | 56 - node_modules/extglob/LICENSE | 21 - node_modules/extglob/README.md | 362 - node_modules/extglob/changelog.md | 25 - node_modules/extglob/index.js | 331 - node_modules/extglob/lib/.DS_Store | Bin 6148 -> 0 bytes node_modules/extglob/lib/compilers.js | 169 - node_modules/extglob/lib/extglob.js | 78 - node_modules/extglob/lib/parsers.js | 156 - node_modules/extglob/lib/utils.js | 69 - .../node_modules/define-property/LICENSE | 21 - .../node_modules/define-property/README.md | 95 - .../node_modules/define-property/index.js | 31 - .../node_modules/define-property/package.json | 62 - node_modules/extglob/package.json | 108 - node_modules/faye-websocket/CHANGELOG.md | 139 - node_modules/faye-websocket/LICENSE.md | 12 - node_modules/faye-websocket/README.md | 311 - .../faye-websocket/lib/faye/eventsource.js | 133 - .../faye-websocket/lib/faye/websocket.js | 47 - .../faye-websocket/lib/faye/websocket/api.js | 199 - .../lib/faye/websocket/api/event.js | 22 - .../lib/faye/websocket/api/event_target.js | 30 - .../lib/faye/websocket/client.js | 90 - node_modules/faye-websocket/package.json | 35 - node_modules/fill-range/LICENSE | 21 - node_modules/fill-range/README.md | 250 - node_modules/fill-range/index.js | 208 - node_modules/fill-range/package.json | 82 - node_modules/finalhandler/HISTORY.md | 187 - node_modules/finalhandler/LICENSE | 22 - node_modules/finalhandler/README.md | 148 - node_modules/finalhandler/index.js | 331 - node_modules/finalhandler/package.json | 45 - node_modules/for-in/LICENSE | 21 - node_modules/for-in/README.md | 85 - node_modules/for-in/index.js | 16 - node_modules/for-in/package.json | 68 - node_modules/fragment-cache/LICENSE | 21 - node_modules/fragment-cache/README.md | 156 - node_modules/fragment-cache/index.js | 128 - node_modules/fragment-cache/package.json | 60 - node_modules/fresh/HISTORY.md | 70 - node_modules/fresh/LICENSE | 23 - node_modules/fresh/README.md | 119 - node_modules/fresh/index.js | 137 - node_modules/fresh/package.json | 46 - node_modules/from/.npmignore | 1 - node_modules/from/.travis.yml | 6 - node_modules/from/LICENSE.APACHE2 | 15 - node_modules/from/LICENSE.MIT | 24 - node_modules/from/index.js | 68 - node_modules/from/package.json | 26 - node_modules/from/readme.markdown | 40 - node_modules/from/test/index.js | 210 - node_modules/get-value/LICENSE | 21 - node_modules/get-value/index.js | 50 - node_modules/get-value/package.json | 79 - node_modules/glob-parent/LICENSE | 15 - node_modules/glob-parent/README.md | 109 - node_modules/glob-parent/index.js | 24 - .../glob-parent/node_modules/is-glob/LICENSE | 21 - .../node_modules/is-glob/README.md | 142 - .../glob-parent/node_modules/is-glob/index.js | 25 - .../node_modules/is-glob/package.json | 80 - node_modules/glob-parent/package.json | 42 - node_modules/graceful-fs/LICENSE | 15 - node_modules/graceful-fs/README.md | 143 - node_modules/graceful-fs/clone.js | 23 - node_modules/graceful-fs/graceful-fs.js | 448 - node_modules/graceful-fs/legacy-streams.js | 118 - node_modules/graceful-fs/package.json | 53 - node_modules/graceful-fs/polyfills.js | 355 - node_modules/has-value/LICENSE | 21 - node_modules/has-value/README.md | 149 - node_modules/has-value/index.js | 16 - node_modules/has-value/package.json | 83 - node_modules/has-values/LICENSE | 21 - node_modules/has-values/README.md | 129 - node_modules/has-values/index.js | 60 - .../has-values/node_modules/kind-of/LICENSE | 21 - .../has-values/node_modules/kind-of/README.md | 267 - .../has-values/node_modules/kind-of/index.js | 119 - .../node_modules/kind-of/package.json | 90 - node_modules/has-values/package.json | 82 - node_modules/http-auth/.npmignore | 11 - node_modules/http-auth/LICENSE | 20 - node_modules/http-auth/README.md | 323 - node_modules/http-auth/package.json | 57 - node_modules/http-auth/src/auth/base.js | 150 - node_modules/http-auth/src/auth/basic.js | 110 - node_modules/http-auth/src/auth/digest.js | 197 - node_modules/http-auth/src/auth/utils.js | 43 - node_modules/http-auth/src/http-auth.js | 48 - node_modules/http-auth/src/server/connect.js | 14 - node_modules/http-auth/src/server/hapi.js | 32 - node_modules/http-auth/src/server/http.js | 50 - node_modules/http-auth/src/server/https.js | 48 - node_modules/http-auth/src/server/koa.js | 21 - node_modules/http-auth/src/server/passport.js | 38 - node_modules/http-auth/src/server/proxy.js | 55 - node_modules/http-errors/HISTORY.md | 180 - node_modules/http-errors/LICENSE | 23 - node_modules/http-errors/README.md | 169 - node_modules/http-errors/index.js | 289 - .../node_modules/statuses/HISTORY.md | 82 - .../http-errors/node_modules/statuses/LICENSE | 23 - .../node_modules/statuses/README.md | 136 - .../node_modules/statuses/codes.json | 65 - .../node_modules/statuses/index.js | 146 - .../node_modules/statuses/package.json | 49 - node_modules/http-errors/package.json | 50 - node_modules/http-parser-js/LICENSE.md | 110 - node_modules/http-parser-js/README.md | 43 - node_modules/http-parser-js/http-parser.d.ts | 175 - node_modules/http-parser-js/http-parser.js | 463 - node_modules/http-parser-js/package.json | 30 - node_modules/inherits/LICENSE | 16 - node_modules/inherits/README.md | 42 - node_modules/inherits/inherits.js | 9 - node_modules/inherits/inherits_browser.js | 27 - node_modules/inherits/package.json | 29 - node_modules/is-accessor-descriptor/LICENSE | 21 - node_modules/is-accessor-descriptor/README.md | 144 - node_modules/is-accessor-descriptor/index.js | 69 - .../node_modules/kind-of/CHANGELOG.md | 160 - .../node_modules/kind-of/LICENSE | 21 - .../node_modules/kind-of/README.md | 367 - .../node_modules/kind-of/index.js | 129 - .../node_modules/kind-of/package.json | 88 - .../is-accessor-descriptor/package.json | 73 - node_modules/is-binary-path/index.js | 12 - node_modules/is-binary-path/license | 21 - node_modules/is-binary-path/package.json | 39 - node_modules/is-binary-path/readme.md | 34 - node_modules/is-buffer/LICENSE | 21 - node_modules/is-buffer/README.md | 53 - node_modules/is-buffer/index.js | 21 - node_modules/is-buffer/package.json | 51 - node_modules/is-buffer/test/basic.js | 24 - node_modules/is-data-descriptor/LICENSE | 21 - node_modules/is-data-descriptor/README.md | 161 - node_modules/is-data-descriptor/index.js | 49 - .../node_modules/kind-of/CHANGELOG.md | 160 - .../node_modules/kind-of/LICENSE | 21 - .../node_modules/kind-of/README.md | 367 - .../node_modules/kind-of/index.js | 129 - .../node_modules/kind-of/package.json | 88 - node_modules/is-data-descriptor/package.json | 72 - node_modules/is-descriptor/LICENSE | 21 - node_modules/is-descriptor/README.md | 193 - node_modules/is-descriptor/index.js | 22 - .../node_modules/kind-of/CHANGELOG.md | 160 - .../node_modules/kind-of/LICENSE | 21 - .../node_modules/kind-of/README.md | 367 - .../node_modules/kind-of/index.js | 129 - .../node_modules/kind-of/package.json | 88 - node_modules/is-descriptor/package.json | 75 - node_modules/is-extendable/LICENSE | 21 - node_modules/is-extendable/README.md | 72 - node_modules/is-extendable/index.js | 13 - node_modules/is-extendable/package.json | 51 - node_modules/is-extglob/LICENSE | 21 - node_modules/is-extglob/README.md | 107 - node_modules/is-extglob/index.js | 20 - node_modules/is-extglob/package.json | 69 - node_modules/is-glob/LICENSE | 21 - node_modules/is-glob/README.md | 206 - node_modules/is-glob/index.js | 150 - node_modules/is-glob/package.json | 81 - node_modules/is-number/LICENSE | 21 - node_modules/is-number/README.md | 115 - node_modules/is-number/index.js | 22 - node_modules/is-number/package.json | 83 - node_modules/is-plain-object/LICENSE | 21 - node_modules/is-plain-object/README.md | 104 - node_modules/is-plain-object/index.d.ts | 5 - node_modules/is-plain-object/index.js | 37 - node_modules/is-plain-object/package.json | 79 - node_modules/is-windows/LICENSE | 21 - node_modules/is-windows/README.md | 95 - node_modules/is-windows/index.js | 27 - node_modules/is-windows/package.json | 71 - node_modules/is-wsl/index.js | 25 - node_modules/is-wsl/license | 21 - node_modules/is-wsl/package.json | 40 - node_modules/is-wsl/readme.md | 28 - node_modules/isarray/.npmignore | 1 - node_modules/isarray/.travis.yml | 4 - node_modules/isarray/Makefile | 6 - node_modules/isarray/README.md | 60 - node_modules/isarray/component.json | 19 - node_modules/isarray/index.js | 5 - node_modules/isarray/package.json | 45 - node_modules/isarray/test.js | 20 - node_modules/isobject/LICENSE | 21 - node_modules/isobject/README.md | 122 - node_modules/isobject/index.d.ts | 5 - node_modules/isobject/index.js | 12 - node_modules/isobject/package.json | 74 - node_modules/kind-of/LICENSE | 21 - node_modules/kind-of/README.md | 261 - node_modules/kind-of/index.js | 116 - node_modules/kind-of/package.json | 90 - node_modules/live-server/.editorconfig | 16 - .../live-server/.github/CONTRIBUTING.md | 19 - .../live-server/.github/ISSUE_TEMPLATE.md | 11 - node_modules/live-server/.travis.yml | 5 - node_modules/live-server/README.md | 274 - node_modules/live-server/index.js | 399 - node_modules/live-server/injected.html | 31 - node_modules/live-server/live-server.js | 174 - .../live-server/middleware/example.js | 5 - .../middleware/spa-ignore-assets.js | 14 - node_modules/live-server/middleware/spa.js | 13 - node_modules/live-server/package.json | 66 - node_modules/live-server/test/acceptance.js | 67 - node_modules/live-server/test/cli.js | 65 - .../live-server/test/conf/https.conf.js | 7 - .../live-server/test/conf/server.cert | 21 - node_modules/live-server/test/conf/server.key | 30 - node_modules/live-server/test/cors.js | 42 - .../live-server/test/data/fragment.html | 3 - .../live-server/test/data/htpasswd-test | 1 - .../live-server/test/data/index-caps.htm | 13 - .../live-server/test/data/index-head.html | 8 - node_modules/live-server/test/data/index.html | 12 - .../live-server/test/data/middleware.js | 5 - node_modules/live-server/test/data/style.css | 1 - .../live-server/test/data/sub/sub.html | 10 - node_modules/live-server/test/data/test.svg | 14 - node_modules/live-server/test/htpasswd.js | 28 - node_modules/live-server/test/https.js | 48 - node_modules/live-server/test/middleware.js | 43 - node_modules/live-server/test/mount.js | 30 - node_modules/live-server/test/proxy.js | 28 - node_modules/live-server/test/spa.js | 40 - node_modules/map-cache/LICENSE | 21 - node_modules/map-cache/README.md | 145 - node_modules/map-cache/index.js | 100 - node_modules/map-cache/package.json | 59 - node_modules/map-stream/.npmignore | 3 - node_modules/map-stream/.travis.yml | 4 - node_modules/map-stream/LICENCE | 22 - node_modules/map-stream/examples/pretty.js | 26 - node_modules/map-stream/index.js | 145 - node_modules/map-stream/package.json | 24 - node_modules/map-stream/readme.markdown | 37 - .../map-stream/test/simple-map.asynct.js | 318 - node_modules/map-visit/LICENSE | 21 - node_modules/map-visit/README.md | 155 - node_modules/map-visit/index.js | 37 - node_modules/map-visit/package.json | 74 - node_modules/micromatch/CHANGELOG.md | 37 - node_modules/micromatch/LICENSE | 21 - node_modules/micromatch/README.md | 1150 --- node_modules/micromatch/index.js | 877 -- node_modules/micromatch/lib/.DS_Store | Bin 6148 -> 0 bytes node_modules/micromatch/lib/cache.js | 1 - node_modules/micromatch/lib/compilers.js | 77 - node_modules/micromatch/lib/parsers.js | 83 - node_modules/micromatch/lib/utils.js | 309 - .../node_modules/extend-shallow/LICENSE | 21 - .../node_modules/extend-shallow/README.md | 97 - .../node_modules/extend-shallow/index.js | 60 - .../node_modules/extend-shallow/package.json | 83 - .../node_modules/is-extendable/LICENSE | 21 - .../node_modules/is-extendable/README.md | 88 - .../node_modules/is-extendable/index.d.ts | 5 - .../node_modules/is-extendable/index.js | 14 - .../node_modules/is-extendable/package.json | 67 - .../node_modules/kind-of/CHANGELOG.md | 160 - .../micromatch/node_modules/kind-of/LICENSE | 21 - .../micromatch/node_modules/kind-of/README.md | 367 - .../micromatch/node_modules/kind-of/index.js | 129 - .../node_modules/kind-of/package.json | 88 - node_modules/micromatch/package.json | 147 - node_modules/mime-db/HISTORY.md | 507 - node_modules/mime-db/LICENSE | 23 - node_modules/mime-db/README.md | 100 - node_modules/mime-db/db.json | 8519 ----------------- node_modules/mime-db/index.js | 12 - node_modules/mime-db/package.json | 60 - node_modules/mime-types/HISTORY.md | 397 - node_modules/mime-types/LICENSE | 23 - node_modules/mime-types/README.md | 113 - node_modules/mime-types/index.js | 188 - node_modules/mime-types/package.json | 44 - node_modules/mime/.npmignore | 0 node_modules/mime/CHANGELOG.md | 164 - node_modules/mime/LICENSE | 21 - node_modules/mime/README.md | 90 - node_modules/mime/cli.js | 8 - node_modules/mime/mime.js | 108 - node_modules/mime/package.json | 44 - node_modules/mime/src/build.js | 53 - node_modules/mime/src/test.js | 60 - node_modules/mime/types.json | 1 - node_modules/mixin-deep/LICENSE | 21 - node_modules/mixin-deep/README.md | 80 - node_modules/mixin-deep/index.js | 64 - .../node_modules/is-extendable/LICENSE | 21 - .../node_modules/is-extendable/README.md | 88 - .../node_modules/is-extendable/index.d.ts | 5 - .../node_modules/is-extendable/index.js | 14 - .../node_modules/is-extendable/package.json | 67 - node_modules/mixin-deep/package.json | 65 - node_modules/morgan/HISTORY.md | 215 - node_modules/morgan/LICENSE | 23 - node_modules/morgan/README.md | 417 - node_modules/morgan/index.js | 544 -- node_modules/morgan/package.json | 52 - node_modules/ms/index.js | 152 - node_modules/ms/license.md | 21 - node_modules/ms/package.json | 37 - node_modules/ms/readme.md | 51 - node_modules/nanomatch/CHANGELOG.md | 57 - node_modules/nanomatch/LICENSE | 21 - node_modules/nanomatch/README.md | 1148 --- node_modules/nanomatch/index.js | 838 -- node_modules/nanomatch/lib/cache.js | 1 - node_modules/nanomatch/lib/compilers.js | 339 - node_modules/nanomatch/lib/parsers.js | 386 - node_modules/nanomatch/lib/utils.js | 379 - .../node_modules/extend-shallow/LICENSE | 21 - .../node_modules/extend-shallow/README.md | 97 - .../node_modules/extend-shallow/index.js | 60 - .../node_modules/extend-shallow/package.json | 83 - .../node_modules/is-extendable/LICENSE | 21 - .../node_modules/is-extendable/README.md | 88 - .../node_modules/is-extendable/index.d.ts | 5 - .../node_modules/is-extendable/index.js | 14 - .../node_modules/is-extendable/package.json | 67 - .../node_modules/kind-of/CHANGELOG.md | 160 - .../nanomatch/node_modules/kind-of/LICENSE | 21 - .../nanomatch/node_modules/kind-of/README.md | 367 - .../nanomatch/node_modules/kind-of/index.js | 129 - .../node_modules/kind-of/package.json | 88 - node_modules/nanomatch/package.json | 134 - node_modules/negotiator/HISTORY.md | 108 - node_modules/negotiator/LICENSE | 24 - node_modules/negotiator/README.md | 203 - node_modules/negotiator/index.js | 82 - node_modules/negotiator/lib/charset.js | 169 - node_modules/negotiator/lib/encoding.js | 184 - node_modules/negotiator/lib/language.js | 179 - node_modules/negotiator/lib/mediaType.js | 294 - node_modules/negotiator/package.json | 42 - node_modules/normalize-path/LICENSE | 21 - node_modules/normalize-path/README.md | 127 - node_modules/normalize-path/index.js | 35 - node_modules/normalize-path/package.json | 77 - node_modules/object-assign/index.js | 90 - node_modules/object-assign/license | 21 - node_modules/object-assign/package.json | 42 - node_modules/object-assign/readme.md | 61 - node_modules/object-copy/LICENSE | 21 - node_modules/object-copy/index.js | 174 - .../node_modules/define-property/LICENSE | 21 - .../node_modules/define-property/README.md | 77 - .../node_modules/define-property/index.js | 31 - .../node_modules/define-property/package.json | 51 - .../is-accessor-descriptor/LICENSE | 21 - .../is-accessor-descriptor/README.md | 123 - .../is-accessor-descriptor/index.js | 69 - .../is-accessor-descriptor/package.json | 61 - .../node_modules/is-data-descriptor/LICENSE | 21 - .../node_modules/is-data-descriptor/README.md | 128 - .../node_modules/is-data-descriptor/index.js | 55 - .../is-data-descriptor/package.json | 60 - .../node_modules/is-descriptor/LICENSE | 21 - .../node_modules/is-descriptor/README.md | 193 - .../node_modules/is-descriptor/index.js | 22 - .../node_modules/kind-of/LICENSE | 21 - .../node_modules/kind-of/README.md | 342 - .../node_modules/kind-of/index.js | 147 - .../node_modules/kind-of/package.json | 91 - .../node_modules/is-descriptor/package.json | 75 - node_modules/object-copy/package.json | 47 - node_modules/object-visit/LICENSE | 21 - node_modules/object-visit/README.md | 83 - node_modules/object-visit/index.js | 33 - node_modules/object-visit/package.json | 65 - node_modules/object.pick/LICENSE | 21 - node_modules/object.pick/README.md | 76 - node_modules/object.pick/index.js | 35 - node_modules/object.pick/package.json | 60 - node_modules/on-finished/HISTORY.md | 88 - node_modules/on-finished/LICENSE | 23 - node_modules/on-finished/README.md | 154 - node_modules/on-finished/index.js | 196 - node_modules/on-finished/package.json | 31 - node_modules/on-headers/HISTORY.md | 21 - node_modules/on-headers/LICENSE | 22 - node_modules/on-headers/README.md | 81 - node_modules/on-headers/index.js | 132 - node_modules/on-headers/package.json | 42 - node_modules/opn/index.js | 113 - node_modules/opn/license | 9 - node_modules/opn/package.json | 55 - node_modules/opn/readme.md | 98 - node_modules/opn/xdg-open | 1066 --- node_modules/parseurl/HISTORY.md | 58 - node_modules/parseurl/LICENSE | 24 - node_modules/parseurl/README.md | 133 - node_modules/parseurl/index.js | 158 - node_modules/parseurl/package.json | 40 - node_modules/pascalcase/LICENSE | 21 - node_modules/pascalcase/README.md | 80 - node_modules/pascalcase/index.js | 21 - node_modules/pascalcase/package.json | 46 - node_modules/path-dirname/index.js | 143 - node_modules/path-dirname/license | 22 - node_modules/path-dirname/package.json | 29 - node_modules/path-dirname/readme.md | 53 - node_modules/path-is-absolute/index.js | 20 - node_modules/path-is-absolute/license | 21 - node_modules/path-is-absolute/package.json | 43 - node_modules/path-is-absolute/readme.md | 59 - node_modules/pause-stream/.npmignore | 3 - node_modules/pause-stream/LICENSE | 231 - node_modules/pause-stream/index.js | 3 - node_modules/pause-stream/package.json | 35 - node_modules/pause-stream/readme.markdown | 29 - node_modules/pause-stream/test/index.js | 17 - node_modules/pause-stream/test/pause-end.js | 33 - node_modules/posix-character-classes/LICENSE | 21 - .../posix-character-classes/README.md | 103 - node_modules/posix-character-classes/index.js | 22 - .../posix-character-classes/package.json | 54 - node_modules/process-nextick-args/index.js | 45 - node_modules/process-nextick-args/license.md | 19 - .../process-nextick-args/package.json | 25 - node_modules/process-nextick-args/readme.md | 18 - node_modules/proxy-middleware/.npmignore | 2 - node_modules/proxy-middleware/.travis.yml | 4 - node_modules/proxy-middleware/LICENSE | 23 - node_modules/proxy-middleware/README.md | 40 - node_modules/proxy-middleware/index.js | 141 - node_modules/proxy-middleware/package.json | 31 - node_modules/range-parser/HISTORY.md | 56 - node_modules/range-parser/LICENSE | 23 - node_modules/range-parser/README.md | 84 - node_modules/range-parser/index.js | 162 - node_modules/range-parser/package.json | 44 - node_modules/readable-stream/.travis.yml | 34 - node_modules/readable-stream/CONTRIBUTING.md | 38 - node_modules/readable-stream/GOVERNANCE.md | 136 - node_modules/readable-stream/LICENSE | 47 - node_modules/readable-stream/README.md | 58 - .../doc/wg-meetings/2015-01-30.md | 60 - .../readable-stream/duplex-browser.js | 1 - node_modules/readable-stream/duplex.js | 1 - .../readable-stream/lib/_stream_duplex.js | 131 - .../lib/_stream_passthrough.js | 47 - .../readable-stream/lib/_stream_readable.js | 1019 -- .../readable-stream/lib/_stream_transform.js | 214 - .../readable-stream/lib/_stream_writable.js | 685 -- .../lib/internal/streams/BufferList.js | 78 - .../lib/internal/streams/destroy.js | 84 - .../lib/internal/streams/stream-browser.js | 1 - .../lib/internal/streams/stream.js | 1 - node_modules/readable-stream/package.json | 52 - node_modules/readable-stream/passthrough.js | 1 - .../readable-stream/readable-browser.js | 7 - node_modules/readable-stream/readable.js | 19 - node_modules/readable-stream/transform.js | 1 - .../readable-stream/writable-browser.js | 1 - node_modules/readable-stream/writable.js | 8 - node_modules/readdirp/LICENSE | 20 - node_modules/readdirp/README.md | 204 - node_modules/readdirp/package.json | 50 - node_modules/readdirp/readdirp.js | 294 - node_modules/readdirp/stream-api.js | 98 - node_modules/regex-not/LICENSE | 21 - node_modules/regex-not/README.md | 133 - node_modules/regex-not/index.js | 72 - .../node_modules/extend-shallow/LICENSE | 21 - .../node_modules/extend-shallow/README.md | 97 - .../node_modules/extend-shallow/index.js | 60 - .../node_modules/extend-shallow/package.json | 83 - .../node_modules/is-extendable/LICENSE | 21 - .../node_modules/is-extendable/README.md | 88 - .../node_modules/is-extendable/index.d.ts | 5 - .../node_modules/is-extendable/index.js | 14 - .../node_modules/is-extendable/package.json | 67 - node_modules/regex-not/package.json | 63 - .../remove-trailing-separator/history.md | 17 - .../remove-trailing-separator/index.js | 17 - .../remove-trailing-separator/license | 3 - .../remove-trailing-separator/package.json | 37 - .../remove-trailing-separator/readme.md | 51 - node_modules/repeat-element/LICENSE | 21 - node_modules/repeat-element/README.md | 99 - node_modules/repeat-element/index.js | 22 - node_modules/repeat-element/package.json | 49 - node_modules/repeat-string/LICENSE | 21 - node_modules/repeat-string/README.md | 136 - node_modules/repeat-string/index.js | 70 - node_modules/repeat-string/package.json | 77 - node_modules/resolve-url/.jshintrc | 44 - node_modules/resolve-url/LICENSE | 21 - node_modules/resolve-url/bower.json | 15 - node_modules/resolve-url/changelog.md | 15 - node_modules/resolve-url/component.json | 15 - node_modules/resolve-url/package.json | 34 - node_modules/resolve-url/readme.md | 83 - node_modules/resolve-url/resolve-url.js | 47 - node_modules/resolve-url/test/resolve-url.js | 70 - node_modules/ret/LICENSE | 19 - node_modules/ret/README.md | 183 - node_modules/ret/lib/index.js | 282 - node_modules/ret/lib/positions.js | 17 - node_modules/ret/lib/sets.js | 82 - node_modules/ret/lib/types.js | 10 - node_modules/ret/lib/util.js | 111 - node_modules/ret/package.json | 35 - node_modules/safe-buffer/LICENSE | 21 - node_modules/safe-buffer/README.md | 584 -- node_modules/safe-buffer/index.d.ts | 187 - node_modules/safe-buffer/index.js | 62 - node_modules/safe-buffer/package.json | 37 - node_modules/safe-regex/.travis.yml | 4 - node_modules/safe-regex/LICENSE | 18 - node_modules/safe-regex/example/safe.js | 3 - node_modules/safe-regex/index.js | 43 - node_modules/safe-regex/package.json | 43 - node_modules/safe-regex/readme.markdown | 65 - node_modules/safe-regex/test/regex.js | 50 - node_modules/send/HISTORY.md | 521 - node_modules/send/LICENSE | 23 - node_modules/send/README.md | 327 - node_modules/send/SECURITY.md | 24 - node_modules/send/index.js | 1143 --- node_modules/send/node_modules/ms/index.js | 162 - node_modules/send/node_modules/ms/license.md | 21 - .../send/node_modules/ms/package.json | 38 - node_modules/send/node_modules/ms/readme.md | 59 - .../send/node_modules/on-finished/HISTORY.md | 98 - .../send/node_modules/on-finished/LICENSE | 23 - .../send/node_modules/on-finished/README.md | 162 - .../send/node_modules/on-finished/index.js | 234 - .../node_modules/on-finished/package.json | 39 - .../send/node_modules/statuses/HISTORY.md | 82 - .../send/node_modules/statuses/LICENSE | 23 - .../send/node_modules/statuses/README.md | 136 - .../send/node_modules/statuses/codes.json | 65 - .../send/node_modules/statuses/index.js | 146 - .../send/node_modules/statuses/package.json | 49 - node_modules/send/package.json | 62 - node_modules/serve-index/HISTORY.md | 305 - node_modules/serve-index/LICENSE | 25 - node_modules/serve-index/README.md | 154 - node_modules/serve-index/index.js | 646 -- .../serve-index/node_modules/depd/History.md | 96 - .../serve-index/node_modules/depd/LICENSE | 22 - .../serve-index/node_modules/depd/Readme.md | 280 - .../serve-index/node_modules/depd/index.js | 522 - .../node_modules/depd/lib/browser/index.js | 77 - .../depd/lib/compat/callsite-tostring.js | 103 - .../depd/lib/compat/event-listener-count.js | 22 - .../node_modules/depd/lib/compat/index.js | 79 - .../node_modules/depd/package.json | 41 - .../node_modules/http-errors/HISTORY.md | 132 - .../node_modules/http-errors/LICENSE | 23 - .../node_modules/http-errors/README.md | 135 - .../node_modules/http-errors/index.js | 260 - .../node_modules/http-errors/package.json | 48 - .../serve-index/node_modules/inherits/LICENSE | 16 - .../node_modules/inherits/README.md | 42 - .../node_modules/inherits/inherits.js | 7 - .../node_modules/inherits/inherits_browser.js | 23 - .../node_modules/inherits/package.json | 29 - .../node_modules/setprototypeof/LICENSE | 13 - .../node_modules/setprototypeof/README.md | 26 - .../node_modules/setprototypeof/index.d.ts | 2 - .../node_modules/setprototypeof/index.js | 15 - .../node_modules/setprototypeof/package.json | 25 - node_modules/serve-index/package.json | 37 - .../serve-index/public/directory.html | 82 - .../public/icons/application_xp.png | Bin 426 -> 0 bytes .../public/icons/application_xp_terminal.png | Bin 507 -> 0 bytes node_modules/serve-index/public/icons/box.png | Bin 555 -> 0 bytes node_modules/serve-index/public/icons/cd.png | Bin 673 -> 0 bytes .../serve-index/public/icons/controller.png | Bin 666 -> 0 bytes .../serve-index/public/icons/drive.png | Bin 346 -> 0 bytes .../serve-index/public/icons/film.png | Bin 653 -> 0 bytes .../serve-index/public/icons/folder.png | Bin 634 -> 0 bytes .../serve-index/public/icons/font.png | Bin 567 -> 0 bytes .../serve-index/public/icons/image.png | Bin 516 -> 0 bytes node_modules/serve-index/public/icons/map.png | Bin 804 -> 0 bytes .../serve-index/public/icons/page.png | Bin 635 -> 0 bytes .../serve-index/public/icons/page_add.png | Bin 739 -> 0 bytes .../serve-index/public/icons/page_attach.png | Bin 794 -> 0 bytes .../serve-index/public/icons/page_code.png | Bin 818 -> 0 bytes .../serve-index/public/icons/page_copy.png | Bin 663 -> 0 bytes .../serve-index/public/icons/page_delete.png | Bin 740 -> 0 bytes .../serve-index/public/icons/page_edit.png | Bin 807 -> 0 bytes .../serve-index/public/icons/page_error.png | Bin 793 -> 0 bytes .../serve-index/public/icons/page_excel.png | Bin 817 -> 0 bytes .../serve-index/public/icons/page_find.png | Bin 879 -> 0 bytes .../serve-index/public/icons/page_gear.png | Bin 833 -> 0 bytes .../serve-index/public/icons/page_go.png | Bin 779 -> 0 bytes .../serve-index/public/icons/page_green.png | Bin 621 -> 0 bytes .../serve-index/public/icons/page_key.png | Bin 801 -> 0 bytes .../public/icons/page_lightning.png | Bin 839 -> 0 bytes .../serve-index/public/icons/page_link.png | Bin 830 -> 0 bytes .../public/icons/page_paintbrush.png | Bin 813 -> 0 bytes .../serve-index/public/icons/page_paste.png | Bin 703 -> 0 bytes .../serve-index/public/icons/page_red.png | Bin 641 -> 0 bytes .../serve-index/public/icons/page_refresh.png | Bin 858 -> 0 bytes .../serve-index/public/icons/page_save.png | Bin 774 -> 0 bytes .../serve-index/public/icons/page_white.png | Bin 294 -> 0 bytes .../public/icons/page_white_acrobat.png | Bin 591 -> 0 bytes .../public/icons/page_white_actionscript.png | Bin 664 -> 0 bytes .../public/icons/page_white_add.png | Bin 512 -> 0 bytes .../serve-index/public/icons/page_white_c.png | Bin 587 -> 0 bytes .../public/icons/page_white_camera.png | Bin 656 -> 0 bytes .../public/icons/page_white_cd.png | Bin 666 -> 0 bytes .../public/icons/page_white_code.png | Bin 603 -> 0 bytes .../public/icons/page_white_code_red.png | Bin 587 -> 0 bytes .../public/icons/page_white_coldfusion.png | Bin 592 -> 0 bytes .../public/icons/page_white_compressed.png | Bin 724 -> 0 bytes .../public/icons/page_white_copy.png | Bin 309 -> 0 bytes .../public/icons/page_white_cplusplus.png | Bin 621 -> 0 bytes .../public/icons/page_white_csharp.png | Bin 700 -> 0 bytes .../public/icons/page_white_cup.png | Bin 639 -> 0 bytes .../public/icons/page_white_database.png | Bin 579 -> 0 bytes .../public/icons/page_white_delete.png | Bin 536 -> 0 bytes .../public/icons/page_white_dvd.png | Bin 638 -> 0 bytes .../public/icons/page_white_edit.png | Bin 618 -> 0 bytes .../public/icons/page_white_error.png | Bin 623 -> 0 bytes .../public/icons/page_white_excel.png | Bin 663 -> 0 bytes .../public/icons/page_white_find.png | Bin 676 -> 0 bytes .../public/icons/page_white_flash.png | Bin 582 -> 0 bytes .../public/icons/page_white_freehand.png | Bin 639 -> 0 bytes .../public/icons/page_white_gear.png | Bin 402 -> 0 bytes .../public/icons/page_white_get.png | Bin 516 -> 0 bytes .../public/icons/page_white_go.png | Bin 612 -> 0 bytes .../serve-index/public/icons/page_white_h.png | Bin 603 -> 0 bytes .../public/icons/page_white_horizontal.png | Bin 296 -> 0 bytes .../public/icons/page_white_key.png | Bin 616 -> 0 bytes .../public/icons/page_white_lightning.png | Bin 669 -> 0 bytes .../public/icons/page_white_link.png | Bin 614 -> 0 bytes .../public/icons/page_white_magnify.png | Bin 554 -> 0 bytes .../public/icons/page_white_medal.png | Bin 706 -> 0 bytes .../public/icons/page_white_office.png | Bin 779 -> 0 bytes .../public/icons/page_white_paint.png | Bin 688 -> 0 bytes .../public/icons/page_white_paintbrush.png | Bin 618 -> 0 bytes .../public/icons/page_white_paste.png | Bin 620 -> 0 bytes .../public/icons/page_white_php.png | Bin 538 -> 0 bytes .../public/icons/page_white_picture.png | Bin 650 -> 0 bytes .../public/icons/page_white_powerpoint.png | Bin 588 -> 0 bytes .../public/icons/page_white_put.png | Bin 523 -> 0 bytes .../public/icons/page_white_ruby.png | Bin 626 -> 0 bytes .../public/icons/page_white_stack.png | Bin 317 -> 0 bytes .../public/icons/page_white_star.png | Bin 565 -> 0 bytes .../public/icons/page_white_swoosh.png | Bin 634 -> 0 bytes .../public/icons/page_white_text.png | Bin 342 -> 0 bytes .../public/icons/page_white_text_width.png | Bin 315 -> 0 bytes .../public/icons/page_white_tux.png | Bin 668 -> 0 bytes .../public/icons/page_white_vector.png | Bin 644 -> 0 bytes .../public/icons/page_white_visualstudio.png | Bin 702 -> 0 bytes .../public/icons/page_white_width.png | Bin 309 -> 0 bytes .../public/icons/page_white_word.png | Bin 651 -> 0 bytes .../public/icons/page_white_world.png | Bin 734 -> 0 bytes .../public/icons/page_white_wrench.png | Bin 613 -> 0 bytes .../public/icons/page_white_zip.png | Bin 386 -> 0 bytes .../serve-index/public/icons/page_word.png | Bin 777 -> 0 bytes .../serve-index/public/icons/page_world.png | Bin 903 -> 0 bytes node_modules/serve-index/public/style.css | 257 - node_modules/set-value/LICENSE | 21 - node_modules/set-value/README.md | 150 - node_modules/set-value/index.js | 55 - node_modules/set-value/package.json | 79 - node_modules/setprototypeof/LICENSE | 13 - node_modules/setprototypeof/README.md | 31 - node_modules/setprototypeof/index.d.ts | 2 - node_modules/setprototypeof/index.js | 17 - node_modules/setprototypeof/package.json | 38 - node_modules/setprototypeof/test/index.js | 24 - node_modules/snapdragon-node/LICENSE | 21 - node_modules/snapdragon-node/README.md | 453 - node_modules/snapdragon-node/index.js | 492 - .../node_modules/define-property/LICENSE | 21 - .../node_modules/define-property/README.md | 95 - .../node_modules/define-property/index.js | 31 - .../node_modules/define-property/package.json | 62 - node_modules/snapdragon-node/package.json | 76 - node_modules/snapdragon-util/LICENSE | 21 - node_modules/snapdragon-util/README.md | 807 -- node_modules/snapdragon-util/index.js | 1019 -- node_modules/snapdragon-util/package.json | 65 - node_modules/snapdragon/LICENSE | 21 - node_modules/snapdragon/README.md | 321 - node_modules/snapdragon/index.js | 174 - node_modules/snapdragon/lib/compiler.js | 177 - node_modules/snapdragon/lib/parser.js | 533 -- node_modules/snapdragon/lib/position.js | 14 - node_modules/snapdragon/lib/source-maps.js | 145 - node_modules/snapdragon/lib/utils.js | 48 - .../node_modules/define-property/LICENSE | 21 - .../node_modules/define-property/README.md | 77 - .../node_modules/define-property/index.js | 31 - .../node_modules/define-property/package.json | 51 - .../is-accessor-descriptor/LICENSE | 21 - .../is-accessor-descriptor/README.md | 123 - .../is-accessor-descriptor/index.js | 69 - .../is-accessor-descriptor/package.json | 61 - .../node_modules/is-data-descriptor/LICENSE | 21 - .../node_modules/is-data-descriptor/README.md | 128 - .../node_modules/is-data-descriptor/index.js | 55 - .../is-data-descriptor/package.json | 60 - .../node_modules/is-descriptor/LICENSE | 21 - .../node_modules/is-descriptor/README.md | 193 - .../node_modules/is-descriptor/index.js | 22 - .../node_modules/kind-of/LICENSE | 21 - .../node_modules/kind-of/README.md | 342 - .../node_modules/kind-of/index.js | 147 - .../node_modules/kind-of/package.json | 91 - .../node_modules/is-descriptor/package.json | 75 - node_modules/snapdragon/package.json | 79 - node_modules/source-map-resolve/LICENSE | 22 - node_modules/source-map-resolve/changelog.md | 108 - .../lib/decode-uri-component.js | 8 - .../source-map-resolve/lib/resolve-url.js | 9 - .../lib/source-map-resolve-node.js | 342 - node_modules/source-map-resolve/package.json | 47 - node_modules/source-map-resolve/readme.md | 231 - .../source-map-resolve/source-map-resolve.js | 348 - node_modules/source-map-url/LICENSE | 21 - node_modules/source-map-url/changelog.md | 57 - node_modules/source-map-url/package.json | 39 - node_modules/source-map-url/readme.md | 97 - node_modules/source-map-url/source-map-url.js | 57 - node_modules/source-map/CHANGELOG.md | 301 - node_modules/source-map/LICENSE | 28 - node_modules/source-map/README.md | 729 -- .../source-map/dist/source-map.debug.js | 3091 ------ node_modules/source-map/dist/source-map.js | 3090 ------ .../source-map/dist/source-map.min.js | 2 - .../source-map/dist/source-map.min.js.map | 1 - node_modules/source-map/lib/array-set.js | 121 - node_modules/source-map/lib/base64-vlq.js | 140 - node_modules/source-map/lib/base64.js | 67 - node_modules/source-map/lib/binary-search.js | 111 - node_modules/source-map/lib/mapping-list.js | 79 - node_modules/source-map/lib/quick-sort.js | 114 - .../source-map/lib/source-map-consumer.js | 1082 --- .../source-map/lib/source-map-generator.js | 416 - node_modules/source-map/lib/source-node.js | 413 - node_modules/source-map/lib/util.js | 417 - node_modules/source-map/package.json | 72 - node_modules/source-map/source-map.js | 8 - node_modules/split-string/LICENSE | 21 - node_modules/split-string/README.md | 321 - node_modules/split-string/index.js | 171 - .../node_modules/extend-shallow/LICENSE | 21 - .../node_modules/extend-shallow/README.md | 97 - .../node_modules/extend-shallow/index.js | 60 - .../node_modules/extend-shallow/package.json | 83 - .../node_modules/is-extendable/LICENSE | 21 - .../node_modules/is-extendable/README.md | 88 - .../node_modules/is-extendable/index.d.ts | 5 - .../node_modules/is-extendable/index.js | 14 - .../node_modules/is-extendable/package.json | 67 - node_modules/split-string/package.json | 65 - node_modules/split/.npmignore | 3 - node_modules/split/.travis.yml | 4 - node_modules/split/LICENCE | 22 - node_modules/split/examples/pretty.js | 26 - node_modules/split/index.js | 63 - node_modules/split/package.json | 30 - node_modules/split/readme.markdown | 66 - node_modules/split/test/options.asynct.js | 23 - .../split/test/partitioned_unicode.js | 34 - node_modules/split/test/split.asynct.js | 137 - node_modules/split/test/try_catch.asynct.js | 51 - node_modules/static-extend/LICENSE | 21 - node_modules/static-extend/index.js | 90 - .../node_modules/define-property/LICENSE | 21 - .../node_modules/define-property/README.md | 77 - .../node_modules/define-property/index.js | 31 - .../node_modules/define-property/package.json | 51 - .../is-accessor-descriptor/LICENSE | 21 - .../is-accessor-descriptor/README.md | 123 - .../is-accessor-descriptor/index.js | 69 - .../is-accessor-descriptor/package.json | 61 - .../node_modules/is-data-descriptor/LICENSE | 21 - .../node_modules/is-data-descriptor/README.md | 128 - .../node_modules/is-data-descriptor/index.js | 55 - .../is-data-descriptor/package.json | 60 - .../node_modules/is-descriptor/LICENSE | 21 - .../node_modules/is-descriptor/README.md | 193 - .../node_modules/is-descriptor/index.js | 22 - .../node_modules/kind-of/LICENSE | 21 - .../node_modules/kind-of/README.md | 342 - .../node_modules/kind-of/index.js | 147 - .../node_modules/kind-of/package.json | 91 - .../node_modules/is-descriptor/package.json | 75 - node_modules/static-extend/package.json | 63 - node_modules/statuses/HISTORY.md | 65 - node_modules/statuses/LICENSE | 23 - node_modules/statuses/README.md | 127 - node_modules/statuses/codes.json | 66 - node_modules/statuses/index.js | 113 - node_modules/statuses/package.json | 48 - node_modules/stream-combiner/.npmignore | 3 - node_modules/stream-combiner/.travis.yml | 4 - node_modules/stream-combiner/LICENSE | 22 - node_modules/stream-combiner/README.md | 29 - node_modules/stream-combiner/index.js | 39 - node_modules/stream-combiner/package.json | 21 - node_modules/stream-combiner/test/index.js | 52 - node_modules/string_decoder/.travis.yml | 50 - node_modules/string_decoder/LICENSE | 48 - node_modules/string_decoder/README.md | 47 - .../string_decoder/lib/string_decoder.js | 296 - node_modules/string_decoder/package.json | 31 - node_modules/through/.travis.yml | 5 - node_modules/through/LICENSE.APACHE2 | 15 - node_modules/through/LICENSE.MIT | 24 - node_modules/through/index.js | 108 - node_modules/through/package.json | 36 - node_modules/through/readme.markdown | 64 - node_modules/through/test/async.js | 28 - node_modules/through/test/auto-destroy.js | 30 - node_modules/through/test/buffering.js | 71 - node_modules/through/test/end.js | 45 - node_modules/through/test/index.js | 133 - node_modules/to-object-path/LICENSE | 21 - node_modules/to-object-path/README.md | 71 - node_modules/to-object-path/index.js | 33 - node_modules/to-object-path/package.json | 48 - node_modules/to-regex-range/LICENSE | 21 - node_modules/to-regex-range/README.md | 281 - node_modules/to-regex-range/index.js | 294 - node_modules/to-regex-range/package.json | 86 - node_modules/to-regex/LICENSE | 21 - node_modules/to-regex/README.md | 205 - node_modules/to-regex/index.js | 155 - .../node_modules/extend-shallow/LICENSE | 21 - .../node_modules/extend-shallow/README.md | 97 - .../node_modules/extend-shallow/index.js | 60 - .../node_modules/extend-shallow/package.json | 83 - .../node_modules/is-extendable/LICENSE | 21 - .../node_modules/is-extendable/README.md | 88 - .../node_modules/is-extendable/index.d.ts | 5 - .../node_modules/is-extendable/index.js | 14 - .../node_modules/is-extendable/package.json | 67 - node_modules/to-regex/package.json | 62 - node_modules/toidentifier/HISTORY.md | 9 - node_modules/toidentifier/LICENSE | 21 - node_modules/toidentifier/README.md | 61 - node_modules/toidentifier/index.js | 32 - node_modules/toidentifier/package.json | 38 - node_modules/union-value/LICENSE | 21 - node_modules/union-value/README.md | 73 - node_modules/union-value/index.js | 30 - node_modules/union-value/package.json | 70 - node_modules/unix-crypt-td-js/Makefile | 4 - node_modules/unix-crypt-td-js/README.markdown | 51 - node_modules/unix-crypt-td-js/package.json | 28 - .../unix-crypt-td-js/src/unix-crypt-td.js | 464 - node_modules/unix-crypt-td-js/test/test.js | 13 - .../unix-crypt-td-js/unix-crypt-td.min.js | 8 - node_modules/unpipe/HISTORY.md | 4 - node_modules/unpipe/LICENSE | 22 - node_modules/unpipe/README.md | 43 - node_modules/unpipe/index.js | 69 - node_modules/unpipe/package.json | 27 - node_modules/unset-value/LICENSE | 21 - node_modules/unset-value/README.md | 131 - node_modules/unset-value/index.js | 32 - .../node_modules/has-value/LICENSE | 21 - .../node_modules/has-value/README.md | 130 - .../node_modules/has-value/index.js | 19 - .../has-value/node_modules/isobject/LICENSE | 21 - .../has-value/node_modules/isobject/README.md | 112 - .../has-value/node_modules/isobject/index.js | 14 - .../node_modules/isobject/package.json | 67 - .../node_modules/has-value/package.json | 81 - .../node_modules/has-values/LICENSE | 21 - .../node_modules/has-values/README.md | 114 - .../node_modules/has-values/index.js | 36 - .../node_modules/has-values/package.json | 75 - node_modules/unset-value/package.json | 71 - node_modules/upath/LICENSE | 22 - node_modules/upath/build/code/upath.js | 171 - node_modules/upath/package.json | 60 - node_modules/upath/readme.md | 342 - node_modules/upath/upath.d.ts | 239 - node_modules/urix/.jshintrc | 42 - node_modules/urix/LICENSE | 21 - node_modules/urix/index.js | 17 - node_modules/urix/package.json | 25 - node_modules/urix/readme.md | 46 - node_modules/urix/test/index.js | 43 - node_modules/use/LICENSE | 21 - node_modules/use/README.md | 90 - node_modules/use/index.js | 155 - node_modules/use/package.json | 66 - node_modules/util-deprecate/History.md | 16 - node_modules/util-deprecate/LICENSE | 24 - node_modules/util-deprecate/README.md | 53 - node_modules/util-deprecate/browser.js | 67 - node_modules/util-deprecate/node.js | 6 - node_modules/util-deprecate/package.json | 27 - node_modules/utils-merge/.npmignore | 9 - node_modules/utils-merge/LICENSE | 20 - node_modules/utils-merge/README.md | 34 - node_modules/utils-merge/index.js | 23 - node_modules/utils-merge/package.json | 40 - node_modules/uuid/AUTHORS | 5 - node_modules/uuid/CHANGELOG.md | 119 - node_modules/uuid/LICENSE.md | 21 - node_modules/uuid/README.md | 276 - node_modules/uuid/bin/uuid | 65 - node_modules/uuid/index.js | 8 - node_modules/uuid/lib/bytesToUuid.js | 26 - node_modules/uuid/lib/md5-browser.js | 216 - node_modules/uuid/lib/md5.js | 25 - node_modules/uuid/lib/rng-browser.js | 34 - node_modules/uuid/lib/rng.js | 8 - node_modules/uuid/lib/sha1-browser.js | 89 - node_modules/uuid/lib/sha1.js | 25 - node_modules/uuid/lib/v35.js | 57 - node_modules/uuid/package.json | 49 - node_modules/uuid/v1.js | 109 - node_modules/uuid/v3.js | 4 - node_modules/uuid/v4.js | 29 - node_modules/uuid/v5.js | 3 - node_modules/vary/HISTORY.md | 39 - node_modules/vary/LICENSE | 22 - node_modules/vary/README.md | 101 - node_modules/vary/index.js | 149 - node_modules/vary/package.json | 43 - node_modules/websocket-driver/CHANGELOG.md | 142 - node_modules/websocket-driver/LICENSE.md | 12 - node_modules/websocket-driver/README.md | 370 - .../websocket-driver/lib/websocket/driver.js | 43 - .../lib/websocket/driver/base.js | 193 - .../lib/websocket/driver/client.js | 142 - .../lib/websocket/driver/draft75.js | 123 - .../lib/websocket/driver/draft76.js | 117 - .../lib/websocket/driver/headers.js | 35 - .../lib/websocket/driver/hybi.js | 483 - .../lib/websocket/driver/hybi/frame.js | 21 - .../lib/websocket/driver/hybi/message.js | 34 - .../lib/websocket/driver/proxy.js | 99 - .../lib/websocket/driver/server.js | 112 - .../lib/websocket/driver/stream_reader.js | 69 - .../lib/websocket/http_parser.js | 135 - .../websocket-driver/lib/websocket/streams.js | 146 - node_modules/websocket-driver/package.json | 35 - .../websocket-extensions/CHANGELOG.md | 28 - node_modules/websocket-extensions/LICENSE.md | 12 - node_modules/websocket-extensions/README.md | 331 - .../websocket-extensions/lib/parser.js | 103 - .../lib/pipeline/README.md | 607 -- .../websocket-extensions/lib/pipeline/cell.js | 53 - .../lib/pipeline/functor.js | 72 - .../lib/pipeline/index.js | 47 - .../lib/pipeline/pledge.js | 37 - .../lib/pipeline/ring_buffer.js | 66 - .../lib/websocket_extensions.js | 162 - .../websocket-extensions/package.json | 29 - package-lock.json | 2120 ---- package.json | 5 - 1497 files changed, 1947 insertions(+), 135825 deletions(-) rename assets/{1440_985-505dc5db.png => 1440_985.png} (100%) rename assets/{ASPER-49e5ec4a.png => ASPER.png} (100%) rename assets/{AWS_logo_white_v2-1024x612-6df8aaac.png => AWS_logo_white_v2-1024x612.png} (100%) rename AnimatedButton.jpg => assets/AnimatedButton.jpg (100%) rename assets/{Auth0_by_Okta_White-3a7b541a.png => Auth0_by_Okta_White.png} (100%) create mode 100644 assets/Box.gif rename Button.png => assets/Button.png (100%) rename assets/{CampusTechies-fdb97384.png => CampusTechies.png} (100%) rename assets/{DDC_Logo-40ec3c61.png => DDC_Logo.png} (100%) rename assets/{Devfolio-88f610a1.svg => Devfolio.svg} (100%) create mode 100644 assets/ETHIndia.png rename assets/{FastRoller-bc26e3dc.gif => FastRoller.gif} (100%) rename assets/{Filecoin-ff8b0181.svg => Filecoin.svg} (100%) rename assets/{GitHub_Logo_White-f53b383c.png => GitHub_Logo_White.png} (100%) rename assets/{Hack_Unicorn_Club_Logo-46ee1937.png => Hack_Unicorn_Club_Logo.png} (100%) rename assets/{Kotlin_logo-9cc98145.png => Kotlin_logo.png} (100%) rename assets/{NewRoller-89b11e8a.gif => NewRoller.gif} (100%) rename assets/{Polygon-49522c6d.svg => Polygon.svg} (100%) rename assets/{Replit-1ee11cfb.svg => Replit.svg} (100%) create mode 100644 assets/Skull.gif rename assets/{SlowRoller-f88f8d18.gif => SlowRoller.gif} (100%) create mode 100644 assets/Social3-Logo_on_White_blue.svg create mode 100644 assets/Social3-Logo_on_White_pur.svg rename assets/{Solana-793e8952.svg => Solana.svg} (100%) rename assets/{Zetapass logo cp-a6f4779d.png => Zetapass logo cp.png} (100%) create mode 100644 assets/asset (1).svg create mode 100644 assets/auth0.svg create mode 100644 assets/autho_white.png create mode 100644 assets/avatars/aayushi.png create mode 100644 assets/avatars/akshita.png create mode 100644 assets/avatars/ayush.png create mode 100644 assets/avatars/hamdaan.png create mode 100644 assets/avatars/oindrila.png create mode 100644 assets/avatars/sagar.png create mode 100644 assets/avatars/vishal.png rename assets/{blue_add-0e80fced.svg => blue_add.svg} (100%) create mode 100644 assets/borders.svg rename assets/{card_border-055fab2a.png => card_border.png} (100%) create mode 100644 assets/chalice.png delete mode 100644 assets/cp-08f5a905.css delete mode 100644 assets/cp-17341f2c.js rename assets/{d_border-dd8d4fd3.svg => d_border.svg} (100%) create mode 100644 assets/d_t_border.svg rename assets/{devsdungeon-6c3eb695.svg => devsdungeon.svg} (100%) create mode 100644 assets/dotted-box.svg create mode 100644 assets/dotted_borders.svg rename assets/{echo3D_brand_logo_2-b4574401.png => echo3D_brand_logo_2.png} (100%) create mode 100644 assets/edugraph-og-image.png create mode 100644 assets/edugraph-og.png rename assets/{eduhub-abe05838.png => eduhub.png} (100%) rename assets/{favicon-10ae7e9a.ico => favicon_io/favicon.ico} (100%) create mode 100644 assets/flyingComputer.gif rename assets/{footer-5a07628a.png => footer.png} (100%) rename assets/{frontend Club cp-891bd71e.png => frontend Club cp.png} (100%) rename assets/{gdg kol-91876630.png => gdg kol.png} (100%) rename assets/{gdsc kgec logo-2524e40c.png => gdsc kgec logo.png} (100%) rename assets/{iiit_kalyani_logo-cd292579.png => iiit_kalyani_logo.png} (100%) create mode 100644 assets/images/discord_logo.png create mode 100644 assets/images/insta_logo.png create mode 100644 assets/images/linkedin_logo.png create mode 100644 assets/images/tech_logo.png create mode 100644 assets/images/tier1.png create mode 100644 assets/images/tier2.png create mode 100644 assets/images/tier3.png create mode 100644 assets/images/tier4.png create mode 100644 assets/images/twitter_logo.png delete mode 100644 assets/index-9868bc17.css rename assets/{iupgz4ve 1-2aa14036.png => iupgz4ve 1.png} (100%) rename assets/{jina-85da331a.png => jina.png} (100%) rename assets/{l_d_border-7d597197.svg => l_d_border.svg} (100%) rename assets/{l_g_border-444f9075.svg => l_g_border.svg} (100%) create mode 100644 assets/l_h_border.svg rename assets/{l_m_border-c9ab541e.svg => l_m_border.svg} (100%) rename assets/{l_p_border-b5b252e6.svg => l_p_border.svg} (100%) rename assets/{l_s_border-2cd8d94c.svg => l_s_border.svg} (100%) create mode 100644 assets/ladder.png create mode 100644 assets/laddermobile.png rename assets/{left_key-2ad608af.svg => left_key.svg} (100%) create mode 100644 assets/linkedin_pixel_logo_icon_181925 1.png delete mode 100644 assets/main-5a0e1c25.js rename assets/{mascot-9cf2466a.gif => mascot.gif} (100%) rename assets/{mlh-logo-white-74b961d7.svg => mlh-logo-white.svg} (100%) rename assets/{orange_add-dd2a9cfe.svg => orange_add.svg} (100%) rename assets/{ph guild-6285d464.png => ph guild.png} (100%) rename assets/{pink_add-112d7d41.svg => pink_add.svg} (100%) rename assets/{postman-2f2ccaee.svg => postman.svg} (100%) rename assets/{preloader-db1393e0.gif => preloader.gif} (100%) rename assets/{purple_add-92002ffa.svg => purple_add.svg} (100%) rename assets/{r_g_border-8e6a00b9.svg => r_g_border.svg} (100%) create mode 100644 assets/r_h_border.svg rename assets/{r_m_border-19f64874.svg => r_m_border.svg} (100%) rename assets/{r_p_border-c96764d5.svg => r_p_border.svg} (100%) rename assets/{r_s_border-b735965e.svg => r_s_border.svg} (100%) rename assets/{red_add-5e4845fe.svg => red_add.svg} (100%) rename assets/{right_key-599b096e.svg => right_key.svg} (100%) create mode 100644 assets/start.gif rename assets/{terminate-icon-8d639348.svg => terminate-icon.svg} (100%) rename assets/{tracks_auth0-0d6005d9.png => tracks_auth0.png} (100%) rename assets/{tracks_auth0_back-416e3678.png => tracks_auth0_back.png} (100%) rename assets/{tracks_auth0_mobile-363b102e.png => tracks_auth0_mobile.png} (100%) rename assets/{tracks_fresher-06a87e97.png => tracks_fresher.png} (100%) rename assets/{tracks_fresher_back-3317338f.png => tracks_fresher_back.png} (100%) rename assets/{tracks_github-5eb60d75.png => tracks_github.png} (100%) rename assets/{tracks_github_back-981ed7b8.png => tracks_github_back.png} (100%) rename assets/{tracks_github_mobile-9938e4d7.png => tracks_github_mobile.png} (100%) rename assets/{tracks_godaddy-43de5481.png => tracks_godaddy.png} (100%) rename assets/{tracks_godaddy_back-1a81f32c.png => tracks_godaddy_back.png} (100%) rename assets/{tracks_godaddy_mobile-07d5b203.png => tracks_godaddy_mobile.png} (100%) rename assets/{tracks_hardware-82edd0e3.png => tracks_hardware.png} (100%) rename assets/{tracks_hardware_back-6e2e916b.png => tracks_hardware_back.png} (100%) rename assets/{tracks_mathworks-8cbcbdc8.png => tracks_mathworks.png} (100%) rename assets/{tracks_mathworks_back-12b994f4.png => tracks_mathworks_back.png} (100%) rename assets/{tracks_mathworks_mobile-27b59190.png => tracks_mathworks_mobile.png} (100%) rename assets/{tracks_mongodb-cb4aa5a7.png => tracks_mongodb.png} (100%) rename assets/{tracks_mongodb_back-81332911.png => tracks_mongodb_back.png} (100%) rename assets/{tracks_mongodb_mobile-7a6670e7.png => tracks_mongodb_mobile.png} (100%) rename assets/{tracks_postman-c6800b99.png => tracks_postman.png} (100%) rename assets/{tracks_postman_back-0e850092.png => tracks_postman_back.png} (100%) rename assets/{tracks_postman_mobile-44a1da9f.png => tracks_postman_mobile.png} (100%) rename assets/{tracks_streamlit-a8f886eb.png => tracks_streamlit.png} (100%) rename assets/{tracks_streamlit_back-1508cedc.png => tracks_streamlit_back.png} (100%) rename assets/{tracks_streamlit_mobilepng-11e1caf7.png => tracks_streamlit_mobilepng.png} (100%) rename assets/{trophy_bronze-770ae1d8.png => trophy_bronze.png} (100%) rename assets/{trophy_bronze_back-ebfb6a1a.png => trophy_bronze_back.png} (100%) rename assets/{trophy_gold-90423f7b.png => trophy_gold.png} (100%) rename assets/{trophy_gold_back-c7b1666e.png => trophy_gold_back.png} (100%) rename assets/{trophy_silver-734c74f4.png => trophy_silver.png} (100%) rename assets/{trophy_silver_back-f0c78ead.png => trophy_silver_back.png} (100%) create mode 100644 assets/trophy_tracks.png create mode 100644 assets/trophy_tracks_back.png create mode 100644 assets/twitter_pixel_logo_icon_181924 1.png rename assets/{zeeve png 1000-bdd28daa.png => zeeve png 1000.png} (100%) create mode 100644 challenges/assets/1440_985.png create mode 100644 challenges/assets/AWS_logo_white_v2-1024x612.png rename assets/AnimatedButton-5df7b69f.jpg => challenges/assets/AnimatedButton.jpg (100%) create mode 100644 challenges/assets/Auth0_by_Okta_White.png create mode 100644 challenges/assets/Box.gif create mode 100644 challenges/assets/Button.png create mode 100644 challenges/assets/Devfolio.svg create mode 100644 challenges/assets/FastRoller.gif create mode 100644 challenges/assets/Filecoin.svg create mode 100644 challenges/assets/GitHub_Logo_White.png create mode 100644 challenges/assets/NewRoller.gif create mode 100644 challenges/assets/Polygon.svg create mode 100644 challenges/assets/Replit.svg create mode 100644 challenges/assets/Skull.gif create mode 100644 challenges/assets/SlowRoller.gif create mode 100644 challenges/assets/Solana.svg create mode 100644 challenges/assets/asset (1).svg create mode 100644 challenges/assets/auth0.svg create mode 100644 challenges/assets/autho_white.png create mode 100644 challenges/assets/avatars/aayushi.png create mode 100644 challenges/assets/avatars/akshita.png create mode 100644 challenges/assets/avatars/ayush.png create mode 100644 challenges/assets/avatars/hamdaan.png create mode 100644 challenges/assets/avatars/oindrila.png create mode 100644 challenges/assets/avatars/sagar.png create mode 100644 challenges/assets/avatars/vishal.png create mode 100644 challenges/assets/blue_add.svg create mode 100644 challenges/assets/borders.svg create mode 100644 challenges/assets/card_border.png create mode 100644 challenges/assets/chalice.png create mode 100644 challenges/assets/d_border.svg create mode 100644 challenges/assets/d_t_border.svg create mode 100644 challenges/assets/devsdungeon.svg create mode 100644 challenges/assets/dotted-box.svg create mode 100644 challenges/assets/dotted_borders.svg create mode 100644 challenges/assets/echo3D_brand_logo_2.png create mode 100644 challenges/assets/favicon_io/favicon.ico create mode 100644 challenges/assets/flyingComputer.gif create mode 100644 challenges/assets/footer.png create mode 100644 challenges/assets/images/discord_logo.png create mode 100644 challenges/assets/images/insta_logo.png create mode 100644 challenges/assets/images/linkedin_logo.png create mode 100644 challenges/assets/images/tech_logo.png create mode 100644 challenges/assets/images/tier1.png create mode 100644 challenges/assets/images/tier2.png create mode 100644 challenges/assets/images/tier3.png create mode 100644 challenges/assets/images/tier4.png create mode 100644 challenges/assets/images/twitter_logo.png create mode 100644 challenges/assets/iupgz4ve 1.png create mode 100644 challenges/assets/jina.png create mode 100644 challenges/assets/l_d_border.svg create mode 100644 challenges/assets/l_g_border.svg create mode 100644 challenges/assets/l_p_border.svg create mode 100644 challenges/assets/l_s_border.svg create mode 100644 challenges/assets/ladder.png create mode 100644 challenges/assets/laddermobile.png create mode 100644 challenges/assets/left_key.svg create mode 100644 challenges/assets/linkedin_pixel_logo_icon_181925 1.png create mode 100644 challenges/assets/mascot.gif create mode 100644 challenges/assets/mlh-logo-white.svg create mode 100644 challenges/assets/orange_add.svg create mode 100644 challenges/assets/pink_add.svg create mode 100644 challenges/assets/preloader.gif create mode 100644 challenges/assets/purple_add.svg create mode 100644 challenges/assets/r_g_border.svg create mode 100644 challenges/assets/r_p_border.svg create mode 100644 challenges/assets/r_s_border.svg create mode 100644 challenges/assets/red_add.svg create mode 100644 challenges/assets/right_key.svg create mode 100644 challenges/assets/start.gif create mode 100644 challenges/assets/terminate-icon.svg create mode 100644 challenges/assets/trophy_bronze.png create mode 100644 challenges/assets/trophy_gold.png create mode 100644 challenges/assets/trophy_silver.png create mode 100644 challenges/assets/twitter_pixel_logo_icon_181924 1.png create mode 100644 challenges/style.css delete mode 120000 node_modules/.bin/atob delete mode 120000 node_modules/.bin/live-server delete mode 120000 node_modules/.bin/mime delete mode 120000 node_modules/.bin/uuid delete mode 100644 node_modules/.package-lock.json delete mode 100644 node_modules/accepts/HISTORY.md delete mode 100644 node_modules/accepts/LICENSE delete mode 100644 node_modules/accepts/README.md delete mode 100644 node_modules/accepts/index.js delete mode 100644 node_modules/accepts/package.json delete mode 100644 node_modules/anymatch/LICENSE delete mode 100644 node_modules/anymatch/README.md delete mode 100644 node_modules/anymatch/index.js delete mode 100644 node_modules/anymatch/node_modules/normalize-path/LICENSE delete mode 100644 node_modules/anymatch/node_modules/normalize-path/README.md delete mode 100644 node_modules/anymatch/node_modules/normalize-path/index.js delete mode 100644 node_modules/anymatch/node_modules/normalize-path/package.json delete mode 100644 node_modules/anymatch/package.json delete mode 100644 node_modules/apache-crypt/LICENSE delete mode 100644 node_modules/apache-crypt/README.md delete mode 100644 node_modules/apache-crypt/package.json delete mode 100644 node_modules/apache-crypt/src/index.js delete mode 100644 node_modules/apache-md5/LICENSE delete mode 100644 node_modules/apache-md5/README.md delete mode 100644 node_modules/apache-md5/package.json delete mode 100644 node_modules/apache-md5/src/apache-md5.d.ts delete mode 100644 node_modules/apache-md5/src/index.js delete mode 100755 node_modules/arr-diff/LICENSE delete mode 100644 node_modules/arr-diff/README.md delete mode 100644 node_modules/arr-diff/index.js delete mode 100644 node_modules/arr-diff/package.json delete mode 100755 node_modules/arr-flatten/LICENSE delete mode 100755 node_modules/arr-flatten/README.md delete mode 100644 node_modules/arr-flatten/index.js delete mode 100644 node_modules/arr-flatten/package.json delete mode 100644 node_modules/arr-union/LICENSE delete mode 100644 node_modules/arr-union/README.md delete mode 100644 node_modules/arr-union/index.js delete mode 100644 node_modules/arr-union/package.json delete mode 100755 node_modules/array-unique/LICENSE delete mode 100755 node_modules/array-unique/README.md delete mode 100644 node_modules/array-unique/index.js delete mode 100644 node_modules/array-unique/package.json delete mode 100644 node_modules/assign-symbols/LICENSE delete mode 100644 node_modules/assign-symbols/README.md delete mode 100644 node_modules/assign-symbols/index.js delete mode 100644 node_modules/assign-symbols/package.json delete mode 100644 node_modules/async-each/LICENSE delete mode 100644 node_modules/async-each/README.md delete mode 100644 node_modules/async-each/index.js delete mode 100644 node_modules/async-each/package.json delete mode 100644 node_modules/atob/LICENSE delete mode 100644 node_modules/atob/LICENSE.DOCS delete mode 100644 node_modules/atob/README.md delete mode 100755 node_modules/atob/bin/atob.js delete mode 100644 node_modules/atob/bower.json delete mode 100644 node_modules/atob/browser-atob.js delete mode 100644 node_modules/atob/node-atob.js delete mode 100644 node_modules/atob/package.json delete mode 100644 node_modules/atob/test.js delete mode 100644 node_modules/base/LICENSE delete mode 100644 node_modules/base/README.md delete mode 100644 node_modules/base/index.js delete mode 100644 node_modules/base/node_modules/define-property/LICENSE delete mode 100644 node_modules/base/node_modules/define-property/README.md delete mode 100644 node_modules/base/node_modules/define-property/index.js delete mode 100644 node_modules/base/node_modules/define-property/package.json delete mode 100644 node_modules/base/package.json delete mode 100644 node_modules/basic-auth/HISTORY.md delete mode 100644 node_modules/basic-auth/LICENSE delete mode 100644 node_modules/basic-auth/README.md delete mode 100644 node_modules/basic-auth/index.js delete mode 100644 node_modules/basic-auth/package.json delete mode 100644 node_modules/batch/.npmignore delete mode 100644 node_modules/batch/History.md delete mode 100644 node_modules/batch/LICENSE delete mode 100644 node_modules/batch/Makefile delete mode 100644 node_modules/batch/Readme.md delete mode 100644 node_modules/batch/component.json delete mode 100644 node_modules/batch/index.js delete mode 100644 node_modules/batch/package.json delete mode 100644 node_modules/bcryptjs/.npmignore delete mode 100644 node_modules/bcryptjs/.travis.yml delete mode 100644 node_modules/bcryptjs/.vscode/settings.json delete mode 100644 node_modules/bcryptjs/LICENSE delete mode 100644 node_modules/bcryptjs/README.md delete mode 100644 node_modules/bcryptjs/bin/bcrypt delete mode 100644 node_modules/bcryptjs/bower.json delete mode 100644 node_modules/bcryptjs/dist/README.md delete mode 100644 node_modules/bcryptjs/dist/bcrypt.js delete mode 100644 node_modules/bcryptjs/dist/bcrypt.min.js delete mode 100644 node_modules/bcryptjs/dist/bcrypt.min.js.gz delete mode 100644 node_modules/bcryptjs/dist/bcrypt.min.map delete mode 100644 node_modules/bcryptjs/externs/bcrypt.js delete mode 100644 node_modules/bcryptjs/externs/minimal-env.js delete mode 100644 node_modules/bcryptjs/index.js delete mode 100644 node_modules/bcryptjs/package.json delete mode 100644 node_modules/bcryptjs/scripts/build.js delete mode 100644 node_modules/bcryptjs/src/bcrypt.js delete mode 100644 node_modules/bcryptjs/src/bcrypt/impl.js delete mode 100644 node_modules/bcryptjs/src/bcrypt/prng/README.md delete mode 100644 node_modules/bcryptjs/src/bcrypt/prng/accum.js delete mode 100644 node_modules/bcryptjs/src/bcrypt/prng/isaac.js delete mode 100644 node_modules/bcryptjs/src/bcrypt/util.js delete mode 100644 node_modules/bcryptjs/src/bcrypt/util/base64.js delete mode 100644 node_modules/bcryptjs/src/bower.json delete mode 100644 node_modules/bcryptjs/src/wrap.js delete mode 100644 node_modules/bcryptjs/tests/quickbrown.txt delete mode 100644 node_modules/bcryptjs/tests/suite.js delete mode 100644 node_modules/binary-extensions/binary-extensions.json delete mode 100644 node_modules/binary-extensions/license delete mode 100644 node_modules/binary-extensions/package.json delete mode 100644 node_modules/binary-extensions/readme.md delete mode 100644 node_modules/braces/LICENSE delete mode 100644 node_modules/braces/README.md delete mode 100644 node_modules/braces/index.js delete mode 100644 node_modules/braces/lib/braces.js delete mode 100644 node_modules/braces/lib/compilers.js delete mode 100644 node_modules/braces/lib/parsers.js delete mode 100644 node_modules/braces/lib/utils.js delete mode 100644 node_modules/braces/package.json delete mode 100644 node_modules/cache-base/LICENSE delete mode 100644 node_modules/cache-base/README.md delete mode 100644 node_modules/cache-base/index.js delete mode 100644 node_modules/cache-base/package.json delete mode 100644 node_modules/chokidar/CHANGELOG.md delete mode 100644 node_modules/chokidar/README.md delete mode 100644 node_modules/chokidar/index.js delete mode 100644 node_modules/chokidar/lib/fsevents-handler.js delete mode 100644 node_modules/chokidar/lib/nodefs-handler.js delete mode 100644 node_modules/chokidar/package.json delete mode 100644 node_modules/chokidar/types/index.d.ts delete mode 100644 node_modules/class-utils/LICENSE delete mode 100644 node_modules/class-utils/README.md delete mode 100644 node_modules/class-utils/index.js delete mode 100644 node_modules/class-utils/node_modules/define-property/LICENSE delete mode 100644 node_modules/class-utils/node_modules/define-property/README.md delete mode 100644 node_modules/class-utils/node_modules/define-property/index.js delete mode 100644 node_modules/class-utils/node_modules/define-property/package.json delete mode 100644 node_modules/class-utils/node_modules/is-accessor-descriptor/LICENSE delete mode 100644 node_modules/class-utils/node_modules/is-accessor-descriptor/README.md delete mode 100644 node_modules/class-utils/node_modules/is-accessor-descriptor/index.js delete mode 100644 node_modules/class-utils/node_modules/is-accessor-descriptor/package.json delete mode 100644 node_modules/class-utils/node_modules/is-data-descriptor/LICENSE delete mode 100644 node_modules/class-utils/node_modules/is-data-descriptor/README.md delete mode 100644 node_modules/class-utils/node_modules/is-data-descriptor/index.js delete mode 100644 node_modules/class-utils/node_modules/is-data-descriptor/package.json delete mode 100644 node_modules/class-utils/node_modules/is-descriptor/LICENSE delete mode 100644 node_modules/class-utils/node_modules/is-descriptor/README.md delete mode 100644 node_modules/class-utils/node_modules/is-descriptor/index.js delete mode 100644 node_modules/class-utils/node_modules/is-descriptor/node_modules/kind-of/LICENSE delete mode 100644 node_modules/class-utils/node_modules/is-descriptor/node_modules/kind-of/README.md delete mode 100644 node_modules/class-utils/node_modules/is-descriptor/node_modules/kind-of/index.js delete mode 100644 node_modules/class-utils/node_modules/is-descriptor/node_modules/kind-of/package.json delete mode 100644 node_modules/class-utils/node_modules/is-descriptor/package.json delete mode 100644 node_modules/class-utils/package.json delete mode 100644 node_modules/collection-visit/LICENSE delete mode 100644 node_modules/collection-visit/README.md delete mode 100644 node_modules/collection-visit/index.js delete mode 100644 node_modules/collection-visit/package.json delete mode 100644 node_modules/colors/LICENSE delete mode 100644 node_modules/colors/README.md delete mode 100644 node_modules/colors/examples/normal-usage.js delete mode 100644 node_modules/colors/examples/safe-string.js delete mode 100644 node_modules/colors/index.d.ts delete mode 100644 node_modules/colors/lib/colors.js delete mode 100644 node_modules/colors/lib/custom/trap.js delete mode 100644 node_modules/colors/lib/custom/zalgo.js delete mode 100644 node_modules/colors/lib/extendStringPrototype.js delete mode 100644 node_modules/colors/lib/index.js delete mode 100644 node_modules/colors/lib/maps/america.js delete mode 100644 node_modules/colors/lib/maps/rainbow.js delete mode 100644 node_modules/colors/lib/maps/random.js delete mode 100644 node_modules/colors/lib/maps/zebra.js delete mode 100644 node_modules/colors/lib/styles.js delete mode 100644 node_modules/colors/lib/system/has-flag.js delete mode 100644 node_modules/colors/lib/system/supports-colors.js delete mode 100644 node_modules/colors/package.json delete mode 100644 node_modules/colors/safe.d.ts delete mode 100644 node_modules/colors/safe.js delete mode 100644 node_modules/colors/themes/generic-logging.js delete mode 100644 node_modules/component-emitter/History.md delete mode 100644 node_modules/component-emitter/LICENSE delete mode 100644 node_modules/component-emitter/Readme.md delete mode 100644 node_modules/component-emitter/index.js delete mode 100644 node_modules/component-emitter/package.json delete mode 100644 node_modules/connect/HISTORY.md delete mode 100644 node_modules/connect/LICENSE delete mode 100644 node_modules/connect/README.md delete mode 100644 node_modules/connect/SECURITY.md delete mode 100644 node_modules/connect/index.js delete mode 100644 node_modules/connect/package.json delete mode 100644 node_modules/copy-descriptor/LICENSE delete mode 100644 node_modules/copy-descriptor/index.js delete mode 100644 node_modules/copy-descriptor/package.json delete mode 100644 node_modules/core-util-is/LICENSE delete mode 100644 node_modules/core-util-is/README.md delete mode 100644 node_modules/core-util-is/lib/util.js delete mode 100644 node_modules/core-util-is/package.json delete mode 100644 node_modules/cors/CONTRIBUTING.md delete mode 100644 node_modules/cors/HISTORY.md delete mode 100644 node_modules/cors/LICENSE delete mode 100644 node_modules/cors/README.md delete mode 100644 node_modules/cors/lib/index.js delete mode 100644 node_modules/cors/package.json delete mode 100644 node_modules/debug/.coveralls.yml delete mode 100644 node_modules/debug/.eslintrc delete mode 100644 node_modules/debug/.npmignore delete mode 100644 node_modules/debug/.travis.yml delete mode 100644 node_modules/debug/CHANGELOG.md delete mode 100644 node_modules/debug/LICENSE delete mode 100644 node_modules/debug/Makefile delete mode 100644 node_modules/debug/README.md delete mode 100644 node_modules/debug/component.json delete mode 100644 node_modules/debug/karma.conf.js delete mode 100644 node_modules/debug/node.js delete mode 100644 node_modules/debug/package.json delete mode 100644 node_modules/debug/src/browser.js delete mode 100644 node_modules/debug/src/debug.js delete mode 100644 node_modules/debug/src/index.js delete mode 100644 node_modules/debug/src/inspector-log.js delete mode 100644 node_modules/debug/src/node.js delete mode 100644 node_modules/decode-uri-component/index.js delete mode 100644 node_modules/decode-uri-component/license delete mode 100644 node_modules/decode-uri-component/package.json delete mode 100644 node_modules/decode-uri-component/readme.md delete mode 100644 node_modules/define-property/CHANGELOG.md delete mode 100644 node_modules/define-property/LICENSE delete mode 100644 node_modules/define-property/README.md delete mode 100644 node_modules/define-property/index.js delete mode 100644 node_modules/define-property/package.json delete mode 100644 node_modules/depd/History.md delete mode 100644 node_modules/depd/LICENSE delete mode 100644 node_modules/depd/Readme.md delete mode 100644 node_modules/depd/index.js delete mode 100644 node_modules/depd/lib/browser/index.js delete mode 100644 node_modules/depd/package.json delete mode 100644 node_modules/destroy/LICENSE delete mode 100644 node_modules/destroy/README.md delete mode 100644 node_modules/destroy/index.js delete mode 100644 node_modules/destroy/package.json delete mode 100644 node_modules/duplexer/.travis.yml delete mode 100644 node_modules/duplexer/LICENCE delete mode 100644 node_modules/duplexer/README.md delete mode 100644 node_modules/duplexer/index.js delete mode 100644 node_modules/duplexer/package.json delete mode 100644 node_modules/duplexer/test/index.js delete mode 100644 node_modules/ee-first/LICENSE delete mode 100644 node_modules/ee-first/README.md delete mode 100644 node_modules/ee-first/index.js delete mode 100644 node_modules/ee-first/package.json delete mode 100644 node_modules/encodeurl/HISTORY.md delete mode 100644 node_modules/encodeurl/LICENSE delete mode 100644 node_modules/encodeurl/README.md delete mode 100644 node_modules/encodeurl/index.js delete mode 100644 node_modules/encodeurl/package.json delete mode 100644 node_modules/escape-html/LICENSE delete mode 100644 node_modules/escape-html/Readme.md delete mode 100644 node_modules/escape-html/index.js delete mode 100644 node_modules/escape-html/package.json delete mode 100644 node_modules/etag/HISTORY.md delete mode 100644 node_modules/etag/LICENSE delete mode 100644 node_modules/etag/README.md delete mode 100644 node_modules/etag/index.js delete mode 100644 node_modules/etag/package.json delete mode 100644 node_modules/event-stream/.npmignore delete mode 100644 node_modules/event-stream/.travis.yml delete mode 100644 node_modules/event-stream/LICENCE delete mode 100644 node_modules/event-stream/examples/pretty.js delete mode 100644 node_modules/event-stream/index.js delete mode 100644 node_modules/event-stream/package.json delete mode 100644 node_modules/event-stream/readme.markdown delete mode 100644 node_modules/event-stream/test/connect.asynct.js delete mode 100644 node_modules/event-stream/test/helper/index.js delete mode 100644 node_modules/event-stream/test/merge.asynct.js delete mode 100644 node_modules/event-stream/test/parse.asynct.js delete mode 100644 node_modules/event-stream/test/pause.asynct.js delete mode 100644 node_modules/event-stream/test/pipeline.asynct.js delete mode 100644 node_modules/event-stream/test/readArray.asynct.js delete mode 100644 node_modules/event-stream/test/readable.asynct.js delete mode 100644 node_modules/event-stream/test/replace.asynct.js delete mode 100644 node_modules/event-stream/test/simple-map.asynct.js delete mode 100644 node_modules/event-stream/test/spec.asynct.js delete mode 100644 node_modules/event-stream/test/split.asynct.js delete mode 100644 node_modules/event-stream/test/stringify.js delete mode 100644 node_modules/event-stream/test/writeArray.asynct.js delete mode 100644 node_modules/expand-brackets/LICENSE delete mode 100644 node_modules/expand-brackets/README.md delete mode 100644 node_modules/expand-brackets/changelog.md delete mode 100644 node_modules/expand-brackets/index.js delete mode 100644 node_modules/expand-brackets/lib/compilers.js delete mode 100644 node_modules/expand-brackets/lib/parsers.js delete mode 100644 node_modules/expand-brackets/lib/utils.js delete mode 100644 node_modules/expand-brackets/node_modules/define-property/LICENSE delete mode 100644 node_modules/expand-brackets/node_modules/define-property/README.md delete mode 100644 node_modules/expand-brackets/node_modules/define-property/index.js delete mode 100644 node_modules/expand-brackets/node_modules/define-property/package.json delete mode 100644 node_modules/expand-brackets/node_modules/is-accessor-descriptor/LICENSE delete mode 100644 node_modules/expand-brackets/node_modules/is-accessor-descriptor/README.md delete mode 100644 node_modules/expand-brackets/node_modules/is-accessor-descriptor/index.js delete mode 100644 node_modules/expand-brackets/node_modules/is-accessor-descriptor/package.json delete mode 100644 node_modules/expand-brackets/node_modules/is-data-descriptor/LICENSE delete mode 100644 node_modules/expand-brackets/node_modules/is-data-descriptor/README.md delete mode 100644 node_modules/expand-brackets/node_modules/is-data-descriptor/index.js delete mode 100644 node_modules/expand-brackets/node_modules/is-data-descriptor/package.json delete mode 100644 node_modules/expand-brackets/node_modules/is-descriptor/LICENSE delete mode 100644 node_modules/expand-brackets/node_modules/is-descriptor/README.md delete mode 100644 node_modules/expand-brackets/node_modules/is-descriptor/index.js delete mode 100644 node_modules/expand-brackets/node_modules/is-descriptor/node_modules/kind-of/LICENSE delete mode 100644 node_modules/expand-brackets/node_modules/is-descriptor/node_modules/kind-of/README.md delete mode 100644 node_modules/expand-brackets/node_modules/is-descriptor/node_modules/kind-of/index.js delete mode 100644 node_modules/expand-brackets/node_modules/is-descriptor/node_modules/kind-of/package.json delete mode 100644 node_modules/expand-brackets/node_modules/is-descriptor/package.json delete mode 100644 node_modules/expand-brackets/package.json delete mode 100644 node_modules/extend-shallow/LICENSE delete mode 100644 node_modules/extend-shallow/README.md delete mode 100644 node_modules/extend-shallow/index.js delete mode 100644 node_modules/extend-shallow/package.json delete mode 100644 node_modules/extglob/LICENSE delete mode 100644 node_modules/extglob/README.md delete mode 100644 node_modules/extglob/changelog.md delete mode 100644 node_modules/extglob/index.js delete mode 100644 node_modules/extglob/lib/.DS_Store delete mode 100644 node_modules/extglob/lib/compilers.js delete mode 100644 node_modules/extglob/lib/extglob.js delete mode 100644 node_modules/extglob/lib/parsers.js delete mode 100644 node_modules/extglob/lib/utils.js delete mode 100644 node_modules/extglob/node_modules/define-property/LICENSE delete mode 100644 node_modules/extglob/node_modules/define-property/README.md delete mode 100644 node_modules/extglob/node_modules/define-property/index.js delete mode 100644 node_modules/extglob/node_modules/define-property/package.json delete mode 100644 node_modules/extglob/package.json delete mode 100644 node_modules/faye-websocket/CHANGELOG.md delete mode 100644 node_modules/faye-websocket/LICENSE.md delete mode 100644 node_modules/faye-websocket/README.md delete mode 100644 node_modules/faye-websocket/lib/faye/eventsource.js delete mode 100644 node_modules/faye-websocket/lib/faye/websocket.js delete mode 100644 node_modules/faye-websocket/lib/faye/websocket/api.js delete mode 100644 node_modules/faye-websocket/lib/faye/websocket/api/event.js delete mode 100644 node_modules/faye-websocket/lib/faye/websocket/api/event_target.js delete mode 100644 node_modules/faye-websocket/lib/faye/websocket/client.js delete mode 100644 node_modules/faye-websocket/package.json delete mode 100644 node_modules/fill-range/LICENSE delete mode 100644 node_modules/fill-range/README.md delete mode 100644 node_modules/fill-range/index.js delete mode 100644 node_modules/fill-range/package.json delete mode 100644 node_modules/finalhandler/HISTORY.md delete mode 100644 node_modules/finalhandler/LICENSE delete mode 100644 node_modules/finalhandler/README.md delete mode 100644 node_modules/finalhandler/index.js delete mode 100644 node_modules/finalhandler/package.json delete mode 100644 node_modules/for-in/LICENSE delete mode 100644 node_modules/for-in/README.md delete mode 100644 node_modules/for-in/index.js delete mode 100644 node_modules/for-in/package.json delete mode 100644 node_modules/fragment-cache/LICENSE delete mode 100644 node_modules/fragment-cache/README.md delete mode 100644 node_modules/fragment-cache/index.js delete mode 100644 node_modules/fragment-cache/package.json delete mode 100644 node_modules/fresh/HISTORY.md delete mode 100644 node_modules/fresh/LICENSE delete mode 100644 node_modules/fresh/README.md delete mode 100644 node_modules/fresh/index.js delete mode 100644 node_modules/fresh/package.json delete mode 100644 node_modules/from/.npmignore delete mode 100644 node_modules/from/.travis.yml delete mode 100644 node_modules/from/LICENSE.APACHE2 delete mode 100644 node_modules/from/LICENSE.MIT delete mode 100644 node_modules/from/index.js delete mode 100644 node_modules/from/package.json delete mode 100644 node_modules/from/readme.markdown delete mode 100644 node_modules/from/test/index.js delete mode 100644 node_modules/get-value/LICENSE delete mode 100644 node_modules/get-value/index.js delete mode 100644 node_modules/get-value/package.json delete mode 100644 node_modules/glob-parent/LICENSE delete mode 100644 node_modules/glob-parent/README.md delete mode 100644 node_modules/glob-parent/index.js delete mode 100644 node_modules/glob-parent/node_modules/is-glob/LICENSE delete mode 100644 node_modules/glob-parent/node_modules/is-glob/README.md delete mode 100644 node_modules/glob-parent/node_modules/is-glob/index.js delete mode 100644 node_modules/glob-parent/node_modules/is-glob/package.json delete mode 100644 node_modules/glob-parent/package.json delete mode 100644 node_modules/graceful-fs/LICENSE delete mode 100644 node_modules/graceful-fs/README.md delete mode 100644 node_modules/graceful-fs/clone.js delete mode 100644 node_modules/graceful-fs/graceful-fs.js delete mode 100644 node_modules/graceful-fs/legacy-streams.js delete mode 100644 node_modules/graceful-fs/package.json delete mode 100644 node_modules/graceful-fs/polyfills.js delete mode 100644 node_modules/has-value/LICENSE delete mode 100644 node_modules/has-value/README.md delete mode 100644 node_modules/has-value/index.js delete mode 100644 node_modules/has-value/package.json delete mode 100644 node_modules/has-values/LICENSE delete mode 100644 node_modules/has-values/README.md delete mode 100644 node_modules/has-values/index.js delete mode 100644 node_modules/has-values/node_modules/kind-of/LICENSE delete mode 100644 node_modules/has-values/node_modules/kind-of/README.md delete mode 100644 node_modules/has-values/node_modules/kind-of/index.js delete mode 100644 node_modules/has-values/node_modules/kind-of/package.json delete mode 100644 node_modules/has-values/package.json delete mode 100644 node_modules/http-auth/.npmignore delete mode 100644 node_modules/http-auth/LICENSE delete mode 100644 node_modules/http-auth/README.md delete mode 100644 node_modules/http-auth/package.json delete mode 100644 node_modules/http-auth/src/auth/base.js delete mode 100644 node_modules/http-auth/src/auth/basic.js delete mode 100644 node_modules/http-auth/src/auth/digest.js delete mode 100644 node_modules/http-auth/src/auth/utils.js delete mode 100644 node_modules/http-auth/src/http-auth.js delete mode 100644 node_modules/http-auth/src/server/connect.js delete mode 100644 node_modules/http-auth/src/server/hapi.js delete mode 100644 node_modules/http-auth/src/server/http.js delete mode 100644 node_modules/http-auth/src/server/https.js delete mode 100644 node_modules/http-auth/src/server/koa.js delete mode 100644 node_modules/http-auth/src/server/passport.js delete mode 100644 node_modules/http-auth/src/server/proxy.js delete mode 100644 node_modules/http-errors/HISTORY.md delete mode 100644 node_modules/http-errors/LICENSE delete mode 100644 node_modules/http-errors/README.md delete mode 100644 node_modules/http-errors/index.js delete mode 100644 node_modules/http-errors/node_modules/statuses/HISTORY.md delete mode 100644 node_modules/http-errors/node_modules/statuses/LICENSE delete mode 100644 node_modules/http-errors/node_modules/statuses/README.md delete mode 100644 node_modules/http-errors/node_modules/statuses/codes.json delete mode 100644 node_modules/http-errors/node_modules/statuses/index.js delete mode 100644 node_modules/http-errors/node_modules/statuses/package.json delete mode 100644 node_modules/http-errors/package.json delete mode 100644 node_modules/http-parser-js/LICENSE.md delete mode 100644 node_modules/http-parser-js/README.md delete mode 100644 node_modules/http-parser-js/http-parser.d.ts delete mode 100644 node_modules/http-parser-js/http-parser.js delete mode 100644 node_modules/http-parser-js/package.json delete mode 100644 node_modules/inherits/LICENSE delete mode 100644 node_modules/inherits/README.md delete mode 100644 node_modules/inherits/inherits.js delete mode 100644 node_modules/inherits/inherits_browser.js delete mode 100644 node_modules/inherits/package.json delete mode 100644 node_modules/is-accessor-descriptor/LICENSE delete mode 100644 node_modules/is-accessor-descriptor/README.md delete mode 100644 node_modules/is-accessor-descriptor/index.js delete mode 100644 node_modules/is-accessor-descriptor/node_modules/kind-of/CHANGELOG.md delete mode 100644 node_modules/is-accessor-descriptor/node_modules/kind-of/LICENSE delete mode 100644 node_modules/is-accessor-descriptor/node_modules/kind-of/README.md delete mode 100644 node_modules/is-accessor-descriptor/node_modules/kind-of/index.js delete mode 100644 node_modules/is-accessor-descriptor/node_modules/kind-of/package.json delete mode 100644 node_modules/is-accessor-descriptor/package.json delete mode 100644 node_modules/is-binary-path/index.js delete mode 100644 node_modules/is-binary-path/license delete mode 100644 node_modules/is-binary-path/package.json delete mode 100644 node_modules/is-binary-path/readme.md delete mode 100644 node_modules/is-buffer/LICENSE delete mode 100644 node_modules/is-buffer/README.md delete mode 100644 node_modules/is-buffer/index.js delete mode 100644 node_modules/is-buffer/package.json delete mode 100644 node_modules/is-buffer/test/basic.js delete mode 100644 node_modules/is-data-descriptor/LICENSE delete mode 100644 node_modules/is-data-descriptor/README.md delete mode 100644 node_modules/is-data-descriptor/index.js delete mode 100644 node_modules/is-data-descriptor/node_modules/kind-of/CHANGELOG.md delete mode 100644 node_modules/is-data-descriptor/node_modules/kind-of/LICENSE delete mode 100644 node_modules/is-data-descriptor/node_modules/kind-of/README.md delete mode 100644 node_modules/is-data-descriptor/node_modules/kind-of/index.js delete mode 100644 node_modules/is-data-descriptor/node_modules/kind-of/package.json delete mode 100644 node_modules/is-data-descriptor/package.json delete mode 100644 node_modules/is-descriptor/LICENSE delete mode 100644 node_modules/is-descriptor/README.md delete mode 100644 node_modules/is-descriptor/index.js delete mode 100644 node_modules/is-descriptor/node_modules/kind-of/CHANGELOG.md delete mode 100644 node_modules/is-descriptor/node_modules/kind-of/LICENSE delete mode 100644 node_modules/is-descriptor/node_modules/kind-of/README.md delete mode 100644 node_modules/is-descriptor/node_modules/kind-of/index.js delete mode 100644 node_modules/is-descriptor/node_modules/kind-of/package.json delete mode 100644 node_modules/is-descriptor/package.json delete mode 100644 node_modules/is-extendable/LICENSE delete mode 100644 node_modules/is-extendable/README.md delete mode 100644 node_modules/is-extendable/index.js delete mode 100644 node_modules/is-extendable/package.json delete mode 100644 node_modules/is-extglob/LICENSE delete mode 100644 node_modules/is-extglob/README.md delete mode 100644 node_modules/is-extglob/index.js delete mode 100644 node_modules/is-extglob/package.json delete mode 100644 node_modules/is-glob/LICENSE delete mode 100644 node_modules/is-glob/README.md delete mode 100644 node_modules/is-glob/index.js delete mode 100644 node_modules/is-glob/package.json delete mode 100644 node_modules/is-number/LICENSE delete mode 100644 node_modules/is-number/README.md delete mode 100644 node_modules/is-number/index.js delete mode 100644 node_modules/is-number/package.json delete mode 100644 node_modules/is-plain-object/LICENSE delete mode 100644 node_modules/is-plain-object/README.md delete mode 100644 node_modules/is-plain-object/index.d.ts delete mode 100644 node_modules/is-plain-object/index.js delete mode 100644 node_modules/is-plain-object/package.json delete mode 100644 node_modules/is-windows/LICENSE delete mode 100644 node_modules/is-windows/README.md delete mode 100644 node_modules/is-windows/index.js delete mode 100644 node_modules/is-windows/package.json delete mode 100644 node_modules/is-wsl/index.js delete mode 100644 node_modules/is-wsl/license delete mode 100644 node_modules/is-wsl/package.json delete mode 100644 node_modules/is-wsl/readme.md delete mode 100644 node_modules/isarray/.npmignore delete mode 100644 node_modules/isarray/.travis.yml delete mode 100644 node_modules/isarray/Makefile delete mode 100644 node_modules/isarray/README.md delete mode 100644 node_modules/isarray/component.json delete mode 100644 node_modules/isarray/index.js delete mode 100644 node_modules/isarray/package.json delete mode 100644 node_modules/isarray/test.js delete mode 100644 node_modules/isobject/LICENSE delete mode 100644 node_modules/isobject/README.md delete mode 100644 node_modules/isobject/index.d.ts delete mode 100644 node_modules/isobject/index.js delete mode 100644 node_modules/isobject/package.json delete mode 100644 node_modules/kind-of/LICENSE delete mode 100644 node_modules/kind-of/README.md delete mode 100644 node_modules/kind-of/index.js delete mode 100644 node_modules/kind-of/package.json delete mode 100644 node_modules/live-server/.editorconfig delete mode 100644 node_modules/live-server/.github/CONTRIBUTING.md delete mode 100644 node_modules/live-server/.github/ISSUE_TEMPLATE.md delete mode 100644 node_modules/live-server/.travis.yml delete mode 100644 node_modules/live-server/README.md delete mode 100644 node_modules/live-server/index.js delete mode 100644 node_modules/live-server/injected.html delete mode 100755 node_modules/live-server/live-server.js delete mode 100644 node_modules/live-server/middleware/example.js delete mode 100644 node_modules/live-server/middleware/spa-ignore-assets.js delete mode 100644 node_modules/live-server/middleware/spa.js delete mode 100644 node_modules/live-server/package.json delete mode 100644 node_modules/live-server/test/acceptance.js delete mode 100644 node_modules/live-server/test/cli.js delete mode 100644 node_modules/live-server/test/conf/https.conf.js delete mode 100644 node_modules/live-server/test/conf/server.cert delete mode 100644 node_modules/live-server/test/conf/server.key delete mode 100644 node_modules/live-server/test/cors.js delete mode 100644 node_modules/live-server/test/data/fragment.html delete mode 100644 node_modules/live-server/test/data/htpasswd-test delete mode 100644 node_modules/live-server/test/data/index-caps.htm delete mode 100644 node_modules/live-server/test/data/index-head.html delete mode 100644 node_modules/live-server/test/data/index.html delete mode 100644 node_modules/live-server/test/data/middleware.js delete mode 100644 node_modules/live-server/test/data/style.css delete mode 100644 node_modules/live-server/test/data/sub/sub.html delete mode 100644 node_modules/live-server/test/data/test.svg delete mode 100644 node_modules/live-server/test/htpasswd.js delete mode 100644 node_modules/live-server/test/https.js delete mode 100644 node_modules/live-server/test/middleware.js delete mode 100644 node_modules/live-server/test/mount.js delete mode 100644 node_modules/live-server/test/proxy.js delete mode 100644 node_modules/live-server/test/spa.js delete mode 100644 node_modules/map-cache/LICENSE delete mode 100644 node_modules/map-cache/README.md delete mode 100644 node_modules/map-cache/index.js delete mode 100644 node_modules/map-cache/package.json delete mode 100644 node_modules/map-stream/.npmignore delete mode 100644 node_modules/map-stream/.travis.yml delete mode 100644 node_modules/map-stream/LICENCE delete mode 100644 node_modules/map-stream/examples/pretty.js delete mode 100644 node_modules/map-stream/index.js delete mode 100644 node_modules/map-stream/package.json delete mode 100644 node_modules/map-stream/readme.markdown delete mode 100644 node_modules/map-stream/test/simple-map.asynct.js delete mode 100644 node_modules/map-visit/LICENSE delete mode 100644 node_modules/map-visit/README.md delete mode 100644 node_modules/map-visit/index.js delete mode 100644 node_modules/map-visit/package.json delete mode 100644 node_modules/micromatch/CHANGELOG.md delete mode 100755 node_modules/micromatch/LICENSE delete mode 100644 node_modules/micromatch/README.md delete mode 100644 node_modules/micromatch/index.js delete mode 100644 node_modules/micromatch/lib/.DS_Store delete mode 100644 node_modules/micromatch/lib/cache.js delete mode 100644 node_modules/micromatch/lib/compilers.js delete mode 100644 node_modules/micromatch/lib/parsers.js delete mode 100644 node_modules/micromatch/lib/utils.js delete mode 100644 node_modules/micromatch/node_modules/extend-shallow/LICENSE delete mode 100644 node_modules/micromatch/node_modules/extend-shallow/README.md delete mode 100644 node_modules/micromatch/node_modules/extend-shallow/index.js delete mode 100644 node_modules/micromatch/node_modules/extend-shallow/package.json delete mode 100644 node_modules/micromatch/node_modules/is-extendable/LICENSE delete mode 100644 node_modules/micromatch/node_modules/is-extendable/README.md delete mode 100644 node_modules/micromatch/node_modules/is-extendable/index.d.ts delete mode 100644 node_modules/micromatch/node_modules/is-extendable/index.js delete mode 100644 node_modules/micromatch/node_modules/is-extendable/package.json delete mode 100644 node_modules/micromatch/node_modules/kind-of/CHANGELOG.md delete mode 100644 node_modules/micromatch/node_modules/kind-of/LICENSE delete mode 100644 node_modules/micromatch/node_modules/kind-of/README.md delete mode 100644 node_modules/micromatch/node_modules/kind-of/index.js delete mode 100644 node_modules/micromatch/node_modules/kind-of/package.json delete mode 100644 node_modules/micromatch/package.json delete mode 100644 node_modules/mime-db/HISTORY.md delete mode 100644 node_modules/mime-db/LICENSE delete mode 100644 node_modules/mime-db/README.md delete mode 100644 node_modules/mime-db/db.json delete mode 100644 node_modules/mime-db/index.js delete mode 100644 node_modules/mime-db/package.json delete mode 100644 node_modules/mime-types/HISTORY.md delete mode 100644 node_modules/mime-types/LICENSE delete mode 100644 node_modules/mime-types/README.md delete mode 100644 node_modules/mime-types/index.js delete mode 100644 node_modules/mime-types/package.json delete mode 100644 node_modules/mime/.npmignore delete mode 100644 node_modules/mime/CHANGELOG.md delete mode 100644 node_modules/mime/LICENSE delete mode 100644 node_modules/mime/README.md delete mode 100755 node_modules/mime/cli.js delete mode 100644 node_modules/mime/mime.js delete mode 100644 node_modules/mime/package.json delete mode 100755 node_modules/mime/src/build.js delete mode 100644 node_modules/mime/src/test.js delete mode 100644 node_modules/mime/types.json delete mode 100644 node_modules/mixin-deep/LICENSE delete mode 100644 node_modules/mixin-deep/README.md delete mode 100644 node_modules/mixin-deep/index.js delete mode 100644 node_modules/mixin-deep/node_modules/is-extendable/LICENSE delete mode 100644 node_modules/mixin-deep/node_modules/is-extendable/README.md delete mode 100644 node_modules/mixin-deep/node_modules/is-extendable/index.d.ts delete mode 100644 node_modules/mixin-deep/node_modules/is-extendable/index.js delete mode 100644 node_modules/mixin-deep/node_modules/is-extendable/package.json delete mode 100644 node_modules/mixin-deep/package.json delete mode 100644 node_modules/morgan/HISTORY.md delete mode 100644 node_modules/morgan/LICENSE delete mode 100644 node_modules/morgan/README.md delete mode 100644 node_modules/morgan/index.js delete mode 100644 node_modules/morgan/package.json delete mode 100644 node_modules/ms/index.js delete mode 100644 node_modules/ms/license.md delete mode 100644 node_modules/ms/package.json delete mode 100644 node_modules/ms/readme.md delete mode 100644 node_modules/nanomatch/CHANGELOG.md delete mode 100644 node_modules/nanomatch/LICENSE delete mode 100644 node_modules/nanomatch/README.md delete mode 100644 node_modules/nanomatch/index.js delete mode 100644 node_modules/nanomatch/lib/cache.js delete mode 100644 node_modules/nanomatch/lib/compilers.js delete mode 100644 node_modules/nanomatch/lib/parsers.js delete mode 100644 node_modules/nanomatch/lib/utils.js delete mode 100644 node_modules/nanomatch/node_modules/extend-shallow/LICENSE delete mode 100644 node_modules/nanomatch/node_modules/extend-shallow/README.md delete mode 100644 node_modules/nanomatch/node_modules/extend-shallow/index.js delete mode 100644 node_modules/nanomatch/node_modules/extend-shallow/package.json delete mode 100644 node_modules/nanomatch/node_modules/is-extendable/LICENSE delete mode 100644 node_modules/nanomatch/node_modules/is-extendable/README.md delete mode 100644 node_modules/nanomatch/node_modules/is-extendable/index.d.ts delete mode 100644 node_modules/nanomatch/node_modules/is-extendable/index.js delete mode 100644 node_modules/nanomatch/node_modules/is-extendable/package.json delete mode 100644 node_modules/nanomatch/node_modules/kind-of/CHANGELOG.md delete mode 100644 node_modules/nanomatch/node_modules/kind-of/LICENSE delete mode 100644 node_modules/nanomatch/node_modules/kind-of/README.md delete mode 100644 node_modules/nanomatch/node_modules/kind-of/index.js delete mode 100644 node_modules/nanomatch/node_modules/kind-of/package.json delete mode 100644 node_modules/nanomatch/package.json delete mode 100644 node_modules/negotiator/HISTORY.md delete mode 100644 node_modules/negotiator/LICENSE delete mode 100644 node_modules/negotiator/README.md delete mode 100644 node_modules/negotiator/index.js delete mode 100644 node_modules/negotiator/lib/charset.js delete mode 100644 node_modules/negotiator/lib/encoding.js delete mode 100644 node_modules/negotiator/lib/language.js delete mode 100644 node_modules/negotiator/lib/mediaType.js delete mode 100644 node_modules/negotiator/package.json delete mode 100644 node_modules/normalize-path/LICENSE delete mode 100644 node_modules/normalize-path/README.md delete mode 100644 node_modules/normalize-path/index.js delete mode 100644 node_modules/normalize-path/package.json delete mode 100644 node_modules/object-assign/index.js delete mode 100644 node_modules/object-assign/license delete mode 100644 node_modules/object-assign/package.json delete mode 100644 node_modules/object-assign/readme.md delete mode 100644 node_modules/object-copy/LICENSE delete mode 100644 node_modules/object-copy/index.js delete mode 100644 node_modules/object-copy/node_modules/define-property/LICENSE delete mode 100644 node_modules/object-copy/node_modules/define-property/README.md delete mode 100644 node_modules/object-copy/node_modules/define-property/index.js delete mode 100644 node_modules/object-copy/node_modules/define-property/package.json delete mode 100644 node_modules/object-copy/node_modules/is-accessor-descriptor/LICENSE delete mode 100644 node_modules/object-copy/node_modules/is-accessor-descriptor/README.md delete mode 100644 node_modules/object-copy/node_modules/is-accessor-descriptor/index.js delete mode 100644 node_modules/object-copy/node_modules/is-accessor-descriptor/package.json delete mode 100644 node_modules/object-copy/node_modules/is-data-descriptor/LICENSE delete mode 100644 node_modules/object-copy/node_modules/is-data-descriptor/README.md delete mode 100644 node_modules/object-copy/node_modules/is-data-descriptor/index.js delete mode 100644 node_modules/object-copy/node_modules/is-data-descriptor/package.json delete mode 100644 node_modules/object-copy/node_modules/is-descriptor/LICENSE delete mode 100644 node_modules/object-copy/node_modules/is-descriptor/README.md delete mode 100644 node_modules/object-copy/node_modules/is-descriptor/index.js delete mode 100644 node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of/LICENSE delete mode 100644 node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of/README.md delete mode 100644 node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of/index.js delete mode 100644 node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of/package.json delete mode 100644 node_modules/object-copy/node_modules/is-descriptor/package.json delete mode 100644 node_modules/object-copy/package.json delete mode 100644 node_modules/object-visit/LICENSE delete mode 100644 node_modules/object-visit/README.md delete mode 100644 node_modules/object-visit/index.js delete mode 100644 node_modules/object-visit/package.json delete mode 100644 node_modules/object.pick/LICENSE delete mode 100644 node_modules/object.pick/README.md delete mode 100644 node_modules/object.pick/index.js delete mode 100644 node_modules/object.pick/package.json delete mode 100644 node_modules/on-finished/HISTORY.md delete mode 100644 node_modules/on-finished/LICENSE delete mode 100644 node_modules/on-finished/README.md delete mode 100644 node_modules/on-finished/index.js delete mode 100644 node_modules/on-finished/package.json delete mode 100644 node_modules/on-headers/HISTORY.md delete mode 100644 node_modules/on-headers/LICENSE delete mode 100644 node_modules/on-headers/README.md delete mode 100644 node_modules/on-headers/index.js delete mode 100644 node_modules/on-headers/package.json delete mode 100644 node_modules/opn/index.js delete mode 100644 node_modules/opn/license delete mode 100644 node_modules/opn/package.json delete mode 100644 node_modules/opn/readme.md delete mode 100755 node_modules/opn/xdg-open delete mode 100644 node_modules/parseurl/HISTORY.md delete mode 100644 node_modules/parseurl/LICENSE delete mode 100644 node_modules/parseurl/README.md delete mode 100644 node_modules/parseurl/index.js delete mode 100644 node_modules/parseurl/package.json delete mode 100644 node_modules/pascalcase/LICENSE delete mode 100644 node_modules/pascalcase/README.md delete mode 100644 node_modules/pascalcase/index.js delete mode 100644 node_modules/pascalcase/package.json delete mode 100644 node_modules/path-dirname/index.js delete mode 100644 node_modules/path-dirname/license delete mode 100644 node_modules/path-dirname/package.json delete mode 100644 node_modules/path-dirname/readme.md delete mode 100644 node_modules/path-is-absolute/index.js delete mode 100644 node_modules/path-is-absolute/license delete mode 100644 node_modules/path-is-absolute/package.json delete mode 100644 node_modules/path-is-absolute/readme.md delete mode 100644 node_modules/pause-stream/.npmignore delete mode 100644 node_modules/pause-stream/LICENSE delete mode 100644 node_modules/pause-stream/index.js delete mode 100644 node_modules/pause-stream/package.json delete mode 100644 node_modules/pause-stream/readme.markdown delete mode 100644 node_modules/pause-stream/test/index.js delete mode 100644 node_modules/pause-stream/test/pause-end.js delete mode 100644 node_modules/posix-character-classes/LICENSE delete mode 100644 node_modules/posix-character-classes/README.md delete mode 100644 node_modules/posix-character-classes/index.js delete mode 100644 node_modules/posix-character-classes/package.json delete mode 100644 node_modules/process-nextick-args/index.js delete mode 100644 node_modules/process-nextick-args/license.md delete mode 100644 node_modules/process-nextick-args/package.json delete mode 100644 node_modules/process-nextick-args/readme.md delete mode 100644 node_modules/proxy-middleware/.npmignore delete mode 100644 node_modules/proxy-middleware/.travis.yml delete mode 100644 node_modules/proxy-middleware/LICENSE delete mode 100644 node_modules/proxy-middleware/README.md delete mode 100644 node_modules/proxy-middleware/index.js delete mode 100644 node_modules/proxy-middleware/package.json delete mode 100644 node_modules/range-parser/HISTORY.md delete mode 100644 node_modules/range-parser/LICENSE delete mode 100644 node_modules/range-parser/README.md delete mode 100644 node_modules/range-parser/index.js delete mode 100644 node_modules/range-parser/package.json delete mode 100644 node_modules/readable-stream/.travis.yml delete mode 100644 node_modules/readable-stream/CONTRIBUTING.md delete mode 100644 node_modules/readable-stream/GOVERNANCE.md delete mode 100644 node_modules/readable-stream/LICENSE delete mode 100644 node_modules/readable-stream/README.md delete mode 100644 node_modules/readable-stream/doc/wg-meetings/2015-01-30.md delete mode 100644 node_modules/readable-stream/duplex-browser.js delete mode 100644 node_modules/readable-stream/duplex.js delete mode 100644 node_modules/readable-stream/lib/_stream_duplex.js delete mode 100644 node_modules/readable-stream/lib/_stream_passthrough.js delete mode 100644 node_modules/readable-stream/lib/_stream_readable.js delete mode 100644 node_modules/readable-stream/lib/_stream_transform.js delete mode 100644 node_modules/readable-stream/lib/_stream_writable.js delete mode 100644 node_modules/readable-stream/lib/internal/streams/BufferList.js delete mode 100644 node_modules/readable-stream/lib/internal/streams/destroy.js delete mode 100644 node_modules/readable-stream/lib/internal/streams/stream-browser.js delete mode 100644 node_modules/readable-stream/lib/internal/streams/stream.js delete mode 100644 node_modules/readable-stream/package.json delete mode 100644 node_modules/readable-stream/passthrough.js delete mode 100644 node_modules/readable-stream/readable-browser.js delete mode 100644 node_modules/readable-stream/readable.js delete mode 100644 node_modules/readable-stream/transform.js delete mode 100644 node_modules/readable-stream/writable-browser.js delete mode 100644 node_modules/readable-stream/writable.js delete mode 100644 node_modules/readdirp/LICENSE delete mode 100644 node_modules/readdirp/README.md delete mode 100644 node_modules/readdirp/package.json delete mode 100644 node_modules/readdirp/readdirp.js delete mode 100644 node_modules/readdirp/stream-api.js delete mode 100644 node_modules/regex-not/LICENSE delete mode 100644 node_modules/regex-not/README.md delete mode 100644 node_modules/regex-not/index.js delete mode 100644 node_modules/regex-not/node_modules/extend-shallow/LICENSE delete mode 100644 node_modules/regex-not/node_modules/extend-shallow/README.md delete mode 100644 node_modules/regex-not/node_modules/extend-shallow/index.js delete mode 100644 node_modules/regex-not/node_modules/extend-shallow/package.json delete mode 100644 node_modules/regex-not/node_modules/is-extendable/LICENSE delete mode 100644 node_modules/regex-not/node_modules/is-extendable/README.md delete mode 100644 node_modules/regex-not/node_modules/is-extendable/index.d.ts delete mode 100644 node_modules/regex-not/node_modules/is-extendable/index.js delete mode 100644 node_modules/regex-not/node_modules/is-extendable/package.json delete mode 100644 node_modules/regex-not/package.json delete mode 100644 node_modules/remove-trailing-separator/history.md delete mode 100644 node_modules/remove-trailing-separator/index.js delete mode 100644 node_modules/remove-trailing-separator/license delete mode 100644 node_modules/remove-trailing-separator/package.json delete mode 100644 node_modules/remove-trailing-separator/readme.md delete mode 100644 node_modules/repeat-element/LICENSE delete mode 100644 node_modules/repeat-element/README.md delete mode 100644 node_modules/repeat-element/index.js delete mode 100644 node_modules/repeat-element/package.json delete mode 100644 node_modules/repeat-string/LICENSE delete mode 100644 node_modules/repeat-string/README.md delete mode 100644 node_modules/repeat-string/index.js delete mode 100644 node_modules/repeat-string/package.json delete mode 100644 node_modules/resolve-url/.jshintrc delete mode 100644 node_modules/resolve-url/LICENSE delete mode 100644 node_modules/resolve-url/bower.json delete mode 100644 node_modules/resolve-url/changelog.md delete mode 100644 node_modules/resolve-url/component.json delete mode 100644 node_modules/resolve-url/package.json delete mode 100644 node_modules/resolve-url/readme.md delete mode 100644 node_modules/resolve-url/resolve-url.js delete mode 100644 node_modules/resolve-url/test/resolve-url.js delete mode 100644 node_modules/ret/LICENSE delete mode 100644 node_modules/ret/README.md delete mode 100644 node_modules/ret/lib/index.js delete mode 100644 node_modules/ret/lib/positions.js delete mode 100644 node_modules/ret/lib/sets.js delete mode 100644 node_modules/ret/lib/types.js delete mode 100644 node_modules/ret/lib/util.js delete mode 100644 node_modules/ret/package.json delete mode 100644 node_modules/safe-buffer/LICENSE delete mode 100644 node_modules/safe-buffer/README.md delete mode 100644 node_modules/safe-buffer/index.d.ts delete mode 100644 node_modules/safe-buffer/index.js delete mode 100644 node_modules/safe-buffer/package.json delete mode 100644 node_modules/safe-regex/.travis.yml delete mode 100644 node_modules/safe-regex/LICENSE delete mode 100644 node_modules/safe-regex/example/safe.js delete mode 100644 node_modules/safe-regex/index.js delete mode 100644 node_modules/safe-regex/package.json delete mode 100644 node_modules/safe-regex/readme.markdown delete mode 100644 node_modules/safe-regex/test/regex.js delete mode 100644 node_modules/send/HISTORY.md delete mode 100644 node_modules/send/LICENSE delete mode 100644 node_modules/send/README.md delete mode 100644 node_modules/send/SECURITY.md delete mode 100644 node_modules/send/index.js delete mode 100644 node_modules/send/node_modules/ms/index.js delete mode 100644 node_modules/send/node_modules/ms/license.md delete mode 100644 node_modules/send/node_modules/ms/package.json delete mode 100644 node_modules/send/node_modules/ms/readme.md delete mode 100644 node_modules/send/node_modules/on-finished/HISTORY.md delete mode 100644 node_modules/send/node_modules/on-finished/LICENSE delete mode 100644 node_modules/send/node_modules/on-finished/README.md delete mode 100644 node_modules/send/node_modules/on-finished/index.js delete mode 100644 node_modules/send/node_modules/on-finished/package.json delete mode 100644 node_modules/send/node_modules/statuses/HISTORY.md delete mode 100644 node_modules/send/node_modules/statuses/LICENSE delete mode 100644 node_modules/send/node_modules/statuses/README.md delete mode 100644 node_modules/send/node_modules/statuses/codes.json delete mode 100644 node_modules/send/node_modules/statuses/index.js delete mode 100644 node_modules/send/node_modules/statuses/package.json delete mode 100644 node_modules/send/package.json delete mode 100644 node_modules/serve-index/HISTORY.md delete mode 100644 node_modules/serve-index/LICENSE delete mode 100644 node_modules/serve-index/README.md delete mode 100644 node_modules/serve-index/index.js delete mode 100644 node_modules/serve-index/node_modules/depd/History.md delete mode 100644 node_modules/serve-index/node_modules/depd/LICENSE delete mode 100644 node_modules/serve-index/node_modules/depd/Readme.md delete mode 100644 node_modules/serve-index/node_modules/depd/index.js delete mode 100644 node_modules/serve-index/node_modules/depd/lib/browser/index.js delete mode 100644 node_modules/serve-index/node_modules/depd/lib/compat/callsite-tostring.js delete mode 100644 node_modules/serve-index/node_modules/depd/lib/compat/event-listener-count.js delete mode 100644 node_modules/serve-index/node_modules/depd/lib/compat/index.js delete mode 100644 node_modules/serve-index/node_modules/depd/package.json delete mode 100644 node_modules/serve-index/node_modules/http-errors/HISTORY.md delete mode 100644 node_modules/serve-index/node_modules/http-errors/LICENSE delete mode 100644 node_modules/serve-index/node_modules/http-errors/README.md delete mode 100644 node_modules/serve-index/node_modules/http-errors/index.js delete mode 100644 node_modules/serve-index/node_modules/http-errors/package.json delete mode 100644 node_modules/serve-index/node_modules/inherits/LICENSE delete mode 100644 node_modules/serve-index/node_modules/inherits/README.md delete mode 100644 node_modules/serve-index/node_modules/inherits/inherits.js delete mode 100644 node_modules/serve-index/node_modules/inherits/inherits_browser.js delete mode 100644 node_modules/serve-index/node_modules/inherits/package.json delete mode 100644 node_modules/serve-index/node_modules/setprototypeof/LICENSE delete mode 100644 node_modules/serve-index/node_modules/setprototypeof/README.md delete mode 100644 node_modules/serve-index/node_modules/setprototypeof/index.d.ts delete mode 100644 node_modules/serve-index/node_modules/setprototypeof/index.js delete mode 100644 node_modules/serve-index/node_modules/setprototypeof/package.json delete mode 100644 node_modules/serve-index/package.json delete mode 100644 node_modules/serve-index/public/directory.html delete mode 100644 node_modules/serve-index/public/icons/application_xp.png delete mode 100644 node_modules/serve-index/public/icons/application_xp_terminal.png delete mode 100644 node_modules/serve-index/public/icons/box.png delete mode 100644 node_modules/serve-index/public/icons/cd.png delete mode 100644 node_modules/serve-index/public/icons/controller.png delete mode 100644 node_modules/serve-index/public/icons/drive.png delete mode 100644 node_modules/serve-index/public/icons/film.png delete mode 100644 node_modules/serve-index/public/icons/folder.png delete mode 100644 node_modules/serve-index/public/icons/font.png delete mode 100644 node_modules/serve-index/public/icons/image.png delete mode 100644 node_modules/serve-index/public/icons/map.png delete mode 100644 node_modules/serve-index/public/icons/page.png delete mode 100644 node_modules/serve-index/public/icons/page_add.png delete mode 100644 node_modules/serve-index/public/icons/page_attach.png delete mode 100644 node_modules/serve-index/public/icons/page_code.png delete mode 100644 node_modules/serve-index/public/icons/page_copy.png delete mode 100644 node_modules/serve-index/public/icons/page_delete.png delete mode 100644 node_modules/serve-index/public/icons/page_edit.png delete mode 100644 node_modules/serve-index/public/icons/page_error.png delete mode 100644 node_modules/serve-index/public/icons/page_excel.png delete mode 100644 node_modules/serve-index/public/icons/page_find.png delete mode 100644 node_modules/serve-index/public/icons/page_gear.png delete mode 100644 node_modules/serve-index/public/icons/page_go.png delete mode 100644 node_modules/serve-index/public/icons/page_green.png delete mode 100644 node_modules/serve-index/public/icons/page_key.png delete mode 100644 node_modules/serve-index/public/icons/page_lightning.png delete mode 100644 node_modules/serve-index/public/icons/page_link.png delete mode 100644 node_modules/serve-index/public/icons/page_paintbrush.png delete mode 100644 node_modules/serve-index/public/icons/page_paste.png delete mode 100644 node_modules/serve-index/public/icons/page_red.png delete mode 100644 node_modules/serve-index/public/icons/page_refresh.png delete mode 100644 node_modules/serve-index/public/icons/page_save.png delete mode 100644 node_modules/serve-index/public/icons/page_white.png delete mode 100644 node_modules/serve-index/public/icons/page_white_acrobat.png delete mode 100644 node_modules/serve-index/public/icons/page_white_actionscript.png delete mode 100644 node_modules/serve-index/public/icons/page_white_add.png delete mode 100644 node_modules/serve-index/public/icons/page_white_c.png delete mode 100644 node_modules/serve-index/public/icons/page_white_camera.png delete mode 100644 node_modules/serve-index/public/icons/page_white_cd.png delete mode 100644 node_modules/serve-index/public/icons/page_white_code.png delete mode 100644 node_modules/serve-index/public/icons/page_white_code_red.png delete mode 100644 node_modules/serve-index/public/icons/page_white_coldfusion.png delete mode 100644 node_modules/serve-index/public/icons/page_white_compressed.png delete mode 100644 node_modules/serve-index/public/icons/page_white_copy.png delete mode 100644 node_modules/serve-index/public/icons/page_white_cplusplus.png delete mode 100644 node_modules/serve-index/public/icons/page_white_csharp.png delete mode 100644 node_modules/serve-index/public/icons/page_white_cup.png delete mode 100644 node_modules/serve-index/public/icons/page_white_database.png delete mode 100644 node_modules/serve-index/public/icons/page_white_delete.png delete mode 100644 node_modules/serve-index/public/icons/page_white_dvd.png delete mode 100644 node_modules/serve-index/public/icons/page_white_edit.png delete mode 100644 node_modules/serve-index/public/icons/page_white_error.png delete mode 100644 node_modules/serve-index/public/icons/page_white_excel.png delete mode 100644 node_modules/serve-index/public/icons/page_white_find.png delete mode 100644 node_modules/serve-index/public/icons/page_white_flash.png delete mode 100644 node_modules/serve-index/public/icons/page_white_freehand.png delete mode 100644 node_modules/serve-index/public/icons/page_white_gear.png delete mode 100644 node_modules/serve-index/public/icons/page_white_get.png delete mode 100644 node_modules/serve-index/public/icons/page_white_go.png delete mode 100644 node_modules/serve-index/public/icons/page_white_h.png delete mode 100644 node_modules/serve-index/public/icons/page_white_horizontal.png delete mode 100644 node_modules/serve-index/public/icons/page_white_key.png delete mode 100644 node_modules/serve-index/public/icons/page_white_lightning.png delete mode 100644 node_modules/serve-index/public/icons/page_white_link.png delete mode 100644 node_modules/serve-index/public/icons/page_white_magnify.png delete mode 100644 node_modules/serve-index/public/icons/page_white_medal.png delete mode 100644 node_modules/serve-index/public/icons/page_white_office.png delete mode 100644 node_modules/serve-index/public/icons/page_white_paint.png delete mode 100644 node_modules/serve-index/public/icons/page_white_paintbrush.png delete mode 100644 node_modules/serve-index/public/icons/page_white_paste.png delete mode 100644 node_modules/serve-index/public/icons/page_white_php.png delete mode 100644 node_modules/serve-index/public/icons/page_white_picture.png delete mode 100644 node_modules/serve-index/public/icons/page_white_powerpoint.png delete mode 100644 node_modules/serve-index/public/icons/page_white_put.png delete mode 100644 node_modules/serve-index/public/icons/page_white_ruby.png delete mode 100644 node_modules/serve-index/public/icons/page_white_stack.png delete mode 100644 node_modules/serve-index/public/icons/page_white_star.png delete mode 100644 node_modules/serve-index/public/icons/page_white_swoosh.png delete mode 100644 node_modules/serve-index/public/icons/page_white_text.png delete mode 100644 node_modules/serve-index/public/icons/page_white_text_width.png delete mode 100644 node_modules/serve-index/public/icons/page_white_tux.png delete mode 100644 node_modules/serve-index/public/icons/page_white_vector.png delete mode 100644 node_modules/serve-index/public/icons/page_white_visualstudio.png delete mode 100644 node_modules/serve-index/public/icons/page_white_width.png delete mode 100644 node_modules/serve-index/public/icons/page_white_word.png delete mode 100644 node_modules/serve-index/public/icons/page_white_world.png delete mode 100644 node_modules/serve-index/public/icons/page_white_wrench.png delete mode 100644 node_modules/serve-index/public/icons/page_white_zip.png delete mode 100644 node_modules/serve-index/public/icons/page_word.png delete mode 100644 node_modules/serve-index/public/icons/page_world.png delete mode 100644 node_modules/serve-index/public/style.css delete mode 100644 node_modules/set-value/LICENSE delete mode 100644 node_modules/set-value/README.md delete mode 100644 node_modules/set-value/index.js delete mode 100644 node_modules/set-value/package.json delete mode 100644 node_modules/setprototypeof/LICENSE delete mode 100644 node_modules/setprototypeof/README.md delete mode 100644 node_modules/setprototypeof/index.d.ts delete mode 100644 node_modules/setprototypeof/index.js delete mode 100644 node_modules/setprototypeof/package.json delete mode 100644 node_modules/setprototypeof/test/index.js delete mode 100644 node_modules/snapdragon-node/LICENSE delete mode 100644 node_modules/snapdragon-node/README.md delete mode 100644 node_modules/snapdragon-node/index.js delete mode 100644 node_modules/snapdragon-node/node_modules/define-property/LICENSE delete mode 100644 node_modules/snapdragon-node/node_modules/define-property/README.md delete mode 100644 node_modules/snapdragon-node/node_modules/define-property/index.js delete mode 100644 node_modules/snapdragon-node/node_modules/define-property/package.json delete mode 100644 node_modules/snapdragon-node/package.json delete mode 100644 node_modules/snapdragon-util/LICENSE delete mode 100644 node_modules/snapdragon-util/README.md delete mode 100644 node_modules/snapdragon-util/index.js delete mode 100644 node_modules/snapdragon-util/package.json delete mode 100644 node_modules/snapdragon/LICENSE delete mode 100644 node_modules/snapdragon/README.md delete mode 100644 node_modules/snapdragon/index.js delete mode 100644 node_modules/snapdragon/lib/compiler.js delete mode 100644 node_modules/snapdragon/lib/parser.js delete mode 100644 node_modules/snapdragon/lib/position.js delete mode 100644 node_modules/snapdragon/lib/source-maps.js delete mode 100644 node_modules/snapdragon/lib/utils.js delete mode 100644 node_modules/snapdragon/node_modules/define-property/LICENSE delete mode 100644 node_modules/snapdragon/node_modules/define-property/README.md delete mode 100644 node_modules/snapdragon/node_modules/define-property/index.js delete mode 100644 node_modules/snapdragon/node_modules/define-property/package.json delete mode 100644 node_modules/snapdragon/node_modules/is-accessor-descriptor/LICENSE delete mode 100644 node_modules/snapdragon/node_modules/is-accessor-descriptor/README.md delete mode 100644 node_modules/snapdragon/node_modules/is-accessor-descriptor/index.js delete mode 100644 node_modules/snapdragon/node_modules/is-accessor-descriptor/package.json delete mode 100644 node_modules/snapdragon/node_modules/is-data-descriptor/LICENSE delete mode 100644 node_modules/snapdragon/node_modules/is-data-descriptor/README.md delete mode 100644 node_modules/snapdragon/node_modules/is-data-descriptor/index.js delete mode 100644 node_modules/snapdragon/node_modules/is-data-descriptor/package.json delete mode 100644 node_modules/snapdragon/node_modules/is-descriptor/LICENSE delete mode 100644 node_modules/snapdragon/node_modules/is-descriptor/README.md delete mode 100644 node_modules/snapdragon/node_modules/is-descriptor/index.js delete mode 100644 node_modules/snapdragon/node_modules/is-descriptor/node_modules/kind-of/LICENSE delete mode 100644 node_modules/snapdragon/node_modules/is-descriptor/node_modules/kind-of/README.md delete mode 100644 node_modules/snapdragon/node_modules/is-descriptor/node_modules/kind-of/index.js delete mode 100644 node_modules/snapdragon/node_modules/is-descriptor/node_modules/kind-of/package.json delete mode 100644 node_modules/snapdragon/node_modules/is-descriptor/package.json delete mode 100644 node_modules/snapdragon/package.json delete mode 100644 node_modules/source-map-resolve/LICENSE delete mode 100644 node_modules/source-map-resolve/changelog.md delete mode 100644 node_modules/source-map-resolve/lib/decode-uri-component.js delete mode 100644 node_modules/source-map-resolve/lib/resolve-url.js delete mode 100644 node_modules/source-map-resolve/lib/source-map-resolve-node.js delete mode 100644 node_modules/source-map-resolve/package.json delete mode 100644 node_modules/source-map-resolve/readme.md delete mode 100644 node_modules/source-map-resolve/source-map-resolve.js delete mode 100644 node_modules/source-map-url/LICENSE delete mode 100644 node_modules/source-map-url/changelog.md delete mode 100644 node_modules/source-map-url/package.json delete mode 100644 node_modules/source-map-url/readme.md delete mode 100644 node_modules/source-map-url/source-map-url.js delete mode 100644 node_modules/source-map/CHANGELOG.md delete mode 100644 node_modules/source-map/LICENSE delete mode 100644 node_modules/source-map/README.md delete mode 100644 node_modules/source-map/dist/source-map.debug.js delete mode 100644 node_modules/source-map/dist/source-map.js delete mode 100644 node_modules/source-map/dist/source-map.min.js delete mode 100644 node_modules/source-map/dist/source-map.min.js.map delete mode 100644 node_modules/source-map/lib/array-set.js delete mode 100644 node_modules/source-map/lib/base64-vlq.js delete mode 100644 node_modules/source-map/lib/base64.js delete mode 100644 node_modules/source-map/lib/binary-search.js delete mode 100644 node_modules/source-map/lib/mapping-list.js delete mode 100644 node_modules/source-map/lib/quick-sort.js delete mode 100644 node_modules/source-map/lib/source-map-consumer.js delete mode 100644 node_modules/source-map/lib/source-map-generator.js delete mode 100644 node_modules/source-map/lib/source-node.js delete mode 100644 node_modules/source-map/lib/util.js delete mode 100644 node_modules/source-map/package.json delete mode 100644 node_modules/source-map/source-map.js delete mode 100644 node_modules/split-string/LICENSE delete mode 100644 node_modules/split-string/README.md delete mode 100644 node_modules/split-string/index.js delete mode 100644 node_modules/split-string/node_modules/extend-shallow/LICENSE delete mode 100644 node_modules/split-string/node_modules/extend-shallow/README.md delete mode 100644 node_modules/split-string/node_modules/extend-shallow/index.js delete mode 100644 node_modules/split-string/node_modules/extend-shallow/package.json delete mode 100644 node_modules/split-string/node_modules/is-extendable/LICENSE delete mode 100644 node_modules/split-string/node_modules/is-extendable/README.md delete mode 100644 node_modules/split-string/node_modules/is-extendable/index.d.ts delete mode 100644 node_modules/split-string/node_modules/is-extendable/index.js delete mode 100644 node_modules/split-string/node_modules/is-extendable/package.json delete mode 100644 node_modules/split-string/package.json delete mode 100644 node_modules/split/.npmignore delete mode 100644 node_modules/split/.travis.yml delete mode 100644 node_modules/split/LICENCE delete mode 100644 node_modules/split/examples/pretty.js delete mode 100644 node_modules/split/index.js delete mode 100644 node_modules/split/package.json delete mode 100644 node_modules/split/readme.markdown delete mode 100644 node_modules/split/test/options.asynct.js delete mode 100644 node_modules/split/test/partitioned_unicode.js delete mode 100644 node_modules/split/test/split.asynct.js delete mode 100644 node_modules/split/test/try_catch.asynct.js delete mode 100644 node_modules/static-extend/LICENSE delete mode 100644 node_modules/static-extend/index.js delete mode 100644 node_modules/static-extend/node_modules/define-property/LICENSE delete mode 100644 node_modules/static-extend/node_modules/define-property/README.md delete mode 100644 node_modules/static-extend/node_modules/define-property/index.js delete mode 100644 node_modules/static-extend/node_modules/define-property/package.json delete mode 100644 node_modules/static-extend/node_modules/is-accessor-descriptor/LICENSE delete mode 100644 node_modules/static-extend/node_modules/is-accessor-descriptor/README.md delete mode 100644 node_modules/static-extend/node_modules/is-accessor-descriptor/index.js delete mode 100644 node_modules/static-extend/node_modules/is-accessor-descriptor/package.json delete mode 100644 node_modules/static-extend/node_modules/is-data-descriptor/LICENSE delete mode 100644 node_modules/static-extend/node_modules/is-data-descriptor/README.md delete mode 100644 node_modules/static-extend/node_modules/is-data-descriptor/index.js delete mode 100644 node_modules/static-extend/node_modules/is-data-descriptor/package.json delete mode 100644 node_modules/static-extend/node_modules/is-descriptor/LICENSE delete mode 100644 node_modules/static-extend/node_modules/is-descriptor/README.md delete mode 100644 node_modules/static-extend/node_modules/is-descriptor/index.js delete mode 100644 node_modules/static-extend/node_modules/is-descriptor/node_modules/kind-of/LICENSE delete mode 100644 node_modules/static-extend/node_modules/is-descriptor/node_modules/kind-of/README.md delete mode 100644 node_modules/static-extend/node_modules/is-descriptor/node_modules/kind-of/index.js delete mode 100644 node_modules/static-extend/node_modules/is-descriptor/node_modules/kind-of/package.json delete mode 100644 node_modules/static-extend/node_modules/is-descriptor/package.json delete mode 100644 node_modules/static-extend/package.json delete mode 100644 node_modules/statuses/HISTORY.md delete mode 100644 node_modules/statuses/LICENSE delete mode 100644 node_modules/statuses/README.md delete mode 100644 node_modules/statuses/codes.json delete mode 100644 node_modules/statuses/index.js delete mode 100644 node_modules/statuses/package.json delete mode 100644 node_modules/stream-combiner/.npmignore delete mode 100644 node_modules/stream-combiner/.travis.yml delete mode 100644 node_modules/stream-combiner/LICENSE delete mode 100644 node_modules/stream-combiner/README.md delete mode 100644 node_modules/stream-combiner/index.js delete mode 100644 node_modules/stream-combiner/package.json delete mode 100644 node_modules/stream-combiner/test/index.js delete mode 100644 node_modules/string_decoder/.travis.yml delete mode 100644 node_modules/string_decoder/LICENSE delete mode 100644 node_modules/string_decoder/README.md delete mode 100644 node_modules/string_decoder/lib/string_decoder.js delete mode 100644 node_modules/string_decoder/package.json delete mode 100644 node_modules/through/.travis.yml delete mode 100644 node_modules/through/LICENSE.APACHE2 delete mode 100644 node_modules/through/LICENSE.MIT delete mode 100644 node_modules/through/index.js delete mode 100644 node_modules/through/package.json delete mode 100644 node_modules/through/readme.markdown delete mode 100644 node_modules/through/test/async.js delete mode 100644 node_modules/through/test/auto-destroy.js delete mode 100644 node_modules/through/test/buffering.js delete mode 100644 node_modules/through/test/end.js delete mode 100644 node_modules/through/test/index.js delete mode 100644 node_modules/to-object-path/LICENSE delete mode 100644 node_modules/to-object-path/README.md delete mode 100644 node_modules/to-object-path/index.js delete mode 100644 node_modules/to-object-path/package.json delete mode 100644 node_modules/to-regex-range/LICENSE delete mode 100644 node_modules/to-regex-range/README.md delete mode 100644 node_modules/to-regex-range/index.js delete mode 100644 node_modules/to-regex-range/package.json delete mode 100644 node_modules/to-regex/LICENSE delete mode 100644 node_modules/to-regex/README.md delete mode 100644 node_modules/to-regex/index.js delete mode 100644 node_modules/to-regex/node_modules/extend-shallow/LICENSE delete mode 100644 node_modules/to-regex/node_modules/extend-shallow/README.md delete mode 100644 node_modules/to-regex/node_modules/extend-shallow/index.js delete mode 100644 node_modules/to-regex/node_modules/extend-shallow/package.json delete mode 100644 node_modules/to-regex/node_modules/is-extendable/LICENSE delete mode 100644 node_modules/to-regex/node_modules/is-extendable/README.md delete mode 100644 node_modules/to-regex/node_modules/is-extendable/index.d.ts delete mode 100644 node_modules/to-regex/node_modules/is-extendable/index.js delete mode 100644 node_modules/to-regex/node_modules/is-extendable/package.json delete mode 100644 node_modules/to-regex/package.json delete mode 100644 node_modules/toidentifier/HISTORY.md delete mode 100644 node_modules/toidentifier/LICENSE delete mode 100644 node_modules/toidentifier/README.md delete mode 100644 node_modules/toidentifier/index.js delete mode 100644 node_modules/toidentifier/package.json delete mode 100644 node_modules/union-value/LICENSE delete mode 100644 node_modules/union-value/README.md delete mode 100644 node_modules/union-value/index.js delete mode 100644 node_modules/union-value/package.json delete mode 100644 node_modules/unix-crypt-td-js/Makefile delete mode 100644 node_modules/unix-crypt-td-js/README.markdown delete mode 100644 node_modules/unix-crypt-td-js/package.json delete mode 100644 node_modules/unix-crypt-td-js/src/unix-crypt-td.js delete mode 100644 node_modules/unix-crypt-td-js/test/test.js delete mode 100644 node_modules/unix-crypt-td-js/unix-crypt-td.min.js delete mode 100644 node_modules/unpipe/HISTORY.md delete mode 100644 node_modules/unpipe/LICENSE delete mode 100644 node_modules/unpipe/README.md delete mode 100644 node_modules/unpipe/index.js delete mode 100644 node_modules/unpipe/package.json delete mode 100644 node_modules/unset-value/LICENSE delete mode 100644 node_modules/unset-value/README.md delete mode 100644 node_modules/unset-value/index.js delete mode 100644 node_modules/unset-value/node_modules/has-value/LICENSE delete mode 100644 node_modules/unset-value/node_modules/has-value/README.md delete mode 100644 node_modules/unset-value/node_modules/has-value/index.js delete mode 100644 node_modules/unset-value/node_modules/has-value/node_modules/isobject/LICENSE delete mode 100644 node_modules/unset-value/node_modules/has-value/node_modules/isobject/README.md delete mode 100644 node_modules/unset-value/node_modules/has-value/node_modules/isobject/index.js delete mode 100644 node_modules/unset-value/node_modules/has-value/node_modules/isobject/package.json delete mode 100644 node_modules/unset-value/node_modules/has-value/package.json delete mode 100644 node_modules/unset-value/node_modules/has-values/LICENSE delete mode 100644 node_modules/unset-value/node_modules/has-values/README.md delete mode 100644 node_modules/unset-value/node_modules/has-values/index.js delete mode 100644 node_modules/unset-value/node_modules/has-values/package.json delete mode 100644 node_modules/unset-value/package.json delete mode 100755 node_modules/upath/LICENSE delete mode 100644 node_modules/upath/build/code/upath.js delete mode 100644 node_modules/upath/package.json delete mode 100644 node_modules/upath/readme.md delete mode 100644 node_modules/upath/upath.d.ts delete mode 100644 node_modules/urix/.jshintrc delete mode 100644 node_modules/urix/LICENSE delete mode 100644 node_modules/urix/index.js delete mode 100644 node_modules/urix/package.json delete mode 100644 node_modules/urix/readme.md delete mode 100644 node_modules/urix/test/index.js delete mode 100644 node_modules/use/LICENSE delete mode 100644 node_modules/use/README.md delete mode 100644 node_modules/use/index.js delete mode 100644 node_modules/use/package.json delete mode 100644 node_modules/util-deprecate/History.md delete mode 100644 node_modules/util-deprecate/LICENSE delete mode 100644 node_modules/util-deprecate/README.md delete mode 100644 node_modules/util-deprecate/browser.js delete mode 100644 node_modules/util-deprecate/node.js delete mode 100644 node_modules/util-deprecate/package.json delete mode 100644 node_modules/utils-merge/.npmignore delete mode 100644 node_modules/utils-merge/LICENSE delete mode 100644 node_modules/utils-merge/README.md delete mode 100644 node_modules/utils-merge/index.js delete mode 100644 node_modules/utils-merge/package.json delete mode 100644 node_modules/uuid/AUTHORS delete mode 100644 node_modules/uuid/CHANGELOG.md delete mode 100644 node_modules/uuid/LICENSE.md delete mode 100644 node_modules/uuid/README.md delete mode 100755 node_modules/uuid/bin/uuid delete mode 100644 node_modules/uuid/index.js delete mode 100644 node_modules/uuid/lib/bytesToUuid.js delete mode 100644 node_modules/uuid/lib/md5-browser.js delete mode 100644 node_modules/uuid/lib/md5.js delete mode 100644 node_modules/uuid/lib/rng-browser.js delete mode 100644 node_modules/uuid/lib/rng.js delete mode 100644 node_modules/uuid/lib/sha1-browser.js delete mode 100644 node_modules/uuid/lib/sha1.js delete mode 100644 node_modules/uuid/lib/v35.js delete mode 100644 node_modules/uuid/package.json delete mode 100644 node_modules/uuid/v1.js delete mode 100644 node_modules/uuid/v3.js delete mode 100644 node_modules/uuid/v4.js delete mode 100644 node_modules/uuid/v5.js delete mode 100644 node_modules/vary/HISTORY.md delete mode 100644 node_modules/vary/LICENSE delete mode 100644 node_modules/vary/README.md delete mode 100644 node_modules/vary/index.js delete mode 100644 node_modules/vary/package.json delete mode 100644 node_modules/websocket-driver/CHANGELOG.md delete mode 100644 node_modules/websocket-driver/LICENSE.md delete mode 100644 node_modules/websocket-driver/README.md delete mode 100644 node_modules/websocket-driver/lib/websocket/driver.js delete mode 100644 node_modules/websocket-driver/lib/websocket/driver/base.js delete mode 100644 node_modules/websocket-driver/lib/websocket/driver/client.js delete mode 100644 node_modules/websocket-driver/lib/websocket/driver/draft75.js delete mode 100644 node_modules/websocket-driver/lib/websocket/driver/draft76.js delete mode 100644 node_modules/websocket-driver/lib/websocket/driver/headers.js delete mode 100644 node_modules/websocket-driver/lib/websocket/driver/hybi.js delete mode 100644 node_modules/websocket-driver/lib/websocket/driver/hybi/frame.js delete mode 100644 node_modules/websocket-driver/lib/websocket/driver/hybi/message.js delete mode 100644 node_modules/websocket-driver/lib/websocket/driver/proxy.js delete mode 100644 node_modules/websocket-driver/lib/websocket/driver/server.js delete mode 100644 node_modules/websocket-driver/lib/websocket/driver/stream_reader.js delete mode 100644 node_modules/websocket-driver/lib/websocket/http_parser.js delete mode 100644 node_modules/websocket-driver/lib/websocket/streams.js delete mode 100644 node_modules/websocket-driver/package.json delete mode 100644 node_modules/websocket-extensions/CHANGELOG.md delete mode 100644 node_modules/websocket-extensions/LICENSE.md delete mode 100644 node_modules/websocket-extensions/README.md delete mode 100644 node_modules/websocket-extensions/lib/parser.js delete mode 100644 node_modules/websocket-extensions/lib/pipeline/README.md delete mode 100644 node_modules/websocket-extensions/lib/pipeline/cell.js delete mode 100644 node_modules/websocket-extensions/lib/pipeline/functor.js delete mode 100644 node_modules/websocket-extensions/lib/pipeline/index.js delete mode 100644 node_modules/websocket-extensions/lib/pipeline/pledge.js delete mode 100644 node_modules/websocket-extensions/lib/pipeline/ring_buffer.js delete mode 100644 node_modules/websocket-extensions/lib/websocket_extensions.js delete mode 100644 node_modules/websocket-extensions/package.json delete mode 100644 package-lock.json delete mode 100644 package.json diff --git a/assets/1440_985-505dc5db.png b/assets/1440_985.png similarity index 100% rename from assets/1440_985-505dc5db.png rename to assets/1440_985.png diff --git a/assets/ASPER-49e5ec4a.png b/assets/ASPER.png similarity index 100% rename from assets/ASPER-49e5ec4a.png rename to assets/ASPER.png diff --git a/assets/AWS_logo_white_v2-1024x612-6df8aaac.png b/assets/AWS_logo_white_v2-1024x612.png similarity index 100% rename from assets/AWS_logo_white_v2-1024x612-6df8aaac.png rename to assets/AWS_logo_white_v2-1024x612.png diff --git a/AnimatedButton.jpg b/assets/AnimatedButton.jpg similarity index 100% rename from AnimatedButton.jpg rename to assets/AnimatedButton.jpg diff --git a/assets/Auth0_by_Okta_White-3a7b541a.png b/assets/Auth0_by_Okta_White.png similarity index 100% rename from assets/Auth0_by_Okta_White-3a7b541a.png rename to assets/Auth0_by_Okta_White.png diff --git a/assets/Box.gif b/assets/Box.gif new file mode 100644 index 0000000000000000000000000000000000000000..f8cb6a2796178da2fc5ea428e3c88994b640454c GIT binary patch literal 364 zcmZ?wbhEHb)M8L$n8?K7DKGMIzQ_On{}~t<6#sMkxrPKgI|jHK=@~FHf`opuaB?v) zG3Wr<3?MBIOzu$pUlm8!+YtyJ-_+e7P-Yn7%Y2rYTG;Mpie#fmU5<;*&hDK z&%@PzWYNbClMhwaG3%b~nptv@tM69SsY!R%edn$dg_zBNYPLPZ?8n@U3|gDPX3M4~ zKI#OSt=M?uT=ZM<5?+~*ed0$`sHtm%3x|uFg%df2Z+NA|HlNHTO6R3N69B*|4 z&8+sXedICiS?9dOU2Ae4?fc|&{af$zUvbAa>of0b(NTKe;iENu4im`Z5QBsm_!!t2 wxPTt#>FMWKP%~So=G>VGB%1_)3b?=u1bX^cGQNFruQOMdOX2FpMNACV04#QeS^xk5 literal 0 HcmV?d00001 diff --git a/Button.png b/assets/Button.png similarity index 100% rename from Button.png rename to assets/Button.png diff --git a/assets/CampusTechies-fdb97384.png b/assets/CampusTechies.png similarity index 100% rename from assets/CampusTechies-fdb97384.png rename to assets/CampusTechies.png diff --git a/assets/DDC_Logo-40ec3c61.png b/assets/DDC_Logo.png similarity index 100% rename from assets/DDC_Logo-40ec3c61.png rename to assets/DDC_Logo.png diff --git a/assets/Devfolio-88f610a1.svg b/assets/Devfolio.svg similarity index 100% rename from assets/Devfolio-88f610a1.svg rename to assets/Devfolio.svg diff --git a/assets/ETHIndia.png b/assets/ETHIndia.png new file mode 100644 index 0000000000000000000000000000000000000000..d219c99c5f06f123feb020b3c760fe7140c497d1 GIT binary patch literal 8012 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/Social3-Logo_on_White_pur.svg b/assets/Social3-Logo_on_White_pur.svg new file mode 100644 index 0000000..2b2202d --- /dev/null +++ b/assets/Social3-Logo_on_White_pur.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/Solana-793e8952.svg b/assets/Solana.svg similarity index 100% rename from assets/Solana-793e8952.svg rename to assets/Solana.svg diff --git a/assets/Zetapass logo cp-a6f4779d.png b/assets/Zetapass logo cp.png similarity index 100% rename from assets/Zetapass logo cp-a6f4779d.png rename to assets/Zetapass logo cp.png diff --git a/assets/asset (1).svg b/assets/asset (1).svg new file mode 100644 index 0000000..ddf3976 --- /dev/null +++ b/assets/asset (1).svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/assets/auth0.svg b/assets/auth0.svg new file mode 100644 index 0000000..d302b93 --- /dev/null +++ b/assets/auth0.svg @@ -0,0 +1,49 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + + + diff --git a/assets/autho_white.png b/assets/autho_white.png new file mode 100644 index 0000000000000000000000000000000000000000..6c20582e26d833c7cff18c58a6b1f5414c8d998f GIT binary patch literal 9746 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 literal 0 HcmV?d00001 diff --git a/assets/avatars/aayushi.png b/assets/avatars/aayushi.png new file mode 100644 index 0000000000000000000000000000000000000000..906848ed561010bf9c342f2eb4eabdff3485df91 GIT binary patch literal 45600 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 MQc99_;wB;g1I8~qvH$=8 literal 0 HcmV?d00001 diff --git a/assets/avatars/akshita.png b/assets/avatars/akshita.png new file mode 100644 index 0000000000000000000000000000000000000000..209238b8f0a2226ff4529e95fb561a28008040cd GIT binary patch literal 46028 zcmdR#V|OJC&$f4M8&jLRo~doywrzLUwrx+{PHkILO>NulbKUR1ct0fhoUE)PSy^Wy z73C$6;PK%B005Gdq^RpUfM<@0 zp<$9C0GtX8I&8BmsffgbIy7R81`3)YAwyTUFOUGp3iR!SCd0#JI^RdIB>W&hjhlzfGXvz#|jw>kvXh0NU5kU>%3Bkbg??XV{&FqZ`>ffV>fVhVQX)ee@ zhh5epBBHmU8q*01+_V9Kwmb$2nklf@#$d)}&Fs)&3X^!ap5%DAAZ8%YQOsmLC<1}d zUk&iSoJ&d!yNKtEs~kj@hv!x?j*?m~0008U z{|pR}m4gcaG}=mu3aNVPUw*!q(%LXNYrd+uBRvqPYoo4T!-)k+dtIp0y z<;wrOtGc*b951a|pj`XsJ=Waze$h|H*-OwnHiQ5F=Puz7@@i%7+zg)GJi2dV9X>LR z8$7eFHM8W)q5Malb3c8)mdoQCp;!5zEN8uHO0xyH{NqOVlLTBkHV>+1XMOPgO&;EX zt^S=lz9;q_B=~pZwtf3!yW!DxE7_)3<96*$?EKL?6)6DO1Ja>uN1xnPI`2FBeR-i= z^=&Ty=@>&xpl;Vlq4Vu|*YGztQ5^LC>49pg^4doByD%797I!2KF+y4E@0+4WD)X39UiJr`G3_J!Nm#|nA8zkIvo>eZ!3vCmu7+cs(& zMz!*$nXz4*@@)Dxqw$*D?j22t9YF1nLHE$0L2v={P)_r9v`S{KgFzt9w+vwll5r5wje+S(< zItxdyTt2J6{2H;kK6L5mw`8ZQt!EGb9d#mcxYy{?+?gb)MNx9L=W$fE$Tp>e0F0{Q zY+>wG)blapW%^&;8>gWwynh|cYu(wb_%GZmHD~awlVimrym{%5*)r57pB~Y4pb;J zsp*6m)vj%R8zXPT-@kOmfv&CegF-?=@Ux25nbP1zo3+X}=o(ZSWIhZEaT|-#Y0VFn zX|wkf4&eCwz@O`MNHGhM&*nNLhLuKE8J7{pC0DFW zZ3KU=4s~bhy3fxI33=%h&K`VvcVR#B{-gJ=Gr5Ilzef3o*`qhP&fYtrD|d%cfGSPO zomR2>Br@`P*88680ut>}Co^duQ5V6N`=C`%YU$zb!oc3JP`!srXGc6lz_14m2@f3_ zR-!=ppissd>AYAX^$IZcQJE4XwRnc?L$m`-#&)gJ{M$iJU_F^+PA9KnnL^w z7&5XV_v8Tm=3*y0jzax7H66f`Rk!yX-$&SV90<>E4c=iyS$ioJhnSw9`I}GS$mW7y zi4KBAk}Q~;gzg3-NS}O5Mb3^y`AM~0_{@3qjYKriAssaOQ67AJ%}*RaUrka$C+JQT zbo|)$Td8vBo#Hki#^(StwsAh?>mc*sslCj9<@)4$x!oT`U_`Zy?q49@rAzDN2m5p0 zIkr!nk?)N3!hN$)7_Ev7Ejtus_0WDU|4cx+%#G3n zqN3x=Joj`>>)hB#h|$WAhyBl`6moW>I?V_G^fueacSUGV) zU3&tB4%Ge|5k$ z5{yrVf$;UmPYnjA)6ZR$?;DiwLyhh;HR3;sL$``HJ=Psvigamb7haTH;~Hyeyp1?s zt-QfMjlw5Oh1IDXX|h5WF^i1u7L5-Uoi{sc-7_TR&P*2sfnH4g!BYAGbb{7-@Ij%$ zr$?>YwKa!SZ9I5~^{8DDansA0II5@}w7?0$DD8Kt7q7fBH{Ks%f^Q!ATne`@giy&9 zIX(x^p5%4@X*F?upmTK*?`7-1Hwx2g@-R|AC5o{Y(?l7y0)Tm{Rm+S;hitsg6uztH z4~M7}3kXP@MK#3^thfzAnzDf89FE(`GRr#W#1I4zMt=#!K?@yi{VC{-Ur^>#0U=5P zSBc<8Dl#vD@WH}jLxi)J&1jk+aileBN_64jZ7kGKE;z+EpG;WqDGnM*_@*O`Cfz=; z+?%hjjnSiy6V!jGoN=hDbBCYxGZ1ec9Mx?s+hQ&Pdy~|1W5>=&?FCJAa#ELB+dP(x zuT|$QR|>1|gl7oi)rV92%Aq^qc$_7ua!N)n&LyJoq&b#^ocb8mv*mrK)RlUhx}P0r z{ou;j;OYYk^eU3DNWSnS<*<73tV~MJ0U1xPubsob(g}1XhYCwRbaxy zvwQ1g;SvSKt*VA+zW)-U=Y3sLwaln=@9)+lF{p*JDdm1f1&j(Q7Vj~|c;*HZfhBoK zK`N#9AD`x5T@!mwMSbKsb92pIDk2acIf6kck0q`sB7kU($-@uEewSGOX7ShMqbH9M zo3_oUtk4^V)*es>Zn~B>a9x;-Eiis6y{$LQE6Gor+1S{Sy1r@VUX@<#9jUwD?hRkW z@m!73_>`6a%a$RVHtgxj#NGA=R)&GeZbfI#nUdJGItTi@4rNa6Z60J%Y9>`(;(wsK zM2I{JrIBwwLS2l~j=7X2oqqJR4!vLAdXwvg{P@sYF&gk_q{`{}KD%>XIdkoV>b*d6 z=V1pMZS&h`+j{-n{{H+nVkPHKFT!_I>$x@ey*|hA%YA&xkuhmE;nf4#d$_E8A_^FTqd-sXDZ zjB4}uE^ImfzUT83TTgMclXv~kGmY=*fIGhLhp$1pQ8`Z_*1j zy&6j=?8C~8|B9xT;C`)`;=%TE3MG5?>f>&w0O3F_P#GO@@%&mQHuR;22rJ{En>SF* zZ%1;`wX+-Xb!Nh?inARS_AJSxJA6K4UyWuZJuOZC_C4{&uWK=!Q_ILEF*8bPDFQP( zXZMkkb2*EKT7Oz&Kv!!7_8k8NQnaGlE5bHcI zxu-~;fM^9RQng9qgRnZe8=E+6wryi?JkSk3Cy667L0#y#tYUp#joD(FI_^At;Shs_ zRooKXs@;0%gr;=9qY``_e>PSUA#FMa!RP>t+Q|~gkKdv0_2}{V00!I?xNvNv3g;YV z7F_Z1bEEv9E_DU#Pqx=sK^V_4Ox4uE^np7OZyt7>(E;YvyI-3DA&^C5l3z*E4YvK} z1pU|%sCOUyWDcBy5#lOSiv<{|&`=EVCM7Q0!aA1lNbiTG-N;3 zu3^U#kQ|zv^!ObjNP^|ZvTTdu53QGLK+`?; zQ39$`5iGxlLsJGJ3o)#U(Y`F|mq%AA=VO(b8i+8QQ?@l|fC}YJalcbAhR8lS`T=!AJob5NAzTXY2C^0&q^+RfSMX!X<3$jCZc8 z@Ncl&1t9f|gQnpT<<=Ofb9e0*%Q8Jw>nU9{#)^(;vHq0jSHcU8gC}7nvXn!3IP2n> zih=_X)aqz>f@O@njp7eZQ4#rNZwk;W_S)&91$pkG=*gs|Z9np|a%RB&^8!irN*Y;& zRq^e^ZP&Y=B++O~Gw|HnuGpep0X3Mz?tB@eE>dR4p}-yZs5j-9e9(?>h85fEcKg8? zuJw|a7`X3N|GhE`hW)tp?&HI(scUQ7)Ly(Ibe}fvscHcJ0cTAjRDhp)@v_dH4Z{j$ zGzX*df=EM#6-4#7kJ^Q;>P^x&8||EA|Td{IF7 z+)}-~BJPuu0FSb@FT>hwUeybfCN~UMapSd=+$8qFU967Lqt0Cu!|Q3q#XmS`WV|8C z9)-uNz8i=LJm%oQod5l3Bxe#y-FpJXJZ0Z`NL6%ED)~;+{=Vcxf3c0TA|(t>_gsha>0wScR>YOmWs}e?>!musr*BWw$={Idbh9liBfXesl%K zkkX5oIp$^x-MUnvr5n%B=TzIo0Gq1D8e%wIn@%dO&31T#`nd<72M=skWGs}l!DKYT z+Uu5HFdC%9Wmz?+jHYYnz&Y9of24U`rG9RSHOyfHp=2j1v-R!^eMOOW;vwo!G%Y3i zIFKVI^IVA~!$iZcJoXC=D{}VeNrbg&kIf`Ieph~FcB+zP&-;`aQ*|{fqUOfh+S<7| zYyQyLbIt#7cc(UoeA4=NwkP*Slz@lg zHF*3M*!8j<4v5+_(j5KXpafy_-z+2fO~b3;q=Q1Z&a1`%z!aVD ztZ+y25B80WCpws#9EtX4$wmQk_~Uu@OEzaxhG49_E~uxFPx}I8c-TZ?i^qZWOIT_> z7q8oaP)*wyy^k$9DM~sS%}O{4!NBJV^c#GRp|gfmTfa-(j;1YHh6tfxDzAu=Bguw? z^9<$bt%7Jna^7Dh3NCcQ(z_}yg_BH|L8JTXwXuz22I0Wid1;6#({w;tq(CO%nYJH$ zzC9f3kveI3$Rh~fmZ@=Q+^ZH-P_Vw%oLV7&+#5DL@j5WXLU5N9aVk)akZH&_e|wU* zK--rHtCQ%<=kq1_BIU-GkRO{KL-(4AeCM?uurc2!<&?`9Sy_nBWYY zr8JHHB4jW>S_x-#&1>!MeS14sE+0k!L4n_9iepbl{M5s}W`_2pyfyfT&<}SP^CH!^ z7JF4DXwg-%EB02<<@`%+*rVdZUS%1na@3)Hp2Q>@iEXOLn5Sz zmo_DI#5rRVkOBYSII@!#Q^OC6ys0o2t>vq$tvm^eA#?WAwb`cNTx|uAjShPE9cvNVg89>6-y2%@C;v#= zU?cO*Gw0-FHy9_xKW)Jec6wWilpOM|Y6MU$^&D#G86P#=VB)kot1@?nkg9ng z-i-|=6gt)zLi^|YA55c1_c>pQDE7dEEYL2ShvznnOr9I7vO-eS3L!$aCqb}`Om$PX zII)n56J(N+yS={aPYYTE*Xe*Q0FdHF{Ost;JT+MHjV{p#kE>t9R3F~@Q^1M#{4DFyt6XnPS`5hG^VTMgt)5C*2eKJ%Ooo=$2ZFO5F( zczcFgqPc|bh`m$Rg$PBi_wL+#_DJTPC>`nVzIJ~Z28l4>o-1zVp-qRE;j2j>a#kk2 z9U?@aqa)xZ8nbEy6~F&HbQUTKl);e1-2HK+2m?DIiP=Ojd6h;!rWhP*Q2084A;P1G zeZO02#>vNZUJgk`1U}9YWm)Np8iRx6sZ3G0qj08QpV?{~Ls)K*+( zonufRFNib0ZwqVxh_4jm2lkCH)#;=SB%POLRhF+IqA@;p-~`zwkp5rqK)y^ zjb#PiR!Mh>2i1_YGwp$n<1U?}SG5P_D0|=&8-8)+WAyYa30Y|}!K2H1NE6x$t6tCmkj9ep%i-jgCD&~YjF zEn|$kizTfbYP`2+H7&m1B3DAa&}j?1Fa)3i6f~j8&WM*3#8?W zShWm-h5G($Y7`BjEKfW$T4I(Tc_q=S^foYnar7 z>TP_VrJgB=oZ*Xkdz+$Re`0dQ7IHiT#jHPGnh;85S)M#qc&-|x}D;4iwx2( z9V+1R>PjV-w0*bN8tR7D{{ZE4l6b=Z3FpgYC9}4y(P#Ct&2+Zov$f&~(o$6}=3#?_ zs~6j^$LG46i^t5ALNe{cT=~C%iWfQB{ z{>$9%Y_D0u+3xSop7YKxe7_UocNMz}H_tm2d-ouU%B7j$w&b!JZhXX*)5!?21x$4o z#e8lJzmDo?Qbq zMkK79SfrYZqV?J+_gp1&+t-d%igup|DA)k+)Md%>z?&roA%Hy}hg}+p_#y!mNua>=$ah<5NF0PiN zC-Yc*!Y-{RXu=YTB(|^)mbES1P%O3wF{f&R2vk{UF{BRy3r2N4o#E?V;sgH+46^X%2|A#(Hcvu6XDY$jshL}u#)c^R;HDuHN; zjxQlu6ai9J>4LwNv_r~ClII3)NC5fvHD=t36|Y(WpnL~o9eSRVWLt4z7zxY3C6;_OFSuSc4Ec)Ag5sYg808&#$?$xjs4@?dZ}{Mn#0lzI7gy!l$twUY774CpgDsz^TvTT4QVV-vhIG(p52^gn#-lCZw# zD7X)r#0I134i0fFDdc1sP;fi#@Ld9_eNCfOAMH@iB_RQ05Ve8*d z|0VNRUNyY<*qeBE3DRp@&m9P;vZ|1!0e%HSqCM^-zfoP8#j4O#T%uVe&dIU^+;`r# z^mU$~bH^VKo~Vu$h2zx;8PF$+0+~M$0d$x+p2RX%W;00~c91#%k!H6dt;nj!cPd>4 zl-k+=i&82F3fnp*FqGf)n1n}9x@-_sAU;p42RN2)czuL#RSetO4MAITP0XHhUF16D zrS$LD6dQid1yxPUdU|$K4f)2k?;gXk`O>+V`-*v0P)Fx6?{Qs)u&X(UpL@kVCUS-4 zSLbl4w)@wDdF%I1sN`N+l?+g#7Ulr%8{H7#$@9TLk8iDED84p8)*&=kC7z>$vPJBl zP8)l2NO^m4ye!luYK$M0sv`FH?dZrn<+w&)^L6fN%Xj0Fv;yOxO5xBLw%ygj2F0k2 z5SAA{TOUHG=}&87Z7uU&_Fi#Z#Rx;KNm6Ccjt;aaV*l+YQXf^ycUrp5i`7zo<>pwJ z*r4-V<7*+-z(Z-O*}rTG_5d!&GmPPDE|f++5`7{|j7{;&BLoig$gjIOOfF$SzVoik z$e|L3yAxQnYrfdpSdaDwB$}un)}+01R{umw70$t65zL^qW{yg+HlSD?SP_|4EQV$m zW?+?4GXc7c+wFO^M9Bi^mWTIG6|-*QRot>lSH9? z3e9e-1l}C#VLDC0DZBg`d>^;Yj9Mtj--MCIzr&3q{@pl~I`7Y?^I4*QQshZFaNeS*q2! zpnrNtK%M?TAKy*C#hu;W*cK0Dnf>G}Nqjlh--60TUWlH#^+fNz;dT0oMQeVenIDAW#V$#{_&|gX zCgH_n1?rS)(~m&fL6C9#+yuEK)@ka2xdxW$8t550tiy87QHLnI?M94c`N&OmEW_IL zA8aq>75as=xE}otk55kkT9b05Cs5)4GJiCiBFnE85bGfa!z@6LkYsNrnicUuD0^P2 z;Hc*4$#1p>N0i*ksAfRdw9G4YSJA1Qw^s92>S?pg;TEPj>0ht)8k8(P@m?onc2WOr zr?)oZ<#Up->aA*VIvGz*KdZg#vnl!n&M(7Y`Lllj1Qeo!*!&2@!3&L}J+X0L<`Rd@z2Kj@jS`*oqQPMq_ zi^eHsipz-erLR{L;7G*@CYPY=yOw3j3bo6AsoPe^z@i&Pm^y-Yh+iQyYV5ziI`rp> zk!Y&m=RG0YVxO5;4^elLeRLd^4vUgd0E5#ckP&s69fuhhYemU6@zQ=4o&h z8T9;Jf)?AFRB?K&`GxA%edDPeeOBPN_x(Mp;cj@L%^hga4Od2RGcnoc^*s2PIrUqE zdMuGai>v{&Z`3Vx9D5!2*@7`d5$wTP7H%Dhev>u^$$qcfZv>(qB^=y0FQ?l^MWde( zfoU+JFn7<+j@gp!`<=ThW^Yyl^In<<%>wm#eg2se%b&pE`Ac3Z5v5Ic3xgMz=61MR&tLoL`Z^(bjo2y3^Y;WcLEhVBDKW z2gIw7O?_m2TLNP};cOP8v^7^-moC{(ra^S@=HQY~wnm(JYT3hIjD)fBH(CXWzT1qf*`51cN)8kc3aEV_ z8~yb0Nvj#*cO&avp_rYa>6vP@O;7fy(x30{ezixdT_i53${dsfrsxe+6>zw+s03Y> zb#V?QE5js7%>knK(G;@?uV}FnQ6_1zb626i!oQ-WSakFZ;BJC|?{S}0{m#Sv4aeZ$%Z5c~o{(hj_a3c6-hm*CHJuuisulUu zGQhvh-);ZnnZ|u+rsMt3yH`M!mAu)#D$vd^C4r#UP(%)7A1PcDF;dfq{JRqd0<44k z+FHtiJ`kp4Tr+IK7&MDz>)%yoYYdVestCSk&Is%~{0ObRc)-hYWEdTvmY5Cc+4j{P z=n9d=UP{D*f&3|LsE#}}ti;AqFYclVR1ix*w;~HkQC@*eHL0s@aLrMef~r)oc_&MF zUA{O{vDkl?itTJxMN%%{?wHQys|)g|AO}4iR-HcD*~RA+P}-ElPtl5dO%s6>E}mj& z`~Q~=*SeqUG#Ae@Lo{F8itMuEUD@XM4#b)W4l{`*D;H(gde_vI`Kin057)+km)z}K zKWYz3;tt8RhY0CKlmM>JyWH)k0P}!b1OqAZ1V!p8;;bq0E0f>SVqbC3(bn+V()mj4 zGB2uchOon0B>LmJ$@C@KU_AV4VIh*qF_8=9T8!_f0nhhq0bhp(A<*fp8W1iKe~P$x zk^i2dgL@eo^T1&6@zY$Zim;tMpBjJ6Z*1dZItnqwN!2?FDhzhHJuThdoGt~g?mo5q zxc>O}t+c&|htor^!J(4Cw$ta^m*S?&WmJfq-}q?2u7HvPs}(zkjPM{_K`KY%arrdL zwP<_lG2etbfb%H`&Gw%I z0+xc3VkOHI4;C=^2JaCvzTjbTRmko*)Copa&tEJcQGES7<$B`sORkFQix%a?M*I6p zTK@8(()h-M(pN5<7LmRe^3cy44mcSv8JTOLl0~AaDhM8*Vh{{obl8X;;zs16GttMn zSDyC7k)yM$fpL4inW#*69@!0MXcb@!sw!)VR4UzwWi~H5od7zuIF-)%B$~$BNOg^W z&uV$(u#2a{+^2i+vB6l)&i^{>XghucqoS5-wV14I5?SHvfs?3sO`1bMko(wS^%%Q< zZ4O^7Jn^Gd+di?Q?VcdhPRE*bfy7z zC(eEB@|2~1XmLE0qV@VswKv-YTb!pQ1Q_&uxb=IHHW(>=Hnb7Ov63@HhHp61L&u72 zt#k>Ap?a?1z1S*_{x<(H)>szZMGJQ(n%={CW{Jt6lcwB`pi%Z zVgLWOW&~HlO9M+7=k|k125%S_pEKInilm_%u$gwJ>~$G@`0%2Sd7ppzX4n3!X5bE; zx8JY5FF0$feuG?LP0U>X&|e!9EGYVR>5TA8$uq$)lg4FrJ@lhsNUqdRUq%V^?;qD( z_#aano;crL_`kPTKesNTzZd8`)TKfNNp#lthYtbC;FZdbaxd;rbM30wC$T`Syiwh+ z#qV>NCWFt~HqqiaBB4;cDXy=Rcng8Y=x>fAs}qfhgzI;ZA)ZIIxJ8>6AWau_2yU9L zI@m@0K?1A9!F$@Kk?U(LUQAxm_+jimRM1PWBv}~m={C`2jkQj+OTHE6J^47lxPi+7 z?(gk>OF6$<@M{W!L5DUzI3@lZic*v*>w9^+@&Nk;{i;=?NF7+bn0o#+Vt9^9eps!l z)C|?kFH+eoVuXto?&?R@54WvJm0;=C;?o=%Tz;9mtg0IkjPy^lLtHBPNCw6lb3Y|g zcr1=>qTeMD88vT5$WYl~1?$$C))R${u1K;QH*d(4j3WzyXu3i#*uv2RFqyk=rLkqk zjWU3FvLt=Yz#++sAV)e#rDVJCt!4ZZ);uSF$rq-9o*L{nDG0IRgKQZN{u7}J1bwt|x$*ZuqJZN;J?r4E zC`$bi$`y~2)ZE$~k_f+itZLfU&HoiL``O~LwE!~M>EH*_G2A!rX9X})EXjbR2Qkl0 zOx4KQK@i~Hpr_Mlb@TftA!46%cwfd4wi0YvKYry~(e6!iDF2e4OBKD8U>FPw*Fech;?La4|%{O01U`;Ri3~ zVr!HYKpzB!lLjY8u95)hYs#iAJ*ub?03+gfhepp&i%E!s~4ysxvso z%<^a6hdqiSp;BA-j5D?Hw1l+6%6@i+ml$b_TwERLwjTao3>AQn_lDlw{9?uOwlz#r zYaCy>3HWE4u^vJ*nj(r3JFh7UnD+!{jpnU4{A@&dEf#aF!Z%uElnOG8ydxN(BvR<5 z$#OJbcepaC%z3+cgQ^x1ESC&lGR!E?*fuAp4+J;$idvddi&J7f)!mO_bKHNatoidh z$M1&RBbkZxrSNT`kf1wu=T(hcZ;k?N12!+aehjit?RK+CgcJY-WoM>Av`P7h4Iyp z=mTyuEgin9*T(lnz<-#9(*EZLjrM#Glc@+#-*MHY31|E91K_=~GtN`+y@Rs-G;;y* z%!}GD-th;PV_j}-`?WKG$LF)nm+iAGlD*{*uit?8&-sOul-+Rij z0GCfc0zcekV}_xq?Lf|XiAgtmvw`&1NwpO#IqUGZ_ZC-x$`jxAJ>MEQO)3?TE-2^w zfY?vt2`~SC0uwcKMHX$JA=MlY2Po+T0M;x&ECN*`}qpSpy}alico}OQh(E7o zw}ImfuO&P0H(o}$*6Hvl-(i-+-|O4j(~6c4P%Eh+)Q*)g2aAVzvm~pAyC+W51l1a6 zr4`n?>cTH^WeM0E3s-(~)qrxi{JSKy2L6O4Bjk(Xo+_{Vl2HmtI5lGjIU5RMpb|zU z+-)an9DV||$t6>Mbsr2k?u&}^2lMDSZBT9f=wvZ<+VdG|B8{h;b96GTSb($-C-sj4 zF%8cDE3~a3nfc7EX8d@`>?rJK~uL>WftXw=lAy+CiqLl@cAV3$co=|k!D_2 zHEE)9>A5yW!s*z!sIdZ-0w-^nk3tuZK*cB(V*pGpzKwnQPDTiobb{hB_gPboNCCxBI}Wk;Zq|5nt*~af)lbHm)8p8AUz}t!NQC&n}Q9=3L1^3^X{~# zX?WoKsgiQ-MRmyBOm(nArx0+F3Xcr`exHSTcu;%C%`gb#CcVazIdVhC4ptqRAhrk%2viC)XC>ABP3JXlL<(gweJ=?)k zo?f1H?<)_5|IYdIw}Rs7D@#$|Nsy0U?ZU+&mhU*9Wnw=x0@t(EXe4whzH(#V25%U_>T5Vq5OZw1@BPT=>92!@pR$N5OHRhZZ&c1JqMPScdDSS;3x{XYsOl z2w#`BRvb%ZT4L;%jbwkyNKg~)KEkFQ8KgMfV5=b5UtLhi(7Suy!})&K zd)r$WE1EI48IpYy@Ex8%>;GmE05=qq#Udva45H@wp6i$^lgHB5(TcIDtWqllYnZ}% zl|fr+6`AoOta+yj9zS@;3&|Qxb|UTzx##qpLjJ?meJZy`-1RyQiNiCm%A{}~F7T4* zsKh%2@gYgY1xV4G?b*3E$V~lZn0CnC=CSFm^R$Pv1(TH33O+MBy!CYDa@A!bpZ3@s zwf$db*fP1qOU&pX?i4SXn!G7@UUm=d%1WiYh~;k zgFQkW00zYI17>m}TS z-9WnXnY635w8Q}Diu+AUf)Ok6qyb^1Y+t6%Npz0~@Ur;Rsx|&WEq0%~LD5!o@h4nu zy1ph_BuqVLC%wuu?zk~RTe5)*BL=iFOgqTqPsVwUimDu5FZ9^I2S84=A@eNaa`zVU zzyJo=n4PzSlEC9`Q(k$_vz-6vb02me3>N!7&lcE%R45-Lv|= zM0@;_=9Rw@{^*8&N(-<|nE^YfFVh8)XcGx&dvB@*$wk;$cH-44CaFZYxLQQdRMt*R zjMc%aT(-ObU^{Y-PnntG_wj9c!%JhIu~GyaCh%sFJ-P;+g8T|Y&EpSCC&gY0flI*m zpm2qRuN~vu(h&Ap>prX(h!86x)P7&sxB?BGh|okvmKhoGH~f=4*w`t!8Br;aq8^!a zp>{FmZWsbv*s@K=UDm!;H+x^M7uEl$C#4r&IS^1zpI<3l2KmPKdR;P(yDQ7AG%>&~ zHcqWJK7a!AId4w>_+EzL=vzkN*+gR5Tqk1^i+|RCkAq7Du}XB1bVrOLwJ7-y0~V7# zAwcFjV~$9v5kW|HZPSfR%*n4J$WwizFbKA8IVA&^DA*)ri`=+7h4HsBmD{=HKGK^2 zT@0sNqtYE#<E@M+aORW#Q-CH6)XegO6M=gg{2VnN1Xrl-rnD z{1Rw;0r%n(D5r|y5A=JuyZZy(F}kG(ng3m7*+rL%a_irR|6&UQ<4?uTs+Z{yysbm` zn&e>{5!hP)C(5G|E_Od8$=uSy`Hx`0wg6bamG)EgelSs)k=3}gU60bf+4d_~@D1Cl?D`d!uh1CyR$0LvIR_7tZENh|#3J<59H=3Ci6F+|-oHV^H; zrepFIHRAIo7I!1t#4ig^)Npc+->=t1HOOCTTEC05wR0oKRxi0qx%*3$8u{FP4Y9`g ziO(X4vKwU;&2R?x+792M;iieyI_=T>yafwxy3KGymt6|&x+#RGh93jdq{G_7=9#)@ z*=z?XDSGN!v}I1M^UIy?9We9GkFQY+OmU9YgQtjaGx(HOmm^j>3WUBA8U1AkNv88# z<#Qn5ZTR9j;8~76e9)7wM!%Qsw`b+11txKs+P8drI%1&{Z{157OPq{g7))q+gcQ4* z$*TVB5sG~pB@WBzkDK6``)-u1%|g?(UVaST--lKJUnf#dJbNS}&fcbidvQ@abug zT6C;+D7uTb!|RR1rj)eogUlyawT+Wl8DOcsVqsB8#d{RMYP}!rko99n*~NV8?!E52 z%r7BZbRiw-R*Cp6(vi~m?fQanlg?{`qRToNQe5V+r_srYVt zEyPZrEcGJT^qYZ9UV;Hcj+(r(EbcOlZdxx#_^f&@=B`-j14BL!E(NSt5ha;iQ8=-?k!4o6#Y3OH7lDmcJs3%wYUt@y|NLrxl+Um_47LWx7+Z z++UKZ&KXV2AUQnUF%fjc+)Z?OU#`wrqv0fi6J5FMbYO zjP#go7pr#fvT;tYWhw}%u+2Ei5YY@V^`3g?ar`#_c#4Rsd$)PI#bN?RTBeK&K|;V2 zwtLo_kLE~6uOX;&RUSgex|CZIXS8@CEy2?`rKF%S7fk*5kENR$H)7II8ikXXbvvGN zYYS|hdu=e-@tvHq4TT^xUeK@6bG*0$5`Z zy2)8wjPJNSo@;znE2GRF#yZQsn1g#4bt^@HCs?LArse#S#Y!>o<8c;h%uQB`=C6H> zb}1N1|L9R$xE0?sB^gR4qOz5=bR7GwvW=uN=K@fJ9*RqWHuLzu52&B72~q%)&1g?% z4hrFxj*ieHZG~={7t^=ur?aZhp~E$rD@Lmx3PLH(1q)d?TweP(uOp~%XnT@&z6=g& zZW8;Z_mGac)~zOrVZ*SdoXV9o7)=bibV1K7@8>~yb} znHiE6NuVJ8vJ~{W;0DW)iN^Mlk_JLV+_P?Ud!76g>C7M`ySP8rLc|$t&M%N{)GgTiy?Ui0Mkj0+54J10`47 z1GYzlzDK`bIvexf#`DLt4^B4|O~Ea)Xh00zoSc028q)4ADXzQ-(;Y3{7(tPQEbyC5 zK)TTDFBZjNCzDHA;9-ju= z&mr3njN2b)&%96I{(Au(bpsNnK1YTg--irBP)njS!hHpc%#0x?wK@XBy>zk!Q~h#T z3Zq0LznlHa0G>v{z8fY$F1ynd@yhWZ@xmWnvZYl0c+``M+3r5x$##DkjAO2@c zl{=ekKxN03RgL{O%pqifbJ)W{2Y-3vRpm6q67V2KqFF&O3oX+o^Nl_eblrcI);ad7 ztW(FgSsmLMz6V+zGbxLQA|ZKkqTct|Nf3*n-d1D&37RK0xX*hG_Ph94vGa3DDynojymA(YM9(TWIURSBo03r);JrQR3qi3_5&IeXa-|9Pw; zxs^5Jd9BIW)OBPi&;tkY&%r(~DttkGBKh#q!|MpM5TF@xF@>@Pc{%+SE|;QsKIu!Fa5GF$-eYUzcgU*3aJ{<=eB9;uApgxCd0hltTXO%d5g_`)z^P@ z_G54S$-wXlY_*^ERbTy8*|`Tk8bx@uZ?Cl*iR2QkkyC_J==_OW&t%_v`*X5?_`Uy% z9^Vu(U)a2qz40f0BKygI^KY}azU>_WUbO7SP`&Kcul|N0`}R=A^`Uw8celcCi&jht zFK5@M&T=I!{0Ak6P$?7KB2oBx33k;FeBeVdAW$HMaIP=-yjNsj@|Qk0Yte9Jdb^J5 zJD?W*V?X-FpaEW8U5$L}$q z{yaHX^y@n`pxdeDQ0fE=v;C9WGkH5(1{|NDltvSJ9FTyTron#{{}%{SOix*1(S_0N z*xuZZT+^3--Qpq}B9b=`luENp zzOG3`sc$u(=aELir%6Ru3tuE;P2o83#mWR)!@h zY>n$saQfLAf;piZO&HeV@)|yCi->e1p+zvGdrU)W?aLkzK`V)M1s*yO;9cf5>pTM;~2n5Qj5-=qVBKjb(NT(d!68 z&AO$*!!m3H_K%8C8RP#*Zi7T*6`OQ0n`KPS(n>D7bmz_ zUulZQWXA7|z+_|D?tW*sS#YNcg8&Lw7m#VqR<;2e@uC|o^rulV4NGmzn`{6ZCs(p# zt4o+d>exI*;I=I(D+CFvXncLj9ddJP04p@7!lhz7Rh05lx@2Cdh`@^btvBD2odA)% zy}g@SEuEdazr)`+FkJUZ%5U4d44Og8pL6T!Z0FpA;3kL6Az7jW@FE9fJ!_b{p@=aC zt(~K^hZh=6=FtN}wIz+90ARosSkHz7(c6tBeB|5;XKp%qX>0T1=`mFN`|z-g0TJ|$ zAL9$5ZDKw|;uhH=6=QODV;zP~{4Gs}aGw|5bw_OM?%q~*=J-l>@43woD!G*x*4FV| zmSeH%^0IKNQ??ob0PSF6WC93*;KWPRZJpOLS+caV{M)=oHXtLIS`LLXS8QyOs;s$( zIVSxfV^qJj!vSjW-UqyQBB*o@ubWn8vjw=WtuKe!?8A1YPzYC=^?9esmi+a?x$`u? z?`Es4gTa&ZwtlAu{4Rce{Bl+AZYq%_GyL9ny_=vwGmTc~P-uRafNtf+kLH}d^FI3bQ~|n-|_eItdouRewTexIeQ0Gb>d9s znG?5mKQ76&3CP)@y?#GZO#dWq-}vfR)&BL5|HKcByTi{FDFxDGFfHb*%%He=otD9| zeFS#q2EMKvOd74hrM`4i8%%aCZJSSzRqhDLR8o4wR%QBh;%O?UAdumoN?b(-p@fT&s(MARvK^SDWmt>LP(G&cAnBD!c4`t`ipNpWxt~+yXH=nsVyY-ek z0_Z8(_aZgiCcVOaeYNF{>>}D~b>l?#Prm1$XFu=*KNJ?V2KdyRWKid(I3wil>T8XB zwn<_Rs>A=xi3Sx2*Rl-m@GpMB7iO<`#pe)}FXG=7@cr`HyWa8#*+<{|E?B!*W6bgn zYzYe>yx;z=58~U=+X4bRtDuzy?@BO)Ph5A>JMEkocP?d{mzvqiiLmef4*|;oJYwJx@Yh9`z+p+UG;7oMlSRm!W?a>98-*p;kDy zb|O0om$44D3sAIHxl#-4nLx-YUtT(l7DBWGP}4~8#EFyHNAA8qJN}aAWyjDABZsvB z?(}pHOlNS~J7~or1@tnf(kVg$Crwi*Kt=LgU4FM{A9xoLy2f?%B1mTNki}$%VKiD-oQ@ z9ATxzG>+@Af(G8(OMBKElZz}?7NO{UDZDU!EL9$Do7?UmoC2BjLtN%{6TT;%=Y!O6 zneD5xhO$yy6$_StF}SlLe%>M*A{{o&d{O?2F;0BZd>)#xoW*l%y0k!If~%NNft($j z-YFWcgBdMJbBnMIaQ;i=@fOI{trL;$Z_*h?dcnW<@UtWf(v;6rDGmgT{s+uxO126@ zu&l>#0yOQ~k4B`_%D6yMtlPQ7dyt@R;1V#HIY;_tp^l$Kv^|1nMZptv8O__2PVAj9 z-zKr6raM>_%*PP`jKJSb)$F?$fP3-XFxMj@(F(#R>`RR{L^x{%5JSi%b9t*UnnA#w ztcV_|cd69IXwyQOd}yC0@*M09pnyWt^BGIz1SuqD$M}ponm7k|)v{zC0o&`dZUz3z zYr3F@rnQwUkIOJYeMS?3X(OsjHYmyB+JybSj9=J5%hvgx4I9k&c5|?x;#-Wt#L^iI zn2_sv(#q=5RNp7^W@cE$_+EZrwM%5y=ludE4lIL3);DI%g+8BjEcZPABR?3Jho9)}+BjYo1!8T*nr4&=`wo&Y%S2)cd~4WlvKe)kqcs z6#ltyado3Y0d-@3xq;vdjkn?3aisxACla;6yC7)ObT67O(lQG#zN`$UgfNEzbw@k-x1jC`cLD$_j|3@_zOom~ zf#Q6G#vANk;#yiv)uiPhS~63#o+Gg6(xfz^sa)Q{4n%<_$nC^aI1Om*eG$SJ#GG(P ztHFibo4zrE7B5&~z1_3m^h-4#zRFcBme;}dej>u>0ktZMQ=hh1A&Y8-8!5SBuur8Z zbIv(8PkUH%bh7q2SeGjFuUtBid8&h%rSwF-w~UFan-fF`EZ1GyJBRa5P7VP%vr@^< zZDKOmn4sn3TLgP;*en*Spf*gR*6Pe*>hm1m+@G>}-KtAsbJxFWQb#rDsF80ZIhplI zaa4$gdqSVsAWL`Kv@+`B33u9MjMXx!lX=b8_fdHC2dzIVjMidLaA0maUZcs}QC=x6 zS1zX#;{-G3bA2ocUwSvOJXR>`0r98$K|q7z&rYu3%24?-0$;P##v9hrq9%==5UTK&Ms^0do(>Dj;^J5QfW$%Ip zSNe;bHCA@u_L~>8KlhoR89tz_oQq)FUitEuW?%9}e<9_?Sk!!_fpfnS32IG>-S8)iqva)F35K1XxB;$M}@HK%dr5pUNhrGk)&h{Y>`WcfKd%HPdcRUP;30s?hfqs58a!+@M4tJ1Yed-jOp>iX4l}chNp=g%z5Jh9mTvMX) zAkfio>+)sy_NZ9!ddWtY@wwKHoyD0>BR#FXZar{ccATjA)OsUnSp2ExU^lB!VW`W< zXq#hEd|n}2u1vuA;ls%U8lj}A(}em6o+>o62BU4eBuPZaf4cOo@R9EJ$f|U3arR;NEUJ= znBmY(V-94)Qt(VVqJ?Gv&<@oMU4aTE#x)Yc`TB`$xcxwO3Be0GI6ByJGL<6m!qeJJ$Re82!)O)7&x|>}tVNhvJL~uk9TNWzleQnm)K~D-a0P0Sg>c9aA7{wTvXH!=f~zxQM;vdx1}8Ov%E3NNR~KME z;B!RCSaQoDJUd8SS6*gODtuM7o`@nZL)I@zlme*}Xq~hU@m2i$jO8@0JzqP6{+-0r6LrBt?o!HHr-qxNsj)&dJ>K9gg%K3v05SZR&dyb zubNEK)%DddeI7qKQuvZRPV#_USj@n{-+)IqA}`(W0twQ5iQHdf8EV{=eAcn9+6RFE zkMIT60%>$`PjMLI~dFc{s`yPe{e%GW~5|Z817_6U>>r@a%WN&+(8M;&e4<<0+mp`5^^trE%Xq{nh>n*1VCN1t-pr`goN?~ z@BdKtC+~bm_@}0fEcCzp&wqCI($D;Jc4x;5Cexgn!}SG&=$!Xx6I_I5=XDCO)c>5t#~N7>uo`8G_XK-!sq6^EK21^;nOF0c#oFRb*&qLn3|=BILqG|3e~4j%tRV=cfA<1tTc(8`N~P2 z{?rK{A5upXt?{+0Y8Str44r3~58Hz3Oi-h>$Jih{r(FKv33<5SU0HW)QZ)?6ZftJpAyjL=H!%rd@@XfQpVdgo9xxx&)2?QH4Qb$&J(Ym%7`e|;=%#JDN0;wpPXtV*+((VGGVk}k5cl2{hsGGpzM|F#aw2Y@+3K7;xIU9N|!=& zCsUnzo3B3P>A0!kW*Tp1(dVXaUfPOuXf)!dR7{lkv`pdj@D8lMqsGEyyNP=IfnF5o2dc$h~E^0ILb0WRhk^C@srbZv5S zue~M3KffhSn9S8&7z4erln#n$PAXlU?BuN_XNl`RAd&3IDFcrn&Q?3 zHdj~XJw1(782YT08zde#i74MU-OvbkN$5OD4FrOv8E zEisY=n;e&BGR`bNBS5gU6x?@yW01l4c+y0OSe8C^odj#}B^zO*fy0F1GZ_Ku2a&Ul zL4p25ldJHhP2p35o+6phSWP2N1W34hslYgTsc=a!wgh?Nm9*KE!RuSanz;D#|Rj3qLvdklLl_R_KasU_+##lcr+?ktB z@fs>49CWh+ZGeK-h&#?4<}1|6ho)OP(#hzj`@H2oJ)UlJl%Bs|ec0zU>Xb0&U~qUE zxD_pFNJL=sWFcgi+c7<>y#YY$Mk*0KiQ6Lrj<5TgR~`GQpZcjEWFzi?tCz{|y%Q%l zjty_Q>FixKoNogNqqO74kJF8RBHP|MAGt1TkFk)}Srr0vVhD~vQK?+j6efS86lZRb z6DQfDX%T(BZF+3?$z`Rb#GT;uMS!C7Y$04M8`5;_*iv?q2(@SZRYLA2k*O5`DgN0F zv3YVGzWjfBe)iluZl$K`n0rfIvqJjJCsiA2rtkXXPtDekZA6mUYp)A%wLgSYE~xds zd+rIRy+CEco|8HS`Zfn(lYWg;ps(fXQ^|Q?oCevp)iG#0l3;0?@A>H6*(N-KjzzN`r?z``v?8M3Sbn0Xihy-PF=i`J}$9WvxuRxB_B0g1K z=26f%n2%#oQa(BqN_4ha&r~@fWSur%@*x8gi}I52$oFiL`HG*D zP&Sdx_c-tYUT08MuxV`sxv#J3q;d|$5PaY#eex&Ml(R$hM}3)t)a{;Q(xl3~%Ztpr(hKs@Lr$$Vg-TJX3A@Tv`M;GhpbHc2_#@IP9b#cw) zDHj<`xUz_K@p~imHlO$CyXXlF6*DOlJ@0+lhl_sa)R`M;rpr-o5{3C%xW*9xMqbw3 zXmUPO9C3~22swm7&S?R#Xy#5SjPnLPcI%$ruBF64*JxhlyFg@m=^Ha>Y0V zk>_q<5lSWaUHGnJ`#SinDx81~PN%66g(duvU~;%}OMEQ;o+8^B&@7B`DwicD2>o8y z(R!Tin&t|<#*)YvHLAH+G;Eav*~a{~to2GP$={afr`d5mfRKmpKN_v!UO=cdctR-X z`GL87)wI|R!EceP?MGs>Z{&xW(3!UL%6aTI@5ujVI-TNV>{kVv_=(D0Wyyzne z6LQf-r&IuMIs(-s^b|p8^3zT&VO9DoQEd%Bkfip=NtYmcGk}!@1&e6D9KvnxdF=dL zoP4!vRU#wvmk6B;KJ4xDE-ZczxIBPRJL?we$1t@X0=buQOAuC@!>jc1j`JKykj4Y9 zr_JH(a2ST*_wo*xF3~JiSf)lxezLMkMDNr{d`&jpCMIRI4rnw-fCWA~8xn{V78o7_ z4$@Xlsd$H=L>ZUM=c)2jvO9#wiVVU~h*7D!JHpqD(w#b)1W}*Vp^C5*@H;L*_^T=c zJ~JMZvX{Im2hp2{PB>ZWv$h$YtODOjIWe&xD4saz`ioDD==2e07jtIw$Vim2xHi>s z($_{`Bpd10Vr`>8;MDOmQThs2dEH}hWHC>~yvpY9o*3{0S+;6f7X-YL+gLBZ(HRG?fr`nbtk2 zHB6X<*k*8Cpfr*m4I>LaL5NK}6MRKAlYWnP-GE&*j&x)~*JXg$B5ho zg3%8v%fp*z#3-G0d9FoEV1Ob&vpp-4F)9oNxB#s}^bxQY_ww>_1QOqEOj{(rpMK_O z;xs0wq!XaM`RxMAVDHnZk*UY(d9`+pjHZOhZhl34G!Jw%i zwP)13ZLj2S<}_z6R9KgJY0`gN#WOfF87%~hbxL)NQ-uCI9g4@6JB@F|q_R zhbvIl?!B7I@1vi|PlYmE4KCPObmmGGF5Q4s;?rECkx>jL_f3w^`3Hlinu9dgJhpP$ z3v>RV2QN#2f+t$X1LnWud!P^;c-Xc#%4n{O2-zy$Dh$FH{aS zA<*>V``;fymA9C9KA8XqypnT#Jn?&k@L|8rcXGI`_eq>%NlY#j%y4An6TQ9|FuU#3 zxKd1ujpDur;c~=NoUmEc6t#xnR3Q?LYC!@k#(+qjHExDO(IzaWiY(WO5+?jMT`;{t##0&Z+`tW)|rG(7B)3g=TqA*MpMRxNlC7WU$%6 z93`&8epDdzuAm!N_m)Ltu~t1~cpt^dd&Ga!mX$@N)zFgGaj+B8mB z7}q(tTvCwc@9xD=H)*D+{hN=a%FGPK%#;1MnFFaaJW!^8>_M5<<^O}e7Z8NP7vK-G zT__9pCOYicCpBLaH^}|>JHQ`Z=jS8bxknSiM+hGpXTW@1wvBA@OqxAizVVt}Y2fR2 z>2^{;?8LV-UpSIxpv4KYG!+q)z%uKs5r_!Ijr*5r)r@i^6QroN>jRI(+2) zhGBlGVY2bw^#`@LZBe}@h0!dFoPO)N5dy_>8X!n-fgqZI<$1d_9Xaqtf3?8lf*fk4 zCGv2T!S>h;$9Q!}xpXo09KbQ(9T)`+`m{T?aOP*cz`nhtLi%TF9wv3phU7T=!!j4w z&2>63&;uy=(?q_S$+DPcKFCVc?lBj{F$hlXBuK=K(X=LB8evn3%qYz@ad3{)%t7+l zj%uFL=X3AUtK5KH%YY=NBE`n=9E34y^tdy0xrOG_46AT7yX;F!I)0qnqiMcfh6Z06 z_r^6Yc6!k1mF`$x&M&Sk=cQH{qKSlO*F*^0Z{ausiKqjDoqV-9%2#2Uhw^ju#QbN} zLL)_!@`IP_sQQKOwc5_6ZsAU`@kwKvu1IE>4M6Z4i;((oO(n-5=&JJ!w?FJMGc5g;-=vujM;gXqZ2{Vm=lRi=#`u?TT z+~U~%H{1FdYDar1ZEWmw@g@u3AZnwUeFL5hxw8$`&Zm&Oh5vz~8mzsb;Hv|#Qy5v0A%&UbjIpnF9 zsRKP%$x+)BC}7hy>fYz{X>^J1uLv|`RT80+p5y6l5zr*ZHvv{7@CawwiU>XjT+cfM z2i=&q2o(kRHhYE*U?PKv>G67lJ~jx9&|EQ&KzcN^wGk@i$r5xN1p<|BZ!4HiYiPZ5 z_cOGa?+0HP&rfx0rv^mPX?7hwG<}D5&t*z}EA;K|(Zsz+&att4421MT_L0r~?9zb9 zoM^QRE0)(&meST5v@_fgwwebd>cjRM!)L=m%HxoFaCPKeD}|3N2Gt}J`dm+7oSauY z3-0*YzzuR~TyLHfYv^~30?uqr_3;wK-UDv^Jt2ZTO}@_HMRTr86_$mFyFlb`v=M=m zI!#~R^ir0;ck|NLg_!p{8kJE#Okya$AD89ckEiwg`^*J?{HK2V>%aN0{HyQ(fuDh5 zVPyp;T)$4o_4b=@B0YhIF;mOl#K?H}2(uw>Oi-i~avat&;i}DrmC0)jV~$zsE_2Cs zoYk7<^6YP&7xEqSC(?M1{fi6MFEMI0|Hy*X@i`u#da%1g>O+=yBFC|e0B8?8-$X`7 zavGtY$Oy&Im62mZ9oENbFUoad4NkZ{*SXGO|Mma*3$nlU*Zyk!E${RmHcodVd@jex z`*lUsIGPC9{^sUItid|tPp8>`{7=7@{nuany=)sFd|IUes=kWrz;`#1tw4dg&Orkr zynaZ(NW;9MsSz|zm+RIgFpnsEpp}wSOeSBZiOKKWrQu#HV`Emde)=8gPP2E}1bA2; z{%gT{Z|W|(_&o5@<7}EGSwj=?`p>#d#(5hwIHgKR3Jf*#26h3>lDe2Tle2mo)V0ZW zQ!r{~p56MPANt`x|FwVr>;L452-~&Kc|wli*3NE&jSfBS82UCEY6Vgs7b^i6O-`Dw zFxi@l&|aLXxh(gaQF2&0LwoUJ{EY=KAsqU1)=5(?E>#;+hgIT@3rAYNL^B;ir$ST{ zax&AHI zV2{o0vWeqx0noCT*(GwIt46Lu=*fAC>UL;#Fv*zo=9vo|5`D0%3CbhYF|!mt^=fO9 z@^Ch{^I4Jl<6UAeMD)y{^sI%hn_MmKLy6p}WaDaH^Ly@kmG<#pTLu2TD?ZchkUKyklKUpRTq@dBX2P?ydO^JGOm-iTqIFSzFC0O7Re8E`Zc zp!zm}6p;qZ@upCUNs7pO)%dcq!KYf~%x$=a1Nqu-Y2XoHQcaN49Tj*Fg7AEVqa?&D zS}d)rN)wjAtR`lgj1*W{Ud}EakS-~)hWLM`kD6Gmm5nn{k=>sy$5^siscLR0;`@eI zmUv<$Lo%I%iC#K&b5>YA&rm{!03!Gew2D2n4i;=O6Sqx@x&!FOdlra#)qnvm;AI4)taTBXVQ#=-NW3La;`W4u4|~4PLiFJjJ^*Zh zr5(alkSoarBJp5CuRQvFIQO-<@ZeQ8WDnD+`M{^365t}3(Ctf|HZ$Eut(rwLfsgyO zBB{*+yB$$y9izQB_j}oS3jXIP{L2)ueDW-e(}YaCyRwQ)LX@O(S(M3G!#Zw+ zXTg9=G9k5>wc`ThoF@Ox7=&og9IVik3gBfyWR2B^YP-;A!nEf2M_izYw8;gMa@i-K z;&Nco2yg)tXGbGiTGJqrCvkg1!pBg&yXj*84~!Ij1tI?O>eA80U6Q9AF3{Qx1>0RmXi9;LMM6tXV9A0yh_=R5RZvB3HPh96FmBYfwSPf`mUomjbBp zMxdB1l-e@#e*BbPZbHt`3Y~uBWHxe4aSy*5Gpj4q!Fqsjc~`YD0MN620{7(-yfnXk z_Uz49ve}@ zZLG#vgUA^gt<4*Eu0_SnsKnd||72mWOXMxjT!96$M!dvko+Q#dPOi>eq)~1QK{*E& z?m;5aCX5J8G}C|*+Y4XvlI)eQd?hTW7Xq9r7xcT|_Ll6Ae($$qF0iIMh{*$jf90Eo zrQ%v-S7>qg$DEuZm4ln^dR}(x^PitBo;U@j5Y0-y?|tuhS9boROaiBhQkSBZ9^JDP zCiU| zem=D3gZJJON!2Cj$94!{F7Co21%3~=Et0r%y%VM@y55o&^80KCskzJuMC=@d_2Z|b z=4~!<7b=i-CJq&>zyLTHK?a@&Y}l4viqFsG7a*cE$Z$jg2gjBI5!(s?s0(w#(f>62 z`hoa~57#{UADYkRB%^RqI7pGr;rhM$*$0+7)o|g2Xlbsz&bRb;6VGN9dp>a{l1?g* zzv~WJ`}UXqFt@gG3`&IScYE@}H=Z51qW>pU*Bho4tkd$MX$}0Fg>3rvK+6Mjt9~Z2DzN zq>DpG>V-QM5Sc&iuyYen(w9=EM`EA!hzz0~%Uo)KI4o(H${Zu?w$%_|eI(%#dyqq3 zV!F~XdHGh3Ww%0Ac5p!S4Sidc>#$V0fZu1QZXO`Qm{iUrlJsaeB(9F|plsuyI<7R8 z$*w-w;WUTXB-RJM4{n2P2Aal1uZx*9-^c4qzgGkLB-F`+vcjO7Z5D!H)uX0kO0q@BfvsT=)^;4_%|Hg5%>gi z0`G4RiZ@#g(qzeW0K#dT9Zj{iIZ_{Y?18mdVNzCu5<`O}vjnV1ds_Sqa}pvr3fhy{ zAN)8rXlznq_WqDQ;N%0`*c^^J_px`o*HQMKJXg!g+VX=~-tXmNUdfuA;Nk@kx>5`k z4_XDm36@-9Ix!){@8NuZ5`V3kb+^82kYN`Xb(ClZmjvA36S9WnYA`W5SfYp% z51xx0lvq0vG!99y<)MhJz?wyq&KjSzh6-`Ow5VP;!jz7_;IbvPVGDsEEWy+_5Xfat zeTS()72r@K2em|=OpRv^)hGxd327IOuPICj=rLo2vmzR{28aPpyi+G{$?n5s*H#AE z?WfLWed?YonB!%xp@y$lBuTu^wKaINCECz7;9et_Nt- z^OPZ5#d1O1W=)(j-%S+4JPD%_cHg$hwcbPR_QJ`NC*Mn}!~@q;_?~pY@rhi-H-6(c z{?9-2Ge7gjgZshcQ% zpITz90(Q7+6@b2m8U&3D`VHIS91jDIi{#rbvc!7?0v$9`4*@)J=L;i9I3OBr(DYtn zQu+ERrgPi>!0d{SG#P=2b{-tLMDBAxb6TJxQEg>y$RziPEXNblEf)^5or^n|SB`}Q z-pm5ohf=q5?rzY>Fl`w|AmC)p5X5qJ3=>(gs-QXKKD3{gGG7k@pf+r$e+X;qzQ9@_ z?IV0)(dDv3RJo6#w9N|+ASiOqMn{)L&O-b>*XZ2&i%|x(Qqo8G;F-Sv_22sKf9Ko( z!FRmr6WPD(_1Y(Gc0Z8|K$|ti4QdjDKpS7knx@WuSQ9r}m^#8ILZvQvfQ>MjyVu?Y zX60-(@?-dleVSUVcBlz!n4Jn5#X>#p+~Gf|9VHL99bf_9YXGdJ&L(#Gpl#0gQe%aU zTEQaIrU+x!fE?X~jX#F4XN(m|QDwJV}cC|h$F75Xz}~em%Zm#W0=Yee6x)9|ZqJDD zVWN9zG%_O&Y_Zl3`xJ=aA_6!hM`y(E<^;k>6NAWL1xvqc_n(W~kpm?mtSYKR64{Ly>v&2r!j zZ$1w63d7ZRkf6~oCUue8s0dvPoze7-V_sEj;oc<8N(8)E%2r@QIKZ?^+Oucmy+^ws zP^qqEFwB=2z}T_S$_aLEPy}%Z!YI-PKNZc>BTYjJ76B*F(L39_kR6AcuiXKh%ADac z*KBi@xOj7RLq^@pKj>I1{Yntzm~i?}c+V~fR(p@n+;L~thb`+s{GR14uD@@sndEey z?`M49Awzrsn1J?pG&qOXDg}`KA)2#^<|7$Bpz^Wj;D<`Zk-CTD_KXN0Il^;5xqkrY z`j_vwx_2zp%0r6P6_nPQ1x%4Ck6lcM{l3w_V_gw#)^etY!HB+>ZHB<0a=`gVz@Ivf zg0g(3&p5z*B1}7Itrec5%z_Yj?M@+V;Hx&a^8|uYR4@z+(VJ zTYwDOBCkWN?G`hULFGkEp0O`lMP`I0e78D@MA@J=2x?5MubDp^@HlhZPT+r<#4YoB zb9ol#M-m&^97XD9gz(u5TOg&-;?c7c0ABZ;HFg3&T$Bc)`hx{ zq1CltrGnP0ljPP)2r#%rb)~Vg^07<%`}HC1f5Ucb2RG-}yS?6%u1H*Ok$px2jz{|v z-~Rg7edQ1T(7*f6Y7KdQpqhyu}#%b;c%q?qB$e*>j%vf-t*|sXDb- z&Gyefm~Eeb2&#Vw9YO9|y876=-<5s%9q*T05p73-9!s@G9eIrwP#RQ%s7J)|4$gQ1 zLh^k!GtU6R3uuuO&;R6X>DD{5E#`St*H0(-m8lD3^I3|+9G^{4Cbbu&+_1N$)65=v z|GToS557Cwz@*m*Hr7aJ6Dkl$+3SKnM6mV|rt>iUY@xx0|ARv%JyXg~-g-y2ano&F z&kD6+v^K85>e*Ye1}suzF?W29g7sF0CcgEL{|K|qFhx0=`M%p!M*@~c%0_q;@b*i8 z>;L$Q*L~MN{?31My@lp_z27sU`5x`!$?Kg*@N(5?$fg`dps+{w-Xy7W*F-GaW4eV2 zs-1f%ns*k6@Xj&pc|-|l%p{`;&io}bi&^EB!Q(Y6Fwe&AG5l&-$9tZDcH6%MhFI0@biu_ zF;KMgNrZEQL5Ka#hnVdFizwQ18_0c^a@>?_AEAY}FPRW7W!nT&r4E`5JYwP4$*ce? zzip1zTX$?-GYFxJ&-|l@=0Mam2V;?-Bia}Qzb+zpxEN~qgu83iVPd%ddI`!?@jiz} z_}Zv4);dU=Og@X!-66_5b^0t0GmPp^(IJRfhbqGablj*~lo^Tj&^>$nB08FBmKMj! zr5%7;=`(*~I6WZW2fqo=0HGIwfsCaU1Uyf0Qs;$shL+3Xv-uk_nn> z8{e}f0V8Ljg%D9vLCBaD$9$55JPk~wZ6>5vdQy~;=ew}aTo6oZE||BdWm^x2T)fLH zH$e!pB0O~NLil*DQI!4)dEzmWh==%gXoQadWRrEGn$?&7ufMRgf;C(LN(R~yEEnvX zldY|-g5$CjNN29?q8V#6bmyVWaB#DcpK~qpR1kWjQnm@a>A2;zzy&MSCT4@oBaEoN zQ(0KOJsD^e$rcy!v)1vejxW}-HBv4Q;X66nVTdM8)rI7#q?#+8Xq(MI&#WRGC0Zv( zm|5D!c@6nIlF&JM^CU4sNP>eeDAG*p+7n{vYCwbk$NLY+WA^z>g=>hW6<%dyk1d=z zB3QMa-D@VzQv?fxileytTLM0Fi%W|pjVJ9^3-;XdCJFsRlU8}OGjM2xuTrbtf9&}2 zAKu#B{OdHK)G7G1IK7wJt!|gO7`?T%jp5pf69T+n45i1N!9eQNpB(}R{=^Z3prH7A=uQRBz%(!-0!#@U?8M{2MYLQGbDi(+k>a7oON2`&aCXx=8XMC&08L|q zwl`BXHKJM(%?G4g+L&vsZq_4k7&`V#go!PfM&?rLD!^7F4aBILFy7(rQ>RY9bLZki z(~XsdCV&M%(9@UD@ISI*!NoNZyx+hNyzdYzzQ={)9lGoO*hAaZfB$no|5ZQxAAkOz z;uAJ6a0pJ7BoFh4J$k zWD?Q|p1uxvG$*GsX$z7P)Kf{FICG8YxsR|&$7aXbT~dg=EfJE$a)?2=iE@j=VI0>rS6&2$3Zb!!JyQ{#F(mNJhU$ksF^O~3kLTc z=Cebx7mtcprQV3Kka+K)gooVyw-bmO*ugQmI5kVn5*P6V%?Ux1;d@4K5gKpyQ^A>; z;30`*2?6V*V~Uu}DE!-wh?cWHQw2pcpoGyOincbar)cId^_k76&8XK(59dfL!2o^P z!SG+D9ceOm*uceM*$cpS78e)#4QO-@yI?($>$~BE4_?4kKtV;hTF#SpsRP#ROD2vJ zSBC*=K>+FAE_gf&{Jrh$I2y8~10Mo~(9zo;t*Qk50a zf;FZ#HUrFRkddHNv_{W_$cL#?P&%`2D>y<>s0}zp1kO&hA^p0x2@HBvEa(jeQWE~9 zbQv8~CqS5Nh18Gwu!Qg~(YCn=)0PM|5jU2V7m23#3GSP_)_?IaZH6CqpBN3)6On*t z@HvO3&i7brFg)0o4n zYYsH5NTEw~tsgkWG&;8zv_JqRLR&_3oXUn{qGkaH_U5Wxy^FuI8WU3}G0#&e-Uy`f z{4Amciv%%6sxhmTL3XTxxgYK{mWsX0U!cEx?$8tp{DiaO;mAYU1FUI?@a1~DS)sF= zEzty21D$yi0lb~G%uPVI7W4REBNEu;`_}Ob7fE1yGe>AIu*G|!TvCZeqth&}7f-s} zLy|O~v}l_3FsLD*$&{v+0r&*bgiY$M+w_lg2w8_#F3@NXZS6**Qk&;>NUID=)In;? z)O$%Bi`7#@gQ@@AKljN5Q&4VXj$swjI?dkpwm*5_``-7F2LXsuH>0^RSA56UzWTNQ z@=Lzr8xM7A=E^Q_LONKT0w$$M&4ljSpUOeU@z)-z8GRhXb_IEMrx zCT_Ao6-4qxK)ku&27rjvL#~Znf!K>;a{-c<%kXL|sO(8z8>#W$`CfX=YHO+~#INZ; z!wb6$T^+EX`IZJE`f1`Ny9WTKHQ8gzf#}llstpxJ>e3@THf=))F~X5CYWouEo&!>)?n6)tD3&yGRx*^7ueJ#6^nNE{wjTm_t7(jlkfa5)6L^=B#HI;8Ymljr$|{Joe}T(jN`V1xr%;R zDK1*4zA+~tn)#DL))rv>yJ*F3L8rd%uMq;CT~Dfb*85FkV3t2UpCz_~7%#H;2e*hk&5_LHE+lg=< zbvNOQ?#(g1EyEnVZyP>lKgOO_2FQU)yx>m{0M1}6V%{8K4st1)bV7TvIK}X|_~e2) zXF6=8`F+c3B$6aM$XUmhO8??1_(+!cl&C|+s`UwpTU(qX)!p1Thpf_)B58d)jIM11 z5eZ&dGNNmh~PJ^>17$V$dRFn=Bx)yfQ)()JBY`?AZ!=q<|~|3Gc9ylr=ytkVS^falN^CA2A0Qn=7d7Fvbe9 z*NAM8$QAoxGwYj~bAZaA#~ZwIGi%XX6;rV9s1Rr4UZ=P-|4Bq9S~ES!uw?(_Y_`vZ zq$P0*9z%7O%&I7#nvxy}>6CDG+J>*CWu6|i65UR3Y{fGpwzcjd&Aai=Bzx2h@-)rL7x$cxl2aAV|*+OU>w)^||@8UeGVH&v+= ziPD~^&4SEN()h8Brw?67tOq)SD=!W`PO>uh###c{vyCG#ZK*)VU9T&Ttd}UAkDt2! zmn7Ik4uk#6ruJlwDzgV3@ye~7h{|XOFO)ARK104^YqhR)@0A5e_3lCDo`^K?03(>_ z0PWl~6xv-~Letd&PEM@^ zyFdt6C=SymBS)65N1VvcqgM`Tvl0vjU~#*HDKap~I_WOl80}35=8#I_CK4y>%@cLk z=HPxsj=L;GQ3>7w_1#Nc@75nkuUj$>J&ZGE03&2^DNXg7YTZQ%p4Sm-9n|qii-{+qB#$L}f0}#ml#CPaMi$=?81WJ;S+deUvvF?BuhA!o8)PLKG&ig$4R0)N_(;c zkLfppVG@#Tz<6z}o`1UaN)$wlSiW%OIzx{!xRK2|uCR#`0_DzEoYeW>ZP`lF;~DKL z?b*Ck9O+Y{aJGBD7sXZArr7c+_8btdqM!#hEG9G~{8QeBQB{N+?1N&YTZ+~Bif62> zKp|p2J&~*IAaWx(Jq76102t|xZdVA7XmAFvOm&+PqTk< zBN$1Hr*m=@xm9#iYSF<${hHFY#9Hv=*Zg`R7H#5DRKT2<7JO zD^F$Ad@}r3CLn3(n9p4PK@|W;;Z)ld$EnLM&c@CPA1uw?qUYXB!O`FmP-EW}$&mDy zE=IV*-g?&t3=|xd@(^)$#k; z+Ie|AY`xuuoj-cDWedEs8@wJJwLq|I%9*8Ke`neA3}V%a|9NmO;{|!us zI)Wnyj478`4ze|tnx$Yq*|vqPXCPWH8x4j>J9)uuC_Zra`KhZBM2;qE>Q5@(^kqSS^sM&ETK;~s*9w@q~;cA zZxQw-#M&54(Jn@MrE!DGxM-olZ^hWYf-ZcV{i-xri?piYbauwA0PhgEamR;( zg)7ExR!ZFoHtF1=9iTJZVqSTY4e*A;Qf`cT$LMtd3fbd#YUF)1_{EC68ErMJ+&Pv~ zV>mxtw`1E#RgQnccm85c{|G1;D-oKqPSYs8lY3_+2$NSd>?=63A6=J#rV&em>+FNN z7*tIWM&#_vM34_Okb9`1?{j$MZ^Ta*h3eCwjcGWdC#NMX^#Q>q8Gmn_p4k>p zY;)tidJp%~D?>ihw>rjPB|BR|+jKs!qm{0etZ&ir=@kb8v7{3e@sw}HYI zm^#8Fc`pjL&)c$%53<`NxW}t+rkcT_5zJU6ZN~J~jBBr&l_I`FnM-Vs8J=0L*FfA< zpxam>7*}JsNY7oFiklWdRP3WR4X;L)hlcAo7d~T&H_N^-G(<(@0pEa>2-v$dwow@J+*NLsBY(vKoLb z^n&@vM@p4D2h?LB^Mw$53lA7s*tj{27K)U4?5$mpwIOIfxmAnChl=2D#4qS&3f5kA zHSJr^QZR#!e(^s1z~5?X?U5PuzzOXd-`e7lK0j4$T0(cBp}Hp}iKJpz9a_lrg_=bV zVjg|2-;~4GCn#nKQN$hsjIFqiRL3OLiLLMxVkCz$F8h*(nT*p>ZJug^{&lD-nH?i# z%eiKVut21XM@I-m5qpu9l|?q?`dc+7%$B9W$mmkOm%0C@ap(4&5kY}F03^I+7?kU7spIC0 zY+U)tI94e&3Y))Xd@oug18auPyULvG{ON7(awhXtJlunS>y~-X*K%W(nUNcezd+g_ zXVq;f2)`QY{_TZ~iW?Y8ZInBc+XF3t9^Qu+iD2|JGV!~wojcpi!G>~&(z+Gn)GOpy z#<2|;!&IKj@Y-yhWfm}soOYF? z30eA4K+!H6?V5Bls;Cy(xD5+&HzB?Y%VKi&vA-{VBk64j*E9DcMP)RlP0+Q^ zxl&K$$YW<_EF<+G{qf2#QdgNW*TacJQ%fZm+g2O6=$(EoU5!X7fszpv-64LQHG0pW=fTDWvZGriXzrto(DxI zORV&Tbfwdt-?rAR?%@v>x`tb_FIw${<)xGA=R zmYCD8WcaKdlY@83*rWr^k5}`|<;=5?s?`RNy7DIlb_ZbyfEl2i;P($+KWLmwZvt)K zIl)pgV~%Uy*|22MsEtPnQla}7V8)%7_(c%@X0SyU^;=`G&iUUDHZ$)k4~{E2U^goM z&Hkl^5F{J~lf~85CQ9tfrgs7vvf~Y2+kjvKhu1@wstLL>9|1U5@qi-286kG%u*7`r zj$lkrHYw>dh0(P+Xl;dqdT1Z{;;sHP|S&X ztIj$dArSQ9(HU-64~dze4aFF3BK)YxoBa9=_#jW3pK9lF!V_m6|2oBYnDxKn3<$BW zN1n=$7M88TunD?yY5ssIPV(}6aYuGfp0b*exc`Sz%0NG1W~&cn;7u303=>&_o*9fk zjZ>=8u9|$ur$V64PD9qMqq_6pISvya=z`1+A2S40q9^&JU7%*e5HL0oxr!O643aKG;Qd|Za zDw}C5oDVIe`>+&HBF~2CyI|rKCis67AL`1sKdYPF9S$lh_Sb(ni3Q<^b zz6Gjzx6zXef~7iZ`X2Zpehz{@`o7%JP=V~G4kmQ7TxZ})1I$#2BlbQ1*>0boW_W7z zFo1y-NIcYA%x{DSBlfwPKpp*4WJ`BXU(Z z(6-imZsr>>P#6)Haim{*6)+YP9r8KNG)S&QhAQK1XTHRZG?%NJJP+^aP#BrRG&AHn z*H0@J1#j-sH&I52(W0A5T8O3!0Z{<$lP)nCHbyqhIXgTyO5&PFMA4ihf`wu;t#wOn znc6L|?Fwtz$I^1WA+?LB9 zTcHQ8>=tJIJ$n3Xi?u3@=X(1J^!@{-6J^>N z7r5Vht^S)bdD6?Yxy27)>g({kPeX+~X(htp8~QI2)go4ZA!5kDe)lR^+_cB?3{KhD zlridW@Hh1!Xp<{=1yjOLKR`3W1oZ=3=x;)lwEW%iD%3l!6aEPC34?bqgETc%B;cJk z$M18HjEmngq=t;m6x*){ZZ1!bbG%2VDw+qemMv&f*CsAhRZ*~#YQq#=PJ3f#tAVDg zyyb2c_RWPCBq@Bq|5z`OASyiYoV?Tdv+}F8w^LjJ@tS{v!}uA_b3^yxstlu%z1cXC zfe*4(=^)N1g!`ltI5_prVJI@J&~HS)@@Jy$wkJki>0jD!+ez9I+lzwf_Z$Dyfe5Z@ zpZ06RfGt5!2QQ<4Tf}MI5iNvxQ5V^*99rAsAij+rU&nRdZJb{_-!CmD4(%W{I$5p=w{ErrYEW-uq_IK-hMv3n<^U2u?y0YBKmO23v$G8R zFL6ZWY&<{Mj_aB0_V0cu9z6YS7}~QF-x1j+MW6YHiW~dUwJ;d&8P49<_{Qg+8&F@2 z-|i^4zJss^ZzTqAvjU&6J$t)_Z=3C@ya;a2UJRB$mBKV5Rhy%(%6yjnZt~=6+Lupl zhwG^4nhu_bTVhikFflX%Fh~+~h@tvzKw7W|_M&8pZKHY~b-tz#WZ_al+!(W!_QVInpkCVxM&wCJop=*QZ<0Jh&A z@LA+Gt5^m2f}k2$HH|)^kt^XcG+|w<#w>_X!?MKKg6AOd|<1@=#h%J|V37|y^ewOx)=ca=d zgO78(BHa@Qse~wLSeYT$#Jt_dx&tRbENIEdz8P(S5YMv0Aede3`;bD)LlV1C%1WQPj@&L6m8$Z(CDO|L*PQ}=RbbWZDzqL_Q%Z%O_ z-ntnnkoEc5 zFb=b)>_y*KwuD=boJ@oPQUeXwMHuF%!Z=W0I6roZn=W|rhGvbv=zG8P`}Xze_ZVVeAp0|Rdl<%55`X|TTWoq2 z8IfXR9QGRclk%R#irZ`Uc;)!>K;&v`VB*aIHAb&vKGY$%f#-3RfBntT1K2pakB#8zi;K`z`HqQQ!hy@G~Rt zIjn9HKj7}EVE4~xd!J~{Yi-Z>d!lfz4WEgb;`!P9@oNnWuKAu=@n^o z2}rdoM5npBBpmQxiowut0!RX+dgZ`K9LnTD+U`k*B0_oI$@Cwc{2&ReS|%AR*l;cF z)L=)LR6sjk8t%dUq4aE z>JXN~(4npF?pgJE+p#=+OWa+Q&Q$hT`wx?cD|w5r4uY@UglDlZoosS>e7&%;ynb+y zWYA@A0bryU*UOd=i1+!b_@xUM7MQcUdD~tmIqT!_-kf{(*S{&u&9&_Rh+oGWg3>Q< zk*@XeDV70R2L#%M?wy@q5*3RmlHP)gF2iq!nXpI{v{bTn8BEk`!+@CK!q03%X1Li_ zi8?>w{4lm%$f6OU($emh<+c;ly>2+lZRJ>nCDKhBi9#w^-LKpaT+p0^>mgr)*+I(r z&I-vJ{K6(mhX0w|%-D6^DuIgUxec6P20QKLgl+uojxo!I+ju8Cq8GtD2)+Liqcik^EJluzk+j1=hQ)YkFYsU+o9BqH{>F9^E!v=dzb#XsQ4bt_~y_)yh+%0aS8c7UB{Q$&HwmQmrEa0 zHaWMCOfTwwve_niz)7}Ga9sU0wUUY%;+G%)(*bI?1CjC8u0jMX&Z#};?#hOBjOs}% zhenZGao|MDcvK3L`^|8O=zU}hS-;2u6vB_Po8UpJsp)ke2yl?`F14gk`QUafoLUIR zE?$L4I+uI##q$8U(AjzS41P9UIjZkD4qx;MZY@rqs?h~5HB;qN|2-kMMQWb(DXEM=NgSTrdc~+l zbx6TWiExKf^a5u82~`VxsE@_tz{M57Z^K;hnekk}BA=nmRf>%wTLRWqF5M@S;WcLxbP=J%^63Lp}>IeZ{FBPdhx=CWle zOrbM4g69-JMdhZP)!rA41oSbdY4iHFBNd;{OM#qw@{(MHAGliaQhgrm={)QgR|` zFDBlW#;zQ@iaTh~O$-9HgB_Jfx#)`_N{M-uVFsW3Q+VFqN!6VU>G;H=CnzoUBJ}Nf z!=Tpp!QD$d7pz;1%b|wLfu}G_v~&U! zF8o7cFmLtiQIniJi=*_gewtNmcjx!*&x)qifu_RREYTNd(<3=5Od*lgAnhZfy%kJ4 z5hv}wFxVN>uM0UIBB{%1CPdC=&MRb_@-lV%l)EJ$|B2y3v(k7jL@r^~s;_ONfSC$_ zD87>M4d1D?k03)!YZKz`^Zq56+pcg-6AntLCE&krm1@u`cy?SScV1JgT0RZ>VyfGZ zKnI0cu}NUD$lk}i2_n2%I=Aai!Kg%`1%W3!M+;IifOsics7dkb_J*5ErLH~Jks46~ z^3^#^L|U^b6w2Q1nZ)f!M1N?ND#Eh?lb%Ze6h&|o z09O#UA{oCkT4J$;Eix?h!q!l8;Z1e<^@gB`^fKl8M{0?9;9K)-UbqS5vJb3Y?&gT< z2s?64Ilwb8*dw+nw#aOYMAz1vy}a4-UapL+>l1LLhCE3@Jl{Sz*LR#m1_oKpi#j3s zp>%?KJ6t4O-EJg;jPojHi@DSsgRbamQd{85b+XQl#2M%T%;}Gr~a{+=-1?ycY^j@N>|It=g;d6~qTJ4PU?&ny+R*omC0 z%(y>4P4vF`^xn4xJRk;~G`Y7SxZ{*8Bl^Ft23*&DcGtaZ2)<=2z8mDFQUff029YpLUZ@9Rzdh(UV~EmD z=A}f!L3S(#_b{}Onhwi*-v#|@Y{4rQ<6)C5=>{bxu#_qrm%az`6;Vi!ln0Ey5+oX|W-qAlW}xB}+} zDSA^VgLFtrixvI{PsSGVXv!`v^E(KKCm`zdglI;H0v=F@L+9m%`S$wD=ql}?J^Jw4 z{Y~iRHD7m~xq43*$=qsQrb{Db_p%3U%(^}~UU;V1#kdq_$wC-hjt$?8L%>7X-0}GK zkW9nhh_mf|oOiKpyF2Z@neE}9mTTvJ7-C#dnDE`6EAM7S3#CsYle?R-iVkCOkDj)W(j(4KJ%A>K2RJNQRPtCge>(H-q-F; z-u3>ATS_I)Ribe_4g#Ejm*atf)8jCcIkQW*f?@f~LR00#1h{_` z*JQ_rSiDdroUV~H0clq)$mrh+OWI+%)s}5pi44s?2+?eNNUTSH;%qnrCU7w;OLW8b z1HcXML`TrcBGK4rw}u(AG8jm0spdlgcTF!_o~*gDPGGtHk2Am9IRoLk5KmA3{`sYw zle>N?=y}n-xLd5>=&XddvWa_iB1l`fkE`&q^YY`+*UI@5+rPrqJx*$8TpgT_OR%ivtb-2Hr%k9@OZA-9YaoBY`M_`u5eypurnrQn}$fCaTOWNG?_CS@k5lqkp z9)l1~pZyN6ZI@&Q^Ii#s0N7R!%P6Npq)(&P%^Z6PP6yC{9AWO+D-6=_-2wwTButol4Crb>P7;}*KB^nt_MFRw-$3MX)?eDw( zK!XY_YT=0%8YWI#Dln*YN2yy~5hjSIawdlKFFJhr02 zstUU=W?`oy3d$ZG#l_}cz{n6yeg&kolfN^sO<`G}69fdaN^byMq+sRuZD8w%lTTc% z73Y0(Ji#)KQ-Mb*p+MxBsw4q=uBvxI@7LoT_U5N>8&x7IO5;xOqLNH=<_ZdRkYo8` z(a3Z2lgSBi4wu;KRS5YaCbq&UCla^aG3Ai)!uxVeXDhjofyyQNRR#R>h5tUNdQ+z~XkS$R(-K2;u zD`hLAv`I~*wG%D~DrtdtpNC=?5`1vDHv0lxTUs@jl8N2-Ck#Ua69^q0Q#0{glP-~# ze!)w;K+Ohk!v8F%q3Of?_0u-x5HEma73zr#cfm@eMw3?Pn^nt@?Nrj8IR`KEoIMgR z=LwL^;(8>vgl8*byLHXbSFK8#6y4ae#4d^oZHsF}GDmzZyAJSwq~gaLh8C?PvgV6) zf&hc6Ht%&%1%+(tntgFtn;>E)Gz`XPLLDqN;zKVyLc&VkLJ^S3G$6lHM*eq6n19!j zWeHrfwx_hdb_f84SVfx{j#3zc59r+Y6$m1eyQh;mJ!JwbgQXvYaKtIJW8cbOh2ug4 zU)WPskQb(I&W2Zj7ZPTQxo?6CpVgIYmJOa!;kud%%!0fk5Atl*C8^T*l{C|uLu3y3 zOh{5aE`d$GmJI>k07k2xdRHR9hU9G7y65slLt>k@tEG*A5C=yX*AVr^PJ*SsDfBP` zrE)wfpJRjLvYD+t&Kom2ynmZGEyr0%wi7tONiT2J`deD~#k_G;=8Ma4MFNS3Cl5Zk ztbNcXig8<9RqsCuZ4=8zmHm%gco|Vhgx&XzN&FirTGEqI3G7 z-eJ`2u>;a=A1>PQ47G%SMr|5iz$9qa=!1xfFc3m|E}s{I>aWE18|Hf&3ier@nYy&T z@yEZ%uU3Q|8|0z3UhKob3t2VQ4yGR4|9l0~_lS?Hkek6!(eZ7*u3LyK8rr5f1ES0T$&xvyhnmg4+NfaNX_8&yB zmJ>E{c4nE<{3MtRIhb?AYm1hz`AlF~Me1)bKTq`Lwj2Ni!%e^S^ zSBoZ369hLI@s&-U@dHLw3158`pMOPvvEt- zz2OU8dqx1K0gv!I;`azuR#A#!-AOp0?M_qXJRC)!7YrmQ7JS_*fL-0Qq5&n$do)|( zDi|LDM#~>u&|7Qlc(|ecXX3H>H`^b*+)JSJYhj#Uj6ojQE_gTz0sZbUu8MbmjydS# zRy5+}8UGO)PYJVzdfFv2tIu5!2qkuQg1aM1r3Q@v1bJ{|37LWkKY2g8Qr>T=I!yx@(p*y9dP{;!g z!LBI*z^UnFatnDGOL_!3yiK_y$ii3K5_R)MS&$Tj9b(_JiJG?+DQ8FY3faBDM~w%e zwe7@8Av^t+N=9RHJ229@d52GL&GPCGlSb-gNU=K8e|)3I=SqXRe7L$4UXAcNf3L&4 zT(nEoWgxjTuBM&IYKIp1XV=gZ-T<4O)*b8nirVn^Zo*UgzB;}3FBEqSmn%uAqg4)* zeDDx!Y0y$6TUmV-#dWlC)2e-JE{$Xx8NwWei7*vZC~J<($-tt##!L*J)i2qmU|d%m zV-oa#Aeef$W!mTl>szBU{~De)oqCMR^AYFe=hMwt-}_^&nlB3J_2#=}-NnGZYz8ZI z3HeeOw{gWzx$W=e>pw@Zee1T3tNapvb;d6=6#%1nW$Q6#e<+#Cca|{OFXZT6R=$=; z97yaSO~>ZVY6J%YJNh|)Ve(9$mdYcMAeL0ZAa~#W_s>E`>pdpG%1LYpQ80yuq^$s*IvuO9f^xR<^ZyX;{elt0CbB0{h!sgy8{$R;#j6bNuG z8q(!*ygB<|b%x3{OT4(T8#}*`ngVob8T?EsjyNCVEyR0H>#zGn7X>r=)$6DXP$@LL zY?`X|?Y(8MOX3~>&d7grdGI`AbGnN8Xg(jGcEqXgS%Uw6uX&BVZ^Q>~77x;)5bU2*c;m$H`=hVZQHifq_J%`wrw>@gT}Vgn2pi*`}-%}i)ZGXxqL2W z&V1%fl(M1}DiR?Q002Ohkrr3|FT4GxR|MdHG5Ov55deS!+K7oM%ZQ1QE4w;b+SpqF z0N%M~#>UCU0BBk$VEATFauK-~U0CE87!F9Cn5nNn5J>ce{mZv*ASD4l%lW=a1hR8k z2`(MXDY~$}Dr^g}wK-BEb26HVR^X}(h9`QY0SN05#hew;#5JF^DkFVymmG{m{st@U z?<#^B=?_2FHaNdw|4&eW>|A^RAV^k5Ttwa5@Uj;%we(bH=V{x&-^1?QKg(Z|%7zn5T2vIP32u~p z7ceBk&hHY>J3UzaC6i`wcvSl_=wLNo=1WxR0S^R{ZU(
  • ;^^IAAsvD@kZ$$=R#5 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 P1|aZs^>bP0l+XkK&5M%F literal 0 HcmV?d00001 diff --git a/assets/avatars/hamdaan.png b/assets/avatars/hamdaan.png new file mode 100644 index 0000000000000000000000000000000000000000..6c402bb2e8d01321a37066f4336bbb71b7e3f694 GIT binary patch literal 35746 zcmcecV{;|U)5c?K<78vowry);bF<;u*fut{Z6_zTvB`-}>}+g3_y0>gFM6h`-%L$+ z*VOd&>nJr9SyUuKBnSuyRCzfmjsJGH|Lhe3?!Ptp-TM&&0us(nQc_J`Qj$#Vmy5NX zqZI^%caDXrX|gE<6b&R?_-0RX5t$clSmZbzEF4v0hLKT!;CD6-Hs5YI3IcqV^F8$l z+gU4eT*O zL*K!K>Mbh4gZKy!nnRkGwQ#|Ot42C=Qp6ZqcvUaPyDwswr?lCd1Nlhckb*VbOp`1|g&$KU7Wy>bsPTL==JDt^2>e z&NH35b?{Zs!)6^C=ho7aFyYm9vi+H77;ny9&b{dFL{rEZBrF=;Pq83qBqFt)Kqz=@ zzJmV$FISH@y_$EU@p`-edHePkwCFXo3o%**`mZ>gJlEPV3A6sGjN_kY{8>GCCYfEd zz++B7kq=>@PL7ab&#Myf!6&brlQ7QzBfIZ3yYGqF1u*r3$5^}Qk!DhZ*U{3l9GFxe zo-u_LOe-;!lMN7Bx~gj}SfcnjFkN3)_lazbo&n(0dgA@?2MUoSd@t2N^p7`RAWtI* zxWWP&)LMrOkTK%M5X8fu>Kur)lbH|$KY6@f-EZH!U|K9Gms_X;MIVd{mriR2ra^er zNp&3+8n}Y8H$b3?wzf77DvtQM8v`F7p9J3Q z8UAg<12852))60NorhU;#l-BWLADTSz{bY*BaX=(x5?f7497|5`@c4Ru}$BbZs1$D z$>7MeVhX*rv8Nx#PiqQ0VX6lBMnViH5~z4HBXu~16Dn@ZJc}#N-8`Rvpg(JNaIap; zJ0;fTPS(jgn&m1ZPss{8(9^TCqf5Y-ZKmS@h|x4Fsw~1?C-rVGcJF>rzXvH*rsxjR`d$MRMT=#IzT>j*NdbnX&INj-d)}A@MhZU z$y5r^!fbm5TKb!pp(q8s36`RxHq>XOX_YRG>>c~B>gI7L%mEdN>VuiVUR}>KoRvnb z;ZwB-yw6ZV&e@hKky$-rE3@3%T`=0*H1ZmR$+`@b2OUXrORfYC|^Sn-h{F6rf-FnQ7+R|JP|_P<+Ldgzi% zBxD=svfU6kHHSWAmP`WE;0S79=;%3=p~@2nuBhg?K|+X(OG^?N>GM>r{&^W$xI?Kl z9ggHBb02Y@T6Wr;&)4r9ny9<2B14j@PTpZZdTVb1Q$%E1XC_~}q@TOI`$C(LH%K*S z!U)`bZ~wagP?ZfQA>7^F-K6qkPU>E!gx=msF@0UWO?0PvV`|Iid75i2DU`>EkG^(4 zJUm>yzudW!WbU}G{{1@$$QrJ4B_bxS9{|6e*~G-eyn)@w0sbq!b0uYd%2xoDg#3(u zZ}g9c-ojL0M8+?K*2m`6D+WjYtH6&9;K$VGuIPKjRrg9xua$jzwq78g*FZ<$NXGyy zf}UL6mpejY#(6c2TNtgp;v!{`maF{Xgi^kO#I1y1nt0U^cAi{835B1@5!D<{(I~(d z>{d1CsuoNzF>uQ#f41oH!wyM5ZOq};e+5;Z^-R&I{DCl2JKp^q6 z8ZA1sg1`-;y>9k$U6CKWqtWgQ~{V~~|Wa+YQOJ1_fI-%v5kM1}l2-k*Q$DX0%% z`sr(Yh0>T23rd24wNPB@2_-^u_NDWOw~4y4ku(e%;Gc`@G@iT3u=9tXpY#4KN|_Tc zv);_@`>s+m3LnOrR+nr*h$wxBTVo%Sz71!BnXh#hB!)9c?tg zAtUjedq71!`1;v$Ft%vJPQ8(HQ32-nef|k&N)meazHV}9sL@N`$5r=`8GqiHs#QM( zd*tz4^+V^*yLRG8WiaFUsb%sZ>pd6!pI!Ex^|N2lc_*l3fE%x0nO_Y53K-gar%E=Q zOM)XIJZaDBmcn}IlAGVLKq(s!V^$_CtJ`I4e``uDbIXIJiM792B&YGG2gKO8#%R`U zw>$<*zLb2Xqaa*97s^D9s4$%o4uh3()oInRnvZ|ksIkU%`9M>9;E^Zn!?Uru8G8p{ z!h_5g9pL7@iTmgFQ7BCE=@W2u$*jN-FcZk!?Bv$#+M^6q`wk&v&e<=U@U2*#(M%4(wPr<}}xmdu}aB zj56$tN}LuyqNtP|FHx>u5GK4u68?ASKr3#|3b$tXpfw64yE&}>EhQvBWO#6vne+jel=VzUDD2*oSFiWLX$vD22hrCCzA zJD|__Lq4G|&qF`rIuWnXft~(rxKesWJ?cG#c%M$^|8HskIk$wtsxCPz@}CVR%a8i$ zU+T|(`6*)lU`l0AU70ucAOP|9>irXz@rA3EKaz5Cma@k2RnKE6Hnn!%zd5j-YTEr$ zxoW-m+_y1&*IbVio*{6Ab83?RRo66j*?x(32A&3!_@eS#R)faZV-Zyw9=*EeJj+7L zP~x(~FN_}Xs4U0mV>$880NOO_{S;+)a(TIcr)5pmOWF!6F^R}UmoyEqYNXojPpedo zQ*PSumuwgqDwBS2i&x&(_qPR3U>yT z9KM)*7R}yOiwloT#D&7Aj>Kg<^9tTfiNJ&OH~m}e6lKM2=VTS2AZi>vKPzBDaZhhM z16{W|fzxI-6iJ0qgq>IR$HHm0CpRW*?F~&IpDJgZ7^2jxo_FiMdLM(sep^_%5_%G8nEYbm377d+DQ4 z2DR%!yNB7gx(=hr)OA>XLwFSZ^tX8>UUd=JV7eifXtk>*{v2ywR z+iyZtMU}+WL=Lt^CG8vqOARO}f!KTJdaw7>IaUjrZOdEb@OzNiVbdER?CIkxac zQinzcpb1Zv>dMd(DvuI|MUl;MN`96obM7yA)eNB>_bvYj zY2Wy_zMAAbzLr?cj3LuiZ=<7EfAEtZ*yeK{{bOGANEW^6Rso|KaMkM#skpWEwy5WBq!jm^+4VSu@}#4pC=B;b0Z&(-TVI18#@h8hnU;IXwU{Wt_>kv5 zKU_DtBX<1X1cfPG*V+@QxIE)>6-n!_AGIaE%~$$V|oH7Au|=gt&nkjGjm zC-2tb?VIpc1u5P)S|W|MKX$N^Oo6Sp~)=Bh^uYuIR|*R)|A^leHi z@ma(3!xl=#>c*0T87Y3sP%r2Q8t(;otld?N7j|@E{UiFnl6H5&djcg@2E;azZixapA1rc z?h!*CZx^wEqMVv@xPPq8jPm3gv(4Cwm=nQ=s)Whm_XX~PH@RUiLfDO|-9|LNb{M?d z5F#mq*{Lt`F|>eYdVeo4SJCZhEuM zpLHE<`6&A@XV&_5;{NFy2-98|+Kw~(OlftqFdNerZ8G6c`vlX-2SGpks7ccjoJr{& ziAJtzfh{LTkh4x5L?jB`bk$08o*9%<_79`IUU8k;DDL)VYGp@1O1Tb z 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 j2NXDRdgP8GpU<5qA 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 HGY|P6hz|z` literal 0 HcmV?d00001 diff --git a/assets/avatars/sagar.png b/assets/avatars/sagar.png new file mode 100644 index 0000000000000000000000000000000000000000..381e22837c502b4125c3fa51c59407791b1a2495 GIT binary patch literal 34262 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 + + + diff --git a/assets/card_border-055fab2a.png b/assets/card_border.png similarity index 100% rename from assets/card_border-055fab2a.png rename to assets/card_border.png diff --git a/assets/chalice.png b/assets/chalice.png new file mode 100644 index 0000000000000000000000000000000000000000..e2c7a7223e13994fce6969bf00fa7ad803e68c9b GIT binary patch literal 2111 zcmeAS@N?(olHy`uVBq!ia0y~yVB8DD4>;I>B8GOGa~T*o*gRbvLn>~)y|FQSPAS8& zkLurYlO}CDlv;4&=Ojfw)#euyCfyAcX#XSH6fExeMPJ~~<`P@SJ0%4fOiCdIp(h%f zHkvx0Q(MUStZGhk*z_pnx9{KHoqe9&=zqohJ@0GZ--EqbS?gy;G3<_2FP=_1? z9<+#^K{tHngO@cQt|?@nc6Mesf5m)|lmkPwZ@Y>4gmI z%^3x38So$%eg-_~A~ORRHM|U(nZOm}U38bHK#$$?SDM3@Wxw}dF=U=|x|8!qd0ajd zg?<8h3y3Z+HDdfPzY}j7yKSF5@de}gm&xZ? z@P!dD_#o!tARAsV;z9U*0+huQJCxZBbQFHeDX5B){yvv?@UGm;Ns+-3Q#qF%P&oOP?Odhh$(t3Lzuq}o>pgRu5xp&@-{v_~V zIz|bPqo9HmW4N-{ft{gh4{M^cjnsxWK zb5|BT+xGAywKCi??^Gr!Q;$!rk_`J%Gca-}Vr3%-Ei(IGbSjhFP3e%E(mgzkTdsk_ moS{Ilg0hkbn8LQ)mA`g$^4|w;&If=E0|rl5KbLh*2~7Y3^VLlN literal 0 HcmV?d00001 diff --git a/assets/cp-08f5a905.css b/assets/cp-08f5a905.css deleted file mode 100644 index b2f098d..0000000 --- a/assets/cp-08f5a905.css +++ /dev/null @@ -1 +0,0 @@ -*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Roboto,sans-serif;font-feature-settings:normal;font-variation-settings:normal}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}html{--tw-text-opacity: 1;color:rgb(38 38 38 / var(--tw-text-opacity))}html.dark{--tw-text-opacity: 1;color:rgb(250 250 250 / var(--tw-text-opacity));--tw-bg-opacity: 1;background-color:rgb(38 38 38 / var(--tw-bg-opacity))}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.container{width:100%}@media (min-width: 320px){.container{max-width:320px}}@media (min-width: 640px){.container{max-width:640px}}@media (min-width: 768px){.container{max-width:768px}}@media (min-width: 1024px){.container{max-width:1024px}}@media (min-width: 1280px){.container{max-width:1280px}}@media (min-width: 1450px){.container{max-width:1450px}}@media (min-width: 1536px){.container{max-width:1536px}}@media (min-width: 1760px){.container{max-width:1760px}}@media (min-width: 2200px){.container{max-width:2200px}}.pointer-events-none{pointer-events:none}.\!visible{visibility:visible!important}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{inset:0px}.\!left-auto{left:auto!important}.\!top-auto{top:auto!important}.-bottom-\[47px\]{bottom:-47px}.-left-\[15px\]{left:-15px}.-top-2{top:-.5rem}.-top-\[21px\]{top:-21px}.-top-\[35px\]{top:-35px}.bottom-0{bottom:0px}.bottom-1\/2{bottom:50%}.bottom-\[2px\]{bottom:2px}.left-0{left:0px}.left-1\/2{left:50%}.left-2{left:.5rem}.left-20{left:5rem}.left-3{left:.75rem}.left-6{left:1.5rem}.left-\[calc\(50\%-1px\)\]{left:calc(50% - 1px)}.right-0{right:0px}.right-0\.5{right:.125rem}.right-1{right:.25rem}.right-1\.5{right:.375rem}.right-3{right:.75rem}.right-9{right:2.25rem}.right-\[2px\]{right:2px}.right-\[60px\]{right:60px}.top-0{top:0px}.top-1{top:.25rem}.top-1\/2{top:50%}.top-2{top:.5rem}.top-\[-400px\]{top:-400px}.top-\[11px\]{top:11px}.top-\[13px\]{top:13px}.top-\[35\%\]{top:35%}.top-\[57\%\]{top:57%}.top-\[80px\]{top:80px}.z-10{z-index:10}.z-50{z-index:50}.z-\[1040\]{z-index:1040}.z-\[1065\]{z-index:1065}.z-\[1066\]{z-index:1066}.z-\[1070\]{z-index:1070}.z-\[1080\]{z-index:1080}.z-\[49\]{z-index:49}.z-\[999\]{z-index:999}.col-span-2{grid-column:span 2 / span 2}.col-start-2{grid-column-start:2}.col-start-3{grid-column-start:3}.float-right{float:right}.float-left{float:left}.-m-5{margin:-1.25rem}.m-0{margin:0}.m-1{margin:.25rem}.m-10{margin:2.5rem}.m-2{margin:.5rem}.m-6{margin:1.5rem}.\!my-0{margin-top:0!important;margin-bottom:0!important}.-mx-4{margin-left:-1rem;margin-right:-1rem}.-my-3{margin-top:-.75rem;margin-bottom:-.75rem}.-my-6{margin-top:-1.5rem;margin-bottom:-1.5rem}.mx-0{margin-left:0;margin-right:0}.mx-20{margin-left:5rem;margin-right:5rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-5{margin-left:1.25rem;margin-right:1.25rem}.mx-auto{margin-left:auto;margin-right:auto}.my-0{margin-top:0;margin-bottom:0}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-10{margin-top:2.5rem;margin-bottom:2.5rem}.my-12{margin-top:3rem;margin-bottom:3rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.my-4{margin-top:1rem;margin-bottom:1rem}.my-6{margin-top:1.5rem;margin-bottom:1.5rem}.my-8{margin-top:2rem;margin-bottom:2rem}.my-\[5px\]{margin-top:5px;margin-bottom:5px}.-mt-3{margin-top:-.75rem}.mb-0{margin-bottom:0}.mb-10{margin-bottom:2.5rem}.mb-12{margin-bottom:3rem}.mb-14{margin-bottom:3.5rem}.mb-2{margin-bottom:.5rem}.mb-2\.5{margin-bottom:.625rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mb-\[10px\]{margin-bottom:10px}.ml-0{margin-left:0}.ml-10{margin-left:2.5rem}.ml-2{margin-left:.5rem}.ml-6{margin-left:1.5rem}.ml-7{margin-left:1.75rem}.ml-\[30px\]{margin-left:30px}.ml-\[3px\]{margin-left:3px}.ml-auto{margin-left:auto}.mr-0{margin-right:0}.mr-10{margin-right:2.5rem}.mr-2{margin-right:.5rem}.mr-4{margin-right:1rem}.mr-6{margin-right:1.5rem}.mr-7{margin-right:1.75rem}.mr-\[8px\]{margin-right:8px}.mr-auto{margin-right:auto}.mt-0{margin-top:0}.mt-0\.5{margin-top:.125rem}.mt-10{margin-top:2.5rem}.mt-12{margin-top:3rem}.mt-14{margin-top:3.5rem}.mt-2{margin-top:.5rem}.mt-2\.5{margin-top:.625rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-\[0\.15rem\]{margin-top:.15rem}.box-border{box-sizing:border-box}.box-content{box-sizing:content-box}.\!block{display:block!important}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.table{display:table}.grid{display:grid}.contents{display:contents}.hidden{display:none}.\!h-0{height:0px!important}.h-0{height:0px}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-2\/5{height:40%}.h-3{height:.75rem}.h-32{height:8rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[1\.125rem\]{height:1.125rem}.h-\[100\%\]{height:100%}.h-\[100px\]{height:100px}.h-\[120px\]{height:120px}.h-\[15px\]{height:15px}.h-\[160px\]{height:160px}.h-\[20\%\]{height:20%}.h-\[260px\]{height:260px}.h-\[30px\]{height:30px}.h-\[32px\]{height:32px}.h-\[380px\]{height:380px}.h-\[40px\]{height:40px}.h-\[42px\]{height:42px}.h-\[48px\]{height:48px}.h-\[4px\]{height:4px}.h-\[50\%\]{height:50%}.h-\[512px\]{height:512px}.h-\[56px\]{height:56px}.h-\[6px\]{height:6px}.h-\[72px\]{height:72px}.h-\[75\%\]{height:75%}.h-\[8rem\]{height:8rem}.h-auto{height:auto}.h-full{height:100%}.h-screen{height:100vh}.max-h-\[30px\]{max-height:30px}.max-h-\[40px\]{max-height:40px}.max-h-\[60px\]{max-height:60px}.max-h-\[80px\]{max-height:80px}.max-h-\[calc\(100\%-64px\)\]{max-height:calc(100% - 64px)}.max-h-full{max-height:100%}.min-h-\[305px\]{min-height:305px}.min-h-\[325px\]{min-height:325px}.min-h-\[auto\]{min-height:auto}.w-0{width:0px}.w-0\.5{width:.125rem}.w-1{width:.25rem}.w-1\.5{width:.375rem}.w-10{width:2.5rem}.w-16{width:4rem}.w-2{width:.5rem}.w-20{width:5rem}.w-24{width:6rem}.w-28{width:7rem}.w-3{width:.75rem}.w-32{width:8rem}.w-4{width:1rem}.w-40{width:10rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-7{width:1.75rem}.w-72{width:18rem}.w-9{width:2.25rem}.w-\[1\.125rem\]{width:1.125rem}.w-\[150px\]{width:150px}.w-\[15px\]{width:15px}.w-\[160px\]{width:160px}.w-\[260px\]{width:260px}.w-\[2px\]{width:2px}.w-\[304px\]{width:304px}.w-\[30px\]{width:30px}.w-\[328px\]{width:328px}.w-\[32px\]{width:32px}.w-\[40\%\]{width:40%}.w-\[40px\]{width:40px}.w-\[44px\]{width:44px}.w-\[48px\]{width:48px}.w-\[4px\]{width:4px}.w-\[6px\]{width:6px}.w-\[70\%\]{width:70%}.w-\[72px\]{width:72px}.w-\[76px\]{width:76px}.w-auto{width:auto}.w-full{width:100%}.w-screen{width:100vw}.min-w-0{min-width:0px}.min-w-\[100px\]{min-width:100px}.min-w-\[30px\]{min-width:30px}.min-w-\[310px\]{min-width:310px}.min-w-\[330px\]{min-width:330px}.min-w-\[48px\]{min-width:48px}.min-w-\[64px\]{min-width:64px}.max-w-\[100px\]{max-width:100px}.max-w-\[120px\]{max-width:120px}.max-w-\[130px\]{max-width:130px}.max-w-\[140px\]{max-width:140px}.max-w-\[160px\]{max-width:160px}.max-w-\[180px\]{max-width:180px}.max-w-\[1900px\]{max-width:1900px}.max-w-\[200px\]{max-width:200px}.max-w-\[267px\]{max-width:267px}.max-w-\[325px\]{max-width:325px}.max-w-\[700px\]{max-width:700px}.max-w-\[80px\]{max-width:80px}.max-w-\[90\%\]{max-width:90%}.max-w-\[990px\]{max-width:990px}.max-w-\[calc\(100\%-1rem\)\]{max-width:calc(100% - 1rem)}.max-w-full{max-width:100%}.flex-auto{flex:1 1 auto}.flex-shrink-0,.shrink-0{flex-shrink:0}.grow{flex-grow:1}.grow-0{flex-grow:0}.basis-auto{flex-basis:auto}.origin-\[0_0\]{transform-origin:0 0}.origin-\[center_bottom_0\]{transform-origin:center bottom 0}.-translate-x-1\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-\[12\.5\%\]{--tw-translate-x: -12.5%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-\[150\%\]{--tw-translate-x: -150%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-full{--tw-translate-x: -100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-\[0rem\]{--tw-translate-y: -0rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-\[150\%\]{--tw-translate-x: 150%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-full{--tw-translate-x: 100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-1{--tw-translate-y: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-0{--tw-scale-x: 0;--tw-scale-y: 0;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-100{--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-\[0\.8\]{--tw-scale-x: .8;--tw-scale-y: .8;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-\[1\.02\]{--tw-scale-x: 1.02;--tw-scale-y: 1.02;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform-none{transform:none}.animate-\[fade-in_0\.15s_both\]{animation:fade-in .15s both}.animate-\[fade-in_0\.3s_both\]{animation:fade-in .3s both}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.animate-\[fade-in_350ms_ease-in-out\]{animation:fade-in .35s ease-in-out}.animate-\[fade-out_0\.15s_both\]{animation:fade-out .15s both}.animate-\[fade-out_0\.3s_both\]{animation:fade-out .3s both}@keyframes fade-out{0%{opacity:1}to{opacity:0}}.animate-\[fade-out_350ms_ease-in-out\]{animation:fade-out .35s ease-in-out}@keyframes show-up-clock{0%{opacity:0;transform:scale(.7)}to{opacity:1;transform:scale(1)}}.animate-\[show-up-clock_350ms_linear\]{animation:show-up-clock .35s linear}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.touch-pan-y{--tw-pan-y: pan-y;touch-action:var(--tw-pan-x) var(--tw-pan-y) var(--tw-pinch-zoom)}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.resize{resize:both}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.\!flex-row{flex-direction:row!important}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.flex-nowrap{flex-wrap:nowrap}.place-items-center{place-items:center}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-around{justify-content:space-around}.justify-evenly{justify-content:space-evenly}.gap-16{gap:4rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-5{gap:1.25rem}.gap-7{gap:1.75rem}.gap-x-0{-moz-column-gap:0px;column-gap:0px}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.break-normal{overflow-wrap:normal;word-break:normal}.break-words{overflow-wrap:break-word}.rounded,.rounded-\[0\.25rem\]{border-radius:.25rem}.rounded-\[0\.6rem\]{border-radius:.6rem}.rounded-\[100\%\]{border-radius:100%}.rounded-\[10px\]{border-radius:10px}.rounded-\[16px\]{border-radius:16px}.rounded-\[50\%\]{border-radius:50%}.rounded-\[999px\]{border-radius:999px}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-none{border-radius:0}.rounded-xl{border-radius:.75rem}.rounded-b-lg{border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.rounded-l-\[0\.25rem\]{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-r-\[0\.25rem\]{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.rounded-t-\[0\.6rem\]{border-top-left-radius:.6rem;border-top-right-radius:.6rem}.rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.\!border-\[3px\]{border-width:3px!important}.border{border-width:1px}.border-0{border-width:0px}.border-\[\.125rem\],.border-\[0\.125rem\]{border-width:.125rem}.border-\[14px\]{border-width:14px}.border-b-2{border-bottom-width:2px}.border-l-0{border-left-width:0px}.border-l-\[0\.125rem\]{border-left-width:.125rem}.border-r-0{border-right-width:0px}.\!border-solid{border-style:solid!important}.border-solid{border-style:solid}.border-none{border-style:none}.\!border-\[\#b2b3b4\]{--tw-border-opacity: 1 !important;border-color:rgb(178 179 180 / var(--tw-border-opacity))!important}.border-\[\#3b71ca\]{--tw-border-opacity: 1;border-color:rgb(59 113 202 / var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity))}.border-neutral-100{--tw-border-opacity: 1;border-color:rgb(245 245 245 / var(--tw-border-opacity))}.border-neutral-200{--tw-border-opacity: 1;border-color:rgb(229 229 229 / var(--tw-border-opacity))}.border-neutral-300{--tw-border-opacity: 1;border-color:rgb(212 212 212 / var(--tw-border-opacity))}.border-primary{--tw-border-opacity: 1;border-color:rgb(59 113 202 / var(--tw-border-opacity))}.border-primary-400{--tw-border-opacity: 1;border-color:rgb(143 174 224 / var(--tw-border-opacity))}.border-transparent{border-color:transparent}.border-white{--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity))}.border-t-transparent{border-top-color:transparent}.\!bg-\[\#858585\]{--tw-bg-opacity: 1 !important;background-color:rgb(133 133 133 / var(--tw-bg-opacity))!important}.\!bg-danger-100{--tw-bg-opacity: 1 !important;background-color:rgb(250 229 233 / var(--tw-bg-opacity))!important}.\!bg-primary-100{--tw-bg-opacity: 1 !important;background-color:rgb(227 235 247 / var(--tw-bg-opacity))!important}.\!bg-success-100{--tw-bg-opacity: 1 !important;background-color:rgb(214 250 228 / var(--tw-bg-opacity))!important}.bg-\[\#00000012\]{background-color:#00000012}.bg-\[\#00000066\]{background-color:#0006}.bg-\[\#1313130\]{background-color:#1313130}.bg-\[\#1E1E1E\]{--tw-bg-opacity: 1;background-color:rgb(30 30 30 / var(--tw-bg-opacity))}.bg-\[\#2E2E2E\]{--tw-bg-opacity: 1;background-color:rgb(46 46 46 / var(--tw-bg-opacity))}.bg-\[\#3b71ca\]{--tw-bg-opacity: 1;background-color:rgb(59 113 202 / var(--tw-bg-opacity))}.bg-\[\#555555\]{--tw-bg-opacity: 1;background-color:rgb(85 85 85 / var(--tw-bg-opacity))}.bg-\[\#6460ff\]{--tw-bg-opacity: 1;background-color:rgb(100 96 255 / var(--tw-bg-opacity))}.bg-\[\#68ACB0\]{--tw-bg-opacity: 1;background-color:rgb(104 172 176 / var(--tw-bg-opacity))}.bg-\[\#6d6d6d\]{--tw-bg-opacity: 1;background-color:rgb(109 109 109 / var(--tw-bg-opacity))}.bg-\[\#9E9E9E\]{--tw-bg-opacity: 1;background-color:rgb(158 158 158 / var(--tw-bg-opacity))}.bg-\[\#BABABA\]{--tw-bg-opacity: 1;background-color:rgb(186 186 186 / var(--tw-bg-opacity))}.bg-\[\#BE9BE5\]{--tw-bg-opacity: 1;background-color:rgb(190 155 229 / var(--tw-bg-opacity))}.bg-\[\#DA77D6\]{--tw-bg-opacity: 1;background-color:rgb(218 119 214 / var(--tw-bg-opacity))}.bg-\[\#aaa\]{--tw-bg-opacity: 1;background-color:rgb(170 170 170 / var(--tw-bg-opacity))}.bg-\[\#eceff1\]{--tw-bg-opacity: 1;background-color:rgb(236 239 241 / var(--tw-bg-opacity))}.bg-\[\#ffffff\]{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.bg-black{--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity))}.bg-black\/10{background-color:#0000001a}.bg-black\/40{background-color:#0006}.bg-primary{--tw-bg-opacity: 1;background-color:rgb(59 113 202 / var(--tw-bg-opacity))}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.bg-white\/30{background-color:#ffffff4d}.bg-zinc-500{--tw-bg-opacity: 1;background-color:rgb(113 113 122 / var(--tw-bg-opacity))}.bg-zinc-600{--tw-bg-opacity: 1;background-color:rgb(82 82 91 / var(--tw-bg-opacity))}.bg-zinc-600\/50{background-color:#52525b80}.bg-zinc-700{--tw-bg-opacity: 1;background-color:rgb(63 63 70 / var(--tw-bg-opacity))}.bg-\[url\(\'\/assets\/footer\.png\'\)\]{background-image:url(/assets/footer-5a07628a.png)}.bg-cover{background-size:cover}.bg-clip-padding{background-clip:padding-box}.fill-\[\#afafaf\]{fill:#afafaf}.fill-white{fill:#fff}.p-0{padding:0}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-4{padding:1rem}.p-\[5px\]{padding:5px}.p-\[auto\]{padding:auto}.\!py-0{padding-top:0!important;padding-bottom:0!important}.px-0{padding-left:0;padding-right:0}.px-0\.5{padding-left:.125rem;padding-right:.125rem}.px-10{padding-left:2.5rem;padding-right:2.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.px-\[0\.4rem\]{padding-left:.4rem;padding-right:.4rem}.px-\[10px\]{padding-left:10px;padding-right:10px}.px-\[12px\]{padding-left:12px;padding-right:12px}.px-\[auto\]{padding-left:auto;padding-right:auto}.py-0{padding-top:0;padding-bottom:0}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-32{padding-top:8rem;padding-bottom:8rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.py-8{padding-top:2rem;padding-bottom:2rem}.py-\[0\.32rem\]{padding-top:.32rem;padding-bottom:.32rem}.py-\[0\.33rem\]{padding-top:.33rem;padding-bottom:.33rem}.py-\[0\.4rem\]{padding-top:.4rem;padding-bottom:.4rem}.py-\[10px\]{padding-top:10px;padding-bottom:10px}.py-\[1px\]{padding-top:1px;padding-bottom:1px}.py-\[5px\]{padding-top:5px;padding-bottom:5px}.pb-0{padding-bottom:0}.pb-10{padding-bottom:2.5rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pb-3\.5{padding-bottom:.875rem}.pl-0{padding-left:0}.pl-2{padding-left:.5rem}.pl-7{padding-left:1.75rem}.pl-8{padding-left:2rem}.pl-\[50px\]{padding-left:50px}.pl-\[8px\]{padding-left:8px}.pr-2{padding-right:.5rem}.pr-\[24px\]{padding-right:24px}.pt-0{padding-top:0}.pt-10{padding-top:2.5rem}.pt-2{padding-top:.5rem}.pt-2\.5{padding-top:.625rem}.pt-4{padding-top:1rem}.pt-\[0\.37rem\]{padding-top:.37rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-middle{vertical-align:middle}.align-bottom{vertical-align:bottom}.font-sans{font-family:Roboto,sans-serif}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-\[0\.8rem\]{font-size:.8rem}.text-\[0\.9rem\]{font-size:.9rem}.text-\[1\.1rem\]{font-size:1.1rem}.text-\[10px\]{font-size:10px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.text-\[15px\]{font-size:15px}.text-\[16px\]{font-size:16px}.text-\[18px\]{font-size:18px}.text-\[2\.5rem\]{font-size:2.5rem}.text-\[3\.75rem\]{font-size:3.75rem}.text-\[34px\]{font-size:34px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-light{font-weight:300}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.normal-case{text-transform:none}.italic{font-style:italic}.not-italic{font-style:normal}.leading-10{line-height:2.5rem}.leading-6{line-height:1.5rem}.leading-9{line-height:2.25rem}.leading-\[1\.2\]{line-height:1.2}.leading-\[1\.5\]{line-height:1.5}.leading-\[1\.6\]{line-height:1.6}.leading-\[2\.15\]{line-height:2.15}.leading-\[40px\]{line-height:40px}.leading-loose{line-height:2}.leading-normal{line-height:1.5}.leading-tight{line-height:1.25}.tracking-\[-0\.00833em\]{letter-spacing:-.00833em}.tracking-\[\.1rem\],.tracking-\[0\.1rem\]{letter-spacing:.1rem}.tracking-\[1\.7px\]{letter-spacing:1.7px}.tracking-normal{letter-spacing:0em}.tracking-wider{letter-spacing:.05em}.\!text-danger-700{--tw-text-opacity: 1 !important;color:rgb(176 35 58 / var(--tw-text-opacity))!important}.\!text-gray-50{--tw-text-opacity: 1 !important;color:rgb(249 250 251 / var(--tw-text-opacity))!important}.\!text-primary{--tw-text-opacity: 1 !important;color:rgb(59 113 202 / var(--tw-text-opacity))!important}.\!text-primary-700{--tw-text-opacity: 1 !important;color:rgb(40 81 146 / var(--tw-text-opacity))!important}.\!text-success-700{--tw-text-opacity: 1 !important;color:rgb(14 117 55 / var(--tw-text-opacity))!important}.\!text-white{--tw-text-opacity: 1 !important;color:rgb(255 255 255 / var(--tw-text-opacity))!important}.text-\[\#00FFDF\]{--tw-text-opacity: 1;color:rgb(0 255 223 / var(--tw-text-opacity))}.text-\[\#1E1E1E\]{--tw-text-opacity: 1;color:rgb(30 30 30 / var(--tw-text-opacity))}.text-\[\#212529\]{--tw-text-opacity: 1;color:rgb(33 37 41 / var(--tw-text-opacity))}.text-\[\#3173b7\]{--tw-text-opacity: 1;color:rgb(49 115 183 / var(--tw-text-opacity))}.text-\[\#3b71ca\]{--tw-text-opacity: 1;color:rgb(59 113 202 / var(--tw-text-opacity))}.text-\[\#4f4f4f\]{--tw-text-opacity: 1;color:rgb(79 79 79 / var(--tw-text-opacity))}.text-\[\#6460ff\]{--tw-text-opacity: 1;color:rgb(100 96 255 / var(--tw-text-opacity))}.text-\[\#68ACB0\]{--tw-text-opacity: 1;color:rgb(104 172 176 / var(--tw-text-opacity))}.text-\[\#78BEFF\]{--tw-text-opacity: 1;color:rgb(120 190 255 / var(--tw-text-opacity))}.text-\[\#9E9E9E\]{--tw-text-opacity: 1;color:rgb(158 158 158 / var(--tw-text-opacity))}.text-\[\#BABABA\]{--tw-text-opacity: 1;color:rgb(186 186 186 / var(--tw-text-opacity))}.text-\[\#BC81FF\]{--tw-text-opacity: 1;color:rgb(188 129 255 / var(--tw-text-opacity))}.text-\[\#BE9BE5\]{--tw-text-opacity: 1;color:rgb(190 155 229 / var(--tw-text-opacity))}.text-\[\#BEBEBE\]{--tw-text-opacity: 1;color:rgb(190 190 190 / var(--tw-text-opacity))}.text-\[\#D6D6D6\]{--tw-text-opacity: 1;color:rgb(214 214 214 / var(--tw-text-opacity))}.text-\[\#D9D9D9\]{--tw-text-opacity: 1;color:rgb(217 217 217 / var(--tw-text-opacity))}.text-\[\#DA77D6\]{--tw-text-opacity: 1;color:rgb(218 119 214 / var(--tw-text-opacity))}.text-\[\#E5B567\]{--tw-text-opacity: 1;color:rgb(229 181 103 / var(--tw-text-opacity))}.text-\[\#FF6D75\]{--tw-text-opacity: 1;color:rgb(255 109 117 / var(--tw-text-opacity))}.text-\[\#FFC977\]{--tw-text-opacity: 1;color:rgb(255 201 119 / var(--tw-text-opacity))}.text-\[\#FFFFFF\]{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.text-\[\#b3afaf\]{--tw-text-opacity: 1;color:rgb(179 175 175 / var(--tw-text-opacity))}.text-\[\#f74b03\]{--tw-text-opacity: 1;color:rgb(247 75 3 / var(--tw-text-opacity))}.text-\[\#ffdc20\]{--tw-text-opacity: 1;color:rgb(255 220 32 / var(--tw-text-opacity))}.text-\[\#ffffff8a\]{color:#ffffff8a}.text-\[\#ffffff\]{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.text-\[\]{color:}.text-\[rgb\(220\,76\,100\)\]{--tw-text-opacity: 1;color:rgb(220 76 100 / var(--tw-text-opacity))}.text-black{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity))}.text-black\/50{color:#00000080}.text-black\/\[64\]{color:#000}.text-blue-600{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity))}.text-gray-200{--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity))}.text-gray-300{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity))}.text-gray-50{--tw-text-opacity: 1;color:rgb(249 250 251 / var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity))}.text-green-600{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity))}.text-neutral-500{--tw-text-opacity: 1;color:rgb(115 115 115 / var(--tw-text-opacity))}.text-primary{--tw-text-opacity: 1;color:rgb(59 113 202 / var(--tw-text-opacity))}.text-red-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.underline{text-decoration-line:underline}.no-underline{text-decoration-line:none}.underline-offset-auto{text-underline-offset:auto}.\!opacity-0{opacity:0!important}.\!opacity-100{opacity:1!important}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-50{opacity:.5}.opacity-\[\.53\]{opacity:.53}.opacity-\[\.54\]{opacity:.54}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0px_3px_0_rgba\(0\,0\,0\,0\.07\)\,0_2px_2px_0_rgba\(0\,0\,0\,0\.04\)\]{--tw-shadow: 0 0px 3px 0 rgba(0,0,0,.07),0 2px 2px 0 rgba(0,0,0,.04);--tw-shadow-colored: 0 0px 3px 0 var(--tw-shadow-color), 0 2px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_10px_15px_-3px_rgba\(0\,0\,0\,0\.07\)\,0_4px_6px_-2px_rgba\(0\,0\,0\,0\.05\)\]{--tw-shadow: 0 10px 15px -3px rgba(0,0,0,.07),0 4px 6px -2px rgba(0,0,0,.05);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_2px_5px_0_rgba\(0\,0\,0\,0\.16\)\,_0_2px_10px_0_rgba\(0\,0\,0\,0\.12\)\]{--tw-shadow: 0 2px 5px 0 rgba(0,0,0,.16), 0 2px 10px 0 rgba(0,0,0,.12);--tw-shadow-colored: 0 2px 5px 0 var(--tw-shadow-color), 0 2px 10px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0px_2px_15px_-3px_rgba\(0\,0\,0\,\.07\)\,_0px_10px_20px_-2px_rgba\(0\,0\,0\,\.04\)\]{--tw-shadow: 0px 2px 15px -3px rgba(0,0,0,.07), 0px 10px 20px -2px rgba(0,0,0,.04);--tw-shadow-colored: 0px 2px 15px -3px var(--tw-shadow-color), 0px 10px 20px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-none{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.blur{--tw-blur: blur(8px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.brightness-0{--tw-brightness: brightness(0);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.invert-\[1\]{--tw-invert: invert(1);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[background-color\,box-shadow\,border\]{transition-property:background-color,box-shadow,border;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[height\]{transition-property:height;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[opacity\]{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[transform\,_opacity\]{transition-property:transform,opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[transform\,height\]{transition-property:transform,height;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\]{transition-property:width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.delay-\[0ms\]{transition-delay:0ms}.duration-150{transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}.duration-\[250ms\]{transition-duration:.25s}.duration-\[350ms\]{transition-duration:.35s}.duration-\[400ms\]{transition-duration:.4s}.ease-\[cubic-bezier\(0\,0\,0\.15\,1\)\,_cubic-bezier\(0\,0\,0\.15\,1\)\]{transition-timing-function:cubic-bezier(0,0,.15,1),cubic-bezier(0,0,.15,1)}.ease-\[cubic-bezier\(0\.25\,0\.1\,0\.25\,1\)\],.ease-\[cubic-bezier\(0\.25\,0\.1\,0\.25\,1\.0\)\]{transition-timing-function:cubic-bezier(.25,.1,.25,1)}.ease-\[cubic-bezier\(0\.4\,0\,0\.2\,1\)\]{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-\[ease\]{transition-timing-function:ease}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{transition-timing-function:linear}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.\[direction\:ltr\]{direction:ltr}.\[overflow-anchor\:none\]{overflow-anchor:none}.\[overflow-style\:none\]{overflow-style:none}.\[transition\:background-color_\.2s_linear\,_height_\.2s_ease-in-out\]{transition:background-color .2s linear,height .2s ease-in-out}.\[transition\:background-color_\.2s_linear\,_opacity_\.2s_linear\]{transition:background-color .2s linear,opacity .2s linear}.\[transition\:background-color_\.2s_linear\,_width_\.2s_ease-in-out\]{transition:background-color .2s linear,width .2s ease-in-out}.\[transition\:background-color_250ms_cubic-bezier\(0\.4\,0\,0\.2\,1\)_0ms\,box-shadow_250ms_cubic-bezier\(0\.4\,0\,0\.2\,1\)_0ms\,border_250ms_cubic-bezier\(0\.4\,0\,0\.2\,1\)_0ms\]{transition:background-color .25s cubic-bezier(.4,0,.2,1) 0ms,box-shadow .25s cubic-bezier(.4,0,.2,1) 0ms,border .25s cubic-bezier(.4,0,.2,1) 0ms}:root{--ti-cursor-color: white}body{font-family:VT323,monospace;color:#fff}*{scroll-behavior:smooth!important}#preloader{position:fixed;width:100%;height:100vh;background:#1e1e1e;z-index:99999999}#loadingImage{animation-delay:0ms;transition-delay:0ms;height:35vh;align-items:center;justify-content:center;align-content:center;display:block;margin-top:7rem;margin-left:auto;margin-right:auto}#loadingText{font-size:2.5rem;text-align:center;justify-content:center;align-content:center;display:block;margin-top:5rem;margin-left:auto;margin-right:auto}@media only screen and (max-width: 37.5rem){#preloader{width:100%;height:100vh}#loadingText{display:inline-block;font-size:1.5rem;width:100%;height:100vh;margin:20px auto auto;text-align:center}#loadingImage{height:35vh;align-content:center}}.timeline-wrapper,.d_contents{overflow:hidden}#box{border-radius:200px}#box:hover{box-shadow:none}.challenges-body{background-color:#1e1e1e;margin:0}.statuscodelogo{padding-top:1.25rem;padding-bottom:1.25rem;margin-left:4rem;width:9rem}.challenges-text{color:#6e6a6e;display:inline-block;transform:scaleX(1.4);left:5.7rem;position:absolute;top:5rem;font-size:1.6rem}.platform{position:absolute;width:100vw;top:-26vh;left:0vw;z-index:-1;height:126vh}.card_border1{position:absolute;width:12vw;top:70.5vh;left:75vw;height:15vh}.card_border2{position:absolute;width:11vw;top:80.4vh;left:19.7vw;height:15vh}.card_border3{position:absolute;width:12vw;top:15vh;left:16.5vw;height:15vh}.card_border4{position:absolute;width:11vw;top:.5vh;left:60vw;height:15vh}.card1text{position:absolute;top:70.5vh;left:75vw;width:12vw;display:flex;flex-direction:column;align-items:center;height:15vh}.card1heading1{font-family:Inconsolata,monospace;margin:0;font-size:1.3vmin;margin-top:3vh;margin-bottom:1vh}.card1heading2{margin:0;font-family:Inconsolata,monospace;font-size:2.1vmin;margin-bottom:1.5vh}.card1Button{width:6vw}.card2text{position:absolute;top:82.5vh;left:19.3vw;width:12vw;display:flex;flex-direction:column;align-items:center;height:13.5vh}.card2heading1{font-family:Inconsolata,monospace;margin:0;font-size:1.3vmin;margin-bottom:1vh}.card2heading2{margin:0;font-family:Inconsolata,monospace;font-size:1.8vmin;margin-bottom:1.5vh}.card2Button{width:6vw}.card3text{width:12vw;display:flex;flex-direction:column;align-items:center;position:absolute;left:16.5vw;top:15vh;height:14.9vh}.card3heading1{font-family:Inconsolata,monospace;margin:0;font-size:1.3vmin;margin-bottom:1vh;margin-top:3vh}.card3heading2{margin:0;font-family:Inconsolata,monospace;font-size:2.1vmin;margin-bottom:1.5vh}.card3Button{width:6vw}.card4text{width:11vw;display:flex;flex-direction:column;align-items:center;position:absolute;top:.5vh;left:60vw;height:13.3vh}.card4heading1{font-family:Inconsolata,monospace;margin:0;font-size:1.3vmin;margin-bottom:.8vh;margin-top:2vh}.card4heading2{margin:0;font-family:Inconsolata,monospace;font-size:2.1vmin;margin-bottom:1.2vh}.card4Button{width:6vw}.roller1{top:36vh;position:absolute;left:12.9vw;width:15vw;height:28vh}.roller2{width:8vw;position:absolute;top:85.3vh;left:92vw;height:14.7vh}.roller3{position:absolute;top:6vh;width:15vw;left:70.3vw;height:28vh}.box{width:4vw}.box_group_1{position:absolute;top:37.7vh;left:50vw;display:flex}.box_group_2{position:absolute;top:63vh;left:45vw;display:flex}.box3{width:4vw;top:44vh;position:absolute;left:81vw}.box4{width:4vw;position:absolute;top:25vh;left:88vw}.skull1{position:absolute;top:75vh;left:4vw;width:3vw}.skull2{position:absolute;width:3vw;top:9vh;left:94vw}.home-button{font-size:7vmin;text-decoration:none;color:#6e6a6e;top:2.5vh;position:absolute;left:88.7vw}.home-button:hover{color:#e5e7eb}.card1heading2,.card2heading2,.card3heading2,.card4heading2{text-align:center}@media (max-width: 450px){.platform,.skull1,.skull2,.roller1,.roller2,.roller3,.box_group_1,.box_group_2,.box3,.box4{opacity:0}.card_border1{position:absolute;width:53vw;top:20.5vh;left:23vw}.card1text{position:absolute;top:20.5vh;left:23vw;width:53vw}.card1heading1{position:relative;font-family:Inconsolata,monospace;margin:0;top:0;font-size:3.5vmin;left:0;margin-bottom:1vh;margin-top:3vh}.card1heading2{margin:0;position:relative;top:0;font-family:Inconsolata,monospace;left:0;font-size:4.1vmin;margin-bottom:1vh}.card1Button{position:relative;left:0;top:0;width:27vw}.card_border2{position:absolute;width:53vw;top:39.4vh;left:23vw}.card2text{position:absolute;top:41.7vh;z-index:2;display:flex;flex-direction:column;align-items:center;width:53vw;left:22.8vw}.card2heading1{position:relative;font-family:Inconsolata,monospace;margin:0;font-size:3.1vmin;top:0;left:0;margin-bottom:1vh}.card2heading2{margin:0;position:relative;font-family:Inconsolata,monospace;font-size:4.5vmin;top:0;left:0;margin-bottom:.5vh}.card2Button{position:relative;top:1vh;left:0;width:27vw}.card_border3{position:absolute;width:53vw;top:58vh;left:23vw}.card3text{width:39.5vw;display:flex;flex-direction:column;align-items:center;position:absolute;left:30.3vw;top:60.5vh}.card3heading1{font-family:Inconsolata,monospace;margin:0;font-size:3.1vmin;margin-bottom:1vh}.card3heading2{margin:0;font-family:Inconsolata,monospace;font-size:4.5vmin;margin-bottom:1vh}.card3Button,.card4Button{width:27vw}.card_border4{position:absolute;width:53vw;top:76.5vh;left:23vw}.card4text{width:47.6vw;display:flex;flex-direction:column;align-items:center;position:absolute;top:79vh;left:26.3vw}.card4heading1{font-family:Inconsolata,monospace;margin:0;font-size:3.1vmin;margin-bottom:.8vh}.card4heading2{margin:0;font-family:Inconsolata,monospace;font-size:4.5vmin;margin-bottom:1.2vh}.statuscodelogo{padding-top:1.25rem;padding-bottom:1.25rem;margin-left:7vw;width:9rem}.home-button{font-size:17vmin;text-decoration:none;color:#6e6a6e;top:4vh;position:absolute;left:63.7vw}.challenges-text{color:#6e6a6e;display:inline-block;transform:scaleX(1.4);left:14vw;position:absolute;top:5rem;font-size:1.6rem}}@media (min-width: 450px) and (max-width: 768px){.platform,.skull1,.skull2,.roller1,.roller2,.roller3,.box_group_1,.box_group_2,.box3,.box4{opacity:0}.card_border1{position:absolute;width:53vw;top:20.5vh;left:23vw}.card1text{position:absolute;top:20.5vh;left:23vw;width:53vw}.card1heading1{position:relative;font-family:Inconsolata,monospace;margin:0;top:0;font-size:3.5vmin;left:0;margin-bottom:1vh;margin-top:3vh}.card1heading2{margin:0;position:relative;top:0;font-family:Inconsolata,monospace;left:0;font-size:4.1vmin;margin-bottom:1vh}.card1Button{position:relative;left:0;top:0;width:27vw}.card_border2{position:absolute;width:53vw;top:39.4vh;left:23vw}.card2text{position:absolute;top:41.7vh;z-index:2;display:flex;flex-direction:column;align-items:center;width:53vw;left:22.8vw}.card2heading1{position:relative;font-family:Inconsolata,monospace;margin:0;font-size:3.1vmin;top:0;left:0;margin-bottom:1vh}.card2heading2{margin:0;position:relative;font-family:Inconsolata,monospace;font-size:4.5vmin;top:0;left:0;margin-bottom:.5vh}.card2Button{position:relative;top:1vh;left:0;width:27vw}.card_border3{position:absolute;width:53vw;top:58vh;left:23vw}.card3text{width:39.5vw;display:flex;flex-direction:column;align-items:center;position:absolute;left:30.3vw;top:60.5vh}.card3heading1{font-family:Inconsolata,monospace;margin:0;font-size:3.1vmin;margin-bottom:1vh}.card3heading2{margin:0;font-family:Inconsolata,monospace;font-size:4.5vmin;margin-bottom:1vh}.card3Button,.card4Button{width:27vw}.card_border4{position:absolute;width:53vw;top:76.5vh;left:23vw}.card4text{width:47.6vw;display:flex;flex-direction:column;align-items:center;position:absolute;top:79vh;left:26.3vw}.card4heading1{font-family:Inconsolata,monospace;margin:0;font-size:3.1vmin;margin-bottom:.8vh}.card4heading2{margin:0;font-family:Inconsolata,monospace;font-size:4.5vmin;margin-bottom:1.2vh}.statuscodelogo{padding-top:1.25rem;padding-bottom:1.25rem;margin-left:7vw;width:9rem}.home-button{font-size:5rem;text-decoration:none;color:#6e6a6e;top:3vh;position:absolute;left:71.7vw}.challenges-text{color:#6e6a6e;display:inline-block;transform:scaleX(1.4);left:11vw;position:absolute;top:5rem;font-size:1.6rem}}.card:hover .inner{transform:rotateY(-180deg)}.front,.back{backface-visibility:hidden}.back{transform:rotateY(180deg)}.selection\:bg-transparent *::-moz-selection{background-color:transparent}.selection\:bg-transparent *::selection{background-color:transparent}.selection\:bg-transparent::-moz-selection{background-color:transparent}.selection\:bg-transparent::selection{background-color:transparent}.before\:pointer-events-none:before{content:var(--tw-content);pointer-events:none}.before\:absolute:before{content:var(--tw-content);position:absolute}.before\:h-\[0\.875rem\]:before{content:var(--tw-content);height:.875rem}.before\:w-\[0\.875rem\]:before{content:var(--tw-content);width:.875rem}.before\:scale-0:before{content:var(--tw-content);--tw-scale-x: 0;--tw-scale-y: 0;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.before\:rounded-full:before{content:var(--tw-content);border-radius:9999px}.before\:bg-transparent:before{content:var(--tw-content);background-color:transparent}.before\:opacity-0:before{content:var(--tw-content);opacity:0}.before\:shadow-\[0px_0px_0px_13px_transparent\]:before{content:var(--tw-content);--tw-shadow: 0px 0px 0px 13px transparent;--tw-shadow-colored: 0px 0px 0px 13px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.before\:content-\[\'\'\]:before{--tw-content: "";content:var(--tw-content)}.checked\:border-primary:checked{--tw-border-opacity: 1;border-color:rgb(59 113 202 / var(--tw-border-opacity))}.checked\:bg-primary:checked{--tw-bg-opacity: 1;background-color:rgb(59 113 202 / var(--tw-bg-opacity))}.checked\:before\:opacity-\[0\.16\]:checked:before{content:var(--tw-content);opacity:.16}.checked\:after\:absolute:checked:after{content:var(--tw-content);position:absolute}.checked\:after\:-mt-px:checked:after{content:var(--tw-content);margin-top:-1px}.checked\:after\:ml-\[0\.25rem\]:checked:after{content:var(--tw-content);margin-left:.25rem}.checked\:after\:block:checked:after{content:var(--tw-content);display:block}.checked\:after\:h-\[0\.8125rem\]:checked:after{content:var(--tw-content);height:.8125rem}.checked\:after\:w-\[0\.375rem\]:checked:after{content:var(--tw-content);width:.375rem}.checked\:after\:rotate-45:checked:after{content:var(--tw-content);--tw-rotate: 45deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.checked\:after\:border-\[0\.125rem\]:checked:after{content:var(--tw-content);border-width:.125rem}.checked\:after\:border-l-0:checked:after{content:var(--tw-content);border-left-width:0px}.checked\:after\:border-t-0:checked:after{content:var(--tw-content);border-top-width:0px}.checked\:after\:border-solid:checked:after{content:var(--tw-content);border-style:solid}.checked\:after\:border-white:checked:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity))}.checked\:after\:bg-transparent:checked:after{content:var(--tw-content);background-color:transparent}.checked\:after\:content-\[\'\'\]:checked:after{--tw-content: "";content:var(--tw-content)}.empty\:hidden:empty{display:none}.hover\:z-\[2\]:hover{z-index:2}.hover\:cursor-pointer:hover{cursor:pointer}.hover\:rounded-\[50\%\]:hover{border-radius:50%}.hover\:bg-\[\#00000014\]:hover{background-color:#00000014}.hover\:bg-\[\#00000026\]:hover{background-color:#00000026}.hover\:bg-\[\#eee\]:hover{--tw-bg-opacity: 1;background-color:rgb(238 238 238 / var(--tw-bg-opacity))}.hover\:bg-\[unset\]:hover{background-color:unset}.hover\:bg-neutral-200:hover{--tw-bg-opacity: 1;background-color:rgb(229 229 229 / var(--tw-bg-opacity))}.hover\:fill-\[\#8b8b8b\]:hover{fill:#8b8b8b}.hover\:text-\[\#3b71ca\]:hover{--tw-text-opacity: 1;color:rgb(59 113 202 / var(--tw-text-opacity))}.hover\:text-\[\#8b8b8b\]:hover{--tw-text-opacity: 1;color:rgb(139 139 139 / var(--tw-text-opacity))}.hover\:text-blue-500:hover{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity))}.hover\:text-primary:hover{--tw-text-opacity: 1;color:rgb(59 113 202 / var(--tw-text-opacity))}.hover\:text-white:hover{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.hover\:\!opacity-90:hover{opacity:.9!important}.hover\:opacity-100:hover{opacity:1}.hover\:\!shadow-none:hover{--tw-shadow: 0 0 #0000 !important;--tw-shadow-colored: 0 0 #0000 !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.hover\:outline-none:hover{outline:2px solid transparent;outline-offset:2px}.hover\:filter-none:hover{filter:none}.hover\:before\:opacity-\[0\.04\]:hover:before{content:var(--tw-content);opacity:.04}.hover\:before\:shadow-\[0px_0px_0px_13px_rgba\(0\,0\,0\,0\.6\)\]:hover:before{content:var(--tw-content);--tw-shadow: 0px 0px 0px 13px rgba(0,0,0,.6);--tw-shadow-colored: 0px 0px 0px 13px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.focus\:z-\[3\]:focus{z-index:3}.focus\:rounded-\[50\%\]:focus{border-radius:50%}.focus\:border-primary:focus{--tw-border-opacity: 1;border-color:rgb(59 113 202 / var(--tw-border-opacity))}.focus\:bg-\[\#00000014\]:focus{background-color:#00000014}.focus\:bg-\[\#00000026\]:focus{background-color:#00000026}.focus\:bg-\[\#eee\]:focus{--tw-bg-opacity: 1;background-color:rgb(238 238 238 / var(--tw-bg-opacity))}.focus\:bg-neutral-200:focus{--tw-bg-opacity: 1;background-color:rgb(229 229 229 / var(--tw-bg-opacity))}.focus\:text-\[\#3b71ca\]:focus{--tw-text-opacity: 1;color:rgb(59 113 202 / var(--tw-text-opacity))}.focus\:text-gray-700:focus{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity))}.focus\:text-primary:focus{--tw-text-opacity: 1;color:rgb(59 113 202 / var(--tw-text-opacity))}.focus\:\!opacity-90:focus{opacity:.9!important}.focus\:shadow-none:focus{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.focus\:shadow-te-primary:focus{--tw-shadow: 0 0 0 1px rgb(59, 113, 202);--tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:transition-\[border-color_0\.2s\]:focus{transition-property:border-color .2s;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.focus\:placeholder\:opacity-100:focus::-moz-placeholder{opacity:1}.focus\:placeholder\:opacity-100:focus::placeholder{opacity:1}.focus\:before\:scale-100:focus:before{content:var(--tw-content);--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.focus\:before\:opacity-\[0\.12\]:focus:before{content:var(--tw-content);opacity:.12}.focus\:before\:shadow-\[0px_0px_0px_13px_rgba\(0\,0\,0\,0\.6\)\]:focus:before{content:var(--tw-content);--tw-shadow: 0px 0px 0px 13px rgba(0,0,0,.6);--tw-shadow-colored: 0px 0px 0px 13px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.focus\:before\:transition-\[box-shadow_0\.2s\,transform_0\.2s\]:focus:before{content:var(--tw-content);transition-property:box-shadow .2s,transform .2s;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.focus\:after\:absolute:focus:after{content:var(--tw-content);position:absolute}.focus\:after\:z-\[1\]:focus:after{content:var(--tw-content);z-index:1}.focus\:after\:block:focus:after{content:var(--tw-content);display:block}.focus\:after\:h-\[0\.875rem\]:focus:after{content:var(--tw-content);height:.875rem}.focus\:after\:w-\[0\.875rem\]:focus:after{content:var(--tw-content);width:.875rem}.focus\:after\:rounded-\[0\.125rem\]:focus:after{content:var(--tw-content);border-radius:.125rem}.focus\:after\:content-\[\'\'\]:focus:after{--tw-content: "";content:var(--tw-content)}.checked\:focus\:before\:scale-100:focus:checked:before{content:var(--tw-content);--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.checked\:focus\:before\:shadow-\[0px_0px_0px_13px_\#3b71ca\]:focus:checked:before{content:var(--tw-content);--tw-shadow: 0px 0px 0px 13px #3b71ca;--tw-shadow-colored: 0px 0px 0px 13px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.checked\:focus\:before\:transition-\[box-shadow_0\.2s\,transform_0\.2s\]:focus:checked:before{content:var(--tw-content);transition-property:box-shadow .2s,transform .2s;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.checked\:focus\:after\:-mt-px:focus:checked:after{content:var(--tw-content);margin-top:-1px}.checked\:focus\:after\:ml-\[0\.25rem\]:focus:checked:after{content:var(--tw-content);margin-left:.25rem}.checked\:focus\:after\:h-\[0\.8125rem\]:focus:checked:after{content:var(--tw-content);height:.8125rem}.checked\:focus\:after\:w-\[0\.375rem\]:focus:checked:after{content:var(--tw-content);width:.375rem}.checked\:focus\:after\:rotate-45:focus:checked:after{content:var(--tw-content);--tw-rotate: 45deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.checked\:focus\:after\:rounded-none:focus:checked:after{content:var(--tw-content);border-radius:0}.checked\:focus\:after\:border-\[0\.125rem\]:focus:checked:after{content:var(--tw-content);border-width:.125rem}.checked\:focus\:after\:border-l-0:focus:checked:after{content:var(--tw-content);border-left-width:0px}.checked\:focus\:after\:border-t-0:focus:checked:after{content:var(--tw-content);border-top-width:0px}.checked\:focus\:after\:border-solid:focus:checked:after{content:var(--tw-content);border-style:solid}.checked\:focus\:after\:border-white:focus:checked:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity))}.checked\:focus\:after\:bg-transparent:focus:checked:after{content:var(--tw-content);background-color:transparent}.active\:bg-\[\#cacfd1\]:active{--tw-bg-opacity: 1;background-color:rgb(202 207 209 / var(--tw-bg-opacity))}.group\/x:hover .group-hover\/x\:h-\[11px\]{height:11px}.group\/y:hover .group-hover\/y\:w-\[11px\]{width:11px}.group\/x:hover .group-hover\/x\:bg-\[\#999\],.group\/y:hover .group-hover\/y\:bg-\[\#999\]{--tw-bg-opacity: 1;background-color:rgb(153 153 153 / var(--tw-bg-opacity))}.group\/ps:hover .group-hover\/ps\:opacity-100{opacity:1}.group\/ps:hover .group-hover\/ps\:opacity-60{opacity:.6}.group\/x:focus .group-focus\/x\:h-\[11px\]{height:11px}.group\/y:focus .group-focus\/y\:w-\[11px\]{width:11px}.group\/x:focus .group-focus\/x\:bg-\[\#999\]{--tw-bg-opacity: 1;background-color:rgb(153 153 153 / var(--tw-bg-opacity))}.group\/y:focus .group-focus\/y\:bg-\[\#999\]{--tw-bg-opacity: 1;background-color:rgb(153 153 153 / var(--tw-bg-opacity))}.group\/ps:focus .group-focus\/ps\:opacity-100{opacity:1}.group\/ps:focus .group-focus\/ps\:opacity-60{opacity:.6}.group\/ps:active .group-active\/ps\:opacity-100{opacity:1}.group\/ps.ps--active-x .group-\[\&\.ps--active-x\]\/ps\:block,.group\/ps.ps--active-y .group-\[\&\.ps--active-y\]\/ps\:block{display:block}.group\/x.ps--clicking .group-\[\&\.ps--clicking\]\/x\:h-\[11px\]{height:11px}.group\/y.ps--clicking .group-\[\&\.ps--clicking\]\/y\:w-\[11px\]{width:11px}.group[data-te-datepicker-cell-current] .group-\[\[data-te-datepicker-cell-current\]\]\:border{border-width:1px}.group[data-te-datepicker-cell-current] .group-\[\[data-te-datepicker-cell-current\]\]\:border-solid{border-style:solid}.group[data-te-datepicker-cell-current] .group-\[\[data-te-datepicker-cell-current\]\]\:border-black{--tw-border-opacity: 1;border-color:rgb(0 0 0 / var(--tw-border-opacity))}.group\/ps.ps--active-x .group-\[\&\.ps--active-x\]\/ps\:bg-transparent,.group\/ps.ps--active-y .group-\[\&\.ps--active-y\]\/ps\:bg-transparent{background-color:transparent}.group\/x.ps--clicking .group-\[\&\.ps--clicking\]\/x\:bg-\[\#999\],.group\/y.ps--clicking .group-\[\&\.ps--clicking\]\/y\:bg-\[\#999\]{--tw-bg-opacity: 1;background-color:rgb(153 153 153 / var(--tw-bg-opacity))}.group:not([data-te-datepicker-cell-disabled]):not([data-te-datepicker-cell-selected]):hover .group-\[\:not\(\[data-te-datepicker-cell-disabled\]\)\:not\(\[data-te-datepicker-cell-selected\]\)\:hover\]\:bg-neutral-300{--tw-bg-opacity: 1;background-color:rgb(212 212 212 / var(--tw-bg-opacity))}.group:not([data-te-datepicker-cell-selected])[data-te-datepicker-cell-focused] .group-\[\:not\(\[data-te-datepicker-cell-selected\]\)\[data-te-datepicker-cell-focused\]\]\:bg-neutral-100{--tw-bg-opacity: 1;background-color:rgb(245 245 245 / var(--tw-bg-opacity))}.group[data-te-datepicker-cell-selected] .group-\[\[data-te-datepicker-cell-selected\]\]\:bg-primary{--tw-bg-opacity: 1;background-color:rgb(59 113 202 / var(--tw-bg-opacity))}.group[data-te-datepicker-cell-selected] .group-\[\[data-te-datepicker-cell-selected\]\]\:text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.group\/ps.ps--scrolling-x .group-\[\&\.ps--scrolling-x\]\/ps\:opacity-60,.group\/ps.ps--scrolling-y .group-\[\&\.ps--scrolling-y\]\/ps\:opacity-60{opacity:.6}.peer:hover~.peer-hover\:bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.peer:focus~.peer-focus\:-translate-y-\[0\.75rem\]{--tw-translate-y: -.75rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.peer:focus~.peer-focus\:-translate-y-\[0\.9rem\]{--tw-translate-y: -.9rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.peer:focus~.peer-focus\:-translate-y-\[1\.15rem\]{--tw-translate-y: -1.15rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.peer:focus~.peer-focus\:scale-\[0\.8\]{--tw-scale-x: .8;--tw-scale-y: .8;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.peer:focus~.peer-focus\:\!text-white{--tw-text-opacity: 1 !important;color:rgb(255 255 255 / var(--tw-text-opacity))!important}.peer:focus~.peer-focus\:text-gray-200{--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity))}.peer:focus~.peer-focus\:text-primary{--tw-text-opacity: 1;color:rgb(59 113 202 / var(--tw-text-opacity))}.data-\[te-datepicker-cell-disabled\]\:pointer-events-none[data-te-datepicker-cell-disabled]{pointer-events:none}.data-\[te-carousel-fade\]\:z-0[data-te-carousel-fade]{z-index:0}.data-\[te-carousel-fade\]\:z-\[1\][data-te-carousel-fade]{z-index:1}.data-\[te-input-state-active\]\:block[data-te-input-state-active],.data-\[te-tab-active\]\:block[data-te-tab-active]{display:block}.data-\[popper-reference-hidden\]\:hidden[data-popper-reference-hidden]{display:none}.data-\[te-input-state-active\]\:-translate-y-\[0\.75rem\][data-te-input-state-active]{--tw-translate-y: -.75rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[te-input-state-active\]\:-translate-y-\[0\.9rem\][data-te-input-state-active]{--tw-translate-y: -.9rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[te-input-state-active\]\:-translate-y-\[1\.15rem\][data-te-input-state-active]{--tw-translate-y: -1.15rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[te-input-state-active\]\:scale-\[0\.8\][data-te-input-state-active]{--tw-scale-x: .8;--tw-scale-y: .8;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[te-select-open\]\:scale-100[data-te-select-open]{--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[te-datepicker-cell-disabled\]\:cursor-default[data-te-datepicker-cell-disabled],.data-\[te-input-disabled\]\:cursor-default[data-te-input-disabled],.data-\[te-select-option-disabled\]\:cursor-default[data-te-select-option-disabled],.data-\[te-select-selected\]\:data-\[te-select-option-disabled\]\:cursor-default[data-te-select-option-disabled][data-te-select-selected]{cursor:default}.data-\[te-input-disabled\]\:bg-\[\#e9ecef\][data-te-input-disabled]{--tw-bg-opacity: 1;background-color:rgb(233 236 239 / var(--tw-bg-opacity))}.data-\[te-input-multiple-active\]\:bg-black\/5[data-te-input-multiple-active],.data-\[te-input-state-active\]\:bg-black\/5[data-te-input-state-active]{background-color:#0000000d}.data-\[te-nav-active\]\:\!bg-\[\#1E1E1E\][data-te-nav-active]{--tw-bg-opacity: 1 !important;background-color:rgb(30 30 30 / var(--tw-bg-opacity))!important}.data-\[te-select-option-selected\]\:bg-black\/\[0\.02\][data-te-select-option-selected]{background-color:#00000005}.data-\[te-select-option-selected\]\:data-\[te-input-state-active\]\:bg-black\/5[data-te-input-state-active][data-te-select-option-selected]{background-color:#0000000d}.data-\[te-select-selected\]\:data-\[te-select-option-disabled\]\:bg-transparent[data-te-select-option-disabled][data-te-select-selected]{background-color:transparent}.data-\[te-datepicker-cell-disabled\]\:text-neutral-300[data-te-datepicker-cell-disabled]{--tw-text-opacity: 1;color:rgb(212 212 212 / var(--tw-text-opacity))}.data-\[te-nav-active\]\:text-\[\#FFFFFF\][data-te-nav-active]{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.data-\[te-select-option-disabled\]\:text-gray-400[data-te-select-option-disabled],.data-\[te-select-selected\]\:data-\[te-select-option-disabled\]\:text-gray-400[data-te-select-option-disabled][data-te-select-selected]{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}.data-\[te-carousel-fade\]\:opacity-0[data-te-carousel-fade]{opacity:0}.data-\[te-carousel-fade\]\:opacity-100[data-te-carousel-fade],.data-\[te-select-open\]\:opacity-100[data-te-select-open]{opacity:1}.data-\[te-carousel-fade\]\:duration-0[data-te-carousel-fade]{transition-duration:0s}.data-\[te-input-state-active\]\:placeholder\:opacity-100[data-te-input-state-active]::-moz-placeholder{opacity:1}.data-\[te-input-state-active\]\:placeholder\:opacity-100[data-te-input-state-active]::placeholder{opacity:1}.data-\[te-datepicker-cell-disabled\]\:hover\:cursor-default:hover[data-te-datepicker-cell-disabled]{cursor:default}.group[data-te-datepicker-cell-focused] .group-\[\[data-te-datepicker-cell-focused\]\]\:data-\[te-datepicker-cell-selected\]\:bg-primary[data-te-datepicker-cell-selected]{--tw-bg-opacity: 1;background-color:rgb(59 113 202 / var(--tw-bg-opacity))}.group\/validation[data-te-was-validated] .group-data-\[te-was-validated\]\/validation\:mb-4{margin-bottom:1rem}.group[data-te-input-focused] .group-data-\[te-input-focused\]\:border-x-0,.group[data-te-input-state-active] .group-data-\[te-input-state-active\]\:border-x-0{border-left-width:0px;border-right-width:0px}.group[data-te-input-focused] .group-data-\[te-input-focused\]\:border-l-0{border-left-width:0px}.group[data-te-input-focused] .group-data-\[te-input-focused\]\:border-r-0{border-right-width:0px}.group[data-te-input-focused] .group-data-\[te-input-focused\]\:border-t{border-top-width:1px}.group[data-te-input-state-active] .group-data-\[te-input-state-active\]\:border-l-0{border-left-width:0px}.group[data-te-input-state-active] .group-data-\[te-input-state-active\]\:border-r-0{border-right-width:0px}.group[data-te-input-state-active] .group-data-\[te-input-state-active\]\:border-t{border-top-width:1px}.group[data-te-input-focused] .group-data-\[te-input-focused\]\:border-solid,.group[data-te-input-state-active] .group-data-\[te-input-state-active\]\:border-solid{border-style:solid}.group[data-te-input-focused] .group-data-\[te-input-focused\]\:border-primary{--tw-border-opacity: 1;border-color:rgb(59 113 202 / var(--tw-border-opacity))}.group[data-te-input-focused] .group-data-\[te-input-focused\]\:border-white{--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity))}.group[data-te-input-focused] .group-data-\[te-input-focused\]\:border-t-transparent,.group[data-te-input-state-active] .group-data-\[te-input-state-active\]\:border-t-transparent{border-top-color:transparent}.group\/opt[data-te-select-option-group-ref] .group-data-\[te-select-option-group-ref\]\/opt\:pl-7{padding-left:1.75rem}.group[data-te-input-focused] .group-data-\[te-input-focused\]\:shadow-\[-1px_0_0_\#3b71ca\,_0_1px_0_0_\#3b71ca\,_0_-1px_0_0_\#3b71ca\]{--tw-shadow: -1px 0 0 #3b71ca, 0 1px 0 0 #3b71ca, 0 -1px 0 0 #3b71ca;--tw-shadow-colored: -1px 0 0 var(--tw-shadow-color), 0 1px 0 0 var(--tw-shadow-color), 0 -1px 0 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group[data-te-input-focused] .group-data-\[te-input-focused\]\:shadow-\[-1px_0_0_\#ffffff\,_0_1px_0_0_\#ffffff\,_0_-1px_0_0_\#ffffff\]{--tw-shadow: -1px 0 0 #ffffff, 0 1px 0 0 #ffffff, 0 -1px 0 0 #ffffff;--tw-shadow-colored: -1px 0 0 var(--tw-shadow-color), 0 1px 0 0 var(--tw-shadow-color), 0 -1px 0 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group[data-te-input-focused] .group-data-\[te-input-focused\]\:shadow-\[0_1px_0_0_\#3b71ca\]{--tw-shadow: 0 1px 0 0 #3b71ca;--tw-shadow-colored: 0 1px 0 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group[data-te-input-focused] .group-data-\[te-input-focused\]\:shadow-\[0_1px_0_0_\#ffffff\]{--tw-shadow: 0 1px 0 0 #ffffff;--tw-shadow-colored: 0 1px 0 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group[data-te-input-focused] .group-data-\[te-input-focused\]\:shadow-\[1px_0_0_\#3b71ca\,_0_-1px_0_0_\#3b71ca\,_0_1px_0_0_\#3b71ca\]{--tw-shadow: 1px 0 0 #3b71ca, 0 -1px 0 0 #3b71ca, 0 1px 0 0 #3b71ca;--tw-shadow-colored: 1px 0 0 var(--tw-shadow-color), 0 -1px 0 0 var(--tw-shadow-color), 0 1px 0 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group[data-te-input-focused] .group-data-\[te-input-focused\]\:shadow-\[1px_0_0_\#ffffff\,_0_-1px_0_0_\#ffffff\,_0_1px_0_0_\#ffffff\]{--tw-shadow: 1px 0 0 #ffffff, 0 -1px 0 0 #ffffff, 0 1px 0 0 #ffffff;--tw-shadow-colored: 1px 0 0 var(--tw-shadow-color), 0 -1px 0 0 var(--tw-shadow-color), 0 1px 0 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group\/validation[data-te-was-validated] .peer:valid~.group-data-\[te-was-validated\]\/validation\:peer-valid\:block{display:block}.group\/validation[data-te-was-validated] .peer:valid~.group-data-\[te-was-validated\]\/validation\:peer-valid\:text-green-600{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity))}.group\/validation[data-te-was-validated] .peer:invalid~.group-data-\[te-was-validated\]\/validation\:peer-invalid\:block{display:block}.group\/validation[data-te-was-validated] .peer:invalid~.group-data-\[te-was-validated\]\/validation\:peer-invalid\:text-\[rgb\(220\,76\,100\)\]{--tw-text-opacity: 1;color:rgb(220 76 100 / var(--tw-text-opacity))}.peer[data-te-input-state-active]~.peer-data-\[te-input-state-active\]\:-translate-y-\[0\.75rem\]{--tw-translate-y: -.75rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.peer[data-te-input-state-active]~.peer-data-\[te-input-state-active\]\:-translate-y-\[0\.9rem\]{--tw-translate-y: -.9rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.peer[data-te-input-state-active]~.peer-data-\[te-input-state-active\]\:-translate-y-\[1\.15rem\]{--tw-translate-y: -1.15rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.peer[data-te-input-state-active]~.peer-data-\[te-input-state-active\]\:scale-\[0\.8\]{--tw-scale-x: .8;--tw-scale-y: .8;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.peer[data-te-input-focused]~.peer-data-\[te-input-focused\]\:\!text-white{--tw-text-opacity: 1 !important;color:rgb(255 255 255 / var(--tw-text-opacity))!important}.peer[data-te-input-focused]~.peer-data-\[te-input-focused\]\:text-primary{--tw-text-opacity: 1;color:rgb(59 113 202 / var(--tw-text-opacity))}:is([dir="rtl"] .rtl\:\!left-auto){left:auto!important}:is([dir="rtl"] .rtl\:\!origin-\[50\%_50\%_0\]){transform-origin:50% 50% 0!important}:is([dir="rtl"] .rtl\:\[direction\:rtl\]){direction:rtl}@media (prefers-reduced-motion: reduce){.motion-reduce\:animate-none{animation:none}.motion-reduce\:transition-none{transition-property:none}}:is(.dark .dark\:border-0){border-width:0px}:is(.dark .dark\:border-gray-600){--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity))}:is(.dark .dark\:border-neutral-500){--tw-border-opacity: 1;border-color:rgb(115 115 115 / var(--tw-border-opacity))}:is(.dark .dark\:border-neutral-600){--tw-border-opacity: 1;border-color:rgb(82 82 82 / var(--tw-border-opacity))}:is(.dark .dark\:border-primary-400){--tw-border-opacity: 1;border-color:rgb(143 174 224 / var(--tw-border-opacity))}:is(.dark .dark\:bg-neutral-600){--tw-bg-opacity: 1;background-color:rgb(82 82 82 / var(--tw-bg-opacity))}:is(.dark .dark\:bg-neutral-700){--tw-bg-opacity: 1;background-color:rgb(64 64 64 / var(--tw-bg-opacity))}:is(.dark .dark\:bg-transparent){background-color:transparent}:is(.dark .dark\:bg-zinc-500){--tw-bg-opacity: 1;background-color:rgb(113 113 122 / var(--tw-bg-opacity))}:is(.dark .dark\:bg-zinc-600\/50){background-color:#52525b80}:is(.dark .dark\:bg-zinc-700){--tw-bg-opacity: 1;background-color:rgb(63 63 70 / var(--tw-bg-opacity))}:is(.dark .dark\:bg-zinc-800){--tw-bg-opacity: 1;background-color:rgb(39 39 42 / var(--tw-bg-opacity))}:is(.dark .dark\:fill-gray-400){fill:#9ca3af}:is(.dark .dark\:\!text-primary-400){--tw-text-opacity: 1 !important;color:rgb(143 174 224 / var(--tw-text-opacity))!important}:is(.dark .dark\:text-gray-200){--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity))}:is(.dark .dark\:text-gray-300){--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity))}:is(.dark .dark\:text-neutral-200){--tw-text-opacity: 1;color:rgb(229 229 229 / var(--tw-text-opacity))}:is(.dark .dark\:text-white){--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}:is(.dark .dark\:placeholder\:text-gray-200)::-moz-placeholder{--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity))}:is(.dark .dark\:placeholder\:text-gray-200)::placeholder{--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity))}:is(.dark .dark\:checked\:border-primary:checked){--tw-border-opacity: 1;border-color:rgb(59 113 202 / var(--tw-border-opacity))}:is(.dark .dark\:checked\:bg-primary:checked){--tw-bg-opacity: 1;background-color:rgb(59 113 202 / var(--tw-bg-opacity))}:is(.dark .dark\:hover\:bg-white\/10:hover){background-color:#ffffff1a}:is(.dark .dark\:hover\:fill-gray-100:hover){fill:#f3f4f6}:is(.dark .dark\:hover\:text-\[\#3b71ca\]:hover){--tw-text-opacity: 1;color:rgb(59 113 202 / var(--tw-text-opacity))}:is(.dark .dark\:hover\:text-primary-400:hover){--tw-text-opacity: 1;color:rgb(143 174 224 / var(--tw-text-opacity))}:is(.dark .dark\:focus\:bg-white\/10:focus){background-color:#ffffff1a}:is(.dark .dark\:focus\:text-\[\#3b71ca\]:focus){--tw-text-opacity: 1;color:rgb(59 113 202 / var(--tw-text-opacity))}:is(.dark .dark\:focus\:text-primary-400:focus){--tw-text-opacity: 1;color:rgb(143 174 224 / var(--tw-text-opacity))}:is(.dark .dark\:focus\:before\:shadow-\[0px_0px_0px_13px_rgba\(255\,255\,255\,0\.4\)\]:focus):before{content:var(--tw-content);--tw-shadow: 0px 0px 0px 13px rgba(255,255,255,.4);--tw-shadow-colored: 0px 0px 0px 13px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}:is(.dark .dark\:checked\:focus\:before\:shadow-\[0px_0px_0px_13px_\#3b71ca\]:focus:checked):before{content:var(--tw-content);--tw-shadow: 0px 0px 0px 13px #3b71ca;--tw-shadow-colored: 0px 0px 0px 13px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}:is(.dark .group[data-te-datepicker-cell-current] .dark\:group-\[\[data-te-datepicker-cell-current\]\]\:border-white){--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity))}:is(.dark .group:not([data-te-datepicker-cell-disabled]):not([data-te-datepicker-cell-selected]):hover .dark\:group-\[\:not\(\[data-te-datepicker-cell-disabled\]\)\:not\(\[data-te-datepicker-cell-selected\]\)\:hover\]\:bg-white\/10){background-color:#ffffff1a}:is(.dark .group:not([data-te-datepicker-cell-selected])[data-te-datepicker-cell-focused] .dark\:group-\[\:not\(\[data-te-datepicker-cell-selected\]\)\[data-te-datepicker-cell-focused\]\]\:bg-white\/10){background-color:#ffffff1a}:is(.dark .group[data-te-datepicker-cell-disabled] .dark\:group-\[\[data-te-datepicker-cell-disabled\]\]\:text-neutral-500){--tw-text-opacity: 1;color:rgb(115 115 115 / var(--tw-text-opacity))}:is(.dark .peer:focus ~ .dark\:peer-focus\:text-gray-200){--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity))}:is(.dark .peer:focus ~ .dark\:peer-focus\:text-primary){--tw-text-opacity: 1;color:rgb(59 113 202 / var(--tw-text-opacity))}:is(.dark .dark\:data-\[te-input-disabled\]\:bg-zinc-600[data-te-input-disabled]){--tw-bg-opacity: 1;background-color:rgb(82 82 91 / var(--tw-bg-opacity))}:is(.dark .dark\:data-\[te-input-multiple-active\]\:bg-white\/30[data-te-input-multiple-active]){background-color:#ffffff4d}:is(.dark .dark\:data-\[te-input-state-active\]\:bg-white\/30[data-te-input-state-active]){background-color:#ffffff4d}:is(.dark .dark\:data-\[te-select-option-selected\]\:data-\[te-input-state-active\]\:bg-white\/30[data-te-input-state-active][data-te-select-option-selected]){background-color:#ffffff4d}:is(.dark .dark\:data-\[te-select-option-disabled\]\:text-gray-400[data-te-select-option-disabled]){--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}@media not all and (min-width: 640px){.max-sm\:order-3{order:3}.max-sm\:order-first{order:-9999}.max-sm\:mx-8{margin-left:2rem;margin-right:2rem}.max-sm\:hidden{display:none}}@media (min-width: 320px){.xs\:px-16{padding-left:4rem;padding-right:4rem}}@media (min-width: 360px){.min-\[360px\]\:max-w-\[200px\]{max-width:200px}}@media (min-width: 400px){.min-\[400px\]\:max-w-\[200px\]{max-width:200px}.min-\[400px\]\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.min-\[400px\]\:text-2xl{font-size:1.5rem;line-height:2rem}}@media (min-width: 410px){.min-\[410px\]\:max-w-\[200px\]{max-width:200px}.min-\[410px\]\:pl-0{padding-left:0}}@media (min-width: 500px){.min-\[500px\]\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.min-\[500px\]\:gap-x-28{-moz-column-gap:7rem;column-gap:7rem}.min-\[500px\]\:gap-x-8{-moz-column-gap:2rem;column-gap:2rem}}@media (min-width: 640px){.sm\:-m-0{margin:-0px}.sm\:m-2{margin:.5rem}.sm\:-mx-0{margin-left:-0px;margin-right:-0px}.sm\:-my-6{margin-top:-1.5rem;margin-bottom:-1.5rem}.sm\:mx-14{margin-left:3.5rem;margin-right:3.5rem}.sm\:mx-4{margin-left:1rem;margin-right:1rem}.sm\:my-6{margin-top:1.5rem;margin-bottom:1.5rem}.sm\:-ml-4{margin-left:-1rem}.sm\:mb-20{margin-bottom:5rem}.sm\:mt-0{margin-top:0}.sm\:mt-5{margin-top:1.25rem}.sm\:mt-7{margin-top:1.75rem}.sm\:flex{display:flex}.sm\:grid{display:grid}.sm\:hidden{display:none}.sm\:h-\[110\%\]{height:110%}.sm\:max-h-\[100px\]{max-height:100px}.sm\:w-20{width:5rem}.sm\:w-24{width:6rem}.sm\:w-28{width:7rem}.sm\:w-32{width:8rem}.sm\:w-40{width:10rem}.sm\:w-\[110\%\]{width:110%}.sm\:max-w-\[150px\]{max-width:150px}.sm\:max-w-\[160px\]{max-width:160px}.sm\:max-w-\[200px\]{max-width:200px}.sm\:-translate-x-10{--tw-translate-x: -2.5rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sm\:-translate-x-\[12\.5\%\]{--tw-translate-x: -12.5%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sm\:-translate-x-\[15\%\]{--tw-translate-x: -15%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sm\:-translate-y-\[17\.5\%\]{--tw-translate-y: -17.5%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sm\:translate-x-10{--tw-translate-x: 2.5rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sm\:translate-x-2{--tw-translate-x: .5rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sm\:justify-between{justify-content:space-between}.sm\:gap-6{gap:1.5rem}.sm\:pl-10{padding-left:2.5rem}.sm\:text-2xl{font-size:1.5rem;line-height:2rem}.min-\[640px\]\:ml-6{margin-left:1.5rem}.min-\[640px\]\:translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.min-\[640px\]\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.min-\[640px\]\:place-items-center{place-items:center}.min-\[640px\]\:gap-x-5{-moz-column-gap:1.25rem;column-gap:1.25rem}.min-\[640px\]\:gap-x-7{-moz-column-gap:1.75rem;column-gap:1.75rem}}@media (min-width: 768px){.md\:right-\[80px\]{right:80px}.md\:-my-4{margin-top:-1rem;margin-bottom:-1rem}.md\:ml-10{margin-left:2.5rem}.md\:ml-32{margin-left:8rem}.md\:ml-5{margin-left:1.25rem}.md\:mr-0{margin-right:0}.md\:mr-5{margin-right:1.25rem}.md\:mt-0{margin-top:0}.md\:mt-4{margin-top:1rem}.md\:block{display:block}.md\:h-16{height:4rem}.md\:h-32{height:8rem}.md\:h-\[20rem\]{height:20rem}.md\:h-\[30vh\]{height:30vh}.md\:w-24{width:6rem}.md\:w-32{width:8rem}.md\:w-36{width:9rem}.md\:w-\[100\%\]{width:100%}.md\:w-\[70px\]{width:70px}.md\:max-w-\[150px\]{max-width:150px}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:justify-center{justify-content:center}.md\:gap-10{gap:2.5rem}.md\:gap-\[5rem\]{gap:5rem}.md\:px-4{padding-left:1rem;padding-right:1rem}.md\:px-44{padding-left:11rem;padding-right:11rem}.md\:text-2xl{font-size:1.5rem;line-height:2rem}.md\:text-3xl{font-size:1.875rem;line-height:2.25rem}.md\:text-4xl{font-size:2.25rem;line-height:2.5rem}.md\:text-5xl{font-size:3rem;line-height:1}.md\:text-lg{font-size:1.125rem;line-height:1.75rem}.md\:text-sm{font-size:.875rem;line-height:1.25rem}}@media (min-width: 900px){.min-\[900px\]\:max-w-\[150px\]{max-width:150px}.min-\[900px\]\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width: 1000px){.min-\[1000px\]\:mt-10{margin-top:2.5rem}.min-\[1000px\]\:max-w-\[170px\]{max-width:170px}.min-\[1000px\]\:max-w-\[180px\]{max-width:180px}.min-\[1000px\]\:-translate-x-2{--tw-translate-x: -.5rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.min-\[1000px\]\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}@media (min-width: 1024px){.lg\:mt-10{margin-top:2.5rem}.lg\:block{display:block}.lg\:hidden{display:none}.lg\:max-w-\[150px\]{max-width:150px}.lg\:flex-row{flex-direction:row}.lg\:gap-\[10rem\]{gap:10rem}.lg\:text-5xl{font-size:3rem;line-height:1}.lg\:text-base{font-size:1rem;line-height:1.5rem}}@media (min-width: 1200px){.min-\[1200px\]\:gap-y-0{row-gap:0px}}@media (min-width: 1280px){.xl\:static{position:static}.xl\:right-\[50px\]{right:50px}.xl\:-my-6{margin-top:-1.5rem;margin-bottom:-1.5rem}.xl\:mx-0{margin-left:0;margin-right:0}.xl\:mx-10{margin-left:2.5rem;margin-right:2.5rem}.xl\:mx-14{margin-left:3.5rem;margin-right:3.5rem}.xl\:mx-16{margin-left:4rem;margin-right:4rem}.xl\:mx-2{margin-left:.5rem;margin-right:.5rem}.xl\:mx-64{margin-left:16rem;margin-right:16rem}.xl\:mx-7{margin-left:1.75rem;margin-right:1.75rem}.xl\:my-0{margin-top:0;margin-bottom:0}.xl\:-ml-8{margin-left:-2rem}.xl\:-mt-2{margin-top:-.5rem}.xl\:ml-40{margin-left:10rem}.xl\:ml-\[280px\]{margin-left:280px}.xl\:mr-40{margin-right:10rem}.xl\:mr-60{margin-right:15rem}.xl\:mt-0{margin-top:0}.xl\:mt-10{margin-top:2.5rem}.xl\:mt-2{margin-top:.5rem}.xl\:mt-3{margin-top:.75rem}.xl\:mt-8{margin-top:2rem}.xl\:block{display:block}.xl\:flex{display:flex}.xl\:hidden{display:none}.xl\:h-32{height:8rem}.xl\:h-36{height:9rem}.xl\:h-\[100\%\]{height:100%}.xl\:h-\[45vh\]{height:45vh}.xl\:max-h-\[60px\]{max-height:60px}.xl\:w-20{width:5rem}.xl\:w-24{width:6rem}.xl\:w-28{width:7rem}.xl\:w-32{width:8rem}.xl\:w-36{width:9rem}.xl\:w-40{width:10rem}.xl\:w-44{width:11rem}.xl\:w-96{width:24rem}.xl\:w-\[120\%\]{width:120%}.xl\:w-auto{width:auto}.xl\:w-full{width:100%}.xl\:max-w-\[150px\]{max-width:150px}.xl\:max-w-\[170px\]{max-width:170px}.xl\:max-w-\[180px\]{max-width:180px}.xl\:max-w-full{max-width:100%}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:items-center{align-items:center}.xl\:justify-between{justify-content:space-between}.xl\:justify-evenly{justify-content:space-evenly}.xl\:gap-x-0{-moz-column-gap:0px;column-gap:0px}.xl\:px-16{padding-left:4rem;padding-right:4rem}.xl\:px-2{padding-left:.5rem;padding-right:.5rem}.xl\:px-48{padding-left:12rem;padding-right:12rem}.xl\:py-0{padding-top:0;padding-bottom:0}.xl\:py-10{padding-top:2.5rem;padding-bottom:2.5rem}.xl\:pl-0{padding-left:0}.xl\:pl-12{padding-left:3rem}.xl\:text-left{text-align:left}.xl\:text-2xl{font-size:1.5rem;line-height:2rem}.xl\:text-3xl{font-size:1.875rem;line-height:2.25rem}.xl\:text-4xl{font-size:2.25rem;line-height:2.5rem}.xl\:text-5xl{font-size:3rem;line-height:1}.xl\:text-6xl{font-size:3.75rem;line-height:1}.xl\:opacity-100{opacity:1}.min-\[1280px\]\:-mt-7{margin-top:-1.75rem}.min-\[1280px\]\:mt-0{margin-top:0}.min-\[1280px\]\:translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.min-\[1280px\]\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.min-\[1280px\]\:gap-y-1{row-gap:.25rem}}@media (min-width: 1400px){.min-\[1400px\]\:-mt-2{margin-top:-.5rem}.min-\[1400px\]\:-mt-5{margin-top:-1.25rem}.min-\[1400px\]\:translate-x-2{--tw-translate-x: .5rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.min-\[1400px\]\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width: 1450px){.tracks-break\:block{display:block}.tracks-break\:hidden{display:none}.min-\[1450px\]\:-ml-10{margin-left:-2.5rem}.min-\[1450px\]\:mt-0{margin-top:0}.min-\[1450px\]\:translate-x-10{--tw-translate-x: 2.5rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.min-\[1450px\]\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width: 1536px){.\32xl\:mx-0{margin-left:0;margin-right:0}.\32xl\:mx-14{margin-left:3.5rem;margin-right:3.5rem}.\32xl\:mx-72{margin-left:18rem;margin-right:18rem}.\32xl\:my-12{margin-top:3rem;margin-bottom:3rem}.\32xl\:my-4{margin-top:1rem;margin-bottom:1rem}.\32xl\:ml-2{margin-left:.5rem}.\32xl\:mt-10{margin-top:2.5rem}.\32xl\:mt-12{margin-top:3rem}.\32xl\:h-\[60vh\]{height:60vh}.\32xl\:w-\[150\%\]{width:150%}.\32xl\:w-\[170\%\]{width:170%}.\32xl\:w-full{width:100%}.\32xl\:max-w-\[200px\]{max-width:200px}.\32xl\:gap-\[13rem\]{gap:13rem}.\32xl\:px-5{padding-left:1.25rem;padding-right:1.25rem}.\32xl\:px-56{padding-left:14rem;padding-right:14rem}.\32xl\:px-72{padding-left:18rem;padding-right:18rem}.\32xl\:text-4xl{font-size:2.25rem;line-height:2.5rem}}@media (min-width: 1600px){.min-\[1600px\]\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}}@media (min-width: 1760px){.mascot-break\:w-\[180\%\]{width:180%}.mascot-break\:gap-\[25rem\]{gap:25rem}}@media (min-width: 1800px){.min-\[1800px\]\:h-48{height:12rem}.min-\[1800px\]\:w-24{width:6rem}.min-\[1800px\]\:w-28{width:7rem}.min-\[1800px\]\:w-32{width:8rem}.min-\[1800px\]\:w-36{width:9rem}.min-\[1800px\]\:w-44{width:11rem}.min-\[1800px\]\:w-48{width:12rem}.min-\[1800px\]\:w-52{width:13rem}.min-\[1800px\]\:w-56{width:14rem}}@media (min-width: 2000px){.min-\[2000px\]\:mx-7{margin-left:1.75rem;margin-right:1.75rem}.min-\[2000px\]\:-mt-2{margin-top:-.5rem}.min-\[2000px\]\:mt-2{margin-top:.5rem}.min-\[2000px\]\:h-52{height:13rem}.min-\[2000px\]\:w-28{width:7rem}.min-\[2000px\]\:w-32{width:8rem}.min-\[2000px\]\:w-36{width:9rem}.min-\[2000px\]\:w-40{width:10rem}.min-\[2000px\]\:w-48{width:12rem}.min-\[2000px\]\:w-52{width:13rem}.min-\[2000px\]\:w-56{width:14rem}.min-\[2000px\]\:w-64{width:16rem}.min-\[2000px\]\:w-72{width:18rem}.min-\[2000px\]\:max-w-\[240px\]{max-width:240px}.min-\[2000px\]\:max-w-\[270px\]{max-width:270px}.min-\[2000px\]\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.min-\[2000px\]\:text-xl{font-size:1.25rem;line-height:1.75rem}}@media (min-width: 2100px){.min-\[2100px\]\:-mt-2{margin-top:-.5rem}.min-\[2100px\]\:mt-4{margin-top:1rem}.min-\[2100px\]\:max-w-\[280px\]{max-width:280px}.min-\[2100px\]\:max-w-\[300px\]{max-width:300px}}@media (min-width: 2200px){.\33xl\:w-\[150\%\]{width:150%}}@media (min-width: 320px){@media not all and (min-width: 768px){@media (orientation: landscape){.xs\:max-md\:landscape\:mt-24{margin-top:6rem}.xs\:max-md\:landscape\:h-8{height:2rem}.xs\:max-md\:landscape\:h-\[360px\]{height:360px}.xs\:max-md\:landscape\:h-full{height:100%}.xs\:max-md\:landscape\:w-8{width:2rem}.xs\:max-md\:landscape\:w-\[475px\]{width:475px}.xs\:max-md\:landscape\:flex-row{flex-direction:row}}}@media (max-width: 825px){@media (orientation: landscape){.min-\[320px\]\:max-\[825px\]\:landscape\:h-auto{height:auto}.min-\[320px\]\:max-\[825px\]\:landscape\:min-h-\[305px\]{min-height:305px}.min-\[320px\]\:max-\[825px\]\:landscape\:min-h-\[auto\]{min-height:auto}.min-\[320px\]\:max-\[825px\]\:landscape\:min-w-\[auto\]{min-width:auto}.min-\[320px\]\:max-\[825px\]\:landscape\:\!flex-row{flex-direction:row!important}.min-\[320px\]\:max-\[825px\]\:landscape\:flex-col{flex-direction:column}.min-\[320px\]\:max-\[825px\]\:landscape\:\!justify-around{justify-content:space-around!important}.min-\[320px\]\:max-\[825px\]\:landscape\:overflow-y-auto{overflow-y:auto}.min-\[320px\]\:max-\[825px\]\:landscape\:rounded-lg{border-radius:.5rem}.min-\[320px\]\:max-\[825px\]\:landscape\:rounded-bl-lg{border-bottom-left-radius:.5rem}.min-\[320px\]\:max-\[825px\]\:landscape\:rounded-bl-none{border-bottom-left-radius:0}.min-\[320px\]\:max-\[825px\]\:landscape\:rounded-tr-none{border-top-right-radius:0}.min-\[320px\]\:max-\[825px\]\:landscape\:p-\[10px\]{padding:10px}.min-\[320px\]\:max-\[825px\]\:landscape\:pr-\[10px\]{padding-right:10px}.min-\[320px\]\:max-\[825px\]\:landscape\:text-5xl{font-size:3rem;line-height:1}.min-\[320px\]\:max-\[825px\]\:landscape\:text-\[3rem\]{font-size:3rem}.min-\[320px\]\:max-\[825px\]\:landscape\:font-normal{font-weight:400}}}}.\[\&\.ps--clicking\]\:bg-\[\#eee\].ps--clicking{--tw-bg-opacity: 1;background-color:rgb(238 238 238 / var(--tw-bg-opacity))}.\[\&\.ps--clicking\]\:\!opacity-90.ps--clicking{opacity:.9!important}.\[\&\:\:-webkit-scrollbar-button\]\:block::-webkit-scrollbar-button{display:block}.\[\&\:\:-webkit-scrollbar-button\]\:h-0::-webkit-scrollbar-button{height:0px}.\[\&\:\:-webkit-scrollbar-button\]\:bg-transparent::-webkit-scrollbar-button{background-color:transparent}.\[\&\:\:-webkit-scrollbar-thumb\]\:h-\[50px\]::-webkit-scrollbar-thumb{height:50px}.\[\&\:\:-webkit-scrollbar-thumb\]\:rounded::-webkit-scrollbar-thumb{border-radius:.25rem}.\[\&\:\:-webkit-scrollbar-thumb\]\:bg-\[\#999\]::-webkit-scrollbar-thumb{--tw-bg-opacity: 1;background-color:rgb(153 153 153 / var(--tw-bg-opacity))}.\[\&\:\:-webkit-scrollbar-track-piece\]\:rounded-none::-webkit-scrollbar-track-piece{border-radius:0}.\[\&\:\:-webkit-scrollbar-track-piece\]\:rounded-l::-webkit-scrollbar-track-piece{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.\[\&\:\:-webkit-scrollbar-track-piece\]\:bg-transparent::-webkit-scrollbar-track-piece{background-color:transparent}.\[\&\:\:-webkit-scrollbar\]\:h-1::-webkit-scrollbar{height:.25rem}.\[\&\:\:-webkit-scrollbar\]\:w-1::-webkit-scrollbar{width:.25rem}.\[\&\:not\(\[data-te-collapse-collapsed\]\)\]\:bg-\[\#1E1E1E\]:not([data-te-collapse-collapsed]){--tw-bg-opacity: 1;background-color:rgb(30 30 30 / var(--tw-bg-opacity))}.\[\&\:not\(\[data-te-collapse-collapsed\]\)\]\:text-\[\#169B81\]:not([data-te-collapse-collapsed]){--tw-text-opacity: 1;color:rgb(22 155 129 / var(--tw-text-opacity))}.\[\&\:not\(\[data-te-collapse-collapsed\]\)\]\:text-white:not([data-te-collapse-collapsed]){--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.\[\&\:not\(\[data-te-input-placeholder-active\]\)\]\:placeholder\:opacity-0:not([data-te-input-placeholder-active])::-moz-placeholder{opacity:0}.\[\&\:not\(\[data-te-input-placeholder-active\]\)\]\:placeholder\:opacity-0:not([data-te-input-placeholder-active])::placeholder{opacity:0}.hover\:\[\&\:not\(\[data-te-select-option-disabled\]\)\]\:bg-black\/5:not([data-te-select-option-disabled]):hover{background-color:#0000000d}:is(.dark .dark\:hover\:\[\&\:not\(\[data-te-select-option-disabled\]\)\]\:bg-white\/30:not([data-te-select-option-disabled]):hover){background-color:#ffffff4d}.\[\&\>svg\]\:mx-auto>svg{margin-left:auto;margin-right:auto}.\[\&\>svg\]\:h-4>svg{height:1rem}.\[\&\>svg\]\:h-5>svg{height:1.25rem}.\[\&\>svg\]\:w-4>svg{width:1rem}.\[\&\>svg\]\:w-5>svg{width:1.25rem}.\[\&\>svg\]\:rotate-180>svg{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&\>svg\]\:fill-neutral-500>svg{fill:#737373}:is(.dark .dark\:\[\&\>svg\]\:fill-white>svg){fill:#fff} diff --git a/assets/cp-17341f2c.js b/assets/cp-17341f2c.js deleted file mode 100644 index d11c0af..0000000 --- a/assets/cp-17341f2c.js +++ /dev/null @@ -1,3 +0,0 @@ -(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))r(o);new MutationObserver(o=>{for(const i of o)if(i.type==="childList")for(const a of i.addedNodes)a.tagName==="LINK"&&a.rel==="modulepreload"&&r(a)}).observe(document,{childList:!0,subtree:!0});function n(o){const i={};return o.integrity&&(i.integrity=o.integrity),o.referrerPolicy&&(i.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?i.credentials="include":o.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function r(o){if(o.ep)return;o.ep=!0;const i=n(o);fetch(o.href,i)}})();const W=(()=>{const t={};let e=1;return{set(n,r,o){typeof n[r]>"u"&&(n[r]={key:r,id:e},e++),t[n[r].id]=o},get(n,r){if(!n||typeof n[r]>"u")return null;const o=n[r];return o.key===r?t[o.id]:null},delete(n,r){if(typeof n[r]>"u")return;const o=n[r];o.key===r&&(delete t[o.id],delete n[r])}}})(),P={setData(t,e,n){W.set(t,e,n)},getData(t,e){return W.get(t,e)},removeData(t,e){W.delete(t,e)}},xe=1e6,$e=1e3,X="transitionend",je=t=>t==null?`${t}`:{}.toString.call(t).match(/\s([a-z]+)/i)[1].toLowerCase(),Me=t=>{do t+=Math.floor(Math.random()*xe);while(document.getElementById(t));return t},me=t=>{let e=t.getAttribute("data-te-target");if(!e||e==="#"){let n=t.getAttribute("href");if(!n||!n.includes("#")&&!n.startsWith("."))return null;n.includes("#")&&!n.startsWith("#")&&(n=`#${n.split("#")[1]}`),e=n&&n!=="#"?n.trim():null}return e},be=t=>{const e=me(t);return e&&document.querySelector(e)?e:null},x=t=>{const e=me(t);return e?document.querySelector(e):null},Pe=t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:n}=window.getComputedStyle(t);const r=Number.parseFloat(e),o=Number.parseFloat(n);return!r&&!o?0:(e=e.split(",")[0],n=n.split(",")[0],(Number.parseFloat(e)+Number.parseFloat(n))*$e)},ze=t=>{t.dispatchEvent(new Event(X))},ye=t=>!t||typeof t!="object"?!1:(typeof t.jquery<"u"&&(t=t[0]),typeof t.nodeType<"u"),J=t=>ye(t)?t.jquery?t[0]:t:typeof t=="string"&&t.length>0?document.querySelector(t):null,G=(t,e,n)=>{Object.keys(n).forEach(r=>{const o=n[r],i=e[r],a=i&&ye(i)?"element":je(i);if(!new RegExp(o).test(a))throw new Error(`${t.toUpperCase()}: Option "${r}" provided type "${a}" but expected type "${o}".`)})},te=t=>{if(!t||t.getClientRects().length===0)return!1;if(t.style&&t.parentNode&&t.parentNode.style){const e=getComputedStyle(t),n=getComputedStyle(t.parentNode);return getComputedStyle(t).getPropertyValue("visibility")==="visible"||e.display!=="none"&&n.display!=="none"&&e.visibility!=="hidden"}return!1},ne=t=>!t||t.nodeType!==Node.ELEMENT_NODE||t.classList.contains("disabled")?!0:typeof t.disabled<"u"?t.disabled:t.hasAttribute("disabled")&&t.getAttribute("disabled")!=="false",ve=t=>{t.offsetHeight},we=()=>{const{jQuery:t}=window;return t&&!document.body.hasAttribute("data-te-no-jquery")?t:null},U=[],Re=t=>{document.readyState==="loading"?(U.length||document.addEventListener("DOMContentLoaded",()=>{U.forEach(e=>e())}),U.push(t)):t()},A=()=>document.documentElement.dir==="rtl",ae=t=>{typeof t=="function"&&t()},Be=(t,e,n=!0)=>{if(!n){ae(t);return}const r=5,o=Pe(e)+r;let i=!1;const a=({target:l})=>{l===e&&(i=!0,e.removeEventListener(X,a),ae(t))};e.addEventListener(X,a),setTimeout(()=>{i||ze(e)},o)},He=/[^.]*(?=\..*)\.|.*/,qe=/\..*/,We=/::\d+$/,V={};let se=1;const Ue={mouseenter:"mouseover",mouseleave:"mouseout"},Ve=/^(mouseenter|mouseleave)/i,_e=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function Ce(t,e){return e&&`${e}::${se++}`||t.uidEvent||se++}function Ee(t){const e=Ce(t);return t.uidEvent=e,V[e]=V[e]||{},V[e]}function Fe(t,e){return function n(r){return r.delegateTarget=t,n.oneOff&&m.off(t,r.type,e),e.apply(t,[r])}}function Ke(t,e,n){return function r(o){const i=t.querySelectorAll(e);for(let{target:a}=o;a&&a!==this;a=a.parentNode)for(let l=i.length;l--;"")if(i[l]===a)return o.delegateTarget=a,r.oneOff&&m.off(t,o.type,n),n.apply(a,[o]);return null}}function Ae(t,e,n=null){const r=Object.keys(t);for(let o=0,i=r.length;ofunction(T){if(!T.relatedTarget||T.relatedTarget!==T.delegateTarget&&!T.delegateTarget.contains(T.relatedTarget))return j.call(this,T)};r?r=E(r):n=E(n)}const[i,a,l]=Te(e,n,r),s=Ee(t),h=s[l]||(s[l]={}),_=Ae(h,a,i?n:null);if(_){_.oneOff=_.oneOff&&o;return}const g=Ce(a,e.replace(He,"")),v=i?Ke(t,n,r):Fe(t,n);v.delegationSelector=i?n:null,v.originalHandler=a,v.oneOff=o,v.uidEvent=g,h[g]=v,t.addEventListener(l,v,i)}function ee(t,e,n,r,o){const i=Ae(e[n],r,o);i&&(t.removeEventListener(n,i,!!o),delete e[n][i.uidEvent])}function Ye(t,e,n,r){const o=e[n]||{};Object.keys(o).forEach(i=>{if(i.includes(r)){const a=o[i];ee(t,e,n,a.originalHandler,a.delegationSelector)}})}function Ne(t){return t=t.replace(qe,""),Ue[t]||t}const m={on(t,e,n,r){le(t,e,n,r,!1)},one(t,e,n,r){le(t,e,n,r,!0)},off(t,e,n,r){if(typeof e!="string"||!t)return;const[o,i,a]=Te(e,n,r),l=a!==e,s=Ee(t),h=e.startsWith(".");if(typeof i<"u"){if(!s||!s[a])return;ee(t,s,a,i,o?n:null);return}h&&Object.keys(s).forEach(g=>{Ye(t,s,g,e.slice(1))});const _=s[a]||{};Object.keys(_).forEach(g=>{const v=g.replace(We,"");if(!l||e.includes(v)){const E=_[g];ee(t,s,a,E.originalHandler,E.delegationSelector)}})},trigger(t,e,n){if(typeof e!="string"||!t)return null;const r=we(),o=Ne(e),i=e!==o,a=_e.has(o);let l,s=!0,h=!0,_=!1,g=null;return i&&r&&(l=r.Event(e,n),r(t).trigger(l),s=!l.isPropagationStopped(),h=!l.isImmediatePropagationStopped(),_=l.isDefaultPrevented()),a?(g=document.createEvent("HTMLEvents"),g.initEvent(o,s,!0)):g=new CustomEvent(e,{bubbles:s,cancelable:!0}),typeof n<"u"&&Object.keys(n).forEach(v=>{Object.defineProperty(g,v,{get(){return n[v]}})}),_&&g.preventDefault(),h&&t.dispatchEvent(g),g.defaultPrevented&&typeof l<"u"&&l.preventDefault(),g}},Qe="5.1.3";class Oe{constructor(e){e=J(e),e&&(this._element=e,P.setData(this._element,this.constructor.DATA_KEY,this))}dispose(){P.removeData(this._element,this.constructor.DATA_KEY),m.off(this._element,this.constructor.EVENT_KEY),Object.getOwnPropertyNames(this).forEach(e=>{this[e]=null})}_queueCallback(e,n,r=!0){Be(e,n,r)}static getInstance(e){return P.getData(J(e),this.DATA_KEY)}static getOrCreateInstance(e,n={}){return this.getInstance(e)||new this(e,typeof n=="object"?n:null)}static get VERSION(){return Qe}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}static get DATA_KEY(){return`te.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}}function F(t){return t==="true"?!0:t==="false"?!1:t===Number(t).toString()?Number(t):t===""||t==="null"?null:t}function K(t){return t.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`)}const f={setDataAttribute(t,e,n){t.setAttribute(`data-te-${K(e)}`,n)},removeDataAttribute(t,e){t.removeAttribute(`data-te-${K(e)}`)},getDataAttributes(t){if(!t)return{};const e={};return Object.keys(t.dataset).filter(n=>n.startsWith("te")).forEach(n=>{if(n.startsWith("teClass"))return;let r=n.replace(/^te/,"");r=r.charAt(0).toLowerCase()+r.slice(1,r.length),e[r]=F(t.dataset[n])}),e},getDataClassAttributes(t){if(!t)return{};const e={...t.dataset};return Object.keys(e).filter(n=>n.startsWith("teClass")).forEach(n=>{let r=n.replace(/^teClass/,"");r=r.charAt(0).toLowerCase()+r.slice(1,r.length),e[r]=F(e[n])}),e},getDataAttribute(t,e){return F(t.getAttribute(`data-te-${K(e)}`))},offset(t){const e=t.getBoundingClientRect();return{top:e.top+document.body.scrollTop,left:e.left+document.body.scrollLeft}},position(t){return{top:t.offsetTop,left:t.offsetLeft}},style(t,e){Object.assign(t.style,e)},toggleClass(t,e){t&&Y(e).forEach(n=>{t.classList.contains(n)?t.classList.remove(n):t.classList.add(n)})},addClass(t,e){Y(e).forEach(n=>!t.classList.contains(n)&&t.classList.add(n))},addStyle(t,e){Object.keys(e).forEach(n=>{t.style[n]=e[n]})},removeClass(t,e){Y(e).forEach(n=>t.classList.contains(n)&&t.classList.remove(n))},hasClass(t,e){return t.classList.contains(e)}};function Y(t){return typeof t=="string"?t.split(" "):Array.isArray(t)?t:!1}const Ze=3,C={closest(t,e){return t.closest(e)},matches(t,e){return t.matches(e)},find(t,e=document.documentElement){return[].concat(...Element.prototype.querySelectorAll.call(e,t))},findOne(t,e=document.documentElement){return Element.prototype.querySelector.call(e,t)},children(t,e){return[].concat(...t.children).filter(n=>n.matches(e))},parents(t,e){const n=[];let r=t.parentNode;for(;r&&r.nodeType===Node.ELEMENT_NODE&&r.nodeType!==Ze;)this.matches(r,e)&&n.push(r),r=r.parentNode;return n},prev(t,e){let n=t.previousElementSibling;for(;n;){if(n.matches(e))return[n];n=n.previousElementSibling}return[]},next(t,e){let n=t.nextElementSibling;for(;n;){if(this.matches(n,e))return[n];n=n.nextElementSibling}return[]},focusableChildren(t){const e=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map(n=>`${n}:not([tabindex^="-"])`).join(", ");return this.find(e,t).filter(n=>!ne(n)&&te(n))}};A();A();A();A();A();A();const Q="collapse",ke="te.collapse",R=`.${ke}`,ce={toggle:!0,parent:null},Xe={toggle:"boolean",parent:"(null|element)"},Je=`show${R}`,Ge=`shown${R}`,et=`hide${R}`,tt=`hidden${R}`,Z="data-te-collapse-show",de="data-te-collapse-collapsed",M="data-te-collapse-collapsing",nt="data-te-collapse-horizontal",L="data-te-collapse-item",ue=`:scope [${L}] [${L}]`,rt="width",ot="height",it="[data-te-collapse-item][data-te-collapse-show], [data-te-collapse-item][data-te-collapse-collapsing]",he="[data-te-collapse-init]",at={visible:"!visible",hidden:"hidden",baseTransition:"overflow-hidden duration-[350ms] ease-[cubic-bezier(0.25,0.1,0.25,1.0)] motion-reduce:transition-none",collapsing:"h-0 transition-[height] overflow-hidden duration-[350ms] ease-[cubic-bezier(0.25,0.1,0.25,1.0)] motion-reduce:transition-none",collapsingHorizontal:"w-0 h-auto transition-[width] overflow-hidden duration-[350ms] ease-[cubic-bezier(0.25,0.1,0.25,1.0)] motion-reduce:transition-none"},st={visible:"string",hidden:"string",baseTransition:"string",collapsing:"string",collapsingHorizontal:"string"};class I extends Oe{constructor(e,n,r){super(e),this._isTransitioning=!1,this._config=this._getConfig(n),this._classes=this._getClasses(r),this._triggerArray=[];const o=C.find(he);for(let i=0,a=o.length;i_===this._element);s!==null&&h.length&&(this._selector=s,this._triggerArray.push(l))}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return ce}static get NAME(){return Q}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let e=[],n;if(this._config.parent){const s=C.find(ue,this._config.parent);e=C.find(it,this._config.parent).filter(h=>!s.includes(h))}const r=C.findOne(this._selector);if(e.length){const s=e.find(h=>r!==h);if(n=s?I.getInstance(s):null,n&&n._isTransitioning)return}if(m.trigger(this._element,Je).defaultPrevented)return;e.forEach(s=>{r!==s&&I.getOrCreateInstance(s,{toggle:!1}).hide(),n||P.setData(s,ke,null)});const o=this._getDimension(),i=o==="height"?this._classes.collapsing:this._classes.collapsingHorizontal;f.removeClass(this._element,this._classes.visible),f.removeClass(this._element,this._classes.hidden),f.addClass(this._element,i),this._element.removeAttribute(L),this._element.setAttribute(M,""),this._element.style[o]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const a=()=>{this._isTransitioning=!1,f.removeClass(this._element,this._classes.hidden),f.removeClass(this._element,i),f.addClass(this._element,this._classes.visible),this._element.removeAttribute(M),this._element.setAttribute(L,""),this._element.setAttribute(Z,""),this._element.style[o]="",m.trigger(this._element,Ge)},l=`scroll${o[0].toUpperCase()+o.slice(1)}`;this._queueCallback(a,this._element,!0),this._element.style[o]=`${this._element[l]}px`}hide(){if(this._isTransitioning||!this._isShown()||m.trigger(this._element,et).defaultPrevented)return;const e=this._getDimension(),n=e==="height"?this._classes.collapsing:this._classes.collapsingHorizontal;this._element.style[e]=`${this._element.getBoundingClientRect()[e]}px`,ve(this._element),f.addClass(this._element,n),f.removeClass(this._element,this._classes.visible),f.removeClass(this._element,this._classes.hidden),this._element.setAttribute(M,""),this._element.removeAttribute(L),this._element.removeAttribute(Z);const r=this._triggerArray.length;for(let i=0;i{this._isTransitioning=!1,f.removeClass(this._element,n),f.addClass(this._element,this._classes.visible),f.addClass(this._element,this._classes.hidden),this._element.removeAttribute(M),this._element.setAttribute(L,""),m.trigger(this._element,tt)};this._element.style[e]="",this._queueCallback(o,this._element,!0)}_isShown(e=this._element){return e.hasAttribute(Z)}_getConfig(e){return e={...ce,...f.getDataAttributes(this._element),...e},e.toggle=!!e.toggle,e.parent=J(e.parent),G(Q,e,Xe),e}_getClasses(e){const n=f.getDataClassAttributes(this._element);return e={...at,...n,...e},G(Q,e,st),e}_getDimension(){return this._element.hasAttribute(nt)?rt:ot}_initializeChildren(){if(!this._config.parent)return;const e=C.find(ue,this._config.parent);C.find(he,this._config.parent).filter(n=>!e.includes(n)).forEach(n=>{const r=x(n);r&&this._addAriaAndCollapsedClass([n],this._isShown(r))})}_addAriaAndCollapsedClass(e,n){e.length&&e.forEach(r=>{n?r.removeAttribute(de):r.setAttribute(`${de}`,""),r.setAttribute("aria-expanded",n)})}static jQueryInterface(e){return this.each(function(){const n={};typeof e=="string"&&/show|hide/.test(e)&&(n.toggle=!1);const r=I.getOrCreateInstance(this,n);if(typeof e=="string"){if(typeof r[e]>"u")throw new TypeError(`No method named "${e}"`);r[e]()}})}}A(),A();const pe="tab",lt="te.tab",B=`.${lt}`,ct=`hide${B}`,dt=`hidden${B}`,ut=`show${B}`,ht=`shown${B}`,pt="data-te-dropdown-menu-ref",D="data-te-tab-active",z="data-te-nav-active",gt="[data-te-dropdown-ref]",ft="[data-te-nav-ref]",ge=`[${D}]`,mt=`[${z}]`,fe=":scope > li > .active",bt="[data-te-dropdown-toggle-ref]",yt=":scope > [data-te-dropdown-menu-ref] [data-te-dropdown-show]",vt={show:"opacity-100",hide:"opacity-0"},wt={show:"string",hide:"string"};class re extends Oe{constructor(e,n){super(e),this._classes=this._getClasses(n)}static get NAME(){return pe}show(){if(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&this._element.getAttribute(z)==="")return;let e;const n=x(this._element),r=this._element.closest(ft),o=C.findOne(mt,r);if(r){const l=r.nodeName==="UL"||r.nodeName==="OL"?fe:ge;e=C.find(l,r),e=e[e.length-1]}const i=e?m.trigger(e,ct,{relatedTarget:this._element}):null;if(m.trigger(this._element,ut,{relatedTarget:e}).defaultPrevented||i!==null&&i.defaultPrevented)return;this._activate(this._element,r,null,o,this._element);const a=()=>{m.trigger(e,dt,{relatedTarget:this._element}),m.trigger(this._element,ht,{relatedTarget:e})};n?this._activate(n,n.parentNode,a,o,this._element):a()}_getClasses(e){const n=f.getDataClassAttributes(this._element);return e={...vt,...n,...e},G(pe,e,wt),e}_activate(e,n,r,o,i){const a=(n&&(n.nodeName==="UL"||n.nodeName==="OL")?C.find(fe,n):C.children(n,ge))[0],l=r&&a&&a.hasAttribute(D),s=()=>this._transitionComplete(e,a,r,o,i);a&&l?(f.removeClass(a,this._classes.show),f.addClass(a,this._classes.hide),this._queueCallback(s,e,!0)):s()}_transitionComplete(e,n,r,o,i){if(n&&o){n.removeAttribute(D),o.removeAttribute(z);const l=C.findOne(yt,n.parentNode);l&&l.removeAttribute(D),n.getAttribute("role")==="tab"&&n.setAttribute("aria-selected",!1)}e.setAttribute(D,""),i.setAttribute(z,""),e.getAttribute("role")==="tab"&&e.setAttribute("aria-selected",!0),ve(e),e.classList.contains(this._classes.hide)&&(f.removeClass(e,this._classes.hide),f.addClass(e,this._classes.show));let a=e.parentNode;if(a&&a.nodeName==="LI"&&(a=a.parentNode),a&&a.hasAttribute(pt)){const l=e.closest(gt);l&&C.find(bt,l).forEach(s=>s.setAttribute(D,"")),e.setAttribute("aria-expanded",!0)}r&&r()}static jQueryInterface(e){return this.each(function(){const n=re.getOrCreateInstance(this);if(typeof e=="string"){if(typeof n[e]>"u")throw new TypeError(`No method named "${e}"`);n[e]()}})}}(()=>{var t={454:(r,o,i)=>{i.d(o,{Z:()=>s});var a=i(645),l=i.n(a)()(function(h){return h[1]});l.push([r.id,"INPUT:-webkit-autofill,SELECT:-webkit-autofill,TEXTAREA:-webkit-autofill{animation-name:onautofillstart}INPUT:not(:-webkit-autofill),SELECT:not(:-webkit-autofill),TEXTAREA:not(:-webkit-autofill){animation-name:onautofillcancel}@keyframes onautofillstart{}@keyframes onautofillcancel{}",""]);const s=l},645:r=>{r.exports=function(o){var i=[];return i.toString=function(){return this.map(function(a){var l=o(a);return a[2]?"@media ".concat(a[2]," {").concat(l,"}"):l}).join("")},i.i=function(a,l,s){typeof a=="string"&&(a=[[null,a,""]]);var h={};if(s)for(var _=0;_{(function(){if(typeof window<"u")try{var r=new window.CustomEvent("test",{cancelable:!0});if(r.preventDefault(),r.defaultPrevented!==!0)throw new Error("Could not prevent default")}catch{var o=function(i,a){var l,s;return(a=a||{}).bubbles=!!a.bubbles,a.cancelable=!!a.cancelable,(l=document.createEvent("CustomEvent")).initCustomEvent(i,a.bubbles,a.cancelable,a.detail),s=l.preventDefault,l.preventDefault=function(){s.call(this);try{Object.defineProperty(this,"defaultPrevented",{get:function(){return!0}})}catch{this.defaultPrevented=!0}},l};o.prototype=window.Event.prototype,window.CustomEvent=o}})()},379:(r,o,i)=>{var a,l=function(){var c={};return function(u){if(c[u]===void 0){var d=document.querySelector(u);if(window.HTMLIFrameElement&&d instanceof window.HTMLIFrameElement)try{d=d.contentDocument.head}catch{d=null}c[u]=d}return c[u]}}(),s=[];function h(c){for(var u=-1,d=0;d{var o=r&&r.__esModule?()=>r.default:()=>r;return n.d(o,{a:o}),o},n.d=(r,o)=>{for(var i in o)n.o(o,i)&&!n.o(r,i)&&Object.defineProperty(r,i,{enumerable:!0,get:o[i]})},n.o=(r,o)=>Object.prototype.hasOwnProperty.call(r,o),(()=>{var r=n(379),o=n.n(r),i=n(454);function a(s){if(!s.hasAttribute("autocompleted")){s.setAttribute("autocompleted","");var h=new window.CustomEvent("onautocomplete",{bubbles:!0,cancelable:!0,detail:null});s.dispatchEvent(h)||(s.value="")}}function l(s){s.hasAttribute("autocompleted")&&(s.removeAttribute("autocompleted"),s.dispatchEvent(new window.CustomEvent("onautocomplete",{bubbles:!0,cancelable:!1,detail:null})))}o()(i.Z,{insert:"head",singleton:!1}),i.Z.locals,n(810),document.addEventListener("animationstart",function(s){s.animationName==="onautofillstart"?a(s.target):l(s.target)},!0),document.addEventListener("input",function(s){s.inputType!=="insertReplacementText"&&"data"in s?l(s.target):a(s.target)},!0)})()})();var H=function(t){this.element=t,this.handlers={}},De={isEmpty:{configurable:!0}};H.prototype.bind=function(t,e){typeof this.handlers[t]>"u"&&(this.handlers[t]=[]),this.handlers[t].push(e),this.element.addEventListener(t,e,!1)};H.prototype.unbind=function(t,e){var n=this;this.handlers[t]=this.handlers[t].filter(function(r){return e&&r!==e?!0:(n.element.removeEventListener(t,r,!1),!1)})};H.prototype.unbindAll=function(){for(var t in this.handlers)this.unbind(t)};De.isEmpty.get=function(){var t=this;return Object.keys(this.handlers).every(function(e){return t.handlers[e].length===0})};Object.defineProperties(H.prototype,De);typeof document<"u"&&"WebkitAppearance"in document.documentElement.style,typeof window<"u"&&("ontouchstart"in window||"maxTouchPoints"in window.navigator&&window.navigator.maxTouchPoints>0||window.DocumentTouch&&document instanceof window.DocumentTouch),typeof navigator<"u"&&navigator.msMaxTouchPoints,typeof navigator<"u"&&/Chrome/i.test(navigator&&navigator.userAgent);A();A();const _t=t=>{Re(()=>{const e=we();if(e){const n=t.NAME,r=e.fn[n];e.fn[n]=t.jQueryInterface,e.fn[n].Constructor=t,e.fn[n].noConflict=()=>(e.fn[n]=r,t.jQueryInterface)}})},Ct=(t,e)=>{m.on(document,`click.te.${t.NAME}`,e,function(n){n.preventDefault(),t.getOrCreateInstance(this).toggle()})},Et=(t,e)=>{m.on(document,`click.te.${t.NAME}.data-api`,e,function(n){["A","AREA"].includes(this.tagName)&&n.preventDefault(),!ne(this)&&t.getOrCreateInstance(this).show()})},At=(t,e)=>{m.on(document,`click.te.${t.NAME}.data-api`,e,function(n){const r=x(this);if(["A","AREA"].includes(this.tagName)&&n.preventDefault(),ne(this))return;m.one(r,t.EVENT_HIDDEN,()=>{te(this)&&this.focus()});const o=C.findOne(t.OPEN_SELECTOR);o&&o!==r&&t.getInstance(o).hide(),t.getOrCreateInstance(r).toggle(this)})},Tt=(t,e)=>{m.on(document,`click.te.${t.NAME}`,e,n=>{n.preventDefault();const r=n.target.closest(e);t.getOrCreateInstance(r).toggle()})},Nt=(t,e)=>{m.on(document,`click.te.${t.NAME}`,e,function(n){const r=x(this);["A","AREA"].includes(this.tagName)&&n.preventDefault(),m.one(r,t.EVENT_SHOW,i=>{i.defaultPrevented||m.one(r,t.EVENT_HIDDEN,()=>{te(this)&&this.focus()})});const o=C.findOne(`[${t.OPEN_SELECTOR}="true"]`);o&&t.getInstance(o).hide(),t.getOrCreateInstance(r).toggle(this)})},Ot=(t,e)=>{m.one(document,"mousedown",e,t.autoInitial(new t))},kt=(t,e)=>{m.on(document,`click.te.${t.NAME}.data-api`,e,function(n){(n.target.tagName==="A"||n.delegateTarget&&n.delegateTarget.tagName==="A")&&n.preventDefault();const r=be(this);C.find(r).forEach(o=>{t.getOrCreateInstance(o,{toggle:!1}).toggle()})})},N={plugins:{legend:{labels:{color:"rgb(102,102,102)"}}}},Dt={line:{options:{...N,elements:{line:{backgroundColor:"rgba(59, 112, 202, 0.0)",borderColor:"rgb(59, 112, 202)",borderWidth:2,tension:0},point:{borderColor:"rgb(59, 112, 202)",backgroundColor:"rgb(59, 112, 202)"}},responsive:!0,legend:{display:!0},tooltips:{intersect:!1,mode:"index"},datasets:{borderColor:"red"},scales:{x:{stacked:!0,grid:{display:!1},ticks:{fontColor:"rgba(0,0,0, 0.5)"}},y:{stacked:!1,grid:{borderDash:[2],drawBorder:!1,zeroLineColor:"rgba(0,0,0,0)",zeroLineBorderDash:[2],zeroLineBorderDashOffset:[2]},ticks:{fontColor:"rgba(0,0,0, 0.5)"}}}}},bar:{options:{...N,backgroundColor:"rgb(59, 112, 202)",borderWidth:0,responsive:!0,legend:{display:!0},tooltips:{intersect:!1,mode:"index"},scales:{x:{stacked:!0,grid:{display:!1},ticks:{fontColor:"rgba(0,0,0, 0.5)"}},y:{stacked:!0,grid:{borderDash:[2],drawBorder:!1,zeroLineColor:"rgba(0,0,0,0)",zeroLineBorderDash:[2],zeroLineBorderDashOffset:[2]},ticks:{fontColor:"rgba(0,0,0, 0.5)"}}}}},pie:{options:{...N,elements:{arc:{backgroundColor:"rgb(59, 112, 202)"}},responsive:!0,legend:{display:!0}}},doughnut:{options:{...N,elements:{arc:{backgroundColor:"rgb(59, 112, 202)"}},responsive:!0,legend:{display:!0}}},polarArea:{options:{...N,elements:{arc:{backgroundColor:"rgba(59, 112, 202, 0.5)"}},responsive:!0,legend:{display:!0}}},radar:{options:{...N,elements:{line:{backgroundColor:"rgba(59, 112, 202, 0.5)",borderColor:"rgb(59, 112, 202)",borderWidth:2},point:{borderColor:"rgb(59, 112, 202)",backgroundColor:"rgb(59, 112, 202)"}},responsive:!0,legend:{display:!0}}},scatter:{options:{...N,elements:{line:{backgroundColor:"rgba(59, 112, 202, 0.5)",borderColor:"rgb(59, 112, 202)",borderWidth:2,tension:0},point:{borderColor:"rgb(59, 112, 202)",backgroundColor:"rgba(59, 112, 202, 0.5)"}},responsive:!0,legend:{display:!0},tooltips:{intersect:!1,mode:"index"},datasets:{borderColor:"red"},scales:{x:{stacked:!0,grid:{display:!1},ticks:{fontColor:"rgba(0,0,0, 0.5)"}},y:{stacked:!1,grid:{borderDash:[2],drawBorder:!1,zeroLineColor:"rgba(0,0,0,0)",zeroLineBorderDash:[2],zeroLineBorderDashOffset:[2]},ticks:{fontColor:"rgba(0,0,0, 0.5)"}}}}},bubble:{options:{...N,elements:{point:{borderColor:"rgb(59, 112, 202)",backgroundColor:"rgba(59, 112, 202, 0.5)"}},responsive:!0,legend:{display:!0},scales:{x:{grid:{display:!1},ticks:{fontColor:"rgba(0,0,0, 0.5)"}},y:{grid:{borderDash:[2],drawBorder:!1,zeroLineColor:"rgba(0,0,0,0)",zeroLineBorderDash:[2],zeroLineBorderDashOffset:[2]},ticks:{fontColor:"rgba(0,0,0, 0.5)"}}}}}},Lt=(t,e)=>{const n=i=>i[0]==="{"&&i[i.length-1]==="}"||i[0]==="["&&i[i.length-1]==="]",r=i=>typeof i!="string"?i:n(i)?JSON.parse(i.replace(/'/g,'"')):i,o=i=>{const a={};return Object.keys(i).forEach(l=>{if(l.match(/dataset.*/)){const s=l.slice(7,8).toLowerCase().concat(l.slice(8));a[s]=r(i[l])}}),a};C.find(e).forEach(i=>{if(f.getDataAttribute(i,"chart")!=="bubble"&&f.getDataAttribute(i,"chart")!=="scatter"){const a=f.getDataAttributes(i),l={data:{datasets:[o(a)]}};return a.chart&&(l.type=a.chart),a.labels&&(l.data.labels=JSON.parse(a.labels.replace(/'/g,'"'))),new t(i,{...l,...Dt[l.type]})}return null})},S={alert:{name:"Alert",selector:"[data-te-alert-init]",isToggler:!1},animation:{name:"Animate",selector:"[data-te-animation-init]",isToggler:!1},carousel:{name:"Carousel",selector:"[data-te-carousel-init]",isToggler:!1},chips:{name:"ChipsInput",selector:"[data-te-chips-init]",isToggler:!1},chip:{name:"Chip",selector:"[data-te-chip-init]",isToggler:!1},datepicker:{name:"Datepicker",selector:"[data-te-datepicker-init]",isToggler:!1},input:{name:"Input",selector:"[data-te-input-wrapper-init]",isToggler:!1},scrollspy:{name:"ScrollSpy",selector:"[data-te-spy='scroll']",isToggler:!1},select:{name:"Select",selector:"[data-te-select-init]",isToggler:!1},sidenav:{name:"Sidenav",selector:"[data-te-sidenav-init]",isToggler:!1},stepper:{name:"Stepper",selector:"[data-te-stepper-init]",isToggler:!1},timepicker:{name:"Timepicker",selector:"[data-te-timepicker-init]",isToggler:!1},toast:{name:"Toast",selector:"[data-te-toast-init]",isToggler:!1},chart:{name:"Chart",selector:"[data-te-chart]",isToggler:!1,advanced:Lt},button:{name:"Button",selector:"[data-te-toggle='button']",isToggler:!0,callback:Tt},collapse:{name:"Collapse",selector:"[data-te-collapse-init]",isToggler:!0,callback:kt},dropdown:{name:"Dropdown",selector:"[data-te-dropdown-toggle-ref]",isToggler:!0,callback:Ct},modal:{name:"Modal",selector:"[data-te-toggle='modal']",isToggler:!0,callback:Nt},ripple:{name:"Ripple",selector:"[data-te-ripple-init]",isToggler:!0,callback:Ot},offcanvas:{name:"Offcanvas",selector:"[data-te-offcanvas-toggle]",isToggler:!0,callback:At},tab:{name:"Tab",selector:"[data-te-toggle='tab'], [data-te-toggle='pill'], [data-te-toggle='list']",isToggler:!0,callback:Et}},St=t=>S[t.NAME]||null,It=t=>{if(!t||[].includes(t.NAME))return;[].push(t.NAME);const e=St(t),n=(e==null?void 0:e.isToggler)||!1;if(_t(t),e!=null&&e.advanced){e==null||e.advanced(t,e==null?void 0:e.selector);return}if(n){e==null||e.callback(t,e==null?void 0:e.selector);return}C.find(e==null?void 0:e.selector).forEach(r=>{let o=t.getInstance(r);o||(o=new t(r))})},xt=t=>{t.forEach(e=>It(e))},Le=(t,e=!1)=>{const n=Object.keys(S).map(r=>{if(document.body.querySelector(S[r].selector)){const o=t[S[r].name];return!o&&![].includes(r)&&e&&console.warn(`Please import ${S[r].name} from "tw-elements" package and add it to a object parameter inside "initTE" function`),o}});xt(n)};Me("chips-input-");Le({Collapse:I});Le({Tab:re});!window.location.host.startsWith("localhost")&&!window.location.host.startsWith("127.0.0.1")&&window.location.protocol==="http:"&&window.location.replace("https://"+window.location.host+window.location.pathname);const $t=()=>{new TypeIt("#blinking",{lifeLike:!1,speed:0}).type(".").pause(435).type(".").pause(441).type(".").pause(438).go()},jt=document.getElementById("preloader");window.addEventListener("load",function(){$t(),jt.style.display="none"});new TypeIt("#heading-schedule",{speed:125,waitUntilVisible:!0}).type('cat SCHEDULE.txt').go();new TypeIt("#heading-tracks",{speed:125,waitUntilVisible:!0}).type("ls ").pause(162).type("-a ").pause(154).type('TRACKS').pause(217).type("txt").pause(139).move(-3).type(".").pause(284).move(3,{instant:!0}).go();new TypeIt("#heading-prizes",{speed:150,waitUntilVisible:!0}).type('vi PRIZE.yml').go();new TypeIt("#heading-sponsors",{speed:125,waitUntilVisible:!0}).type('tar -xvzf SPONSORS.t').pause(468).type("ar.gz",{instant:!0}).go();new TypeIt("#heading-rules",{speed:125,waitUntilVisible:!0}).type('./FAQ').go();const $=document.createElement("script");$.src="https://apply.devfolio.co/v2/sdk.js";$.async=!0;$.defer=!0;document.body.appendChild($);window.addEventListener("beforeunload",()=>{document.body.removeChild($)}); diff --git a/assets/d_border-dd8d4fd3.svg b/assets/d_border.svg similarity index 100% rename from assets/d_border-dd8d4fd3.svg rename to assets/d_border.svg diff --git a/assets/d_t_border.svg b/assets/d_t_border.svg new file mode 100644 index 0000000..69c1b57 --- /dev/null +++ b/assets/d_t_border.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/devsdungeon-6c3eb695.svg b/assets/devsdungeon.svg similarity index 100% rename from assets/devsdungeon-6c3eb695.svg rename to assets/devsdungeon.svg diff --git a/assets/dotted-box.svg b/assets/dotted-box.svg new file mode 100644 index 0000000..bf6146b --- /dev/null +++ b/assets/dotted-box.svg @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/dotted_borders.svg b/assets/dotted_borders.svg new file mode 100644 index 0000000..c18b6c5 --- /dev/null +++ b/assets/dotted_borders.svg @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/echo3D_brand_logo_2-b4574401.png b/assets/echo3D_brand_logo_2.png similarity index 100% rename from assets/echo3D_brand_logo_2-b4574401.png rename to assets/echo3D_brand_logo_2.png diff --git a/assets/edugraph-og-image.png b/assets/edugraph-og-image.png new file mode 100644 index 0000000000000000000000000000000000000000..73be954d4fc708dd7985741f2d43219382fe5974 GIT binary patch literal 21381 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 B_;&yR literal 0 HcmV?d00001 diff --git a/assets/edugraph-og.png b/assets/edugraph-og.png new file mode 100644 index 0000000000000000000000000000000000000000..9d335fa40576a99c698402a39bb67e5805bd1d74 GIT binary patch literal 17669 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 literal 0 HcmV?d00001 diff --git a/assets/eduhub-abe05838.png b/assets/eduhub.png similarity index 100% rename from assets/eduhub-abe05838.png rename to assets/eduhub.png diff --git a/assets/favicon-10ae7e9a.ico b/assets/favicon_io/favicon.ico similarity index 100% rename from assets/favicon-10ae7e9a.ico rename to assets/favicon_io/favicon.ico diff --git a/assets/flyingComputer.gif b/assets/flyingComputer.gif new file mode 100644 index 0000000000000000000000000000000000000000..380059c12c3e647b041bf1944a52a932b8182ead GIT binary patch literal 2518 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 E0c*~W!vFvP literal 0 HcmV?d00001 diff --git a/assets/footer-5a07628a.png b/assets/footer.png similarity index 100% rename from assets/footer-5a07628a.png rename to assets/footer.png diff --git a/assets/frontend Club cp-891bd71e.png b/assets/frontend Club cp.png similarity index 100% rename from assets/frontend Club cp-891bd71e.png rename to assets/frontend Club cp.png diff --git a/assets/gdg kol-91876630.png b/assets/gdg kol.png similarity index 100% rename from assets/gdg kol-91876630.png rename to assets/gdg kol.png diff --git a/assets/gdsc kgec logo-2524e40c.png b/assets/gdsc kgec logo.png similarity index 100% rename from assets/gdsc kgec logo-2524e40c.png rename to assets/gdsc kgec logo.png diff --git a/assets/iiit_kalyani_logo-cd292579.png b/assets/iiit_kalyani_logo.png similarity index 100% rename from assets/iiit_kalyani_logo-cd292579.png rename to assets/iiit_kalyani_logo.png diff --git a/assets/images/discord_logo.png b/assets/images/discord_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..d495501f37bbe84904879ed06cbb11e8fa415543 GIT binary patch literal 1207 zcmV;o1W5adP)l>)xiDEQRr8tkYL#+fyjZFxq4#pE@f3c=aU49c zMsB=P?yk)kV6jwf!vb6zMjk*9I?xveZo&cNaVeIC`fvCO<5-3FV~xWY#b05KP=Q^TQK!qSYr3G55q9XN!yF<2=V z{^QMj1JH}H32OsnuFf|-xEEuw&awyrxCobo2ixP@>>6#jAl5%0d$AMM*nE8thW8fZ z5j>0~bCe5zU@M-(pII*^Q$Fm#I@}k#o-64Io9hCDlK_VIx^Q!yBbke8(i6730?SDr z?7({58A&qN02hVr^;s__8Ska_?YufiKNpgO?JZcIdNIlDU}4m(jx*ReIs(JO^aPVY z+KH>tJ;z5|@2I;2OJ}iE%_Z??Z)DMuvjE_dz|xCcdc^Hm9sTl5%e=tSp2lDjM_ij) z#m|tWI69H!BfU4aSX##LbEbv$wUF_X(VNGj#Vw9{n=~mo8*wO~iND?^07vm9KE&S< z%p0R_<)_)u*LVj*aePnFGEm;rM^F4!~i2p5=JKoR5dj*faohfvG=mFtWf}48$31mgWXkXE!iu=vWpy^inoWV`ilyqeaX(0!#NYs4!dp?(x^X);H;Ca{ zQ27^Upffc*_T*>K#FxfBr7y0HJ-7{pCIxpUIwwhfhJjm%n_TvG_J8Qi8sLl#oPti> zTisbFt$J|cba-PnYvr4egc=5ejSNI-xFfQ0HZp`aBfA$xMmM_R=FpbM^SCSw*Za6F zvayQSgFbad?Q5l;4dUJCzk|VwZi%YU=me|y1iSKKbZ4-O`=`ue(vEN)F2?WJ9)=3o z-@*i92%iRN?T$^|7@O{#vbkCelD6Xme3$JCy-`5#4v;-{j(cBByY{9GB|8OZB$aZZ z7T>LnY1W!LUO$E(P>F^xP$?H``3!YBQY=-s29Mi-D`QI4mLaV_22IMPEpqC(tVyvS zi#1kc$m#_41h^e|tx_&j>t=DKT&NaH)mQOZQ1i_(R_l+z-WJI+o6A+&F1O*rh{2yC zY|6pDcauBblvTuZb$;CPSH?JE6c1s4rCgX5jSAARD#mPGcsi!62QU&${hXXu`3GxN VM!*HDM!f(4002ovPDHLkV1j| literal 0 HcmV?d00001 diff --git a/assets/images/insta_logo.png b/assets/images/insta_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..07c6ef0631f8a7b878743ae7cd16faa33cf7c67e GIT binary patch literal 2227 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 BMnC`n literal 0 HcmV?d00001 diff --git a/assets/images/linkedin_logo.png b/assets/images/linkedin_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..b83090eee33775e3a4056db80a5ef7c22bb26b1a GIT binary patch literal 1360 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 DA0i>> literal 0 HcmV?d00001 diff --git a/assets/images/tier1.png b/assets/images/tier1.png new file mode 100644 index 0000000000000000000000000000000000000000..7d2c9bcd3bc7c490c65356c4f516aaf2607fd779 GIT binary patch literal 2761 zcmeHJYgAKL7Cy01kSflv@KC;=oSfK$S#K&AwV0)avXB99~kfrJnOJ!$*5YjxWBF+aN3y7%0D)>(Uf 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 literal 0 HcmV?d00001 diff --git a/assets/images/tier4.png b/assets/images/tier4.png new file mode 100644 index 0000000000000000000000000000000000000000..794e1af3c351e3404f77b3a1be91312221da1bd3 GIT binary patch literal 2834 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 literal 0 HcmV?d00001 diff --git a/assets/index-9868bc17.css b/assets/index-9868bc17.css deleted file mode 100644 index e0aa3cc..0000000 --- a/assets/index-9868bc17.css +++ /dev/null @@ -1 +0,0 @@ -*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Roboto,sans-serif;font-feature-settings:normal;font-variation-settings:normal}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}html{--tw-text-opacity: 1;color:rgb(38 38 38 / var(--tw-text-opacity))}html.dark{--tw-text-opacity: 1;color:rgb(250 250 250 / var(--tw-text-opacity));--tw-bg-opacity: 1;background-color:rgb(38 38 38 / var(--tw-bg-opacity))}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.container{width:100%}@media (min-width: 320px){.container{max-width:320px}}@media (min-width: 640px){.container{max-width:640px}}@media (min-width: 768px){.container{max-width:768px}}@media (min-width: 1024px){.container{max-width:1024px}}@media (min-width: 1280px){.container{max-width:1280px}}@media (min-width: 1450px){.container{max-width:1450px}}@media (min-width: 1536px){.container{max-width:1536px}}@media (min-width: 1760px){.container{max-width:1760px}}@media (min-width: 2200px){.container{max-width:2200px}}.pointer-events-none{pointer-events:none}.\!visible{visibility:visible!important}.visible{visibility:visible}.invisible{visibility:hidden}.collapse{visibility:collapse}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{inset:0px}.\!left-auto{left:auto!important}.\!top-auto{top:auto!important}.-bottom-\[47px\]{bottom:-47px}.-left-\[15px\]{left:-15px}.-top-2{top:-.5rem}.-top-\[21px\]{top:-21px}.-top-\[35px\]{top:-35px}.bottom-0{bottom:0px}.bottom-1\/2{bottom:50%}.bottom-\[2px\]{bottom:2px}.left-0{left:0px}.left-1\/2{left:50%}.left-2{left:.5rem}.left-20{left:5rem}.left-3{left:.75rem}.left-6{left:1.5rem}.left-\[calc\(50\%-1px\)\]{left:calc(50% - 1px)}.right-0{right:0px}.right-0\.5{right:.125rem}.right-1{right:.25rem}.right-1\.5{right:.375rem}.right-3{right:.75rem}.right-9{right:2.25rem}.right-\[2px\]{right:2px}.right-\[60px\]{right:60px}.top-0{top:0px}.top-1{top:.25rem}.top-1\/2{top:50%}.top-2{top:.5rem}.top-\[-400px\]{top:-400px}.top-\[11px\]{top:11px}.top-\[13px\]{top:13px}.top-\[35\%\]{top:35%}.top-\[57\%\]{top:57%}.top-\[80px\]{top:80px}.z-10{z-index:10}.z-50{z-index:50}.z-\[1040\]{z-index:1040}.z-\[1065\]{z-index:1065}.z-\[1066\]{z-index:1066}.z-\[1070\]{z-index:1070}.z-\[1080\]{z-index:1080}.z-\[49\]{z-index:49}.z-\[999\]{z-index:999}.col-span-2{grid-column:span 2 / span 2}.col-start-2{grid-column-start:2}.col-start-3{grid-column-start:3}.float-right{float:right}.float-left{float:left}.-m-5{margin:-1.25rem}.m-0{margin:0}.m-1{margin:.25rem}.m-10{margin:2.5rem}.m-2{margin:.5rem}.m-6{margin:1.5rem}.\!my-0{margin-top:0!important;margin-bottom:0!important}.-mx-4{margin-left:-1rem;margin-right:-1rem}.-my-3{margin-top:-.75rem;margin-bottom:-.75rem}.-my-6{margin-top:-1.5rem;margin-bottom:-1.5rem}.mx-0{margin-left:0;margin-right:0}.mx-20{margin-left:5rem;margin-right:5rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-5{margin-left:1.25rem;margin-right:1.25rem}.mx-auto{margin-left:auto;margin-right:auto}.my-0{margin-top:0;margin-bottom:0}.my-1{margin-top:.25rem;margin-bottom:.25rem}.my-10{margin-top:2.5rem;margin-bottom:2.5rem}.my-12{margin-top:3rem;margin-bottom:3rem}.my-2{margin-top:.5rem;margin-bottom:.5rem}.my-3{margin-top:.75rem;margin-bottom:.75rem}.my-4{margin-top:1rem;margin-bottom:1rem}.my-6{margin-top:1.5rem;margin-bottom:1.5rem}.my-8{margin-top:2rem;margin-bottom:2rem}.my-\[5px\]{margin-top:5px;margin-bottom:5px}.-mt-3{margin-top:-.75rem}.mb-0{margin-bottom:0}.mb-10{margin-bottom:2.5rem}.mb-12{margin-bottom:3rem}.mb-14{margin-bottom:3.5rem}.mb-2{margin-bottom:.5rem}.mb-2\.5{margin-bottom:.625rem}.mb-4{margin-bottom:1rem}.mb-5{margin-bottom:1.25rem}.mb-\[10px\]{margin-bottom:10px}.ml-0{margin-left:0}.ml-10{margin-left:2.5rem}.ml-2{margin-left:.5rem}.ml-6{margin-left:1.5rem}.ml-7{margin-left:1.75rem}.ml-\[30px\]{margin-left:30px}.ml-\[3px\]{margin-left:3px}.ml-auto{margin-left:auto}.mr-0{margin-right:0}.mr-10{margin-right:2.5rem}.mr-2{margin-right:.5rem}.mr-4{margin-right:1rem}.mr-6{margin-right:1.5rem}.mr-7{margin-right:1.75rem}.mr-\[8px\]{margin-right:8px}.mr-auto{margin-right:auto}.mt-0{margin-top:0}.mt-0\.5{margin-top:.125rem}.mt-10{margin-top:2.5rem}.mt-12{margin-top:3rem}.mt-14{margin-top:3.5rem}.mt-2{margin-top:.5rem}.mt-2\.5{margin-top:.625rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-\[0\.15rem\]{margin-top:.15rem}.box-border{box-sizing:border-box}.box-content{box-sizing:content-box}.\!block{display:block!important}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.table{display:table}.grid{display:grid}.contents{display:contents}.hidden{display:none}.\!h-0{height:0px!important}.h-0{height:0px}.h-1{height:.25rem}.h-1\.5{height:.375rem}.h-10{height:2.5rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-2{height:.5rem}.h-2\.5{height:.625rem}.h-2\/5{height:40%}.h-3{height:.75rem}.h-32{height:8rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[1\.125rem\]{height:1.125rem}.h-\[100\%\]{height:100%}.h-\[100px\]{height:100px}.h-\[120px\]{height:120px}.h-\[15px\]{height:15px}.h-\[160px\]{height:160px}.h-\[20\%\]{height:20%}.h-\[260px\]{height:260px}.h-\[30px\]{height:30px}.h-\[32px\]{height:32px}.h-\[380px\]{height:380px}.h-\[40px\]{height:40px}.h-\[42px\]{height:42px}.h-\[48px\]{height:48px}.h-\[4px\]{height:4px}.h-\[50\%\]{height:50%}.h-\[512px\]{height:512px}.h-\[56px\]{height:56px}.h-\[6px\]{height:6px}.h-\[72px\]{height:72px}.h-\[75\%\]{height:75%}.h-\[8rem\]{height:8rem}.h-auto{height:auto}.h-full{height:100%}.h-screen{height:100vh}.max-h-\[30px\]{max-height:30px}.max-h-\[40px\]{max-height:40px}.max-h-\[60px\]{max-height:60px}.max-h-\[80px\]{max-height:80px}.max-h-\[calc\(100\%-64px\)\]{max-height:calc(100% - 64px)}.max-h-full{max-height:100%}.min-h-\[305px\]{min-height:305px}.min-h-\[325px\]{min-height:325px}.min-h-\[auto\]{min-height:auto}.w-0{width:0px}.w-0\.5{width:.125rem}.w-1{width:.25rem}.w-1\.5{width:.375rem}.w-10{width:2.5rem}.w-16{width:4rem}.w-2{width:.5rem}.w-20{width:5rem}.w-24{width:6rem}.w-28{width:7rem}.w-3{width:.75rem}.w-32{width:8rem}.w-4{width:1rem}.w-40{width:10rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-7{width:1.75rem}.w-72{width:18rem}.w-9{width:2.25rem}.w-\[1\.125rem\]{width:1.125rem}.w-\[150px\]{width:150px}.w-\[15px\]{width:15px}.w-\[160px\]{width:160px}.w-\[260px\]{width:260px}.w-\[2px\]{width:2px}.w-\[304px\]{width:304px}.w-\[30px\]{width:30px}.w-\[328px\]{width:328px}.w-\[32px\]{width:32px}.w-\[40\%\]{width:40%}.w-\[40px\]{width:40px}.w-\[44px\]{width:44px}.w-\[48px\]{width:48px}.w-\[4px\]{width:4px}.w-\[6px\]{width:6px}.w-\[70\%\]{width:70%}.w-\[72px\]{width:72px}.w-\[76px\]{width:76px}.w-auto{width:auto}.w-full{width:100%}.w-screen{width:100vw}.min-w-0{min-width:0px}.min-w-\[100px\]{min-width:100px}.min-w-\[30px\]{min-width:30px}.min-w-\[310px\]{min-width:310px}.min-w-\[330px\]{min-width:330px}.min-w-\[48px\]{min-width:48px}.min-w-\[64px\]{min-width:64px}.max-w-\[100px\]{max-width:100px}.max-w-\[120px\]{max-width:120px}.max-w-\[130px\]{max-width:130px}.max-w-\[140px\]{max-width:140px}.max-w-\[160px\]{max-width:160px}.max-w-\[180px\]{max-width:180px}.max-w-\[1900px\]{max-width:1900px}.max-w-\[200px\]{max-width:200px}.max-w-\[267px\]{max-width:267px}.max-w-\[325px\]{max-width:325px}.max-w-\[700px\]{max-width:700px}.max-w-\[80px\]{max-width:80px}.max-w-\[90\%\]{max-width:90%}.max-w-\[990px\]{max-width:990px}.max-w-\[calc\(100\%-1rem\)\]{max-width:calc(100% - 1rem)}.max-w-full{max-width:100%}.flex-auto{flex:1 1 auto}.flex-shrink-0,.shrink-0{flex-shrink:0}.grow{flex-grow:1}.grow-0{flex-grow:0}.basis-auto{flex-basis:auto}.origin-\[0_0\]{transform-origin:0 0}.origin-\[center_bottom_0\]{transform-origin:center bottom 0}.-translate-x-1\/2{--tw-translate-x: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-\[12\.5\%\]{--tw-translate-x: -12.5%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-\[150\%\]{--tw-translate-x: -150%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-x-full{--tw-translate-x: -100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-\[0rem\]{--tw-translate-y: -0rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-\[150\%\]{--tw-translate-x: 150%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-full{--tw-translate-x: 100%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-y-1{--tw-translate-y: .25rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.rotate-180{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-0{--tw-scale-x: 0;--tw-scale-y: 0;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-100{--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-\[0\.8\]{--tw-scale-x: .8;--tw-scale-y: .8;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-\[1\.02\]{--tw-scale-x: 1.02;--tw-scale-y: 1.02;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.transform-none{transform:none}.animate-\[fade-in_0\.15s_both\]{animation:fade-in .15s both}.animate-\[fade-in_0\.3s_both\]{animation:fade-in .3s both}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.animate-\[fade-in_350ms_ease-in-out\]{animation:fade-in .35s ease-in-out}.animate-\[fade-out_0\.15s_both\]{animation:fade-out .15s both}.animate-\[fade-out_0\.3s_both\]{animation:fade-out .3s both}@keyframes fade-out{0%{opacity:1}to{opacity:0}}.animate-\[fade-out_350ms_ease-in-out\]{animation:fade-out .35s ease-in-out}@keyframes show-up-clock{0%{opacity:0;transform:scale(.7)}to{opacity:1;transform:scale(1)}}.animate-\[show-up-clock_350ms_linear\]{animation:show-up-clock .35s linear}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.touch-pan-y{--tw-pan-y: pan-y;touch-action:var(--tw-pan-x) var(--tw-pan-y) var(--tw-pinch-zoom)}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.select-all{-webkit-user-select:all;-moz-user-select:all;user-select:all}.resize{resize:both}.list-none{list-style-type:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-10{grid-template-columns:repeat(10,minmax(0,1fr))}.\!flex-row{flex-direction:row!important}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.flex-nowrap{flex-wrap:nowrap}.place-items-center{place-items:center}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.justify-around{justify-content:space-around}.justify-evenly{justify-content:space-evenly}.gap-16{gap:4rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-5{gap:1.25rem}.gap-7{gap:1.75rem}.gap-x-0{-moz-column-gap:0px;column-gap:0px}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-x-hidden{overflow-x:hidden}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.break-normal{overflow-wrap:normal;word-break:normal}.break-words{overflow-wrap:break-word}.rounded,.rounded-\[0\.25rem\]{border-radius:.25rem}.rounded-\[0\.6rem\]{border-radius:.6rem}.rounded-\[100\%\]{border-radius:100%}.rounded-\[10px\]{border-radius:10px}.rounded-\[16px\]{border-radius:16px}.rounded-\[50\%\]{border-radius:50%}.rounded-\[999px\]{border-radius:999px}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-none{border-radius:0}.rounded-xl{border-radius:.75rem}.rounded-b-lg{border-bottom-right-radius:.5rem;border-bottom-left-radius:.5rem}.rounded-l-\[0\.25rem\]{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-r-\[0\.25rem\]{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.rounded-t-\[0\.6rem\]{border-top-left-radius:.6rem;border-top-right-radius:.6rem}.rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.\!border-\[3px\]{border-width:3px!important}.border{border-width:1px}.border-0{border-width:0px}.border-\[\.125rem\],.border-\[0\.125rem\]{border-width:.125rem}.border-\[14px\]{border-width:14px}.border-b-2{border-bottom-width:2px}.border-l-0{border-left-width:0px}.border-l-\[0\.125rem\]{border-left-width:.125rem}.border-r-0{border-right-width:0px}.\!border-solid{border-style:solid!important}.border-solid{border-style:solid}.border-none{border-style:none}.\!border-\[\#b2b3b4\]{--tw-border-opacity: 1 !important;border-color:rgb(178 179 180 / var(--tw-border-opacity))!important}.border-\[\#3b71ca\]{--tw-border-opacity: 1;border-color:rgb(59 113 202 / var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity))}.border-neutral-100{--tw-border-opacity: 1;border-color:rgb(245 245 245 / var(--tw-border-opacity))}.border-neutral-200{--tw-border-opacity: 1;border-color:rgb(229 229 229 / var(--tw-border-opacity))}.border-neutral-300{--tw-border-opacity: 1;border-color:rgb(212 212 212 / var(--tw-border-opacity))}.border-primary{--tw-border-opacity: 1;border-color:rgb(59 113 202 / var(--tw-border-opacity))}.border-primary-400{--tw-border-opacity: 1;border-color:rgb(143 174 224 / var(--tw-border-opacity))}.border-transparent{border-color:transparent}.border-white{--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity))}.border-t-transparent{border-top-color:transparent}.\!bg-\[\#858585\]{--tw-bg-opacity: 1 !important;background-color:rgb(133 133 133 / var(--tw-bg-opacity))!important}.\!bg-danger-100{--tw-bg-opacity: 1 !important;background-color:rgb(250 229 233 / var(--tw-bg-opacity))!important}.\!bg-primary-100{--tw-bg-opacity: 1 !important;background-color:rgb(227 235 247 / var(--tw-bg-opacity))!important}.\!bg-success-100{--tw-bg-opacity: 1 !important;background-color:rgb(214 250 228 / var(--tw-bg-opacity))!important}.bg-\[\#00000012\]{background-color:#00000012}.bg-\[\#00000066\]{background-color:#0006}.bg-\[\#1313130\]{background-color:#1313130}.bg-\[\#1E1E1E\]{--tw-bg-opacity: 1;background-color:rgb(30 30 30 / var(--tw-bg-opacity))}.bg-\[\#2E2E2E\]{--tw-bg-opacity: 1;background-color:rgb(46 46 46 / var(--tw-bg-opacity))}.bg-\[\#3b71ca\]{--tw-bg-opacity: 1;background-color:rgb(59 113 202 / var(--tw-bg-opacity))}.bg-\[\#555555\]{--tw-bg-opacity: 1;background-color:rgb(85 85 85 / var(--tw-bg-opacity))}.bg-\[\#6460ff\]{--tw-bg-opacity: 1;background-color:rgb(100 96 255 / var(--tw-bg-opacity))}.bg-\[\#68ACB0\]{--tw-bg-opacity: 1;background-color:rgb(104 172 176 / var(--tw-bg-opacity))}.bg-\[\#6d6d6d\]{--tw-bg-opacity: 1;background-color:rgb(109 109 109 / var(--tw-bg-opacity))}.bg-\[\#9E9E9E\]{--tw-bg-opacity: 1;background-color:rgb(158 158 158 / var(--tw-bg-opacity))}.bg-\[\#BABABA\]{--tw-bg-opacity: 1;background-color:rgb(186 186 186 / var(--tw-bg-opacity))}.bg-\[\#BE9BE5\]{--tw-bg-opacity: 1;background-color:rgb(190 155 229 / var(--tw-bg-opacity))}.bg-\[\#DA77D6\]{--tw-bg-opacity: 1;background-color:rgb(218 119 214 / var(--tw-bg-opacity))}.bg-\[\#aaa\]{--tw-bg-opacity: 1;background-color:rgb(170 170 170 / var(--tw-bg-opacity))}.bg-\[\#eceff1\]{--tw-bg-opacity: 1;background-color:rgb(236 239 241 / var(--tw-bg-opacity))}.bg-\[\#ffffff\]{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.bg-black{--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity))}.bg-black\/10{background-color:#0000001a}.bg-black\/40{background-color:#0006}.bg-primary{--tw-bg-opacity: 1;background-color:rgb(59 113 202 / var(--tw-bg-opacity))}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.bg-white\/30{background-color:#ffffff4d}.bg-zinc-500{--tw-bg-opacity: 1;background-color:rgb(113 113 122 / var(--tw-bg-opacity))}.bg-zinc-600{--tw-bg-opacity: 1;background-color:rgb(82 82 91 / var(--tw-bg-opacity))}.bg-zinc-600\/50{background-color:#52525b80}.bg-zinc-700{--tw-bg-opacity: 1;background-color:rgb(63 63 70 / var(--tw-bg-opacity))}.bg-\[url\(\'\/assets\/footer\.png\'\)\]{background-image:url(/assets/footer-5a07628a.png)}.bg-cover{background-size:cover}.bg-clip-padding{background-clip:padding-box}.fill-\[\#afafaf\]{fill:#afafaf}.fill-white{fill:#fff}.p-0{padding:0}.p-2{padding:.5rem}.p-2\.5{padding:.625rem}.p-4{padding:1rem}.p-\[5px\]{padding:5px}.p-\[auto\]{padding:auto}.\!py-0{padding-top:0!important;padding-bottom:0!important}.px-0{padding-left:0;padding-right:0}.px-0\.5{padding-left:.125rem;padding-right:.125rem}.px-10{padding-left:2.5rem;padding-right:2.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-8{padding-left:2rem;padding-right:2rem}.px-\[0\.4rem\]{padding-left:.4rem;padding-right:.4rem}.px-\[10px\]{padding-left:10px;padding-right:10px}.px-\[12px\]{padding-left:12px;padding-right:12px}.px-\[auto\]{padding-left:auto;padding-right:auto}.py-0{padding-top:0;padding-bottom:0}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-32{padding-top:8rem;padding-bottom:8rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.py-8{padding-top:2rem;padding-bottom:2rem}.py-\[0\.32rem\]{padding-top:.32rem;padding-bottom:.32rem}.py-\[0\.33rem\]{padding-top:.33rem;padding-bottom:.33rem}.py-\[0\.4rem\]{padding-top:.4rem;padding-bottom:.4rem}.py-\[10px\]{padding-top:10px;padding-bottom:10px}.py-\[1px\]{padding-top:1px;padding-bottom:1px}.py-\[5px\]{padding-top:5px;padding-bottom:5px}.pb-0{padding-bottom:0}.pb-10{padding-bottom:2.5rem}.pb-2{padding-bottom:.5rem}.pb-3{padding-bottom:.75rem}.pb-3\.5{padding-bottom:.875rem}.pl-0{padding-left:0}.pl-2{padding-left:.5rem}.pl-7{padding-left:1.75rem}.pl-8{padding-left:2rem}.pl-\[50px\]{padding-left:50px}.pl-\[8px\]{padding-left:8px}.pr-2{padding-right:.5rem}.pr-\[24px\]{padding-right:24px}.pt-0{padding-top:0}.pt-10{padding-top:2.5rem}.pt-2{padding-top:.5rem}.pt-2\.5{padding-top:.625rem}.pt-4{padding-top:1rem}.pt-\[0\.37rem\]{padding-top:.37rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-middle{vertical-align:middle}.align-bottom{vertical-align:bottom}.font-sans{font-family:Roboto,sans-serif}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-\[0\.8rem\]{font-size:.8rem}.text-\[0\.9rem\]{font-size:.9rem}.text-\[1\.1rem\]{font-size:1.1rem}.text-\[10px\]{font-size:10px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.text-\[15px\]{font-size:15px}.text-\[16px\]{font-size:16px}.text-\[18px\]{font-size:18px}.text-\[2\.5rem\]{font-size:2.5rem}.text-\[3\.75rem\]{font-size:3.75rem}.text-\[34px\]{font-size:34px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-light{font-weight:300}.font-medium{font-weight:500}.font-normal{font-weight:400}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.normal-case{text-transform:none}.italic{font-style:italic}.not-italic{font-style:normal}.leading-10{line-height:2.5rem}.leading-6{line-height:1.5rem}.leading-9{line-height:2.25rem}.leading-\[1\.2\]{line-height:1.2}.leading-\[1\.5\]{line-height:1.5}.leading-\[1\.6\]{line-height:1.6}.leading-\[2\.15\]{line-height:2.15}.leading-\[40px\]{line-height:40px}.leading-loose{line-height:2}.leading-normal{line-height:1.5}.leading-tight{line-height:1.25}.tracking-\[-0\.00833em\]{letter-spacing:-.00833em}.tracking-\[\.1rem\],.tracking-\[0\.1rem\]{letter-spacing:.1rem}.tracking-\[1\.7px\]{letter-spacing:1.7px}.tracking-normal{letter-spacing:0em}.tracking-wider{letter-spacing:.05em}.\!text-danger-700{--tw-text-opacity: 1 !important;color:rgb(176 35 58 / var(--tw-text-opacity))!important}.\!text-gray-50{--tw-text-opacity: 1 !important;color:rgb(249 250 251 / var(--tw-text-opacity))!important}.\!text-primary{--tw-text-opacity: 1 !important;color:rgb(59 113 202 / var(--tw-text-opacity))!important}.\!text-primary-700{--tw-text-opacity: 1 !important;color:rgb(40 81 146 / var(--tw-text-opacity))!important}.\!text-success-700{--tw-text-opacity: 1 !important;color:rgb(14 117 55 / var(--tw-text-opacity))!important}.\!text-white{--tw-text-opacity: 1 !important;color:rgb(255 255 255 / var(--tw-text-opacity))!important}.text-\[\#00FFDF\]{--tw-text-opacity: 1;color:rgb(0 255 223 / var(--tw-text-opacity))}.text-\[\#1E1E1E\]{--tw-text-opacity: 1;color:rgb(30 30 30 / var(--tw-text-opacity))}.text-\[\#212529\]{--tw-text-opacity: 1;color:rgb(33 37 41 / var(--tw-text-opacity))}.text-\[\#3173b7\]{--tw-text-opacity: 1;color:rgb(49 115 183 / var(--tw-text-opacity))}.text-\[\#3b71ca\]{--tw-text-opacity: 1;color:rgb(59 113 202 / var(--tw-text-opacity))}.text-\[\#4f4f4f\]{--tw-text-opacity: 1;color:rgb(79 79 79 / var(--tw-text-opacity))}.text-\[\#6460ff\]{--tw-text-opacity: 1;color:rgb(100 96 255 / var(--tw-text-opacity))}.text-\[\#68ACB0\]{--tw-text-opacity: 1;color:rgb(104 172 176 / var(--tw-text-opacity))}.text-\[\#78BEFF\]{--tw-text-opacity: 1;color:rgb(120 190 255 / var(--tw-text-opacity))}.text-\[\#9E9E9E\]{--tw-text-opacity: 1;color:rgb(158 158 158 / var(--tw-text-opacity))}.text-\[\#BABABA\]{--tw-text-opacity: 1;color:rgb(186 186 186 / var(--tw-text-opacity))}.text-\[\#BC81FF\]{--tw-text-opacity: 1;color:rgb(188 129 255 / var(--tw-text-opacity))}.text-\[\#BE9BE5\]{--tw-text-opacity: 1;color:rgb(190 155 229 / var(--tw-text-opacity))}.text-\[\#BEBEBE\]{--tw-text-opacity: 1;color:rgb(190 190 190 / var(--tw-text-opacity))}.text-\[\#D6D6D6\]{--tw-text-opacity: 1;color:rgb(214 214 214 / var(--tw-text-opacity))}.text-\[\#D9D9D9\]{--tw-text-opacity: 1;color:rgb(217 217 217 / var(--tw-text-opacity))}.text-\[\#DA77D6\]{--tw-text-opacity: 1;color:rgb(218 119 214 / var(--tw-text-opacity))}.text-\[\#E5B567\]{--tw-text-opacity: 1;color:rgb(229 181 103 / var(--tw-text-opacity))}.text-\[\#FF6D75\]{--tw-text-opacity: 1;color:rgb(255 109 117 / var(--tw-text-opacity))}.text-\[\#FFC977\]{--tw-text-opacity: 1;color:rgb(255 201 119 / var(--tw-text-opacity))}.text-\[\#FFFFFF\]{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.text-\[\#b3afaf\]{--tw-text-opacity: 1;color:rgb(179 175 175 / var(--tw-text-opacity))}.text-\[\#f74b03\]{--tw-text-opacity: 1;color:rgb(247 75 3 / var(--tw-text-opacity))}.text-\[\#ffdc20\]{--tw-text-opacity: 1;color:rgb(255 220 32 / var(--tw-text-opacity))}.text-\[\#ffffff8a\]{color:#ffffff8a}.text-\[\#ffffff\]{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.text-\[\]{color:}.text-\[rgb\(220\,76\,100\)\]{--tw-text-opacity: 1;color:rgb(220 76 100 / var(--tw-text-opacity))}.text-black{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity))}.text-black\/50{color:#00000080}.text-black\/\[64\]{color:#000}.text-blue-600{--tw-text-opacity: 1;color:rgb(37 99 235 / var(--tw-text-opacity))}.text-gray-200{--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity))}.text-gray-300{--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity))}.text-gray-50{--tw-text-opacity: 1;color:rgb(249 250 251 / var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity))}.text-green-600{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity))}.text-neutral-500{--tw-text-opacity: 1;color:rgb(115 115 115 / var(--tw-text-opacity))}.text-primary{--tw-text-opacity: 1;color:rgb(59 113 202 / var(--tw-text-opacity))}.text-red-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.underline{text-decoration-line:underline}.no-underline{text-decoration-line:none}.underline-offset-auto{text-underline-offset:auto}.\!opacity-0{opacity:0!important}.\!opacity-100{opacity:1!important}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-50{opacity:.5}.opacity-\[\.53\]{opacity:.53}.opacity-\[\.54\]{opacity:.54}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0px_3px_0_rgba\(0\,0\,0\,0\.07\)\,0_2px_2px_0_rgba\(0\,0\,0\,0\.04\)\]{--tw-shadow: 0 0px 3px 0 rgba(0,0,0,.07),0 2px 2px 0 rgba(0,0,0,.04);--tw-shadow-colored: 0 0px 3px 0 var(--tw-shadow-color), 0 2px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_10px_15px_-3px_rgba\(0\,0\,0\,0\.07\)\,0_4px_6px_-2px_rgba\(0\,0\,0\,0\.05\)\]{--tw-shadow: 0 10px 15px -3px rgba(0,0,0,.07),0 4px 6px -2px rgba(0,0,0,.05);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_2px_5px_0_rgba\(0\,0\,0\,0\.16\)\,_0_2px_10px_0_rgba\(0\,0\,0\,0\.12\)\]{--tw-shadow: 0 2px 5px 0 rgba(0,0,0,.16), 0 2px 10px 0 rgba(0,0,0,.12);--tw-shadow-colored: 0 2px 5px 0 var(--tw-shadow-color), 0 2px 10px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0px_2px_15px_-3px_rgba\(0\,0\,0\,\.07\)\,_0px_10px_20px_-2px_rgba\(0\,0\,0\,\.04\)\]{--tw-shadow: 0px 2px 15px -3px rgba(0,0,0,.07), 0px 10px 20px -2px rgba(0,0,0,.04);--tw-shadow-colored: 0px 2px 15px -3px var(--tw-shadow-color), 0px 10px 20px -2px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-none{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline-none{outline:2px solid transparent;outline-offset:2px}.outline{outline-style:solid}.blur{--tw-blur: blur(8px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.brightness-0{--tw-brightness: brightness(0);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.invert-\[1\]{--tw-invert: invert(1);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[background-color\,box-shadow\,border\]{transition-property:background-color,box-shadow,border;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[height\]{transition-property:height;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[opacity\]{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[transform\,_opacity\]{transition-property:transform,opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[transform\,height\]{transition-property:transform,height;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\]{transition-property:width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.delay-\[0ms\]{transition-delay:0ms}.duration-150{transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}.duration-\[250ms\]{transition-duration:.25s}.duration-\[350ms\]{transition-duration:.35s}.duration-\[400ms\]{transition-duration:.4s}.ease-\[cubic-bezier\(0\,0\,0\.15\,1\)\,_cubic-bezier\(0\,0\,0\.15\,1\)\]{transition-timing-function:cubic-bezier(0,0,.15,1),cubic-bezier(0,0,.15,1)}.ease-\[cubic-bezier\(0\.25\,0\.1\,0\.25\,1\)\],.ease-\[cubic-bezier\(0\.25\,0\.1\,0\.25\,1\.0\)\]{transition-timing-function:cubic-bezier(.25,.1,.25,1)}.ease-\[cubic-bezier\(0\.4\,0\,0\.2\,1\)\]{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-\[ease\]{transition-timing-function:ease}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-linear{transition-timing-function:linear}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.\[direction\:ltr\]{direction:ltr}.\[overflow-anchor\:none\]{overflow-anchor:none}.\[overflow-style\:none\]{overflow-style:none}.\[transition\:background-color_\.2s_linear\,_height_\.2s_ease-in-out\]{transition:background-color .2s linear,height .2s ease-in-out}.\[transition\:background-color_\.2s_linear\,_opacity_\.2s_linear\]{transition:background-color .2s linear,opacity .2s linear}.\[transition\:background-color_\.2s_linear\,_width_\.2s_ease-in-out\]{transition:background-color .2s linear,width .2s ease-in-out}.\[transition\:background-color_250ms_cubic-bezier\(0\.4\,0\,0\.2\,1\)_0ms\,box-shadow_250ms_cubic-bezier\(0\.4\,0\,0\.2\,1\)_0ms\,border_250ms_cubic-bezier\(0\.4\,0\,0\.2\,1\)_0ms\]{transition:background-color .25s cubic-bezier(.4,0,.2,1) 0ms,box-shadow .25s cubic-bezier(.4,0,.2,1) 0ms,border .25s cubic-bezier(.4,0,.2,1) 0ms}:root{--ti-cursor-color: white}body{font-family:VT323,monospace;color:#fff}*{scroll-behavior:smooth!important}#preloader{position:fixed;width:100%;height:100vh;background:#1e1e1e;z-index:99999999}#loadingImage{animation-delay:0ms;transition-delay:0ms;height:35vh;align-items:center;justify-content:center;align-content:center;display:block;margin-top:7rem;margin-left:auto;margin-right:auto}#loadingText{font-size:2.5rem;text-align:center;justify-content:center;align-content:center;display:block;margin-top:5rem;margin-left:auto;margin-right:auto}@media only screen and (max-width: 37.5rem){#preloader{width:100%;height:100vh}#loadingText{display:inline-block;font-size:1.5rem;width:100%;height:100vh;margin:20px auto auto;text-align:center}#loadingImage{height:35vh;align-content:center}}.timeline-wrapper,.d_contents{overflow:hidden}.challenges-body{background-color:#1e1e1e;margin:0}.statuscodelogo{padding-top:1.25rem;padding-bottom:1.25rem;margin-left:4rem;width:9rem}.challenges-text{color:#6e6a6e;display:inline-block;transform:scaleX(1.4);left:5.7rem;position:absolute;top:5rem;font-size:1.6rem}.platform{position:absolute;width:100vw;top:-26vh;left:0vw;z-index:-1;height:126vh}.card_border1{position:absolute;width:12vw;top:70.5vh;left:75vw;height:15vh}.card_border2{position:absolute;width:11vw;top:80.4vh;left:19.7vw;height:15vh}.card_border3{position:absolute;width:12vw;top:15vh;left:16.5vw;height:15vh}.card_border4{position:absolute;width:11vw;top:.5vh;left:60vw;height:15vh}.card1text{position:absolute;top:70vh;left:75vw;width:12vw;display:flex;flex-direction:column;align-items:center;height:15vh}.card1heading1{font-family:VT323,monospace;margin:0;font-size:1.8vmin;margin-top:3vh;margin-bottom:.4vh}.card1heading2{margin:0;font-family:VT323,monospace;font-size:2.6vmin;margin-bottom:1.5vh}.card1Button{width:6vw}.card2text{position:absolute;top:83vh;left:19.3vw;width:12vw;display:flex;flex-direction:column;align-items:center;height:13.5vh}.card2heading1{font-family:VT323,monospace;margin:0;font-size:1.8vmin;margin-bottom:.4vh}.card2heading2{margin:0;font-family:VT323,monospace;font-size:2.6vmin;margin-bottom:1.5vh;transform:scaleX(.86)}.card2Button{width:6vw}.card3text{width:12vw;display:flex;flex-direction:column;align-items:center;position:absolute;left:16.5vw;top:14.5vh;height:14.9vh}.card3heading1{font-family:VT323,monospace;margin:0;font-size:1.8vmin;margin-bottom:.4vh;margin-top:3vh}.card3heading2{margin:0;font-family:VT323,monospace;font-size:2.6vmin;margin-bottom:1.5vh}.card3Button{width:6vw}.card4text{width:11vw;display:flex;flex-direction:column;align-items:center;position:absolute;top:1vh;left:60vw;height:13.3vh}.card4heading1{font-family:VT323,monospace;margin:0;font-size:1.8vmin;margin-bottom:.4vh;margin-top:2vh}.card4heading2{margin:0;font-family:VT323,monospace;font-size:2.6vmin;margin-bottom:1.5vh}.card4Button{width:6vw}.roller1{top:36vh;position:absolute;left:12.9vw;width:15vw;height:28vh}.roller2{width:8vw;position:absolute;top:85.3vh;left:92vw;height:14.7vh}.roller3{position:absolute;top:6vh;width:15vw;left:70.3vw;height:28vh}.box{width:4vw}.box_group_1{position:absolute;top:37.7vh;left:50vw;display:flex}.box_group_2{position:absolute;top:63vh;left:45vw;display:flex}.box3{width:4vw;top:44vh;position:absolute;left:81vw}.box4{width:4vw;position:absolute;top:25vh;left:88vw}.skull1{position:absolute;top:75vh;left:4vw;width:3vw}.skull2{position:absolute;width:3vw;top:9vh;left:94vw}.home-button{font-size:7vmin;text-decoration:none;color:#6e6a6e;top:2.5vh;position:absolute;left:88.7vw}.home-button:hover{color:#e5e7eb}.card1heading2,.card2heading2,.card3heading2,.card4heading2{text-align:center}.card1ButtonHidden{display:none}@media (max-width: 450px){.platform,.skull1,.skull2,.roller1,.roller2,.roller3,.box_group_1,.box_group_2,.box3,.box4{opacity:0}.card_border1{position:absolute;width:53vw;top:20.5vh;left:23vw}.card1text{position:absolute;top:20.7vh;left:23vw;width:53vw}.card1heading1{position:relative;font-family:VT323,monospace;margin:0;top:0;font-size:4.5vmin;left:0;margin-bottom:1vh;margin-top:2vh}.card1heading2{margin:0;position:relative;top:0;font-family:VT323,monospace;left:0;font-size:5.1vmin;margin-bottom:1vh}.card1Button{position:relative;left:0;top:0;width:27vw}.card_border2{position:absolute;width:53vw;top:39.4vh;left:23vw}.card2text{position:absolute;top:41.7vh;z-index:2;display:flex;flex-direction:column;align-items:center;width:53vw;left:22.8vw}.card2heading1{position:relative;font-family:VT323,monospace;margin:0;font-size:4.1vmin;top:0;left:0;margin-bottom:1vh}.card2heading2{margin:0;position:relative;font-family:VT323,monospace;font-size:5.5vmin;top:0;left:0}.card2Button{position:relative;top:1vh;left:0;width:27vw}.card_border3{position:absolute;width:53vw;top:58vh;left:23vw}.card3text{width:39.5vw;display:flex;flex-direction:column;align-items:center;position:absolute;left:30.3vw;top:60.5vh}.card3heading1{font-family:VT323,monospace;margin:0;font-size:4.1vmin;margin-bottom:1vh}.card3heading2{margin:0;font-family:VT323,monospace;font-size:5.5vmin;margin-bottom:1vh}.card3Button,.card4Button{width:27vw}.card_border4{position:absolute;width:53vw;top:76.5vh;left:23vw}.card4text{width:47.6vw;display:flex;flex-direction:column;align-items:center;position:absolute;top:79vh;left:26.3vw}.card4heading1{font-family:VT323,monospace;margin:0;font-size:4.1vmin;margin-bottom:.8vh}.card4heading2{margin:0;font-family:VT323,monospace;font-size:5.5vmin;margin-bottom:1.2vh}.statuscodelogo{padding-top:1.25rem;padding-bottom:1.25rem;margin-left:7vw;width:9rem}.home-button{font-size:17vmin;text-decoration:none;color:#6e6a6e;top:4vh;position:absolute;left:63.7vw}.challenges-text{color:#6e6a6e;display:inline-block;transform:scaleX(1.4);left:14vw;position:absolute;top:5rem;font-size:1.6rem}}@media (min-width: 450px) and (max-width: 768px){.platform,.skull1,.skull2,.roller1,.roller2,.roller3,.box_group_1,.box_group_2,.box3,.box4{opacity:0}.card_border1{position:absolute;width:53vw;top:20.5vh;left:23vw}.card1text{position:absolute;top:20.5vh;left:23vw;width:53vw}.card1heading1{position:relative;font-family:VT323,monospace;margin:0;top:0;font-size:3.5vmin;left:0;margin-bottom:1vh;margin-top:3vh}.card1heading2{margin:0;position:relative;top:0;font-family:VT323,monospace;left:0;font-size:4.1vmin;margin-bottom:1vh}.card1Button{position:relative;left:0;top:0;width:27vw}.card_border2{position:absolute;width:53vw;top:39.4vh;left:23vw}.card2text{position:absolute;top:41.7vh;z-index:2;display:flex;flex-direction:column;align-items:center;width:53vw;left:22.8vw}.card2heading1{position:relative;font-family:VT323,monospace;margin:0;font-size:3.1vmin;top:0;left:0;margin-bottom:1vh}.card2heading2{margin:0;position:relative;font-family:VT323,monospace;font-size:4.5vmin;top:0;left:0;margin-bottom:.5vh}.card2Button{position:relative;top:1vh;left:0;width:27vw}.card_border3{position:absolute;width:53vw;top:58vh;left:23vw}.card3text{width:39.5vw;display:flex;flex-direction:column;align-items:center;position:absolute;left:30.3vw;top:60.5vh}.card3heading1{font-family:VT323,monospace;margin:0;font-size:3.1vmin;margin-bottom:1vh}.card3heading2{margin:0;font-family:VT323,monospace;font-size:4.5vmin;margin-bottom:1vh}.card3Button,.card4Button{width:27vw}.card_border4{position:absolute;width:53vw;top:76.5vh;left:23vw}.card4text{width:47.6vw;display:flex;flex-direction:column;align-items:center;position:absolute;top:79vh;left:26.3vw}.card4heading1{font-family:VT323,monospace;margin:0;font-size:3.1vmin;margin-bottom:.8vh}.card4heading2{margin:0;font-family:VT323,monospace;font-size:4.5vmin;margin-bottom:1.2vh}.statuscodelogo{padding-top:1.25rem;padding-bottom:1.25rem;margin-left:7vw;width:9rem}.home-button{font-size:5rem;text-decoration:none;color:#6e6a6e;top:3vh;position:absolute;left:71.7vw}.challenges-text{color:#6e6a6e;display:inline-block;transform:scaleX(1.4);left:11vw;position:absolute;top:5rem;font-size:1.6rem}}.selection\:bg-transparent *::-moz-selection{background-color:transparent}.selection\:bg-transparent *::selection{background-color:transparent}.selection\:bg-transparent::-moz-selection{background-color:transparent}.selection\:bg-transparent::selection{background-color:transparent}.before\:pointer-events-none:before{content:var(--tw-content);pointer-events:none}.before\:absolute:before{content:var(--tw-content);position:absolute}.before\:h-\[0\.875rem\]:before{content:var(--tw-content);height:.875rem}.before\:w-\[0\.875rem\]:before{content:var(--tw-content);width:.875rem}.before\:scale-0:before{content:var(--tw-content);--tw-scale-x: 0;--tw-scale-y: 0;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.before\:rounded-full:before{content:var(--tw-content);border-radius:9999px}.before\:bg-transparent:before{content:var(--tw-content);background-color:transparent}.before\:opacity-0:before{content:var(--tw-content);opacity:0}.before\:shadow-\[0px_0px_0px_13px_transparent\]:before{content:var(--tw-content);--tw-shadow: 0px 0px 0px 13px transparent;--tw-shadow-colored: 0px 0px 0px 13px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.before\:content-\[\'\'\]:before{--tw-content: "";content:var(--tw-content)}.checked\:border-primary:checked{--tw-border-opacity: 1;border-color:rgb(59 113 202 / var(--tw-border-opacity))}.checked\:bg-primary:checked{--tw-bg-opacity: 1;background-color:rgb(59 113 202 / var(--tw-bg-opacity))}.checked\:before\:opacity-\[0\.16\]:checked:before{content:var(--tw-content);opacity:.16}.checked\:after\:absolute:checked:after{content:var(--tw-content);position:absolute}.checked\:after\:-mt-px:checked:after{content:var(--tw-content);margin-top:-1px}.checked\:after\:ml-\[0\.25rem\]:checked:after{content:var(--tw-content);margin-left:.25rem}.checked\:after\:block:checked:after{content:var(--tw-content);display:block}.checked\:after\:h-\[0\.8125rem\]:checked:after{content:var(--tw-content);height:.8125rem}.checked\:after\:w-\[0\.375rem\]:checked:after{content:var(--tw-content);width:.375rem}.checked\:after\:rotate-45:checked:after{content:var(--tw-content);--tw-rotate: 45deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.checked\:after\:border-\[0\.125rem\]:checked:after{content:var(--tw-content);border-width:.125rem}.checked\:after\:border-l-0:checked:after{content:var(--tw-content);border-left-width:0px}.checked\:after\:border-t-0:checked:after{content:var(--tw-content);border-top-width:0px}.checked\:after\:border-solid:checked:after{content:var(--tw-content);border-style:solid}.checked\:after\:border-white:checked:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity))}.checked\:after\:bg-transparent:checked:after{content:var(--tw-content);background-color:transparent}.checked\:after\:content-\[\'\'\]:checked:after{--tw-content: "";content:var(--tw-content)}.empty\:hidden:empty{display:none}.hover\:z-\[2\]:hover{z-index:2}.hover\:cursor-pointer:hover{cursor:pointer}.hover\:rounded-\[50\%\]:hover{border-radius:50%}.hover\:bg-\[\#00000014\]:hover{background-color:#00000014}.hover\:bg-\[\#00000026\]:hover{background-color:#00000026}.hover\:bg-\[\#eee\]:hover{--tw-bg-opacity: 1;background-color:rgb(238 238 238 / var(--tw-bg-opacity))}.hover\:bg-\[unset\]:hover{background-color:unset}.hover\:bg-neutral-200:hover{--tw-bg-opacity: 1;background-color:rgb(229 229 229 / var(--tw-bg-opacity))}.hover\:fill-\[\#8b8b8b\]:hover{fill:#8b8b8b}.hover\:text-\[\#3b71ca\]:hover{--tw-text-opacity: 1;color:rgb(59 113 202 / var(--tw-text-opacity))}.hover\:text-\[\#8b8b8b\]:hover{--tw-text-opacity: 1;color:rgb(139 139 139 / var(--tw-text-opacity))}.hover\:text-blue-500:hover{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity))}.hover\:text-primary:hover{--tw-text-opacity: 1;color:rgb(59 113 202 / var(--tw-text-opacity))}.hover\:text-white:hover{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.hover\:\!opacity-90:hover{opacity:.9!important}.hover\:opacity-100:hover{opacity:1}.hover\:\!shadow-none:hover{--tw-shadow: 0 0 #0000 !important;--tw-shadow-colored: 0 0 #0000 !important;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)!important}.hover\:outline-none:hover{outline:2px solid transparent;outline-offset:2px}.hover\:filter-none:hover{filter:none}.hover\:before\:opacity-\[0\.04\]:hover:before{content:var(--tw-content);opacity:.04}.hover\:before\:shadow-\[0px_0px_0px_13px_rgba\(0\,0\,0\,0\.6\)\]:hover:before{content:var(--tw-content);--tw-shadow: 0px 0px 0px 13px rgba(0,0,0,.6);--tw-shadow-colored: 0px 0px 0px 13px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.focus\:z-\[3\]:focus{z-index:3}.focus\:rounded-\[50\%\]:focus{border-radius:50%}.focus\:border-primary:focus{--tw-border-opacity: 1;border-color:rgb(59 113 202 / var(--tw-border-opacity))}.focus\:bg-\[\#00000014\]:focus{background-color:#00000014}.focus\:bg-\[\#00000026\]:focus{background-color:#00000026}.focus\:bg-\[\#eee\]:focus{--tw-bg-opacity: 1;background-color:rgb(238 238 238 / var(--tw-bg-opacity))}.focus\:bg-neutral-200:focus{--tw-bg-opacity: 1;background-color:rgb(229 229 229 / var(--tw-bg-opacity))}.focus\:text-\[\#3b71ca\]:focus{--tw-text-opacity: 1;color:rgb(59 113 202 / var(--tw-text-opacity))}.focus\:text-gray-700:focus{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity))}.focus\:text-primary:focus{--tw-text-opacity: 1;color:rgb(59 113 202 / var(--tw-text-opacity))}.focus\:\!opacity-90:focus{opacity:.9!important}.focus\:shadow-none:focus{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.focus\:shadow-te-primary:focus{--tw-shadow: 0 0 0 1px rgb(59, 113, 202);--tw-shadow-colored: 0 0 0 1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:transition-\[border-color_0\.2s\]:focus{transition-property:border-color .2s;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.focus\:placeholder\:opacity-100:focus::-moz-placeholder{opacity:1}.focus\:placeholder\:opacity-100:focus::placeholder{opacity:1}.focus\:before\:scale-100:focus:before{content:var(--tw-content);--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.focus\:before\:opacity-\[0\.12\]:focus:before{content:var(--tw-content);opacity:.12}.focus\:before\:shadow-\[0px_0px_0px_13px_rgba\(0\,0\,0\,0\.6\)\]:focus:before{content:var(--tw-content);--tw-shadow: 0px 0px 0px 13px rgba(0,0,0,.6);--tw-shadow-colored: 0px 0px 0px 13px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.focus\:before\:transition-\[box-shadow_0\.2s\,transform_0\.2s\]:focus:before{content:var(--tw-content);transition-property:box-shadow .2s,transform .2s;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.focus\:after\:absolute:focus:after{content:var(--tw-content);position:absolute}.focus\:after\:z-\[1\]:focus:after{content:var(--tw-content);z-index:1}.focus\:after\:block:focus:after{content:var(--tw-content);display:block}.focus\:after\:h-\[0\.875rem\]:focus:after{content:var(--tw-content);height:.875rem}.focus\:after\:w-\[0\.875rem\]:focus:after{content:var(--tw-content);width:.875rem}.focus\:after\:rounded-\[0\.125rem\]:focus:after{content:var(--tw-content);border-radius:.125rem}.focus\:after\:content-\[\'\'\]:focus:after{--tw-content: "";content:var(--tw-content)}.checked\:focus\:before\:scale-100:focus:checked:before{content:var(--tw-content);--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.checked\:focus\:before\:shadow-\[0px_0px_0px_13px_\#3b71ca\]:focus:checked:before{content:var(--tw-content);--tw-shadow: 0px 0px 0px 13px #3b71ca;--tw-shadow-colored: 0px 0px 0px 13px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.checked\:focus\:before\:transition-\[box-shadow_0\.2s\,transform_0\.2s\]:focus:checked:before{content:var(--tw-content);transition-property:box-shadow .2s,transform .2s;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.checked\:focus\:after\:-mt-px:focus:checked:after{content:var(--tw-content);margin-top:-1px}.checked\:focus\:after\:ml-\[0\.25rem\]:focus:checked:after{content:var(--tw-content);margin-left:.25rem}.checked\:focus\:after\:h-\[0\.8125rem\]:focus:checked:after{content:var(--tw-content);height:.8125rem}.checked\:focus\:after\:w-\[0\.375rem\]:focus:checked:after{content:var(--tw-content);width:.375rem}.checked\:focus\:after\:rotate-45:focus:checked:after{content:var(--tw-content);--tw-rotate: 45deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.checked\:focus\:after\:rounded-none:focus:checked:after{content:var(--tw-content);border-radius:0}.checked\:focus\:after\:border-\[0\.125rem\]:focus:checked:after{content:var(--tw-content);border-width:.125rem}.checked\:focus\:after\:border-l-0:focus:checked:after{content:var(--tw-content);border-left-width:0px}.checked\:focus\:after\:border-t-0:focus:checked:after{content:var(--tw-content);border-top-width:0px}.checked\:focus\:after\:border-solid:focus:checked:after{content:var(--tw-content);border-style:solid}.checked\:focus\:after\:border-white:focus:checked:after{content:var(--tw-content);--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity))}.checked\:focus\:after\:bg-transparent:focus:checked:after{content:var(--tw-content);background-color:transparent}.active\:bg-\[\#cacfd1\]:active{--tw-bg-opacity: 1;background-color:rgb(202 207 209 / var(--tw-bg-opacity))}.group\/x:hover .group-hover\/x\:h-\[11px\]{height:11px}.group\/y:hover .group-hover\/y\:w-\[11px\]{width:11px}.group\/x:hover .group-hover\/x\:bg-\[\#999\],.group\/y:hover .group-hover\/y\:bg-\[\#999\]{--tw-bg-opacity: 1;background-color:rgb(153 153 153 / var(--tw-bg-opacity))}.group\/ps:hover .group-hover\/ps\:opacity-100{opacity:1}.group\/ps:hover .group-hover\/ps\:opacity-60{opacity:.6}.group\/x:focus .group-focus\/x\:h-\[11px\]{height:11px}.group\/y:focus .group-focus\/y\:w-\[11px\]{width:11px}.group\/x:focus .group-focus\/x\:bg-\[\#999\]{--tw-bg-opacity: 1;background-color:rgb(153 153 153 / var(--tw-bg-opacity))}.group\/y:focus .group-focus\/y\:bg-\[\#999\]{--tw-bg-opacity: 1;background-color:rgb(153 153 153 / var(--tw-bg-opacity))}.group\/ps:focus .group-focus\/ps\:opacity-100{opacity:1}.group\/ps:focus .group-focus\/ps\:opacity-60{opacity:.6}.group\/ps:active .group-active\/ps\:opacity-100{opacity:1}.group\/ps.ps--active-x .group-\[\&\.ps--active-x\]\/ps\:block,.group\/ps.ps--active-y .group-\[\&\.ps--active-y\]\/ps\:block{display:block}.group\/x.ps--clicking .group-\[\&\.ps--clicking\]\/x\:h-\[11px\]{height:11px}.group\/y.ps--clicking .group-\[\&\.ps--clicking\]\/y\:w-\[11px\]{width:11px}.group[data-te-datepicker-cell-current] .group-\[\[data-te-datepicker-cell-current\]\]\:border{border-width:1px}.group[data-te-datepicker-cell-current] .group-\[\[data-te-datepicker-cell-current\]\]\:border-solid{border-style:solid}.group[data-te-datepicker-cell-current] .group-\[\[data-te-datepicker-cell-current\]\]\:border-black{--tw-border-opacity: 1;border-color:rgb(0 0 0 / var(--tw-border-opacity))}.group\/ps.ps--active-x .group-\[\&\.ps--active-x\]\/ps\:bg-transparent,.group\/ps.ps--active-y .group-\[\&\.ps--active-y\]\/ps\:bg-transparent{background-color:transparent}.group\/x.ps--clicking .group-\[\&\.ps--clicking\]\/x\:bg-\[\#999\],.group\/y.ps--clicking .group-\[\&\.ps--clicking\]\/y\:bg-\[\#999\]{--tw-bg-opacity: 1;background-color:rgb(153 153 153 / var(--tw-bg-opacity))}.group:not([data-te-datepicker-cell-disabled]):not([data-te-datepicker-cell-selected]):hover .group-\[\:not\(\[data-te-datepicker-cell-disabled\]\)\:not\(\[data-te-datepicker-cell-selected\]\)\:hover\]\:bg-neutral-300{--tw-bg-opacity: 1;background-color:rgb(212 212 212 / var(--tw-bg-opacity))}.group:not([data-te-datepicker-cell-selected])[data-te-datepicker-cell-focused] .group-\[\:not\(\[data-te-datepicker-cell-selected\]\)\[data-te-datepicker-cell-focused\]\]\:bg-neutral-100{--tw-bg-opacity: 1;background-color:rgb(245 245 245 / var(--tw-bg-opacity))}.group[data-te-datepicker-cell-selected] .group-\[\[data-te-datepicker-cell-selected\]\]\:bg-primary{--tw-bg-opacity: 1;background-color:rgb(59 113 202 / var(--tw-bg-opacity))}.group[data-te-datepicker-cell-selected] .group-\[\[data-te-datepicker-cell-selected\]\]\:text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.group\/ps.ps--scrolling-x .group-\[\&\.ps--scrolling-x\]\/ps\:opacity-60,.group\/ps.ps--scrolling-y .group-\[\&\.ps--scrolling-y\]\/ps\:opacity-60{opacity:.6}.peer:hover~.peer-hover\:bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.peer:focus~.peer-focus\:-translate-y-\[0\.75rem\]{--tw-translate-y: -.75rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.peer:focus~.peer-focus\:-translate-y-\[0\.9rem\]{--tw-translate-y: -.9rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.peer:focus~.peer-focus\:-translate-y-\[1\.15rem\]{--tw-translate-y: -1.15rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.peer:focus~.peer-focus\:scale-\[0\.8\]{--tw-scale-x: .8;--tw-scale-y: .8;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.peer:focus~.peer-focus\:\!text-white{--tw-text-opacity: 1 !important;color:rgb(255 255 255 / var(--tw-text-opacity))!important}.peer:focus~.peer-focus\:text-gray-200{--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity))}.peer:focus~.peer-focus\:text-primary{--tw-text-opacity: 1;color:rgb(59 113 202 / var(--tw-text-opacity))}.data-\[te-datepicker-cell-disabled\]\:pointer-events-none[data-te-datepicker-cell-disabled]{pointer-events:none}.data-\[te-carousel-fade\]\:z-0[data-te-carousel-fade]{z-index:0}.data-\[te-carousel-fade\]\:z-\[1\][data-te-carousel-fade]{z-index:1}.data-\[te-input-state-active\]\:block[data-te-input-state-active],.data-\[te-tab-active\]\:block[data-te-tab-active]{display:block}.data-\[popper-reference-hidden\]\:hidden[data-popper-reference-hidden]{display:none}.data-\[te-input-state-active\]\:-translate-y-\[0\.75rem\][data-te-input-state-active]{--tw-translate-y: -.75rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[te-input-state-active\]\:-translate-y-\[0\.9rem\][data-te-input-state-active]{--tw-translate-y: -.9rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[te-input-state-active\]\:-translate-y-\[1\.15rem\][data-te-input-state-active]{--tw-translate-y: -1.15rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[te-input-state-active\]\:scale-\[0\.8\][data-te-input-state-active]{--tw-scale-x: .8;--tw-scale-y: .8;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[te-select-open\]\:scale-100[data-te-select-open]{--tw-scale-x: 1;--tw-scale-y: 1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[te-datepicker-cell-disabled\]\:cursor-default[data-te-datepicker-cell-disabled],.data-\[te-input-disabled\]\:cursor-default[data-te-input-disabled],.data-\[te-select-option-disabled\]\:cursor-default[data-te-select-option-disabled],.data-\[te-select-selected\]\:data-\[te-select-option-disabled\]\:cursor-default[data-te-select-option-disabled][data-te-select-selected]{cursor:default}.data-\[te-input-disabled\]\:bg-\[\#e9ecef\][data-te-input-disabled]{--tw-bg-opacity: 1;background-color:rgb(233 236 239 / var(--tw-bg-opacity))}.data-\[te-input-multiple-active\]\:bg-black\/5[data-te-input-multiple-active],.data-\[te-input-state-active\]\:bg-black\/5[data-te-input-state-active]{background-color:#0000000d}.data-\[te-nav-active\]\:\!bg-\[\#1E1E1E\][data-te-nav-active]{--tw-bg-opacity: 1 !important;background-color:rgb(30 30 30 / var(--tw-bg-opacity))!important}.data-\[te-select-option-selected\]\:bg-black\/\[0\.02\][data-te-select-option-selected]{background-color:#00000005}.data-\[te-select-option-selected\]\:data-\[te-input-state-active\]\:bg-black\/5[data-te-input-state-active][data-te-select-option-selected]{background-color:#0000000d}.data-\[te-select-selected\]\:data-\[te-select-option-disabled\]\:bg-transparent[data-te-select-option-disabled][data-te-select-selected]{background-color:transparent}.data-\[te-datepicker-cell-disabled\]\:text-neutral-300[data-te-datepicker-cell-disabled]{--tw-text-opacity: 1;color:rgb(212 212 212 / var(--tw-text-opacity))}.data-\[te-nav-active\]\:text-\[\#FFFFFF\][data-te-nav-active]{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.data-\[te-select-option-disabled\]\:text-gray-400[data-te-select-option-disabled],.data-\[te-select-selected\]\:data-\[te-select-option-disabled\]\:text-gray-400[data-te-select-option-disabled][data-te-select-selected]{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}.data-\[te-carousel-fade\]\:opacity-0[data-te-carousel-fade]{opacity:0}.data-\[te-carousel-fade\]\:opacity-100[data-te-carousel-fade],.data-\[te-select-open\]\:opacity-100[data-te-select-open]{opacity:1}.data-\[te-carousel-fade\]\:duration-0[data-te-carousel-fade]{transition-duration:0s}.data-\[te-input-state-active\]\:placeholder\:opacity-100[data-te-input-state-active]::-moz-placeholder{opacity:1}.data-\[te-input-state-active\]\:placeholder\:opacity-100[data-te-input-state-active]::placeholder{opacity:1}.data-\[te-datepicker-cell-disabled\]\:hover\:cursor-default:hover[data-te-datepicker-cell-disabled]{cursor:default}.group[data-te-datepicker-cell-focused] .group-\[\[data-te-datepicker-cell-focused\]\]\:data-\[te-datepicker-cell-selected\]\:bg-primary[data-te-datepicker-cell-selected]{--tw-bg-opacity: 1;background-color:rgb(59 113 202 / var(--tw-bg-opacity))}.group\/validation[data-te-was-validated] .group-data-\[te-was-validated\]\/validation\:mb-4{margin-bottom:1rem}.group[data-te-input-focused] .group-data-\[te-input-focused\]\:border-x-0,.group[data-te-input-state-active] .group-data-\[te-input-state-active\]\:border-x-0{border-left-width:0px;border-right-width:0px}.group[data-te-input-focused] .group-data-\[te-input-focused\]\:border-l-0{border-left-width:0px}.group[data-te-input-focused] .group-data-\[te-input-focused\]\:border-r-0{border-right-width:0px}.group[data-te-input-focused] .group-data-\[te-input-focused\]\:border-t{border-top-width:1px}.group[data-te-input-state-active] .group-data-\[te-input-state-active\]\:border-l-0{border-left-width:0px}.group[data-te-input-state-active] .group-data-\[te-input-state-active\]\:border-r-0{border-right-width:0px}.group[data-te-input-state-active] .group-data-\[te-input-state-active\]\:border-t{border-top-width:1px}.group[data-te-input-focused] .group-data-\[te-input-focused\]\:border-solid,.group[data-te-input-state-active] .group-data-\[te-input-state-active\]\:border-solid{border-style:solid}.group[data-te-input-focused] .group-data-\[te-input-focused\]\:border-primary{--tw-border-opacity: 1;border-color:rgb(59 113 202 / var(--tw-border-opacity))}.group[data-te-input-focused] .group-data-\[te-input-focused\]\:border-white{--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity))}.group[data-te-input-focused] .group-data-\[te-input-focused\]\:border-t-transparent,.group[data-te-input-state-active] .group-data-\[te-input-state-active\]\:border-t-transparent{border-top-color:transparent}.group\/opt[data-te-select-option-group-ref] .group-data-\[te-select-option-group-ref\]\/opt\:pl-7{padding-left:1.75rem}.group[data-te-input-focused] .group-data-\[te-input-focused\]\:shadow-\[-1px_0_0_\#3b71ca\,_0_1px_0_0_\#3b71ca\,_0_-1px_0_0_\#3b71ca\]{--tw-shadow: -1px 0 0 #3b71ca, 0 1px 0 0 #3b71ca, 0 -1px 0 0 #3b71ca;--tw-shadow-colored: -1px 0 0 var(--tw-shadow-color), 0 1px 0 0 var(--tw-shadow-color), 0 -1px 0 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group[data-te-input-focused] .group-data-\[te-input-focused\]\:shadow-\[-1px_0_0_\#ffffff\,_0_1px_0_0_\#ffffff\,_0_-1px_0_0_\#ffffff\]{--tw-shadow: -1px 0 0 #ffffff, 0 1px 0 0 #ffffff, 0 -1px 0 0 #ffffff;--tw-shadow-colored: -1px 0 0 var(--tw-shadow-color), 0 1px 0 0 var(--tw-shadow-color), 0 -1px 0 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group[data-te-input-focused] .group-data-\[te-input-focused\]\:shadow-\[0_1px_0_0_\#3b71ca\]{--tw-shadow: 0 1px 0 0 #3b71ca;--tw-shadow-colored: 0 1px 0 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group[data-te-input-focused] .group-data-\[te-input-focused\]\:shadow-\[0_1px_0_0_\#ffffff\]{--tw-shadow: 0 1px 0 0 #ffffff;--tw-shadow-colored: 0 1px 0 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group[data-te-input-focused] .group-data-\[te-input-focused\]\:shadow-\[1px_0_0_\#3b71ca\,_0_-1px_0_0_\#3b71ca\,_0_1px_0_0_\#3b71ca\]{--tw-shadow: 1px 0 0 #3b71ca, 0 -1px 0 0 #3b71ca, 0 1px 0 0 #3b71ca;--tw-shadow-colored: 1px 0 0 var(--tw-shadow-color), 0 -1px 0 0 var(--tw-shadow-color), 0 1px 0 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group[data-te-input-focused] .group-data-\[te-input-focused\]\:shadow-\[1px_0_0_\#ffffff\,_0_-1px_0_0_\#ffffff\,_0_1px_0_0_\#ffffff\]{--tw-shadow: 1px 0 0 #ffffff, 0 -1px 0 0 #ffffff, 0 1px 0 0 #ffffff;--tw-shadow-colored: 1px 0 0 var(--tw-shadow-color), 0 -1px 0 0 var(--tw-shadow-color), 0 1px 0 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.group\/validation[data-te-was-validated] .peer:valid~.group-data-\[te-was-validated\]\/validation\:peer-valid\:block{display:block}.group\/validation[data-te-was-validated] .peer:valid~.group-data-\[te-was-validated\]\/validation\:peer-valid\:text-green-600{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity))}.group\/validation[data-te-was-validated] .peer:invalid~.group-data-\[te-was-validated\]\/validation\:peer-invalid\:block{display:block}.group\/validation[data-te-was-validated] .peer:invalid~.group-data-\[te-was-validated\]\/validation\:peer-invalid\:text-\[rgb\(220\,76\,100\)\]{--tw-text-opacity: 1;color:rgb(220 76 100 / var(--tw-text-opacity))}.peer[data-te-input-state-active]~.peer-data-\[te-input-state-active\]\:-translate-y-\[0\.75rem\]{--tw-translate-y: -.75rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.peer[data-te-input-state-active]~.peer-data-\[te-input-state-active\]\:-translate-y-\[0\.9rem\]{--tw-translate-y: -.9rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.peer[data-te-input-state-active]~.peer-data-\[te-input-state-active\]\:-translate-y-\[1\.15rem\]{--tw-translate-y: -1.15rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.peer[data-te-input-state-active]~.peer-data-\[te-input-state-active\]\:scale-\[0\.8\]{--tw-scale-x: .8;--tw-scale-y: .8;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.peer[data-te-input-focused]~.peer-data-\[te-input-focused\]\:\!text-white{--tw-text-opacity: 1 !important;color:rgb(255 255 255 / var(--tw-text-opacity))!important}.peer[data-te-input-focused]~.peer-data-\[te-input-focused\]\:text-primary{--tw-text-opacity: 1;color:rgb(59 113 202 / var(--tw-text-opacity))}:is([dir="rtl"] .rtl\:\!left-auto){left:auto!important}:is([dir="rtl"] .rtl\:\!origin-\[50\%_50\%_0\]){transform-origin:50% 50% 0!important}:is([dir="rtl"] .rtl\:\[direction\:rtl\]){direction:rtl}@media (prefers-reduced-motion: reduce){.motion-reduce\:animate-none{animation:none}.motion-reduce\:transition-none{transition-property:none}}:is(.dark .dark\:border-0){border-width:0px}:is(.dark .dark\:border-gray-600){--tw-border-opacity: 1;border-color:rgb(75 85 99 / var(--tw-border-opacity))}:is(.dark .dark\:border-neutral-500){--tw-border-opacity: 1;border-color:rgb(115 115 115 / var(--tw-border-opacity))}:is(.dark .dark\:border-neutral-600){--tw-border-opacity: 1;border-color:rgb(82 82 82 / var(--tw-border-opacity))}:is(.dark .dark\:border-primary-400){--tw-border-opacity: 1;border-color:rgb(143 174 224 / var(--tw-border-opacity))}:is(.dark .dark\:bg-neutral-600){--tw-bg-opacity: 1;background-color:rgb(82 82 82 / var(--tw-bg-opacity))}:is(.dark .dark\:bg-neutral-700){--tw-bg-opacity: 1;background-color:rgb(64 64 64 / var(--tw-bg-opacity))}:is(.dark .dark\:bg-transparent){background-color:transparent}:is(.dark .dark\:bg-zinc-500){--tw-bg-opacity: 1;background-color:rgb(113 113 122 / var(--tw-bg-opacity))}:is(.dark .dark\:bg-zinc-600\/50){background-color:#52525b80}:is(.dark .dark\:bg-zinc-700){--tw-bg-opacity: 1;background-color:rgb(63 63 70 / var(--tw-bg-opacity))}:is(.dark .dark\:bg-zinc-800){--tw-bg-opacity: 1;background-color:rgb(39 39 42 / var(--tw-bg-opacity))}:is(.dark .dark\:fill-gray-400){fill:#9ca3af}:is(.dark .dark\:\!text-primary-400){--tw-text-opacity: 1 !important;color:rgb(143 174 224 / var(--tw-text-opacity))!important}:is(.dark .dark\:text-gray-200){--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity))}:is(.dark .dark\:text-gray-300){--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity))}:is(.dark .dark\:text-neutral-200){--tw-text-opacity: 1;color:rgb(229 229 229 / var(--tw-text-opacity))}:is(.dark .dark\:text-white){--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}:is(.dark .dark\:placeholder\:text-gray-200)::-moz-placeholder{--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity))}:is(.dark .dark\:placeholder\:text-gray-200)::placeholder{--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity))}:is(.dark .dark\:checked\:border-primary:checked){--tw-border-opacity: 1;border-color:rgb(59 113 202 / var(--tw-border-opacity))}:is(.dark .dark\:checked\:bg-primary:checked){--tw-bg-opacity: 1;background-color:rgb(59 113 202 / var(--tw-bg-opacity))}:is(.dark .dark\:hover\:bg-white\/10:hover){background-color:#ffffff1a}:is(.dark .dark\:hover\:fill-gray-100:hover){fill:#f3f4f6}:is(.dark .dark\:hover\:text-\[\#3b71ca\]:hover){--tw-text-opacity: 1;color:rgb(59 113 202 / var(--tw-text-opacity))}:is(.dark .dark\:hover\:text-primary-400:hover){--tw-text-opacity: 1;color:rgb(143 174 224 / var(--tw-text-opacity))}:is(.dark .dark\:focus\:bg-white\/10:focus){background-color:#ffffff1a}:is(.dark .dark\:focus\:text-\[\#3b71ca\]:focus){--tw-text-opacity: 1;color:rgb(59 113 202 / var(--tw-text-opacity))}:is(.dark .dark\:focus\:text-primary-400:focus){--tw-text-opacity: 1;color:rgb(143 174 224 / var(--tw-text-opacity))}:is(.dark .dark\:focus\:before\:shadow-\[0px_0px_0px_13px_rgba\(255\,255\,255\,0\.4\)\]:focus):before{content:var(--tw-content);--tw-shadow: 0px 0px 0px 13px rgba(255,255,255,.4);--tw-shadow-colored: 0px 0px 0px 13px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}:is(.dark .dark\:checked\:focus\:before\:shadow-\[0px_0px_0px_13px_\#3b71ca\]:focus:checked):before{content:var(--tw-content);--tw-shadow: 0px 0px 0px 13px #3b71ca;--tw-shadow-colored: 0px 0px 0px 13px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}:is(.dark .group[data-te-datepicker-cell-current] .dark\:group-\[\[data-te-datepicker-cell-current\]\]\:border-white){--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity))}:is(.dark .group:not([data-te-datepicker-cell-disabled]):not([data-te-datepicker-cell-selected]):hover .dark\:group-\[\:not\(\[data-te-datepicker-cell-disabled\]\)\:not\(\[data-te-datepicker-cell-selected\]\)\:hover\]\:bg-white\/10){background-color:#ffffff1a}:is(.dark .group:not([data-te-datepicker-cell-selected])[data-te-datepicker-cell-focused] .dark\:group-\[\:not\(\[data-te-datepicker-cell-selected\]\)\[data-te-datepicker-cell-focused\]\]\:bg-white\/10){background-color:#ffffff1a}:is(.dark .group[data-te-datepicker-cell-disabled] .dark\:group-\[\[data-te-datepicker-cell-disabled\]\]\:text-neutral-500){--tw-text-opacity: 1;color:rgb(115 115 115 / var(--tw-text-opacity))}:is(.dark .peer:focus ~ .dark\:peer-focus\:text-gray-200){--tw-text-opacity: 1;color:rgb(229 231 235 / var(--tw-text-opacity))}:is(.dark .peer:focus ~ .dark\:peer-focus\:text-primary){--tw-text-opacity: 1;color:rgb(59 113 202 / var(--tw-text-opacity))}:is(.dark .dark\:data-\[te-input-disabled\]\:bg-zinc-600[data-te-input-disabled]){--tw-bg-opacity: 1;background-color:rgb(82 82 91 / var(--tw-bg-opacity))}:is(.dark .dark\:data-\[te-input-multiple-active\]\:bg-white\/30[data-te-input-multiple-active]){background-color:#ffffff4d}:is(.dark .dark\:data-\[te-input-state-active\]\:bg-white\/30[data-te-input-state-active]){background-color:#ffffff4d}:is(.dark .dark\:data-\[te-select-option-selected\]\:data-\[te-input-state-active\]\:bg-white\/30[data-te-input-state-active][data-te-select-option-selected]){background-color:#ffffff4d}:is(.dark .dark\:data-\[te-select-option-disabled\]\:text-gray-400[data-te-select-option-disabled]){--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}@media not all and (min-width: 640px){.max-sm\:order-3{order:3}.max-sm\:order-first{order:-9999}.max-sm\:mx-8{margin-left:2rem;margin-right:2rem}.max-sm\:hidden{display:none}}@media (min-width: 320px){.xs\:px-16{padding-left:4rem;padding-right:4rem}}@media (min-width: 360px){.min-\[360px\]\:max-w-\[200px\]{max-width:200px}}@media (min-width: 400px){.min-\[400px\]\:max-w-\[200px\]{max-width:200px}.min-\[400px\]\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.min-\[400px\]\:text-2xl{font-size:1.5rem;line-height:2rem}}@media (min-width: 410px){.min-\[410px\]\:max-w-\[200px\]{max-width:200px}.min-\[410px\]\:pl-0{padding-left:0}}@media (min-width: 500px){.min-\[500px\]\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.min-\[500px\]\:gap-x-28{-moz-column-gap:7rem;column-gap:7rem}.min-\[500px\]\:gap-x-8{-moz-column-gap:2rem;column-gap:2rem}}@media (min-width: 640px){.sm\:-m-0{margin:-0px}.sm\:m-2{margin:.5rem}.sm\:-mx-0{margin-left:-0px;margin-right:-0px}.sm\:-my-6{margin-top:-1.5rem;margin-bottom:-1.5rem}.sm\:mx-14{margin-left:3.5rem;margin-right:3.5rem}.sm\:mx-4{margin-left:1rem;margin-right:1rem}.sm\:my-6{margin-top:1.5rem;margin-bottom:1.5rem}.sm\:-ml-4{margin-left:-1rem}.sm\:mb-20{margin-bottom:5rem}.sm\:mt-0{margin-top:0}.sm\:mt-5{margin-top:1.25rem}.sm\:mt-7{margin-top:1.75rem}.sm\:flex{display:flex}.sm\:grid{display:grid}.sm\:hidden{display:none}.sm\:h-\[110\%\]{height:110%}.sm\:max-h-\[100px\]{max-height:100px}.sm\:w-20{width:5rem}.sm\:w-24{width:6rem}.sm\:w-28{width:7rem}.sm\:w-32{width:8rem}.sm\:w-40{width:10rem}.sm\:w-\[110\%\]{width:110%}.sm\:max-w-\[150px\]{max-width:150px}.sm\:max-w-\[160px\]{max-width:160px}.sm\:max-w-\[200px\]{max-width:200px}.sm\:-translate-x-10{--tw-translate-x: -2.5rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sm\:-translate-x-\[12\.5\%\]{--tw-translate-x: -12.5%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sm\:-translate-x-\[15\%\]{--tw-translate-x: -15%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sm\:-translate-y-\[17\.5\%\]{--tw-translate-y: -17.5%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sm\:translate-x-10{--tw-translate-x: 2.5rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sm\:translate-x-2{--tw-translate-x: .5rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.sm\:justify-between{justify-content:space-between}.sm\:gap-6{gap:1.5rem}.sm\:pl-10{padding-left:2.5rem}.sm\:text-2xl{font-size:1.5rem;line-height:2rem}.min-\[640px\]\:ml-6{margin-left:1.5rem}.min-\[640px\]\:translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.min-\[640px\]\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.min-\[640px\]\:place-items-center{place-items:center}.min-\[640px\]\:gap-x-5{-moz-column-gap:1.25rem;column-gap:1.25rem}.min-\[640px\]\:gap-x-7{-moz-column-gap:1.75rem;column-gap:1.75rem}}@media (min-width: 768px){.md\:right-\[80px\]{right:80px}.md\:-my-4{margin-top:-1rem;margin-bottom:-1rem}.md\:ml-10{margin-left:2.5rem}.md\:ml-32{margin-left:8rem}.md\:ml-5{margin-left:1.25rem}.md\:mr-0{margin-right:0}.md\:mr-5{margin-right:1.25rem}.md\:mt-0{margin-top:0}.md\:mt-4{margin-top:1rem}.md\:block{display:block}.md\:h-16{height:4rem}.md\:h-32{height:8rem}.md\:h-\[20rem\]{height:20rem}.md\:h-\[30vh\]{height:30vh}.md\:w-24{width:6rem}.md\:w-32{width:8rem}.md\:w-36{width:9rem}.md\:w-\[100\%\]{width:100%}.md\:w-\[70px\]{width:70px}.md\:max-w-\[150px\]{max-width:150px}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:justify-center{justify-content:center}.md\:gap-10{gap:2.5rem}.md\:gap-\[5rem\]{gap:5rem}.md\:px-4{padding-left:1rem;padding-right:1rem}.md\:px-44{padding-left:11rem;padding-right:11rem}.md\:text-2xl{font-size:1.5rem;line-height:2rem}.md\:text-3xl{font-size:1.875rem;line-height:2.25rem}.md\:text-4xl{font-size:2.25rem;line-height:2.5rem}.md\:text-5xl{font-size:3rem;line-height:1}.md\:text-lg{font-size:1.125rem;line-height:1.75rem}.md\:text-sm{font-size:.875rem;line-height:1.25rem}}@media (min-width: 900px){.min-\[900px\]\:max-w-\[150px\]{max-width:150px}.min-\[900px\]\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width: 1000px){.min-\[1000px\]\:mt-10{margin-top:2.5rem}.min-\[1000px\]\:max-w-\[170px\]{max-width:170px}.min-\[1000px\]\:max-w-\[180px\]{max-width:180px}.min-\[1000px\]\:-translate-x-2{--tw-translate-x: -.5rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.min-\[1000px\]\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}@media (min-width: 1024px){.lg\:mt-10{margin-top:2.5rem}.lg\:block{display:block}.lg\:hidden{display:none}.lg\:max-w-\[150px\]{max-width:150px}.lg\:flex-row{flex-direction:row}.lg\:gap-\[10rem\]{gap:10rem}.lg\:text-5xl{font-size:3rem;line-height:1}.lg\:text-base{font-size:1rem;line-height:1.5rem}}@media (min-width: 1200px){.min-\[1200px\]\:gap-y-0{row-gap:0px}}@media (min-width: 1280px){.xl\:static{position:static}.xl\:right-\[50px\]{right:50px}.xl\:-my-6{margin-top:-1.5rem;margin-bottom:-1.5rem}.xl\:mx-0{margin-left:0;margin-right:0}.xl\:mx-10{margin-left:2.5rem;margin-right:2.5rem}.xl\:mx-14{margin-left:3.5rem;margin-right:3.5rem}.xl\:mx-16{margin-left:4rem;margin-right:4rem}.xl\:mx-2{margin-left:.5rem;margin-right:.5rem}.xl\:mx-64{margin-left:16rem;margin-right:16rem}.xl\:mx-7{margin-left:1.75rem;margin-right:1.75rem}.xl\:my-0{margin-top:0;margin-bottom:0}.xl\:-ml-8{margin-left:-2rem}.xl\:-mt-2{margin-top:-.5rem}.xl\:ml-40{margin-left:10rem}.xl\:ml-\[280px\]{margin-left:280px}.xl\:mr-40{margin-right:10rem}.xl\:mr-60{margin-right:15rem}.xl\:mt-0{margin-top:0}.xl\:mt-10{margin-top:2.5rem}.xl\:mt-2{margin-top:.5rem}.xl\:mt-3{margin-top:.75rem}.xl\:mt-8{margin-top:2rem}.xl\:block{display:block}.xl\:flex{display:flex}.xl\:hidden{display:none}.xl\:h-32{height:8rem}.xl\:h-36{height:9rem}.xl\:h-\[100\%\]{height:100%}.xl\:h-\[45vh\]{height:45vh}.xl\:max-h-\[60px\]{max-height:60px}.xl\:w-20{width:5rem}.xl\:w-24{width:6rem}.xl\:w-28{width:7rem}.xl\:w-32{width:8rem}.xl\:w-36{width:9rem}.xl\:w-40{width:10rem}.xl\:w-44{width:11rem}.xl\:w-96{width:24rem}.xl\:w-\[120\%\]{width:120%}.xl\:w-auto{width:auto}.xl\:w-full{width:100%}.xl\:max-w-\[150px\]{max-width:150px}.xl\:max-w-\[170px\]{max-width:170px}.xl\:max-w-\[180px\]{max-width:180px}.xl\:max-w-full{max-width:100%}.xl\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.xl\:items-center{align-items:center}.xl\:justify-between{justify-content:space-between}.xl\:justify-evenly{justify-content:space-evenly}.xl\:gap-x-0{-moz-column-gap:0px;column-gap:0px}.xl\:px-16{padding-left:4rem;padding-right:4rem}.xl\:px-2{padding-left:.5rem;padding-right:.5rem}.xl\:px-48{padding-left:12rem;padding-right:12rem}.xl\:py-0{padding-top:0;padding-bottom:0}.xl\:py-10{padding-top:2.5rem;padding-bottom:2.5rem}.xl\:pl-0{padding-left:0}.xl\:pl-12{padding-left:3rem}.xl\:text-left{text-align:left}.xl\:text-2xl{font-size:1.5rem;line-height:2rem}.xl\:text-3xl{font-size:1.875rem;line-height:2.25rem}.xl\:text-4xl{font-size:2.25rem;line-height:2.5rem}.xl\:text-5xl{font-size:3rem;line-height:1}.xl\:text-6xl{font-size:3.75rem;line-height:1}.xl\:opacity-100{opacity:1}.min-\[1280px\]\:-mt-7{margin-top:-1.75rem}.min-\[1280px\]\:mt-0{margin-top:0}.min-\[1280px\]\:translate-x-0{--tw-translate-x: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.min-\[1280px\]\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.min-\[1280px\]\:gap-y-1{row-gap:.25rem}}@media (min-width: 1400px){.min-\[1400px\]\:-mt-2{margin-top:-.5rem}.min-\[1400px\]\:-mt-5{margin-top:-1.25rem}.min-\[1400px\]\:translate-x-2{--tw-translate-x: .5rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.min-\[1400px\]\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width: 1450px){.tracks-break\:block{display:block}.tracks-break\:hidden{display:none}.min-\[1450px\]\:-ml-10{margin-left:-2.5rem}.min-\[1450px\]\:mt-0{margin-top:0}.min-\[1450px\]\:translate-x-10{--tw-translate-x: 2.5rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.min-\[1450px\]\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width: 1536px){.\32xl\:mx-0{margin-left:0;margin-right:0}.\32xl\:mx-14{margin-left:3.5rem;margin-right:3.5rem}.\32xl\:mx-72{margin-left:18rem;margin-right:18rem}.\32xl\:my-12{margin-top:3rem;margin-bottom:3rem}.\32xl\:my-4{margin-top:1rem;margin-bottom:1rem}.\32xl\:ml-2{margin-left:.5rem}.\32xl\:mt-10{margin-top:2.5rem}.\32xl\:mt-12{margin-top:3rem}.\32xl\:h-\[60vh\]{height:60vh}.\32xl\:w-\[150\%\]{width:150%}.\32xl\:w-\[170\%\]{width:170%}.\32xl\:w-full{width:100%}.\32xl\:max-w-\[200px\]{max-width:200px}.\32xl\:gap-\[13rem\]{gap:13rem}.\32xl\:px-5{padding-left:1.25rem;padding-right:1.25rem}.\32xl\:px-56{padding-left:14rem;padding-right:14rem}.\32xl\:px-72{padding-left:18rem;padding-right:18rem}.\32xl\:text-4xl{font-size:2.25rem;line-height:2.5rem}}@media (min-width: 1600px){.min-\[1600px\]\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}}@media (min-width: 1760px){.mascot-break\:w-\[180\%\]{width:180%}.mascot-break\:gap-\[25rem\]{gap:25rem}}@media (min-width: 1800px){.min-\[1800px\]\:h-48{height:12rem}.min-\[1800px\]\:w-24{width:6rem}.min-\[1800px\]\:w-28{width:7rem}.min-\[1800px\]\:w-32{width:8rem}.min-\[1800px\]\:w-36{width:9rem}.min-\[1800px\]\:w-44{width:11rem}.min-\[1800px\]\:w-48{width:12rem}.min-\[1800px\]\:w-52{width:13rem}.min-\[1800px\]\:w-56{width:14rem}}@media (min-width: 2000px){.min-\[2000px\]\:mx-7{margin-left:1.75rem;margin-right:1.75rem}.min-\[2000px\]\:-mt-2{margin-top:-.5rem}.min-\[2000px\]\:mt-2{margin-top:.5rem}.min-\[2000px\]\:h-52{height:13rem}.min-\[2000px\]\:w-28{width:7rem}.min-\[2000px\]\:w-32{width:8rem}.min-\[2000px\]\:w-36{width:9rem}.min-\[2000px\]\:w-40{width:10rem}.min-\[2000px\]\:w-48{width:12rem}.min-\[2000px\]\:w-52{width:13rem}.min-\[2000px\]\:w-56{width:14rem}.min-\[2000px\]\:w-64{width:16rem}.min-\[2000px\]\:w-72{width:18rem}.min-\[2000px\]\:max-w-\[240px\]{max-width:240px}.min-\[2000px\]\:max-w-\[270px\]{max-width:270px}.min-\[2000px\]\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.min-\[2000px\]\:text-xl{font-size:1.25rem;line-height:1.75rem}}@media (min-width: 2100px){.min-\[2100px\]\:-mt-2{margin-top:-.5rem}.min-\[2100px\]\:mt-4{margin-top:1rem}.min-\[2100px\]\:max-w-\[280px\]{max-width:280px}.min-\[2100px\]\:max-w-\[300px\]{max-width:300px}}@media (min-width: 2200px){.\33xl\:w-\[150\%\]{width:150%}}@media (min-width: 320px){@media not all and (min-width: 768px){@media (orientation: landscape){.xs\:max-md\:landscape\:mt-24{margin-top:6rem}.xs\:max-md\:landscape\:h-8{height:2rem}.xs\:max-md\:landscape\:h-\[360px\]{height:360px}.xs\:max-md\:landscape\:h-full{height:100%}.xs\:max-md\:landscape\:w-8{width:2rem}.xs\:max-md\:landscape\:w-\[475px\]{width:475px}.xs\:max-md\:landscape\:flex-row{flex-direction:row}}}@media (max-width: 825px){@media (orientation: landscape){.min-\[320px\]\:max-\[825px\]\:landscape\:h-auto{height:auto}.min-\[320px\]\:max-\[825px\]\:landscape\:min-h-\[305px\]{min-height:305px}.min-\[320px\]\:max-\[825px\]\:landscape\:min-h-\[auto\]{min-height:auto}.min-\[320px\]\:max-\[825px\]\:landscape\:min-w-\[auto\]{min-width:auto}.min-\[320px\]\:max-\[825px\]\:landscape\:\!flex-row{flex-direction:row!important}.min-\[320px\]\:max-\[825px\]\:landscape\:flex-col{flex-direction:column}.min-\[320px\]\:max-\[825px\]\:landscape\:\!justify-around{justify-content:space-around!important}.min-\[320px\]\:max-\[825px\]\:landscape\:overflow-y-auto{overflow-y:auto}.min-\[320px\]\:max-\[825px\]\:landscape\:rounded-lg{border-radius:.5rem}.min-\[320px\]\:max-\[825px\]\:landscape\:rounded-bl-lg{border-bottom-left-radius:.5rem}.min-\[320px\]\:max-\[825px\]\:landscape\:rounded-bl-none{border-bottom-left-radius:0}.min-\[320px\]\:max-\[825px\]\:landscape\:rounded-tr-none{border-top-right-radius:0}.min-\[320px\]\:max-\[825px\]\:landscape\:p-\[10px\]{padding:10px}.min-\[320px\]\:max-\[825px\]\:landscape\:pr-\[10px\]{padding-right:10px}.min-\[320px\]\:max-\[825px\]\:landscape\:text-5xl{font-size:3rem;line-height:1}.min-\[320px\]\:max-\[825px\]\:landscape\:text-\[3rem\]{font-size:3rem}.min-\[320px\]\:max-\[825px\]\:landscape\:font-normal{font-weight:400}}}}.\[\&\.ps--clicking\]\:bg-\[\#eee\].ps--clicking{--tw-bg-opacity: 1;background-color:rgb(238 238 238 / var(--tw-bg-opacity))}.\[\&\.ps--clicking\]\:\!opacity-90.ps--clicking{opacity:.9!important}.\[\&\:\:-webkit-scrollbar-button\]\:block::-webkit-scrollbar-button{display:block}.\[\&\:\:-webkit-scrollbar-button\]\:h-0::-webkit-scrollbar-button{height:0px}.\[\&\:\:-webkit-scrollbar-button\]\:bg-transparent::-webkit-scrollbar-button{background-color:transparent}.\[\&\:\:-webkit-scrollbar-thumb\]\:h-\[50px\]::-webkit-scrollbar-thumb{height:50px}.\[\&\:\:-webkit-scrollbar-thumb\]\:rounded::-webkit-scrollbar-thumb{border-radius:.25rem}.\[\&\:\:-webkit-scrollbar-thumb\]\:bg-\[\#999\]::-webkit-scrollbar-thumb{--tw-bg-opacity: 1;background-color:rgb(153 153 153 / var(--tw-bg-opacity))}.\[\&\:\:-webkit-scrollbar-track-piece\]\:rounded-none::-webkit-scrollbar-track-piece{border-radius:0}.\[\&\:\:-webkit-scrollbar-track-piece\]\:rounded-l::-webkit-scrollbar-track-piece{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.\[\&\:\:-webkit-scrollbar-track-piece\]\:bg-transparent::-webkit-scrollbar-track-piece{background-color:transparent}.\[\&\:\:-webkit-scrollbar\]\:h-1::-webkit-scrollbar{height:.25rem}.\[\&\:\:-webkit-scrollbar\]\:w-1::-webkit-scrollbar{width:.25rem}.\[\&\:not\(\[data-te-collapse-collapsed\]\)\]\:bg-\[\#1E1E1E\]:not([data-te-collapse-collapsed]){--tw-bg-opacity: 1;background-color:rgb(30 30 30 / var(--tw-bg-opacity))}.\[\&\:not\(\[data-te-collapse-collapsed\]\)\]\:text-\[\#169B81\]:not([data-te-collapse-collapsed]){--tw-text-opacity: 1;color:rgb(22 155 129 / var(--tw-text-opacity))}.\[\&\:not\(\[data-te-collapse-collapsed\]\)\]\:text-white:not([data-te-collapse-collapsed]){--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.\[\&\:not\(\[data-te-input-placeholder-active\]\)\]\:placeholder\:opacity-0:not([data-te-input-placeholder-active])::-moz-placeholder{opacity:0}.\[\&\:not\(\[data-te-input-placeholder-active\]\)\]\:placeholder\:opacity-0:not([data-te-input-placeholder-active])::placeholder{opacity:0}.hover\:\[\&\:not\(\[data-te-select-option-disabled\]\)\]\:bg-black\/5:not([data-te-select-option-disabled]):hover{background-color:#0000000d}:is(.dark .dark\:hover\:\[\&\:not\(\[data-te-select-option-disabled\]\)\]\:bg-white\/30:not([data-te-select-option-disabled]):hover){background-color:#ffffff4d}.\[\&\>svg\]\:mx-auto>svg{margin-left:auto;margin-right:auto}.\[\&\>svg\]\:h-4>svg{height:1rem}.\[\&\>svg\]\:h-5>svg{height:1.25rem}.\[\&\>svg\]\:w-4>svg{width:1rem}.\[\&\>svg\]\:w-5>svg{width:1.25rem}.\[\&\>svg\]\:rotate-180>svg{--tw-rotate: 180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.\[\&\>svg\]\:fill-neutral-500>svg{fill:#737373}:is(.dark .dark\:\[\&\>svg\]\:fill-white>svg){fill:#fff} diff --git a/assets/iupgz4ve 1-2aa14036.png b/assets/iupgz4ve 1.png similarity index 100% rename from assets/iupgz4ve 1-2aa14036.png rename to assets/iupgz4ve 1.png diff --git a/assets/jina-85da331a.png b/assets/jina.png similarity index 100% rename from assets/jina-85da331a.png rename to assets/jina.png diff --git a/assets/l_d_border-7d597197.svg b/assets/l_d_border.svg similarity index 100% rename from assets/l_d_border-7d597197.svg rename to assets/l_d_border.svg diff --git a/assets/l_g_border-444f9075.svg b/assets/l_g_border.svg similarity index 100% rename from assets/l_g_border-444f9075.svg rename to assets/l_g_border.svg diff --git a/assets/l_h_border.svg b/assets/l_h_border.svg new file mode 100644 index 0000000..b6d0399 --- /dev/null +++ b/assets/l_h_border.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/assets/l_m_border-c9ab541e.svg b/assets/l_m_border.svg similarity index 100% rename from assets/l_m_border-c9ab541e.svg rename to assets/l_m_border.svg diff --git a/assets/l_p_border-b5b252e6.svg b/assets/l_p_border.svg similarity index 100% rename from assets/l_p_border-b5b252e6.svg rename to assets/l_p_border.svg diff --git a/assets/l_s_border-2cd8d94c.svg b/assets/l_s_border.svg similarity index 100% rename from assets/l_s_border-2cd8d94c.svg rename to assets/l_s_border.svg diff --git a/assets/ladder.png b/assets/ladder.png new file mode 100644 index 0000000000000000000000000000000000000000..76ab1de4ef0009860d928b5d360603da113878f4 GIT binary patch literal 987 zcmeAS@N?(olHy`uVBq!ia0vp^-V6+kQ#sgxtZlqJj6jOBz$3Dlfq`2Xgc%uT&5-~K zG8PB9J29*~C-V}>VM%xNb!1@J*w6hZk(GggxxmxKF{Fa=?VW`aj~WQDI=(zLQEP+m z)#LklZT3j(&8e#Re&){WM@9 zu*uf=`y=7gTt~og-S)?zDA3Us7*_Cxak0MLMnpW$EB^NA;INL!e~h~Y#8}(hCr<(9 OMFvk-KbLh*2~7a;JSC9; literal 0 HcmV?d00001 diff --git a/assets/laddermobile.png b/assets/laddermobile.png new file mode 100644 index 0000000000000000000000000000000000000000..0a74d33d5979a81f58385cdd38db17f47453ae1c GIT binary patch literal 1881 zcmeAS@N?(olHy`uVBq!ia0vp^-V6-PZX9et)>ez+l|YKKz$3Dlfq`2Xgc%uT&5-~K zG8PB9J29*~C-V}>VM%xNb!1@J*w6hZk(Ggg?VYEKV@L(#+q(-V9yJhPb$oehqSglA ztH<~A+U$|mn^P5W%eZ*G{PQ_`D}F@RsD&vE3b^5Z+~g;7Q(2S1@cQkG#RuQ(XbTK0 zc*D3@-)`d?2QYk4Wj(L>+oOY&L)EWZ3;n) zq)3sZO0Gxn%4Ag;)+VZOW=3#Keb(W$Dw}os2*y1e2m* z$8w<<-K#m5^?@)MQ_`>~Mk%MTT!x;(SQamex-_+Rpl>y8?ApplDu`p{!MGPji4A@& zs-x0?<Es)^GomL~|0opuQ;*Dz;Qp!uRJ>(&Y<&ku;P0VVCAWZ5=A%WLk*Y2G5vnS7$Qf qsmM=dxY8UfGStAgmuA3)gt8Byo5APGvr?-70000 + + + + + + diff --git a/assets/r_m_border-19f64874.svg b/assets/r_m_border.svg similarity index 100% rename from assets/r_m_border-19f64874.svg rename to assets/r_m_border.svg diff --git a/assets/r_p_border-c96764d5.svg b/assets/r_p_border.svg similarity index 100% rename from assets/r_p_border-c96764d5.svg rename to assets/r_p_border.svg diff --git a/assets/r_s_border-b735965e.svg b/assets/r_s_border.svg similarity index 100% rename from assets/r_s_border-b735965e.svg rename to assets/r_s_border.svg diff --git a/assets/red_add-5e4845fe.svg b/assets/red_add.svg similarity index 100% rename from assets/red_add-5e4845fe.svg rename to assets/red_add.svg diff --git a/assets/right_key-599b096e.svg b/assets/right_key.svg similarity index 100% rename from assets/right_key-599b096e.svg rename to assets/right_key.svg diff --git a/assets/start.gif b/assets/start.gif new file mode 100644 index 0000000000000000000000000000000000000000..33629f270e36ca8f06c981f5c58307750771f160 GIT binary patch literal 43649 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 literal 0 HcmV?d00001 diff --git a/assets/terminate-icon-8d639348.svg b/assets/terminate-icon.svg similarity index 100% rename from assets/terminate-icon-8d639348.svg rename to assets/terminate-icon.svg diff --git a/assets/tracks_auth0-0d6005d9.png b/assets/tracks_auth0.png similarity index 100% rename from assets/tracks_auth0-0d6005d9.png rename to assets/tracks_auth0.png diff --git a/assets/tracks_auth0_back-416e3678.png b/assets/tracks_auth0_back.png similarity index 100% rename from assets/tracks_auth0_back-416e3678.png rename to assets/tracks_auth0_back.png diff --git a/assets/tracks_auth0_mobile-363b102e.png b/assets/tracks_auth0_mobile.png similarity index 100% rename from assets/tracks_auth0_mobile-363b102e.png rename to assets/tracks_auth0_mobile.png diff --git a/assets/tracks_fresher-06a87e97.png b/assets/tracks_fresher.png similarity index 100% rename from assets/tracks_fresher-06a87e97.png rename to assets/tracks_fresher.png diff --git a/assets/tracks_fresher_back-3317338f.png b/assets/tracks_fresher_back.png similarity index 100% rename from assets/tracks_fresher_back-3317338f.png rename to assets/tracks_fresher_back.png diff --git a/assets/tracks_github-5eb60d75.png b/assets/tracks_github.png similarity index 100% rename from assets/tracks_github-5eb60d75.png rename to assets/tracks_github.png diff --git a/assets/tracks_github_back-981ed7b8.png b/assets/tracks_github_back.png similarity index 100% rename from assets/tracks_github_back-981ed7b8.png rename to assets/tracks_github_back.png diff --git a/assets/tracks_github_mobile-9938e4d7.png b/assets/tracks_github_mobile.png similarity index 100% rename from assets/tracks_github_mobile-9938e4d7.png rename to assets/tracks_github_mobile.png diff --git a/assets/tracks_godaddy-43de5481.png b/assets/tracks_godaddy.png similarity index 100% rename from assets/tracks_godaddy-43de5481.png rename to assets/tracks_godaddy.png diff --git a/assets/tracks_godaddy_back-1a81f32c.png b/assets/tracks_godaddy_back.png similarity index 100% rename from assets/tracks_godaddy_back-1a81f32c.png rename to assets/tracks_godaddy_back.png diff --git a/assets/tracks_godaddy_mobile-07d5b203.png b/assets/tracks_godaddy_mobile.png similarity index 100% rename from assets/tracks_godaddy_mobile-07d5b203.png rename to assets/tracks_godaddy_mobile.png diff --git a/assets/tracks_hardware-82edd0e3.png b/assets/tracks_hardware.png similarity index 100% rename from assets/tracks_hardware-82edd0e3.png rename to assets/tracks_hardware.png diff --git a/assets/tracks_hardware_back-6e2e916b.png b/assets/tracks_hardware_back.png similarity index 100% rename from assets/tracks_hardware_back-6e2e916b.png rename to assets/tracks_hardware_back.png diff --git a/assets/tracks_mathworks-8cbcbdc8.png b/assets/tracks_mathworks.png similarity index 100% rename from assets/tracks_mathworks-8cbcbdc8.png rename to assets/tracks_mathworks.png diff --git a/assets/tracks_mathworks_back-12b994f4.png b/assets/tracks_mathworks_back.png similarity index 100% rename from assets/tracks_mathworks_back-12b994f4.png rename to assets/tracks_mathworks_back.png diff --git a/assets/tracks_mathworks_mobile-27b59190.png b/assets/tracks_mathworks_mobile.png similarity index 100% rename from assets/tracks_mathworks_mobile-27b59190.png rename to assets/tracks_mathworks_mobile.png diff --git a/assets/tracks_mongodb-cb4aa5a7.png b/assets/tracks_mongodb.png similarity index 100% rename from assets/tracks_mongodb-cb4aa5a7.png rename to assets/tracks_mongodb.png diff --git a/assets/tracks_mongodb_back-81332911.png b/assets/tracks_mongodb_back.png similarity index 100% rename from assets/tracks_mongodb_back-81332911.png rename to assets/tracks_mongodb_back.png diff --git a/assets/tracks_mongodb_mobile-7a6670e7.png b/assets/tracks_mongodb_mobile.png similarity index 100% rename from assets/tracks_mongodb_mobile-7a6670e7.png rename to assets/tracks_mongodb_mobile.png diff --git a/assets/tracks_postman-c6800b99.png b/assets/tracks_postman.png similarity index 100% rename from assets/tracks_postman-c6800b99.png rename to assets/tracks_postman.png diff --git a/assets/tracks_postman_back-0e850092.png b/assets/tracks_postman_back.png similarity index 100% rename from assets/tracks_postman_back-0e850092.png rename to assets/tracks_postman_back.png diff --git a/assets/tracks_postman_mobile-44a1da9f.png b/assets/tracks_postman_mobile.png similarity index 100% rename from assets/tracks_postman_mobile-44a1da9f.png rename to assets/tracks_postman_mobile.png diff --git a/assets/tracks_streamlit-a8f886eb.png b/assets/tracks_streamlit.png similarity index 100% rename from assets/tracks_streamlit-a8f886eb.png rename to assets/tracks_streamlit.png diff --git a/assets/tracks_streamlit_back-1508cedc.png b/assets/tracks_streamlit_back.png similarity index 100% rename from assets/tracks_streamlit_back-1508cedc.png rename to assets/tracks_streamlit_back.png diff --git a/assets/tracks_streamlit_mobilepng-11e1caf7.png b/assets/tracks_streamlit_mobilepng.png similarity index 100% rename from assets/tracks_streamlit_mobilepng-11e1caf7.png rename to assets/tracks_streamlit_mobilepng.png diff --git a/assets/trophy_bronze-770ae1d8.png b/assets/trophy_bronze.png similarity index 100% rename from assets/trophy_bronze-770ae1d8.png rename to assets/trophy_bronze.png diff --git a/assets/trophy_bronze_back-ebfb6a1a.png b/assets/trophy_bronze_back.png similarity index 100% rename from assets/trophy_bronze_back-ebfb6a1a.png rename to assets/trophy_bronze_back.png diff --git a/assets/trophy_gold-90423f7b.png b/assets/trophy_gold.png similarity index 100% rename from assets/trophy_gold-90423f7b.png rename to assets/trophy_gold.png diff --git a/assets/trophy_gold_back-c7b1666e.png b/assets/trophy_gold_back.png similarity index 100% rename from assets/trophy_gold_back-c7b1666e.png rename to assets/trophy_gold_back.png diff --git a/assets/trophy_silver-734c74f4.png b/assets/trophy_silver.png similarity index 100% rename from assets/trophy_silver-734c74f4.png rename to assets/trophy_silver.png diff --git a/assets/trophy_silver_back-f0c78ead.png b/assets/trophy_silver_back.png similarity index 100% rename from assets/trophy_silver_back-f0c78ead.png rename to assets/trophy_silver_back.png diff --git a/assets/trophy_tracks.png b/assets/trophy_tracks.png new file mode 100644 index 0000000000000000000000000000000000000000..56a06d23b034716a6704c93a3b1a97ca64c10e23 GIT binary patch literal 59143 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 literal 0 HcmV?d00001 diff --git a/assets/trophy_tracks_back.png b/assets/trophy_tracks_back.png new file mode 100644 index 0000000000000000000000000000000000000000..5585e16fe834b764edca0363ca266934da0a3f83 GIT binary patch literal 28733 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 X`t28zbg98bYjn)b>u~v@i+}$g>k;}P literal 0 HcmV?d00001 diff --git a/assets/twitter_pixel_logo_icon_181924 1.png b/assets/twitter_pixel_logo_icon_181924 1.png new file mode 100644 index 0000000000000000000000000000000000000000..a8a041ec98b6673846c5c579ef3d5fccf2422978 GIT binary patch literal 784 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

    pbpLSf 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 X190^y7+eaT45B?<{an^LB{Ts5CriHC literal 0 HcmV?d00001 diff --git a/challenges/assets/AWS_logo_white_v2-1024x612.png b/challenges/assets/AWS_logo_white_v2-1024x612.png new file mode 100644 index 0000000000000000000000000000000000000000..98b057de4318290b9bdf61e138473a6f2428f28e GIT binary patch literal 207077 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

    jBcJCI*sOrlB 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 literal 0 HcmV?d00001 diff --git a/challenges/assets/Button.png b/challenges/assets/Button.png new file mode 100644 index 0000000000000000000000000000000000000000..593c912756e56c0928f9604f604cef16219dc982 GIT binary patch literal 6949 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 literal 0 HcmV?d00001 diff --git a/challenges/assets/Devfolio.svg b/challenges/assets/Devfolio.svg new file mode 100644 index 0000000..317257a --- /dev/null +++ b/challenges/assets/Devfolio.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/challenges/assets/FastRoller.gif b/challenges/assets/FastRoller.gif new file mode 100644 index 0000000000000000000000000000000000000000..b5503f0119fffb67cef5e535da7c6cf553cef2a9 GIT binary patch literal 199271 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 z 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%0AB;zC|(z@BocL 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


    1pM!YL}qH`C(G4JYmBR^ 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 ZF3q<~^X<}nyENY}&A0pimv2}1{{k#NhXMcq literal 0 HcmV?d00001 diff --git a/challenges/assets/Filecoin.svg b/challenges/assets/Filecoin.svg new file mode 100644 index 0000000..a092706 --- /dev/null +++ b/challenges/assets/Filecoin.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/challenges/assets/GitHub_Logo_White.png b/challenges/assets/GitHub_Logo_White.png new file mode 100644 index 0000000000000000000000000000000000000000..c61ab9d0582e487852d3afdbf22987208123591e GIT binary patch literal 31120 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

    !Rx<{oZZ>Owc;D+;aZB7>v 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 H5Ci}_M?+IZ literal 0 HcmV?d00001 diff --git a/challenges/assets/Polygon.svg b/challenges/assets/Polygon.svg new file mode 100644 index 0000000..27f9089 --- /dev/null +++ b/challenges/assets/Polygon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/challenges/assets/Replit.svg b/challenges/assets/Replit.svg new file mode 100644 index 0000000..742f762 --- /dev/null +++ b/challenges/assets/Replit.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/challenges/assets/Skull.gif b/challenges/assets/Skull.gif new file mode 100644 index 0000000000000000000000000000000000000000..97bd826b78ae1eb82e9718c61c262f432bfce536 GIT binary patch literal 923 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®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 RwQ-QzI7n^$N^KnZe*ou-If?)P literal 0 HcmV?d00001 diff --git a/challenges/assets/Solana.svg b/challenges/assets/Solana.svg new file mode 100644 index 0000000..7e4841e --- /dev/null +++ b/challenges/assets/Solana.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/challenges/assets/asset (1).svg b/challenges/assets/asset (1).svg new file mode 100644 index 0000000..ddf3976 --- /dev/null +++ b/challenges/assets/asset (1).svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/challenges/assets/auth0.svg b/challenges/assets/auth0.svg new file mode 100644 index 0000000..d302b93 --- /dev/null +++ b/challenges/assets/auth0.svg @@ -0,0 +1,49 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + + + diff --git a/challenges/assets/autho_white.png b/challenges/assets/autho_white.png new file mode 100644 index 0000000000000000000000000000000000000000..6c20582e26d833c7cff18c58a6b1f5414c8d998f GIT binary patch literal 9746 zcmd72^;=Zm_dX0#0s<<6)PRa~cbAmXT_Yhqv@}D5gp}0K-96+;he!@RghLD^-7Wph z>;3uR`4_(Dx=vpEti8`ZYpuQRd#&#pYKlYzR0J3p7(|~w%4uO>U`C*?bD!d(k1zMh z#L*{AH!Z~v7&T)wJLns18yQs@42-%Tgm+(X(D(Q*9}V3wFvuDH+c7_By+6jlV2J%B zC!^zSa?dStd6yk*O}_3Pf{@^1=@ z7=|;tYcY!$p36sJVeWnkw_iQMJpE~;#KbW?{aG$9W-&aQ-$Jp_4VY+X(9K0wSGp-I zM)2|Q`Y9~b{vUrOai_m}ArNj41WlD;W{di0!A2k=Zq}^ECG7s5e{0(`E& zETeh)N37s0F84Qce@$V}?yt9UPvctd?%~=Cmw+<+t+>;;Yw-ELd}#PH2uD8!Un)l_ z1m=V?H#7?xoNrExiK$^$!xcy-izI(VmYP7iZMDm(;-dzttv$`B4n44aN89rQfJx;=^ zf&ZKFFPSUxE@o2q$Gs%=R-LuAE}DY$0%=C|i8J)9{RaIOnJcwlLuU+?YOthF*80jP zqPd1st}hRfvQqcwg$`&nJwg`1UY4lc4JQ{+F9)z4rR|*z(3K|HjJ0s2@~ka++3qF} zp(Ur+HIxU0hS&F{)pa(zf3hUBOAu3c0`HcWTCw@}HtgI2e{KT@8g?Suq$ci{kF-lv zeG4qJyyOCO&z>sy(`5#;RA|Mlr<`79DRsa!ie1`zvAoyud~ z4mS<>gqHrUYl@-VC#j#`->z}{c`MPi;<_x0cS)PyC;IW z_+=mYEUYOK1p_Yk4XK3l=yZ>-3Jv)zwtq-H#0MtA3}|V_azteHIZabI&Tw#XG%xp& zR`8DbroCY{djpAI=Ij!N&1RCil`o~E$vL0f6Dr8&QS#cp35&o*q$5f}*jnlXziSr3re(*ltbj3yGY23XbEe*F+#FsR(dds1A z^~pKjYxq6`4TnpuQ}xBl=)Yz^>zEfb46%wX)*oDC+t`k@o%#8Q5w*LZ4x6@0UJ2^Z zfi^iYB$`!CFja6}P;+a*_D82c3`OJFVqR!Fir9Yw>Bi7IOu^+`A5D{#dORm>vYr23 z-;I&RK*`7Ih^?m_iskuWH-oepr` zoz(Q3u)zJa$$BfP6dXJ;0A2+_lTL+BH6w8I_U`N~*?TnvZONa%r%M{Y?=1UZbnK+4 zA$@@RH_mv4ws&)nH>IHQLA6 zYG!y{Hdv7)rX`|rW}79+Qn@X1@S{b8Y*&p`)UWTW<-+`F_Lru-LrW)%l;v zOBxBZ7*B@<#?8el^WUKo;^H6J?SNr(017wfv3-M9->Vu2kT%PkAamy1pHYb?=3XHdu<^AF9Ri^?oNE*x7?ZhsZ71MXChKN}|n;n60g=7N+iV zUa=S@OVUWmz#3)j!22T<$a)e)D3)FSK;Hq{a5~Ulv_q@D$ib)76R=mGavVNi@6&*u zl*Hc2){3p(XOx0jr&1gK8ynyY>d0~yvPyku{Zg<=N$PkvDxCOWelX=))O}y>D29Rs zh>}S+eRWuGr)>mb)s@E$L&jeR%XgA8scEc*jql7iLATp7mqk#EQj^YIkBlV?^;V+_ zKemSDuTM8fFTEcxl%G}9X)WJs5AC*PiBw2xv zzq*!m4Yx9doVBF;PU|-e$4xrQZxsYvG`9+_M6PChEKRiju5BFK+*+%(Gpz%;LP@CoOm@a*rS7SxS#dt;{q zEzy~9Ui-^3U9W48tk2o$$v0hQW(C67XDangQ9Sy31G2vch4OU;7NDkGYW{^_?ftAD zEMA9;r!_}rtIzQAs*D?qV(vQK#M^aN^MmAq;^Q?ExJ+7AD6g4zk6k#8n&UTL$rtWn zuDY;RTTvYQJ1x{H!yY`)fq)JQTIC?|G+375{w0(nz^DGGTZYx3EZ*TBUbYf6-uo+z zP;Ro@&1T$=7^NMFe`N3UuL$iBmZufPq)h}BY71T zgqHJSsb}FSHUjoIh_zz4B^+F$#`ZSK>2sIbv^pKHcYJe1PE2}N3@SH%etC7z^yK73 zr_0GvN%(mDyKd*V-8@7=sfPTc>$zPed7~dv%QzU5`xiQv_=qS~EuL7(c=dwnokAid z8Ew`-m7+^!0WLbIqn#cK9<$|4dR(a3r-yzb1ei0PEH$Bc=h0H*lk?G$1>h921 zQyn_Hvwr)vUhFon>zeo7txfi2u6+dOhhn|{_5b|Ow{6yZK?Yr%#;x9(C@T<=0-+ap`4?85A}W{-Dy zRQi12qxq=a*_?Ws*K>*t0Y`Ih+;?$X4$Cm2zL7M}Bio;WkCHycvAb(^dInu(dL69} zpu!vHD+cY*-k#7g%@>3^^os3lN;~GnDH2Z+IBDVKfESG9Em|Lb&=LkJ^bFQ$hJs6I zzdi9Dbl;gyupSso^h#S=?LZd0DT=NYK5^YXe?})NS7mA&7Is%jkc$^Xq0zc*`zaSV zLp+|)8?gboP$4Atu2ahq<^+yi?td>ek_m215c0b3$`o?as3afV$^IfMkAkrc#04-y z+e7zrOJb>~PAmrg0^C+5LM+JYwnz85JZDwrTdkrUu5q9I4hrxW(0?cCar$lQ;|)Y# zDau2fK0h=JD@@$qNjp^DuPsZ&(a1&GGq&{lBTX0bGIoxo!i$TiDIsB1R-e9>>HyWG zjrw{}gvrp(Q$1H_46KW{Wx$R!k?@V=|6*;r-JGU-i5U%-@O7W#zo@!-;Mm(@g2vP_ zN#@w$>Xrf)eh!J*1w33c6({`QN++io%SCib_&qS4{l2>yB4zrU9fK9Eg>`dPEM#KO z0e)kYCA7ldfp*v|l9Fn$sxX$4V5}QBc|##cyRa{GguPTfyMQ73H9AiD{{8!@Qsx?i z(jeQ>8`5V??M=3`az1CqN)^kY&@^%yPFCx}_lzcaq6w>Os*xy51(*KGJsI%UBC-Jz z-k-_|zOw$n<$o8kZmCRk$>DxD1+nfQE2&=a()yL(+bFgA-0@Fix?~2o=05pM5`M^w zB*=gW?_BLaac9&(y%lZN(8`YCaq(ItY36bJ#f-k`cMs95V{19{(GB<|g+L|@-zmP3 zsm!a6hr0|{HRq+{;H;4Oac}(v7ev+NQ2cD9L8n2FgVnGi`43U^BEk{;Pd^enNBA zcmF(yRj)!0kL;4mtWm-qc44EEDOg?P@vunda05QO&@T_{Vy>fPm*_4aBZsyVJ#*O; z^M@WyF+@Y2V1WfJ`s1`8q*rB64+pQ3mFO35H(oE~Hozn2n~tOxJP!+Mk6nHg4$_FY zX+cr`zma%8XB$agO}&RU`r0)Gu+*us?a!@Gu!t9;o)Vr=P-tv;j1A;Y_#RcpK5<$) zb)wJLL|e93;6E9Yod_YEfH!HWQf@bm?U|P=L@_4kmDNVOobm}T1&Ma*oR4UIHYmZ} zs8<}n8|Q#a%PAa=RZ5js^X_hU;)=19%7zWr5U)lVtG|89DJ-vLe}9~t=^vpxLg^Y+ z!XbNKeTtWU;heE7p4^=zlZCmxg&jqa+6?^F5`Rm~vf*iFFvnwW9h3j)*-==oYd<@QL`Q9iS;torj^Sw;w$sh{5Eh``bk--Q!HLz@ zIe|p%h_dXiSR<8@91U9YGGa1YUGD})i}#3--uv5rr+w)oYMjp6PtQc=JR^iIvi=zG z?4IwM`4Jwe8GtkG-MB?ejnyxLNDenR3GD_8GSA1JURCUb( ztc$uKp*fdkA}C~q%-=RUD4>;mwQ)kL z#*l0lpWAu&$kfD=xY(08h_=ObBT+x6{1P`^#BREZVa)uBoOZ(F75r+sIpIb!WI0fK zAvTL4`c{*B$~r;mM;}-{lUKI)*KeQax|O;~UJqg8u}Ut@(B{f{eYCE81f7wI`+aT3 zo3ir1IG!QAzG0T#-{Zv+)?lobwky;Nyc?%2#{LsJVaTmyrV-yhrEqj(q-0p%Y{Dc% z{&p6786Y`w;BzG`M_}lZ%Wm-375iHp&>BFvtjEV8{Fl2q;FD4stVc3xu=Y6*)LGzf zZ6S=Hq@#U_r(7P5VK*Qh*}?%?oZuGF4@0QZ4D0EzFGE!2ftFwe*1tK^@=}>XY=w`b zRJ09G>oDDy!d2g?&M%cw(Z@@9sNEV3HLm3GLRMlMY{sK}?x$JPGVrO>G$4~zOG`iY z2HUwwXCqTMjMtu~jH>vmra7++YD3%z#C>)_7IAT-8M@V8Ij(?Ld!B{Mfj=^Y995PB zZe!asTNza|r!E0)a%Q^T z1BHrF@VuQlJ}!;0y{@<7-|a}4E-=()JvmjL?f~jTuiCixHij}4O(?OD_GvjMdN2n& zE2Bgkjd$`enT}TeufM#1X1|V^_*%3*y~ATZ9!^dnQ1(7XJb5w%3pSI~Wxy z#HjXskJFkQWYG!fo4l?s%%Y;3{glWmwVt)LLKR#fyH2d-{L^VU-*2|jHLChY=}Hq? zAkf#tPvAN;)n zG%DN9w=I4QvDu?n?3joFIe$jDA)L`dL>D$x*%^K7+Qn=Nf&@i`&y?4WGQ5{guFl zOri6ao!?wv3FFOC8|X_nEd*%#`>DqBk8)IqbQl`VwT|QNsu+LwdTx4BsmV23ub{QKG zN&C4fax(MSpc|eRx2+PiLTJJDszLwS=xukRAO*X7C@lPf5sWEJ$}`AXUlUz?GPZp_ z{W9GK3_IN9W2!DPKH5gUCnU@gZd8JcclW&AKdmJM1(N&bMX1;r)c2J=@%D+yI5$_x z$5((^4@n*Kgh zk%yZ6%n|k6Wk(?t#BPu_N_$@NQRGddjg{z`$>6tVgvRJr8StBY^GHUs!>HoSLdv>`|HsN%*HQYio5&9WM{ou?t9X;p1 zfq@}5$KmT+INM%2Elq`Pq4*h)IP63X%>x^(`$OJ)ka;6&~w9j?}YX#T>3CT z+xpXiZy8O_eau&nF2;u1Bpn0wyvx1kO;H?~LU6WqNA0S9n&%pZCWhnZD?wjAXTlCF z;lc_BEX}@GoE{F#ajg1P(zlm~5U-BVoETFP3twy;0`j7j=l7ZS8k=|1LrL`;l%CB{ z!!8+i_ELEvX9_nOwiWTSOrh)N@7lCDFgrajSaV}&)pA9P8&N^TmXM0EEg6Hp^A(J0 zQ~%M4SUaxvz zJv-i*C}xBvJmNE#^DUT=rzYNVMf%a747fiC^oL*UO+wfnoeX;J@zioMEE-ug$n;9`DIFJ!U*tG+3_R$R>lQ!r819 z|M~q(g}wpKtHkEKgT@5+hM*lkD{y|g9H?)C3}xuS6!q9)ouZ9h8BKl(gIRnF518h@3Y3k=mW3rn3N&~EQ+?=1Z?(QEPb*1X(tS&q1FyfWeb9>l)TO^1+ zd8$;YUz5yn|B~x-UNz89NO3e~viTFKPw^;9!uJ_KLgnAKY-=g^2L&qc&~PFvI4wIN zF@=QO#Q_)a<_kqQK^fTWEy0$$y&+p4N&gBhPM-(R}4E%y7?-*aCiLcKKxNVG>abl21R-ObmQKHrU^2lxCfJ@g+wZ2Wu{lH z$^0ETBYm%IpAQ1Oj6EpbJr|iRpuJ;n2F5j105{p)S9}59>Xw|NL8*+_VcATPIzBzb zM52`%jFL5!l0t`@A=kN)r|YazLMlSUw8B9pl;T_mYK(oBq4W_XaJG~p`=5tv$s%Zl z;3!U@N6lO~NQ>Oga%3PN@YD@}qlQ|4nScbnAr%b<*T{kdcsPYB%L>?J=C@)tWZ+9P{Z<#q!8 zpg`f~r#613ZJR!F?q-hx6=r7C zZ-XGb0=0os1l78-Aa&Wqm3WN`O~g+~ z=Ebo4`mEzUsRQn>c25Hrjye(LN_0+Q8Vx9sN&wziG&{2I!CJv&aOGWjyRbI8?Zh0t zL)OJx{QK^w9tDs4&b%rthIExe9w2d(jwa(4PlOg4i*q`_+UPva#?tiaR%8N|0u9QN z>5D3XN9Jc40mEc!AySiw)M&E82Ai=#u|o)_b~x-nWBglBnU2R5XNfIO2In3{!uksJ z{<)$x)$IEk1?C();Tiae@ybJ-=MYAlvmF_O!~r9 zqQoswLeMcEG^|@@UaX{3YbL{k6GAe0aO8|AR({==jzBxAqMfbn@1-k2`-KD#0mI*M zP}1sL@A-A!3)toh36Fe_Ek;uqLn%CQ+2RZepIM5xR)Ve=6V?3;8D)Q*kTOvw`fRho z()5&GYP9hB^M5HQ!Fvl!ZzFj2XMei!t1OimIJrC+GftQ`=8si}^#!ZXK>Dn_dpqqq zlgcU5&+?3%!(CUUFM>j3)!SdpYhN0@gca(cZ40>68o5JZdEQL;?BSt5>ocB+>t+#c zTtbW?w_P_)9p&yU)H#zN8$>B7MarbOP{GagBr6*W>kq52bi*dcZxM`~W>&>I9|U6s z*{hGYR|iR6BN3ovHNd>~_|LY|458RBQsjswnIAr=yRd@PL$-fH=Le;duEz=+th!~6 zx5V{UG3b;4H8>6?mZrzISNm>%6@;2<%Rb(xW4^Cd~{aTbA)KX$2zkaBjbL|65qQJqNqHIe@_`SWNtQiEOktSXem~%HQ~q%;pSp zR1TKul*s48@65$dDiH>|o`%cR_VdwOr{oh}mdjvJiQWN_yo$>K_l~;GOdP%V_Hg~` zeDU(CmNXnnPq!`qHH2EOrUNBSo>wk2)#kr9C4$8vSQklL6<;);-V$$)#6i6F>3L3` z%zS@Vn$E*VYtZZ}(DdyZl=a2_{JTz#Sq3)YtpeoI1&1y?yEGbELLuNnrjjQ+rSIu9r`{5k*X1A^PeQoVj zVm~2Uz{7i5p_wG;yrk9_MfUpaq^!t@txVL>piAxHH3%;)@+p_ zXgaO#T{Y31-mhgT+d++}g$DJa2{0d56e#VJb^)k&lVfdO<>SofcK39Pr(JSI3l#y( zlL&iM0Yl%>l6q(aal_~x_Y=AYRsVvU)0RbCd?G?p=+3uKNqxylFKQX1Mja~wg{ti& zqXCc9eR{Vv;@2BnxuE&Ra(>V+Z&~7%Ix6yzTOtZGTf5SP+62e5lGsN3En-pddD)+X zeY;)~FfxpwgV|1Mrbb)8Xtk9!GE&EaroE=m;)jIVOocsHLLyZ%5(V=hWOz@LhfX3y z9kH>L(gxG}Uef%Rql&_@K{GJKL>Jz*lj(dm%&Xl2NLP|Q+zV<7U>v2P3o{^YlKC=u z#f4QL@A<}HLQ>Q#mUk7eNhtXLoZMTd2A*=cH#U+Vq3I#~jl@4WBiRy}4|mGII?*fz z1Br=$MsnWHbW)x%vtlOEOKqN0VdGMBSp<)f>jD>NXN73!r}NX~-ks-{vUbl~{LAO( z(YqFZS}^pw{kFF2*8Ot6SiBPVj>qvlsDy5hWiObsa%q=5YFyGF)qtaJCo;RDU~Y3m!H; zj(BbACnMC^A>$R$EE_m@FZNNzdvP+@do$gp%w_eR&Yu^4h!41lQT&uN81e|z?!4iC zg_`nlu)GGhJrBBM<@_V5J#l#tfA{c=eIK_-^?4MlPL-UP=YX4;Sq#!710eF=>+j$f z&4ia**b6UQr!}i;^mCcV^lf5_@ps+{cdJX?e+ z^_1{^;7Nt0QA?fH$=MT6C;@2-Yu()x%Jx&EgKtH$bQe2-ui@mCK9lJ@DYM0y39_z( zJTSXDDh6in|9b>SKQgH5|KyU|b*F_oAu@5djwxo^krc*IBcvA2li~oj%At5>&&H+H zwM)lWnsE9JS`#=+AzHu2jFTmDc-&HIdi$4p3eLuwC1@xpEOwN_DMa2!^x5rKNv6fW zIob}D-_o>@%qtnq7!r%&NeQrw{9lhIP1f1MAhjd&rod~0Mt^-8JY2M7$f^SI(3iSa z`zXVzsg7p=8jR=}G*Mr;0Z$ngD_@tl={HbFTrEM5##~?+ zxbjp=U#!xnl+S{_aOjvm;%|*f2P=6c2|%2Ao_UA|JYrxs-`--&hkmK2=PeEm1|Mh* zd!Cd|F{wnQ_z4cdpwyR`x|q=aD=nf782zv6i0}Wosw3s#?MDpxuV4z59R$p@c;k- literal 0 HcmV?d00001 diff --git a/challenges/assets/avatars/aayushi.png b/challenges/assets/avatars/aayushi.png new file mode 100644 index 0000000000000000000000000000000000000000..906848ed561010bf9c342f2eb4eabdff3485df91 GIT binary patch literal 45600 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 MQc99_;wB;g1I8~qvH$=8 literal 0 HcmV?d00001 diff --git a/challenges/assets/avatars/akshita.png b/challenges/assets/avatars/akshita.png new file mode 100644 index 0000000000000000000000000000000000000000..209238b8f0a2226ff4529e95fb561a28008040cd GIT binary patch literal 46028 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

    uh)Be2?>L5_lbLlQDszQ9Mw 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

  • ;^^IAAsvD@kZ$$=R#5 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 + + + + + + + + + + + + + + + + + + + + diff --git a/challenges/assets/borders.svg b/challenges/assets/borders.svg new file mode 100644 index 0000000..0889317 --- /dev/null +++ b/challenges/assets/borders.svg @@ -0,0 +1,4 @@ + + + + diff --git a/challenges/assets/card_border.png b/challenges/assets/card_border.png new file mode 100644 index 0000000000000000000000000000000000000000..e774e5baf5473acb1848f6548faaf7684024525c GIT binary patch literal 13438 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 literal 0 HcmV?d00001 diff --git a/challenges/assets/d_border.svg b/challenges/assets/d_border.svg new file mode 100644 index 0000000..ded002e --- /dev/null +++ b/challenges/assets/d_border.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/challenges/assets/d_t_border.svg b/challenges/assets/d_t_border.svg new file mode 100644 index 0000000..69c1b57 --- /dev/null +++ b/challenges/assets/d_t_border.svg @@ -0,0 +1,3 @@ + + + diff --git a/challenges/assets/devsdungeon.svg b/challenges/assets/devsdungeon.svg new file mode 100644 index 0000000..f19c893 --- /dev/null +++ b/challenges/assets/devsdungeon.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/challenges/assets/dotted-box.svg b/challenges/assets/dotted-box.svg new file mode 100644 index 0000000..bf6146b --- /dev/null +++ b/challenges/assets/dotted-box.svg @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/challenges/assets/dotted_borders.svg b/challenges/assets/dotted_borders.svg new file mode 100644 index 0000000..c18b6c5 --- /dev/null +++ b/challenges/assets/dotted_borders.svg @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/challenges/assets/echo3D_brand_logo_2.png b/challenges/assets/echo3D_brand_logo_2.png new file mode 100644 index 0000000000000000000000000000000000000000..aa3fde9e74712616c0a2753f140eb460e5421adf GIT binary patch literal 22301 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 literal 0 HcmV?d00001 diff --git a/challenges/assets/favicon_io/favicon.ico b/challenges/assets/favicon_io/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..24128ffb30baef8820861ac8fb05b8cfd66a8366 GIT binary patch literal 15406 zcmeHN-BVk~6~7V!U4f8v#W%!32?A4P2)K?-L4ZwMKP3-s-`vzmUNVz5j{6ov_z+;n z?o6kxJ5x7lonZIh=yaO5{vURnar$D$ekc@UZGXSBclCvW@Nji;XSg#vdp~yf{Lb04 z=bSxzEh}I(Sc!y%I%RzrvaHjVWu;R3dDyY6b-WuJbH5K+*1tL|YZz_N1wHh8RL^@Y zp#w&ivasLI@$l){Sa|%r9eVjc@$jj0=y$HUaqu7U@Z@Z*G1#V~IbR-BkUFkChXdQNtZK6yB?ZJ(=4Z!^y_J z)_0$d_1;x1Bi)~?f#en3-;ptD_qQ5=bBldX^!?2p;|sYTY+v4~g`e1*aCVh++20h7 zcP#$FQ+(!p?0J#KtI1EcGo3dDH?fa&|2f|k{n_8qF|cQ6`FOIiGy2nirV^J`GBT|q zp?=8zot;=Xd%jj*nZM?@w~n`8&$l<9SHVC~p^s{AN@0v&Y~j9PuQ4cJ(#>@KUPbL! z)s-t(R6|39T3NWI`kjwz@=yAy#IJY8de;SaAP^AxElsaL7e1;UGm-lluaEz35>1hg>N%uMWn(;YLX6@}MGt=R)YTB6;%2^cJCl4-Y7HhmK zVNYy2_GF&#Tns`xVV}mkEWTwo*yq56F@UCx@gmv$K=RXkGIDk^-L{xVQN*C-U~R$= z=AFot;(Oh0+5-&fFnMw5il3mb7;0aYd(s14*pUGI$B%?Izqd8NDHz!IU~|!LQ=S}C z(_I1WH8tA%mDD1G$Rsc{!k10CZ8SEvXJ5bi%gh1kYu{~rug0+M z(q4y8=6B*FuAB$*uSH+S5ku`)%dn9?W2A%YAL$z%SjuzUBJU;!Db9!aHU|AnMrJm> zv;iD%wC77##)fva`mSO-tcL^YK6y8n(SemRIU9aUYw8Gf^5ARF&}Lma2kU}C>tc0% z^lt8p7&w=R`8GHEr@! z!6w_8KHk)je}Vr+;lF5mwf(0baA1oEl5?K&U+{mhrP>a!sn>hH0IjU+dn}1#!KXaa z571wEx%RdHn-QBf+H;$0TWE#D;R0>ax5E+oWSJLl^k1(#%39BP&RyGCq4n_LLuD|q z{_f$wRd?b|$mcH}t$(xbjsJ!372C2m{n4JkdPLu>d-~s1tTXzzuVn5Sa~R$!`-1$T z7v9mY^uM(AV%vA=p3y(*#_Qdm=acr-0b?JGD3_4|{SWL7{Hx2Ki-G&NKtcCMy8px& z(Sz8}(AP4cO`~lq#Xw%U4z>N6!Cu;X+6INOKg2*CWDH0-m?ARwm~TVd)CF4v-%9^l zS~%bQZrawb=H7-eZDsLx&r?7AM5E%m zuK@BgXHb^ia>lZfF+0@v*bcp

    _E;^%>g$6>+oRK5)$r^={&9;_G;Le6`rOjL*6= zLVpVSz&Ek&*i%oD|NqRk-Z+-9rye`@G-B=PJia|84*`Elm*WFR>&`8(9Y1Lpyts7owc%;hEQah@$merX`N zfWGf+;SA?nmj}*My)Mxi$od*-cDB5Q_-FaqIkNrt1&#j^BD)f3D*8DdE8m z9V^V2=5xj6h4}*JjHjP*d;qVPUn|3JWX;-~J-&wXM;7uh*tRNqLLMTGDPW%xU7_CS z_T;lTUq0XuIQIA)=se;&)w-^8zpr)uQS!db|C)Q|9?65q7V89S9M3vGRBW>*JoqGk zOl_vA+4^A*cz8^`B|h$#bpBH3XG`xn4?34L^OR@K{Mn4hVGVNJ&9;i#?(Fgq@cwGC#uk+=4P6pf7zz5H!bsk;k zRr&3%oY}va`1PDnWXWxCV^+aPY&x`ZjE6&F_qsu;Va}@QAA6)#b(lIAIdA%(% zyTd$9HEg^2DC$j7|L?#@Tmt?H#7F6B`-Kvkp5BTtL+)$m2c5sIsvEWNYx{Fky&V7G z(D3V6VyWud+z)=*CEDRbkiQ$tP5n2WT+AEWNIfz|pE*|Q44+LKp2@5-_QpPd=k>?A zxA*HRi>2wC$OG++DaKD#&I9=~eho2qzBBrhuVFVo^*$yC-B>}~@SdFM z@I4Fcm4d!W8}8S*=hXSudZDW|Zl;OyqYhAyxfV~AZymAJ=gaz zz_pf+MXVFO)B(hzJUc|;{}DOFYS{nc%n_iEVP^R$w^u#fh?Z2!*v6xSs89{g{WwuLgKz6T)p*4EZt=YZ59zK^#IxO@2} zKmAwP{+Dty_-XSs{ux=P(P&iNzkgrN&(Eu1Q2!4~?E3vTYIW(B>WH2dKj35hQ-;4Z z=TnKFGTzwOP`O-A{zcVmSIeI7Z(RKn_-BP@9e?@~zm?%H=6u$~=T^%9-o1NjZfP-%>Lc{f1q=20nwGFrlwu?hdLB*9uVC-1pH@A{!sfV z{wt&Zohrw#?Tpcz%9=cK?f8rzFqr3-m}gi1foIQcu$`qj!%EzI=KnBk(-t`==i>NJ z8uot@=LUYopP4A)-A9ZUphJ27uP8CI{6BCT|84&g@x0C%R^lgi<`er99}0HxujuVch#w@E zNFHP!+`S3c0(FTxURug^Ci}qOJ$oe!gaehi0xL0ADqw7cl RM-n)az>x%wB;bt%{s%n5UOoT- literal 0 HcmV?d00001 diff --git a/challenges/assets/flyingComputer.gif b/challenges/assets/flyingComputer.gif new file mode 100644 index 0000000000000000000000000000000000000000..380059c12c3e647b041bf1944a52a932b8182ead GIT binary patch literal 2518 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 E0c*~W!vFvP literal 0 HcmV?d00001 diff --git a/challenges/assets/footer.png b/challenges/assets/footer.png new file mode 100644 index 0000000000000000000000000000000000000000..4d9ebe91a15eed1e532186657dec5cd8ca2ff2ed GIT binary patch literal 22767 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 C`$Sv- literal 0 HcmV?d00001 diff --git a/challenges/assets/images/discord_logo.png b/challenges/assets/images/discord_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..d495501f37bbe84904879ed06cbb11e8fa415543 GIT binary patch literal 1207 zcmV;o1W5adP)l>)xiDEQRr8tkYL#+fyjZFxq4#pE@f3c=aU49c zMsB=P?yk)kV6jwf!vb6zMjk*9I?xveZo&cNaVeIC`fvCO<5-3FV~xWY#b05KP=Q^TQK!qSYr3G55q9XN!yF<2=V z{^QMj1JH}H32OsnuFf|-xEEuw&awyrxCobo2ixP@>>6#jAl5%0d$AMM*nE8thW8fZ z5j>0~bCe5zU@M-(pII*^Q$Fm#I@}k#o-64Io9hCDlK_VIx^Q!yBbke8(i6730?SDr z?7({58A&qN02hVr^;s__8Ska_?YufiKNpgO?JZcIdNIlDU}4m(jx*ReIs(JO^aPVY z+KH>tJ;z5|@2I;2OJ}iE%_Z??Z)DMuvjE_dz|xCcdc^Hm9sTl5%e=tSp2lDjM_ij) z#m|tWI69H!BfU4aSX##LbEbv$wUF_X(VNGj#Vw9{n=~mo8*wO~iND?^07vm9KE&S< z%p0R_<)_)u*LVj*aePnFGEm;rM^F4!~i2p5=JKoR5dj*faohfvG=mFtWf}48$31mgWXkXE!iu=vWpy^inoWV`ilyqeaX(0!#NYs4!dp?(x^X);H;Ca{ zQ27^Upffc*_T*>K#FxfBr7y0HJ-7{pCIxpUIwwhfhJjm%n_TvG_J8Qi8sLl#oPti> zTisbFt$J|cba-PnYvr4egc=5ejSNI-xFfQ0HZp`aBfA$xMmM_R=FpbM^SCSw*Za6F zvayQSgFbad?Q5l;4dUJCzk|VwZi%YU=me|y1iSKKbZ4-O`=`ue(vEN)F2?WJ9)=3o z-@*i92%iRN?T$^|7@O{#vbkCelD6Xme3$JCy-`5#4v;-{j(cBByY{9GB|8OZB$aZZ z7T>LnY1W!LUO$E(P>F^xP$?H``3!YBQY=-s29Mi-D`QI4mLaV_22IMPEpqC(tVyvS zi#1kc$m#_41h^e|tx_&j>t=DKT&NaH)mQOZQ1i_(R_l+z-WJI+o6A+&F1O*rh{2yC zY|6pDcauBblvTuZb$;CPSH?JE6c1s4rCgX5jSAARD#mPGcsi!62QU&${hXXu`3GxN VM!*HDM!f(4002ovPDHLkV1j| literal 0 HcmV?d00001 diff --git a/challenges/assets/images/insta_logo.png b/challenges/assets/images/insta_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..07c6ef0631f8a7b878743ae7cd16faa33cf7c67e GIT binary patch literal 2227 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 BMnC`n literal 0 HcmV?d00001 diff --git a/challenges/assets/images/linkedin_logo.png b/challenges/assets/images/linkedin_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..b83090eee33775e3a4056db80a5ef7c22bb26b1a GIT binary patch literal 1360 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 DA0i>> literal 0 HcmV?d00001 diff --git a/challenges/assets/images/tier1.png b/challenges/assets/images/tier1.png new file mode 100644 index 0000000000000000000000000000000000000000..7d2c9bcd3bc7c490c65356c4f516aaf2607fd779 GIT binary patch literal 2761 zcmeHJYgAKL7Cy01kSflv@KC;=oSfK$S#K&AwV0)avXB99~kfrJnOJ!$*5YjxWBF+aN3y7%0D)>(Uf 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 literal 0 HcmV?d00001 diff --git a/challenges/assets/images/tier4.png b/challenges/assets/images/tier4.png new file mode 100644 index 0000000000000000000000000000000000000000..794e1af3c351e3404f77b3a1be91312221da1bd3 GIT binary patch literal 2834 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 literal 0 HcmV?d00001 diff --git a/challenges/assets/iupgz4ve 1.png b/challenges/assets/iupgz4ve 1.png new file mode 100644 index 0000000000000000000000000000000000000000..858261f16de8ea744e4aa3b207b5889a28f11282 GIT binary patch literal 123552 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 !obD)R*JW$Y$G*fjwn*ZodTX|d- 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 OfBW|6Yi8`Wy7)f=6`r^N literal 0 HcmV?d00001 diff --git a/challenges/assets/jina.png b/challenges/assets/jina.png new file mode 100644 index 0000000000000000000000000000000000000000..635aab43f42bf819fd24d148a71b783b287bfeca GIT binary patch literal 8148 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 literal 0 HcmV?d00001 diff --git a/challenges/assets/l_d_border.svg b/challenges/assets/l_d_border.svg new file mode 100644 index 0000000..638d78d --- /dev/null +++ b/challenges/assets/l_d_border.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/challenges/assets/l_g_border.svg b/challenges/assets/l_g_border.svg new file mode 100644 index 0000000..01c5af1 --- /dev/null +++ b/challenges/assets/l_g_border.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/challenges/assets/l_p_border.svg b/challenges/assets/l_p_border.svg new file mode 100644 index 0000000..babfb9d --- /dev/null +++ b/challenges/assets/l_p_border.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/challenges/assets/l_s_border.svg b/challenges/assets/l_s_border.svg new file mode 100644 index 0000000..0472afd --- /dev/null +++ b/challenges/assets/l_s_border.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/challenges/assets/ladder.png b/challenges/assets/ladder.png new file mode 100644 index 0000000000000000000000000000000000000000..76ab1de4ef0009860d928b5d360603da113878f4 GIT binary patch literal 987 zcmeAS@N?(olHy`uVBq!ia0vp^-V6+kQ#sgxtZlqJj6jOBz$3Dlfq`2Xgc%uT&5-~K zG8PB9J29*~C-V}>VM%xNb!1@J*w6hZk(GggxxmxKF{Fa=?VW`aj~WQDI=(zLQEP+m z)#LklZT3j(&8e#Re&){WM@9 zu*uf=`y=7gTt~og-S)?zDA3Us7*_Cxak0MLMnpW$EB^NA;INL!e~h~Y#8}(hCr<(9 OMFvk-KbLh*2~7a;JSC9; literal 0 HcmV?d00001 diff --git a/challenges/assets/laddermobile.png b/challenges/assets/laddermobile.png new file mode 100644 index 0000000000000000000000000000000000000000..0a74d33d5979a81f58385cdd38db17f47453ae1c GIT binary patch literal 1881 zcmeAS@N?(olHy`uVBq!ia0vp^-V6-PZX9et)>ez+l|YKKz$3Dlfq`2Xgc%uT&5-~K zG8PB9J29*~C-V}>VM%xNb!1@J*w6hZk(Ggg?VYEKV@L(#+q(-V9yJhPb$oehqSglA ztH<~A+U$|mn^P5W%eZ*G{PQ_`D}F@RsD&vE3b^5Z+~g;7Q(2S1@cQkG#RuQ(XbTK0 zc*D3@-)`d?2QYk4Wj(L>+oOY + + + + + + diff --git a/challenges/assets/linkedin_pixel_logo_icon_181925 1.png b/challenges/assets/linkedin_pixel_logo_icon_181925 1.png new file mode 100644 index 0000000000000000000000000000000000000000..0ed6023cc2a1a0746d4493f50513624e5693434b GIT binary patch literal 656 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

    2u(9bD^lG9Hq}J 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≷AG4xlL|%)0^J} zXE?<*J6h6~*0iTZZE97!v(KK5v9E>gYdbqz+QO=}XUlAEb-P>M_LiBqHCt^1 z2wbqO*0{$-ZgQ2o|6Jxa*SXJ)3UQwnTk2M~r^3ZRI!(L% zD{s%ByI%IT*S+tBZ+zuDUvj3GXV%4Ue%X0m{`U7i_8r-H1w3E^7udj21F*>ad%OgP zjJ^+saD*j1VG38+!WUj$gEyvM4tIEx3kGqBL!)7h9oWPtMsbQ&TqY7{OvIvV@xd@W zV;a}k#y7@sj&;0aKE>Ez9tLudWB6hs7r8P%F4&5dyksUf*~!>Jvb>DExG2Yq$5+O3 zmbJWPE_d0>U*1TS;U#1;msxmIMsu2>C1zM zL27zdiAHs*fre>T_t(_2qI9ffJ!@JY_0^neHPUXqDN^^^*S`jKu!TKrV#{sUno@PL zl})c)H(R*J&Qz_XJ#A`NyOhwrle0&M?K&0P+usIvxWzqga+e!W+^*BI)xGXdY1`e8 zMK_(SJ#Tu~+ul5kcbncVuza)0-2Vo6zy&^Vf*0K2U+uS=*u8Lu<7nRxe`>;Ob#IDS z+~OC;?6@f118_w#$Xy_W~-8Y|t$cN4C zr9XY@V;%ahasHdG?;7KG-}~POfB3~eex_`HUdu=S!n42r?wOx8)rWul#K9cY!5s`W z8Uzax1VTiU!6D2vAM^?rM8YIgLhmv{uOLGFXu_`G!6~G|Dzw5Y#6tLrLaqqHE+n%j z1jB9H!mL=rGBm?8gsU;+m@r%-HN=W6gu^(L!#SkGI;1K$#0oFeLl0xaKI}L=vpC{&Lc%p)Wu!oML0smTNDjcgvDVb#$q(a zV?;)`kwsc$#>E20XVku2?8RxM#%fHUUxda!BE@9n#%}b+Zv@A1%$8+r#&R61Y(z&3 zltyc0$98l_&B4ZW)C^%1$9lBKd&I|l)W;4XM|1Q?os!3Zgu-=v$AUD-gRGi(6iCaU z$9;6jhlI$8l*ozPiGKXYi)^Qb)JR1nNQCsrj|9nuQOJ#4rB0;ClSIjsRLPZO$pIuq zjD*RIB*~c^v5pMMo5abS%sNt}$;oKQmITV66w09_%3-v~m_$lS>dB?#{|r>r$)|+M zs05RdWXi?($)d!{tklY_#8k}195}ng%g5v&!jw#_?90Hk z%*({g-(btJG)%_y%+CbP&=gHSb4Tp%*@tw&DXSz&8*7K9L?Ia&D+Gy z+>Ec%Jk8!b9Mzmm)`ZRBBu>DTO{Szx-BixyWX|Sv&c5PJ-;_?l0Zz#j&f>(*?0m}O zT*~Bp&hG@z@D$JSB&g_|&hr$S>LkqT)Xw&F&x7R7p7c)gq|f@a|Ihox&q6X!^yE*A zQqQ)m%=Z+~0oBF$q{;cr&jeM_1!d3%m7o3W&j_uT|I|zNB+v`R&_XoOnM61=xTU*nvexd8Joywby$k*L`K!hGjxR-OGO^ z*omdsinUlcG}wb>)`WFce0A851=*zP*KCy7i#6GkMcI_~zl_ybT;*6{_1KV=*_ky& zh^_<*V40T?wV#!L{AoRo>;r8r0oH)fL|8mEP&4URxsG;_c7lwcO-o-tP6@ig8{| zgx=~U-|{uz^VOp3#a{H(-qhvZ?}gv^70KP@|4f`k-}}Yi{MFwsQs4ER&h~xY_m$rP zCg5KQ-$WeW{Z-%vX5a>vo&NP--vnUs72pE4;0s2R1NOrNcHj>7;1332Wqip9X50xz z;0ngz6jos`(cnJh;1Gu47?$A~HW>&eVbe6>4MyP==HVWuk``ve7pCDMCgLJCVr#MC z8-C0jcHtfN;U|XTwWMDv?cF1`;w#4DEIy|ZR$`!K;vjb7C>G-}z78M`Lm}4UG*;s^ zX5$P=;w}!$FFxZiCgVD`W3QQF)WQ@dQBGlwgcI8*b zV@3|nJvQZ9w&h#KWs*SURQ|_R9>P|J0kcIbzOX!8~5f!@P{R=|T! z=#0MOg_h=qj_8jD>5yLCiKb{TwCDuHXpL5BG3ID;_GpoY>6n&ju_ft}4#JbZzm#6- zo$le5uIHDY>7W+sp+4D~wrLW?|7rHqX`W_k4EAY*25O>~>Zzt`ZZ+zoKER}2zol;K zt{&j0zUZi~>aiy4vi8)g#_IIb>g?lcuXbzi1#6TRYqO^7y0&XDMeDR)zO{C~wtnls z&fU1q>AAk^!Zz%~7SX)cYu4lI=JRX7hHTOmY^5e_#J23q#%%Ib?8R=p#@@Zhj_lC> z+sWSQ%FgW5M(xzD&CTZQ#q;df18vckZLKA3wl;0m#_inJZMbCZ)@HlccD>l1?cpxk z+V1Py-tFX8?&XeGF7|EE1#ZX_ZsMkHkTq_{MsDWT?(OF8dhG4zX1eH>ZaS{+^7hs1 z{_O1T?)7Hx_IAbZ25;sQ|8KsVZu7Qpb4731R&V#_@Ba4hIE3%`Ub*?EZ}PtH0}s^v z4(|Q_?*@192lqM+9Ca zY}fW}C#`08cKw3(cawH%C-;yn_BB6tZddnpXZMEk_HW0paCf(HFZX(fPir67P;U2q z=l6c6sdtC>>XLVDqj!5Z_;x&ZK2LXlXZVJ9cv%AYfRC+#cea8*_=}&$gm3hPfB25~ z_>T{yh?jWTqWE01c#KDRQPg-(=Xj8J`Im?J6cYK7cgB)$wUbZzoF~MUfAyA+`JV^+ zppQifr};~^|9Mu!d7W2!Gvs+-_j#d*`ly%s+nM>IFRPStv|!2kM^gZ`mh)K zvFDqrxB7F$dPYlnu4nrd^m=gzd$O1Nxu^TJG5fQ>uC!mYwQu{rpTD=C_qeb7!6*E} zXPLXl`^4XuM%H?{DuBm_{K%L5$*26vxBSb;{LI(<&FB2i_x#TX{m>Wv(T9A$CneHH z{nS_e)o1>2f5(m@;S5tZDNm&YU`T^6csJCqe;2 zhY~Gn^eED#N|!Qi>hvkps8Xj=t!i~>fUH`#a_#E%E7-7N$C52;_AJ`8YS*%DtMw|} zxN_&xt!wvgQviDR^6l&QFW|s}2NN!A_%PzciWf6(?D#R{$dV^hu59@-=FFNmbMEZ< zGw9HwN0TmX`ZVg)s#mja?fNzB*s^ESu5J4^?%cX}^X~2YH}K%XhZ8Su{5bOD%9k^5 z|L*)b^yt#3Qx}f+I`-_^w{u@Q;5+#6;>VLOZ~i>`^y=5MZ}0v+{P^=nrW)JCYx=#`6irk$~h;Ub=r9* zlzHm8Cw2t-`6r-(3OXpEg&KM&qKPWHD5Lc)`6#53N;;`md|G-brc%|oDW{!U|I{O> zp^7>xsRej?Dypffx+<%!y80@t9F;mNt+m>UQ>MA`uZ!d!Lr3GvBl%BMMef#}4;DHN1IN^mGemLTZE57(@bvw>4(~(O)IpvjGemUj@ z%Dp+~96$cKv1W_zsoJHRe(>n2tG+txt-H?Y>9NaRD(JQE+BxpI`)WJym@@u5@WBf| zJn_XFe?0QZE5AJR%{%`*^wB%kJN0{Jem(ZtYrj4B-7Bg)_~9p6J^4?*em;k@tG~XE z=)3{lPD8UJq zDS#G?koPjE!3}b-gC5MD|3WB2wOp`-|C%2PNpimxvT!FUd?5^D|0u&5lCFg|ykSgC zsKe`wu!lYj%MOEB7YY)wh(*cHl=d4XDpRS- zRl3iVu2f$rV<`Yn(h_{K3}qy9smopRvX{R6B`||2%wZCK}9x6l(j_BREqy&V_C*p$>g0L?fyqhEkMb2hC$aGwQL6 znlYaq{U}I7D$Y zp-@{_)U}c-t!{lQTqDZXxq|AfIxH(*A!Sz+YPGL^{VQMtE7-vjwy=ghEHU?5La{Qo zv5tLg_k75Gu7`%3zu;2$K+-Lr zZL_Q0?Q*xf-u*6k!zgBrR^DTPQtKRkIr@HPPmU*eyT&zL2zCD>Qe)Fr}h}pNl zIf*az-Ya0V0JwMLJure3tl$MRxWNv7FoYXeVBWE}!WOtl}Jc7<3$dF<4p*x(L&_#x}k&j&rQz9rL)yX_E2hGA!gF6S=W4J~CH; z{5TYcbHz?R5tE}VWjuXH9oJ(&raqvs6#Dkhj@C$nhqMKUwmqyJ-XGdel@IPE$dm+y4HeQ_0KG= z>s|9&d#UCyu17ZN8kSnb!#*~$sa)(42U}#n-f*)+X6tEFyV};iHny{^?QK^n+8XOM zxWg^(q&<7U-p*LEYqV@*r@P(m#_ziQdv1)CTfp=77q|1R?|t*T-~RqL!2NyievP}} z20u8v>iyn<^XuI)ig$kMQ@($bejo^jph;z*gcP6&o}h(YU`>%=ghb#+ zOdwIYpbX9+vB4lku^@z~AWh+5cZi@5{vZ$rp%4xs5h@W6at8_~p%U_z4rbzwoN;dNZ$ zMPwmG(IFn@q3GG+ILRSi|G*(Z`QcrlAt4r`As!+kCZZz3i6GjA8$Kc=3KSrsQzO=e z9!>-wF4QG%A}2CnCTde9ZpFvnp`$0!V^oAA zIl7WK1|%^4qbcztROn+T8RS#QBSSW%Lp~%#M&!sTq*LIdMP8(@AtWDBWK;MfLEe!- zhGZvxBT)jSP==)ye&rf* zB~fVQ51HjqNF`ggrCYuwT*hTQsijb0rCr`-yr88I(WTXRC0X8(SOz8y{^bqvrC#AffWXyW^e(ooK_NRaTXBDYsdJZUozQ=uXr&_uveQuL{HmKk&C@j(C zf$C0v0;q*vD28UJhHfYTm}h~0D2R&3gyv3r+9rfDsDq{`*PW>B*yo6*Q+INxjLs;H z)~Jm#riX^8juz;PQd4veB#WY`iVo?_1?lOyXpcrsh2AKWHmQ?7DU>>6j_xRxo@bJ7 zPKipVk(LgTb}7YeY3U&8l{(FmMyZ*eDVnCKnu_3*R;io9=9t20f|@9pa*dbX>ATe_ zIZ0@o|GrI`t|_1fs-O-kp+;VtzA2*OWuN-#kN%>bq79x#YO+0Q*NEw&>dT)Ns-|u# zr*^8R^4p;%s;FA!r5aSD`XZ&;sidx|sHN)GSZb->OQwD*t=6io-YTw^S*VUGuU=%V zlIf}HqN{2Rs}?J#4Xee#>aPOJtmdk-J}b0FtF&_0uJ)?6TH~^ARIrXDvQmt(eruj} zt3~l?wqk0GPAj^mtGcc$yJ}UnUMsxHV!3+GwsNAlP7Ju_tCZdA!6@szN=mb~tH2H{ z!4|B+3e&sBtHQS7zuHv2ZX&-LjJ{6niA8L|_-n&HO28g0$9Am8ek{l)QNk`P$)aG! z|H|saUZTYk48^wWey!}SVC>0KmRg3a&E71|=B&<2&&Zan&ko?sE>+47CCt`}%O34~ z6|GT`YtWk2x$Z2~My=FNE!CzWUH&ZAx?$7)N|pkt(jpAfhHY_u?X1Y`);h?>R;}8u zE!(!O+e%B%X06<2-q||soN6iAj*8gsZD-{zshDluE=bzGE#Vff;T|sHc1hgME#q=t z;6_TPTurX10Pf==$lxZf=YB5ehOX%H#^N@v>9XAB>ebNZA?AjP<-V>^ zwQgN8ZR#RP=Z-G!=C1DUF7N8z)t)Z!_FnBSN#vrc?D7cgCa+H&FOO*M@WNNk|Msr* zPA~OVuk{K>=?1U%hTHSftXV23^OlJ6jxR)ouZ}ox_e#yvUN8H$ulv65+h*_f&abYe z?~xR*u$nK9kT3s&lm6le`r5Bq+%EhUumK-10!OR-(k}zQnE<2K>f+)5-bnveFgH!` zXwmKiCkO#2um^uI2#4^QE^q^vFp+I=gWxZ>V(^GqunVga3zJ9yqc9MyuL$2T4(G5A z&nO9-un%7t4GV4r(_sv^@CzUD92K#M%y1A_iVg2D6i2ZXPjPYf@DE?HdNnZz5AhW$ zafl!>7=xAlk}T80RrI|J^ZAl<^#M zS@gECAP+Jj7qUFQaU3VIWBsvP)G@^J@lWWnB*PFS|AZgUF&Z1PCT}t)cQOznvLc7_ z8!|HVelML?a!yRLD$frp_rxWeaVC4REYC76*K+lNvMA>=Op$Uab0zq;a!stVFzXaB z>%=Q-aV*=iGA}bTH*?zIvMxt6K=JZgII_wXb1DzBHoFcs|Ca_+bB6`8GmkSlm$Nw^ z9W+a`IzJOQtMA=&Sa}ewEKTkA8SF}ajSU?Z7Mq5%rpM^COtwYNMLyxp^|An+nKr{_Y^hK{U zOSiO3+g3(zv`lYNM-T8pSD{IZG)eC?edTmed~;1Zu{ggpQ5UsQAGK`7^h_^xJ_hwz zd^GF&^g-}6RYQza9|TIHuu3B}S9i5ne>FZSHB*nZ_c--a-*gmSwLw%hTQiJW7erQX z@K%F0UDvf;-?c7@HCgX92$^*azq91NwLr8rVGE344@6u)@Lc0HV>h;AKQZ};}$r1okDH@UU8P-8Yczx8Y%V&XxndY|NAy{N4IoOH_ZUIa9?*c z5qDQWwFJkua)0-xF!ya+_H$FWd7n3Wr+0GxE_S!~SZQ~Xz4i>&Hh9?%OHK*H-ozfew*cizr_;=IE7cZgc=x8bi~l%~ z2f2`=hK9?ykrRrC1F~@kwr1zJlV8Y#b7hkI_>fn*m0vlQPY;YAIhRw;l!N$Z-uRP` zx$*7zc>6V#XStfMIh$vBk#{+q3&@uPw(%Y|ncsOz|3o=e&be8(xu5?zpa(i(ym_1# zdVlb_FQ4*N<2j?3gq|xUqEn@yPdcSnx|?sgp=bKgM7mP`vQIZUsE5R(8zrY3rKO)b zs;Bye6S}6iI(?KnPkMSzhdQly#HjNmtka~b?>evdx^%O;s|UM*dU%a@v6$C7va6Aq z=QpuWxUWAuv`70_1G}(SyL#lhO3J!PCp)(*yNREE2O(SbirRd0UW$ZPP{=nyvKh$$V)NA|3`efb38v*d_rSu$~4e6Rz(HtKvl^L)Jfyh19yG!{M8 zSH0D{?a?EBt4lpHGJQ8YJ-kD`L2^AYUcK3$J=)uB)@yyHlRYkaJvM`Vw~IYLx;-qW zJ>KWN-mB}{vwfl4eJR3yG0Q!-(>*-`ekks};x9hqdureNJ)9$cB?>+;6MnKAzB)>N zBQ`$gcfRMF>ElB_mutQtQhqC2KC)xJIg-8~e!lC!KI~^`=!?FQv%VafJ}RSrt*gE^ z+P)gbKJW*>@PFs*(|(Nm{uknYCF?$||MR{yBL5Z+zw}Q(^+RUy8~=tw{}U=dBr|`g zJ3lgN{}EO{`Io=>L*?~jKY@!s4{|>rdq1dyKQXdD4xYdL-#`94WcsUrd(%G)x<5b^ z5IB%vL4yYoCRDhPVMB)xAx4xqkzz#x7cpkkxRGN=j~_vX6giS)Ns}j0rc}9-WlNVY zVaAj>lV(kuH*x0Fxf5nZpFe>H6*`n?QKJO}BvrbUX;Y_9p+=QDm1zmoaD7yqR-n|IeR6hZa4WbZOJ4QKweDnssZ}uVKfQJ)3rI+qZG& z*1el|Z{NRx2Nyn^cyZ&$ktbKaoOyHS&!I<`KAn1X>({Yo*S?+hZjFy>HzcS z(Wh6xo_%}w@8QRnKc9Ym`}gtZ*T0{CfB*jh3{b!U2`tdS0})J6!T;)N(7^{Gj8MV} zDO`)Z3o*=4!wsF{$-@sp3{gamjw;c_6H!c2MTtgi(Zv^Gj8VoJX{^!48*$9h#T9w% z(Z?TwY>2}li7e7ct}0AY$t9U=(#f=rj8e)ekL1qEE3wQ{%PqO=(#tQw3{%W8$t=^% zGto>_%{AF<)6F;Gj8o1z|LLsL&O7nUQ_nT2?9=^kZrSCRVUAhmnQ5-s z=9_WOS?8U3?%C&`|7SB<=%J&+*XW~>PFm@unQq$YM@5cW>Z#!(+UlzXpjhjOGw#~! zuLas#?6Ju%+w8N^&I#il0`g7q66~aOp&X9&RwBhMsm_r?=kcZwe;SYg`mL3j~FBdf85s{cgB`%SPO?2WD zp%_IePLYaLgd7pEcoz|Fk&9jQ;upavs34A!i~-2v8M$&pHHt)sZG7Px;TT6b&XJBJ zapN8FhekbOrHp+v;T{1A7%L8vkcBklArYBKMJ|$&jdbKAAsI>21d@_a3F9R(nMqA< z(u;odBmgTJN~Y9tj(9Ys?MRtQRj!hi@jK-!QzuGU0_&5t?Aor^yW9g$*^sXvuoC* zBsI}VH**FOneBAvJK-5mdCrrb^|a?b@tIF^trL*Z^yfbT8c=~2D4hkJ8b9|KP8O1r zp%zo79MsYG1qQ=uAFsZN!uRki9> zv6@w_s;Q|%oatA=8dkA#aj9j+R9AaARM;7ntw2)iTj3g4iMExlJVGlE&6-zA-8F?< z|Mlx%0UKDs4wkTmHSA##TTH&9aIB4W>|-HIIlWHSe2dMXTuoP3&7ugio%QTz<+xeV z9>ua5r0i*vR9XTimbI;Q?Q3BhTiMQ*wzaiwwp2U7$nKW6z4a~BP#atU=9Yh;HQQ*B zI~3zCm$}VVUvi=Q6XNnuxYc#gbkTQP?QWO5-SzHw!5d!jj+eZF!S4Bfn_l&7VF()d zckQ+Cg)yAr^AMQB7NRij_{+8bjyQ%PHt~s3yebl}_#hv~U58|BZ2+ zV;%39$36COn`SIJ4G)>fMRshAkvx_lOD@IYWbu>3)?_J9nab>g@{^Ywxg>Adj9I?h zkHH*fF^`$dWj6Df(OhOP-_6KvcJrJ6$>k)k8E#dc)s>%YXFczk&o99Ubov`g=r*S+qZsym!(laU&SruHwfk)7-+8~eY)E*Y>n z>}-amgs+_CEzj4+tDADtRXj!)hc3-=p7V*?Jh?JQ7R+Pr z^Ix5u=tVdB(UG2Xr7!)FLjRS^p&oUq`v>U4b-J%~z9XKGHtSvYdMmd++N<}f>cJg5 zub7^8wXdD+ZFl?I;V!tdcWUZ&xBK1QQ+CwOol{>AQP@T6cfk*Sjey@Q-#4ZA(;{9| zad-UVAs>0kPoDCX#~|aghj-0ye(H*+Eav}2_=*|6uA(>n>F-B+|GI+SPoAGF>y>4B z+0UN#wYUB4ai4q7z@AE+_xM#%WaP;nQo96H@;;^9p&@a-k5DoDV z5it=JaS`cc5c}c{Au$pMDiG7j5&2>dL81@G2@^T76B|$yVaXCbh7zes6!n4;Q85)& zaTQsy6;-u^}DuAt5p% zC6eS8vMTcNA~EvU60(mfk}CeOAl+ynMbZ;N(v3QDDmIcMPckYdvL#*eC1ElqWm3&n z(vmXrCUMeoQnHL{5-L8jBy(sag>nypa))}-DRz>Kj?yV+vMHVNDWNhdrP8&QvMF-% zDzQ>&l5&iya+JccD1&k+#qtWl5{9~RDYi0*&Qd9+vMt^6E#WdQF(Ffl`Z6ymvoawCG5@G8f3h&& zXD~fe0y#5(4ihs;NHHVxG*L4(RdY326LBWf|1x1SHVuU|OH(udGBn-iGj;R*aPxge zlQ#dyG+T2xiL*G3^Ei>STV7K(nX@?!1UNy-HoLJmb8|PXbNQ&VeSQ-<$45Am^E<&a zJjHW7$&*W#(>c*IJtc)Z$)_(jGdok~I^`4f;InqNlRbCGJIixF`LjR$^FIMJHqKK$ z3A8}v13$Y{Itj8qRcAgOl<*i-b?y^EJx4zS^g=N-Lp5|mIdnh`^g}@uJt&lS-19ag zlx-d~MZfMuQD;I&bZ#t^LuGVEX|zUd)G<9YM0K=4U$mMO6c|~wZB%qfbuLKR#zlMd zpz88QnY2lr^hu%AA#-#`snj`>v_gOM{}+vvn~1baDQ-)_21&0}WMVW*&GbysG)>iX z2&c44-4r&*RGqSP7s2#vy!1}ttxmm0Oye|kmUK-4HBbe0Pzg2n+Vo8k6)*c#Zc21I z^)zGfG*XrAQ8R{57j<9Cv`{s5Q#rL$J@w-bHBm)1Cofe=*YZ6n6=5WGRY@&XFUC?! zm8t&pQ)#tUZS_`h71Ba=RC)CxV>N0TbwOPc`88Mcbz)I0VsXV^ z8@966@?bf(V?Fj`K{k;Rc40{t1v6G(f)z+D)>bICW%+AmZ3Sabc4V40WNr3laW-dl z_JBsVWPNu0W>!|~)lp&AR9yCG>8of@MP`GRLIQSYp*Cuzc510sZ+iA;vDWvRR#;M2 zOOuXDeX}5N`HnwWjc5T_VZQb@-M^8_H7Bba1Hlx5f@J4c5WFr>H^nX?-mpN)~)!qa^Y%ne*|zJmoA<*aXt5QK{s?o zH<{|PaZML!Hy20f=eWTA2?G8IDtL*gF!fiKXri{xP*sngPk^l^ALl@ z*MePGl~~v)G#G`&B6>ymhH*HDb$CNb*o1x9!f04R@E2lZ7=B*(i0P<^iDHI>xXade zhoLx%rFe?Rvxk59|BBPAi6LZ&@m7gb1&P5Jj=WeXm^g@Sn2OOjjn#OKpVEr4_>Ff< ziywrGC3lR0B8>4ko9tM+>Qasc_lem!kOg^=3Hc%27>*ISvHZ9}=$Li)*dp>cl4a2oVlQnshIk^lEIgvs6s}{K~8d-uVnIa@PmF?%0DZ-Lb7?V3WmSuUCX<7e1 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/ePhV7499}C&XHkLn&t*pr=t0T(}0JHi5 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

    fFh*r_Y~2g9;r=w5ZXeNNfKRSjx1i)2C3Q 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

    ?!UK_TmNv! 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 literal 0 HcmV?d00001 diff --git a/challenges/assets/mlh-logo-white.svg b/challenges/assets/mlh-logo-white.svg new file mode 100644 index 0000000..e7c5aee --- /dev/null +++ b/challenges/assets/mlh-logo-white.svg @@ -0,0 +1,38 @@ + + + + mlh-logo-white + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/challenges/assets/orange_add.svg b/challenges/assets/orange_add.svg new file mode 100644 index 0000000..022504b --- /dev/null +++ b/challenges/assets/orange_add.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/challenges/assets/pink_add.svg b/challenges/assets/pink_add.svg new file mode 100644 index 0000000..616875f --- /dev/null +++ b/challenges/assets/pink_add.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/challenges/assets/preloader.gif b/challenges/assets/preloader.gif new file mode 100644 index 0000000000000000000000000000000000000000..aff8f9d4f508963732d74b5e81300af651eb5407 GIT binary patch literal 32786 zcmeF&Ra6^5121^2I4z|uUP@_;TPek%ic=~S*9z|LZXpS-!JP=fH3Zk-T0(G_;Iuf+ z?YH-y-Mf$bdiR^>IcLt9mznv^|F5j7BqjZgh=hpb_!iN>5lu;1MNKV3b(cUOR8mvF zCL?=AM)sIMqpA2+>)o4Aiekc|q{RQ`J-#5Lq9(dU^!P8|M<+LHdut!_pPZi7ZdROD zZf;JlG9n`8K9<%N!ap4CMI8Uv1R}xztni<;h)4-~sJXwQ{i=v&Dg00q!HhTNr**a! zyvz>Y;v_iYX20lFcHnnFXv=j{5oC?+D|Erw$>fYe-PDi<<=9e>fjytrr3x<%;f#^3 z8lNGDrp3bsKh5&lgL8Di$iWpMC^#fEEIc9-5CsH*qhn&@;u8{+l2cOCAn6&IS=l+c zdHDr}Ma3mh7#vZGEGw_5tg5c5t*dWnL^YwCTUy)NJ370%dwTmY{R4wT!y}_(;}erp zzoxM>xY@b+g~g@imDRQNjm@p?9sKUz{=wnV@yYK$r)TFEmsi&}e+fjS)a)u1x$U8p z&a`@c6?vVJ^iR|>RVwqlLG<@bI{GRJ1--GHFKkNhR~2FspD8E2$5a)mNAmMEXR5w1 z*HC@wx>MtIZ*w^3HOndZe$Cc!UL2UeDC+mvc!^MkOo-Z4;iQswbpX0w1)&QzV)B2e z{=Af{%1SX^KB*2lTI(rAo~B-3Hs45cyfZ&gU%uEHL`uV<;U%KnV7azn46d(O?TvdP zs{n2QfA0Z3vt1a3h_3hl5dKj&+gP(bobx8~t~}~!d%8kCR9h&*9gl5rJ^S!s7PL2u z3hmvP&loru>qyMuHZdA-9_%l0wOC*uI2jzTRxUP~?|0wDb>7)n$m;hTUzwobHZ|$@ z{=KuxmOZa9;5&VMLStr1!1!MiE@8c=@1@EXS%gyWU7|Q8{_Vmf z9h>cR+z+QSP?uN>{vBvx49YrR7k6Rpl9#fxgDA}AH-tNu@f#s3HsFZDs+bbq zlsfWAd|6iu4q@iUz+CD;=w!r~LVL^35QzgDzjmv!I;=uwm{VOLhiMA|;lkO!Q}+Ig zwu6CQ6KG?3I%cpD|E6 z%QHJyP-eh3GDXTjwt7TG%jZQW<2~aV6w@=I+Pc>TKE-HFQi}aCEuQAzQ)HINm(50= zdneQG`2rFyhRXIH(^hwYwP`=z4xP+u_0Gd^Zm;Y;6}>i%|CE|Z&et#Aq&z(D^Pw54 zSNyETQZ)<8k#8s`Xau4qyzCc^y+@*(q<=5}Nc?cIDIQt&Yc6j3Mp6+P8X#RIg(!Z} z4eVVg+quKnB)wVeTh`Qr?)<3}T1Ii_{17}MY`>xMI0xNc@`B)aM2CDPzY?YEc(Xt3 zYS^SU>q>CiUtDBsXI_L~+IXkfg-57quJeoC;jQ=}>52P7e zIN+j?+rf+kJw=$dDJlVYX$~T zD2Lrc%Av^TzZ*xjMdcPqEO{F-wTBUn{ojZ@``%g1&;yFamWRiC9y}-;jbwShQWl1N z&&62j`Z?)4Js}w&dw-!TN|)B)y^&&&So#sz>S@r-c%RaXFGu`lv`?0+(qIyG&e0wk zt87IK%F^R8fvNpJSdVyBBwZ?hoT;lkvgB0)#8t*wJbn7~44b4FQW1a0`{~muZ0(1X z_=K_Q?{}^H6kZ$jCuU}{^1so4^Eu{A;K~d0qECF7w^d@{Wq#(Ag!4`6+pl;DBVn3OdGR*9;~dnD0FnyeeRGWpv7S%vx0AByYgz9tZ}rD>JTKsO=T(!1 ze`%}~F9bRBiIK8SL=V?+*&ED%FyG?J`hNcl>mL^7;GHot%_M03bN+|VlP9xQo`Do&HtxF@0J~HBk)O6Ogu8Cmj5S)e+K!z77>WtHrRvc zS2{43Wn~GNgIICW0oq^f&1VcBCmF^{?2@^1SrpJt#iGo|Q zl@Kh7uqKh%RK)FK51Z@I7HdG%^2#eCx`iZCg|Dt7gR=#O_SI;cB-Wq!V0K3IIHu71 z2IZ@E8S|*Rl#K3hk>VcP(a^)QrjxmS<3F~77eLM09OSM))0F|qyMea1+9E-uuNNYu zm?P(sn|F*+G4pUHO9)}rp~&zCHrv(7W+iJXqwji{4K8ACje6{ZEyL}6ct)_?%@a#W{>h>n4KMckN$NrQVA{BoW$V@ac zO2FK0tqnI>uvOVFkRX4X#pedN^YxbuS$lhCw!YZOGWYlipH+kI>dZ(b=0+xSk}wAE z!7jW+v%1*tBt{mL1lQ=WZDljHPq;2d)Q0woe~obM^OqHgNgQIO4Fa7PY5 zvVS?+Y4Rs4$3M?T@5!oNU6z5>K_yuvxt!e6?C8KpfmY2Y$r zju?9$@#IT{MH;(R!(*F*N;S$N@MW z089xGZUwju28>Gl#B~D{`XUeO!vcAut~LRE5f<@)sA!d_Gm7xkt*A{xNmK)Ql&lgk zvCsR3UU&f%i0A{#@B+V51XM6{6a(xT+#`gdI=^T3B2C1t`uO6sRX`@grU9! zF}@)F88trl#M^0!E9NnB+nnOC#CBfr8$O=4$T%ovjIt{C8X+zA^-R*+#Q1Snu`e@#mqN18i3QKX~6ST(|De9+E zt|UHFO7)3S9JZ7VxJc!?A8dM&5{BXTl-2}5(mWtZbeJf#6<{wpY9D(CZv{zY0j&a3 zenL`ldXV%PNN`kYUmCcAH~qIK;Y&7b6@;fBVZDiqneg^NtDya zmrHt?*<+QHFq7FDl}n|TGrg74eF3JYj=qK^(V?=5cXIEl`Dd%<;aJj{(mBY|?~wOr z6T$QOc~aY^(jM;QF~f7KAz9;5IdHxF2Cw|{xO_oi`pHF>@Q&$U2i@gi9ZHjc&z~ZP3Zt47|K84)rdGVM+)15F|V9YmM z4jNNre3@&{8Y$;4<}zdy$h1?|#J2kYm# zu@=#dL4EtY0Q~g89Vn+7^tA!2Q!0#@PzlS#Whd+e^xs!QopNL^CeG#sH4$O5J-6PqjhNe1o;ImR8|(OM&4`l*qA5 zXy*l_R|b})RupanEtf<_Y9oK4N*Y)ZacaocoxMv^uDnlE{a64gd{y;qwn_|Q~gb#&Uc{R zU%kfAwjuILt-qg6=c#|zVw;Cv0PbFK2fg`r)8hM{sL`2>8sTmTF(pIiLHVeo=phh1Eq|-F10jr*jN;IfFL*k z^zGIz>V+TOOFNLHU^};8$K^oV!IIruqxU~}nx5O0O3QZDvE5Pf>w1yYwX0tJL9*P~ zv+m2_>#t~29V3r)9~(p3x5j?0Z!}u6K|Kf>sQz{R55Hi!`YxsE9ub2id5v#|y4}*? zUN?-Tr8}$6&iKn%>#3XFsDS8r}2Ix6k*wRfW9k!(g|W9Q-?N-*sbO zDtn(I0pb3B_x9&O%rL9o``*4{c$TakU6EaXtP$FXrOxPUZT!Snap^M??f) zru-b%z8adK9ilNFyf_`197K}%_a}iJDW-=Hu7)qzN5`FDVG*>}J zK=wI>j(MubzM3DTrJL-ko6w}gu=+3vBPXTjN67uBI0VyF=0}ggm}NZ1ym{)Iam)*1 zH~nA|DUAmfy7wH6A2``#)SpjlI1?K+Me(PC4Yrx{15(~(^X{_d$aGhy~55koVDdovG+aL{?I(h>G^ z@C@h%m$Zk?62cZ|&D1r|Bsb$w^SBaY64=eGrY^2yXts-PR`Kzy;N2N`^IZMI*~Tnv zjXZ9AZ??hSzgb9FWr=^zpX~H_zKCH#NpxYwcwyrM*_QvpPV>Us(FH}Kg+s!_#l5!+ zg>>oR}W-rQdOvcLA#Wc^jZdRoG| z0mnM0!@7wHsq(^_vBHMzrwyY3KCA4F?+$B@3mc-j8{b;iT{uYHZf|-7Y>LEfnkuaO zX_5xCtOapwiHUCA=h%!WBLVDh__l0;%eJEaZpH0So0V;*nrx?-Y^e-yrz^FPL}xE2 z{M~*+zawq7Q}~w{8nXh)-YHVp$=BR2;~+sekk%^TS)A}8xA6_b#3%*Q)&=~1`dzPK zd`C9EXLu)@gO2L|aY#WYqEAFb#1+Kx2ThB0wLaVmQF@?_!glB&13ur!%Hy(Fqg(hZgfl{&!l031_==6*U%A z|A!XQwRH};C{)`&TCD2m^lj*A9GI9K7#gmsgB&>&4qg zi}>BhwS(h}`QLv&?w?$|cQ?C0LzA6#15T>4@YZvgy?Rd&{^Py5qYEyu-=843nJurhurwAR9X%w-OX!0P8h z8w*r~c-N~YwkI+_i)h@mP3~w%>DQ98;l>5zp!)T1;kXlS9MneE%^uHaizRlJ9;6FC zu;d7=5`{7d_HOa(r*13CrfL^SXfK z>BZpTo6Uaz+jJ^s?}r}q<~dQvJ^_Ci2WA%DCWKy3k$Ax zHi~y8B-5x1oR;B$Yw!C8goka#M@#bm%#WcwRv7@UHk_FRKc<(?i{IhgRs?CZY^?=< zDtl@!`&!I$Dfz~nFDTZ`EowNGp~5Vk|B&JYZnlln=LaoLS_>x z?qL8kkNFPg&nexRT0&HODcCGE`z3=#f+gU#aP%pV*DLS~YiTZFVb?$~zC}|9PEnH2 zkFT~?Ld?`W{3^R!i#34>*|eqaAjO6w*q)fa!0qf*rAVlkqIhDi(y0crK>O(5`(C>~ z9s%P;Eu=@Y8| zf8y&XJkcANgBH2NLzzIC{v$<6|Bb2D0ROc~8xgr3R_I^<^Rn1G!MnJEoZ!oe>Q>a% zowmT1Yv$2F^i5u84(adu*8KG$>BSTFLI&Q~!7oSrl0!}A9O_$c1(XLr7~mkw;b|vj z{P$!fdr0mZ(Llml;X6v4cdJCQqcV9kEH)$eH@_7x`RTArobMuyWp69ZxufS}zj-=Y z6*zWp)J?vo?T$0k`{CL{$2+ub86J%COVEl4Cid@11edf|oFAUsX%Hr_ zhSxD|!Pbj@kBRs>n9l+OC_Pk)k8U~PbnfXZ5o6?z5<|>Bl&_UwF}NG!pS1d@ahiYJ zT9nDFEAMePpilnd^UEN=bk0ZmKoth(cYLL5nZl|_jqlNkg@AUSiFDUxijAIf~i+-<{_j?mGKMU4)feStfS#GxhBUbXq2CaM~ zSVv;UCzv^fidBLOKDE}mWk8I!=Ty?G0)4&$>*QAD&EcPeE)%^aKWuAy_kT%eybI-- z3jg$3WwL|iPYG6?|Ea6Z$6|?EDG?!S@*^ zGszAPKX&GaT#{}T&pSM}1XXV?fDB)KI`HvENS^TvqWY7|HMa#MuM+OHD2yHifHFQ4 zY#3UV>7BHx2Bk<>H*2X=1bj_5mR#07(Q|vI-itCoiK6E%ce%@K%ng<`=||mY!#_t2 zxO8EP8ce3cg+cX@S*G#St z7VAjAHho&Jhj|}yCflEttDt^wA8+1YFdpL7qMkBxeP8KrwsqA?{CwTLh*m@^%irXVf z{{{5|;tmT&vJ%(bZ7twgO(^rrICX!XIh*u5aGe*3F&dk%p!AWf?Aq`5u6Ja+WJXY$ zZ+zZ0TN@?HU_IAgR(`YJ)qXNN$yDcF$&`h+oc-L?T-RAHWN#15_6dbK)Ri`U&^K4l zn3+_NXsl=FfyZ ziQAJ7f=m?`^$XA14E+yPL#mdUTK6J&IJUr&aw{cY&-*6)j*Tvx)-M7)d$mkXGU|Od z`Tm|)zmosW-0QdSCib#3HefYJ*AK6lGhJt>SK*Y?toGIM&M*AmV|4G^^}yDvX;9{2 z3r`Cs^dNRw;MLPXPm=kZocOJJ<f-^ok$I4P!1N2^uuljQ&EOU@`NtBmR}XkJ9Z5?WMf^DGu1b{lI6zJ+ zDvkF}id0CJ3P;^pI1>R7oCkP9sEbPV0{VFYh|d6}&_`Y+z+7e!RL|{=9;l8IP@odw z4UKGqN)eQSTgrfTDY5i4P(@#08#I`E%XM7`++*cEv<3c~3VvDx?AML{Wu>246y4Pu zP4dk@fZ1oIAz-a9YQrn$>-N2ivQznI;M+wPVa>$aaASo#owFp`LLZttO{;bNd!wKV-Ax9S(3lNk`48fTciMbEM8_&v_{^^=GG~; zQ8C|HqHSgpWM)z>(-N}JfNG6Nrrs$uXDPu`$tI04e%meqQIS9SQfH;o!uXON!s4W* zQ{D7adH+PmLehX38f)(~0LB|kl@{FSajgVVv`$z6#HT^*qoWcFAju=xI4CUPJtVcW zI|XSSSMHs9{1uWp195JIfV>?fXJXrQGcLR`3L^oZ8UqXU(@_^0ZPH0Gjp?PgDq2757ZuH-w_k`=b}C=O?`=pwOVWNyR`IsaKdGeRC$*yR zUYyH`OaVYWEc4YtRCz>`4Ec& zNmPLxYk`=L3)dxy!ezm0>H=E0>kAu&mp+B+Q3Y6t>oe9uIijMwYK5vYMKT6OYBHpH zGTC2t3PX$YrEw15Y>Hc0@=f6nIQxq&Z5*uO#kK~8j?^Vaz+yeM5*3@GzkD7a_~kyz zlmz2SoPqf&T_qs~wqXX)2(@A{-4aC~w**v?w?R%)0Ti@jW4)8@wNn&{%Qzwwz^Y$B zv#8;zGT${Hz&_c)OAKIn2FBw@9xz-%xeZKQ?Pn4-Owb2W!HSrFi753cEZafo`?%ZV zK6I!R=^2#vuofxeqy}+t@MURiI^yvyq9!1+*#_AQEUo27AY_nT2FL|!WWdfl+qVcb z%5f7|)&~DJfGZlZDLdGK<>1P$wZC@m6b$>66#~Db`pf2a%Fb9TNHUPKJ92~_B&F<6 zYV`_Q+j5Gl3VX)N8=C?;TjW1fbgiw(z##`!%O}&3<7!oj+g49-t`xJ{+)ZUH_^MQZKwQ=ExU<@nJ%d23tsn|VeN}q(rBK-U+Hz%s5-GG7dB9} zn|i*>ERQ+9#`3D#mrdWBrbY)}qnA;8kGwh*RPUi)X{TN*#M;o@Zed~DpeNAyeX2g( zuqG1Jh=VuU(_}YVSA3AI2}9I6_SD|uN7bmHViBl+`Hrj)?f^X)896YQiW%tP=PY&p<8@OcwoU*ZP9EKps9T2I~r!))IM8#%eGnb7~Oi6 zT92A4hysr z!@=WMsC9hhg{{@(RaBW_{grwPTup#%t~JK1jXtx@k*&1a76tZ2<7Qjt5KT}-D=Rv9 zOrYetsqjFc>HcneOH+%(7U^R_a*c{w=OvHNpE|!ebpm}UWJ<~8(Bz6iolf*!E}U`7 zMqRJ$C{(}{YNg}~rPb1cRN$t5;xSLF@&2VpR*fUxE`{kA9ghxUYjG^q8(n%95$^Owj&zZ*C08zBmW~e zBJDJCFgJW|ck2>8bUion@o>cW^(YCFgnVy=*niYfj=kc#pSF2~K5KCJ?id4dFgtFP z@xusB^w7iRF`3*k(wi~PXi}~{G9Kgc+i~M`LhSs;w*=|>Z{Ljbei&bo8xt3r5Y8Ht z$eQ4zpMZcTQse$#67>3?1hxHFg8nN(|CONsA4`zbD#7g-$+bow_u=A~zetSta=PL0 z1!;ER?aTQ5Sd+|UeoLgxfI;0p%DJfe9|Bd42-j{qFJ?EcavX3-*S1_O?2~s~rTQk7 z$i|_Ld3&d?(?_Nq{5Anvrfv(A>~2- z-%T%2o-I4}lwsRkfwTOcDP>KdgQlT@zByIauk?t#M{ccI^tI6^j-jepz;XrjTzn2PNha*mfY$$ZQV z<5k)=caAEnZ1WiB?R=?J8GSZuCfrXc$9y|7Ml$R^=MnTZCOI?~byDC&WZnCOAtC(d zRIXjZZ|@;L|U=q&s|Fa)Z|d zxye52kLaT&m{%t)&(9m*ez;vaz8WaYTl0mnjueyR7CnpR*SrIpk_wgnCO+AVZE;a?%tA*(tK_<#NPD(#~ zKzwZcLwegLF-_Y%(2s}#biie`IKMhAL*0_y567N7z|{}2zK#+vfe zRK>r1OyOnlwRe1q0x~6d!po*JV!}w3cav@QM@QcxppF9eXU%5)mjNW1rnXXh+ipx} z)?I>z}xEOfri_M@T63AY$po6V7jL`pik4Ac-%eapYr!ZdNYKCcsd(0zIJ^bbx) z{7ZDHs3QEyMM`*B&J)oN+TB@-&ZBaMVHVfv*}KGS+@0^P92IAlmmi5SE8P}Wjr!rU z;`3SR4*O?M`J!>8dIN&w%{(Q$`^?KwS4C3#y|6uu;-1Ar7 z<K6SUW^Je6_@(uK=Qwd55Cptfl^U`k7mAp*TaoPa zF8#TY3&G2+$o|-CblnflxZ2&!`JO@;3fVY`rHLlTbEV%2H4!f$_*uzM{JU6XyKxA7 zXqW$yKAJ93mifp(Ql&|Ja+gdTwr93enx8)2R_m7kN@!cRReU6?r6%r;J^pQv%yjjF zJJMHPNqc~G9H{WJQju=<^^=TW{T6O5Szud4ZKqB)dwuirUL#y; z&VbERvVUmWu7E9fC*oEU4b7Tor|beUt=_ube|c%em*sN9q4~;wI*^ndhvo1}owq&I zCClvG=a!;iTd)rclwF}Ylk7&`917(auH2uK>XkKFj5^z0Fr86@?DWP z-5b*N{9PC+w{*;VZt=#o{?PjytzWmM{A!S2k(_hJtfTP_tIX~u9 z@O2OLTg!QOG3?%SqW;J?HrDuZLbti1VBT}m^3~(fgED;UtLvTA>&u#hrx%Wo{<50| z+^k6u*t^IAflSlSDoP22p@TruOFUum+LPzvERc&S=;cx%8PtKikAyNUXs#|uU^M79 z;2u5Jic~6?2w>5jdY@U!?Lis|12*`Q*bP~t!A0r%h|+f6C4?6mJV5bTFwKQ8&4!yf z^mH?1ELBs&D^xHwRG=Z0?kxC#B8)yHw7$o0QYnn}ZODzJw;JHdoM({cdDz?UVS^Ta zL(1XDoMBqfaN_pxh0SnnF*{mp`1giz9q9X2&xj{|ZYz=gcFgz88X}yfB0lRyeAA0G zO^fIzkMwB>bJz;7IFGb&jl3%b2$K@~=>_gpmZfo%_^zfs(DPQUOt6 z^&oU#6lm*HW13F~^PL7L5SKC@1^rJtB#5x>Zj_+mSONCH?vnbb_5pl6kI50aSC zkQhwRi|2zST=gXtt0aDmO1R)n*1{wRvC!?E0COw@hPUjxy*@}+ldoisX>it z#uUl=GpPaIX{!G`$lK0bHR)RvzU);QrDO?@m)daj>#yCi3iC7ZS|^Oiw2u}}Q&b_{_pi&v874l5}QHFyh>d!m|CC7O4p zpGS+!HNxaw!<^YrIl`$qOln!+d14ej%2I_SJDM08~G2Y3#8!r z3Yh$h7q>(%^WMr79&8k->=-K=d%B0;`_&%it) zgF@vUSqArfi~fS2mqk}IQats!?@`4c`HPvBiUoG^ocT+1P=!fh#np)=KEQl?puE;) zcF@067^=wMroc@t50DPkO*cL{DJJ%T#@ghCq7=eyvQvCuN~nT&J!}C4xJ=d#>ZB12?fjtHI7$N_lHx^B3lAkIkB=43P%vdMTV+r^x$^Ws-GTVKzug#cxZ% zGA*6b3SiL)++5_)m3#*_$NCm``SbL$>=0Fc(pC22w0x7gT=iKw{t}_Nor%R1(PiWn z^H*q2m9N-ToB}JT5M@*S6&2R;*qw5+CgiHk>n8$L4op={zEv-kEAtJ?_I)ad4XZjk ztG3gtM$?fJpr7I(Sw`P#&WvhaHbfh)`aVfDGycbWni3^K#@kl{)EnuQl=!Ni%bFv2 zO-N(vK1*euG?FxzPi4TCzoGV#dbw_K#pk*j^QH_&D?1~aJVd%e+zQeUn>Ke*A?sTU zTK}%oRB0|@|-R6SFb%WfCL)UhpN_j;VTnqOyAcv#35>fo9Zt5 zOW8Bbz47&SR1MVp4Z%lnSKEdHP(uQuA#b3822q!sQ48Lx%fwf7T{hl}Xp}#XE%I$* z$Y}C4{85ERMdCqGh85+rHNKrq-v>|`vQ07S@Im!QaP=npjMDMh##m5Yu6kon6RK|( z)lbv1Zre!b(QG&1?LyRS-9{FTAeUymRVYh-NMLJn7Hw7g)cW12^`R}rw%&9Z+y$CVcR(k1u>X{dajlBy7dCocE#5IZK<_|x{Xn=ZN8!Hy;&RQKUHaKWsz%V zGipD1c8eQL&Z|-8f7qrx+F_8}E;>jdc1Lg6*2S?Q7VsccR@qXgh8vuDXhcM!V!DyHsZEJ$9l!S)Y0=?8vRa zR5s`y)6t&P!yc!(TP}iBZbrR2PQCGQy*}4ueuI<&*S#O;`#_?7VH#Z&$K7M`eY$3S z5kY-1g53{0`bM8)w23g`oS3vs(sWwNOu`&S@(>e9-=A+pT3AX^?AISO*Y|U`ztpd% zVz;N7eZah;-#cia4&9Y{-QSEJs5ct$5*%zp_jU>P^%@Oo<_@^F4fcachv&%0t_Pu+ zgYkAllbPLE+Wy(hAsNvjOQPWgFv$x0V5{74_}mb@ba=~XXj86tcWzkV)37u9$Z;mg z@7-G$ej|4(Mq=$ouIIXmgoa2Tj^0}u>A4;zryIKUaG0)n^yYeWlRAsJ;BhQWA@ z#%T;$I?5_P!h#%mj2vTc9(-av_AG0d<7VvKZ=CAGn4mo=-+X7+-3hV1apvZ631gBM z$iB|X3Bl0`H0{Le`EeQlA!TDqs((er|JhR{Bl_R-K`Q@O_3*#>p#LxVAl3iogZ`Tj z`adBb^nZv7@veO!kDW%gG|&e#h2>J$N1_;gZ0x0z7HJzL+ll5x-QIj%r1#b9dg34) zwQQLG+fVQPv>s;!pByIxL5ut~ze7a`F7z91kyoooN=H=Ny(iR||DX?PG)n6UI|t#vI#=>)&fg2Gje-k<3MfeVR9N;$<5++H5Wml&q$J@I8(970 z0fkqv((NkI%&*vG@uhAABY5<;(&%6+q6*>TYnPJ*`e#hy6h1w`mC>B;B+Dx?cydI-NghozlPC`=I>bag z`RRja^#N^fv~-S(!0)!68#9EblW!N0Kg-lqEh>F_{<|cc7QPVSGmy`<4Am)Z6ZpYj z?IQmG&b`+5Rf}J%go7BNZ*KAub}5bscu@M93^tnPGc5M!KGN%}z%cf55OPUW=By2$ z+e-hKs6t%+XHo!n&ic8vWvV1EX-BWoV9Jx_LB;EC*e47yr}eD|DC7_8x0g2497c@Q z3C8^9LuwNv#m}p?XG_(Z4Gg*>UiyO`z!o>?+c45KCIt`Zl=EbOvt{aai|k7FwHtCq6(qt8=o4U5w<#!akkoVBDgo zCU7D(z;(JCe-XDv8VbS0x{E>b>^5F}yePG4c?ZeZv3OJh8L&NdNx~0y32BM;k#baJ zlo0(CpkO5oxO4wbTOYKL32p2M?81n#&g)R~c)29}B`?Ao%&Xf9O)OyDOxZ}bRYEVB z@`VLq^3B6qom^9yd*YGC_#IVz|HhSeAoyX!r<-U8ibcQ~^UOuc71I}YN zxiUigHOZ^%@w;X;vN&YgsZaOJg7FXE2RIK=-zNJB#}cl&xpj%g${+jsxlOn`EgnrH zHxBxS8NW`rPxD&+Kp!@)7R#aaLDzJLArn`>Vl=;0&<#6%rOZ_1u=i?uRCeg4j$Xc> z^QB89W)JKdwZuMB-z!vg6nDpW?UbkyGZgJ2nB=!!=Fs@c*SPtT&L`U-;CIf5Uv>98*U7|| z-;(r+_~iNG(OAdR&a&oh?a-?TyuxYyK{FySkmoJ+D_mE3@NVp#owaJSi^0^I6J4U4 zt=^xPq7p5CB1NnkPXey?dIG57cLL}>JUmzwc~#dPYheQ;%mTspH`8>Cm^#cU}WRrM<$AkAoN<1b-}XB?WlHmF?-Vfm#4(edfDzomAG3Mz&}!|XMpJV z%~YSpe41L|N5O)G)^^Qic zB`TUVz>?j`oE1!*9bTN(j>&o)mF<<6eF(FKN@uRHymOAFbDFJl zHmP!nFEff~a{gZA%y>KA0_K*(a%uWOR#bV5kemm&T+h0!d;FQ?z`R83yw#bUsm2^0 z#hmKSoTs>~vl*$|teO0%{DYZ%>`7(?OMzH_?l44|7cL`}UT~i^pA~5E_eJi%h|uf) z{CBJd`oHrVFA7xEvcype5O>raU{%E33i@LxEHiJVBD zwRl$=3X-um1V$V4LxZeg6Wia~@{Cv{@*TH}#|brNR4djwz(UA&aVG2AAhjf%J3L>; zB-#KL1A*UWfk6xq8ESBHH|V~(nUhCaJ`9eQk!wj;`FRUbDFd%&Eiqz+$3b#O)k=rp z#UuQs2o~gB8KeaYp5unZ`Q%|y$W{Kb{2ins4&KV@7{!n1#hGmFsO$hs%hhxS`b#H& zBGV1Zw)MmNQKd&a(BkycQ=f8TJd6xsd?xd83RtqlA2*6EJAYYzXi(bluJRsDX)<3T z8+9eBzxF##KzzR?)K6wgWQ$0g_9yu|`I% zLQ`#PTx|GAXJ4cs%ijL!$wiZcB@i=yc$uCHZ*AgHMJp{I%p`G z5oE1w_c(wOE$#T`fjOt4nzg>ZPkx!C1!8- zlc4yQp}EK2exLmz6YWFB%=VG?_TkF*>`(1koE@BkR8Re=c#JwgaUJn(9sIPE!srg> z>kc8g&L?)A;&znJOFN}9JO4*}=iLrx)aYv^x+o!{*F>)gqK1Ts7KG@81kr;?FnS$h z^gfJU$LMWzMmM9k(L;1XwCH5E_w4KJYoE_>@*SQ(*7IBIzHiaRZf^3P7a2sdX2h@M zdTd>L0&;p(ZwNFsdtNQ}I3MBQV$_H1_R%Th;5d(re~~XX!*}#oYH&r%#Ky z_wycs-B91%Dr7j;XU^X5I)wMliNMpWpD(Uo8`Rt^RR3_Qe>l}Yoa!G=^$(}|hg1E-ss7iO|1a zOoC({(iRW*PG(7cN`?{+~N2|x%%Eo5}C)nGD9}A7#;Z)Kq zW3?F*{C@a?(PP556B1ODjdGLXZFrJPV^ViGRn;WN@aT)o(axXaBVtp^_nB4f%$Zd) zQLpX~$}del#+iC>JEhw;@y>kAz;9YKbDFem+RS|N!|j+Q3r0pBBV>;Gd^>3;H0jWW zDOkijzs0zk17Tq(GmiWtn8;+GiKMc#I3X(}cqa{`1@Psw|da50(=P{noHK6tj9XEctD?+#~F`ms7oJ^DI| zQxDDbu4d&;9KRJE``ptJHRq>R6J<@C+#?yBp2v?@6EoD`v4BZf)N^6uIjYZjGyBC+ z8W5fQ&k%GCyo8#Pqi6~qBtTzj&yXR${_X$YB^SGT=^v(OYi)j$@b{_=oto71@+W$kUZ*W=4;CMGUYM;lo76&`l~tLTDsi4(Q;r9kp# zPjwHd^VV{}PW0GH*vdmYvH-|q`te|TAa5qH-c>3hoFs^M6+9fT8X0k`d7YGLI$>q2Ua+7eiK$K7 zE$jK+v_fxEaA7L{g*{T8zQ3N@O3OQyDg>0M1Q>deQ8ZIeg3*TR#3nN~rL) zE`m;O_VeH>0{NZkmCX#NfNRrTa-kw*hWE@f8z z&N<{?2Lx)##cW1pawCSGU7OSnKT3&W?v*Oc54cmjp* zzC&Q9^p3B)uv?QHY~*TJ+7aj4@0+cT^jZU1mJeae!pt?VGA^53bGMbw&CK16v;+l0 zB)euhUqPW^r$`I?>J&rifAwoVcA%{yn3t{n!qze1hM>c??eER7h0fozas0ho!=TB7 zfM1SW%ePr4FYtRR1F+W?TXLev+00UZLP5NX2aOW9HkCo~gKYh0sdV>rUHzzfR(^_K zJf-;k+K=s?C5{Mhmnw?F2b_;jst4;js;&yVC&#v{Df*HTuI?!%&PHN>{(N_MESzjl zkt*!sRY$KVk-R1WY(yoH-{c5v^cbfUTQl%lfbKAm^3O6Y+f1+Um+C0vo4k9mAg~xI zm5klcD#P0LYnF6Zf_F}9$OK}cqp>5f`%OM$B98*5=?FM|ng0-9t^eg2dn~ThWA_`F zs!$9(;hwAY{wzI8eq=;5>HTA_H5iITQ8(d+l#=^RM4v9YDy~%N39r7fnnB8Vvd(&e zAOk&GVZJ7^QJhndph4rwSwc+5`X|wjVh!ys(c~55jVA(4nt#LM{d@PggkDR(eQi)1 zGLvB;Y509eiu+l#hal&(@RE8rJU3|jUJ?7`rSeB_QQzN>KS+;zX$ksIT18m0vZ0!K zm}_biJ(-y}?p>*Upqr8oeYq?{)QKIl9XZaekbx!?pN$@ruNz?NtHO6EwoKFlAbYmjDxO!5i8V zf%m%)($rgeSsoTICGt^}>`LdEKP=w&VKt;VYk~%!y8Y(bRegS`f0nCX=1|T@ZvmdJ zqH`(Z7H~8b;gK&#P*p0`((nYpMqB#oi)ZMah=0Pz>(LH{7}K(kOae3XEVS@<1bjO< zgW`hbbhU{-`7=_c&m~`a+zBjL?EP%#T_;>}4&Lv7gqo15KEME?Lk5gh^m@G z!A~`?R*$#dDIbraegF+-$ZO`h$UuuAYt~}w&=Mxe8T%S^kUi^X2Di4uW zk8XwNtMC>^fdff2{->{rFPW`KLW~tZvAQ$h364BV{emVmct%+ohb%^4^nT5H_Hft9 z;J$*?=z}V}>~nr=Iec&I^KXB%Gl!kFmB?&I!M{&pnD)1ch-D^1wVtL5WHu{DzMBa9 zAzo~YzoTu-h)!ZX6_FEKxsy|m!aumv5Wao)C{hL!n$hF56k zb^Ls&=58NtONsBg>xsmV@v8c!7N>);pR&s*G49FNON{|!{41vC{xxYWV!cd4x|8hp@qZe3d*p{#ZMA)3+QyZ8(X$PE3U z=`SL`B;fLGO5?++wu0X}N%oi7eDgEMfVO?65pSTE|2fW%{9@uO?-c>!bDRE_qq*Rl zmSX=)s7w1)Hsx&wamNX|(qE?_`}?jVmUmIR?7XAnw$#V(s+p%_XIR@~tJvb!ibTP! zpAx%PYq5_i4#3{(J;u6P2Vmb#1f=OO@Ztn=o;zD92J%=2mJ&I7=LB*i18KtpKj8#D zWDmOkCg`JO5N%)(VR4WtGKgj+D10jrz#jZSG5CTo*d#ERIw!cnHrQ(=m?JI23>nwC5@&-OKg|=1kBS-Iju{0-Q}f05E5?^u#+wGkj}^yHC?=Fz zCeR1QkpNsCbSA)cz+1ENHz0jIm?tMg;JK|Q(nCj_;j1iz4?ikE0p%IgC!kc~_8M!S zB)canf`7(vJz#;u?|?=Yo=(QjJmRd|T-$ zJZXV*X^j`8a0WjF0LpJ0W=#j>l7ik0q;~RUq$9pgeoso3w$B4nVka5iTizRMO7BL6 zy|GLEW0m?O z0pklI{(D$d?tT6o^~+!m2YD{Wdr!dW`ksDCfLy}#+`mn^+}?St=*+i`d4rRAVS)M5 z>iM~Z*)JI76uk+k`E!4T=h@ij`tRfv5a!Aw3*I*8Z_ec_qw^%eIT|trZ`7S88H&mh z3$)XNW$296a}!(V;+(-I%~X)5{7`$+Vs)NW7n1}4X>1dFF}X>xhx!*U@AT8gVqb4E zfA!o5QW(b@?+;Bd(OoD|UDK%>)>&H=qMo*|3cK_DB+hFkJCuZDWga-8OTIY3Gabm{ zObXbp!t!L`lBp%%z=`SLgxV_j@EjcP5MG6LtMSf&nv}9fz_PEznY&86l)iO5|55ZNmyXC_sRkQq1G{2Mo#w*&v($6ONu_k35b9@8b`V8Wg{0oJT zcWb1e8J-R`Pi0xyui*kM#L_L*-tgLBbZxpmi-G|BB~}(+=vP&Q8uX1%g*t}wuS3aO z0eo$ZIw8J#ihgG`*;+obI>}#oO3+G1jT%{vdLA+sjmUZ%rUD%%9Me*SUZi&H2_h=J z-dnc9{ko!VC&}3>*N7qXL5IWus7X{x+7TRv*EPp>x?C~truI0xZ!%{b5yh_+Q5t8x0G zPa?fc1M_hklrInHQxu5b9=D#n6RCi;Yw5r)w52z;H>tOqf!m$(+i$M(_nFe-h&wVK zcVIO-R!W;IjWSH=I(lU~*4&WzH|YnZ9mmbcvX-`MXyK1iBz;uD!we_^a~F+cmknbl ziCpKLX*`!%ZYi>b{8#5C6H?NwgKMypp{!I&u6yfF>*SEA5>==% z)c)6}n|-glfvf$89a6}wZm7jZz_5qNI8$UV!L!qwBowJL)TJob)T|Z}`UgpS)05ZN zOUajQA=fT#*8X;}!&tDBBDAYisrRp4ukBs~ptb9+S;E)aeQ6IGLESN{tm=D&{>-3A zGred**4QY*c(bkxjpRH7)K52*EjA7%wup+#AdYEO31vq=YDF=xqE>LxpL5X0W9ULn z;^NjmKlVW_{lNmK!IUU;NY3Dk-oZpU;s#CK61jf;veLS}!EExOrm~@cJ45&oQU8!Z zr{Hjc=5Ue|x+7}Pmwo8n*if6(&~nt!T+{%*%*gZ*`p3=CiWAXl6mY|A$j^1SD2ez) zF#K$2c$0i|n|XLQBd>OGL~aOm?mIFoIHuZ)n#15+FcVYXjzx)%2Uw2N3XPLG6Vqpo zKWZCiyg$ZjKF)rhm_>fV%XPv%XM&f7NN|7R$`eH{61NmV~9L3b}YtLGL7B7U)w3r5@AwpWH$J)kukmU6KjV|Tx%pkA4&eLWjk;_;s~xB1CuMhy zy6#41epSIN|GP%r+*6>#2rNRa+$3${zWCsVS;xvDT!SfL^ij3HRtoB1I7T^`K6fVxPl zq|%|3s$8WCVS)RfMjfs?!T&Vs`kyrn3AT+kccAVXb$2T1IkvH}3C!}!^z8gP_2TG{ zpS!=h);12vx7v30PFH>(9v-*;Ir}?#ah$x+P`ca^(u+qrr6OwbAe1T@Wdy1GC>%n~ z!Cx>igw3lAXHddh7#L4^6UBKOFL=58cp!<|uts^~0m)F*Q(GYXa_#d_gbeiP&rdzB zv783r8829rXM*)v((#2#De-i^wy|LZG;j%g4a*L2kMhdTR52NuD>{N9SrbgHKkv zwp#)C_9EE~7Tk@VMmuBab4Be_kkd8mO6h)9G3eQ@U-`lYotufqfo^@!vWjHJ#TR71 z@srd?az-aqy%Nf)f1y`jBWB(zoVT(Z{BfUt1AHW+<%VfRG=yc~=Ct2lU!43}9_>&F z=)vy4JEQPLqrwx(|2~1O1e4*}K>|0Zwljki(vT}*^dGj_t*H{YIJ|j5$`-)KDUfAg zV^i^P_+kM&XE1l45hr-41ad!eDO8Fr>gm}4d-MtkE@jO2wpUKr3+^=bxW3tB()bg4 ztqr|gKV>mUchWZ?dVF1GA$|K1zBBb0IR%r!i?LQF;~PT-+h0q7AvLv<+3YE zr$hhDWz|);h4Ft>cZh<*c}gu%rVx4miz`#DOu3J2fn7!|4_OVjk2=j7>7EUW2*VcOOf(UE(G$?zHTDh=zLA>+PV?SwbggRHFC|Ms*Vh{cZ1+G); zus(CrI5D7Jf8a_Hw52Z@bE#MWP4rrT@su=gzqK-Gs8Zoh&APn*W3xiGEaiEG zgX&F5N(z$7xis$;Z1e-HGCwGL@e&-p?~ZsjeqGv3i@`-NZ%3T_+Oouv@-dj|BEk zB0DW0Cz1o#f>+>gP-Tdq-txgL&nu3Y2#~%kD^;~#Hyd7XnATJ*1y&xZL<@ug_4X9$ z+=+WD#d5-5+$PA{Axs;|MW9ZAL6C!B^`O7Qqu__{TZf^nKoS4Cn-k2UuU0;LzD zn_RkRCV(4`ey{R0rKaF9xr4n1*Xq~cW?x(pwI+JKi3iC&;_HGuhJ)5WdLcu~+=7NA z!y^*z>1kz~I~9OIBZox5;-5kx?=Tesv$%}ey8KJDahN;nXd0Y)i(zYk(6i!MW}q*R z{EVeGAQ&h6c9Mr}XKeI7XE9W>bxUzeXH4pNTEMLirV?0H-E|ac&N3$0>!O&cnAgvEmp@iwJ z-h4}aIn67l*R1zDu1@h(6RysJJI2NTJ)1k(LC^M`{`JFT@bi6`fdcw{4dY%34IXPn z=vKS6P;wEO-~7_yCZ>WSIN#rAN$kkbFiH}yvL=Jxw0CAE7l>Ci<%pvxy%OJWOk0Yj zDdSoIzvu_k)>I^x@$wD68LXhKrI{)dkdDN-d!3PirX9sEO^jR4IO_A31niyF<0e1g zBAA)VPDy3;wSzF>@cK<0K#P8IuYUQ^g!2i=5fhG0KC>8*Nc|e#Z;)=42>q znl0IbFhDw^ib`8{`~C=n>Q&j#PZun7PaFNq_F2>jjLwVh!gTv4K1&OM*XVQL2>d|g zwk7s-R~^~-xJr&Zqi%~csv~Q*a`uqS5}-!k#ne`{JO#Cgw1;$%N;-!x6IzhF*Y{xa zMd|QwK3@AbR&)I|iX^)EL}3UqB95^EHFa8EjYxG$7>F@-Ca>xLre~DLh=AWNF0*4j zd+9zrO;l1Pj737o`N)4I(aaMFEErK(OdY38&)JA57(Y-S`VHB4C481GP4i7~Cp|Tg z@cE;Q`yW$IGFpsmWFzSZ0R|^omu8<8xEQdbZghWgHfC*=6qM+Y4^Q$+% zofM#k2s9KJ$L+O#6)~9GYj5FArYHS@+3*wSSujo=>HmS3&)XaR!kebS{3*kq{cM`e zi20*;TEVqwXS$Z2+{KE}bKL)BU z;OF)&Teti6vDZsJuRO`GGZz9yT09?sij_G* z^~$b3SGZ_0{Bg+Y=4)B5b=3jQI&vqJZ+l|ljqd&{2=DjZ)sFSREchSmp>9QNVntvl z{-?>^)Oj zy>x3z;o9W6Ii|e!2lrr4x6jM5=OJIQeWL+1E4|P69{K0K5!s!gyM5$~EhfR8eSq)f zU%zFhL8MN}8-OVeAd;dZf%!g?(mHLRVrujwQzf|%k$eaWpazLCKpt{PF)sE8vhh+0 z!8}A%gT;)fdA0*scmqEnJW_4Hz0v=End;E&A)&wSD{LX{37u;QHMw(c+J@;P!(<1(DcJ$ucZOPk!boU=K9)dx5Ri{IcohkJ zXc!((82+6-+?zKvU>ol|FkJZ&sEOM#Y$g1Q5h!vy`1?!H%=7TkzVL53p!}K8R9K*= zYDDHEyF5vf6na2;Y6LUZ>wX+DC>ml9vI~_5g>r!+(5_%ZRWPzA!kG%ZIs>fR20HGr)o!HcR7(mM99?ETS(|l?mm=p!VpNo?k-c{Z<_5JLpHeLU4YU8<6pLh*P>K%$F5+~!g2##SQiB0&_O zuPiODA|0uUMOpEojP{9x-x_~ayo`S}XRV{GkFvW|bqYtsXGfhBE&FKPLKi?uJS7RK`%0>TJt)Z_mQO5s z1aS|vlQKSF&mQ5+n45Y={JCK^r56Sf=z(wsr^U|sQxV5JyqA8$k&fghjGs#@YJw!s zLEt2I(79w`5=b2#G*=D6Q%kb6Lg!kl>vuDBVU5{^bR@01dHIy2`l6pRaXQklPnU4~W;c%e!mTy#g2Z z^cB3HFXRTq7^~(zM;BU~6m2vXzH81NKv7`=DEGAcu6w;!A4u9Fho=s{l2`M&ID&??*O9sI`OW?AdrJt-zE4^V( zMWvQXWy~w3^0;M*{H5LM*{&w=zNH$=6a!Ns@T=Kxg%|`gvIY70gkz zqEIcfRRwm5TS44Z^v9&~jtRR+ue@rmyqT~3dsT_URD~y7b1*j;KKCMqJbxVx}d+lS5+I*W@Inx>r4PwRX>Q@4$%AZW@_@T8o-^#VF zYZlY*)E4RyhxL}%q@QFFFdf8aCQ>^nBE1UXBunz;8WBa+@KvBj z*RuxcA>$)6mb`#bCzwq+lqibjqcD!bjttnvk;Kt;Nl1(adL26aqfP^ z@vxz>B%S+|`5ATd*GVrLuPMD3=u$Q#q8ZVMGI-Z_sP%R$yMLUzdUAQ$9Dux=xc=4i-_Xjq;ZJ$KPols_Vr + + + + + + + + + + + + + + + + + + + + diff --git a/challenges/assets/r_g_border.svg b/challenges/assets/r_g_border.svg new file mode 100644 index 0000000..187bb8d --- /dev/null +++ b/challenges/assets/r_g_border.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/challenges/assets/r_p_border.svg b/challenges/assets/r_p_border.svg new file mode 100644 index 0000000..8876dd6 --- /dev/null +++ b/challenges/assets/r_p_border.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/challenges/assets/r_s_border.svg b/challenges/assets/r_s_border.svg new file mode 100644 index 0000000..9dfc6bd --- /dev/null +++ b/challenges/assets/r_s_border.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/challenges/assets/red_add.svg b/challenges/assets/red_add.svg new file mode 100644 index 0000000..2f265aa --- /dev/null +++ b/challenges/assets/red_add.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/challenges/assets/right_key.svg b/challenges/assets/right_key.svg new file mode 100644 index 0000000..103c86a --- /dev/null +++ b/challenges/assets/right_key.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/challenges/assets/start.gif b/challenges/assets/start.gif new file mode 100644 index 0000000000000000000000000000000000000000..33629f270e36ca8f06c981f5c58307750771f160 GIT binary patch literal 43649 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 literal 0 HcmV?d00001 diff --git a/challenges/assets/terminate-icon.svg b/challenges/assets/terminate-icon.svg new file mode 100644 index 0000000..fb1a3e7 --- /dev/null +++ b/challenges/assets/terminate-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/challenges/assets/trophy_bronze.png b/challenges/assets/trophy_bronze.png new file mode 100644 index 0000000000000000000000000000000000000000..51cc3c9e8738092fa59260fd83ed7cbf0736fbe2 GIT binary patch literal 2821 zcmb_edoVJzh3w)QhAh(U^Lt%T3KB|1YtoJn@&j<$!x=B8s_oK&3>54!26*KTr+B-OSY*rU4SVKWwbFOhjM!SZPysX zP}C(J|EmX3e|Zy1QfpCM3c(LnDA-A_%BxM*H7t!Zrn-7uOWQFp=SxOq3rwi-=|h_O z^AFLm$U{?SGb5E1`h6bv>Xq`{h4b-}Y@O$KkdisvJR3pO!|Ln!a_O_dbGKxLUR}Yo zk~PlCVPFPhSDksoP%n|VJt|8h`HDZt*D~UVm1Ema?dat&YlNdoJ-8{>jRWFHh8>@e z;j|lEKVbN_FE|Wc*P`%b)D3D_0ZsECa6Q%dcKWIH>%P2%84DvpGGCf*VxXVj4ln7F zAy3Aep~wzNxstz^O1IqPNbsbNFqqR!@GH#qK>RE~2*eM#K8MtM`J)ObFRH9)vI>=X zudBFKS$Ps38}FBhGSxYHFtpmL{uC1T; zq9UH&5W;J*F4(_={9GMNWf8ew1ny6u2T?O(sYmnqJMEMAH78<%cHp`j(382P!*@rx zYo$5m($TTs+-4XZm${XGEX7&Nh@+rM7Cmgr^^35+WpMdZT3|q zr`RHn$Q%e!Q0&ht;A#fGZi$*i>y{8Z0+hc>id=5IKv3>)tG)DwL!`Co>y?IrmGL52 zFpirBE@PXsl z6p0a~<}bAPJnqA0(2c{oyjf(2+Ku4x1k$3ZBe)X%RLcxtsfXVm3L~ zjM&y=qq&cAqG%JHhR6EbKhX5*IQSEoE^iX#bZ?9G6BTt{=UI>DAwiHH4(SMg4K3k} zDvhGZsHv*0kC4$hv|;LXnZ~gqfd>bT#Hm(ysFUm7v__-^4iH>TJ>v0J+iPRB%?}cx z*}2IxM$@SZPtHJyF;tPd$8ULAiQeZmW4R%hgKk{zkj3>ZA&pfhf00C%G0`RVi^-H( z5R;OtO+0bP;`D~1b511G6nei}*|jT%-V!{|=vgn@p69$O{a1g+;USI+0TP3qUg1Vn zS7n=mU(*m|RIAM(*s9F3A!B{#-b`_75=GkYyGJZx!By}R7}_$?EfDFyKHzhe6}fa} zqFjaJ|9z{=`Vdu@-s;%>iIVJgyZX(QhDD79%3E+q`zn zP(fNKf4NVE@Q7}dkjV-pp(F#f+yY9>b&&2vtV$;BXJNN?uB~HXgMh%aD9UBb*xJ{) zP2?n@oQ_pJ*yl^NA$F&-x$r!8{or3wUw<-r7ksI{o|>C?rJs~lVP&kxI;A0Mn5YE0 z6FOqIM&qu5*OErKfQt8x@k{dS(&(wGs+y~mD;JBL@e;UXULE ra&{J!Vsl>JTV|g97gNR0juqaVZhd$_F+v9%Zvi;W!nF91%TNCRR$(zo literal 0 HcmV?d00001 diff --git a/challenges/assets/trophy_gold.png b/challenges/assets/trophy_gold.png new file mode 100644 index 0000000000000000000000000000000000000000..94de9566895828a84fda2112ca8c4cf30f34e5ae GIT binary patch literal 2665 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 literal 0 HcmV?d00001 diff --git a/challenges/assets/twitter_pixel_logo_icon_181924 1.png b/challenges/assets/twitter_pixel_logo_icon_181924 1.png new file mode 100644 index 0000000000000000000000000000000000000000..a8a041ec98b6673846c5c579ef3d5fccf2422978 GIT binary patch literal 784 zcmV+r1MmEaP)^l4?RUIT4kU)Vlv`DCk841EbBo<&`r+)wyssvjH1~vu;*qBf!HlRZ#I$$dJ z0}^$Bffias5N$;+AwT_#dl$txBzElJm{jmd(LKMrT)w>f-n;Wj_zhEw>uE_*ULi)< zz{Pi$k7;h7j3I^8GNzU`W@N}0N`{pz8s;^`h?)tl4t(UMhU+JukWX=XZ98pC_6-Ul z({03zbh8n0Y7!$&kx_?~vJ49~3x5x$k;H@LG?~(=rA-l@FI5A~h&@v6sFZ;3--J1| z;#V*L+&``2%8~tTzRcTge5x3@IWdOWlVjXAxo-=x5=$mzq(+q??HbSI4;pFP-?T_jkqXa>c?MwyGf z!V|#?M~v|=tZdi24yIIZWmUhRCG?u#mzW!i`Km~SGpf?H1Pl_s#BQ%L(NevMo7m8b zKM=8d?~B;?{BvZbA_)Gi(?vIsURlFLwx|ah9~&{s@G#q1Xkx7zG_58?UGoDK(Hv_= zi0LN6AQUn8;f{8IUd1-&+C{=*cZ#2)k{a!P1X6vL@y==iFY+}Ej2MyfIwJd_(6Ija z+~)hM57){_Dw5EWm!5L0(Gi_oz>?56u}2?DqMgUMC$TIu#Lf^k0 - + - - + + Status Code 0 | Challenges -

    @@ -472,7 +465,7 @@

    >Education

    - + Challenges
    - Platform - card + Platform + card - card + card

    Challenge

    Most Active Hacker

    Button
    - card + card

    Challenge

    Meme Contest

    Button
    - card + card

    Challenge

    Avatar Profile

    Button
    - Roller - Roller - Roller + Roller + Roller + Roller
    - Box - Box - Box - Box + Box + Box + Box + Box
    - Box - Box + Box + Box
    - Box - Box + Box + Box - skull - skull + skull + skull HOME diff --git a/challenges/style.css b/challenges/style.css new file mode 100644 index 0000000..93f8447 --- /dev/null +++ b/challenges/style.css @@ -0,0 +1,805 @@ +@tailwind base; + +@layer base { + html { + @apply text-neutral-800; + } + html.dark { + @apply text-neutral-50; + @apply bg-neutral-800; + } +} + +@tailwind components; +@tailwind utilities; + +:root { + --ti-cursor-color: white; +} + +body { + font-family: 'VT323', monospace; + color: #ffffff; +} + +* { + scroll-behavior: smooth !important; +} + +#preloader { + position: fixed; + width: 100%; + height: 100vh; + background: #1e1e1e; + z-index: 99999999; +} + +#loadingImage { + animation-delay: 0ms; + transition-delay: 0ms; + height: 35vh; + margin-left: 5%; + align-items: center; + justify-content: center; + align-content: center; + display: block; + margin-top: 7rem; + margin-left: auto; + margin-right: auto; +} + +#loadingText { + font-size: 2.5rem; + text-align: center; + justify-content: center; + align-content: center; + display: block; + margin-top: 5rem; + margin-left: auto; + margin-right: auto; +} + +@media only screen and (max-width: 37.5rem) { + #preloader { + width: 100%; + height: 100vh; + } + + #loadingText { + display: inline-block; + font-size: 1.5rem; + width: 100%; + height: 100vh; + margin: auto; + margin-top: 20px; + text-align: center; + } + #loadingImage { + height: 35vh; + align-content: center; + } +} + +.timeline-wrapper { + overflow: hidden; +} + +/* .cp{ + animation: loop 12s linear infinite; +} + +.container{ + overflow: hidden; +} +*/ + +.d_contents { + overflow: hidden; +} +/* @keyframes loop { + 0% { + transform: translate(0,0); + } + + 100% { + transform: translate(70%,0) + } +} + +@media screen and (max-width: 900px) { + .d_contents{ + animation: loop 10s linear infinite; + } +} */ + +/* The lines below contain the styles for the challenges page */ + +.challenges-body { + background-color: #1e1e1e; + margin: 0; +} + +.statuscodelogo { + padding-top: 1.25rem; + padding-bottom: 1.25rem; + margin-left: 4rem; + width: 9rem; +} + +.challenges-text { + color: #6e6a6e; + display: inline-block; + transform: scaleX(1.4); + left: 5.7rem; + position: absolute; + top: 5rem; + font-size: 1.6rem; +} + +.platform { + position: absolute; + width: 100vw; + top: -26vh; + left: 0vw; + z-index: -1; + height: 126vh; +} + +.card_border1 { + position: absolute; + width: 12vw; + top: 70.5vh; + left: 75vw; + height: 15vh; +} + +.card_border2 { + position: absolute; + width: 11vw; + top: 80.4vh; + left: 19.7vw; + height: 15vh; +} + +.card_border3 { + position: absolute; + width: 12vw; + top: 15vh; + left: 16.5vw; + height: 15vh; +} + +.card_border4 { + position: absolute; + width: 11vw; + top: 0.5vh; + left: 60vw; + height: 15vh; +} + +.card1text { + position: absolute; + top: 70vh; + left: 75vw; + width: 12vw; + display: flex; + flex-direction: column; + align-items: center; + height: 15vh; +} + +.card1heading1 { + font-family: 'VT323', monospace; + margin: 0; + font-size: 1.8vmin; + margin-top: 3vh; + margin-bottom: 0.4vh; +} + +.card1heading2 { + margin: 0; + font-family: 'VT323', monospace; + font-size: 2.6vmin; + margin-bottom: 1.5vh; +} + +.card1Button { + width: 6vw; +} + +.card2text { + position: absolute; + top: 83vh; + left: 19.3vw; + width: 12vw; + display: flex; + flex-direction: column; + align-items: center; + height: 13.5vh; +} + +.card2heading1 { + font-family: 'VT323', monospace; + margin: 0; + font-size: 1.8vmin; + margin-bottom: 0.4vh; +} + +.card2heading2 { + margin: 0; + font-family: 'VT323', monospace; + font-size: 2.6vmin; + margin-bottom: 1.5vh; + transform: scaleX(0.86); +} + +.card2Button { + width: 6vw; +} + +.card3text { + width: 12vw; + display: flex; + flex-direction: column; + align-items: center; + position: absolute; + left: 16.5vw; + top: 14.5vh; + height: 14.9vh; +} + +.card3heading1 { + font-family: 'VT323', monospace; + margin: 0; + font-size: 1.8vmin; + margin-bottom: 0.4vh; + margin-top: 3vh; +} + +.card3heading2 { + margin: 0; + font-family: 'VT323', monospace; + font-size: 2.6vmin; + margin-bottom: 1.5vh; +} + +.card3Button { + width: 6vw; +} + +.card4text { + width: 11vw; + display: flex; + flex-direction: column; + align-items: center; + position: absolute; + top: 1vh; + left: 60vw; + height: 13.3vh; +} + +.card4heading1 { + font-family: 'VT323', monospace; + margin: 0; + font-size: 1.8vmin; + margin-bottom: 0.4vh; + margin-top: 2vh; +} + +.card4heading2 { + margin: 0; + font-family: 'VT323', monospace; + font-size: 2.6vmin; + margin-bottom: 1.5vh; +} + +.card4Button { + width: 6vw; +} + +.roller1 { + top: 36vh; + position: absolute; + left: 12.9vw; + width: 15vw; + height: 28vh; +} + +.roller2 { + width: 8vw; + position: absolute; + top: 85.3vh; + left: 92vw; + height: 14.7vh; +} + +.roller3 { + position: absolute; + top: 6vh; + width: 15vw; + left: 70.3vw; + height: 28vh; +} + +.box { + width: 4vw; +} + +.box_group_1 { + position: absolute; + top: 37.7vh; + left: 50vw; + display: flex; +} + +.box_group_2 { + position: absolute; + top: 63vh; + left: 45vw; + display: flex; +} + +.box3 { + width: 4vw; + top: 44vh; + position: absolute; + left: 81vw; +} + +.box4 { + width: 4vw; + position: absolute; + top: 25vh; + left: 88vw; +} + +.skull1 { + position: absolute; + top: 75vh; + left: 4vw; + width: 3vw; +} + +.skull2 { + position: absolute; + width: 3vw; + top: 9vh; + left: 94vw; +} + +.home-button { + font-size: 7vmin; + text-decoration: none; + color: #6e6a6e; + top: 2.5vh; + position: absolute; + left: 88.7vw; +} + +.home-button:hover { + color: #e5e7eb; +} + +.card1heading2, +.card2heading2, +.card3heading2, +.card4heading2 { + text-align: center; +} + +.card1ButtonHidden { + display: none; +} + +@media (max-width: 450px) { + .platform { + opacity: 0; + } + + .skull1, + .skull2, + .roller1, + .roller2, + .roller3, + .box_group_1, + .box_group_2, + .box3, + .box4 { + opacity: 0; + } + + .card_border1 { + position: absolute; + width: 53vw; + top: 20.5vh; + left: 23vw; + } + + .card1text { + position: absolute; + top: 20.7vh; + left: 23vw; + width: 53vw; + } + + .card1heading1 { + position: relative; + font-family: 'VT323', monospace; + margin: 0; + top: 0; + font-size: 4.5vmin; + left: 0; + margin-bottom: 1vh; + margin-top: 2vh; + } + + .card1heading2 { + margin: 0; + margin-bottom: 0px; + position: relative; + top: 0; + font-family: 'VT323', monospace; + left: 0; + font-size: 5.1vmin; + margin-bottom: 1vh; + } + + .card1Button { + position: relative; + left: 0; + top: 0; + width: 27vw; + } + + .card_border2 { + position: absolute; + width: 53vw; + top: 39.4vh; + left: 23vw; + } + + .card2text { + position: absolute; + top: 41.7vh; + left: 28.8vw; + z-index: 2; + display: flex; + flex-direction: column; + align-items: center; + width: 53vw; + left: 22.8vw; + } + + .card2heading1 { + position: relative; + font-family: 'VT323', monospace; + margin: 0; + margin-bottom: 0px; + font-size: 4.1vmin; + top: 0; + left: 0; + margin-bottom: 1vh; + } + + .card2heading2 { + margin: 0; + margin-bottom: 0px; + position: relative; + font-family: 'VT323', monospace; + font-size: 5.5vmin; + top: 0; + left: 0; + } + + .card2Button { + position: relative; + width: 6vw; + top: 1vh; + left: 0; + width: 27vw; + } + + .card_border3 { + position: absolute; + width: 53vw; + top: 58vh; + left: 23vw; + } + + .card3text { + width: 39.5vw; + display: flex; + flex-direction: column; + align-items: center; + position: absolute; + left: 30.3vw; + top: 60.5vh; + } + + .card3heading1 { + font-family: 'VT323', monospace; + margin: 0; + margin-bottom: 0px; + font-size: 4.1vmin; + margin-bottom: 1vh; + } + + .card3heading2 { + margin: 0; + margin-bottom: 0px; + font-family: 'VT323', monospace; + font-size: 5.5vmin; + margin-bottom: 1vh; + } + + .card3Button, + .card4Button { + width: 27vw; + } + + .card_border4 { + position: absolute; + width: 53vw; + top: 76.5vh; + left: 23vw; + } + + .card4text { + width: 47.6vw; + display: flex; + flex-direction: column; + align-items: center; + position: absolute; + top: 79vh; + left: 26.3vw; + } + + .card4heading1 { + font-family: 'VT323', monospace; + margin: 0; + margin-bottom: 0px; + font-size: 4.1vmin; + margin-bottom: 0.8vh; + } + + .card4heading2 { + margin: 0; + margin-bottom: 0px; + font-family: 'VT323', monospace; + font-size: 5.5vmin; + margin-bottom: 1.2vh; + } + + .statuscodelogo { + padding-top: 1.25rem; + padding-bottom: 1.25rem; + margin-left: 7vw; + width: 9rem; + } + + .home-button { + font-size: 17vmin; + text-decoration: none; + color: #6e6a6e; + top: 4vh; + position: absolute; + left: 63.7vw; + } + + .challenges-text { + color: #6e6a6e; + display: inline-block; + transform: scaleX(1.4); + left: 14vw; + position: absolute; + top: 5rem; + font-size: 1.6rem; + } +} + +@media (min-width: 450px) and (max-width: 768px) { + .platform { + opacity: 0; + } + + .skull1, + .skull2, + .roller1, + .roller2, + .roller3, + .box_group_1, + .box_group_2, + .box3, + .box4 { + opacity: 0; + } + + .card_border1 { + position: absolute; + width: 53vw; + top: 20.5vh; + left: 23vw; + } + + .card1text { + position: absolute; + top: 20.5vh; + left: 23vw; + width: 53vw; + } + + .card1heading1 { + position: relative; + font-family: 'VT323', monospace; + margin: 0; + top: 0; + font-size: 3.5vmin; + left: 0; + margin-bottom: 1vh; + margin-top: 3vh; + } + + .card1heading2 { + margin: 0; + margin-bottom: 0px; + position: relative; + top: 0; + font-family: 'VT323', monospace; + left: 0; + font-size: 4.1vmin; + margin-bottom: 1vh; + } + + .card1Button { + position: relative; + left: 0; + top: 0; + width: 27vw; + } + + .card_border2 { + position: absolute; + width: 53vw; + top: 39.4vh; + left: 23vw; + } + + .card2text { + position: absolute; + top: 41.7vh; + left: 28.8vw; + z-index: 2; + display: flex; + flex-direction: column; + align-items: center; + width: 53vw; + left: 22.8vw; + } + + .card2heading1 { + position: relative; + font-family: 'VT323', monospace; + margin: 0; + margin-bottom: 0px; + font-size: 3.1vmin; + top: 0; + left: 0; + margin-bottom: 1vh; + } + + .card2heading2 { + margin: 0; + margin-bottom: 0px; + position: relative; + font-family: 'VT323', monospace; + font-size: 4.5vmin; + top: 0; + left: 0; + margin-bottom: 0.5vh; + } + + .card2Button { + position: relative; + width: 6vw; + top: 1vh; + left: 0; + width: 27vw; + } + + .card_border3 { + position: absolute; + width: 53vw; + top: 58vh; + left: 23vw; + } + + .card3text { + width: 39.5vw; + display: flex; + flex-direction: column; + align-items: center; + position: absolute; + left: 30.3vw; + top: 60.5vh; + } + + .card3heading1 { + font-family: 'VT323', monospace; + margin: 0; + margin-bottom: 0px; + font-size: 3.1vmin; + margin-bottom: 1vh; + } + + .card3heading2 { + margin: 0; + margin-bottom: 0px; + font-family: 'VT323', monospace; + font-size: 4.5vmin; + margin-bottom: 1vh; + } + + .card3Button, + .card4Button { + width: 27vw; + } + + .card_border4 { + position: absolute; + width: 53vw; + top: 76.5vh; + left: 23vw; + } + + .card4text { + width: 47.6vw; + display: flex; + flex-direction: column; + align-items: center; + position: absolute; + top: 79vh; + left: 26.3vw; + } + + .card4heading1 { + font-family: 'VT323', monospace; + margin: 0; + margin-bottom: 0px; + font-size: 3.1vmin; + margin-bottom: 0.8vh; + } + + .card4heading2 { + margin: 0; + margin-bottom: 0px; + font-family: 'VT323', monospace; + font-size: 4.5vmin; + margin-bottom: 1.2vh; + } + + .statuscodelogo { + padding-top: 1.25rem; + padding-bottom: 1.25rem; + margin-left: 7vw; + width: 9rem; + } + + .home-button { + font-size: 5rem; + text-decoration: none; + color: #6e6a6e; + top: 3vh; + position: absolute; + left: 71.7vw; + } + + .challenges-text { + color: #6e6a6e; + display: inline-block; + transform: scaleX(1.4); + left: 11vw; + position: absolute; + top: 5rem; + font-size: 1.6rem; + } +} diff --git a/cp.html b/cp.html index 7bf9bf9..1105fc9 100644 --- a/cp.html +++ b/cp.html @@ -2,7 +2,7 @@ - + - + --> Community Partners - -
    - + @@ -108,7 +106,7 @@

    - +
    @@ -118,7 +116,7 @@

    - +
    @@ -128,7 +126,7 @@

    - +
    @@ -138,7 +136,7 @@

    - +
    @@ -148,7 +146,7 @@

    - +
    @@ -158,7 +156,7 @@

    - +
    @@ -168,7 +166,7 @@

    - +
    @@ -178,7 +176,7 @@

    - +
    @@ -188,7 +186,7 @@

    - +
    @@ -198,7 +196,7 @@

    - +
    @@ -208,7 +206,7 @@

    - +
    @@ -218,7 +216,7 @@

    - +

    Kolkata

    @@ -229,7 +227,7 @@

    - +

    @@ -268,7 +266,7 @@

    - - + + diff --git a/index.html b/index.html index e20b096..021eb4d 100644 --- a/index.html +++ b/index.html @@ -2,7 +2,7 @@ - + - + - Status Code 0 | IIIT Kalyani - - - + Status Code 1 | IIIT Kalyani - - - + -->
    - +

    - Status Code 0 loading + Status Code 1 loading

    @@ -56,16 +52,16 @@

    >
    - - + IIIT Kalyani Logo @@ -80,7 +76,7 @@

    • SCHEDULE @@ -88,17 +84,17 @@

    • TRACKS
    • -
    • +
    • SPONSORS
    • -
    • +
    • FAQs
    • @@ -116,7 +112,7 @@

      > @@ -127,7 +123,7 @@

      > @@ -139,7 +135,7 @@

      >
      > @@ -166,22 +162,19 @@

      class="text-[#9E9E9E] m-0 tracking-wider text-3xl md:text-4xl xl:text-5xl" > $ man StatusCode0 + >1

      - Unleash your creativity and join Status Code 0, an official - MLH Member Event and the ultimate + Unleash your creativity and join Status Code 1, the ultimate 36-hour hackathon extravaganza! Compete across diverse categories, showcasing your skills, ingenuity, and collaborative spirit alongside like-minded individuals. Discover the perfect platform to challenge yourself, acquire new skills, and craft awe-inspiring products with the potential to make a significant impact. Don't miss this unparalleled opportunity to showcase your talent and be part of the - tech revolution. Welcome to Status Code 0 - where innovation knows no + tech revolution. Welcome to Status Code 1 - where innovation knows no boundaries.

      @@ -212,7 +205,7 @@

      @@ -231,7 +224,7 @@

      @@ -242,12 +235,12 @@

      class="flex flex-col justify-center items-center min-w-[330px] m-1" >

      - Apr 15 + May 5

      12:00 AM

      - +

      Registration

      @@ -260,12 +253,12 @@

      class="flex flex-col justify-center items-center min-w-[330px] m-1" >

      - Aug 1 + Aug 17

      12:00 AM

      - +

      Registration

      @@ -278,21 +271,21 @@

      class="flex flex-col justify-center items-center min-w-[330px] m-1" >

      - Aug 12 + Aug 24

      - 10:00 AM + 11:00 AM

      - +

      - Opening + Hacking

      - Ceremony + Starts

      -

      @@ -301,16 +294,16 @@

      12:30 PM

      - +

      API

      Workshop

      -
      +
      --> -

      @@ -319,25 +312,25 @@

      04:00 PM

      - +

      Auth0

      Workshop

      -
      +
    -->

    - Aug 12 + Aug 24

    11:00 PM

    - +

    Mid

    @@ -350,12 +343,12 @@

    class="flex flex-col justify-center items-center min-w-[330px] m-1" >

    - Aug 13 + Aug 25

    - 03:30 PM + 04:00 PM

    - +

    Final

    @@ -368,12 +361,12 @@

    class="flex flex-col justify-center items-center min-w-[330px] m-1" >

    - Aug 13 + Aug 25

    05:15 PM

    - +

    Closing

    @@ -384,7 +377,7 @@

    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 P1|aZs^>bP0l+XkK&5M%F literal 0 HcmV?d00001 diff --git a/challenges/assets/avatars/hamdaan.png b/challenges/assets/avatars/hamdaan.png new file mode 100644 index 0000000000000000000000000000000000000000..6c402bb2e8d01321a37066f4336bbb71b7e3f694 GIT binary patch literal 35746 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 z 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 j2NXDRdgP8GpU<5qA zpDM`5QZ5M*%mS_xj#40L9)c&rID(g88fq|TFi9{j$e$9yM5yw@wEu{Kb&%9_1_6Ob z|DS<^WaZ$1fMkSAi3+KB=v{rmHkF*I?m+jN6JGmR*PNd#^1(<+3Tr6!iKDVlLZCD1 z5e=n<29s+KIN}R~1lwdn<~6`L3c4wTe1ejO(J{6hAmbmC6O)j$z$mb~$eg!#9&5Yv zKP2qf3*2~LxT(6Xs6PF6_0@YxmD|xi$$LPW@q7N<@it%UcdP@0rgixL01QiTyl;oe zsp;qIKlOU8UOWP;R040~os~=HHxBVvO69E7*RI^TX`g&QTu&>X_TMqRN2Av}z8B~I z`d_cZo^IQ~Ka`y-f7|TZ+w|IX2=6i{K0iM**VfjkdiMZ5dqh1yUpGHj8?L(c)jT%9=jZ32kqu~wUfgq5t*8Db z*5BqOma19U(Fo0rXAoiOryTj-B}$P~px7fXdt)AN_Uy_d<17LPH#uyTDGRQjaX>(< zIL}J%pX3DUbhO|P+(dpdVShhGcz-Bj)yA!s+-Ma{OvOrnkzT!YSyVZN&QHS z&8Z)gx;v8`RgzhF0yHOyw2!TN(cm$ZY8`6G0t$!Fl`+I2Ht`(&BqXk00V*_sUdg-0 zL&|%8j~(YfBaZq{>00-j76+Tl5WN?Vx#nSCLe}Pr1*)n3V~MkHb|D5RN1<`z&1g9^ zB;@}*NEHo*+jG-JE9;7+F+Fm7+flnlOjzR{M6RmNcQ7bF7l1yAFUC~F^VW`jwaV7) z+&(VP;?dtq-(TY5|9-c(61^o7dEP?%?Lzz6`TBnKTXi$z$BsM|BU^6?`L7xkgkQON zn_4@6yy|qS9>`;2tIOGNWNCVrW-e7As`)3eomanRlDyTvIJ4&TjXUgFWZAm2H%_}T z0AitefWX|$_y^SqHc5s=Yt8biiC=stWhXB;!}2qgZTdUw|HN%N<_t1ip@XZIY^tUi ze)GHDZ4P@&EJVKa6uHj6Yy|h`t5z~JCB^un6#8l?St%_(W;NoQvVydfz#mPhMGwJ9vEt18gFveU(CIgWbWen0iE zDpe~@%xl2F62;SVJ`gb+jhEb8%?hCr?xUJA(GxiqD2L6F#Gd&BA2_95ftCxgqgZBd zX9LmL3TRH?KA1B&n}2(d@pEfA;*)Fa_rN&+t60mP$eg_A;Nik~N%U=mzH!k_4lz1w zIj~jM=2y*_Fo16qn3_ia`h2WLXOOyuVw3_IeAd7uN@RqaK08dtE>g7ZBZRclRw+q5 zt$cEbxG2;-djEjXGVK}Wb{Gb$EjBoU$1sayd3}#U4}_!5ngQ2V$&s4E7Ghq?UtkB zM-%@S{E=)n45D5svz_J(`<%xHOJrdvedGGbRZT7#a_1&m#%6f9F<;bvay#O5aI}n1KLG5&~h7EcL>$x4y z7F@3GkvV)aVpV{?xT6L-v)E!a%@iUI8e{`=$IY~=SIG&B&S2hu6*|92O=gQ-Hz+R8 z)zzu!0o-QV_AG=LG_E2!H#Xupv)px8UtQImcE`P> zBRnZB6T~&ZW2-B$*m2eXYmY+^QF{b_YMgtPo| zQL18`A?7OYZf=vmI=|^f;qHLYGKarn@`;%ZSIMb~^KL>nhChaDo_G94!p#B?d|u!0 z79L1E=i8eBuT|Lw|2~{7GH)O^j)#yqkSBc@RpiTN!aH#QGC@XH54(U3ZOg%Toq`!I zq8Uc~7&D1A3pYnQ_KWB6DZf^ZLElX$k?S;ce7Q4KnWMYo^Y@s^Q28X)^Y=L%4sb%; zLR!3~R1(Uk8dByom}<~s%o}es)K*H-R{IIt)N(r&IfNod@p+mEt+sy;og@uPa3vwK zX#=-+A1ImI7A?vdX*X#kvk?NXYgr=(K60&bu>l##8;LjSm~Wr_xo(jSQ`a`40vBIa zsoruo!x!pnAS8zOvWgH+6N5}0L%!7Q8UJa z^F#FME#!4MDjL)aQ_a>RKjwvGkg&AHUWtQ!k~j$}%y|g+UQV+gpC2+cR$gF@Kz8^E zP9v-YPA(#XG#~mjAL$<-*_>DBct5}A?+?9}W_{k?TJa6&?Vp2Mj~VanhyLo=*iNY6 zZ-g!;e%Jfga~AXI?e>_{1)K|)7N#My1`!;~0{J(-*F7(JHpaGmfQGib+HkR} z-c*D<^MDKYQ37`pXB`v~KsDw?O3srxTz7`&zjHVsJku8 zmcG(?{T=ZvUhiiewHl6wWR%Dd*T1oM$CRJVpnFV6p7)?(iY4Loxz{pCJZZ?}rE zf2*9Heb^^ObhJ!^f2{+mFHapW!6OdDl?!A(&4IpZQ#}V-Zi-}Ie%Sj|sk@XkZ34{h z8IL14Ng)^e(`*s_tqtb^0Gjk;2K}B->0b5lhg1ThpV!ge82{}&h;Sa6LDYH&7sXQ@ zwGvBm_?jhY*8)<;#OMoL;o=Qz?Ne>xgrSZ}RU2ol`go0$52zx)mQDVYHXxY`7u_a7 zU4A{+WBmyWZ(xK`c{H@vqK_HWnF9`B4{cM;utp$*O9fmhvan6fC3zC* z!vLPTX}aC42{J)^1WZ`;;cXxRAv@UN93O3D3WtV_-3?ZiW!Ie4g#`J z)j*^#mcIqvCWx3_0OV**d;|ZUyaxjqfUPa;Qqu>Shq%+_Oli5MsgW5ie>zWq|0D2J<<6MTOlSb$p zzh62P*Jcf4M4tB#Yd8M;$PK?Q!2{(njX2S3R7HCsn8xP#GXeo(6-h-%E7F%xKhIub zobIMaXf!0a{S+!u-)=Y#HXU30^3w?)qrLVXZk>V+|hwI_z$-Sq5(rYczHecp%7^;_9_9S4VH)4H7g zD;AtJ2Z=g<9~(R01V5AU-8a~FW`IrBa3UVJOJ+6qXm7ivvCtSv0Xa$Le~H>@$?qr< zi7Ufpx}TlO%CLL<@tRzBkVvf%`p^guJtrNSE!Av}H!H3~@D6EU%~^ydl8pCY?&7L{4U9 z$SrxrPYru&IrJ9ti6N8erN>BUbV)xCBgXkE3r}<_m7nxKrE!iDaERFSIxj$&pR{`%0Jmjqg(UM0jiy3ZsU1=iQAP$d2{6k*e5*|Thm9E@KvJ;b;D);;b) zsB=jm#B&kyfE`)4fNtAEpkG3{+uC*$eT4d)qSJ@?4h z&@~)p`O9yQo=f?k7N#yQVf`se1JpnXUndOqpsi>#R5o>zY1m{!8Eo`y=BXC8BWFKR z91gFM)_9Q&<-f?8j=<%Xjy-!oH8v&-b21ib+C{&s+2p3UlTnB>*NH|@BQ8g4iwGQs z&c#i&ADOmxJHC}+{fO_eCrD9_TksUy;;-S` zIpw()Mg=Om_vq<8UdhnhZYI(2=o6=O>x}l(>^4c+WQ>9p#-zg}-lQd}H3fT>MqIbg zkrB0)Sfq=Ggl0bqYvetTh$V4#JogRaDG!r94U{_L&D+1g-b>` zM|FzA`zqs(l_w|I{}H9!@g%eZIve<@t)6LYmj`qiCzc75gXHOiF5*5QH*z@Gv8x4uxG{|KjZbo_d;^a z9yExldx1lO_nQPVhFLZY_g$b9IoSLS#!iYrJ(8fiX?8j-{n+5%P@@yi)*Q&6?t3~& zv?sKI58T_#nj|O*lGJsKc2qttMc8i0sGFK0we>l(Uq)Z>2 zHwVQSgr#8d44SPBMoqHWl&Bz7ueR4j$lb#&Y$}+f>htOUW&bV9>t1aAwmC-@-r#-H z%~9nKdoHeHqHMu4wr6w~1I_z&$zr%^cmq{Ndmam#K?;R{Yq)}z?K#|JwF>dZf*@|2 zM_Y1bx8G(dkfV#c98LveS(Oq3-$D`=-4sfqf}`i;mp`P@bSsJ=b378QNF5M!O5H~L z>FR=&V?-=Y*TF~%PJ(Bl9e@%_7J_p)(5yh_v7Hzyy+()K2IGWrK_c-ESE+GF*b-9y z&!igLa0$$=WCHdNxteznDeduEmFHtsf7s&CIk6cafDmDgCaSpxaigQ2tSJlNuh$yU z)}F`;vGhhQvCCHm6ay<2Tzy|)VqDD>jqWEjKV-$1E38OG^1lSF0RWaZEd@e-QGk<8dvHL!=7WA-i! zEc5@Z*hI2P9@wueoPjY%FsR*P=HRM0m)+$QA3Bj#>_iWvz&_e zetTL&0pCV>9(%kThtGdV~I z^=dy0jiDuuCRqO*GqyLRv>c5dF&)9Om`pJ^&Q84o-F&nL#8oy7oa%QN=f9r#|Nr#F3om1bU+N(V`%`N5&SrEKS|( zsn_3bMGS=|A(=bl$}_6#2M{zFFRlq)uI`VA%VYn;6`CZk-2H8BC*)8+TOhK}uDX2_>hsXvYb-q7#1=gkhxVYA&hbtOSKu?R&*|i^1=Q#?y_H5Xcl7SI zdI~06JjXV=QV3m-t$#|P4$$zuVoh=vu0f8iku$z~m&$7f7f$Tu;4b91^IJxNGAs}p zNhLa>l@L00O7*9xXUu4$Uue&P8|eMr<5;j6%mteTz=z-b%Yq0qmSV)FVIzkd$g_Ps@wOBdfv z!t;a~F|Eue+uiqRV{){hYQxnYX6ZtZFcPurewfh~r~M+h+Zdy=5hMTr0sPmraKEKrY3SdR6`L9)H5=)_SO?`Q zc*JRy7zxqIGOi|3$yRHtd`xFu28<}hIh7@7Ar6KlA_-W%4<=oss#BGCID7U}u-{z% zmBb|HHs^3d)v(38qD~!tUk=G2(V87~$crS@n&idORh>|VV{JZ;QEb%YhIbr@?S0!f zQQO!R428*#SVpM2tw_3uUn*VWd7VcRTbDq-M_I!*Z)iCyH2H4cSp4=q3| zvoMxCUQ31Z=u;%7mHQ>1kYgK1t=VF+?xb4L7#tc;xv5f5sG)5OqtNkbpJ{M@c;Kg# zKm4QRTwJm_uo@9|`d!?Bsufb)PWaKPulCvDavYiJy+{|MKbac-B0Z)C5w&q#V?jT~ zV4L{P9P8Kq{Hf8wplyDenLh%pm237QV@Wxii8$v`#GXGJ4%kJAr2EMt{E^04)7O(8Vm;CM-cVH zYvB1r@UE-qn6%MxL{e(ZLvn9zE4I`|PW*SV)wGW4Z$27J9q*#J1!`B! zf>(QwOIz(rZdr{!dTYB#iBbvFsvcqU_xoQ%9ZEvNQ3&L&ty3 z&GS6Dy)W;cUI~3N*^brbcIdDSpux%C2c0rS9fSW(D<{UHqx3qVwX%owS!vJ=nG|_g_@x_p_s}3ah87h`Ws}qWF zgb+$vELLKrJKeVr)u*0Y3Z_jTXGfJ|O`_BrenD)gLRH;ZFH|rLbDvC*zv%1XNRWp*SqGu^#!`}p*VJDD3FIH^U(CPh&} zK|t(|zSaONg7!4oOnwzP?_@7j*J;NbThdzAQMfbXW};#tJvqeQc>8ucVD{^=_CxRe zJ@&Kkb29v62cnNnuLCnwhI|43nzuI`atQ$=M7K3t9v0Vj4!4JU#ImlMuPVYNF*Y=e_7v>8$czi1t35c&FwX+HomE7}bV*MdhW z!QYmMvH-&Ht2D9o?`HB=9t}s2A;APK?(%1cL`va?kDQ(x)|JQ3ilxwBq945OdXKdr z_Fq!Z1pP%}HaaGC8=N!*kE|QNDoDs;_&4|=cYBe?7{l~!MA!vmMQ$ebUHTWfKrl4) zJV+c5Rn86-1=yE}roU1dda5sS*s^w4e@i!3Fw7na-XLiQaT9Pk-?p=d9bpgvrD&Cz zHX=JTTm2~-5|vr`_o7~D5<8Qyevb+dx)6sckL0o=iI`UIuVaoiwV zwe~f43c=?W$IM9>{cUxx`ZOT#LfzgHy4PES@Q$jzNgV{b+m{zr_iZ{3I#q=CW=4DX zS8Qz6pD%!2ED?)oQhFbPPu+hcIH*D1<{^^>nFR_?F31Csmv&jdJP+8E8xDEm{AY#|;|#c!*H=#@s-c{67nj@%VDirX)ZLL}w@aylAG-5 z0r-ZJE|4_4J&!-vE?MGv@j>`EZLqr1e3!Dn|2!A$e5&RPUOqoXYr0gk#xt$0~sUshtJ4X3;ipF%yQc6o;IT@UxL6Q3c|5?sC6Wd6jgxdLf*~;X*FV~;&@&M3klL=QBU2^ze7_SNV@5r05 zV#Xl0EoQ|&mhB>nb(E`d$QP+j9j6}~7hw;_fU&DHy$Tmv0AK?c+mj_2sS>dz=Nn;` zu1Vi}q8~5N_)rK|)W(WIB8GyC4n{m9ZmA!nV|KZR^8Vu79UNhDhR-k@&%{nkUGky&$oBxSBbpNeAWuqT)TBRjZ&XijNk{3zPt)FdAYf+$rILME zU^brOIEKCN7UnU5nV`T1puL5Zw zJ@in0mWZA!24B2-tod7wb^hWyPx3+HC|zgr+emE=Ug43YU8==M0SX$rmvIOX-O;s_ zH3qjJ+~@@6^M!Z`xtj1JArY%lVqaT>U_xmzpLC;^h5v-HDhY^x5;X^TsHKEkF;C%o zQ+nc(%)8dUTEZsp{i`>Cv_V81XJWjlmhq|LlUQ9|CT|O~VSR?7R#L^1B%b2ZU9vz; zB39py2W$@40s_{7#`<5ke7ToiFWo#fdY|1Wx{2(fCYfy!F{%(0t|yO0{XT&(nA_&F z4S`~Ibeqx()H=*!yjEPwVKMxy3M|+_c$0`>Fi;LkN;{R9L5E^|mZ9MaVOHm*&>$+hR|qs%$=` z2LI1s0m=KId2%oe%I(;6iBae!wrDfzYZ3kX`^%?Vf4+VI0{LE-gGIF9bol|*z)I~Q zCNPMYZT9d}xQuq*I!tD8|Bsad__Wh6j>=GYFYI{V@3~7dqVL?ki%{0xA_AR88qk#T zzd1CTy=z5lgYq?VRv{WZCj`j>Yog(mZd&r#UskJ4L0omJLmh16a9Grb*ix^2Oho2*2WuO;g2>VN?sb*w8 z#@H;=vPlt}4sIs|Wn^Ow{o?0VI6_sq2JuFl*x9tV7oM1v)XE&X;3AV6KbWu~V`>Q2 z1x00i@qj)&)<_nSEY)5=B#u8n-GiR3clAY8k*u}m(x^<}O#AnWn)@yPMnV~6GjQCS zq?+jW-}Q$M($IZg8ZkQR8DoNi8CwqTfBgt`g&U@pL10dTkzJ;+;u*^VROViTR!hnG zD8Zc$Po~XJW^xc)|IL;sSX8Q2C>HmH$Ml|L@Xd%fT}!hj^K5E6O9uv#5~!-+7?pdD z_27Fq%)dzAX7?14f;93lHg0${&Vn?QTBKvyJ_^Mmcn*}kb>7+a`$Ne!$;pZx-(90q zUH3Wgd+|;r;MRFy8G07 z{x@o_*<*BC>-Rousa1jBiSv`&BGUQdL&Q5@BqO1S+5OD(Lo)7_npkU~^ttxCUcs{c z5%aG!q@ER;)gJ6&b~6x#e4fXdHfg8Xw)_KN97+^Ma~`#=L6UJ7QR*k+zx|o*;xLfo zQUdCHHl5oAduZOPA8#T0V{?=&&@1}pDT=HOMKVN5URes0!P&%Uva13mmv&THpv{0bB#2A{w?UGzpQVp7=Gl#k$ac(oYY#If zK+ngy02Cr2WTd~C9}D)M4VTd0!`}6Ftqr)J>#%c8#wy8jQfUgt!uVU(S)8sUn{>RC zC;COEBkj&74KF=E;1FhG^3L|)RY#pSojl$TE1&IEH^R<4ppv(pQ9e~ZLb3F7>!C85 zu@lp~dNKj88)e_S@eMnlvHCI;qn-+9i{lGxJUh=E_pd^HU2sL-zCnyO!yIbA#oi#S$*| z!Jj_z2GH;Afk*t&{?#wL!tjzXaVcA#4nS9e^a_{-C{B_*xzxlikorrqy%l2BfnP`9 zzZ-)2CBk)nD9$J1l^qWhCA$-cVthgv?GfY;KzwTBQtDi!Uuw#V_cx6*=x$&4bT6l{ zR$2NzEy&TTc`=wq%22&YIWN|^U-OK?F|j@^^Kse~P_7~zC~VMVhHXneYg~1gBMrG8 zMkh5^F@hcpV}2C}2@?96yLN=M$p4w;lb_W{oj0H3SO&!*r36UEhpA?liX<{tS_3qV z3G2k_Dc_#JlTsdnGr5g7-Fz6s>^3)Q6iR)s8Z2BGxrN&L5?ml|Nu=ZPRDuh8TO(>< z^`*aq0bEk(-qA?Av&^yxlz2e{1%~zkfh7AU$7T(kH|@!reW5uPo_$nfIlBt5Na$@b zj3#7!lLg#TZ=frbI9Bqg3!E#6rh*aa=NJc3_hnKG9p)_f+fj9(nz*VYX5sDhai1SntUlLR5!sFusQ65rM<##fRAF+kPX zDlZNZc3qYV-u`?xv%;Q91&I`)cJ+ZJdTz3^&ZIF?Q#cLhKhlES_@(Xfz{Oyk{#Xs{ zwX~&QpSCg<=>!>xG?)Wcdm3U5-2bFosbBsuLJ7+=9eX)&n2BhytS(`$k=8puXPTeR zROm>~V9WX%QSO?& zHTWciY!K*mk?=aF!Jwc+1gl>fo=j9eKXOS;aoJ}v=ZfgDDE5)I`-ltmRa;m$z(Okw zMaEKPvfgNhJSO1FavCH|a`BW4^`h76likhJ^E_!biuao!PqqlUHBkb!j-YIUR>yDG z2u|xHqL=%59sYv37y#nou^G&I46<#gioUh;i0ai>QK*)8Zqd3B!A8~Z*@ zoH0*FsW)|Jro%l|J<^O5m;D=Sw6-TnDyJJ$_47eSG{t`xDL=bpiHKpv{MQAzq|XBq z;PX<-N(XVmVvBIe(Y@DyNwD)?y|zUa2dZDHc|-YS8iHf3lBF}g!qSJz^K64Q7-dt2 zhZCsGmtE;U=zov7X5IUVsA=s--T9~a>}bmFd2i>Z=yG)X3w*5+`jTzsfw6kLdhsSSv^9#9OIL%6q*C0mJbv6vWENN{!ifq3zk@(yL_@N~-%2emKpKxC(&K{K zvhm#?j9vE)@4d|oFrBoCd#5$Kf1~U((8ID^)ku5eSKtyM)q5L>BrP^ z&;}c$*cXe-=QVRETs84)>X7k<2fEOf_8=;G2z7gS)i^CSJE7iA%M-EhV@afaSmpNE zBxVajzQwhno(aet^NHfP!Aa@0u$kZ0}%cNcqmQlo((HSb|hEvn7Bjw||( z^{SeRMlw*CEjnK%b7QQTeazTy+B4WEjaW;{P3Pr@*zZH;b-a4`Ir?G0HUb|6IUCf> zoR}QM1q+hYqF{JXLD!%BjH*QRxBA&X1BYNkxa;aes^t5`Vi^lZmLLg^-O&RHWJ`orAMTbW{+mmO;D9=>jC*VPxsjY zAD3b@bxgL^7GW5 zn`^76sN+9z=QqSH%RhAc4bhx)cq>;G3xCZa`o%|PNu07}o8>I$)?}; z!b0f#%vhqa_O)RJqHM#xL|(Aq`%c~*`1-l9CXEcg_HH-y4H=VDvi1h@7>U*F@=LVa zk%fE+Vp6^Ci{mr2c4qtTxplPALelf|Ib0y+tNX>rUz)eivt|6fqxS3lvioNt-r#5* zQ4`rF<7=_^wf>T)_vU7f)BX3rakxfot>=NrntRv7Mgs*uhG9Nq*gb_J@V--&<4H59 z4~zLZ!b!KSEA4CD-k0?w6ZlhdsVNK=CaK+L|9#*3^>pbh&!74mpC8NDs7cvxzs!&O zW8>!Yxyt?yGNoyCAJB7s(b(F3WgD2@8ZiLu{ha*a|1ZiLZoYgv7_T9Mzo{w3M~)s8 z4e6}V-xx%8k2x;k9X%-Tr}Q3D?+4(UbdXXiyujeC77>TGAatHVB^{@E_SXflJY8N<%SEsPMGEB#zTPfb zl;e3Tc9vfJ8MDvc=@HunuL>mgZ7`8!!Hs9j!QL8U#?onINs!4{&T!qdqJNxG6cVCX z%4FocU-`-X`0*Bp#>A7%zu9jnPqI-qBau}9N>RwOALda9&=t5LG2mnMDQCsfd;y5O z_iwdADV2)s+O0+KlficzFB&%)3&m`jLD3-hQRa$-)PJGFHb@c=bCE)!R_!{Nglxrs z0t2zdJwq+F3pL{-(7u$j=UdA+Ixg&-HkH&SAyC^8CY%jHjicOGBKx8}h#y{yR^`ovbVLSV97z#-Qk6gjxmmxB9BvyI zBRYIN!qmX7{{|R0TO_p=9K$x+qLf$}=){6Tu0ruxL0r+>)@<9cnc zC`vbhZ!QRnLr2j$l8xi4<*#Dc+g>p@HI4rc!ep!KIDUkX<#u`5r;7>TA4DaxjBEyzz;!2-@SxG~8U?Dmml?=qDp5%X?hfGrY>4=52wNHvqo9wT)l8%vox=3!{N;_qwFS|`P33`Y{x>;6|REUC!0#%m(Q$yuVsO0mc+gLdrlC5QJkq1UH z%)u8c!QaaQDF%rL3pf5dkX&>SV_roIw|01nERK-h$%pa@nqK+cG~sIH5~@AVp-+4X zi2aUn+bgnDVsShBY~0khnz-@JT+gdxM~`6*rg3)ueR~#4=eQn%$pk zJ|~ZAEh@Sy@6c6ox*5R$9yx*;y^oF+laq*w=Ct_CK5~pVL6bmAjg}2Q9^B=|a3aqX z%D0mSbMjP`IwWu3RO8cS0kj+h^Z?vi zM%QO$?_=tk`sZ2gA(YMJFpJX`d^)|jtoB|QY(D2;7Ox?bi5x}AfUbMagx=lkWCQx- z?g3Op`L)&a?%AN|#x(?0{aG@)o~htRXszT^W6l-UeT;f4C6{tx`=xEJ9N}Vk{>!GOgx|!N{FVI!MUZr`R*&s( zedHP!RNo}EWXMJmMkBZs;+ZsSXiEKJ^r$Wh_qG?pLYJUeuI18PjP*yhB_Lo+BOS)| z=Xy|gmc7epyAsxmMV3H%6q~_M8B(2RX4mTou@fjZI@aRN$ll241$*|9>q2q0sKHmI zP+9y;9uj48){!qZAEOrUTuubrZ zs6(It>hEzb3KHF#9EC*V(GaM}WXiBmp+KhbPt-Z*N~ zAzQy~UQRUIJCt~e2}f{cEM6-w_7LNWJ`|vxV1%F$LEK{?DeJ{qzQR_0^T@_Nw>ZQX zA+J5n%CSF}8t>bHo2LV5A&b}($e-+iC;Ff0AVt5Q^ko>|)s#;b|K4unb_nCELdzH>q{#M6Pm}K;LUQ^H$2- zE~B~$^1QGkj|Nnt&^igC#Mm>!YftzZDnRjAQ!+2_NPtYG6#P?iD4ilcQQfdS9c=?C zcCgfuwvGW_Tel^h{Xpsz*qvL7DlfXBF%|8Qe5S!21PztB16D#xra`knc$b@hf@g|j z6mw=F=_nMIZ2MWpn?x5Ql_qtk)3LwzRYbC1^hk^X@X1*_*Rwj3x)1K_th6RD;N_ha z9)@GP?2LM5$sy&4`3+82kg)hGo6kn3ssvS|M61w7b}QUkBXkdEJ~7qdEK-Ot4BQ7T zHuPZgvbD~#6miP~Z+j z9*kaS(NHh?*h2Emt39zDDkWYGUhT^FoEGQOF*ow40A;SJCG?pAY?bFg1$XA~P#8&9kX)hPI+ za8;Hg%S0%b_*3B`Bbjfa`RiEOG^(cPoVqx%{}Y z>niJx?aWubdeF&Bj=Ipuec3TjBtT3>j5ho4GGm_Jky%lhRALDIA$tlT1?uB5A!A?rz_~>*O21<-s^%L#D>*HL)Wnk(Zsd) zTCSp8mGuD!!Yzc&DvJc_5XuE0CHl_SCK1PVF=IyW>;9vGqx)NCm3%R&piwqFk1E~w znH00CEwvyFKiIGmDYm@JgVa2{iOU_rn*_%1t4?QQ>@||qApORG^M`(^?QwFlNB3XF>Pb2^i zTdeDD=QUR%w&x(U2dST~CKfR{=0qo+sy>%d7Zx;W1qP}X=Ak;He~(1_I}mK}xG8fg zQPh6-Jk&rza)60X2Oty~b^R)mr|s?t&PL1shYe-L0gmw{dTMScM8D6qB9RGiEni|K z#=54SE8M2ka;R6?8l7cuSW&W2LCmmT2h&ew<^g{lzI|+3E11f! zf)V3wi3HUE<8>DN@}XaQgEgD(r)=L>esPNyHH1rhev9iYSL(W0(Ay9Wf|3bCrp~K4 zGq$Dyh2~Ynf`J;HQ7$B-Sa5i=?2-qfWMaJg8&Sy_`I2q6M%fHy@Mub=oz63A0ah85 z@ccs#tJr6mMLdw|vH*AWEU(cCX-ln68OrZeMISfsnYA-g+kh>JF`kvYpGs-;z98DH zQ|cx0zU=DXJ*eF;W=-{r1R%k*4ll5B{6#oKyC>YiP9?VQn`og^)n^;mjNbc$9}nZ<$2_0qhS9h>2Cx-+h_+@du6H%`TOCod0RKIr(a zB;!t9t)fLe2?TSs!(IHK*l$6yOHF+2&q3GmB=QGedOLmLFSzFte>x%G*C(iI`;YwM^= zlPmc;SBTP2n4F*E^YdFAhqnOuFJg%|8}GB(UeL6U$wBEWb(yJ50ep3BTEG}LI`TTU zuo)Rg48Kkz1Ma?Shzy0~J`U6@{)r~5rIDeo&e9@@F5pod)(rz``w>OK;VIe0rt z!Kia5ZGVp$V`fwB&u-!G^^8HWQdBrr#&xrJZ0BPpXPu{j!=}%b;o2nN4k;EPiLue~ z!|t8S)-6T`f9Mb;=F9x!tuVJ+}xqp}Gzq0s0sj=9X`7nN@NFFR5upS}+rKSR9zx z$I7tGjM+vL1uhy+mOi(fQ%D9kqC28o^RbcufF(}<`$#|Q%M=f?m619ApHj-0Xrwve zo67T}xd5(mA^`!Z(rF{`N5?HK37`SvP ze+`j@Cnt^xm1oRBV)AvFC_UBX4<8FE`b)DGl)>z^mFivxAHAeq#Kx}X5gFF11tSCh z@7PT#5z#%RP_4y+l^V&mKd>!_1dtB*tz4_(4gM(je*i^5y1%-tfk}_f3rVfB0h8z~ zT9ib5ngzAxh?%$XfNilsh9p@IW-rNM`0fRy}#==OwnZ*(ae{4_v?#UO_6&=AB)Q}@N#Ffg4ttlcFn;N?~+TLz;eEV~ZD=81?c z0i|iPXdrqbBWGTC8X_`vizo^kq<}7wFxpG({tm8^po&x+Xyt}?Y_~&!7pXT~6h{~x zGf$1W(Jyy52&!=I*en~zom%3?}l*VrHfRD-?O91?3ynBGWqc|=^d z2n6(iYi)r58g8?3$;!{PP-}{GQpg5_+T7P+ezEp!i_LK9>Bq8*&-!{inAr$qlM=daO8!BLu?dgi(+>;Nh!v)us7UX_8Rc>dKu=dN7jG079-W^fLY@?%h^ya)VY`9wJ4l;nrpMS_C)2 zb8vq66iz=%ex<@56`evmwh(6{d}>3YcsHb)Za5yY_`d*pFekoraPF60tN*s>eX-`MWdVukC3aMK@W)BX$z2K1B*cRJcG8L*y5M!=n>5%(&zHAH8z6mH{ZvIH964g`{NpNhw3F;*!jgGLH z4$m^2maJEmpLO1Jxa@^z&qjsn637~j$!Edo9XfqKMk3Oxy&T0I7|koyxg&1Fn>udn zxINEl|K$gN{PlnPo$vZTW{EOA=1X>{)y&?82%m_k6qog>HZ;&-6Xc6brM zk4TM9jK;mgpSQrDp>GCK2$~34+GI?IZN272vjC!SV>mxdS1)2#aa?GxGR#WPutJ~pS1AHmL<$sT{?Gug*~@At9Lsc>0b z#&f7-pLqOi_6LuwX6sy8K@Wnr_bqSzFaPmR{qzU_(ali&ra2s}_GoL6%{36$3Qd#s zE1eRm?=*ChSM5Bn*5!UxCz03^vYSdYk(iZEsPF@$nF9R3qZC}c^G3u~TVuG;V z=px+=qsT$aE5xYLFeVXW2u{$AV(4_gHa#cAQ)PHB!PRhdmmV>J5HVR2F#?~07%g2Es?A27klpHZC_F^p zoANwM{(Aufs}agRX0GS?+Fz=$9`Ar=+O>oLzL&EmZja?QIh+8%VG&sP>7(0g)cVnF> z*HW~tB0E(ThYWXI5yBf4KY3vISVhHbD7M#yDV zh;DN`-xIQEs8wrT-PghZv&*tT!xpF+QKBBf*+#RBn(Z9wb`}*2-Bw`=Yb|r#!x6~$ zIWgIWKm49S6@nxYK;a&uxPlDdbb=})pN>}wS6kvd#LWV=f`~7BPh8(f8Y#G}Ibx~; zmn0_K9gzJ1f~DBoC#UNYM{&!GcldtA(oy&{aa0Up{{Ur0eoE3v(spY&K7o;q`5v zOH>P(wDP~n?DD9=&U=|(oq0^tlCaFNDfIspDK0DGEXN@XA zri{T`ax^j)jiax%KOhg#=Q%7hE*am4K}5J%dl$3Y3|afrJ|{OowY<f+eLDNtM}8OM=+g5(e`M&a zYcpcU!n)t=_4dkFy*m5qul{q{yo2uTS)RLqNq3_hv;*`M2;)BeFy#ag-2A%<9bHP( z!xhuRvNSaz+iM*5YJ%nVwPwaUP;|1q=^g8#+jl&BbZ|uusQP(23p^IN(Y!Ph!?XsP_aB9 z#{JY2Pi9N@eaSUmq}X>Ik##aPf<+&l5<@SiwxFtqO`>oHRKja_(PN9Iq(}HyJabj} zuqt{dajDu7d24Y(Dn7IbtcxKS9Uo0PY4G6negPQ4R7?C0O)|v+&!_PKTBcg|j_DrKB#6ZmPh)2GJv&qbgI<I}KIXu-FVUMDeuL*(nv1M$B??y<*0h zwu^dfk2#R*ZHX5{aM=vl*R;-t3k@E<)7-&Ud*VFwAS9tc^cQj9m@5|4jcu?U)1BF^(Y8W~&I%DUCj;*0 z@ZCg@>Jwo^aCn6`HlE&m-rckf6iE@9^c zV8s18sw2>=DKs1|p{+t(6FikIrW=h#w&E>x$$PHDIcDRAJdd^Uw(%0Fm%dj8(Ns31 znp}^YI9?3FSGeA9vpBEjC-dI`AXTc2@@d>}Rx02CaL<4?R+iifeh|AYfi>a;`3I;F z7mLS;TMw*T^d3$At|K9*R+AErjRBxaTxgmq5R-VH}GB{swr4O6d3`f5u>aoRKBQACKg=q{5B4nI9kE38NK?a*^)?3c z)J@Pjt?|u%@p|9;$^Y+9eA&0Z^PL}J#S9ULPCg1|>@aD;Dy79Oh}}RJpCkfy|J`?D zf3ZL8gHCarRgrRlb4cugCZQg9;DPMV{@Fj97)WLeK1%=!)mXIDz;BmmPB5^7!$e4k zV6A9~Ay?+n*<=`8Q%21>m6AF7CVIe$yVDL4U_csF-P#>2B`&u32(Ivp`Wvrqm(gzOp? z|3xZUoxyNfSaceaDUh7pit=d6r^yPzF#tw< z&RL&zfDq0bbudh{@yKYjXhuI}yJYx1F?PnnR{5X7xyF4K~t$79j(Hi*Z?jpNp|j`H>TT zXZ^y>3yf6S17RE$>Lq#J@lRDvp|`^Y(_(hQplMg5$O-nWuAM5LA)=7YKKCdp*L3Sp zOrP**OOS*ilO&o{sEXk`zU(pS_k9I=S0LdCLGLg7c6ibe;lYjyu^dKT%z3bS~=Q&5)YAhLn64&Ac!(rhH#J9SXCAW|s>T9)gxLX1w zg*jR7V+UueR7{)l0Ad3SJ#_;EZ~LyW3*mO#iBRYWjLN$1aT)j%pSSh)kj)|#)OIHt zjS1>$!$Qot+`ic_n(r&YlO_zvT^#=M=#x)J`)lgUW0d3(P%IOSx{eRV-y7zsb>irI zuB!$(nC~Sw$erJ}5=5)l`6WV^BdVylgAa7qEYqd0sbSoRcWZQop=Ivcf`=v`4;dd<9PfhELnt5MHBhGDq)oGn59s6D| zXT%WDa$4=$C4KS-Jqj+@QELNBgt0m5WD%q1i-{KV_u&mB6VsL0FJgP1eIJ`}o^m7}N6CaR!Zjlt};qE-eF!+(Z(bS8G)js;`G8i)HVHn)1*hlY~&z^kZ zb5Uz$jg?U6l0}LUB4hi&HFav#k5b8c|NZwTTFUXfM6%2+fMUt5_5v-l+bwfL>Mo{@ zkZRQg3#OWO>;djAiXhl%&ph>X_V}ZZL~VOC=Z*MM@-hsGHd>@X$L;KMPpoHu_=(5E zZ?cPonrCL7bt#FOK~C zOmGAn$iZDq#h|&Tvm+F}M+@u-(o|x1Z;=N!sc?j;g+ub^Jwi-&aYSuL$&fd;3EIPi zf)5}6lhfry#T+ZCF73EL1X&y)ClW;%v4)kP#kMoP<-)|maqPgP@+A%UQ#e#63!Wb^<6*b&$w{tDTk zCh_vsHDF9e-i$o4sOG{gv(+coe|Hfht0og7Ig)-;{5tYRy$Hd|mIWstKe$2(;|6n# zR6u5wu}hl8#4$WjJN@|Nk4A|Ho$TpO;9_e&`Kg`{k~<>5r@z=aEsV6ZhLgJc@6#g|wVG#K~NvQO-O*bju_OG}#7A z-sf%W_HQA|!ierU)=lF*i(yavX+wE>vfz1Fc!h%t46gU;3_2koR^Lz{V? zyKv>A>{uz1S9YWxZn@M?IxCcFy zyyYlxc-o%s-kp&01O!rFJtAcbW-MzI_M+XDR6vgs_l!E~op z9)@EJ{VNGD&>6Hm9q8{(J(fkkY%oK z{(nH6V4eFMNoZo=fa$V6QblJ`i(bG*6@R=&t$fi6T%A=xGSrcN9XdhtiI7@0>a|%x z+-Z~#+xxX~)A+UP?GsPGO?ge1nb_M@f;{}^|NNhS4|u8HztN`pUw-_3FaNIZ`ktQ{ z^oFM>6sS>s@ywA!OVhb#^R;)JI#Fxb%$kJLt2ULBCPO*K~ z0I8Dd;gT(o2%c1q_vd7xF){z}=Jl!7|LE~5CbtQkDd7Kg?&nV!qVpdQir0uQkttEPa9^u6I^M@M}oTLIsqV7ZVNU1R+vqco@&~!Xkzx%G!0iy5F zhRgJ!#E!OIE_ZGqX%HFp>O1*|{I|P$6wa!hnv*Uaz|lR$ICRq8$?NDMMp7VbEEbj1 zyXbslV2+cRqcjK^0=H8)=4LSsYdu>|a2FvJ{-vK?K!sq2;9})GRzIJM*57trG#71I zl7)s?*25}uL?Mi>`XDANp@aFJL}w3Uq@{Q|QPyw?C#VFX2-KVN0+uY6Z#1xPn*|c7 zi-Y~!BB&!SAd)sDoNS50J%ghw9XovF?x*OhuD@TYml@VDtl~wS+zYY)`H%h2hyL6D z<~zQc&)zNVBXsSswUG^9=@d&m`V2{jJ;7(NSZffjF&d+>#H}$3!A{DS+z#ogWcqLx zVEra#Hhpw#!hiuOf)MtH3D_|Y!9c%=oS9T~fi3;h7q?M>vQ400-~MMZjZdkHXJcp^ z)cL9CKWZfipt3R6|0b@K{b1SFWAV2?OBu=gk(){7905`h@5vFRG}**3sFZ52U?Q!RXVq&G+&VTvt6-F`@w zaJ2FsF-?p?0g{H0l`#7BplpU8zpAwp(evGERNfcC)5m>_L7UuLo%<2+;hZ+tZ9tAeM6QkhOt`p_ zoGh#)bfB&q*9N`rK-3f!&wFc?jU?csxCr?X>LT0`T?E_{MjUU`A#heygq zsOVESlqgn1sn(4NV;aEq(KUh?MR&=5E(AA-iY)=`x4F<5VsARP%&1jl!}4O?P~Lfc zHopt5w0u7V01-5&AQAwL#n(aGCVORzOi?kec?`I*T9*HXV`%p(tZn~pGky(IH>Ne} z;pVYX#>4{#Zu|%Zr!G#BrbWNY#WhNZqTed#^JU=2Qs*{J0GF4Svrm5J;aC?vpY2Y+ zy)ZwIzP$0#YR!z19M6&1WCIbTie%%ta0Ohr3iFN#^#L`j4Envn461~1Z-w4_qD&a8 zTFEx=y7TlCci(x}8`zJ>Vj==cOn8zry={wGWAS{54T=U=sq8fEX#X=O`fY$h=_2;+ zwQ5TZ+g1vh8SrmmN{U#kN0txGWpDh7*9J;;fN#3SHJ+l1^67IcfcvnddB2He{ujUI zE3?1(SN}3KTXcvd8B+qMZUcWepirUcn!rM*HYEjWMoXRA^{~*Xh{+dRH%*dP%~Qi1 zV_ITw;bVXBH-97h=Rflc*@gw>bf{XW&Sm$XIGMfS6?b8K!sXnzWxbDs;rsMwKS%pc zHiXzsxLpUt1_VBvW2Xd8SiBe|O_a*S@LhYZQ9gZyro}R$(}$fgzQP!eqsNc2Zm23- zd1BRHT)FgV0$P)`t?gxE|6nHoXjiMWx9byHWT~sw9_sng%NH)biu{1a8pSP1aEDt~ zw84x)>*L|l$X3;I8zRZTg&(#sU+Hh(c^eENiXLn;M{)?l#74OyLu@MZB4id0A5fz;%OdEf_F(s? zs6G{n)WsHX1XfH56a~wMYr^vN^1L0;i0lcvkW&-lGc_y_VH(0cV)kIP;<>a#0*i-8 zuVPCWOHlW(Q@X2VK8vomi;vc{lE-r9@`U@Mdn4r|s2%)h&^2fE{VB5%fJ5O4>08wo zg@#C`Cg)e(7_M#MK`b)*x+5r)_mwooJoeyr2rgjPaoOu2ciPlbIcce3lfr8GOSZPQ zBf!i{OD}~exTu{Xt*>9bv~oh)MieoO$)vh@t`tKyZ0IY@;2?@Vv;$cjpQu}-28w%) zwkD<{`w(e?ht$`006X#{P^pnVX2IP^iYN89hd{xYXXK4o{9Gj;3PBC zKd7s{p9Cb0M=m%#bvQ~362X0EY~>#^10={$0!BnSc`nh>a1MRB0Oq>OP4^6An%GcB z8HUU&VPZUlMCP0c`lkh~L_ucN1&jXa{5@hEJkcyZ^&zT1?6B;yC1=<( z1}-Yoz)p`KRC4~xH*tJ6c2m9p#b%JhcSkA{c~cQU{Kx0cO;*<<8W3oxnV)usDDT;+ z!6x-%Q?_{Tqt4~5-lLMl@ClotX`LL;pn+$zC8s7ul_NKoVCeRBNnspRn zYS< z_-8RShQx2#*VG*+n9d`@kh$s)ca;;^BYhPZ?_p4vPT(zOc!<)BNS3`(Y?hZ#(=+xQ zQxijgzvZfH*gs&fp0Kq9sHnj81I<{qwf5 zfLzx48DY*;d}?e(cvy?xkbn5_>T@B|ai0()$I%sILyXL=WB({_gC1;fyJ0v*(c(!Z zP@#^KqnH?1Cf2nZDvqUP{3RXCa!q~Ge9IAz76~|udy(GcE{Y;u2yh`11nI@xZ@#sF z4qCgs8YMaUpQaNpoIjuNUSSUq!NO8@Lf}A|Ccr>{ldJWd%dL3lMjbA9FBrF1z4GPR zoFa2b#0=5+3dT2m)7OG&V?%T~*P4i#kN$r42WS2bF?So#XrYaTAirY`YN)rt`4<)Ih&W&Dt-(ruC{r>Nzb;=V*aDGB@C}vXxOp$Hz zeDbZsGB@?8Xy8kXMF?^V-oe2nfodfL&3_RT90PIKgSwzrMTssJ!tDlICCmQdT z()k-n1r%6^5PO_wh~f>S)O!qKr>0vW5zMjk8GrYjK8Ky6V!Rc>735Dmi)j2hQK7b2 zch<;~sTn^5Wco?L53ak@7I`4eNyThSx7d4SZC$^Zqn-~2@^?L)f_c>Kx=1z@Y&!JE zGuRSEfJH8`B&@J!{r3*8sdTg>X0h?PC!5P@x#EsEumx^zakA)Z1~H;$D;^R;X!Yj1 z%)q~fSCS!AyaMBtdURy=lZG&&O zio^}X&j3rIzUpB12Y4J2<&)qLvdG0p0*LpP>C*2z5bJ zW0he>MF=_N?tLcTf_@PYpq~vL%sGLEL6q?1zIhaW$Cv!7uwO0iWYv%HRcFY22_$qQ zl$^}tR35QvhBMJoTId=VR2K)QRIQoz!Yq_ovL3~UR0_vNbNtn;n+z7KW66qv8(^th zf7KQ25D_RILRZKBOS>}bNMG$k6dzB3S$+2^^zh6WqO@&Jt4|B}Mw<(9^EVss@KFEfBraZK8jw5N51s z7bZv?N;@~a^cnO>SojLTl@PIF=VI`qw;ckhp)D5+Yq?sWhUC%ulb?>{-6BZnKNe|Z0A#g=D>{|BLLtCiW)l0fi!87p9TVMm3o;A zb=KDrVT_{mWDrt&y$Ydv7>3qIg~hI&U}j7AM)!hd`eM~)u)v#6O+wU}65XcV$7noH z`;K+6X^fg=>OmRy3m^sTSU1$kWkkCE{4f1V_H+O4mu>nK9?(2PT-``rf8VKB7_9@LOP>QW0P z)u*-sZ-KX0xTw;?`Zmle=ppwVC5V1{%!l_rd=`rS2cmm&@TD8UVATTQY1h3Nn;BU( zgEKq~0hnxoMhs6p`!vBTl}4(*U07P&{`$Z8jsNri^O=X=U(napemg`f9`lv z!`z;T4T1zNgp&fa5Y24WfE8=(2|zG%rU6xAgGAi`3*>YI69gNug`v5yfTKvzvRW;S zT-VaNBYbY#E=MR{+ z6kNxKxIkEwm~fQf&d+KbUE%EF;U&CWq#MFhFczeK!eY-jE{Y^s5W(2n>RR=QM)Zw5v!L2I%5#PYHWI z_qc}Ot(kU*!K;|YqxR-@Cp7LXsmJ9*M{uuJ!mUy#+q=XJPT97ZERaZ57fA^oNd{}F z)#Fi9ZCcKZRg~aGfAgk5J}pWNHoGM_%XHfX0!#$Zm-Es)ZRr@?0#=L#?KriSyK!u# zo=pn?U=!QnoK1UJj214Ud3TXD#`UWtbe4}&24vT$NTL@+cL5}+79KBQ*g^ zq>LY%tUDYvH?}s@P_$jgH3X*xMrmVnV^$%}_=in)TzfDcH_xxEvXBHbdDsTM$IKv= z71f4W^ij3aL!9IWP}Fweo{9Pt!{yGjTOyxuDUF|p5yV4^S~;}X%8nnSw1{w}y&fkaX@gl8e;!vf`yV6N&cumb2&;GSc-Io%NUOmuZU7Y3^C(f^g{5cZk>OU6${)r#|0Qj}<`qizi%{$$N)?B;WY({J8tK1UL zWZzJY^4O`C$7-mVW|Wbf$b&IKJIcH1OLotRqahl5w5eRe>3+lOzC8QJZ~7*I+#yoe z);F^M@F)LI_V@nrk7O4SEJGG)=_GpU=yLXoSHGNiJGvQNu!S46cz7{}!CA;}>nr_l zZ4E0*i_oJwvEU+q>Sh{n34~xY4N6%hryFSwki%8o7_A_Y3io_h50$fgDG z0b^-vWj*`IZ~lI?2bXh!snMtIW!ZOr`@6DJNTj+m$S!YYfAWdXWdG-fJ{p_U_+l5< zehk>s=bt%Ct25#eX64NoR9HwIuLnJ%wK&h-7azx{3B_JN=Lsh@j3 z8W!*G3AIWMSRI3n;e_+#vNzDDCO&MrDH6lm(%310ff^ca0^`4QCnoT3mnj1;w&N^u zqe2ea=DUeSk7+MyOX(f~h#{{oG3OcDUR7Bvi{l5*EVr*Jihl*s-6v`_2Z6hGTxQ5k zqhaCQ<>;Uo6`VE^keK3Ip}bw5ibYHzq$E0nTQEdx5uO9Ap$EbDu*qYN%8(v4c1&JA z?(FEmNyX6OcaHnR9fQG!(3FjKSroX`3J1^NLqyV?3F4fR78rDMqA%jVCxs zX<>%`Z9MyVql9b#-?KevB%VS)Cn6RS$hd}9(3G`^4J*C*PxP{JGw?86pFPB4?BUoG z!HJ$#%hg(samkE|P4RGD5NCcl$16gzx@q`D_Ezl)%;z?jhyib)VUb!`cMX5k1!=+gwghQ2TQmUrD7qf!B=(kdZO%(jW(zC%*dcsw%8W}^(dv*>lvjnl z8Z^7B4cn70irCJ-&U2#mDSFOoGrq`|wM5Y!f7<6qft+A`4H%Xy6Qa6R@ z>jDK-0|qWj=<--DEMyZIG99)KadS2gMCchmHu}Xm2YlbpOrl87i9{M`yI;w*D$oJN z--^P+Tt(-OTAH_JQvzRAbMZF%i;?t}6yX^V1Y#~Eh9K&Smkj|YY&O9m_C)kP1BdSY za^DhfWREwU&tTPL%34>N#(`kRIO0MNC#=_$!zkRX*oeI1{`q<2=;6uY;yh5fDTOpC zW$LLR`lQ?M6Bnwi!sR3|qBFz|kG*ktzjFbk>BqLWH?5Ax8)=`zH$6&2crbT!t3snN8p?K%QILK z*eSoMhmv|NO+s@aqclHeui%aWyBo|J(UX7aj<|mYr|XCG?Y) zuL}{UNIq@>*-dCO7bcO_*=4q~8WXWfbXR|Lhh6sNP;-OLP&<(jt>HBzNfxTMOb#%{@GcBLYnx7d4wHqjh&Dt9JxXDo8#{C z28Av|TseX=S6oNeDe3T1@B4q?`@iuY{J;lk+=Kbrvu_uwf zr!(;(EZ^z*ix*G(oF)Mb8tn8-iTh8l2v_Ut@=F0HGVx&WX2+9P%tt>qvrBogUF?!X z992W4IRnsdThH)f(<}e|%6qYT&v_Mpi$O7LOkZhmjENU5c*Cr5rJeKoofyVr*U0>u zo;BvPaa(bP;C6rJjekS~C3`z<(un4z%^!e}*d&R&pL68T@aa!}>ScRf|Gj)}PaM9N z69p}3P(eWEa-&s0B|6ns){zU>DB|y7&&z?i&NBLvuR$75k#o7iF^#i|o{agCRy5jv zMB*cS10+Yvd=;-`{N#Po4_jYwsh(wwdn*3cnx<&XA5A+WZyO8c` zOti!(O@3D5<+;ShCD28h+m=q1fCmPh{E#XuuE6`A8%3p9?u<6hcQe&3FL zB{v7ay`P@Zz8(8Y@VCD8E#BN;wV=R5)avj5#=pDgr{4D?zk+xDU>Seg2|xGW zdpi41-~1-9=N+mxY;Q?T7;*Z|b9DYEfYPC~cIM<=+4=>r->C9sa?RVqgo&&T$VZPU zNYfa!IIk@55sr)*=K&QK+a)216~w>o)IzGpBeEJFI5KzN*E*P>LF+p}A>|J%f4X z4w6G?vfY+vndo3Js6=+oegemi&@A}O1wzJ5cOs*B_RO={EYf90_l}Cz`|r3bd)K%A zHNv2Wvdc^bsx=pAtovm4;P3t(_5$&6uEiX6w{hXP{y6*DpZ(c= zBeo~nSAt*f&MJfL(~ZFvB?&;7Ah<)$E6x}fNWlXMd}tC9oh7r>U_qv|{+O6v#1|Vl zfR4R0wS}~(65`iw48gfJ(JKvK$3=@Ukvpxv)Lw|m#EF<`K0^HCy1FuPu$3TwK!Y*; zFL7sjnusWx=|k+-#Ru5zhkLR7c?;N41BmJ-8M&z40IuaQJ9*l6WAmUmtV-!q3-2f{ z+aOy}BTTA9I(OPzjUtX{3IO~KwRCh}se7H1-Ex8xSDi;>aUK0_AxRoqrpl7#T_S>J zkW0{AiIH5SvMI}@TY|b75Ib=oQ zh6oSq?m3?f0_U$V7IiWFB)^M8AFw&6+>g~#A@^;~1+a5S*3UHQok#D8)Tt%on;Np@ zkDKUma{+)9qHSm}bQmQi&vHwTTTbu@g|kj37m~@mORuqL71D`9Lj*EvK$*w3-{`uC zSFIK!Se6U35klYDs20)gU^olsJETC1V>dV;5Fv{FoIp3biq?BYwFi@%8^cn+v%nkhUBag)>jZ-9y%$D`(j%>^DRdW9XvcijrgVBf4 zL*N!4`|5{Z?_TlECuS{0wS;M;^=4cc@n|&eA`qsYV;*hrgIw&AV(swZRcfwki$I`5 z9}9?p*t|xF@NH6&TOehI^nMdJmxj|_33wE)+uqi$@XxRR=`OG#5ijD(#M_G{6QwJP zv`t>==Ca@jDn!JIH?HSAH$~z)$~t_RQrN zA^`A!&&{>7w|v{TM3>$!Qv~d)JWJc&d+$3C+mARwGsNK-Ul%&%dw$I%mu05_h^9)0Q&#QJi!Mpo=8h%NNm z^7Q2e+|Y%?S$p{yZ)^c>G%6_SXPliq`z(_Ufz%|%)*H)xgIh=WTQ1UB99qPJ4UGVZ zp!qQ0lK-pjc9H>l+~R^YIHbqhW}epYMtewxK1r8B04ub{ohpFu&O)oh?UtY}Eh=CG zr*24dm+`jur7Jx2=YHeZv10+G(3%cd6vPrt7zrTm^|8kv#&}~6+46ige`r1o%?V6+d%1&j))%=f&IPT@=bj5mJ@ttcK+fDO##NN4&cb_ z64>4&*$@SFt~nu{KSHZAf1B2Fx&lIu%5_m%wp z$N>1hLJZ8GBdLUg8C00znY3R#Z`6Ymtf^t`HS4oOYU^*gNWbL-XTfEUNfZ}$t1++J zq3%nE4o6pFC;6pqonqd_z@Cr-Vd$mwVzQ-+;@%Vz)h4jI(kTctxN|PxZjM#lYhl08 z5%_M;o%`ROV-BclThYwlES7X57$CC6Ry5yk3F(viou^oF^k6fD z90Tuc(kB2U;m@~l&FovZMK_62o$*xvF>p9#G2M;z)#(v{iUJGIpFbN5R|ERlrOvr* zazcMOk5wo5y+QLLD`x(sV!>l7&$H@8X;l+lbOx4@IM{Dn&wb?tVfu+zlz9#?`k z2_L3)564AyYbwK4oO?chx_NA3Am`iCvx94xbYf9Yl8By~28ll=CP$zpK%UMl7l)Qd z0`(%S&9|M2?MKTq?E#aC_jUTg^&b0{b2v3-jhR-Hs$j$!fc(4ex{Eq!+C>v|XaiK7 z*eNkmiq==R3%QkZd4A99QHXpu(a^d$Hps>%=%PrQqF~}?Q=UG-CJ^6v9Zof};lB>My=SmD zqrzs60s}X~Hm=^q)r-xQOBW8k!0z0aKizVIHyf34AFyJNnc*YCiCVYE?>G*wTli7R zmPt&}pgU2`$axoHHi_|K0b@Q$94S$1Q+fs z8_GFhwhmQ#$lW#>RChNhvy$Mcfst7F#Nov&A}H#0-iVfC&M4&>t(&Xc2M(^@0PnYk zdb8JD4P@)W?80bqZgyY$s$Or0?7NkI?(9>I?%KK9ba1&ez4%D|;+eCro|~OnIDP75 zwge*8hPP4A1$DPsK+BCxUIYNuq($yh6~KsstBW*bdI-5Yr8SEZ+M1 z_u~VBldA!_+83Qk@%39fobG$g76ayS3B#bXnNCEEuUI1K&Qjq)I9p`d#P7AR+UrqH z&8FczV(C+NXS+W%>B?1_89eck#mVYtcOq`*&ONrTmixYP_;3IEznlB-fAH`8cjumX z^o=yDtJTN7#-D!eD^LCx-}Ij^9;OZF#S3S$JMTOlJ=g40GRO44q1fzr=$u0e^oZiU z@TcW*7cbYCiRQ^p-`&tIuxt_F5eSj;>{k%8*O!RV;aC77ZjzXGOQbc-1TA<_vXj&V zs)t6x!Qqarj_c-re=1BXkh3|pEiT{&9KvgeJiaePn~Y(bbnE@EcmUY)e-?f1bW|>H z4dy@o*(d(e|L}wF`SM4eI^X!)Z~fZU_5Nt|q2K)VALWc6*%x`vN%ocCwQ1+naOH`= zcyey|%G#hqPfkQ}=MuBQ?~ft`yBSypY=ihFL*0Q~CIGL&m`G2u_P9TFGGKk87V6W~ zY9n=l3WRDTwM4@RZ?-?FQ8>89I&OYC6+wMa#M6_teElP?hw&AXB{F5cqc5f5l`~n6 z%d$&TlLE()-Jjin+6fj_s_YUqBKITBqW@ zMSIwIjyq4wUuY6LBs%&@$WOlB{?*^5tNwBL=edtA@pa$g@9~$w0qt0GJ62sVe|kM{ zCOn5!#a6oNxO$IV=Mu@@xbndQky~KaqQ>0E3_($VA1xCWoS8OlvgQr73c3(3P45=l zYsXp`%$Y9p{?dMNx98bc4(HCLabyt#RLJ8LU;=*@;H(IyxFAa1P{$#^6NFqNXOB0RMhCoaDR4SLnNEkC**^mzBjLPc<~t6xRDJ&<=dI*HOmwIuh)&lGpq zfk@?SP{bN+3o48&1*7-x*jIvMiQ>ghYQ~Esuyx;Ij42^^{Op{_JamerB_vspDPNEv zekkCiyFIQ!&LRUO=Q5%jh*+_~-wb?l3m$bAIOE*`Y_i zd3Mo1Vb&Aw{2EEJi;l(SRfdVY4fHE4Ql{ta{*im1IXrS`AOFKCboYFGir%C5J zbIb=zg$Ie_{dN-T&)L!i-aOt+D;aamb^!~oz?8o*f=j-lTa&*h9Qt*BY7FK^Sv0o~ zxN#8$O*VNk(eV1j$^H7A@IFesa#HTrO3`e{bvhPV6}He zh>KsX>y6w#t>2u^DT~e19f=5CB9hrFfZr%SFNt2;zk}JWPqC zLkg9A{h!_&*W|kC@2SUHLzgI{e1l^HPSI`Z+Ko9ZZ&}6xKDmXoYQE>%Y zH}B)IuLKWL<-`umb_7%Mpu{e=EexAN)D_QD&?dyN|1Xq!OiOSx7_Rh|v6Dj_xY$Ao zic%x3hQc6BtDUyd^Bg&mZlrz_af@qs&eWlqb`R-(g6RIc@W8LS-i|6Lw0^#k<6d_x zyF~o(R*KRqOCD$wwEp>WY2ju2l33Yqf=llFA$INf0wB1v4jMpt6-E>fTt$=!ol0@b zdMu@NQQbTe-uf|%0)&a`Bio~l87DEM)~b-?KNkqp7t-NLwC=%5^j=~L4Hk9)Fu4c) zFS(H9w`f^sh&#d~g?+EsEZ)l%N~PFA?3H-`hU&Rkm>Yg@uR>s72_8X-YJJ=V$Y;wb z>zRe?+QrEz(;~f3p1O2CTVzbM{;&2`mB7XpVbP+Wn!&Ly-4>d2GvTvO;N*t0In6Vp z=gW+Qn$W7Ho!2)U-q*%M5Fyb;?@>aOMD(c9Ym`JEHF}E~ozZ(4B04kCJ72wbLG<25 zHwXr!jbZ$}f5Uq&&gEJAX76>@+RyWRnh885GoMWg*?%lNgM6k5a$Ux`ZG0F1E1mQf zo8IMme~o2njjmuQc7=9!SVt)xAI7k4rS*ocVKX39vwLs%SnA#DT(d&UIn9|Y_<<&k z4)^a3wpAV-JgWK^da9RJ#k+<^As=iH>pzMWzkfZURWFGxQ501Udc&#YQeF`t{y5Zj zB+v~uj+0!E&fQWi=OqfR8G>Vpap^1SL=G83JzdS9{}^FnDm)HKB4kftlX~5TEUHdS z8jJ5qn=hxoUR4KT0=4cEIfros35bOatUj|1fMS9+*`Mg8klkOjIT)b9^-H;Mjg{SLnXqSx^qxd2Fd-khwvbP%C9` zln`D$2$yTR_rF1c%4FyF5dfIQzfcSJL#>IuwlG6e5W0Kul&_ylKJAIsN=VYny5DJQ ztYu*)-`JD#)vZ|??8Im11i^ov8-n`EgJC021sW*`Z+8hB(8XD~9IOiHAgx6j6~i(b zYDL!d(#5f!7pvpSYID~qSm&VDEqZK(Y<2SzeHC2Pp~h91njo?_xe&v<_n@ZS$gv<4 z><&HoGO|OF0R5<7Oxh}Veh1fIsGEP^a<9rz4|MeCiaI8HG$Um+PH%H8G@*?>A-Lf8;2^p z`p4&oLO-M@3lIy`Vt=j1|4aru1Uu&CP)(M$_#6?~w4fT;Ai5k5~A+Obq}_)n%0ztpbK z@nVu@3dM4`L^|t*tvnkhX02Hcd&&HwG#W&@a3!ZCIaq(J*ox;cAenavbQ6!0nn+C{79U4^{`^V;*Cg|*mBwcW(q({(-(h~yTzCN6S>F`uu0^Mm|jde}8X zUzyz(n%%X*?q`eld_Ad)&{I52zCk{@NXz(q2P^VGPx8fN%j)N5kEM(Y1 z3pEzRDT|0k4{RX;CrL+;hZ~51ok-n?dYtI@!=2L+z(WM29sOuM>dN3{YLgkGY)(>X z2sr%G3vZ=d2f|b#FvQKB?-p3tZJ@@7_?G1P#SshQ+FcqU=QrA^>zLE zGtL(Qqm-09kvvmmE3dMWLkJ4ALR;*9j;yRZ1NE{{^7BR}ybR!g;PzFjPtMm!DvQ$l zpR^KiZid_1%@Se18vUwDuO7k_X3b}$tAnF1$;dUlHc6JCnsyNVy&6QP(n(c??yi6= zJ-e1%CxcWmB%{#si-BlrcicIJx(P##Sdm&~)!~yfabd1LGw1zJ6wCncv$I~S&J#x{ z-j#-Nkf6JTd~Rd>u^P@-yXX;{?cbsf)MVJ()xc`NvxgrV(~3E6&QMtowyCV#kh~{+ zfK3HaO^FCB^O5e&l`O{%)O ze9SVJkgfi{TXS#yFWlAmTZ(>eVa?GA&jDMiJ{ufnnQoaUU(CH)fFYDF&nz!nJHF`P z&xC~K60(wf<$d)EtxeShdI%+NodX%;SaH7C=?DCr{B)6}{h8^5$0IA_>#+HdFQwlk#eXb=4CyMLgT z#i<1|8cKDW;nSsFq<6I)ETJ)wO+T=>493391`L^Ka$>(<7LMeXHD7B~Zs+`Ed9$2} zctx_)A0@m@9fho)OJFNT&#_j1dKXBV5=)fa`i<7wLc3LsH82&7N5+9V!77>t1_6&< zp$nC^;ZcUJZAe1eE7&UiLZe;j zJq6_SrgG=Rbi}QkAGmurV;kstm9&08*#oM|9p`Em=n z#@DLC{%)yj-G%gHDwZNlAbmsNzv!7d??;oN%g@ctUsWLxjpe6J_{Qt^DkEmB6x;?W zxB6+ciB-59U9h{B5)w-Kn>w|(sKPvBd->gqC(K0_JI-;F4TSK%HK&c{CT~d@355PC zP~5nPAqu!)S;6sbOo@osTI=KeKzbO7TYCKnXQZvgGn{OQW+8YZZ#7x!|q3?28FZSSDrI{u(V-V)Q4aKNYjfb?OPMIGg5_PxYrcND8Cf zrmo+H{8jPdVB?dbWEmC6J4d9KG`q{o)qWn9bsr&$u~tz&lgZjyAgE!n1y)Y3gTG|4 zkV<0?x!#E6RLc2`1fS(h1r5^9d;EEJgVZjy6wF^L1a~cOKnjs-_W!1gWhUsL=j<%r zRxW2ceyE`?m$X+>0Ge5?TJ^dPvU{j+GRrrSd?OD~sR*CfANr1@%YfvydTz0Tp(*X& zAg7fEiTE#1Ud3+7D1cN|_KbK)9qE=U*}3tKRjeRXmnHav1J4Kz%?+zV(W^$`dIFu$ z-e8sB*IDE3{+Tc6?XwiOYb@$6+YFF5G?kud^V^>U+Os+=(k5MP8wBZ{HHUe&-H}!z z1>=DgOz8j&$fNaasr0Y2 z)z?TPf_$Gk`QVBzWL{RU-VGZ zJa7p;C@k7k>)q6s20dn?RlyLI4ROh)OZeFM$lkuN>mO{@`&V$&QHJhZ!*oZY6@ibC zG)(W#b9SQLew*t!}cb3-PKn(ft}C78a@}dD0^CbDGX0(&yUd+ zuNU<^#I80vq(AcQfL|uJ6{syMJ};~P_xcR6Rt@?+G&9(NbyB0FqD1#s{zCW={Alq_ba2&t!$CyYUF163`S^*KsfmE+XT#s!N;=3_W zR6{Ff;Dv;I!hnpn`%i}tALW7p;g}b~BQLK_^*R+jsFT74gM;DT*PwxoMIPyyKW{U+ z+Jk46r2|+quh0^l!I&nY9#=;qTUzrIXDa$+eCJVrCku-xbUD+eIOHd&xxPiSY%1YW z-}jM?y34bg14MX)sjxQUuUf0gIFtTs%K7`3*VV<5i0W6iYLGiahWaIQ<7bwDGn~r~ zxp;%)f25qEC|?{eHj0FWDtMrZsjeBnL)>UTJ zZ#PnC&(>BuVoN>Wo}0!(85?hpsk7k_x zSLf*gRSOZ?g}vDGB^6YyJSU>Bazxvs=DAsasohLtDzTZ!3k+^eSys~%i%0PtE@&BC zy#AX-PbC5f#%|{vX5SW{I*FUU^I})H3^SskYYJD{q@8AhnzuYHbA2q06S zl0>{se?P7`!KDy0H&!C_#RQ?Kj>BIo6H~wkjZA#y$GLoHR!nSk_`NJ>+(Xs{U$M`h z&F(@va!YYK``>XfK~yqt%Mra0jy-u&qq|S?BKopm$hq#Ri(`lcBJ|3@!(zCQi$kl4 z=f?-;KVm}yw5u#w1Lh@pB(f&PVE`DL>HVP4tx%yt6}|qoQCdl>sY{98)Q{c<1!?LB z7rgP;gq0metEbMq)2@yTd^CrbMoQm1Lf_V$5z##6p2xVZxamiC0SnH<^$R%$ zN`@ZNO7tKo!@63P)TazYglW2e=jB^|*idLcDrCGbw7y=+?4uid%uZ5Ve*=DBkyuEo z@XS5SG&xU+`tXbbR5TP#jAv-cT0}59dEp zT+JPy)-4w@QLz{ccvt1Up}+x=Q(J?~j`y>0z`NL#P~p-??|R8uVk zH-Amj+DQIqk<*fkeSl;Vw2NxM#9!)qlpsXw=+Iy`Vu@gsu!zXtKGm!0E5&gX(olHQ znODfwF=VFU3|oO9_>(&Chf3OSk_?k&64ocnTYN`Vc2(s$1Bg^kg|tHah=NpBu}HJN z0KM<3Q~xZxBm*U*9jfeCoQ&fRNR@Bo-7aJD*0yj&v&#zp+^M~(eR$YgmOjsaIO^$B zO1Nhwk7J7HhNrvS_<+Ut^h<8*zq-~Q8mJd8*DqxjTUU&AsaVY0((fO~z2MLnDxRY) z9e)2%M2!2brC&V%Aj*EC!K;0n!3=yE;(uEFz>d0kZyp9$XU@lRmz=JlkR52bYr5X> zyYPm4RWreN0n=LeS`Lk^HSO(pN+!1Pfv{cp5(0CAz(lNslQg}I>|;QdmzSI2T2iE! z+2u~XGq&Ry|0Ynxu;)LV-sDe~=(^9p@|j=$-F$6$poPIw9d9+cmdh6_D`)3z+V8Pa zHdcD#cs?W(>}`zC+`p{n04Ww?zz(RExuvNep>>8FUrG|%OA+)FXS4{c6-%r)lYx5~ zwtq+0?zfI*E>@y81g%xOL&rw-`!fm$nqS$rsfW)6uzz|LA3!pnO7rF`kjJN3!ctqv z=)*(`A!Ua?lh{UZs+~)wHJkF0Trt(lr@b6ey#sR61@T`@nkG^DZ60nPf6XsPuLLjl zFgK0F$Kmyf`!?ZlUeXXPxaH;xFu&>&=nNzOjlklGd)CdZnf{^R$>R#2R~CODcQ>21 zuuVe4tGaKq{)$Im_@GfHoctRfilvw*Z;&k}yGJ)VRIAOkm`z=!p2tLESUwsmtcKOF zd|V8KG{v)ct&n8n9yVnP1`c_bw3Rgs2)}fmAR96t2JKW5EJS;(N2fklDilFbpGjBN z?F#`s#<#<^J%qiJBGn1arSV2jBx&D>VsY}WKq=Cg=)Z81s^j70fY8L zz}q5!8*6KQ*X;xV&ca5p{(Il-zZ_o~>}p{QGR>Gly+P(Yw|O!bpBL2BZF+ za({5t_*xpy&{N`%lWh+ewB$O+^x;G3PA=D$<#F{OZzjmyV4(!^`&d@9N7Zxx>bJ@NzoU>Oij{z~tBG=hb(^ z)pwUz6Q_pwd zC)aC68(u{|!N>~vv764QsjZ&CgEVmIeJ*jpe&lA6tCrZw_xzQ$aWxfK+sAycYewzq zIlbfvOaIeQu>NIj!-7Kl6r9;z|5`)Z^dOkl(PEUw^(K#r|9K?xr$qD%EF5p%4isuB zpz@b>a6{Q;pqKQvkj{=36Pj9=jT1NzYhh02dYN zDA})dl2NLkBh#BnL6;d{^LTTob=row*iW0urxc&BSmDK(|NFMi-*4;CD0rmV?99>a zd-)?bmw69PvpiytF(jZBbbv1pO=3Ru25jdmK~Bo+E!cP~Dk|#PnLv>~o z?P zdnQ)co{K~{X2Bwqu4HLK?FePUPubJa6J;by6_+2OxuW0nLg<}1`0fT}%EMAq?E`3D zk$)MVQlc9El!}Tf;2854N`*v8HFtJ`>6@Gs>3WcYQb2S0Qw7)!hvunHG>A#q)4!@s zt?Pc}u`>!DGm7r#zrFjq8A6nI3E7;6-ET5sHZMD*=)hGLW7VkBNa;IRj&vYqqPZKD zi_@~_(*or)UZTl&XIPNDN`mCf<%e)LXx-Sv^j)aL9n zmMvqFIkTQsM2o2`MP-vCHh&b-Zl|;)Wdrr`TsLYXi;w2E6M^o;TL>VhyRPitU+=%C zUVw}mNr?la_|_Ny2_D1Y0J0<^i$A(?95J7ZvDwabh$LKx`nL29sQa=9eIC}#hMv|9 zxthEXR!aOfDzYVL}`Z<39KzPjhpRtlyC?G zv7vcHsc9_DgKprV*2|4X=?G;=%^6f->rVWl*`6uMZ&!Pm(}(x8Om)Ba>7>;pG2BS; z{Hmg;Gsw1UQ^|}hY5b{Uy+01q9er%>ew>~yMl}T|0bwP_#&03#m*6W~@vw&YF9U>3 z{i9R4<+~QGyk=Qb9c}t>&i~+^vN6)75cUxBi0t+zQ$a4i)Iaf&k`eU^!C;6{um}8{ z0PH+EL$=?59M%@RcE;TfTbC=^XX_FM!J(9*|KF>5li;rF#xfw$H)w$Q$>UK`(3G!| HGY|P6hz|z` literal 0 HcmV?d00001 diff --git a/challenges/assets/avatars/sagar.png b/challenges/assets/avatars/sagar.png new file mode 100644 index 0000000000000000000000000000000000000000..381e22837c502b4125c3fa51c59407791b1a2495 GIT binary patch literal 34262 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

  • -
  • +
  • role="tabpanel" aria-labelledby="pills-contact-tab01" > - The Gender Inclusivity Track at Status Code 0 focuses on building + The Gender Inclusivity Track at Status Code 1 focuses on building software solutions that promote gender equality and inclusiveness, addressing various issues affecting women and girls. Participants are encouraged to create applications that combat gender-based @@ -615,16 +608,16 @@

    improve access to education for disadvantaged communities, or help teachers and students collaborate more effectively. - + --> -
    +
    -
    - -
    -

    - $ -

    -
    -
    - - -
    - -
    -
    - -
    - - -
    -
    - -
    You Won
    -
    -
    -
    -
    - -
    -
    -
    - -
    - - -
    -
    - -
    You Won
    -
    -
    -
    -
    -
    - -
    -
    - -
    - - -
    -
    - -
    You Won
    -
    -
    -
    -
    - - - - - - - -
    - -
    - -
    -
    -
    - - - -
    -
    - - -
    - - - -
    -
    -
    -
    - -
    -
    -
    - - - -
    -
    - - -
    - - - -
    -
    -
    - - -
    -
    -
    -
    - - - -
    -
    - - -
    - - - -
    -
    -
    -
    -
    -
    -
    - - - -
    -
    - - -
    - - - -
    -
    -
    -
    -
    -
    -
    - - - -
    -
    - - -
    - - - -
    -
    -
    -
    -
    -
    -
    - - - -
    -
    - - -
    - - - -
    -
    -
    -
    -
    -
    -
    - - - -
    -
    - - -
    - - - -
    -
    -
    -
    -
    -

    - * Goodies and prize money are subject to a maximum value of the - specified amount. -

    -
    -
    -
    -
    -

    $

    -
    +

    - + - +
    -
    +

    - SILVER + GOLD

    - -
    +
    @@ -1813,7 +1260,7 @@

    - +
    @@ -1886,7 +1333,7 @@

    - The Status Code 0 hackathon will be conducted in complete + The Status Code 1 hackathon will be conducted in complete offline/in person mode.

    @@ -1992,7 +1439,7 @@

    Devfolio

    @@ -2014,7 +1461,7 @@

    > [+] - What is the venue for Status Code 0? + What is the venue for Status Code 1?

    @@ -2170,14 +1617,14 @@

    @@ -2362,8 +1809,8 @@

    © 2023 IIIT Kalyani

    nomodule src="https://unpkg.com/ionicons@7.1.0/dist/ionicons/ionicons.js" > - - - + + + diff --git a/node_modules/.bin/atob b/node_modules/.bin/atob deleted file mode 120000 index a68344a..0000000 --- a/node_modules/.bin/atob +++ /dev/null @@ -1 +0,0 @@ -../atob/bin/atob.js \ No newline at end of file diff --git a/node_modules/.bin/live-server b/node_modules/.bin/live-server deleted file mode 120000 index 23665a1..0000000 --- a/node_modules/.bin/live-server +++ /dev/null @@ -1 +0,0 @@ -../live-server/live-server.js \ No newline at end of file diff --git a/node_modules/.bin/mime b/node_modules/.bin/mime deleted file mode 120000 index fbb7ee0..0000000 --- a/node_modules/.bin/mime +++ /dev/null @@ -1 +0,0 @@ -../mime/cli.js \ No newline at end of file diff --git a/node_modules/.bin/uuid b/node_modules/.bin/uuid deleted file mode 120000 index b3e45bc..0000000 --- a/node_modules/.bin/uuid +++ /dev/null @@ -1 +0,0 @@ -../uuid/bin/uuid \ No newline at end of file diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json deleted file mode 100644 index 6f2ec03..0000000 --- a/node_modules/.package-lock.json +++ /dev/null @@ -1,2076 +0,0 @@ -{ - "name": "Hackathon-website-2023", - "lockfileVersion": 3, - "requires": true, - "packages": { - "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/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "node_modules/anymatch/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/apache-crypt": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/apache-crypt/-/apache-crypt-1.2.6.tgz", - "integrity": "sha512-072WetlM4blL8PREJVeY+WHiUh1R5VNt2HfceGS8aKqttPHcmqE5pkKuXPz/ULmJOFkc8Hw3kfKl6vy7Qka6DA==", - "dependencies": { - "unix-crypt-td-js": "^1.1.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/apache-md5": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/apache-md5/-/apache-md5-1.1.8.tgz", - "integrity": "sha512-FCAJojipPn0bXjuEpjOOOMN8FZDkxfWWp4JGN9mifU2IhxvKyXZYqpzPHdnTSUpmPDy+tsslB6Z1g+Vg6nVbYA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/async-each": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.6.tgz", - "integrity": "sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] - }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/basic-auth": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", - "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", - "dependencies": { - "safe-buffer": "5.1.2" - }, - "engines": { - "node": ">= 0.8" - } - }, - "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/bcryptjs": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", - "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==" - }, - "node_modules/binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dependencies": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies", - "dependencies": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - }, - "optionalDependencies": { - "fsevents": "^1.2.7" - } - }, - "node_modules/class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" - }, - "node_modules/connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", - "dependencies": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "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/decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" - }, - "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/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/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "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/event-stream": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", - "integrity": "sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==", - "dependencies": { - "duplexer": "~0.1.1", - "from": "~0", - "map-stream": "~0.1.0", - "pause-stream": "0.0.11", - "split": "0.3", - "stream-combiner": "~0.0.4", - "through": "~2.3.1" - } - }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", - "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", - "dependencies": { - "map-cache": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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/from": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==" - }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "node_modules/glob-parent/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, - "node_modules/has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-auth": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/http-auth/-/http-auth-3.1.3.tgz", - "integrity": "sha512-Jbx0+ejo2IOx+cRUYAGS1z6RGc6JfYUNkysZM4u4Sfk1uLlGv814F7/PIjQQAuThLdAWxb74JMGd5J8zex1VQg==", - "dependencies": { - "apache-crypt": "^1.1.2", - "apache-md5": "^1.0.6", - "bcryptjs": "^2.3.0", - "uuid": "^3.0.0" - }, - "engines": { - "node": ">=4.6.1" - } - }, - "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-errors/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/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/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-accessor-descriptor/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/is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", - "dependencies": { - "binary-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-data-descriptor/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/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-descriptor/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/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "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": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "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-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", - "engines": { - "node": ">=4" - } - }, - "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/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/live-server": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/live-server/-/live-server-1.2.2.tgz", - "integrity": "sha512-t28HXLjITRGoMSrCOv4eZ88viHaBVIjKjdI5PO92Vxlu+twbk6aE0t7dVIaz6ZWkjPilYFV6OSdMYl9ybN2B4w==", - "dependencies": { - "chokidar": "^2.0.4", - "colors": "1.4.0", - "connect": "^3.6.6", - "cors": "latest", - "event-stream": "3.3.4", - "faye-websocket": "0.11.x", - "http-auth": "3.1.x", - "morgan": "^1.9.1", - "object-assign": "latest", - "opn": "latest", - "proxy-middleware": "latest", - "send": "latest", - "serve-index": "^1.9.1" - }, - "bin": { - "live-server": "live-server.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-stream": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", - "integrity": "sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==" - }, - "node_modules/map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/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/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/mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mixin-deep/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/morgan": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", - "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", - "dependencies": { - "basic-auth": "~2.0.1", - "debug": "2.6.9", - "depd": "~2.0.0", - "on-finished": "~2.3.0", - "on-headers": "~1.0.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/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/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/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/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", - "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/opn": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-6.0.0.tgz", - "integrity": "sha512-I9PKfIZC+e4RXZ/qr1RhgyCnGgYX0UEIlXgWnCOVACIvFgaC9rz6Won7xbdhoHrd8IIhV7YEpHjreNUNkqCGkQ==", - "deprecated": "The package has been renamed to `open`", - "dependencies": { - "is-wsl": "^1.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "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/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==" - }, - "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": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pause-stream": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", - "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", - "dependencies": { - "through": "~2.3" - } - }, - "node_modules/posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/proxy-middleware": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/proxy-middleware/-/proxy-middleware-0.15.0.tgz", - "integrity": "sha512-EGCG8SeoIRVMhsqHQUdDigB2i7qU7fCsWASwn54+nPutYO8n4q6EiwMzyfWlC+dzRFExP+kvcnDFdBDHoZBU7Q==", - "engines": { - "node": ">=0.8.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/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dependencies": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regex-not/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regex-not/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==" - }, - "node_modules/repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", - "deprecated": "https://github.com/lydell/resolve-url#deprecated" - }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "engines": { - "node": ">=0.12" - } - }, - "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/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", - "dependencies": { - "ret": "~0.1.10" - } - }, - "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/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/send/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/send/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/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/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/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, - "node_modules/set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dependencies": { - "kind-of": "^3.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "node_modules/source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "deprecated": "See https://github.com/lydell/source-map-url#deprecated" - }, - "node_modules/split": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", - "integrity": "sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==", - "dependencies": { - "through": "2" - }, - "engines": { - "node": "*" - } - }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split-string/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split-string/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "engines": { - "node": ">=0.10.0" - } - }, - "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/stream-combiner": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", - "integrity": "sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==", - "dependencies": { - "duplexer": "~0.1.1" - } - }, - "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/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" - }, - "node_modules/to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.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/union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unix-crypt-td-js": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/unix-crypt-td-js/-/unix-crypt-td-js-1.1.4.tgz", - "integrity": "sha512-8rMeVYWSIyccIJscb9NdCfZKSRBKYTeVnwmiRYT2ulE3qd1RaDQ0xQDP+rI3ccIWbhu/zuo5cgN8z73belNZgw==" - }, - "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/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "engines": { - "node": ">=4", - "yarn": "*" - } - }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", - "deprecated": "Please see https://github.com/lydell/urix#deprecated" - }, - "node_modules/use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "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/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": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "bin": { - "uuid": "bin/uuid" - } - }, - "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/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" - } - } - } -} diff --git a/node_modules/accepts/HISTORY.md b/node_modules/accepts/HISTORY.md deleted file mode 100644 index cb5990c..0000000 --- a/node_modules/accepts/HISTORY.md +++ /dev/null @@ -1,243 +0,0 @@ -1.3.8 / 2022-02-02 -================== - - * deps: mime-types@~2.1.34 - - deps: mime-db@~1.51.0 - * deps: negotiator@0.6.3 - -1.3.7 / 2019-04-29 -================== - - * deps: negotiator@0.6.2 - - Fix sorting charset, encoding, and language with extra parameters - -1.3.6 / 2019-04-28 -================== - - * deps: mime-types@~2.1.24 - - deps: mime-db@~1.40.0 - -1.3.5 / 2018-02-28 -================== - - * deps: mime-types@~2.1.18 - - deps: mime-db@~1.33.0 - -1.3.4 / 2017-08-22 -================== - - * deps: mime-types@~2.1.16 - - deps: mime-db@~1.29.0 - -1.3.3 / 2016-05-02 -================== - - * deps: mime-types@~2.1.11 - - deps: mime-db@~1.23.0 - * deps: negotiator@0.6.1 - - perf: improve `Accept` parsing speed - - perf: improve `Accept-Charset` parsing speed - - perf: improve `Accept-Encoding` parsing speed - - perf: improve `Accept-Language` parsing speed - -1.3.2 / 2016-03-08 -================== - - * deps: mime-types@~2.1.10 - - Fix extension of `application/dash+xml` - - Update primary extension for `audio/mp4` - - deps: mime-db@~1.22.0 - -1.3.1 / 2016-01-19 -================== - - * deps: mime-types@~2.1.9 - - deps: mime-db@~1.21.0 - -1.3.0 / 2015-09-29 -================== - - * deps: mime-types@~2.1.7 - - deps: mime-db@~1.19.0 - * deps: negotiator@0.6.0 - - Fix including type extensions in parameters in `Accept` parsing - - Fix parsing `Accept` parameters with quoted equals - - Fix parsing `Accept` parameters with quoted semicolons - - Lazy-load modules from main entry point - - perf: delay type concatenation until needed - - perf: enable strict mode - - perf: hoist regular expressions - - perf: remove closures getting spec properties - - perf: remove a closure from media type parsing - - perf: remove property delete from media type parsing - -1.2.13 / 2015-09-06 -=================== - - * deps: mime-types@~2.1.6 - - deps: mime-db@~1.18.0 - -1.2.12 / 2015-07-30 -=================== - - * deps: mime-types@~2.1.4 - - deps: mime-db@~1.16.0 - -1.2.11 / 2015-07-16 -=================== - - * deps: mime-types@~2.1.3 - - deps: mime-db@~1.15.0 - -1.2.10 / 2015-07-01 -=================== - - * deps: mime-types@~2.1.2 - - deps: mime-db@~1.14.0 - -1.2.9 / 2015-06-08 -================== - - * deps: mime-types@~2.1.1 - - perf: fix deopt during mapping - -1.2.8 / 2015-06-07 -================== - - * deps: mime-types@~2.1.0 - - deps: mime-db@~1.13.0 - * perf: avoid argument reassignment & argument slice - * perf: avoid negotiator recursive construction - * perf: enable strict mode - * perf: remove unnecessary bitwise operator - -1.2.7 / 2015-05-10 -================== - - * deps: negotiator@0.5.3 - - Fix media type parameter matching to be case-insensitive - -1.2.6 / 2015-05-07 -================== - - * deps: mime-types@~2.0.11 - - deps: mime-db@~1.9.1 - * deps: negotiator@0.5.2 - - Fix comparing media types with quoted values - - Fix splitting media types with quoted commas - -1.2.5 / 2015-03-13 -================== - - * deps: mime-types@~2.0.10 - - deps: mime-db@~1.8.0 - -1.2.4 / 2015-02-14 -================== - - * Support Node.js 0.6 - * deps: mime-types@~2.0.9 - - deps: mime-db@~1.7.0 - * deps: negotiator@0.5.1 - - Fix preference sorting to be stable for long acceptable lists - -1.2.3 / 2015-01-31 -================== - - * deps: mime-types@~2.0.8 - - deps: mime-db@~1.6.0 - -1.2.2 / 2014-12-30 -================== - - * deps: mime-types@~2.0.7 - - deps: mime-db@~1.5.0 - -1.2.1 / 2014-12-30 -================== - - * deps: mime-types@~2.0.5 - - deps: mime-db@~1.3.1 - -1.2.0 / 2014-12-19 -================== - - * deps: negotiator@0.5.0 - - Fix list return order when large accepted list - - Fix missing identity encoding when q=0 exists - - Remove dynamic building of Negotiator class - -1.1.4 / 2014-12-10 -================== - - * deps: mime-types@~2.0.4 - - deps: mime-db@~1.3.0 - -1.1.3 / 2014-11-09 -================== - - * deps: mime-types@~2.0.3 - - deps: mime-db@~1.2.0 - -1.1.2 / 2014-10-14 -================== - - * deps: negotiator@0.4.9 - - Fix error when media type has invalid parameter - -1.1.1 / 2014-09-28 -================== - - * deps: mime-types@~2.0.2 - - deps: mime-db@~1.1.0 - * deps: negotiator@0.4.8 - - Fix all negotiations to be case-insensitive - - Stable sort preferences of same quality according to client order - -1.1.0 / 2014-09-02 -================== - - * update `mime-types` - -1.0.7 / 2014-07-04 -================== - - * Fix wrong type returned from `type` when match after unknown extension - -1.0.6 / 2014-06-24 -================== - - * deps: negotiator@0.4.7 - -1.0.5 / 2014-06-20 -================== - - * fix crash when unknown extension given - -1.0.4 / 2014-06-19 -================== - - * use `mime-types` - -1.0.3 / 2014-06-11 -================== - - * deps: negotiator@0.4.6 - - Order by specificity when quality is the same - -1.0.2 / 2014-05-29 -================== - - * Fix interpretation when header not in request - * deps: pin negotiator@0.4.5 - -1.0.1 / 2014-01-18 -================== - - * Identity encoding isn't always acceptable - * deps: negotiator@~0.4.0 - -1.0.0 / 2013-12-27 -================== - - * Genesis diff --git a/node_modules/accepts/LICENSE b/node_modules/accepts/LICENSE deleted file mode 100644 index 0616607..0000000 --- a/node_modules/accepts/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -(The MIT License) - -Copyright (c) 2014 Jonathan Ong -Copyright (c) 2015 Douglas Christopher Wilson - -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/accepts/README.md b/node_modules/accepts/README.md deleted file mode 100644 index 82680c5..0000000 --- a/node_modules/accepts/README.md +++ /dev/null @@ -1,140 +0,0 @@ -# accepts - -[![NPM Version][npm-version-image]][npm-url] -[![NPM Downloads][npm-downloads-image]][npm-url] -[![Node.js Version][node-version-image]][node-version-url] -[![Build Status][github-actions-ci-image]][github-actions-ci-url] -[![Test Coverage][coveralls-image]][coveralls-url] - -Higher level content negotiation based on [negotiator](https://www.npmjs.com/package/negotiator). -Extracted from [koa](https://www.npmjs.com/package/koa) for general use. - -In addition to negotiator, it allows: - -- Allows types as an array or arguments list, ie `(['text/html', 'application/json'])` - as well as `('text/html', 'application/json')`. -- Allows type shorthands such as `json`. -- Returns `false` when no types match -- Treats non-existent headers as `*` - -## Installation - -This is a [Node.js](https://nodejs.org/en/) module available through the -[npm registry](https://www.npmjs.com/). Installation is done using the -[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): - -```sh -$ npm install accepts -``` - -## API - -```js -var accepts = require('accepts') -``` - -### accepts(req) - -Create a new `Accepts` object for the given `req`. - -#### .charset(charsets) - -Return the first accepted charset. If nothing in `charsets` is accepted, -then `false` is returned. - -#### .charsets() - -Return the charsets that the request accepts, in the order of the client's -preference (most preferred first). - -#### .encoding(encodings) - -Return the first accepted encoding. If nothing in `encodings` is accepted, -then `false` is returned. - -#### .encodings() - -Return the encodings that the request accepts, in the order of the client's -preference (most preferred first). - -#### .language(languages) - -Return the first accepted language. If nothing in `languages` is accepted, -then `false` is returned. - -#### .languages() - -Return the languages that the request accepts, in the order of the client's -preference (most preferred first). - -#### .type(types) - -Return the first accepted type (and it is returned as the same text as what -appears in the `types` array). If nothing in `types` is accepted, then `false` -is returned. - -The `types` array can contain full MIME types or file extensions. Any value -that is not a full MIME types is passed to `require('mime-types').lookup`. - -#### .types() - -Return the types that the request accepts, in the order of the client's -preference (most preferred first). - -## Examples - -### Simple type negotiation - -This simple example shows how to use `accepts` to return a different typed -respond body based on what the client wants to accept. The server lists it's -preferences in order and will get back the best match between the client and -server. - -```js -var accepts = require('accepts') -var http = require('http') - -function app (req, res) { - var accept = accepts(req) - - // the order of this list is significant; should be server preferred order - switch (accept.type(['json', 'html'])) { - case 'json': - res.setHeader('Content-Type', 'application/json') - res.write('{"hello":"world!"}') - break - case 'html': - res.setHeader('Content-Type', 'text/html') - res.write('hello, world!') - break - default: - // the fallback is text/plain, so no need to specify it above - res.setHeader('Content-Type', 'text/plain') - res.write('hello, world!') - break - } - - res.end() -} - -http.createServer(app).listen(3000) -``` - -You can test this out with the cURL program: -```sh -curl -I -H'Accept: text/html' http://localhost:3000/ -``` - -## License - -[MIT](LICENSE) - -[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/accepts/master -[coveralls-url]: https://coveralls.io/r/jshttp/accepts?branch=master -[github-actions-ci-image]: https://badgen.net/github/checks/jshttp/accepts/master?label=ci -[github-actions-ci-url]: https://github.com/jshttp/accepts/actions/workflows/ci.yml -[node-version-image]: https://badgen.net/npm/node/accepts -[node-version-url]: https://nodejs.org/en/download -[npm-downloads-image]: https://badgen.net/npm/dm/accepts -[npm-url]: https://npmjs.org/package/accepts -[npm-version-image]: https://badgen.net/npm/v/accepts diff --git a/node_modules/accepts/index.js b/node_modules/accepts/index.js deleted file mode 100644 index e9b2f63..0000000 --- a/node_modules/accepts/index.js +++ /dev/null @@ -1,238 +0,0 @@ -/*! - * accepts - * Copyright(c) 2014 Jonathan Ong - * Copyright(c) 2015 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict' - -/** - * Module dependencies. - * @private - */ - -var Negotiator = require('negotiator') -var mime = require('mime-types') - -/** - * Module exports. - * @public - */ - -module.exports = Accepts - -/** - * Create a new Accepts object for the given req. - * - * @param {object} req - * @public - */ - -function Accepts (req) { - if (!(this instanceof Accepts)) { - return new Accepts(req) - } - - this.headers = req.headers - this.negotiator = new Negotiator(req) -} - -/** - * Check if the given `type(s)` is acceptable, returning - * the best match when true, otherwise `undefined`, in which - * case you should respond with 406 "Not Acceptable". - * - * The `type` value may be a single mime type string - * such as "application/json", the extension name - * such as "json" or an array `["json", "html", "text/plain"]`. When a list - * or array is given the _best_ match, if any is returned. - * - * Examples: - * - * // Accept: text/html - * this.types('html'); - * // => "html" - * - * // Accept: text/*, application/json - * this.types('html'); - * // => "html" - * this.types('text/html'); - * // => "text/html" - * this.types('json', 'text'); - * // => "json" - * this.types('application/json'); - * // => "application/json" - * - * // Accept: text/*, application/json - * this.types('image/png'); - * this.types('png'); - * // => undefined - * - * // Accept: text/*;q=.5, application/json - * this.types(['html', 'json']); - * this.types('html', 'json'); - * // => "json" - * - * @param {String|Array} types... - * @return {String|Array|Boolean} - * @public - */ - -Accepts.prototype.type = -Accepts.prototype.types = function (types_) { - var types = types_ - - // support flattened arguments - if (types && !Array.isArray(types)) { - types = new Array(arguments.length) - for (var i = 0; i < types.length; i++) { - types[i] = arguments[i] - } - } - - // no types, return all requested types - if (!types || types.length === 0) { - return this.negotiator.mediaTypes() - } - - // no accept header, return first given type - if (!this.headers.accept) { - return types[0] - } - - var mimes = types.map(extToMime) - var accepts = this.negotiator.mediaTypes(mimes.filter(validMime)) - var first = accepts[0] - - return first - ? types[mimes.indexOf(first)] - : false -} - -/** - * Return accepted encodings or best fit based on `encodings`. - * - * Given `Accept-Encoding: gzip, deflate` - * an array sorted by quality is returned: - * - * ['gzip', 'deflate'] - * - * @param {String|Array} encodings... - * @return {String|Array} - * @public - */ - -Accepts.prototype.encoding = -Accepts.prototype.encodings = function (encodings_) { - var encodings = encodings_ - - // support flattened arguments - if (encodings && !Array.isArray(encodings)) { - encodings = new Array(arguments.length) - for (var i = 0; i < encodings.length; i++) { - encodings[i] = arguments[i] - } - } - - // no encodings, return all requested encodings - if (!encodings || encodings.length === 0) { - return this.negotiator.encodings() - } - - return this.negotiator.encodings(encodings)[0] || false -} - -/** - * Return accepted charsets or best fit based on `charsets`. - * - * Given `Accept-Charset: utf-8, iso-8859-1;q=0.2, utf-7;q=0.5` - * an array sorted by quality is returned: - * - * ['utf-8', 'utf-7', 'iso-8859-1'] - * - * @param {String|Array} charsets... - * @return {String|Array} - * @public - */ - -Accepts.prototype.charset = -Accepts.prototype.charsets = function (charsets_) { - var charsets = charsets_ - - // support flattened arguments - if (charsets && !Array.isArray(charsets)) { - charsets = new Array(arguments.length) - for (var i = 0; i < charsets.length; i++) { - charsets[i] = arguments[i] - } - } - - // no charsets, return all requested charsets - if (!charsets || charsets.length === 0) { - return this.negotiator.charsets() - } - - return this.negotiator.charsets(charsets)[0] || false -} - -/** - * Return accepted languages or best fit based on `langs`. - * - * Given `Accept-Language: en;q=0.8, es, pt` - * an array sorted by quality is returned: - * - * ['es', 'pt', 'en'] - * - * @param {String|Array} langs... - * @return {Array|String} - * @public - */ - -Accepts.prototype.lang = -Accepts.prototype.langs = -Accepts.prototype.language = -Accepts.prototype.languages = function (languages_) { - var languages = languages_ - - // support flattened arguments - if (languages && !Array.isArray(languages)) { - languages = new Array(arguments.length) - for (var i = 0; i < languages.length; i++) { - languages[i] = arguments[i] - } - } - - // no languages, return all requested languages - if (!languages || languages.length === 0) { - return this.negotiator.languages() - } - - return this.negotiator.languages(languages)[0] || false -} - -/** - * Convert extnames to mime. - * - * @param {String} type - * @return {String} - * @private - */ - -function extToMime (type) { - return type.indexOf('/') === -1 - ? mime.lookup(type) - : type -} - -/** - * Check if mime is valid. - * - * @param {String} type - * @return {String} - * @private - */ - -function validMime (type) { - return typeof type === 'string' -} diff --git a/node_modules/accepts/package.json b/node_modules/accepts/package.json deleted file mode 100644 index 0f2d15d..0000000 --- a/node_modules/accepts/package.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "accepts", - "description": "Higher-level content negotiation", - "version": "1.3.8", - "contributors": [ - "Douglas Christopher Wilson ", - "Jonathan Ong (http://jongleberry.com)" - ], - "license": "MIT", - "repository": "jshttp/accepts", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "devDependencies": { - "deep-equal": "1.0.1", - "eslint": "7.32.0", - "eslint-config-standard": "14.1.1", - "eslint-plugin-import": "2.25.4", - "eslint-plugin-markdown": "2.2.1", - "eslint-plugin-node": "11.1.0", - "eslint-plugin-promise": "4.3.1", - "eslint-plugin-standard": "4.1.0", - "mocha": "9.2.0", - "nyc": "15.1.0" - }, - "files": [ - "LICENSE", - "HISTORY.md", - "index.js" - ], - "engines": { - "node": ">= 0.6" - }, - "scripts": { - "lint": "eslint .", - "test": "mocha --reporter spec --check-leaks --bail test/", - "test-ci": "nyc --reporter=lcov --reporter=text npm test", - "test-cov": "nyc --reporter=html --reporter=text npm test" - }, - "keywords": [ - "content", - "negotiation", - "accept", - "accepts" - ] -} diff --git a/node_modules/anymatch/LICENSE b/node_modules/anymatch/LICENSE deleted file mode 100644 index bc42470..0000000 --- a/node_modules/anymatch/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -The ISC License - -Copyright (c) 2014 Elan Shanker - -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/anymatch/README.md b/node_modules/anymatch/README.md deleted file mode 100644 index f674f40..0000000 --- a/node_modules/anymatch/README.md +++ /dev/null @@ -1,99 +0,0 @@ -anymatch [![Build Status](https://travis-ci.org/micromatch/anymatch.svg?branch=master)](https://travis-ci.org/micromatch/anymatch) [![Coverage Status](https://img.shields.io/coveralls/micromatch/anymatch.svg?branch=master)](https://coveralls.io/r/micromatch/anymatch?branch=master) -====== -Javascript module to match a string against a regular expression, glob, string, -or function that takes the string as an argument and returns a truthy or falsy -value. The matcher can also be an array of any or all of these. Useful for -allowing a very flexible user-defined config to define things like file paths. - -__Note: This module has Bash-parity, please be aware that Windows-style backslashes are not supported as separators. See https://github.com/micromatch/micromatch#backslashes for more information.__ - -[![NPM](https://nodei.co/npm/anymatch.png?downloads=true&downloadRank=true&stars=true)](https://nodei.co/npm/anymatch/) -[![NPM](https://nodei.co/npm-dl/anymatch.png?height=3&months=9)](https://nodei.co/npm-dl/anymatch/) - -Usage ------ -```sh -npm install anymatch --save -``` - -#### anymatch (matchers, testString, [returnIndex], [startIndex], [endIndex]) -* __matchers__: (_Array|String|RegExp|Function_) -String to be directly matched, string with glob patterns, regular expression -test, function that takes the testString as an argument and returns a truthy -value if it should be matched, or an array of any number and mix of these types. -* __testString__: (_String|Array_) The string to test against the matchers. If -passed as an array, the first element of the array will be used as the -`testString` for non-function matchers, while the entire array will be applied -as the arguments for function matchers. -* __returnIndex__: (_Boolean [optional]_) If true, return the array index of -the first matcher that that testString matched, or -1 if no match, instead of a -boolean result. -* __startIndex, endIndex__: (_Integer [optional]_) Can be used to define a -subset out of the array of provided matchers to test against. Can be useful -with bound matcher functions (see below). When used with `returnIndex = true` -preserves original indexing. Behaves the same as `Array.prototype.slice` (i.e. -includes array members up to, but not including endIndex). - -```js -var anymatch = require('anymatch'); - -var matchers = [ - 'path/to/file.js', - 'path/anyjs/**/*.js', - /foo\.js$/, - function (string) { - return string.indexOf('bar') !== -1 && string.length > 10 - } -]; - -anymatch(matchers, 'path/to/file.js'); // true -anymatch(matchers, 'path/anyjs/baz.js'); // true -anymatch(matchers, 'path/to/foo.js'); // true -anymatch(matchers, 'path/to/bar.js'); // true -anymatch(matchers, 'bar.js'); // false - -// returnIndex = true -anymatch(matchers, 'foo.js', true); // 2 -anymatch(matchers, 'path/anyjs/foo.js', true); // 1 - -// skip matchers -anymatch(matchers, 'path/to/file.js', false, 1); // false -anymatch(matchers, 'path/anyjs/foo.js', true, 2, 3); // 2 -anymatch(matchers, 'path/to/bar.js', true, 0, 3); // -1 - -// using globs to match directories and their children -anymatch('node_modules', 'node_modules'); // true -anymatch('node_modules', 'node_modules/somelib/index.js'); // false -anymatch('node_modules/**', 'node_modules/somelib/index.js'); // true -anymatch('node_modules/**', '/absolute/path/to/node_modules/somelib/index.js'); // false -anymatch('**/node_modules/**', '/absolute/path/to/node_modules/somelib/index.js'); // true -``` - -#### anymatch (matchers) -You can also pass in only your matcher(s) to get a curried function that has -already been bound to the provided matching criteria. This can be used as an -`Array.prototype.filter` callback. - -```js -var matcher = anymatch(matchers); - -matcher('path/to/file.js'); // true -matcher('path/anyjs/baz.js', true); // 1 -matcher('path/anyjs/baz.js', true, 2); // -1 - -['foo.js', 'bar.js'].filter(matcher); // ['foo.js'] -``` - -Change Log ----------- -[See release notes page on GitHub](https://github.com/micromatch/anymatch/releases) - -NOTE: As of v2.0.0, [micromatch](https://github.com/jonschlinkert/micromatch) moves away from minimatch-parity and inline with Bash. This includes handling backslashes differently (see https://github.com/micromatch/micromatch#backslashes for more information). - -NOTE: As of v1.2.0, anymatch uses [micromatch](https://github.com/jonschlinkert/micromatch) -for glob pattern matching. Issues with glob pattern matching should be -reported directly to the [micromatch issue tracker](https://github.com/jonschlinkert/micromatch/issues). - -License -------- -[ISC](https://raw.github.com/micromatch/anymatch/master/LICENSE) diff --git a/node_modules/anymatch/index.js b/node_modules/anymatch/index.js deleted file mode 100644 index e411618..0000000 --- a/node_modules/anymatch/index.js +++ /dev/null @@ -1,67 +0,0 @@ -'use strict'; - -var micromatch = require('micromatch'); -var normalize = require('normalize-path'); -var path = require('path'); // required for tests. -var arrify = function(a) { return a == null ? [] : (Array.isArray(a) ? a : [a]); }; - -var anymatch = function(criteria, value, returnIndex, startIndex, endIndex) { - criteria = arrify(criteria); - value = arrify(value); - if (arguments.length === 1) { - return anymatch.bind(null, criteria.map(function(criterion) { - return typeof criterion === 'string' && criterion[0] !== '!' ? - micromatch.matcher(criterion) : criterion; - })); - } - startIndex = startIndex || 0; - var string = value[0]; - var altString, altValue; - var matched = false; - var matchIndex = -1; - function testCriteria(criterion, index) { - var result; - switch (Object.prototype.toString.call(criterion)) { - case '[object String]': - result = string === criterion || altString && altString === criterion; - result = result || micromatch.isMatch(string, criterion); - break; - case '[object RegExp]': - result = criterion.test(string) || altString && criterion.test(altString); - break; - case '[object Function]': - result = criterion.apply(null, value); - result = result || altValue && criterion.apply(null, altValue); - break; - default: - result = false; - } - if (result) { - matchIndex = index + startIndex; - } - return result; - } - var crit = criteria; - var negGlobs = crit.reduce(function(arr, criterion, index) { - if (typeof criterion === 'string' && criterion[0] === '!') { - if (crit === criteria) { - // make a copy before modifying - crit = crit.slice(); - } - crit[index] = null; - arr.push(criterion.substr(1)); - } - return arr; - }, []); - if (!negGlobs.length || !micromatch.any(string, negGlobs)) { - if (path.sep === '\\' && typeof string === 'string') { - altString = normalize(string); - altString = altString === string ? null : altString; - if (altString) altValue = [altString].concat(value.slice(1)); - } - matched = crit.slice(startIndex, endIndex).some(testCriteria); - } - return returnIndex === true ? matchIndex : matched; -}; - -module.exports = anymatch; diff --git a/node_modules/anymatch/node_modules/normalize-path/LICENSE b/node_modules/anymatch/node_modules/normalize-path/LICENSE deleted file mode 100644 index d734237..0000000 --- a/node_modules/anymatch/node_modules/normalize-path/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -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/anymatch/node_modules/normalize-path/README.md b/node_modules/anymatch/node_modules/normalize-path/README.md deleted file mode 100644 index daa0edd..0000000 --- a/node_modules/anymatch/node_modules/normalize-path/README.md +++ /dev/null @@ -1,92 +0,0 @@ -# normalize-path [![NPM version](https://img.shields.io/npm/v/normalize-path.svg?style=flat)](https://www.npmjs.com/package/normalize-path) [![NPM monthly downloads](https://img.shields.io/npm/dm/normalize-path.svg?style=flat)](https://npmjs.org/package/normalize-path) [![NPM total downloads](https://img.shields.io/npm/dt/normalize-path.svg?style=flat)](https://npmjs.org/package/normalize-path) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/normalize-path.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/normalize-path) - -> Normalize file path slashes to be unix-like forward slashes. Also condenses repeat slashes to a single slash and removes and trailing slashes unless disabled. - -## Install - -Install with [npm](https://www.npmjs.com/): - -```sh -$ npm install --save normalize-path -``` - -## Usage - -```js -var normalize = require('normalize-path'); - -normalize('\\foo\\bar\\baz\\'); -//=> '/foo/bar/baz' - -normalize('./foo/bar/baz/'); -//=> './foo/bar/baz' -``` - -Pass `false` as the last argument to **keep** trailing slashes: - -```js -normalize('./foo/bar/baz/', false); -//=> './foo/bar/baz/' - -normalize('foo\\bar\\baz\\', false); -//=> 'foo/bar/baz/' -``` - -## About - -### Related projects - -* [contains-path](https://www.npmjs.com/package/contains-path): Return true if a file path contains the given path. | [homepage](https://github.com/jonschlinkert/contains-path "Return true if a file path contains the given path.") -* [ends-with](https://www.npmjs.com/package/ends-with): Returns `true` if the given `string` or `array` ends with `suffix` using strict equality for… [more](https://github.com/jonschlinkert/ends-with) | [homepage](https://github.com/jonschlinkert/ends-with "Returns `true` if the given `string` or `array` ends with `suffix` using strict equality for comparisons.") -* [is-absolute](https://www.npmjs.com/package/is-absolute): Polyfill for node.js `path.isAbolute`. Returns true if a file path is absolute. | [homepage](https://github.com/jonschlinkert/is-absolute "Polyfill for node.js `path.isAbolute`. Returns true if a file path is absolute.") -* [is-relative](https://www.npmjs.com/package/is-relative): Returns `true` if the path appears to be relative. | [homepage](https://github.com/jonschlinkert/is-relative "Returns `true` if the path appears to be relative.") -* [parse-filepath](https://www.npmjs.com/package/parse-filepath): Pollyfill for node.js `path.parse`, parses a filepath into an object. | [homepage](https://github.com/jonschlinkert/parse-filepath "Pollyfill for node.js `path.parse`, parses a filepath into an object.") -* [path-ends-with](https://www.npmjs.com/package/path-ends-with): Return `true` if a file path ends with the given string/suffix. | [homepage](https://github.com/jonschlinkert/path-ends-with "Return `true` if a file path ends with the given string/suffix.") -* [path-segments](https://www.npmjs.com/package/path-segments): Get n specific segments of a file path, e.g. first 2, last 3, etc. | [homepage](https://github.com/jonschlinkert/path-segments "Get n specific segments of a file path, e.g. first 2, last 3, etc.") -* [rewrite-ext](https://www.npmjs.com/package/rewrite-ext): Automatically re-write the destination extension of a filepath based on the source extension. e.g… [more](https://github.com/jonschlinkert/rewrite-ext) | [homepage](https://github.com/jonschlinkert/rewrite-ext "Automatically re-write the destination extension of a filepath based on the source extension. e.g `.coffee` => `.js`. This will only rename the ext, no other path parts are modified.") -* [unixify](https://www.npmjs.com/package/unixify): Convert Windows file paths to unix paths. | [homepage](https://github.com/jonschlinkert/unixify "Convert Windows file paths to unix paths.") - -### Contributing - -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). - -### Contributors - -| **Commits** | **Contributor** | -| --- | --- | -| 31 | [jonschlinkert](https://github.com/jonschlinkert) | -| 1 | [phated](https://github.com/phated) | - -### 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 -``` - -### 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 -``` - -### Author - -**Jon Schlinkert** - -* [github/jonschlinkert](https://github.com/jonschlinkert) -* [twitter/jonschlinkert](https://twitter.com/jonschlinkert) - -### License - -Copyright © 2017, [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.4.3, on March 29, 2017._ \ No newline at end of file diff --git a/node_modules/anymatch/node_modules/normalize-path/index.js b/node_modules/anymatch/node_modules/normalize-path/index.js deleted file mode 100644 index 4a4f8cc..0000000 --- a/node_modules/anymatch/node_modules/normalize-path/index.js +++ /dev/null @@ -1,19 +0,0 @@ -/*! - * normalize-path - * - * Copyright (c) 2014-2017, Jon Schlinkert. - * Released under the MIT License. - */ - -var removeTrailingSeparator = require('remove-trailing-separator'); - -module.exports = function normalizePath(str, stripTrailing) { - if (typeof str !== 'string') { - throw new TypeError('expected a string'); - } - str = str.replace(/[\\\/]+/g, '/'); - if (stripTrailing !== false) { - str = removeTrailingSeparator(str); - } - return str; -}; diff --git a/node_modules/anymatch/node_modules/normalize-path/package.json b/node_modules/anymatch/node_modules/normalize-path/package.json deleted file mode 100644 index c16ef9d..0000000 --- a/node_modules/anymatch/node_modules/normalize-path/package.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "name": "normalize-path", - "description": "Normalize file path slashes to be unix-like forward slashes. Also condenses repeat slashes to a single slash and removes and trailing slashes unless disabled.", - "version": "2.1.1", - "homepage": "https://github.com/jonschlinkert/normalize-path", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "contributors": [ - "Blaine Bublitz (https://twitter.com/BlaineBublitz)", - "Jon Schlinkert (http://twitter.com/jonschlinkert)" - ], - "repository": "jonschlinkert/normalize-path", - "bugs": { - "url": "https://github.com/jonschlinkert/normalize-path/issues" - }, - "license": "MIT", - "files": [ - "index.js" - ], - "main": "index.js", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "devDependencies": { - "benchmarked": "^0.1.1", - "gulp-format-md": "^0.1.11", - "minimist": "^1.2.0", - "mocha": "*" - }, - "keywords": [ - "backslash", - "file", - "filepath", - "fix", - "forward", - "fp", - "fs", - "normalize", - "path", - "slash", - "slashes", - "trailing", - "unix", - "urix" - ], - "verb": { - "related": { - "list": [ - "contains-path", - "ends-with", - "is-absolute", - "is-relative", - "parse-filepath", - "path-ends-with", - "path-segments", - "rewrite-ext", - "unixify" - ], - "description": "Other useful libraries for working with paths in node.js:" - }, - "toc": false, - "layout": "default", - "tasks": [ - "readme" - ], - "plugins": [ - "gulp-format-md" - ], - "lint": { - "reflinks": true - } - } -} diff --git a/node_modules/anymatch/package.json b/node_modules/anymatch/package.json deleted file mode 100644 index fdbafd7..0000000 --- a/node_modules/anymatch/package.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "anymatch", - "version": "2.0.0", - "description": "Matches strings against configurable strings, globs, regular expressions, and/or functions", - "files": [ - "index.js" - ], - "author": { - "name": "Elan Shanker", - "url": "http://github.com/es128" - }, - "license": "ISC", - "homepage": "https://github.com/micromatch/anymatch", - "repository": { - "type": "git", - "url": "https://github.com/micromatch/anymatch" - }, - "bugs": { - "url": "https://github.com/micromatch/anymatch/issues" - }, - "keywords": [ - "match", - "any", - "string", - "file", - "fs", - "list", - "glob", - "regex", - "regexp", - "regular", - "expression", - "function" - ], - "scripts": { - "test": "istanbul cover _mocha && cat ./coverage/lcov.info | coveralls" - }, - "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "devDependencies": { - "coveralls": "^2.7.0", - "istanbul": "^0.4.5", - "mocha": "^3.0.0" - } -} diff --git a/node_modules/apache-crypt/LICENSE b/node_modules/apache-crypt/LICENSE deleted file mode 100644 index 8a6cf57..0000000 --- a/node_modules/apache-crypt/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Gevorg Harutyunyan - -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/apache-crypt/README.md b/node_modules/apache-crypt/README.md deleted file mode 100644 index 680c027..0000000 --- a/node_modules/apache-crypt/README.md +++ /dev/null @@ -1,43 +0,0 @@ -# apache-crypt -[Node.js](http://nodejs.org/) package for Apache style password encryption using crypt(3). - -[![build](https://github.com/gevorg/apache-crypt/workflows/build/badge.svg)](https://github.com/gevorg/apache-crypt/actions/workflows/build.yml) - -## Installation - -Via git (or downloaded tarball): - -```bash -$ git clone git://github.com/gevorg/apache-crypt.git -``` -Via [npm](http://npmjs.org/): - -```bash -$ npm install apache-crypt -``` - -## Usage - -```javascript -const crypt = require("apache-crypt"); - -// Encrypting password using auto-generated 2 char salt. -const encryptedPassword = crypt("mypass"); - -// Should print true. -console.log(crypt("mypass", encryptedPassword) == encryptedPassword); -// Should print false. -console.log(crypt("notmypass", encryptedPassword) == encryptedPassword); -``` - -## Running tests - -It uses [mocha](https://mochajs.org/), so just run following command in package directory: - -```bash -$ npm test -``` - -## License - -The MIT License (MIT) \ No newline at end of file diff --git a/node_modules/apache-crypt/package.json b/node_modules/apache-crypt/package.json deleted file mode 100644 index 699e695..0000000 --- a/node_modules/apache-crypt/package.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "name": "apache-crypt", - "description": "Node.js module for Apache style password encryption using crypt(3).", - "version": "1.2.6", - "author": "Gevorg Harutyunyan (http://github.com/gevorg)", - "maintainers": [ - { - "name": "gevorg", - "email": "gevorg.ha@gmail.com" - } - ], - "homepage": "http://github.com/gevorg/apache-crypt", - "repository": { - "type": "git", - "url": "http://github.com/gevorg/apache-crypt.git" - }, - "main": "./src/index.js", - "licenses": [ - { - "type": "MIT", - "url": "http://github.com/gevorg/apache-crypt/blob/master/LICENSE" - } - ], - "license": "MIT", - "bugs": { - "url": "http://github.com/gevorg/apache-crypt/issues" - }, - "dependencies": { - "unix-crypt-td-js": "^1.1.4" - }, - "devDependencies": { - "chai": "^4.2.0", - "eslint": "^6.8.0", - "eslint-config-prettier": "^6.10.0", - "eslint-plugin-node": "^11.0.0", - "eslint-plugin-prettier": "^3.1.2", - "mocha": "^7.0.1", - "prettier": "^1.19.1" - }, - "engines": { - "node": ">=8" - }, - "scripts": { - "test": "mocha", - "pretest": "eslint --ignore-path .gitignore ." - }, - "keywords": [ - "apache", - "crypt", - "password", - "htpasswd" - ] -} diff --git a/node_modules/apache-crypt/src/index.js b/node_modules/apache-crypt/src/index.js deleted file mode 100644 index 342c647..0000000 --- a/node_modules/apache-crypt/src/index.js +++ /dev/null @@ -1,20 +0,0 @@ -"use strict"; - -// Des module. -const des = require("unix-crypt-td-js"); - -// Hash generation string. -const itoa64 = - "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; - -// Salt generation method. -function getSalt() { - return ( - itoa64[parseInt(Math.random() * 64)] + itoa64[parseInt(Math.random() * 64)] - ); -} - -// Exporting old style. -module.exports = (password, salt) => { - return salt ? des(password, salt) : des(password, getSalt()); -}; diff --git a/node_modules/apache-md5/LICENSE b/node_modules/apache-md5/LICENSE deleted file mode 100644 index 8a6cf57..0000000 --- a/node_modules/apache-md5/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Gevorg Harutyunyan - -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/apache-md5/README.md b/node_modules/apache-md5/README.md deleted file mode 100644 index e28077b..0000000 --- a/node_modules/apache-md5/README.md +++ /dev/null @@ -1,43 +0,0 @@ -# apache-md5 -[Node.js](http://nodejs.org/) package for Apache style password encryption using md5. - -[![build](https://github.com/gevorg/apache-md5/workflows/build/badge.svg)](https://github.com/gevorg/apache-md5/actions/workflows/build.yml) - -## Installation - -Via git (or downloaded tarball): - -```bash -$ git clone git://github.com/gevorg/apache-md5.git -``` -Via [npm](http://npmjs.org/): - -```bash -$ npm install apache-md5 -``` - -## Usage - -```javascript -const md5 = require("apache-md5"); - -// Encrypting password using apache's md5 algorithm. -const encryptedPassword = md5("mypass"); - -// Should print true. -console.log(md5("mypass", encryptedPassword) == encryptedPassword); -// Should print false. -console.log(md5("notmypass", encryptedPassword) == encryptedPassword); -``` - -## Running tests - -It uses [mocha](https://mochajs.org/), so just run following command in package directory: - -```bash -$ npm test -``` - -## License - -The MIT License (MIT) \ No newline at end of file diff --git a/node_modules/apache-md5/package.json b/node_modules/apache-md5/package.json deleted file mode 100644 index f2a9421..0000000 --- a/node_modules/apache-md5/package.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "name": "apache-md5", - "description": "Node.js module for Apache style password encryption using md5.", - "version": "1.1.8", - "author": "Gevorg Harutyunyan (http://github.com/gevorg)", - "maintainers": [ - { - "name": "gevorg", - "email": "gevorg.ha@gmail.com" - } - ], - "homepage": "http://github.com/gevorg/apache-md5", - "repository": { - "type": "git", - "url": "http://github.com/gevorg/apache-md5.git" - }, - "main": "./src/index.js", - "typings": "./src/apache-md5.d.ts", - "licenses": [ - { - "type": "MIT", - "url": "http://github.com/gevorg/apache-md5/blob/master/LICENSE" - } - ], - "license": "MIT", - "bugs": { - "url": "http://github.com/gevorg/apache-md5/issues" - }, - "devDependencies": { - "chai": "^4.2.0", - "eslint": "^6.8.0", - "eslint-config-prettier": "^6.10.0", - "eslint-plugin-node": "^11.0.0", - "eslint-plugin-prettier": "^3.1.2", - "mocha": "^7.0.1", - "prettier": "^1.19.1" - }, - "engines": { - "node": ">=8" - }, - "scripts": { - "test": "mocha", - "pretest": "eslint --ignore-path .gitignore ." - }, - "keywords": [ - "apache", - "md5", - "password", - "htpasswd" - ] -} diff --git a/node_modules/apache-md5/src/apache-md5.d.ts b/node_modules/apache-md5/src/apache-md5.d.ts deleted file mode 100644 index 64b6cc9..0000000 --- a/node_modules/apache-md5/src/apache-md5.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -declare function aprMd5(password: string, salt?: string): string; - -export default aprMd5; - diff --git a/node_modules/apache-md5/src/index.js b/node_modules/apache-md5/src/index.js deleted file mode 100644 index 1c79b65..0000000 --- a/node_modules/apache-md5/src/index.js +++ /dev/null @@ -1,148 +0,0 @@ -"use strict"; - -// Crypto module import. -const crypto = require("crypto"); - -// Hash generation string. -const itoa64 = - "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; - -// To 64 bit version. -function to64(index, count) { - let result = ""; - - while (--count >= 0) { - // Result char count. - result += itoa64[index & 63]; // Get corresponding char. - index = index >> 6; // Move to next one. - } - - return result; -} - -// Returns salt. -function getSalt(inputSalt) { - let salt = ""; - - if (inputSalt) { - // Remove $apr1$ token and extract salt. - salt = inputSalt.split("$")[2]; - } else { - while (salt.length < 8) { - // Random 8 chars. - let rchIndex = Math.floor(Math.random() * 64); - salt += itoa64[rchIndex]; - } - } - - return salt; -} - -// Returns password. -function getPassword(final) { - // Encrypted pass. - let epass = ""; - - epass += to64( - (final.charCodeAt(0) << 16) | - (final.charCodeAt(6) << 8) | - final.charCodeAt(12), - 4 - ); - epass += to64( - (final.charCodeAt(1) << 16) | - (final.charCodeAt(7) << 8) | - final.charCodeAt(13), - 4 - ); - epass += to64( - (final.charCodeAt(2) << 16) | - (final.charCodeAt(8) << 8) | - final.charCodeAt(14), - 4 - ); - epass += to64( - (final.charCodeAt(3) << 16) | - (final.charCodeAt(9) << 8) | - final.charCodeAt(15), - 4 - ); - epass += to64( - (final.charCodeAt(4) << 16) | - (final.charCodeAt(10) << 8) | - final.charCodeAt(5), - 4 - ); - epass += to64(final.charCodeAt(11), 2); - - return epass; -} - -// Exporting old style. -module.exports = (password, salt) => { - let magic = ""; - if (salt && salt.split("$")[1] === "1") { - magic = "$1$"; - } else { - magic = "$apr1$"; - } - - salt = getSalt(salt); - - let ctx = password + magic + salt; - let final = crypto - .createHash("md5") - .update(password + salt + password, "ascii") - .digest("binary"); - - for (let pl = password.length; pl > 0; pl -= 16) { - ctx += final.substr(0, pl > 16 ? 16 : pl); - } - - for (let i = password.length; i; i >>= 1) { - if (i % 2) { - ctx += String.fromCharCode(0); - } else { - ctx += password.charAt(0); - } - } - - final = crypto - .createHash("md5") - .update(ctx, "ascii") - .digest("binary"); - - // 1000 loop. - for (let i = 0; i < 1000; ++i) { - // Weird stuff. - let ctxl = ""; - - if (i % 2) { - ctxl += password; - } else { - ctxl += final.substr(0, 16); - } - - if (i % 3) { - ctxl += salt; - } - - if (i % 7) { - ctxl += password; - } - - if (i % 2) { - ctxl += final.substr(0, 16); - } else { - ctxl += password; - } - - // Final assignment after each loop. - final = crypto - .createHash("md5") - .update(ctxl, "ascii") - .digest("binary"); - } - - return magic + salt + "$" + getPassword(final); -}; diff --git a/node_modules/arr-diff/LICENSE b/node_modules/arr-diff/LICENSE deleted file mode 100755 index d734237..0000000 --- a/node_modules/arr-diff/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -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/arr-diff/README.md b/node_modules/arr-diff/README.md deleted file mode 100644 index 961f5c3..0000000 --- a/node_modules/arr-diff/README.md +++ /dev/null @@ -1,130 +0,0 @@ -# arr-diff [![NPM version](https://img.shields.io/npm/v/arr-diff.svg?style=flat)](https://www.npmjs.com/package/arr-diff) [![NPM monthly downloads](https://img.shields.io/npm/dm/arr-diff.svg?style=flat)](https://npmjs.org/package/arr-diff) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/arr-diff.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/arr-diff) - -> Returns an array with only the unique values from the first array, by excluding all values from additional arrays using strict equality for comparisons. - -## Install - -Install with [npm](https://www.npmjs.com/): - -```sh -$ npm install --save arr-diff -``` - -Install with [yarn](https://yarnpkg.com): - -```sh -$ yarn add arr-diff -``` - -Install with [bower](https://bower.io/) - -```sh -$ bower install arr-diff --save -``` - -## Usage - -Returns the difference between the first array and additional arrays. - -```js -var diff = require('arr-diff'); - -var a = ['a', 'b', 'c', 'd']; -var b = ['b', 'c']; - -console.log(diff(a, b)) -//=> ['a', 'd'] -``` - -## Benchmarks - -This library versus [array-differ](https://github.com/sindresorhus/array-differ), on April 14, 2017: - -``` -Benchmarking: (4 of 4) - · long-dupes - · long - · med - · short - -# benchmark/fixtures/long-dupes.js (100804 bytes) - arr-diff-3.0.0 x 822 ops/sec ±0.67% (86 runs sampled) - arr-diff-4.0.0 x 2,141 ops/sec ±0.42% (89 runs sampled) - array-differ x 708 ops/sec ±0.70% (89 runs sampled) - - fastest is arr-diff-4.0.0 - -# benchmark/fixtures/long.js (94529 bytes) - arr-diff-3.0.0 x 882 ops/sec ±0.60% (87 runs sampled) - arr-diff-4.0.0 x 2,329 ops/sec ±0.97% (83 runs sampled) - array-differ x 769 ops/sec ±0.61% (90 runs sampled) - - fastest is arr-diff-4.0.0 - -# benchmark/fixtures/med.js (708 bytes) - arr-diff-3.0.0 x 856,150 ops/sec ±0.42% (89 runs sampled) - arr-diff-4.0.0 x 4,665,249 ops/sec ±1.06% (89 runs sampled) - array-differ x 653,888 ops/sec ±1.02% (86 runs sampled) - - fastest is arr-diff-4.0.0 - -# benchmark/fixtures/short.js (60 bytes) - arr-diff-3.0.0 x 3,078,467 ops/sec ±0.77% (93 runs sampled) - arr-diff-4.0.0 x 9,213,296 ops/sec ±0.65% (89 runs sampled) - array-differ x 1,337,051 ops/sec ±0.91% (92 runs sampled) - - fastest is arr-diff-4.0.0 -``` - -## About - -### Related projects - -* [arr-flatten](https://www.npmjs.com/package/arr-flatten): Recursively flatten an array or arrays. This is the fastest implementation of array flatten. | [homepage](https://github.com/jonschlinkert/arr-flatten "Recursively flatten an array or arrays. This is the fastest implementation of array flatten.") -* [array-filter](https://www.npmjs.com/package/array-filter): Array#filter for older browsers. | [homepage](https://github.com/juliangruber/array-filter "Array#filter for older browsers.") -* [array-intersection](https://www.npmjs.com/package/array-intersection): Return an array with the unique values present in _all_ given arrays using strict equality… [more](https://github.com/jonschlinkert/array-intersection) | [homepage](https://github.com/jonschlinkert/array-intersection "Return an array with the unique values present in _all_ given arrays using strict equality for comparisons.") - -### Contributing - -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). - -### Contributors - -| **Commits** | **Contributor** | -| --- | --- | -| 33 | [jonschlinkert](https://github.com/jonschlinkert) | -| 2 | [paulmillr](https://github.com/paulmillr) | - -### 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 -``` - -### 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 -``` - -### Author - -**Jon Schlinkert** - -* [github/jonschlinkert](https://github.com/jonschlinkert) -* [twitter/jonschlinkert](https://twitter.com/jonschlinkert) - -### License - -Copyright © 2017, [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.5.0, on April 14, 2017._ \ No newline at end of file diff --git a/node_modules/arr-diff/index.js b/node_modules/arr-diff/index.js deleted file mode 100644 index 90f2807..0000000 --- a/node_modules/arr-diff/index.js +++ /dev/null @@ -1,47 +0,0 @@ -/*! - * arr-diff - * - * Copyright (c) 2014-2017, Jon Schlinkert. - * Released under the MIT License. - */ - -'use strict'; - -module.exports = function diff(arr/*, arrays*/) { - var len = arguments.length; - var idx = 0; - while (++idx < len) { - arr = diffArray(arr, arguments[idx]); - } - return arr; -}; - -function diffArray(one, two) { - if (!Array.isArray(two)) { - return one.slice(); - } - - var tlen = two.length - var olen = one.length; - var idx = -1; - var arr = []; - - while (++idx < olen) { - var ele = one[idx]; - - var hasEle = false; - for (var i = 0; i < tlen; i++) { - var val = two[i]; - - if (ele === val) { - hasEle = true; - break; - } - } - - if (hasEle === false) { - arr.push(ele); - } - } - return arr; -} diff --git a/node_modules/arr-diff/package.json b/node_modules/arr-diff/package.json deleted file mode 100644 index c106813..0000000 --- a/node_modules/arr-diff/package.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "name": "arr-diff", - "description": "Returns an array with only the unique values from the first array, by excluding all values from additional arrays using strict equality for comparisons.", - "version": "4.0.0", - "homepage": "https://github.com/jonschlinkert/arr-diff", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "contributors": [ - "Jon Schlinkert (http://twitter.com/jonschlinkert)", - "Paul Miller (paulmillr.com)" - ], - "repository": "jonschlinkert/arr-diff", - "bugs": { - "url": "https://github.com/jonschlinkert/arr-diff/issues" - }, - "license": "MIT", - "files": [ - "index.js" - ], - "main": "index.js", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "dependencies": {}, - "devDependencies": { - "ansi-bold": "^0.1.1", - "arr-flatten": "^1.0.1", - "array-differ": "^1.0.0", - "benchmarked": "^0.2.4", - "gulp-format-md": "^0.1.9", - "minimist": "^1.2.0", - "mocha": "^2.4.5" - }, - "keywords": [ - "arr", - "array", - "array differ", - "array-differ", - "diff", - "differ", - "difference" - ], - "verb": { - "toc": false, - "layout": "default", - "tasks": [ - "readme" - ], - "plugins": [ - "gulp-format-md" - ], - "related": { - "list": [ - "arr-flatten", - "array-filter", - "array-intersection" - ] - }, - "reflinks": [ - "array-differ", - "verb" - ], - "lint": { - "reflinks": true - } - } -} diff --git a/node_modules/arr-flatten/LICENSE b/node_modules/arr-flatten/LICENSE deleted file mode 100755 index 3f2eca1..0000000 --- a/node_modules/arr-flatten/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -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/arr-flatten/README.md b/node_modules/arr-flatten/README.md deleted file mode 100755 index 7dc7a97..0000000 --- a/node_modules/arr-flatten/README.md +++ /dev/null @@ -1,86 +0,0 @@ -# arr-flatten [![NPM version](https://img.shields.io/npm/v/arr-flatten.svg?style=flat)](https://www.npmjs.com/package/arr-flatten) [![NPM monthly downloads](https://img.shields.io/npm/dm/arr-flatten.svg?style=flat)](https://npmjs.org/package/arr-flatten) [![NPM total downloads](https://img.shields.io/npm/dt/arr-flatten.svg?style=flat)](https://npmjs.org/package/arr-flatten) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/arr-flatten.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/arr-flatten) [![Windows Build Status](https://img.shields.io/appveyor/ci/jonschlinkert/arr-flatten.svg?style=flat&label=AppVeyor)](https://ci.appveyor.com/project/jonschlinkert/arr-flatten) - -> Recursively flatten an array or arrays. - -## Install - -Install with [npm](https://www.npmjs.com/): - -```sh -$ npm install --save arr-flatten -``` - -## Install - -Install with [bower](https://bower.io/) - -```sh -$ bower install arr-flatten --save -``` - -## Usage - -```js -var flatten = require('arr-flatten'); - -flatten(['a', ['b', ['c']], 'd', ['e']]); -//=> ['a', 'b', 'c', 'd', 'e'] -``` - -## Why another flatten utility? - -I wanted the fastest implementation I could find, with implementation choices that should work for 95% of use cases, but no cruft to cover the other 5%. - -## About - -### Related projects - -* [arr-filter](https://www.npmjs.com/package/arr-filter): Faster alternative to javascript's native filter method. | [homepage](https://github.com/jonschlinkert/arr-filter "Faster alternative to javascript's native filter method.") -* [arr-union](https://www.npmjs.com/package/arr-union): Combines a list of arrays, returning a single array with unique values, using strict equality… [more](https://github.com/jonschlinkert/arr-union) | [homepage](https://github.com/jonschlinkert/arr-union "Combines a list of arrays, returning a single array with unique values, using strict equality for comparisons.") -* [array-each](https://www.npmjs.com/package/array-each): Loop over each item in an array and call the given function on every element. | [homepage](https://github.com/jonschlinkert/array-each "Loop over each item in an array and call the given function on every element.") -* [array-unique](https://www.npmjs.com/package/array-unique): Remove duplicate values from an array. Fastest ES5 implementation. | [homepage](https://github.com/jonschlinkert/array-unique "Remove duplicate values from an array. Fastest ES5 implementation.") - -### Contributing - -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). - -### Contributors - -| **Commits** | **Contributor** | -| --- | --- | -| 20 | [jonschlinkert](https://github.com/jonschlinkert) | -| 1 | [lukeed](https://github.com/lukeed) | - -### 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 -``` - -### 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 -``` - -### Author - -**Jon Schlinkert** - -* [github/jonschlinkert](https://github.com/jonschlinkert) -* [twitter/jonschlinkert](https://twitter.com/jonschlinkert) - -### License - -Copyright © 2017, [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 July 05, 2017._ \ No newline at end of file diff --git a/node_modules/arr-flatten/index.js b/node_modules/arr-flatten/index.js deleted file mode 100644 index 0cb4ea4..0000000 --- a/node_modules/arr-flatten/index.js +++ /dev/null @@ -1,22 +0,0 @@ -/*! - * arr-flatten - * - * Copyright (c) 2014-2017, Jon Schlinkert. - * Released under the MIT License. - */ - -'use strict'; - -module.exports = function (arr) { - return flat(arr, []); -}; - -function flat(arr, res) { - var i = 0, cur; - var len = arr.length; - for (; i < len; i++) { - cur = arr[i]; - Array.isArray(cur) ? flat(cur, res) : res.push(cur); - } - return res; -} diff --git a/node_modules/arr-flatten/package.json b/node_modules/arr-flatten/package.json deleted file mode 100644 index d2d33e9..0000000 --- a/node_modules/arr-flatten/package.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "name": "arr-flatten", - "description": "Recursively flatten an array or arrays.", - "version": "1.1.0", - "homepage": "https://github.com/jonschlinkert/arr-flatten", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "contributors": [ - "Jon Schlinkert (http://twitter.com/jonschlinkert)", - "Luke Edwards (https://lukeed.com)" - ], - "repository": "jonschlinkert/arr-flatten", - "bugs": { - "url": "https://github.com/jonschlinkert/arr-flatten/issues" - }, - "license": "MIT", - "files": [ - "index.js" - ], - "main": "index.js", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "devDependencies": { - "ansi-bold": "^0.1.1", - "array-flatten": "^2.1.1", - "array-slice": "^1.0.0", - "benchmarked": "^1.0.0", - "compute-flatten": "^1.0.0", - "flatit": "^1.1.1", - "flatten": "^1.0.2", - "flatten-array": "^1.0.0", - "glob": "^7.1.1", - "gulp-format-md": "^0.1.12", - "just-flatten-it": "^1.1.23", - "lodash.flattendeep": "^4.4.0", - "m_flattened": "^1.0.1", - "mocha": "^3.2.0", - "utils-flatten": "^1.0.0", - "write": "^0.3.3" - }, - "keywords": [ - "arr", - "array", - "elements", - "flat", - "flatten", - "nested", - "recurse", - "recursive", - "recursively" - ], - "verb": { - "toc": false, - "layout": "default", - "tasks": [ - "readme" - ], - "plugins": [ - "gulp-format-md" - ], - "related": { - "list": [ - "arr-filter", - "arr-union", - "array-each", - "array-unique" - ] - }, - "lint": { - "reflinks": true - } - } -} diff --git a/node_modules/arr-union/LICENSE b/node_modules/arr-union/LICENSE deleted file mode 100644 index 39245ac..0000000 --- a/node_modules/arr-union/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -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/arr-union/README.md b/node_modules/arr-union/README.md deleted file mode 100644 index b3cd4f4..0000000 --- a/node_modules/arr-union/README.md +++ /dev/null @@ -1,99 +0,0 @@ -# arr-union [![NPM version](https://img.shields.io/npm/v/arr-union.svg)](https://www.npmjs.com/package/arr-union) [![Build Status](https://img.shields.io/travis/jonschlinkert/arr-union.svg)](https://travis-ci.org/jonschlinkert/arr-union) - -> Combines a list of arrays, returning a single array with unique values, using strict equality for comparisons. - -## Install - -Install with [npm](https://www.npmjs.com/): - -```sh -$ npm i arr-union --save -``` - -## Benchmarks - -This library is **10-20 times faster** and more performant than [array-union](https://github.com/sindresorhus/array-union). - -See the [benchmarks](./benchmark). - -```sh -#1: five-arrays - array-union x 511,121 ops/sec ±0.80% (96 runs sampled) - arr-union x 5,716,039 ops/sec ±0.86% (93 runs sampled) - -#2: ten-arrays - array-union x 245,196 ops/sec ±0.69% (94 runs sampled) - arr-union x 1,850,786 ops/sec ±0.84% (97 runs sampled) - -#3: two-arrays - array-union x 563,869 ops/sec ±0.97% (94 runs sampled) - arr-union x 9,602,852 ops/sec ±0.87% (92 runs sampled) -``` - -## Usage - -```js -var union = require('arr-union'); - -union(['a'], ['b', 'c'], ['d', 'e', 'f']); -//=> ['a', 'b', 'c', 'd', 'e', 'f'] -``` - -Returns only unique elements: - -```js -union(['a', 'a'], ['b', 'c']); -//=> ['a', 'b', 'c'] -``` - -## Related projects - -* [arr-diff](https://www.npmjs.com/package/arr-diff): Returns an array with only the unique values from the first array, by excluding all… [more](https://www.npmjs.com/package/arr-diff) | [homepage](https://github.com/jonschlinkert/arr-diff) -* [arr-filter](https://www.npmjs.com/package/arr-filter): Faster alternative to javascript's native filter method. | [homepage](https://github.com/jonschlinkert/arr-filter) -* [arr-flatten](https://www.npmjs.com/package/arr-flatten): Recursively flatten an array or arrays. This is the fastest implementation of array flatten. | [homepage](https://github.com/jonschlinkert/arr-flatten) -* [arr-map](https://www.npmjs.com/package/arr-map): Faster, node.js focused alternative to JavaScript's native array map. | [homepage](https://github.com/jonschlinkert/arr-map) -* [arr-pluck](https://www.npmjs.com/package/arr-pluck): Retrieves the value of a specified property from all elements in the collection. | [homepage](https://github.com/jonschlinkert/arr-pluck) -* [arr-reduce](https://www.npmjs.com/package/arr-reduce): Fast array reduce that also loops over sparse elements. | [homepage](https://github.com/jonschlinkert/arr-reduce) -* [array-unique](https://www.npmjs.com/package/array-unique): Return an array free of duplicate values. Fastest ES5 implementation. | [homepage](https://github.com/jonschlinkert/array-unique) - -## Contributing - -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/arr-union/issues/new). - -## Building docs - -Generate readme and API documentation with [verb](https://github.com/verbose/verb): - -```sh -$ npm i verb && npm run docs -``` - -Or, if [verb](https://github.com/verbose/verb) is installed globally: - -```sh -$ verb -``` - -## Running tests - -Install dev dependencies: - -```sh -$ npm i -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/arr-union/blob/master/LICENSE). - -*** - -_This file was generated by [verb](https://github.com/verbose/verb), v0.9.0, on February 23, 2016._ \ No newline at end of file diff --git a/node_modules/arr-union/index.js b/node_modules/arr-union/index.js deleted file mode 100644 index 5ae6c4a..0000000 --- a/node_modules/arr-union/index.js +++ /dev/null @@ -1,29 +0,0 @@ -'use strict'; - -module.exports = function union(init) { - if (!Array.isArray(init)) { - throw new TypeError('arr-union expects the first argument to be an array.'); - } - - var len = arguments.length; - var i = 0; - - while (++i < len) { - var arg = arguments[i]; - if (!arg) continue; - - if (!Array.isArray(arg)) { - arg = [arg]; - } - - for (var j = 0; j < arg.length; j++) { - var ele = arg[j]; - - if (init.indexOf(ele) >= 0) { - continue; - } - init.push(ele); - } - } - return init; -}; diff --git a/node_modules/arr-union/package.json b/node_modules/arr-union/package.json deleted file mode 100644 index 5ee87fd..0000000 --- a/node_modules/arr-union/package.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "name": "arr-union", - "description": "Combines a list of arrays, returning a single array with unique values, using strict equality for comparisons.", - "version": "3.1.0", - "homepage": "https://github.com/jonschlinkert/arr-union", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "repository": "jonschlinkert/arr-union", - "bugs": { - "url": "https://github.com/jonschlinkert/arr-union/issues" - }, - "license": "MIT", - "files": [ - "index.js" - ], - "main": "index.js", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "devDependencies": { - "ansi-bold": "^0.1.1", - "array-union": "^1.0.1", - "array-unique": "^0.2.1", - "benchmarked": "^0.1.4", - "gulp-format-md": "^0.1.7", - "minimist": "^1.1.1", - "mocha": "*", - "should": "*" - }, - "keywords": [ - "add", - "append", - "array", - "arrays", - "combine", - "concat", - "extend", - "union", - "uniq", - "unique", - "util", - "utility", - "utils" - ], - "verb": { - "run": true, - "toc": false, - "layout": "default", - "tasks": [ - "readme" - ], - "plugins": [ - "gulp-format-md" - ], - "related": { - "list": [ - "arr-diff", - "arr-flatten", - "arr-filter", - "arr-map", - "arr-pluck", - "arr-reduce", - "array-unique" - ] - }, - "reflinks": [ - "verb", - "array-union" - ], - "lint": { - "reflinks": true - } - } -} diff --git a/node_modules/array-unique/LICENSE b/node_modules/array-unique/LICENSE deleted file mode 100755 index 842218c..0000000 --- a/node_modules/array-unique/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -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/array-unique/README.md b/node_modules/array-unique/README.md deleted file mode 100755 index 41c8c90..0000000 --- a/node_modules/array-unique/README.md +++ /dev/null @@ -1,77 +0,0 @@ -# array-unique [![NPM version](https://img.shields.io/npm/v/array-unique.svg?style=flat)](https://www.npmjs.com/package/array-unique) [![NPM downloads](https://img.shields.io/npm/dm/array-unique.svg?style=flat)](https://npmjs.org/package/array-unique) [![Build Status](https://img.shields.io/travis/jonschlinkert/array-unique.svg?style=flat)](https://travis-ci.org/jonschlinkert/array-unique) - -Remove duplicate values from an array. Fastest ES5 implementation. - -## Install - -Install with [npm](https://www.npmjs.com/): - -```sh -$ npm install --save array-unique -``` - -## Usage - -```js -var unique = require('array-unique'); - -var arr = ['a', 'b', 'c', 'c']; -console.log(unique(arr)) //=> ['a', 'b', 'c'] -console.log(arr) //=> ['a', 'b', 'c'] - -/* The above modifies the input array. To prevent that at a slight performance cost: */ -var unique = require("array-unique").immutable; - -var arr = ['a', 'b', 'c', 'c']; -console.log(unique(arr)) //=> ['a', 'b', 'c'] -console.log(arr) //=> ['a', 'b', 'c', 'c'] -``` - -## About - -### Related projects - -* [arr-diff](https://www.npmjs.com/package/arr-diff): Returns an array with only the unique values from the first array, by excluding all… [more](https://github.com/jonschlinkert/arr-diff) | [homepage](https://github.com/jonschlinkert/arr-diff "Returns an array with only the unique values from the first array, by excluding all values from additional arrays using strict equality for comparisons.") -* [arr-flatten](https://www.npmjs.com/package/arr-flatten): Recursively flatten an array or arrays. This is the fastest implementation of array flatten. | [homepage](https://github.com/jonschlinkert/arr-flatten "Recursively flatten an array or arrays. This is the fastest implementation of array flatten.") -* [arr-map](https://www.npmjs.com/package/arr-map): Faster, node.js focused alternative to JavaScript's native array map. | [homepage](https://github.com/jonschlinkert/arr-map "Faster, node.js focused alternative to JavaScript's native array map.") -* [arr-pluck](https://www.npmjs.com/package/arr-pluck): Retrieves the value of a specified property from all elements in the collection. | [homepage](https://github.com/jonschlinkert/arr-pluck "Retrieves the value of a specified property from all elements in the collection.") -* [arr-reduce](https://www.npmjs.com/package/arr-reduce): Fast array reduce that also loops over sparse elements. | [homepage](https://github.com/jonschlinkert/arr-reduce "Fast array reduce that also loops over sparse elements.") -* [arr-union](https://www.npmjs.com/package/arr-union): Combines a list of arrays, returning a single array with unique values, using strict equality… [more](https://github.com/jonschlinkert/arr-union) | [homepage](https://github.com/jonschlinkert/arr-union "Combines a list of arrays, returning a single array with unique values, using strict equality for comparisons.") - -### 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/array-unique/blob/master/LICENSE). - -*** - -_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.1.28, on July 31, 2016._ \ No newline at end of file diff --git a/node_modules/array-unique/index.js b/node_modules/array-unique/index.js deleted file mode 100644 index 7e481e0..0000000 --- a/node_modules/array-unique/index.js +++ /dev/null @@ -1,43 +0,0 @@ -/*! - * array-unique - * - * Copyright (c) 2014-2015, Jon Schlinkert. - * Licensed under the MIT License. - */ - -'use strict'; - -module.exports = function unique(arr) { - if (!Array.isArray(arr)) { - throw new TypeError('array-unique expects an array.'); - } - - var len = arr.length; - var i = -1; - - while (i++ < len) { - var j = i + 1; - - for (; j < arr.length; ++j) { - if (arr[i] === arr[j]) { - arr.splice(j--, 1); - } - } - } - return arr; -}; - -module.exports.immutable = function uniqueImmutable(arr) { - if (!Array.isArray(arr)) { - throw new TypeError('array-unique expects an array.'); - } - - var arrLen = arr.length; - var newArr = new Array(arrLen); - - for (var i = 0; i < arrLen; i++) { - newArr[i] = arr[i]; - } - - return module.exports(newArr); -}; diff --git a/node_modules/array-unique/package.json b/node_modules/array-unique/package.json deleted file mode 100644 index d87640a..0000000 --- a/node_modules/array-unique/package.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "name": "array-unique", - "description": "Remove duplicate values from an array. Fastest ES5 implementation.", - "version": "0.3.2", - "homepage": "https://github.com/jonschlinkert/array-unique", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "repository": "jonschlinkert/array-unique", - "bugs": { - "url": "https://github.com/jonschlinkert/array-unique/issues" - }, - "license": "MIT", - "files": [ - "index.js", - "LICENSE", - "README.md" - ], - "main": "index.js", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "devDependencies": { - "array-uniq": "^1.0.2", - "benchmarked": "^0.1.3", - "gulp-format-md": "^0.1.9", - "mocha": "^2.5.3", - "should": "^10.0.0" - }, - "keywords": [ - "array", - "unique" - ], - "verb": { - "toc": false, - "layout": "default", - "tasks": [ - "readme" - ], - "plugins": [ - "gulp-format-md" - ], - "related": { - "list": [ - "arr-diff", - "arr-union", - "arr-flatten", - "arr-reduce", - "arr-map", - "arr-pluck" - ] - }, - "reflinks": [ - "verb", - "verb-generate-readme" - ], - "lint": { - "reflinks": true - } - } -} diff --git a/node_modules/assign-symbols/LICENSE b/node_modules/assign-symbols/LICENSE deleted file mode 100644 index 65f90ac..0000000 --- a/node_modules/assign-symbols/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015, 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/assign-symbols/README.md b/node_modules/assign-symbols/README.md deleted file mode 100644 index 422729d..0000000 --- a/node_modules/assign-symbols/README.md +++ /dev/null @@ -1,73 +0,0 @@ -# assign-symbols [![NPM version](https://badge.fury.io/js/assign-symbols.svg)](http://badge.fury.io/js/assign-symbols) - -> Assign the enumerable es6 Symbol properties from an object (or objects) to the first object passed on the arguments. Can be used as a supplement to other extend, assign or merge methods as a polyfill for the Symbols part of the es6 Object.assign method. - -From the [Mozilla Developer docs for Symbol](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol): - -> A symbol is a unique and immutable data type and may be used as an identifier for object properties. The symbol object is an implicit object wrapper for the symbol primitive data type. - -## Install - -Install with [npm](https://www.npmjs.com/) - -```sh -$ npm i assign-symbols --save -``` - -## Usage - -```js -var assignSymbols = require('assign-symbols'); -var obj = {}; - -var one = {}; -var symbolOne = Symbol('aaa'); -one[symbolOne] = 'bbb'; - -var two = {}; -var symbolTwo = Symbol('ccc'); -two[symbolTwo] = 'ddd'; - -assignSymbols(obj, one, two); - -console.log(obj[symbolOne]); -//=> 'bbb' -console.log(obj[symbolTwo]); -//=> 'ddd' -``` - -## Similar projects - -* [assign-deep](https://www.npmjs.com/package/assign-deep): Deeply assign the enumerable properties of source objects to a destination object. | [homepage](https://github.com/jonschlinkert/assign-deep) -* [clone-deep](https://www.npmjs.com/package/clone-deep): Recursively (deep) clone JavaScript native types, like Object, Array, RegExp, Date as well as primitives. | [homepage](https://github.com/jonschlinkert/clone-deep) -* [extend-shallow](https://www.npmjs.com/package/extend-shallow): Extend an object with the properties of additional objects. node.js/javascript util. | [homepage](https://github.com/jonschlinkert/extend-shallow) -* [merge-deep](https://www.npmjs.com/package/merge-deep): Recursively merge values in a javascript object. | [homepage](https://github.com/jonschlinkert/merge-deep) -* [mixin-deep](https://www.npmjs.com/package/mixin-deep): Deeply mix the properties of objects into the first object. Like merge-deep, but doesn't clone. | [homepage](https://github.com/jonschlinkert/mixin-deep) - -## Running tests - -Install dev dependencies: - -```sh -$ npm i -d && npm test -``` - -## Contributing - -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/assign-symbols/issues/new). - -## Author - -**Jon Schlinkert** - -+ [github/jonschlinkert](https://github.com/jonschlinkert) -+ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) - -## License - -Copyright © 2015 Jon Schlinkert -Released under the MIT license. - -*** - -_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on November 06, 2015._ \ No newline at end of file diff --git a/node_modules/assign-symbols/index.js b/node_modules/assign-symbols/index.js deleted file mode 100644 index c08a232..0000000 --- a/node_modules/assign-symbols/index.js +++ /dev/null @@ -1,40 +0,0 @@ -/*! - * assign-symbols - * - * Copyright (c) 2015, Jon Schlinkert. - * Licensed under the MIT License. - */ - -'use strict'; - -module.exports = function(receiver, objects) { - if (receiver === null || typeof receiver === 'undefined') { - throw new TypeError('expected first argument to be an object.'); - } - - if (typeof objects === 'undefined' || typeof Symbol === 'undefined') { - return receiver; - } - - if (typeof Object.getOwnPropertySymbols !== 'function') { - return receiver; - } - - var isEnumerable = Object.prototype.propertyIsEnumerable; - var target = Object(receiver); - var len = arguments.length, i = 0; - - while (++i < len) { - var provider = Object(arguments[i]); - var names = Object.getOwnPropertySymbols(provider); - - for (var j = 0; j < names.length; j++) { - var key = names[j]; - - if (isEnumerable.call(provider, key)) { - target[key] = provider[key]; - } - } - } - return target; -}; diff --git a/node_modules/assign-symbols/package.json b/node_modules/assign-symbols/package.json deleted file mode 100644 index 7f77b58..0000000 --- a/node_modules/assign-symbols/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "assign-symbols", - "description": "Assign the enumerable es6 Symbol properties from an object (or objects) to the first object passed on the arguments. Can be used as a supplement to other extend, assign or merge methods as a polyfill for the Symbols part of the es6 Object.assign method.", - "version": "1.0.0", - "homepage": "https://github.com/jonschlinkert/assign-symbols", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "repository": "jonschlinkert/assign-symbols", - "bugs": { - "url": "https://github.com/jonschlinkert/assign-symbols/issues" - }, - "license": "MIT", - "files": [ - "index.js" - ], - "main": "index.js", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "devDependencies": { - "mocha": "^3.0.0" - }, - "keywords": [ - "assign", - "symbols" - ], - "verb": { - "related": { - "list": [ - "assign-deep", - "mixin-deep", - "merge-deep", - "extend-shallow", - "clone-deep" - ] - } - } -} diff --git a/node_modules/async-each/LICENSE b/node_modules/async-each/LICENSE deleted file mode 100644 index b4d4dec..0000000 --- a/node_modules/async-each/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2016 Paul Miller (https://paulmillr.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/async-each/README.md b/node_modules/async-each/README.md deleted file mode 100644 index 6b03be4..0000000 --- a/node_modules/async-each/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# async-each - -No-bullshit, ultra-simple, 40-lines-of-code async parallel forEach function for JavaScript. - -We don't need junky 30K async libs. Really. - -For browsers and node.js. - -## Usage - -`npm install async-each` if you're using NPM. - -For browsers, just include async-each before your scripts and use global variable `asyncEach` - -* `each(array, iterator, callback)` — `Array`, `Function`, `(optional) Function` -* `iterator(item, next)` receives current item and a callback that will mark the item as done. `next` callback receives optional `error, transformedItem` arguments. -* `callback(error, transformedArray)` optionally receives first error and transformed result `Array`. - -```javascript -var each = require('async-each'); -each(['a.js', 'b.js', 'c.js'], fs.readFile, function(error, contents) { - if (error) console.error(error); - console.log('Contents for a, b and c:', contents); -}); - -asyncEach(list, fn, callback); // use global var in browser -``` - -## License - -The MIT License (MIT) - -Copyright (c) 2016 Paul Miller [(paulmillr.com)](https://paulmillr.com) - -See [LICENSE](https://github.com/paulmillr/async-each/blob/master/LICENSE) file. diff --git a/node_modules/async-each/index.js b/node_modules/async-each/index.js deleted file mode 100644 index 8806c5f..0000000 --- a/node_modules/async-each/index.js +++ /dev/null @@ -1,39 +0,0 @@ -/*! async-each - MIT License (c) 2016 Paul Miller (paulmillr.com) */ -(function (globals) { - 'use strict'; - var each = function (items, next, callback) { - if (!Array.isArray(items)) throw new TypeError('each() expects array as first argument'); - if (typeof next !== 'function') - throw new TypeError('each() expects function as second argument'); - if (typeof callback !== 'function') callback = Function.prototype; // no-op - - var total = items.length; - if (total === 0) return callback(undefined, items); - var transformed = new Array(total); - var transformedCount = 0; - var returned = false; - - items.forEach(function (item, index) { - next(item, function (error, transformedItem) { - if (returned) return; - if (error) { - returned = true; - return callback(error); - } - transformed[index] = transformedItem; - transformedCount += 1; // can't use index: last item could take more time - if (transformedCount === total) return callback(undefined, transformed); - }); - }); - }; - - if (typeof define !== 'undefined' && define.amd) { - define([], function () { - return each; - }); // RequireJS - } else if (typeof module !== 'undefined' && module.exports) { - module.exports = each; // CommonJS - } else { - globals.asyncEach = each; // diff --git a/node_modules/live-server/live-server.js b/node_modules/live-server/live-server.js deleted file mode 100755 index e5dc756..0000000 --- a/node_modules/live-server/live-server.js +++ /dev/null @@ -1,174 +0,0 @@ -#!/usr/bin/env node -var path = require('path'); -var fs = require('fs'); -var assign = require('object-assign'); -var liveServer = require("./index"); - -var opts = { - host: process.env.IP, - port: process.env.PORT, - open: true, - mount: [], - proxy: [], - middleware: [], - logLevel: 2, -}; - -var homeDir = process.env[(process.platform === 'win32') ? 'USERPROFILE' : 'HOME']; -var configPath = path.join(homeDir, '.live-server.json'); -if (fs.existsSync(configPath)) { - var userConfig = fs.readFileSync(configPath, 'utf8'); - assign(opts, JSON.parse(userConfig)); - if (opts.ignorePattern) opts.ignorePattern = new RegExp(opts.ignorePattern); -} - -for (var i = process.argv.length - 1; i >= 2; --i) { - var arg = process.argv[i]; - if (arg.indexOf("--port=") > -1) { - var portString = arg.substring(7); - var portNumber = parseInt(portString, 10); - if (portNumber === +portString) { - opts.port = portNumber; - process.argv.splice(i, 1); - } - } - else if (arg.indexOf("--host=") > -1) { - opts.host = arg.substring(7); - process.argv.splice(i, 1); - } - else if (arg.indexOf("--open=") > -1) { - var open = arg.substring(7); - if (open.indexOf('/') !== 0) { - open = '/' + open; - } - switch (typeof opts.open) { - case "boolean": - opts.open = open; - break; - case "string": - opts.open = [opts.open, open]; - break; - case "object": - opts.open.push(open); - break; - } - process.argv.splice(i, 1); - } - else if (arg.indexOf("--watch=") > -1) { - // Will be modified later when cwd is known - opts.watch = arg.substring(8).split(","); - process.argv.splice(i, 1); - } - else if (arg.indexOf("--ignore=") > -1) { - // Will be modified later when cwd is known - opts.ignore = arg.substring(9).split(","); - process.argv.splice(i, 1); - } - else if (arg.indexOf("--ignorePattern=") > -1) { - opts.ignorePattern = new RegExp(arg.substring(16)); - process.argv.splice(i, 1); - } - else if (arg === "--no-css-inject") { - opts.noCssInject = true; - process.argv.splice(i, 1); - } - else if (arg === "--no-browser") { - opts.open = false; - process.argv.splice(i, 1); - } - else if (arg.indexOf("--browser=") > -1) { - opts.browser = arg.substring(10).split(","); - process.argv.splice(i, 1); - } - else if (arg.indexOf("--entry-file=") > -1) { - var file = arg.substring(13); - if (file.length) { - opts.file = file; - process.argv.splice(i, 1); - } - } - else if (arg === "--spa") { - opts.middleware.push("spa"); - process.argv.splice(i, 1); - } - else if (arg === "--quiet" || arg === "-q") { - opts.logLevel = 0; - process.argv.splice(i, 1); - } - else if (arg === "--verbose" || arg === "-V") { - opts.logLevel = 3; - process.argv.splice(i, 1); - } - else if (arg.indexOf("--mount=") > -1) { - // e.g. "--mount=/components:./node_modules" will be ['/components', '/node_modules'] - // split only on the first ":", as the path may contain ":" as well (e.g. C:\file.txt) - var match = arg.substring(8).match(/([^:]+):(.+)$/); - match[2] = path.resolve(process.cwd(), match[2]); - opts.mount.push([ match[1], match[2] ]); - process.argv.splice(i, 1); - } - else if (arg.indexOf("--wait=") > -1) { - var waitString = arg.substring(7); - var waitNumber = parseInt(waitString, 10); - if (waitNumber === +waitString) { - opts.wait = waitNumber; - process.argv.splice(i, 1); - } - } - else if (arg === "--version" || arg === "-v") { - var packageJson = require('./package.json'); - console.log(packageJson.name, packageJson.version); - process.exit(); - } - else if (arg.indexOf("--htpasswd=") > -1) { - opts.htpasswd = arg.substring(11); - process.argv.splice(i, 1); - } - else if (arg === "--cors") { - opts.cors = true; - process.argv.splice(i, 1); - } - else if (arg.indexOf("--https=") > -1) { - opts.https = arg.substring(8); - process.argv.splice(i, 1); - } - else if (arg.indexOf("--https-module=") > -1) { - opts.httpsModule = arg.substring(15); - process.argv.splice(i, 1); - } - else if (arg.indexOf("--proxy=") > -1) { - // split only on the first ":", as the URL will contain ":" as well - var match = arg.substring(8).match(/([^:]+):(.+)$/); - opts.proxy.push([ match[1], match[2] ]); - process.argv.splice(i, 1); - } - else if (arg.indexOf("--middleware=") > -1) { - opts.middleware.push(arg.substring(13)); - process.argv.splice(i, 1); - } - else if (arg === "--help" || arg === "-h") { - console.log('Usage: live-server [-v|--version] [-h|--help] [-q|--quiet] [--port=PORT] [--host=HOST] [--open=PATH] [--no-browser] [--browser=BROWSER] [--ignore=PATH] [--ignorePattern=RGXP] [--no-css-inject] [--entry-file=PATH] [--spa] [--mount=ROUTE:PATH] [--wait=MILLISECONDS] [--htpasswd=PATH] [--cors] [--https=PATH] [--https-module=MODULE_NAME] [--proxy=PATH] [PATH]'); - process.exit(); - } - else if (arg === "--test") { - // Hidden param for tests to exit automatically - setTimeout(liveServer.shutdown, 500); - process.argv.splice(i, 1); - } -} - -// Patch paths -var dir = opts.root = process.argv[2] || ""; - -if (opts.watch) { - opts.watch = opts.watch.map(function(relativePath) { - return path.join(dir, relativePath); - }); -} -if (opts.ignore) { - opts.ignore = opts.ignore.map(function(relativePath) { - return path.join(dir, relativePath); - }); -} - -liveServer.start(opts); diff --git a/node_modules/live-server/middleware/example.js b/node_modules/live-server/middleware/example.js deleted file mode 100644 index 6721c27..0000000 --- a/node_modules/live-server/middleware/example.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = function(req, res, next) { - res.statusCode = 202; - next(); -} - diff --git a/node_modules/live-server/middleware/spa-ignore-assets.js b/node_modules/live-server/middleware/spa-ignore-assets.js deleted file mode 100644 index 13f076b..0000000 --- a/node_modules/live-server/middleware/spa-ignore-assets.js +++ /dev/null @@ -1,14 +0,0 @@ -// Single Page Apps - redirect to /#/ except when a file extension is given -var path = require('path'); -module.exports = function(req, res, next) { - if (req.method !== "GET" && req.method !== "HEAD") - next(); - if (req.url !== '/' && path.extname(req.url) === '') { - var route = req.url; - req.url = '/'; - res.statusCode = 302; - res.setHeader('Location', req.url + '#' + route); - res.end(); - } - else next(); -} diff --git a/node_modules/live-server/middleware/spa.js b/node_modules/live-server/middleware/spa.js deleted file mode 100644 index 0292900..0000000 --- a/node_modules/live-server/middleware/spa.js +++ /dev/null @@ -1,13 +0,0 @@ -// Single Page Apps - redirect to /#/ -module.exports = function(req, res, next) { - if (req.method !== "GET" && req.method !== "HEAD") - next(); - if (req.url !== '/') { - var route = req.url; - req.url = '/'; - res.statusCode = 302; - res.setHeader('Location', req.url + '#' + route); - res.end(); - } - else next(); -} diff --git a/node_modules/live-server/package.json b/node_modules/live-server/package.json deleted file mode 100644 index 2e8664b..0000000 --- a/node_modules/live-server/package.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "name": "live-server", - "version": "1.2.2", - "description": "simple development http server with live reload capability", - "keywords": [ - "front-end", - "development", - "tool", - "server", - "http", - "cli" - ], - "author": "Tapio Vierros", - "dependencies": { - "chokidar": "^2.0.4", - "colors": "1.4.0", - "connect": "^3.6.6", - "cors": "latest", - "event-stream": "3.3.4", - "faye-websocket": "0.11.x", - "http-auth": "3.1.x", - "morgan": "^1.9.1", - "object-assign": "latest", - "opn": "latest", - "proxy-middleware": "latest", - "send": "latest", - "serve-index": "^1.9.1" - }, - "devDependencies": { - "eslint": "^5.9.0", - "jshint": "^2.9.6", - "mocha": "^5.2.0", - "supertest": "^3.3.0" - }, - "scripts": { - "lint": "eslint live-server.js index.js", - "hint": "jshint live-server.js index.js", - "test": "mocha test --exit && npm run lint" - }, - "bin": { - "live-server": "./live-server.js" - }, - "repository": { - "type": "git", - "url": "https://github.com/tapio/live-server.git" - }, - "engines": { - "node": ">=0.10.0" - }, - "preferGlobal": true, - "license": "MIT", - "eslintConfig": { - "env": { - "node": true - }, - "rules": { - "quotes": 0, - "curly": 0, - "strict": 0, - "no-process-exit": 0, - "eqeqeq": 1, - "no-unused-vars": 1, - "no-shadow": 1 - } - } -} diff --git a/node_modules/live-server/test/acceptance.js b/node_modules/live-server/test/acceptance.js deleted file mode 100644 index e364445..0000000 --- a/node_modules/live-server/test/acceptance.js +++ /dev/null @@ -1,67 +0,0 @@ -var request = require('supertest'); -var path = require('path'); -var liveServer = require('..').start({ - root: path.join(__dirname, "data"), - port: 0, - open: false -}); - -describe('basic functional tests', function(){ - it('should respond with index.html', function(done){ - request(liveServer) - .get('/') - .expect('Content-Type', 'text/html; charset=UTF-8') - .expect(/hello world/i) - .expect(200, done); - }); - it('should have injected script', function(done){ - request(liveServer) - .get('/') - .expect('Content-Type', 'text/html; charset=UTF-8') - .expect(/ - - - diff --git a/node_modules/live-server/test/htpasswd.js b/node_modules/live-server/test/htpasswd.js deleted file mode 100644 index 388b100..0000000 --- a/node_modules/live-server/test/htpasswd.js +++ /dev/null @@ -1,28 +0,0 @@ -var request = require('supertest'); -var path = require('path'); -var liveServer = require('..').start({ - root: path.join(__dirname, "data"), - port: 0, - open: false, - htpasswd: path.join(__dirname, "data", "htpasswd-test") -}); - -describe('htpasswd tests', function() { - it('should respond with 401 since no password is given', function(done) { - request(liveServer) - .get('/') - .expect(401, done); - }); - it('should respond with 401 since wrong password is given', function(done) { - request(liveServer) - .get('/') - .auth("test", "not-real-password") - .expect(401, done); - }); - it('should respond with 200 since correct password is given', function(done) { - request(liveServer) - .get('/') - .auth("test", "test") - .expect(200, done); - }); -}); diff --git a/node_modules/live-server/test/https.js b/node_modules/live-server/test/https.js deleted file mode 100644 index f0c5e9d..0000000 --- a/node_modules/live-server/test/https.js +++ /dev/null @@ -1,48 +0,0 @@ -var request = require('supertest'); -var path = require('path'); -// accept self-signed certificates -process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"; - -function tests(liveServer) { - it('should reply with a correct index file', function(done) { - request(liveServer) - .get('/index.html') - .expect('Content-Type', 'text/html; charset=UTF-8') - .expect(/Hello world/i) - .expect(200, done); - }); - it('should support head request', function(done) { - request(liveServer) - .head('/index.html') - .expect('Content-Type', 'text/html; charset=UTF-8') - .expect(200, done); - }); -} - -describe('https tests with external module', function() { - var opts = { - root: path.join(__dirname, 'data'), - port: 0, - open: false, - https: path.join(__dirname, 'conf/https.conf.js') - }; - var liveServer = require("..").start(opts); - tests(liveServer); - after(function () { - liveServer.close() - }); -}); - -describe('https tests with object', function() { - var opts = { - root: path.join(__dirname, 'data'), - port: 0, - open: false, - https: require(path.join(__dirname, 'conf/https.conf.js')) - }; - var liveServer = require("..").start(opts); - tests(liveServer); - after(function () { - liveServer.close() - }); -}); diff --git a/node_modules/live-server/test/middleware.js b/node_modules/live-server/test/middleware.js deleted file mode 100644 index 2932e35..0000000 --- a/node_modules/live-server/test/middleware.js +++ /dev/null @@ -1,43 +0,0 @@ -var request = require('supertest'); -var path = require('path'); -var liveServer1 = require('..').start({ - root: path.join(__dirname, 'data'), - port: 0, - open: false, - middleware: [ - function setStatus(req, res, next) { - res.statusCode = 201; - next(); - } - ] -}); -var liveServer2 = require('..').start({ - root: path.join(__dirname, 'data'), - port: 0, - open: false, - middleware: [ "example" ] -}); -var liveServer3 = require('..').start({ - root: path.join(__dirname, 'data'), - port: 0, - open: false, - middleware: [ path.join(__dirname, 'data', 'middleware.js') ] -}); - -describe('middleware tests', function() { - it("should respond with middleware function's status code", function(done) { - request(liveServer1) - .get('/') - .expect(201, done); - }); - it("should respond with built-in middleware's status code", function(done) { - request(liveServer2) - .get('/') - .expect(202, done); - }); - it("should respond with external middleware's status code", function(done) { - request(liveServer3) - .get('/') - .expect(203, done); - }); -}); diff --git a/node_modules/live-server/test/mount.js b/node_modules/live-server/test/mount.js deleted file mode 100644 index 3a8add3..0000000 --- a/node_modules/live-server/test/mount.js +++ /dev/null @@ -1,30 +0,0 @@ -var request = require('supertest'); -var path = require('path'); -var liveServer = require('..').start({ - root: path.join(__dirname, "data"), - port: 0, - open: false, - mount: [ - [ "/mounted", path.join(__dirname, "data", "sub") ], - [ "/style", path.join(__dirname, "data", "style.css") ] - ] -}); - -describe('mount tests', function() { - it('should respond with sub.html', function(done) { - request(liveServer) - .get('/mounted/sub.html') - .expect('Content-Type', 'text/html; charset=UTF-8') - .expect(/Subdirectory/i) - .expect(200, done); - }); - it('should respond with style.css', function(done) { - request(liveServer) - .get('/style') - .expect('Content-Type', 'text/css; charset=UTF-8') - .expect(/color/i) - .expect(200, done); - }); -}); - - diff --git a/node_modules/live-server/test/proxy.js b/node_modules/live-server/test/proxy.js deleted file mode 100644 index d755cd9..0000000 --- a/node_modules/live-server/test/proxy.js +++ /dev/null @@ -1,28 +0,0 @@ -var request = require('supertest'); -var path = require('path'); -var port = 40200; -var server1 = require('..').start({ - root: path.join(__dirname, "data"), - port: port, - open: false -}); -var server2 = require('..').start({ - root: path.join(__dirname, "data"), - port: 0, - open: false, - proxy: [ - ["/server1", "http://localhost:" + port] - ] -}); - -describe('proxy tests', function() { - it('should respond with proxied content', function(done) { - request(server2) - .get('/server1/index.html') - .expect('Content-Type', 'text/html; charset=UTF-8') - .expect(/Hello world/i) - .expect(200, done); - }); -}); - - diff --git a/node_modules/live-server/test/spa.js b/node_modules/live-server/test/spa.js deleted file mode 100644 index 9afa908..0000000 --- a/node_modules/live-server/test/spa.js +++ /dev/null @@ -1,40 +0,0 @@ -var request = require('supertest'); -var path = require('path'); -var liveServerSpa = require('..').start({ - root: path.join(__dirname, "data"), - port: 0, - open: false, - middleware: [ "spa" ] -}); -var liveServerSpaIgnoreAssets = require('..').start({ - root: path.join(__dirname, "data"), - port: 0, - open: false, - middleware: [ "spa-ignore-assets" ] -}); - -describe('spa tests', function(){ - it('spa should redirect', function(done){ - request(liveServerSpa) - .get('/api') - .expect('Location', /\/#\//) - .expect(302, done); - }); - it('spa should redirect everything', function(done){ - request(liveServerSpa) - .get('/style.css') - .expect('Location', /\/#\//) - .expect(302, done); - }); - it('spa-ignore-assets should redirect something', function(done){ - request(liveServerSpaIgnoreAssets) - .get('/api') - .expect('Location', /\/#\//) - .expect(302, done); - }); - it('spa-ignore-assets should not redirect .css', function(done){ - request(liveServerSpaIgnoreAssets) - .get('/style.css') - .expect(200, done); - }); -}); diff --git a/node_modules/map-cache/LICENSE b/node_modules/map-cache/LICENSE deleted file mode 100644 index 1e49edf..0000000 --- a/node_modules/map-cache/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015-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/map-cache/README.md b/node_modules/map-cache/README.md deleted file mode 100644 index 6260b29..0000000 --- a/node_modules/map-cache/README.md +++ /dev/null @@ -1,145 +0,0 @@ -# map-cache [![NPM version](https://img.shields.io/npm/v/map-cache.svg?style=flat)](https://www.npmjs.com/package/map-cache) [![NPM downloads](https://img.shields.io/npm/dm/map-cache.svg?style=flat)](https://npmjs.org/package/map-cache) [![Build Status](https://img.shields.io/travis/jonschlinkert/map-cache.svg?style=flat)](https://travis-ci.org/jonschlinkert/map-cache) - -Basic cache object for storing key-value pairs. - -## Install - -Install with [npm](https://www.npmjs.com/): - -```sh -$ npm install map-cache --save -``` - -Based on MapCache in Lo-dash v3.0. [MIT License](https://github.com/lodash/lodash/blob/master/LICENSE.txt) - -## Usage - -```js -var MapCache = require('map-cache'); -var mapCache = new MapCache(); -``` - -## API - -### [MapCache](index.js#L28) - -Creates a cache object to store key/value pairs. - -**Example** - -```js -var cache = new MapCache(); -``` - -### [.set](index.js#L45) - -Adds `value` to `key` on the cache. - -**Params** - -* `key` **{String}**: The key of the value to cache. -* `value` **{any}**: The value to cache. -* `returns` **{Object}**: Returns the `Cache` object for chaining. - -**Example** - -```js -cache.set('foo', 'bar'); -``` - -### [.get](index.js#L65) - -Gets the cached value for `key`. - -**Params** - -* `key` **{String}**: The key of the value to get. -* `returns` **{any}**: Returns the cached value. - -**Example** - -```js -cache.get('foo'); -//=> 'bar' -``` - -### [.has](index.js#L82) - -Checks if a cached value for `key` exists. - -**Params** - -* `key` **{String}**: The key of the entry to check. -* `returns` **{Boolean}**: Returns `true` if an entry for `key` exists, else `false`. - -**Example** - -```js -cache.has('foo'); -//=> true -``` - -### [.del](index.js#L98) - -Removes `key` and its value from the cache. - -**Params** - -* `key` **{String}**: The key of the value to remove. -* `returns` **{Boolean}**: Returns `true` if the entry was removed successfully, else `false`. - -**Example** - -```js -cache.del('foo'); -``` - -## Related projects - -You might also be interested in these projects: - -* [cache-base](https://www.npmjs.com/package/cache-base): Basic object cache with `get`, `set`, `del`, and `has` methods for node.js/javascript projects. | [homepage](https://github.com/jonschlinkert/cache-base) -* [config-cache](https://www.npmjs.com/package/config-cache): General purpose JavaScript object storage methods. | [homepage](https://github.com/jonschlinkert/config-cache) -* [option-cache](https://www.npmjs.com/package/option-cache): Simple API for managing options in JavaScript applications. | [homepage](https://github.com/jonschlinkert/option-cache) - -## Contributing - -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/map-cache/issues/new). - -## Building docs - -Generate readme and API documentation with [verb](https://github.com/verbose/verb): - -```sh -$ npm install verb && npm run docs -``` - -Or, if [verb](https://github.com/verbose/verb) is installed globally: - -```sh -$ 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/map-cache/blob/master/LICENSE). - -*** - -_This file was generated by [verb](https://github.com/verbose/verb), v0.9.0, on May 10, 2016._ \ No newline at end of file diff --git a/node_modules/map-cache/index.js b/node_modules/map-cache/index.js deleted file mode 100644 index f86842f..0000000 --- a/node_modules/map-cache/index.js +++ /dev/null @@ -1,100 +0,0 @@ -/*! - * map-cache - * - * Copyright (c) 2015, Jon Schlinkert. - * Licensed under the MIT License. - */ - -'use strict'; - -var hasOwn = Object.prototype.hasOwnProperty; - -/** - * Expose `MapCache` - */ - -module.exports = MapCache; - -/** - * Creates a cache object to store key/value pairs. - * - * ```js - * var cache = new MapCache(); - * ``` - * - * @api public - */ - -function MapCache(data) { - this.__data__ = data || {}; -} - -/** - * Adds `value` to `key` on the cache. - * - * ```js - * cache.set('foo', 'bar'); - * ``` - * - * @param {String} `key` The key of the value to cache. - * @param {*} `value` The value to cache. - * @returns {Object} Returns the `Cache` object for chaining. - * @api public - */ - -MapCache.prototype.set = function mapSet(key, value) { - if (key !== '__proto__') { - this.__data__[key] = value; - } - return this; -}; - -/** - * Gets the cached value for `key`. - * - * ```js - * cache.get('foo'); - * //=> 'bar' - * ``` - * - * @param {String} `key` The key of the value to get. - * @returns {*} Returns the cached value. - * @api public - */ - -MapCache.prototype.get = function mapGet(key) { - return key === '__proto__' ? undefined : this.__data__[key]; -}; - -/** - * Checks if a cached value for `key` exists. - * - * ```js - * cache.has('foo'); - * //=> true - * ``` - * - * @param {String} `key` The key of the entry to check. - * @returns {Boolean} Returns `true` if an entry for `key` exists, else `false`. - * @api public - */ - -MapCache.prototype.has = function mapHas(key) { - return key !== '__proto__' && hasOwn.call(this.__data__, key); -}; - -/** - * Removes `key` and its value from the cache. - * - * ```js - * cache.del('foo'); - * ``` - * @title .del - * @param {String} `key` The key of the value to remove. - * @returns {Boolean} Returns `true` if the entry was removed successfully, else `false`. - * @api public - */ - -MapCache.prototype.del = function mapDelete(key) { - return this.has(key) && delete this.__data__[key]; -}; diff --git a/node_modules/map-cache/package.json b/node_modules/map-cache/package.json deleted file mode 100644 index 8bf0af2..0000000 --- a/node_modules/map-cache/package.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "name": "map-cache", - "description": "Basic cache object for storing key-value pairs.", - "version": "0.2.2", - "homepage": "https://github.com/jonschlinkert/map-cache", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "repository": "jonschlinkert/map-cache", - "bugs": { - "url": "https://github.com/jonschlinkert/map-cache/issues" - }, - "license": "MIT", - "files": [ - "index.js" - ], - "main": "index.js", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "devDependencies": { - "gulp-format-md": "^0.1.9", - "should": "^8.3.1" - }, - "keywords": [ - "cache", - "get", - "has", - "object", - "set", - "storage", - "store" - ], - "verb": { - "run": true, - "toc": false, - "layout": "default", - "tasks": [ - "readme" - ], - "plugins": [ - "gulp-format-md" - ], - "related": { - "list": [ - "config-cache", - "option-cache", - "cache-base" - ] - }, - "reflinks": [ - "verb" - ], - "lint": { - "reflinks": true - } - } -} diff --git a/node_modules/map-stream/.npmignore b/node_modules/map-stream/.npmignore deleted file mode 100644 index 13abef4..0000000 --- a/node_modules/map-stream/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules -node_modules/* -npm_debug.log diff --git a/node_modules/map-stream/.travis.yml b/node_modules/map-stream/.travis.yml deleted file mode 100644 index 895dbd3..0000000 --- a/node_modules/map-stream/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - 0.6 - - 0.8 diff --git a/node_modules/map-stream/LICENCE b/node_modules/map-stream/LICENCE deleted file mode 100644 index 171dd97..0000000 --- a/node_modules/map-stream/LICENCE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2011 Dominic Tarr - -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/map-stream/examples/pretty.js b/node_modules/map-stream/examples/pretty.js deleted file mode 100644 index ab07398..0000000 --- a/node_modules/map-stream/examples/pretty.js +++ /dev/null @@ -1,26 +0,0 @@ - -var inspect = require('util').inspect - -if(!module.parent) { - var map = require('..') //load map-stream - var es = require('event-stream') //load event-stream - es.pipe( //pipe joins streams together - process.openStdin(), //open stdin - es.split(), //split stream to break on newlines - map(function (data, callback) { //turn this async function into a stream - var j - try { - j = JSON.parse(data) //try to parse input into json - } catch (err) { - return callback(null, data) //if it fails just pass it anyway - } - callback(null, inspect(j)) //render it nicely - }), - process.stdout // pipe it to stdout ! - ) - } - -// run this -// -// curl -sS registry.npmjs.org/event-stream | node pretty.js -// diff --git a/node_modules/map-stream/index.js b/node_modules/map-stream/index.js deleted file mode 100644 index 09ae829..0000000 --- a/node_modules/map-stream/index.js +++ /dev/null @@ -1,145 +0,0 @@ -//filter will reemit the data if cb(err,pass) pass is truthy - -// reduce is more tricky -// maybe we want to group the reductions or emit progress updates occasionally -// the most basic reduce just emits one 'data' event after it has recieved 'end' - - -var Stream = require('stream').Stream - - -//create an event stream and apply function to each .write -//emitting each response as data -//unless it's an empty callback - -module.exports = function (mapper, opts) { - - var stream = new Stream() - , self = this - , inputs = 0 - , outputs = 0 - , ended = false - , paused = false - , destroyed = false - , lastWritten = 0 - , inNext = false - - this.opts = opts || {}; - var errorEventName = this.opts.failures ? 'failure' : 'error'; - - // Items that are not ready to be written yet (because they would come out of - // order) get stuck in a queue for later. - var writeQueue = {} - - stream.writable = true - stream.readable = true - - function queueData (data, number) { - var nextToWrite = lastWritten + 1 - - if (number === nextToWrite) { - // If it's next, and its not undefined write it - if (data !== undefined) { - stream.emit.apply(stream, ['data', data]) - } - lastWritten ++ - nextToWrite ++ - } else { - // Otherwise queue it for later. - writeQueue[number] = data - } - - // If the next value is in the queue, write it - if (writeQueue.hasOwnProperty(nextToWrite)) { - var dataToWrite = writeQueue[nextToWrite] - delete writeQueue[nextToWrite] - return queueData(dataToWrite, nextToWrite) - } - - outputs ++ - if(inputs === outputs) { - if(paused) paused = false, stream.emit('drain') //written all the incoming events - if(ended) end() - } - } - - function next (err, data, number) { - if(destroyed) return - inNext = true - - if (!err || self.opts.failures) { - queueData(data, number) - } - - if (err) { - stream.emit.apply(stream, [ errorEventName, err ]); - } - - inNext = false; - } - - // Wrap the mapper function by calling its callback with the order number of - // the item in the stream. - function wrappedMapper (input, number, callback) { - return mapper.call(null, input, function(err, data){ - callback(err, data, number) - }) - } - - stream.write = function (data) { - if(ended) throw new Error('map stream is not writable') - inNext = false - inputs ++ - - try { - //catch sync errors and handle them like async errors - var written = wrappedMapper(data, inputs, next) - paused = (written === false) - return !paused - } catch (err) { - //if the callback has been called syncronously, and the error - //has occured in an listener, throw it again. - if(inNext) - throw err - next(err) - return !paused - } - } - - function end (data) { - //if end was called with args, write it, - ended = true //write will emit 'end' if ended is true - stream.writable = false - if(data !== undefined) { - return queueData(data, inputs) - } else if (inputs == outputs) { //wait for processing - stream.readable = false, stream.emit('end'), stream.destroy() - } - } - - stream.end = function (data) { - if(ended) return - end() - } - - stream.destroy = function () { - ended = destroyed = true - stream.writable = stream.readable = paused = false - process.nextTick(function () { - stream.emit('close') - }) - } - stream.pause = function () { - paused = true - } - - stream.resume = function () { - paused = false - } - - return stream -} - - - - diff --git a/node_modules/map-stream/package.json b/node_modules/map-stream/package.json deleted file mode 100644 index cb6b7f3..0000000 --- a/node_modules/map-stream/package.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "map-stream", - "version": "0.1.0", - "description": "construct pipes of streams of events", - "homepage": "http://github.com/dominictarr/map-stream", - "repository": { - "type": "git", - "url": "git://github.com/dominictarr/map-stream.git" - }, - "dependencies": { - }, - "devDependencies": { - "asynct": "*", - "it-is": "1", - "ubelt": "~2.9", - "stream-spec": "~0.2", - "event-stream": "~2.1", - "from": "0.0.2" - }, - "scripts": { - "test": "asynct test/" - }, - "author": "Dominic Tarr (http://dominictarr.com)" -} diff --git a/node_modules/map-stream/readme.markdown b/node_modules/map-stream/readme.markdown deleted file mode 100644 index 1897158..0000000 --- a/node_modules/map-stream/readme.markdown +++ /dev/null @@ -1,37 +0,0 @@ -# MapStream - -Refactored out of [event-stream](https://github.com/dominictarr/event-stream) - -##map (asyncFunction[, options]) - -Create a through stream from an asyncronous function. - -``` js -var map = require('map-stream') - -map(function (data, callback) { - //transform data - // ... - callback(null, data) -}) - -``` - -Each map MUST call the callback. It may callback with data, with an error or with no arguments, - - * `callback()` drop this data. - this makes the map work like `filter`, - note:`callback(null,null)` is not the same, and will emit `null` - - * `callback(null, newData)` turn data into newData - - * `callback(error)` emit an error for this item. - ->Note: if a callback is not called, `map` will think that it is still being processed, ->every call must be answered or the stream will not know when to end. -> ->Also, if the callback is called more than once, every call but the first will be ignored. - -##Options - - * `failures` - `boolean` continue mapping even if error occured. On error `map-stream` will emit `failure` event. (default: `false`) diff --git a/node_modules/map-stream/test/simple-map.asynct.js b/node_modules/map-stream/test/simple-map.asynct.js deleted file mode 100644 index 2b9a292..0000000 --- a/node_modules/map-stream/test/simple-map.asynct.js +++ /dev/null @@ -1,318 +0,0 @@ -'use strict'; - -var map = require('../') - , it = require('it-is') - , u = require('ubelt') - , spec = require('stream-spec') - , from = require('from') - , Stream = require('stream') - , es = require('event-stream') - -//REFACTOR THIS TEST TO USE es.readArray and es.writeArray - -function writeArray(array, stream) { - - array.forEach( function (j) { - stream.write(j) - }) - stream.end() - -} - -function readStream(stream, done) { - - var array = [] - stream.on('data', function (data) { - array.push(data) - }) - stream.on('error', done) - stream.on('end', function (data) { - done(null, array) - }) - -} - -//call sink on each write, -//and complete when finished. - -function pauseStream (prob, delay) { - var pauseIf = ( - 'number' == typeof prob - ? function () { - return Math.random() < prob - } - : 'function' == typeof prob - ? prob - : 0.1 - ) - var delayer = ( - !delay - ? process.nextTick - : 'number' == typeof delay - ? function (next) { setTimeout(next, delay) } - : delay - ) - - return es.through(function (data) { - if(!this.paused && pauseIf()) { - console.log('PAUSE STREAM PAUSING') - this.pause() - var self = this - delayer(function () { - console.log('PAUSE STREAM RESUMING') - self.resume() - }) - } - console.log("emit ('data', " + data + ')') - this.emit('data', data) - }) -} - -exports ['simple map applied to a stream'] = function (test) { - - var input = [1,2,3,7,5,3,1,9,0,2,4,6] - //create event stream from - - var doubler = map(function (data, cb) { - cb(null, data * 2) - }) - - spec(doubler).through().validateOnExit() - - //a map is only a middle man, so it is both readable and writable - - it(doubler).has({ - readable: true, - writable: true, - }) - - readStream(doubler, function (err, output) { - it(output).deepEqual(input.map(function (j) { - return j * 2 - })) -// process.nextTick(x.validate) - test.done() - }) - - writeArray(input, doubler) - -} - -exports ['stream comes back in the correct order'] = function (test) { - var input = [3, 2, 1] - - var delayer = map(function(data, cb){ - setTimeout(function () { - cb(null, data) - }, 100 * data) - }) - - readStream(delayer, function (err, output) { - it(output).deepEqual(input) - test.done() - }) - - writeArray(input, delayer) -} - -exports ['continues on error event with failures `true`'] = function (test) { - var input = [1, 2, 3] - - var delayer = map(function(data, cb){ - cb(new Error('Something gone wrong'), data) - }, { failures: true }) - - readStream(delayer, function (err, output) { - it(output).deepEqual(input) - test.done() - }) - - writeArray(input, delayer) -} - -exports['pipe two maps together'] = function (test) { - - var input = [1,2,3,7,5,3,1,9,0,2,4,6] - //create event stream from - function dd (data, cb) { - cb(null, data * 2) - } - var doubler1 = map(dd), doubler2 = map(dd) - - doubler1.pipe(doubler2) - - spec(doubler1).through().validateOnExit() - spec(doubler2).through().validateOnExit() - - readStream(doubler2, function (err, output) { - it(output).deepEqual(input.map(function (j) { - return j * 4 - })) - test.done() - }) - - writeArray(input, doubler1) - -} - -//next: -// -// test pause, resume and drian. -// - -// then make a pipe joiner: -// -// plumber (evStr1, evStr2, evStr3, evStr4, evStr5) -// -// will return a single stream that write goes to the first - -exports ['map will not call end until the callback'] = function (test) { - - var ticker = map(function (data, cb) { - process.nextTick(function () { - cb(null, data * 2) - }) - }) - - spec(ticker).through().validateOnExit() - - ticker.write('x') - ticker.end() - - ticker.on('end', function () { - test.done() - }) -} - -exports ['emit failures with opts.failures === `ture`'] = function (test) { - - var err = new Error('INTENSIONAL ERROR') - , mapper = - map(function () { - throw err - }, { failures: true }) - - mapper.on('failure', function (_err) { - it(_err).equal(err) - test.done() - }) - - mapper.write('hello') - -} - -exports ['emit error thrown'] = function (test) { - - var err = new Error('INTENSIONAL ERROR') - , mapper = - map(function () { - throw err - }) - - mapper.on('error', function (_err) { - it(_err).equal(err) - test.done() - }) - - mapper.write('hello') - -} - -exports ['emit error calledback'] = function (test) { - - var err = new Error('INTENSIONAL ERROR') - , mapper = - map(function (data, callback) { - callback(err) - }) - - mapper.on('error', function (_err) { - it(_err).equal(err) - test.done() - }) - - mapper.write('hello') - -} - -exports ['do not emit drain if not paused'] = function (test) { - - var maps = map(function (data, callback) { - u.delay(callback)(null, 1) - return true - }) - - spec(maps).through().pausable().validateOnExit() - - maps.on('drain', function () { - it(false).ok('should not emit drain unless the stream is paused') - }) - - it(maps.write('hello')).equal(true) - it(maps.write('hello')).equal(true) - it(maps.write('hello')).equal(true) - setTimeout(function () {maps.end()},10) - maps.on('end', test.done) -} - -exports ['emits drain if paused, when all '] = function (test) { - var active = 0 - var drained = false - var maps = map(function (data, callback) { - active ++ - u.delay(function () { - active -- - callback(null, 1) - })() - console.log('WRITE', false) - return false - }) - - spec(maps).through().validateOnExit() - - maps.on('drain', function () { - drained = true - it(active).equal(0, 'should emit drain when all maps are done') - }) - - it(maps.write('hello')).equal(false) - it(maps.write('hello')).equal(false) - it(maps.write('hello')).equal(false) - - process.nextTick(function () {maps.end()},10) - - maps.on('end', function () { - console.log('end') - it(drained).ok('shoud have emitted drain before end') - test.done() - }) - -} - -exports ['map applied to a stream with filtering'] = function (test) { - - var input = [1,2,3,7,5,3,1,9,0,2,4,6] - - var doubler = map(function (data, callback) { - if (data % 2) - callback(null, data * 2) - else - callback() - }) - - readStream(doubler, function (err, output) { - it(output).deepEqual(input.filter(function (j) { - return j % 2 - }).map(function (j) { - return j * 2 - })) - test.done() - }) - - spec(doubler).through().validateOnExit() - - writeArray(input, doubler) - -} - - diff --git a/node_modules/map-visit/LICENSE b/node_modules/map-visit/LICENSE deleted file mode 100644 index 83b56e7..0000000 --- a/node_modules/map-visit/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015-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/map-visit/README.md b/node_modules/map-visit/README.md deleted file mode 100644 index 5ab02d4..0000000 --- a/node_modules/map-visit/README.md +++ /dev/null @@ -1,155 +0,0 @@ -# map-visit [![NPM version](https://img.shields.io/npm/v/map-visit.svg?style=flat)](https://www.npmjs.com/package/map-visit) [![NPM monthly downloads](https://img.shields.io/npm/dm/map-visit.svg?style=flat)](https://npmjs.org/package/map-visit) [![NPM total downloads](https://img.shields.io/npm/dt/map-visit.svg?style=flat)](https://npmjs.org/package/map-visit) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/map-visit.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/map-visit) - -> Map `visit` over an array of objects. - -## Install - -Install with [npm](https://www.npmjs.com/): - -```sh -$ npm install --save map-visit -``` - -## Usage - -```js -var mapVisit = require('map-visit'); -``` - -## What does this do? - -**Assign/Merge/Extend vs. Visit** - -Let's say you want to add a `set` method to your application that will: - -* set key-value pairs on a `data` object -* extend objects onto the `data` object -* extend arrays of objects onto the data object - -**Example using `extend`** - -Here is one way to accomplish this using Lo-Dash's `extend` (comparable to `Object.assign`): - -```js -var _ = require('lodash'); - -var obj = { - data: {}, - set: function (key, value) { - if (Array.isArray(key)) { - _.extend.apply(_, [obj.data].concat(key)); - } else if (typeof key === 'object') { - _.extend(obj.data, key); - } else { - obj.data[key] = value; - } - } -}; - -obj.set('a', 'a'); -obj.set([{b: 'b'}, {c: 'c'}]); -obj.set({d: {e: 'f'}}); - -console.log(obj.data); -//=> {a: 'a', b: 'b', c: 'c', d: { e: 'f' }} -``` - -The above approach works fine for most use cases. However, **if you also want to emit an event** each time a property is added to the `data` object, or you want more control over what happens as the object is extended, a better approach would be to use `visit`. - -**Example using `visit`** - -In this approach: - -* when an array is passed to `set`, the `mapVisit` library calls the `set` method on each object in the array. -* when an object is passed, `visit` calls `set` on each property in the object. - -As a result, the `data` event will be emitted every time a property is added to `data` (events are just an example, you can use this approach to perform any necessary logic every time the method is called). - -```js -var mapVisit = require('map-visit'); -var visit = require('object-visit'); - -var obj = { - data: {}, - set: function (key, value) { - if (Array.isArray(key)) { - mapVisit(obj, 'set', key); - } else if (typeof key === 'object') { - visit(obj, 'set', key); - } else { - // simulate an event-emitter - console.log('emit', key, value); - obj.data[key] = value; - } - } -}; - -obj.set('a', 'a'); -obj.set([{b: 'b'}, {c: 'c'}]); -obj.set({d: {e: 'f'}}); -obj.set({g: 'h', i: 'j', k: 'l'}); - -console.log(obj.data); -//=> {a: 'a', b: 'b', c: 'c', d: { e: 'f' }, g: 'h', i: 'j', k: 'l'} - -// events would look something like: -// emit a a -// emit b b -// emit c c -// emit d { e: 'f' } -// emit g h -// emit i j -// emit k l -``` - -## About - -### Related projects - -* [collection-visit](https://www.npmjs.com/package/collection-visit): Visit a method over the items in an object, or map visit over the objects… [more](https://github.com/jonschlinkert/collection-visit) | [homepage](https://github.com/jonschlinkert/collection-visit "Visit a method over the items in an object, or map visit over the objects in an array.") -* [object-visit](https://www.npmjs.com/package/object-visit): Call a specified method on each value in the given object. | [homepage](https://github.com/jonschlinkert/object-visit "Call a specified method on each value in the given object.") - -### Contributing - -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). - -### Contributors - -| **Commits** | **Contributor** | -| --- | --- | -| 15 | [jonschlinkert](https://github.com/jonschlinkert) | -| 7 | [doowb](https://github.com/doowb) | - -### 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 -``` - -### 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 -``` - -### Author - -**Jon Schlinkert** - -* [github/jonschlinkert](https://github.com/jonschlinkert) -* [twitter/jonschlinkert](https://twitter.com/jonschlinkert) - -### License - -Copyright © 2017, [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.5.0, on April 09, 2017._ \ No newline at end of file diff --git a/node_modules/map-visit/index.js b/node_modules/map-visit/index.js deleted file mode 100644 index bc54ccc..0000000 --- a/node_modules/map-visit/index.js +++ /dev/null @@ -1,37 +0,0 @@ -'use strict'; - -var util = require('util'); -var visit = require('object-visit'); - -/** - * Map `visit` over an array of objects. - * - * @param {Object} `collection` The context in which to invoke `method` - * @param {String} `method` Name of the method to call on `collection` - * @param {Object} `arr` Array of objects. - */ - -module.exports = function mapVisit(collection, method, val) { - if (isObject(val)) { - return visit.apply(null, arguments); - } - - if (!Array.isArray(val)) { - throw new TypeError('expected an array: ' + util.inspect(val)); - } - - var args = [].slice.call(arguments, 3); - - for (var i = 0; i < val.length; i++) { - var ele = val[i]; - if (isObject(ele)) { - visit.apply(null, [collection, method, ele].concat(args)); - } else { - collection[method].apply(collection, [ele].concat(args)); - } - } -}; - -function isObject(val) { - return val && (typeof val === 'function' || (!Array.isArray(val) && typeof val === 'object')); -} diff --git a/node_modules/map-visit/package.json b/node_modules/map-visit/package.json deleted file mode 100644 index e8d0f41..0000000 --- a/node_modules/map-visit/package.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "name": "map-visit", - "description": "Map `visit` over an array of objects.", - "version": "1.0.0", - "homepage": "https://github.com/jonschlinkert/map-visit", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "contributors": [ - "Brian Woodward (https://twitter.com/doowb)", - "Jon Schlinkert (http://twitter.com/jonschlinkert)" - ], - "repository": "jonschlinkert/map-visit", - "bugs": { - "url": "https://github.com/jonschlinkert/map-visit/issues" - }, - "license": "MIT", - "files": [ - "index.js" - ], - "main": "index.js", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "dependencies": { - "object-visit": "^1.0.0" - }, - "devDependencies": { - "clone-deep": "^0.2.4", - "extend-shallow": "^2.0.1", - "gulp-format-md": "^0.1.12", - "lodash": "^4.17.4", - "mocha": "^3.2.0" - }, - "keywords": [ - "array", - "arrays", - "function", - "helper", - "invoke", - "key", - "map", - "method", - "object", - "objects", - "value", - "visit", - "visitor" - ], - "verb": { - "toc": false, - "layout": "default", - "tasks": [ - "readme" - ], - "plugins": [ - "gulp-format-md" - ], - "lint": { - "reflinks": true - }, - "related": { - "list": [ - "collection-visit", - "object-visit" - ] - }, - "reflinks": [ - "verb", - "verb-generate-readme" - ] - } -} diff --git a/node_modules/micromatch/CHANGELOG.md b/node_modules/micromatch/CHANGELOG.md deleted file mode 100644 index 9d8e5ed..0000000 --- a/node_modules/micromatch/CHANGELOG.md +++ /dev/null @@ -1,37 +0,0 @@ -## History - -### key - -Changelog entries are classified using the following labels _(from [keep-a-changelog][]_): - -- `added`: for new features -- `changed`: for changes in existing functionality -- `deprecated`: for once-stable features removed in upcoming releases -- `removed`: for deprecated features removed in this release -- `fixed`: for any bug fixes -- `bumped`: updated dependencies, only minor or higher will be listed. - -### [3.0.0] - 2017-04-11 - -TODO. There should be no breaking changes. Please report any regressions. I will [reformat these release notes](https://github.com/micromatch/micromatch/pull/76) and add them to the changelog as soon as I have a chance. - -### [1.0.1] - 2016-12-12 - -**Added** - -- Support for windows path edge cases where backslashes are used in brackets or other unusual combinations. - -### [1.0.0] - 2016-12-12 - -Stable release. - -### [0.1.0] - 2016-10-08 - -First release. - - -[Unreleased]: https://github.com/jonschlinkert/micromatch/compare/0.1.0...HEAD -[0.2.0]: https://github.com/jonschlinkert/micromatch/compare/0.1.0...0.2.0 - -[keep-a-changelog]: https://github.com/olivierlacan/keep-a-changelog - diff --git a/node_modules/micromatch/LICENSE b/node_modules/micromatch/LICENSE deleted file mode 100755 index d32ab44..0000000 --- a/node_modules/micromatch/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014-2018, 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/micromatch/README.md b/node_modules/micromatch/README.md deleted file mode 100644 index 5dfa149..0000000 --- a/node_modules/micromatch/README.md +++ /dev/null @@ -1,1150 +0,0 @@ -# micromatch [![NPM version](https://img.shields.io/npm/v/micromatch.svg?style=flat)](https://www.npmjs.com/package/micromatch) [![NPM monthly downloads](https://img.shields.io/npm/dm/micromatch.svg?style=flat)](https://npmjs.org/package/micromatch) [![NPM total downloads](https://img.shields.io/npm/dt/micromatch.svg?style=flat)](https://npmjs.org/package/micromatch) [![Linux Build Status](https://img.shields.io/travis/micromatch/micromatch.svg?style=flat&label=Travis)](https://travis-ci.org/micromatch/micromatch) [![Windows Build Status](https://img.shields.io/appveyor/ci/micromatch/micromatch.svg?style=flat&label=AppVeyor)](https://ci.appveyor.com/project/micromatch/micromatch) - -> Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch. - -Please consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support. - -## Table of Contents - -
    -Details - -- [Install](#install) -- [Quickstart](#quickstart) -- [Why use micromatch?](#why-use-micromatch) - * [Matching features](#matching-features) -- [Switching to micromatch](#switching-to-micromatch) - * [From minimatch](#from-minimatch) - * [From multimatch](#from-multimatch) -- [API](#api) -- [Options](#options) - * [options.basename](#optionsbasename) - * [options.bash](#optionsbash) - * [options.cache](#optionscache) - * [options.dot](#optionsdot) - * [options.failglob](#optionsfailglob) - * [options.ignore](#optionsignore) - * [options.matchBase](#optionsmatchbase) - * [options.nobrace](#optionsnobrace) - * [options.nocase](#optionsnocase) - * [options.nodupes](#optionsnodupes) - * [options.noext](#optionsnoext) - * [options.nonegate](#optionsnonegate) - * [options.noglobstar](#optionsnoglobstar) - * [options.nonull](#optionsnonull) - * [options.nullglob](#optionsnullglob) - * [options.snapdragon](#optionssnapdragon) - * [options.sourcemap](#optionssourcemap) - * [options.unescape](#optionsunescape) - * [options.unixify](#optionsunixify) -- [Extended globbing](#extended-globbing) - * [extglobs](#extglobs) - * [braces](#braces) - * [regex character classes](#regex-character-classes) - * [regex groups](#regex-groups) - * [POSIX bracket expressions](#posix-bracket-expressions) -- [Notes](#notes) - * [Bash 4.3 parity](#bash-43-parity) - * [Backslashes](#backslashes) -- [Contributing](#contributing) -- [Benchmarks](#benchmarks) - * [Running benchmarks](#running-benchmarks) - * [Latest results](#latest-results) -- [About](#about) - -
    - -## Install - -Install with [npm](https://www.npmjs.com/): - -```sh -$ npm install --save micromatch -``` - -## Quickstart - -```js -var mm = require('micromatch'); -mm(list, patterns[, options]); -``` - -The [main export](#micromatch) takes a list of strings and one or more glob patterns: - -```js -console.log(mm(['foo', 'bar', 'qux'], ['f*', 'b*'])); -//=> ['foo', 'bar'] -``` - -Use [.isMatch()](#ismatch) to get true/false: - -```js -console.log(mm.isMatch('foo', 'f*')); -//=> true -``` - -[Switching](#switching-to-micromatch) from minimatch and multimatch is easy! - -## Why use micromatch? - -> micromatch is a [drop-in replacement](#switching-to-micromatch) for minimatch and multimatch - -* Supports all of the same matching features as [minimatch](https://github.com/isaacs/minimatch) and [multimatch](https://github.com/sindresorhus/multimatch) -* Micromatch uses [snapdragon](https://github.com/jonschlinkert/snapdragon) for parsing and compiling globs, which provides granular control over the entire conversion process in a way that is easy to understand, reason about, and maintain. -* More consistently accurate matching [than minimatch](https://github.com/yarnpkg/yarn/pull/3339), with more than 36,000 [test assertions](./test) to prove it. -* More complete support for the Bash 4.3 specification than minimatch and multimatch. In fact, micromatch passes _all of the spec tests_ from bash, including some that bash still fails. -* [Faster matching](#benchmarks), from a combination of optimized glob patterns, faster algorithms, and regex caching. -* [Micromatch is safer](https://github.com/micromatch/braces#braces-is-safe), and is not subject to DoS with brace patterns, like minimatch and multimatch. -* More reliable windows support than minimatch and multimatch. - -### Matching features - -* Support for multiple glob patterns (no need for wrappers like multimatch) -* Wildcards (`**`, `*.js`) -* Negation (`'!a/*.js'`, `'*!(b).js']`) -* [extglobs](https://github.com/micromatch/extglob) (`+(x|y)`, `!(a|b)`) -* [POSIX character classes](https://github.com/micromatch/expand-brackets) (`[[:alpha:][:digit:]]`) -* [brace expansion](https://github.com/micromatch/braces) (`foo/{1..5}.md`, `bar/{a,b,c}.js`) -* regex character classes (`foo-[1-5].js`) -* regex logical "or" (`foo/(abc|xyz).js`) - -You can mix and match these features to create whatever patterns you need! - -## Switching to micromatch - -There is one notable difference between micromatch and minimatch in regards to how backslashes are handled. See [the notes about backslashes](#backslashes) for more information. - -### From minimatch - -Use [mm.isMatch()](#ismatch) instead of `minimatch()`: - -```js -mm.isMatch('foo', 'b*'); -//=> false -``` - -Use [mm.match()](#match) instead of `minimatch.match()`: - -```js -mm.match(['foo', 'bar'], 'b*'); -//=> 'bar' -``` - -### From multimatch - -Same signature: - -```js -mm(['foo', 'bar', 'baz'], ['f*', '*z']); -//=> ['foo', 'baz'] -``` - -## API - -### [micromatch](index.js#L41) - -The main function takes a list of strings and one or more glob patterns to use for matching. - -**Params** - -* `list` **{Array}**: A list of strings to match -* `patterns` **{String|Array}**: One or more glob patterns to use for matching. -* `options` **{Object}**: See available [options](#options) for changing how matches are performed -* `returns` **{Array}**: Returns an array of matches - -**Example** - -```js -var mm = require('micromatch'); -mm(list, patterns[, options]); - -console.log(mm(['a.js', 'a.txt'], ['*.js'])); -//=> [ 'a.js' ] -``` - -### [.match](index.js#L93) - -Similar to the main function, but `pattern` must be a string. - -**Params** - -* `list` **{Array}**: Array of strings to match -* `pattern` **{String}**: Glob pattern to use for matching. -* `options` **{Object}**: See available [options](#options) for changing how matches are performed -* `returns` **{Array}**: Returns an array of matches - -**Example** - -```js -var mm = require('micromatch'); -mm.match(list, pattern[, options]); - -console.log(mm.match(['a.a', 'a.aa', 'a.b', 'a.c'], '*.a')); -//=> ['a.a', 'a.aa'] -``` - -### [.isMatch](index.js#L154) - -Returns true if the specified `string` matches the given glob `pattern`. - -**Params** - -* `string` **{String}**: String to match -* `pattern` **{String}**: Glob pattern to use for matching. -* `options` **{Object}**: See available [options](#options) for changing how matches are performed -* `returns` **{Boolean}**: Returns true if the string matches the glob pattern. - -**Example** - -```js -var mm = require('micromatch'); -mm.isMatch(string, pattern[, options]); - -console.log(mm.isMatch('a.a', '*.a')); -//=> true -console.log(mm.isMatch('a.b', '*.a')); -//=> false -``` - -### [.some](index.js#L192) - -Returns true if some of the strings in the given `list` match any of the given glob `patterns`. - -**Params** - -* `list` **{String|Array}**: The string or array of strings to test. Returns as soon as the first match is found. -* `patterns` **{String|Array}**: One or more glob patterns to use for matching. -* `options` **{Object}**: See available [options](#options) for changing how matches are performed -* `returns` **{Boolean}**: Returns true if any patterns match `str` - -**Example** - -```js -var 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 -``` - -### [.every](index.js#L228) - -Returns true if every string in the given `list` matches any of the given glob `patterns`. - -**Params** - -* `list` **{String|Array}**: The string or array of strings to test. -* `patterns` **{String|Array}**: One or more glob patterns to use for matching. -* `options` **{Object}**: See available [options](#options) for changing how matches are performed -* `returns` **{Boolean}**: Returns true if any patterns match `str` - -**Example** - -```js -var 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 -``` - -### [.any](index.js#L260) - -Returns true if **any** of the given glob `patterns` match the specified `string`. - -**Params** - -* `str` **{String|Array}**: The string to test. -* `patterns` **{String|Array}**: One or more glob patterns to use for matching. -* `options` **{Object}**: See available [options](#options) for changing how matches are performed -* `returns` **{Boolean}**: Returns true if any patterns match `str` - -**Example** - -```js -var mm = require('micromatch'); -mm.any(string, patterns[, options]); - -console.log(mm.any('a.a', ['b.*', '*.a'])); -//=> true -console.log(mm.any('a.a', 'b.*')); -//=> false -``` - -### [.all](index.js#L308) - -Returns true if **all** of the given `patterns` match the specified string. - -**Params** - -* `str` **{String|Array}**: The string to test. -* `patterns` **{String|Array}**: One or more glob patterns to use for matching. -* `options` **{Object}**: See available [options](#options) for changing how matches are performed -* `returns` **{Boolean}**: Returns true if any patterns match `str` - -**Example** - -```js -var 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 -``` - -### [.not](index.js#L340) - -Returns a list of strings that _**do not match any**_ of the given `patterns`. - -**Params** - -* `list` **{Array}**: Array of strings to match. -* `patterns` **{String|Array}**: One or more glob pattern to use for matching. -* `options` **{Object}**: See available [options](#options) for changing how matches are performed -* `returns` **{Array}**: Returns an array of strings that **do not match** the given patterns. - -**Example** - -```js -var mm = require('micromatch'); -mm.not(list, patterns[, options]); - -console.log(mm.not(['a.a', 'b.b', 'c.c'], '*.a')); -//=> ['b.b', 'c.c'] -``` - -### [.contains](index.js#L376) - -Returns true if the given `string` contains the given pattern. Similar to [.isMatch](#isMatch) but the pattern can match any part of the string. - -**Params** - -* `str` **{String}**: The string to match. -* `patterns` **{String|Array}**: Glob pattern to use for matching. -* `options` **{Object}**: See available [options](#options) for changing how matches are performed -* `returns` **{Boolean}**: Returns true if the patter matches any part of `str`. - -**Example** - -```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 -``` - -### [.matchKeys](index.js#L432) - -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](https://github.com/jonschlinkert/glob-object) instead. - -**Params** - -* `object` **{Object}**: The object with keys to filter. -* `patterns` **{String|Array}**: One or more glob patterns to use for matching. -* `options` **{Object}**: See available [options](#options) for changing how matches are performed -* `returns` **{Object}**: Returns an object with only keys that match the given patterns. - -**Example** - -```js -var mm = require('micromatch'); -mm.matchKeys(object, patterns[, options]); - -var obj = { aa: 'a', ab: 'b', ac: 'c' }; -console.log(mm.matchKeys(obj, '*b')); -//=> { ab: 'b' } -``` - -### [.matcher](index.js#L461) - -Returns a memoized 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. - -**Params** - -* `pattern` **{String}**: Glob pattern -* `options` **{Object}**: See available [options](#options) for changing how matches are performed. -* `returns` **{Function}**: Returns a matcher function. - -**Example** - -```js -var mm = require('micromatch'); -mm.matcher(pattern[, options]); - -var isMatch = mm.matcher('*.!(*a)'); -console.log(isMatch('a.a')); -//=> false -console.log(isMatch('a.b')); -//=> true -``` - -### [.capture](index.js#L536) - -Returns an array of matches captured by `pattern` in `string, or`null` if the pattern did not match. - -**Params** - -* `pattern` **{String}**: Glob pattern to use for matching. -* `string` **{String}**: String to match -* `options` **{Object}**: See available [options](#options) for changing how matches are performed -* `returns` **{Boolean}**: Returns an array of captures if the string matches the glob pattern, otherwise `null`. - -**Example** - -```js -var 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 -``` - -### [.makeRe](index.js#L571) - -Create a regular expression from the given glob `pattern`. - -**Params** - -* `pattern` **{String}**: A glob pattern to convert to regex. -* `options` **{Object}**: See available [options](#options) for changing how matches are performed. -* `returns` **{RegExp}**: Returns a regex created from the given pattern. - -**Example** - -```js -var mm = require('micromatch'); -mm.makeRe(pattern[, options]); - -console.log(mm.makeRe('*.js')); -//=> /^(?:(\.[\\\/])?(?!\.)(?=.)[^\/]*?\.js)$/ -``` - -### [.braces](index.js#L618) - -Expand the given brace `pattern`. - -**Params** - -* `pattern` **{String}**: String with brace pattern to expand. -* `options` **{Object}**: Any [options](#options) to change how expansion is performed. See the [braces](https://github.com/micromatch/braces) library for all available options. -* `returns` **{Array}** - -**Example** - -```js -var mm = require('micromatch'); -console.log(mm.braces('foo/{a,b}/bar')); -//=> ['foo/(a|b)/bar'] - -console.log(mm.braces('foo/{a,b}/bar', {expand: true})); -//=> ['foo/(a|b)/bar'] -``` - -### [.create](index.js#L685) - -Parses the given glob `pattern` and returns an array of abstract syntax trees (ASTs), with the compiled `output` and optional source `map` on each AST. - -**Params** - -* `pattern` **{String}**: Glob pattern to parse and compile. -* `options` **{Object}**: Any [options](#options) to change how parsing and compiling is performed. -* `returns` **{Object}**: Returns an object with the parsed AST, compiled string and optional source map. - -**Example** - -```js -var mm = require('micromatch'); -mm.create(pattern[, options]); - -console.log(mm.create('abc/*.js')); -// [{ options: { source: 'string', sourcemap: true }, -// state: {}, -// compilers: -// { ... }, -// output: '(\\.[\\\\\\/])?abc\\/(?!\\.)(?=.)[^\\/]*?\\.js', -// ast: -// { type: 'root', -// errors: [], -// nodes: -// [ ... ], -// dot: false, -// input: 'abc/*.js' }, -// parsingErrors: [], -// map: -// { version: 3, -// sources: [ 'string' ], -// names: [], -// mappings: 'AAAA,GAAG,EAAC,kBAAC,EAAC,EAAE', -// sourcesContent: [ 'abc/*.js' ] }, -// position: { line: 1, column: 28 }, -// content: {}, -// files: {}, -// idx: 6 }] -``` - -### [.parse](index.js#L732) - -Parse the given `str` with the given `options`. - -**Params** - -* `str` **{String}** -* `options` **{Object}** -* `returns` **{Object}**: Returns an AST - -**Example** - -```js -var mm = require('micromatch'); -mm.parse(pattern[, options]); - -var ast = mm.parse('a/{b,c}/d'); -console.log(ast); -// { type: 'root', -// errors: [], -// input: 'a/{b,c}/d', -// nodes: -// [ { type: 'bos', val: '' }, -// { type: 'text', val: 'a/' }, -// { type: 'brace', -// nodes: -// [ { type: 'brace.open', val: '{' }, -// { type: 'text', val: 'b,c' }, -// { type: 'brace.close', val: '}' } ] }, -// { type: 'text', val: '/d' }, -// { type: 'eos', val: '' } ] } -``` - -### [.compile](index.js#L780) - -Compile the given `ast` or string with the given `options`. - -**Params** - -* `ast` **{Object|String}** -* `options` **{Object}** -* `returns` **{Object}**: Returns an object that has an `output` property with the compiled string. - -**Example** - -```js -var mm = require('micromatch'); -mm.compile(ast[, options]); - -var ast = mm.parse('a/{b,c}/d'); -console.log(mm.compile(ast)); -// { options: { source: 'string' }, -// state: {}, -// compilers: -// { eos: [Function], -// noop: [Function], -// bos: [Function], -// brace: [Function], -// 'brace.open': [Function], -// text: [Function], -// 'brace.close': [Function] }, -// output: [ 'a/(b|c)/d' ], -// ast: -// { ... }, -// parsingErrors: [] } -``` - -### [.clearCache](index.js#L801) - -Clear the regex cache. - -**Example** - -```js -mm.clearCache(); -``` - -## Options - -* [basename](#optionsbasename) -* [bash](#optionsbash) -* [cache](#optionscache) -* [dot](#optionsdot) -* [failglob](#optionsfailglob) -* [ignore](#optionsignore) -* [matchBase](#optionsmatchBase) -* [nobrace](#optionsnobrace) -* [nocase](#optionsnocase) -* [nodupes](#optionsnodupes) -* [noext](#optionsnoext) -* [noglobstar](#optionsnoglobstar) -* [nonull](#optionsnonull) -* [nullglob](#optionsnullglob) -* [snapdragon](#optionssnapdragon) -* [sourcemap](#optionssourcemap) -* [unescape](#optionsunescape) -* [unixify](#optionsunixify) - -### options.basename - -Allow glob patterns without slashes to match a file path based on its basename. Same behavior as [minimatch](https://github.com/isaacs/minimatch) option `matchBase`. - -**Type**: `Boolean` - -**Default**: `false` - -**Example** - -```js -mm(['a/b.js', 'a/c.md'], '*.js'); -//=> [] - -mm(['a/b.js', 'a/c.md'], '*.js', {matchBase: true}); -//=> ['a/b.js'] -``` - -### options.bash - -Enabled by default, this option enforces bash-like behavior with stars immediately following a bracket expression. Bash bracket expressions are similar to regex character classes, but unlike regex, a star following a bracket expression **does not repeat the bracketed characters**. Instead, the star is treated the same as an other star. - -**Type**: `Boolean` - -**Default**: `true` - -**Example** - -```js -var files = ['abc', 'ajz']; -console.log(mm(files, '[a-c]*')); -//=> ['abc', 'ajz'] - -console.log(mm(files, '[a-c]*', {bash: false})); -``` - -### options.cache - -Disable regex and function memoization. - -**Type**: `Boolean` - -**Default**: `undefined` - -### options.dot - -Match dotfiles. Same behavior as [minimatch](https://github.com/isaacs/minimatch) option `dot`. - -**Type**: `Boolean` - -**Default**: `false` - -### options.failglob - -Similar to the `--failglob` behavior in Bash, throws an error when no matches are found. - -**Type**: `Boolean` - -**Default**: `undefined` - -### options.ignore - -String or array of glob patterns to match files to ignore. - -**Type**: `String|Array` - -**Default**: `undefined` - -### options.matchBase - -Alias for [options.basename](#options-basename). - -### options.nobrace - -Disable expansion of brace patterns. Same behavior as [minimatch](https://github.com/isaacs/minimatch) option `nobrace`. - -**Type**: `Boolean` - -**Default**: `undefined` - -See [braces](https://github.com/micromatch/braces) for more information about extended brace expansion. - -### options.nocase - -Use a case-insensitive regex for matching files. Same behavior as [minimatch](https://github.com/isaacs/minimatch). - -**Type**: `Boolean` - -**Default**: `undefined` - -### options.nodupes - -Remove duplicate elements from the result array. - -**Type**: `Boolean` - -**Default**: `undefined` - -**Example** - -Example of using the `unescape` and `nodupes` options together: - -```js -mm.match(['a/b/c', 'a/b/c'], 'a/b/c'); -//=> ['a/b/c', 'a/b/c'] - -mm.match(['a/b/c', 'a/b/c'], 'a/b/c', {nodupes: true}); -//=> ['abc'] -``` - -### options.noext - -Disable extglob support, so that extglobs are regarded as literal characters. - -**Type**: `Boolean` - -**Default**: `undefined` - -**Examples** - -```js -mm(['a/z', 'a/b', 'a/!(z)'], 'a/!(z)'); -//=> ['a/b', 'a/!(z)'] - -mm(['a/z', 'a/b', 'a/!(z)'], 'a/!(z)', {noext: true}); -//=> ['a/!(z)'] (matches only as literal characters) -``` - -### options.nonegate - -Disallow negation (`!`) patterns, and treat leading `!` as a literal character to match. - -**Type**: `Boolean` - -**Default**: `undefined` - -### options.noglobstar - -Disable matching with globstars (`**`). - -**Type**: `Boolean` - -**Default**: `undefined` - -```js -mm(['a/b', 'a/b/c', 'a/b/c/d'], 'a/**'); -//=> ['a/b', 'a/b/c', 'a/b/c/d'] - -mm(['a/b', 'a/b/c', 'a/b/c/d'], 'a/**', {noglobstar: true}); -//=> ['a/b'] -``` - -### options.nonull - -Alias for [options.nullglob](#options-nullglob). - -### options.nullglob - -If `true`, when no matches are found the actual (arrayified) glob pattern is returned instead of an empty array. Same behavior as [minimatch](https://github.com/isaacs/minimatch) option `nonull`. - -**Type**: `Boolean` - -**Default**: `undefined` - -### options.snapdragon - -Pass your own instance of [snapdragon](https://github.com/jonschlinkert/snapdragon), to customize parsers or compilers. - -**Type**: `Object` - -**Default**: `undefined` - -### options.sourcemap - -Generate a source map by enabling the `sourcemap` option with the `.parse`, `.compile`, or `.create` methods. - -_(Note that sourcemaps are currently not enabled for brace patterns)_ - -**Examples** - -``` js -var mm = require('micromatch'); -var pattern = '*(*(of*(a)x)z)'; - -var res = mm.create('abc/*.js', {sourcemap: true}); -console.log(res.map); -// { version: 3, -// sources: [ 'string' ], -// names: [], -// mappings: 'AAAA,GAAG,EAAC,iBAAC,EAAC,EAAE', -// sourcesContent: [ 'abc/*.js' ] } - -var ast = mm.parse('abc/**/*.js'); -var res = mm.compile(ast, {sourcemap: true}); -console.log(res.map); -// { version: 3, -// sources: [ 'string' ], -// names: [], -// mappings: 'AAAA,GAAG,EAAC,2BAAE,EAAC,iBAAC,EAAC,EAAE', -// sourcesContent: [ 'abc/**/*.js' ] } - -var ast = mm.parse(pattern); -var res = mm.compile(ast, {sourcemap: true}); -console.log(res.map); -// { version: 3, -// sources: [ 'string' ], -// names: [], -// mappings: 'AAAA,CAAE,CAAE,EAAE,CAAE,CAAC,EAAC,CAAC,EAAC,CAAC,EAAC', -// sourcesContent: [ '*(*(of*(a)x)z)' ] } -``` - -### options.unescape - -Remove backslashes from returned matches. - -**Type**: `Boolean` - -**Default**: `undefined` - -**Example** - -In this example we want to match a literal `*`: - -```js -mm.match(['abc', 'a\\*c'], 'a\\*c'); -//=> ['a\\*c'] - -mm.match(['abc', 'a\\*c'], 'a\\*c', {unescape: true}); -//=> ['a*c'] -``` - -### options.unixify - -Convert path separators on returned files to posix/unix-style forward slashes. - -**Type**: `Boolean` - -**Default**: `true` on windows, `false` everywhere else - -**Example** - -```js -mm.match(['a\\b\\c'], 'a/**'); -//=> ['a/b/c'] - -mm.match(['a\\b\\c'], {unixify: false}); -//=> ['a\\b\\c'] -``` - -## Extended globbing - -Micromatch also supports extended globbing features. - -### extglobs - -Extended globbing, as described by the bash man page: - -| **pattern** | **regex equivalent** | **description** | -| --- | --- | --- | -| `?(pattern)` | `(pattern)?` | Matches zero or one occurrence of the given patterns | -| `*(pattern)` | `(pattern)*` | Matches zero or more occurrences of the given patterns | -| `+(pattern)` | `(pattern)+` | Matches one or more occurrences of the given patterns | -| `@(pattern)` | `(pattern)` * | Matches one of the given patterns | -| `!(pattern)` | N/A (equivalent regex is much more complicated) | Matches anything except one of the given patterns | - -* Note that `@` isn't a RegEx character. - -Powered by [extglob](https://github.com/micromatch/extglob). Visit that library for the full range of options or to report extglob related issues. - -### braces - -Brace patterns can be used to match specific ranges or sets of characters. For example, the pattern `*/{1..3}/*` would match any of following strings: - -``` -foo/1/bar -foo/2/bar -foo/3/bar -baz/1/qux -baz/2/qux -baz/3/qux -``` - -Visit [braces](https://github.com/micromatch/braces) to see the full range of features and options related to brace expansion, or to create brace matching or expansion related issues. - -### regex character classes - -Given the list: `['a.js', 'b.js', 'c.js', 'd.js', 'E.js']`: - -* `[ac].js`: matches both `a` and `c`, returning `['a.js', 'c.js']` -* `[b-d].js`: matches from `b` to `d`, returning `['b.js', 'c.js', 'd.js']` -* `[b-d].js`: matches from `b` to `d`, returning `['b.js', 'c.js', 'd.js']` -* `a/[A-Z].js`: matches and uppercase letter, returning `['a/E.md']` - -Learn about [regex character classes](http://www.regular-expressions.info/charclass.html). - -### regex groups - -Given `['a.js', 'b.js', 'c.js', 'd.js', 'E.js']`: - -* `(a|c).js`: would match either `a` or `c`, returning `['a.js', 'c.js']` -* `(b|d).js`: would match either `b` or `d`, returning `['b.js', 'd.js']` -* `(b|[A-Z]).js`: would match either `b` or an uppercase letter, returning `['b.js', 'E.js']` - -As with regex, parens can be nested, so patterns like `((a|b)|c)/b` will work. Although brace expansion might be friendlier to use, depending on preference. - -### POSIX bracket expressions - -POSIX brackets are intended to be more user-friendly than regex character classes. This of course is in the eye of the beholder. - -**Example** - -```js -mm.isMatch('a1', '[[:alpha:][:digit:]]'); -//=> true - -mm.isMatch('a1', '[[:alpha:][:alpha:]]'); -//=> false -``` - -See [expand-brackets](https://github.com/jonschlinkert/expand-brackets) for more information about bracket expressions. - -*** - -## Notes - -### Bash 4.3 parity - -Whenever possible matching behavior is based on behavior Bash 4.3, which is mostly consistent with minimatch. - -However, it's suprising how many edge cases and rabbit holes there are with glob matching, and since there is no real glob specification, and micromatch is more accurate than both Bash and minimatch, there are cases where best-guesses were made for behavior. In a few cases where Bash had no answers, we used wildmatch (used by git) as a fallback. - -### Backslashes - -There is an important, notable difference between minimatch and micromatch _in regards to how backslashes are handled_ in glob patterns. - -* Micromatch exclusively and explicitly reserves backslashes for escaping characters in a glob pattern, even on windows. This is consistent with bash behavior. -* Minimatch converts all backslashes to forward slashes, which means you can't use backslashes to escape any characters in your glob patterns. - -We made this decision for micromatch for a couple of reasons: - -* consistency with bash conventions. -* glob patterns are not filepaths. They are a type of [regular language](https://en.wikipedia.org/wiki/Regular_language) that is converted to a JavaScript regular expression. Thus, when forward slashes are defined in a glob pattern, the resulting regular expression will match windows or POSIX path separators just fine. - -**A note about joining paths to globs** - -Note that when you pass something like `path.join('foo', '*')` to micromatch, you are creating a filepath and expecting it to still work as a glob pattern. This causes problems on windows, since the `path.sep` is `\\`. - -In other words, since `\\` is reserved as an escape character in globs, on windows `path.join('foo', '*')` would result in `foo\\*`, which tells micromatch to match `*` as a literal character. This is the same behavior as bash. - -## Contributing - -All contributions are welcome! Please read [the contributing guide](.github/contributing.md) to get started. - -**Bug reports** - -Please create an issue if you encounter a bug or matching behavior that doesn't seem correct. If you find a matching-related issue, please: - -* [research existing issues first](../../issues) (open and closed) -* visit the [GNU Bash documentation](https://www.gnu.org/software/bash/manual/) to see how Bash deals with the pattern -* visit the [minimatch](https://github.com/isaacs/minimatch) documentation to cross-check expected behavior in node.js -* if all else fails, since there is no real specification for globs we will probably need to discuss expected behavior and decide how to resolve it. which means any detail you can provide to help with this discussion would be greatly appreciated. - -**Platform issues** - -It's important to us that micromatch work consistently on all platforms. If you encounter any platform-specific matching or path related issues, please let us know (pull requests are also greatly appreciated). - -## Benchmarks - -### Running benchmarks - -Install dev dependencies: - -```bash -npm i -d && npm run benchmark -``` - -### Latest results - -As of February 18, 2018 (longer bars are better): - -```sh -# braces-globstar-large-list (485691 bytes) - micromatch ██████████████████████████████████████████████████ (517 ops/sec ±0.49%) - minimatch █ (18.92 ops/sec ±0.54%) - multimatch █ (18.94 ops/sec ±0.62%) - - micromatch is faster by an avg. of 2,733% - -# braces-multiple (3362 bytes) - micromatch ██████████████████████████████████████████████████ (33,625 ops/sec ±0.45%) - minimatch (2.92 ops/sec ±3.26%) - multimatch (2.90 ops/sec ±2.76%) - - micromatch is faster by an avg. of 1,156,935% - -# braces-range (727 bytes) - micromatch █████████████████████████████████████████████████ (155,220 ops/sec ±0.56%) - minimatch ██████ (20,186 ops/sec ±1.27%) - multimatch ██████ (19,809 ops/sec ±0.60%) - - micromatch is faster by an avg. of 776% - -# braces-set (2858 bytes) - micromatch █████████████████████████████████████████████████ (24,354 ops/sec ±0.92%) - minimatch █████ (2,566 ops/sec ±0.56%) - multimatch ████ (2,431 ops/sec ±1.25%) - - micromatch is faster by an avg. of 975% - -# globstar-large-list (485686 bytes) - micromatch █████████████████████████████████████████████████ (504 ops/sec ±0.45%) - minimatch ███ (33.36 ops/sec ±1.08%) - multimatch ███ (33.19 ops/sec ±1.35%) - - micromatch is faster by an avg. of 1,514% - -# globstar-long-list (90647 bytes) - micromatch ██████████████████████████████████████████████████ (2,694 ops/sec ±1.08%) - minimatch ████████████████ (870 ops/sec ±1.09%) - multimatch ████████████████ (862 ops/sec ±0.84%) - - micromatch is faster by an avg. of 311% - -# globstar-short-list (182 bytes) - micromatch ██████████████████████████████████████████████████ (328,921 ops/sec ±1.06%) - minimatch █████████ (64,808 ops/sec ±1.42%) - multimatch ████████ (57,991 ops/sec ±2.11%) - - micromatch is faster by an avg. of 536% - -# no-glob (701 bytes) - micromatch █████████████████████████████████████████████████ (415,935 ops/sec ±0.36%) - minimatch ███████████ (92,730 ops/sec ±1.44%) - multimatch █████████ (81,958 ops/sec ±2.13%) - - micromatch is faster by an avg. of 476% - -# star-basename-long (12339 bytes) - micromatch █████████████████████████████████████████████████ (7,963 ops/sec ±0.36%) - minimatch ███████████████████████████████ (5,072 ops/sec ±0.83%) - multimatch ███████████████████████████████ (5,028 ops/sec ±0.40%) - - micromatch is faster by an avg. of 158% - -# star-basename-short (349 bytes) - micromatch ██████████████████████████████████████████████████ (269,552 ops/sec ±0.70%) - minimatch ██████████████████████ (122,457 ops/sec ±1.39%) - multimatch ████████████████████ (110,788 ops/sec ±1.99%) - - micromatch is faster by an avg. of 231% - -# star-folder-long (19207 bytes) - micromatch █████████████████████████████████████████████████ (3,806 ops/sec ±0.38%) - minimatch ████████████████████████████ (2,204 ops/sec ±0.32%) - multimatch ██████████████████████████ (2,020 ops/sec ±1.07%) - - micromatch is faster by an avg. of 180% - -# star-folder-short (551 bytes) - micromatch ██████████████████████████████████████████████████ (249,077 ops/sec ±0.40%) - minimatch ███████████ (59,431 ops/sec ±1.67%) - multimatch ███████████ (55,569 ops/sec ±1.43%) - - micromatch is faster by an avg. of 433% -``` - -## About - -
    -Contributing - -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). - -Please read the [contributing guide](.github/contributing.md) for advice on opening issues, pull requests, and coding standards. - -
    - -
    -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: - -* [braces](https://www.npmjs.com/package/braces): Bash-like brace expansion, implemented in JavaScript. Safer than other brace expansion libs, with complete support… [more](https://github.com/micromatch/braces) | [homepage](https://github.com/micromatch/braces "Bash-like brace expansion, implemented in JavaScript. Safer than other brace expansion libs, with complete support for the Bash 4.3 braces specification, without sacrificing speed.") -* [expand-brackets](https://www.npmjs.com/package/expand-brackets): Expand POSIX bracket expressions (character classes) in glob patterns. | [homepage](https://github.com/jonschlinkert/expand-brackets "Expand POSIX bracket expressions (character classes) in glob patterns.") -* [extglob](https://www.npmjs.com/package/extglob): Extended glob support for JavaScript. Adds (almost) the expressive power of regular expressions to glob… [more](https://github.com/micromatch/extglob) | [homepage](https://github.com/micromatch/extglob "Extended glob support for JavaScript. Adds (almost) the expressive power of regular expressions to glob patterns.") -* [fill-range](https://www.npmjs.com/package/fill-range): Fill in a range of numbers or letters, optionally passing an increment or `step` to… [more](https://github.com/jonschlinkert/fill-range) | [homepage](https://github.com/jonschlinkert/fill-range "Fill in a range of numbers or letters, optionally passing an increment or `step` to use, or create a regex-compatible range with `options.toRegex`") -* [nanomatch](https://www.npmjs.com/package/nanomatch): Fast, minimal glob matcher for node.js. Similar to micromatch, minimatch and multimatch, but complete Bash… [more](https://github.com/micromatch/nanomatch) | [homepage](https://github.com/micromatch/nanomatch "Fast, minimal glob matcher for node.js. Similar to micromatch, minimatch and multimatch, but complete Bash 4.3 wildcard support only (no support for exglobs, posix brackets or braces)") - -### Contributors - -| **Commits** | **Contributor** | -| --- | --- | -| 457 | [jonschlinkert](https://github.com/jonschlinkert) | -| 12 | [es128](https://github.com/es128) | -| 8 | [doowb](https://github.com/doowb) | -| 3 | [paulmillr](https://github.com/paulmillr) | -| 2 | [TrySound](https://github.com/TrySound) | -| 2 | [MartinKolarik](https://github.com/MartinKolarik) | -| 2 | [charlike-old](https://github.com/charlike-old) | -| 1 | [amilajack](https://github.com/amilajack) | -| 1 | [mrmlnc](https://github.com/mrmlnc) | -| 1 | [devongovett](https://github.com/devongovett) | -| 1 | [DianeLooney](https://github.com/DianeLooney) | -| 1 | [UltCombo](https://github.com/UltCombo) | -| 1 | [tomByrer](https://github.com/tomByrer) | -| 1 | [fidian](https://github.com/fidian) | - -### Author - -**Jon Schlinkert** - -* [linkedin/in/jonschlinkert](https://linkedin.com/in/jonschlinkert) -* [github/jonschlinkert](https://github.com/jonschlinkert) -* [twitter/jonschlinkert](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 February 18, 2018._ \ No newline at end of file diff --git a/node_modules/micromatch/index.js b/node_modules/micromatch/index.js deleted file mode 100644 index fe02f2c..0000000 --- a/node_modules/micromatch/index.js +++ /dev/null @@ -1,877 +0,0 @@ -'use strict'; - -/** - * Module dependencies - */ - -var util = require('util'); -var braces = require('braces'); -var toRegex = require('to-regex'); -var extend = require('extend-shallow'); - -/** - * Local dependencies - */ - -var compilers = require('./lib/compilers'); -var parsers = require('./lib/parsers'); -var cache = require('./lib/cache'); -var utils = require('./lib/utils'); -var MAX_LENGTH = 1024 * 64; - -/** - * The main function takes a list of strings and one or more - * glob patterns to use for matching. - * - * ```js - * var mm = require('micromatch'); - * mm(list, patterns[, options]); - * - * console.log(mm(['a.js', 'a.txt'], ['*.js'])); - * //=> [ 'a.js' ] - * ``` - * @param {Array} `list` A 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) for changing how matches are performed - * @return {Array} Returns an array of matches - * @summary false - * @api public - */ - -function micromatch(list, patterns, options) { - patterns = utils.arrayify(patterns); - list = utils.arrayify(list); - - var len = patterns.length; - if (list.length === 0 || len === 0) { - return []; - } - - if (len === 1) { - return micromatch.match(list, patterns[0], options); - } - - var omit = []; - var keep = []; - var idx = -1; - - while (++idx < len) { - var pattern = patterns[idx]; - - if (typeof pattern === 'string' && pattern.charCodeAt(0) === 33 /* ! */) { - omit.push.apply(omit, micromatch.match(list, pattern.slice(1), options)); - } else { - keep.push.apply(keep, micromatch.match(list, pattern, options)); - } - } - - var matches = utils.diff(keep, omit); - if (!options || options.nodupes !== false) { - return utils.unique(matches); - } - - return matches; -} - -/** - * Similar to the main function, but `pattern` must be a string. - * - * ```js - * var mm = require('micromatch'); - * mm.match(list, pattern[, options]); - * - * console.log(mm.match(['a.a', 'a.aa', 'a.b', 'a.c'], '*.a')); - * //=> ['a.a', 'a.aa'] - * ``` - * @param {Array} `list` Array of strings to match - * @param {String} `pattern` 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 matches - * @api public - */ - -micromatch.match = function(list, pattern, options) { - if (Array.isArray(pattern)) { - throw new TypeError('expected pattern to be a string'); - } - - var unixify = utils.unixify(options); - var isMatch = memoize('match', pattern, options, micromatch.matcher); - var matches = []; - - list = utils.arrayify(list); - var len = list.length; - var idx = -1; - - while (++idx < len) { - var ele = list[idx]; - if (ele === pattern || isMatch(ele)) { - matches.push(utils.value(ele, unixify, options)); - } - } - - // if no options were passed, uniquify results and return - if (typeof options === 'undefined') { - return utils.unique(matches); - } - - if (matches.length === 0) { - if (options.failglob === true) { - throw new Error('no matches found for "' + pattern + '"'); - } - if (options.nonull === true || options.nullglob === true) { - return [options.unescape ? utils.unescape(pattern) : pattern]; - } - } - - // if `opts.ignore` was defined, diff ignored list - if (options.ignore) { - matches = micromatch.not(matches, options.ignore, options); - } - - return options.nodupes !== false ? utils.unique(matches) : matches; -}; - -/** - * Returns true if the specified `string` matches the given glob `pattern`. - * - * ```js - * var mm = require('micromatch'); - * mm.isMatch(string, pattern[, options]); - * - * console.log(mm.isMatch('a.a', '*.a')); - * //=> true - * console.log(mm.isMatch('a.b', '*.a')); - * //=> false - * ``` - * @param {String} `string` String to match - * @param {String} `pattern` Glob pattern to use for matching. - * @param {Object} `options` See available [options](#options) for changing how matches are performed - * @return {Boolean} Returns true if the string matches the glob pattern. - * @api public - */ - -micromatch.isMatch = function(str, pattern, options) { - if (typeof str !== 'string') { - throw new TypeError('expected a string: "' + util.inspect(str) + '"'); - } - - if (isEmptyString(str) || isEmptyString(pattern)) { - return false; - } - - var equals = utils.equalsPattern(options); - if (equals(str)) { - return true; - } - - var isMatch = memoize('isMatch', pattern, options, micromatch.matcher); - return isMatch(str); -}; - -/** - * Returns true if some of the strings in the given `list` match any of the - * given glob `patterns`. - * - * ```js - * var 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 match `str` - * @api public - */ - -micromatch.some = function(list, patterns, options) { - if (typeof list === 'string') { - list = [list]; - } - for (var i = 0; i < list.length; i++) { - if (micromatch(list[i], patterns, options).length === 1) { - return true; - } - } - return false; -}; - -/** - * Returns true if every string in the given `list` matches - * any of the given glob `patterns`. - * - * ```js - * var 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 any patterns match `str` - * @api public - */ - -micromatch.every = function(list, patterns, options) { - if (typeof list === 'string') { - list = [list]; - } - for (var i = 0; i < list.length; i++) { - if (micromatch(list[i], patterns, options).length !== 1) { - return false; - } - } - return true; -}; - -/** - * Returns true if **any** of the given glob `patterns` - * match the specified `string`. - * - * ```js - * var mm = require('micromatch'); - * mm.any(string, patterns[, options]); - * - * console.log(mm.any('a.a', ['b.*', '*.a'])); - * //=> true - * console.log(mm.any('a.a', 'b.*')); - * //=> false - * ``` - * @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 - */ - -micromatch.any = function(str, patterns, options) { - if (typeof str !== 'string') { - throw new TypeError('expected a string: "' + util.inspect(str) + '"'); - } - - if (isEmptyString(str) || isEmptyString(patterns)) { - return false; - } - - if (typeof patterns === 'string') { - patterns = [patterns]; - } - - for (var i = 0; i < patterns.length; i++) { - if (micromatch.isMatch(str, patterns[i], options)) { - return true; - } - } - return false; -}; - -/** - * Returns true if **all** of the given `patterns` match - * the specified string. - * - * ```js - * var 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 - */ - -micromatch.all = function(str, patterns, options) { - if (typeof str !== 'string') { - throw new TypeError('expected a string: "' + util.inspect(str) + '"'); - } - if (typeof patterns === 'string') { - patterns = [patterns]; - } - for (var i = 0; i < patterns.length; i++) { - if (!micromatch.isMatch(str, patterns[i], options)) { - return false; - } - } - return true; -}; - -/** - * Returns a list of strings that _**do not match any**_ of the given `patterns`. - * - * ```js - * var 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 - */ - -micromatch.not = function(list, patterns, options) { - var opts = extend({}, options); - var ignore = opts.ignore; - delete opts.ignore; - - var unixify = utils.unixify(opts); - list = utils.arrayify(list).map(unixify); - - var matches = utils.diff(list, micromatch(list, patterns, opts)); - if (ignore) { - matches = utils.diff(matches, micromatch(list, ignore)); - } - - return opts.nodupes !== false ? utils.unique(matches) : matches; -}; - -/** - * 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 the patter matches any part of `str`. - * @api public - */ - -micromatch.contains = function(str, patterns, options) { - if (typeof str !== 'string') { - throw new TypeError('expected a string: "' + util.inspect(str) + '"'); - } - - if (typeof patterns === 'string') { - if (isEmptyString(str) || isEmptyString(patterns)) { - return false; - } - - var equals = utils.equalsPattern(patterns, options); - if (equals(str)) { - return true; - } - var contains = utils.containsPattern(patterns, options); - if (contains(str)) { - return true; - } - } - - var opts = extend({}, options, {contains: true}); - return micromatch.any(str, patterns, opts); -}; - -/** - * Returns true if the given pattern and options should enable - * the `matchBase` option. - * @return {Boolean} - * @api private - */ - -micromatch.matchBase = function(pattern, options) { - if (pattern && pattern.indexOf('/') !== -1 || !options) return false; - return options.basename === true || options.matchBase === 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 - * var mm = require('micromatch'); - * mm.matchKeys(object, patterns[, options]); - * - * var 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 - */ - -micromatch.matchKeys = function(obj, patterns, options) { - if (!utils.isObject(obj)) { - throw new TypeError('expected the first argument to be an object'); - } - var keys = micromatch(Object.keys(obj), patterns, options); - return utils.pick(obj, keys); -}; - -/** - * Returns a memoized 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 - * var mm = require('micromatch'); - * mm.matcher(pattern[, options]); - * - * var isMatch = mm.matcher('*.!(*a)'); - * console.log(isMatch('a.a')); - * //=> false - * console.log(isMatch('a.b')); - * //=> true - * ``` - * @param {String} `pattern` Glob pattern - * @param {Object} `options` See available [options](#options) for changing how matches are performed. - * @return {Function} Returns a matcher function. - * @api public - */ - -micromatch.matcher = function matcher(pattern, options) { - if (Array.isArray(pattern)) { - return compose(pattern, options, matcher); - } - - // if pattern is a regex - if (pattern instanceof RegExp) { - return test(pattern); - } - - // if pattern is invalid - if (!utils.isString(pattern)) { - throw new TypeError('expected pattern to be an array, string or regex'); - } - - // if pattern is a non-glob string - if (!utils.hasSpecialChars(pattern)) { - if (options && options.nocase === true) { - pattern = pattern.toLowerCase(); - } - return utils.matchPath(pattern, options); - } - - // if pattern is a glob string - var re = micromatch.makeRe(pattern, options); - - // if `options.matchBase` or `options.basename` is defined - if (micromatch.matchBase(pattern, options)) { - return utils.matchBasename(re, options); - } - - function test(regex) { - var equals = utils.equalsPattern(options); - var unixify = utils.unixify(options); - - return function(str) { - if (equals(str)) { - return true; - } - - if (regex.test(unixify(str))) { - return true; - } - return false; - }; - } - - var fn = test(re); - Object.defineProperty(fn, 'result', { - configurable: true, - enumerable: false, - value: re.result - }); - return fn; -}; - -/** - * Returns an array of matches captured by `pattern` in `string, or `null` if the pattern did not match. - * - * ```js - * var 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} `pattern` Glob pattern to use for matching. - * @param {String} `string` String to match - * @param {Object} `options` See available [options](#options) for changing how matches are performed - * @return {Boolean} Returns an array of captures if the string matches the glob pattern, otherwise `null`. - * @api public - */ - -micromatch.capture = function(pattern, str, options) { - var re = micromatch.makeRe(pattern, extend({capture: true}, options)); - var unixify = utils.unixify(options); - - function match() { - return function(string) { - var match = re.exec(unixify(string)); - if (!match) { - return null; - } - - return match.slice(1); - }; - } - - var capture = memoize('capture', pattern, options, match); - return capture(str); -}; - -/** - * Create a regular expression from the given glob `pattern`. - * - * ```js - * var 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` See available [options](#options) for changing how matches are performed. - * @return {RegExp} Returns a regex created from the given pattern. - * @api public - */ - -micromatch.makeRe = function(pattern, options) { - if (typeof pattern !== 'string') { - throw new TypeError('expected pattern to be a string'); - } - - if (pattern.length > MAX_LENGTH) { - throw new Error('expected pattern to be less than ' + MAX_LENGTH + ' characters'); - } - - function makeRe() { - var result = micromatch.create(pattern, options); - var ast_array = []; - var output = result.map(function(obj) { - obj.ast.state = obj.state; - ast_array.push(obj.ast); - return obj.output; - }); - - var regex = toRegex(output.join('|'), options); - Object.defineProperty(regex, 'result', { - configurable: true, - enumerable: false, - value: ast_array - }); - return regex; - } - - return memoize('makeRe', pattern, options, makeRe); -}; - -/** - * Expand the given brace `pattern`. - * - * ```js - * var mm = require('micromatch'); - * console.log(mm.braces('foo/{a,b}/bar')); - * //=> ['foo/(a|b)/bar'] - * - * console.log(mm.braces('foo/{a,b}/bar', {expand: true})); - * //=> ['foo/(a|b)/bar'] - * ``` - * @param {String} `pattern` String with brace pattern to expand. - * @param {Object} `options` Any [options](#options) to change how expansion is performed. See the [braces][] library for all available options. - * @return {Array} - * @api public - */ - -micromatch.braces = function(pattern, options) { - if (typeof pattern !== 'string' && !Array.isArray(pattern)) { - throw new TypeError('expected pattern to be an array or string'); - } - - function expand() { - if (options && options.nobrace === true || !/\{.*\}/.test(pattern)) { - return utils.arrayify(pattern); - } - return braces(pattern, options); - } - - return memoize('braces', pattern, options, expand); -}; - -/** - * Proxy to the [micromatch.braces](#method), for parity with - * minimatch. - */ - -micromatch.braceExpand = function(pattern, options) { - var opts = extend({}, options, {expand: true}); - return micromatch.braces(pattern, opts); -}; - -/** - * Parses the given glob `pattern` and returns an array of abstract syntax - * trees (ASTs), with the compiled `output` and optional source `map` on - * each AST. - * - * ```js - * var mm = require('micromatch'); - * mm.create(pattern[, options]); - * - * console.log(mm.create('abc/*.js')); - * // [{ options: { source: 'string', sourcemap: true }, - * // state: {}, - * // compilers: - * // { ... }, - * // output: '(\\.[\\\\\\/])?abc\\/(?!\\.)(?=.)[^\\/]*?\\.js', - * // ast: - * // { type: 'root', - * // errors: [], - * // nodes: - * // [ ... ], - * // dot: false, - * // input: 'abc/*.js' }, - * // parsingErrors: [], - * // map: - * // { version: 3, - * // sources: [ 'string' ], - * // names: [], - * // mappings: 'AAAA,GAAG,EAAC,kBAAC,EAAC,EAAE', - * // sourcesContent: [ 'abc/*.js' ] }, - * // position: { line: 1, column: 28 }, - * // content: {}, - * // files: {}, - * // idx: 6 }] - * ``` - * @param {String} `pattern` Glob pattern to parse and compile. - * @param {Object} `options` Any [options](#options) to change how parsing and compiling is performed. - * @return {Object} Returns an object with the parsed AST, compiled string and optional source map. - * @api public - */ - -micromatch.create = function(pattern, options) { - return memoize('create', pattern, options, function() { - function create(str, opts) { - return micromatch.compile(micromatch.parse(str, opts), opts); - } - - pattern = micromatch.braces(pattern, options); - var len = pattern.length; - var idx = -1; - var res = []; - - while (++idx < len) { - res.push(create(pattern[idx], options)); - } - return res; - }); -}; - -/** - * Parse the given `str` with the given `options`. - * - * ```js - * var mm = require('micromatch'); - * mm.parse(pattern[, options]); - * - * var ast = mm.parse('a/{b,c}/d'); - * console.log(ast); - * // { type: 'root', - * // errors: [], - * // input: 'a/{b,c}/d', - * // nodes: - * // [ { type: 'bos', val: '' }, - * // { type: 'text', val: 'a/' }, - * // { type: 'brace', - * // nodes: - * // [ { type: 'brace.open', val: '{' }, - * // { type: 'text', val: 'b,c' }, - * // { type: 'brace.close', val: '}' } ] }, - * // { type: 'text', val: '/d' }, - * // { type: 'eos', val: '' } ] } - * ``` - * @param {String} `str` - * @param {Object} `options` - * @return {Object} Returns an AST - * @api public - */ - -micromatch.parse = function(pattern, options) { - if (typeof pattern !== 'string') { - throw new TypeError('expected a string'); - } - - function parse() { - var snapdragon = utils.instantiate(null, options); - parsers(snapdragon, options); - - var ast = snapdragon.parse(pattern, options); - utils.define(ast, 'snapdragon', snapdragon); - ast.input = pattern; - return ast; - } - - return memoize('parse', pattern, options, parse); -}; - -/** - * Compile the given `ast` or string with the given `options`. - * - * ```js - * var mm = require('micromatch'); - * mm.compile(ast[, options]); - * - * var ast = mm.parse('a/{b,c}/d'); - * console.log(mm.compile(ast)); - * // { options: { source: 'string' }, - * // state: {}, - * // compilers: - * // { eos: [Function], - * // noop: [Function], - * // bos: [Function], - * // brace: [Function], - * // 'brace.open': [Function], - * // text: [Function], - * // 'brace.close': [Function] }, - * // output: [ 'a/(b|c)/d' ], - * // ast: - * // { ... }, - * // parsingErrors: [] } - * ``` - * @param {Object|String} `ast` - * @param {Object} `options` - * @return {Object} Returns an object that has an `output` property with the compiled string. - * @api public - */ - -micromatch.compile = function(ast, options) { - if (typeof ast === 'string') { - ast = micromatch.parse(ast, options); - } - - return memoize('compile', ast.input, options, function() { - var snapdragon = utils.instantiate(ast, options); - compilers(snapdragon, options); - return snapdragon.compile(ast, options); - }); -}; - -/** - * Clear the regex cache. - * - * ```js - * mm.clearCache(); - * ``` - * @api public - */ - -micromatch.clearCache = function() { - micromatch.cache.caches = {}; -}; - -/** - * Returns true if the given value is effectively an empty string - */ - -function isEmptyString(val) { - return String(val) === '' || String(val) === './'; -} - -/** - * Compose a matcher function with the given patterns. - * This allows matcher functions to be compiled once and - * called multiple times. - */ - -function compose(patterns, options, matcher) { - var matchers; - - return memoize('compose', String(patterns), options, function() { - return function(file) { - // delay composition until it's invoked the first time, - // after that it won't be called again - if (!matchers) { - matchers = []; - for (var i = 0; i < patterns.length; i++) { - matchers.push(matcher(patterns[i], options)); - } - } - - var len = matchers.length; - while (len--) { - if (matchers[len](file) === true) { - return true; - } - } - return false; - }; - }); -} - -/** - * Memoize a generated regex or function. A unique key is generated - * from the `type` (usually method name), the `pattern`, and - * user-defined options. - */ - -function memoize(type, pattern, options, fn) { - var key = utils.createKey(type + '=' + pattern, options); - - if (options && options.cache === false) { - return fn(pattern, options); - } - - if (cache.has(type, key)) { - return cache.get(type, key); - } - - var val = fn(pattern, options); - cache.set(type, key, val); - return val; -} - -/** - * Expose compiler, parser and cache on `micromatch` - */ - -micromatch.compilers = compilers; -micromatch.parsers = parsers; -micromatch.caches = cache.caches; - -/** - * Expose `micromatch` - * @type {Function} - */ - -module.exports = micromatch; diff --git a/node_modules/micromatch/lib/.DS_Store b/node_modules/micromatch/lib/.DS_Store deleted file mode 100644 index 5008ddfcf53c02e82d7eee2e57c38e5672ef89f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0 Extend an object with the properties of additional objects. node.js/javascript util. - -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 extend-shallow -``` - -## Usage - -```js -var extend = require('extend-shallow'); - -extend({a: 'b'}, {c: 'd'}) -//=> {a: 'b', c: 'd'} -``` - -Pass an empty object to shallow clone: - -```js -var obj = {}; -extend(obj, {a: 'b'}, {c: 'd'}) -//=> {a: 'b', c: 'd'} -``` - -## 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: - -* [extend-shallow](https://www.npmjs.com/package/extend-shallow): Extend an object with the properties of additional objects. node.js/javascript util. | [homepage](https://github.com/jonschlinkert/extend-shallow "Extend an object with the properties of additional objects. node.js/javascript util.") -* [for-in](https://www.npmjs.com/package/for-in): Iterate over the own and inherited enumerable properties of an object, and return an object… [more](https://github.com/jonschlinkert/for-in) | [homepage](https://github.com/jonschlinkert/for-in "Iterate over the own and inherited enumerable properties of an object, and return an object with properties that evaluate to true from the callback. Exit early by returning `false`. JavaScript/Node.js") -* [for-own](https://www.npmjs.com/package/for-own): Iterate over the own enumerable properties of an object, and return an object with properties… [more](https://github.com/jonschlinkert/for-own) | [homepage](https://github.com/jonschlinkert/for-own "Iterate over the own enumerable properties of an object, and return an object with properties that evaluate to true from the callback. Exit early by returning `false`. JavaScript/Node.js.") -* [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.") -* [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** | -| --- | --- | -| 33 | [jonschlinkert](https://github.com/jonschlinkert) | -| 1 | [pdehaan](https://github.com/pdehaan) | - -### Author - -**Jon Schlinkert** - -* [github/jonschlinkert](https://github.com/jonschlinkert) -* [twitter/jonschlinkert](https://twitter.com/jonschlinkert) - -### License - -Copyright © 2017, [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 November 19, 2017._ \ No newline at end of file diff --git a/node_modules/micromatch/node_modules/extend-shallow/index.js b/node_modules/micromatch/node_modules/extend-shallow/index.js deleted file mode 100644 index c9582f8..0000000 --- a/node_modules/micromatch/node_modules/extend-shallow/index.js +++ /dev/null @@ -1,60 +0,0 @@ -'use strict'; - -var isExtendable = require('is-extendable'); -var assignSymbols = require('assign-symbols'); - -module.exports = Object.assign || function(obj/*, objects*/) { - if (obj === null || typeof obj === 'undefined') { - throw new TypeError('Cannot convert undefined or null to object'); - } - if (!isObject(obj)) { - obj = {}; - } - for (var i = 1; i < arguments.length; i++) { - var val = arguments[i]; - if (isString(val)) { - val = toObject(val); - } - if (isObject(val)) { - assign(obj, val); - assignSymbols(obj, val); - } - } - return obj; -}; - -function assign(a, b) { - for (var key in b) { - if (hasOwn(b, key)) { - a[key] = b[key]; - } - } -} - -function isString(val) { - return (val && typeof val === 'string'); -} - -function toObject(str) { - var obj = {}; - for (var i in str) { - obj[i] = str[i]; - } - return obj; -} - -function isObject(val) { - return (val && typeof val === 'object') || isExtendable(val); -} - -/** - * Returns true if the given `key` is an own property of `obj`. - */ - -function hasOwn(obj, key) { - return Object.prototype.hasOwnProperty.call(obj, key); -} - -function isEnum(obj, key) { - return Object.prototype.propertyIsEnumerable.call(obj, key); -} diff --git a/node_modules/micromatch/node_modules/extend-shallow/package.json b/node_modules/micromatch/node_modules/extend-shallow/package.json deleted file mode 100644 index e5e9105..0000000 --- a/node_modules/micromatch/node_modules/extend-shallow/package.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "name": "extend-shallow", - "description": "Extend an object with the properties of additional objects. node.js/javascript util.", - "version": "3.0.2", - "homepage": "https://github.com/jonschlinkert/extend-shallow", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "contributors": [ - "Jon Schlinkert (http://twitter.com/jonschlinkert)", - "Peter deHaan (http://about.me/peterdehaan)" - ], - "repository": "jonschlinkert/extend-shallow", - "bugs": { - "url": "https://github.com/jonschlinkert/extend-shallow/issues" - }, - "license": "MIT", - "files": [ - "index.js" - ], - "main": "index.js", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "devDependencies": { - "array-slice": "^1.0.0", - "benchmarked": "^2.0.0", - "for-own": "^1.0.0", - "gulp-format-md": "^1.0.0", - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.1", - "minimist": "^1.2.0", - "mocha": "^3.5.3", - "object-assign": "^4.1.1" - }, - "keywords": [ - "assign", - "clone", - "extend", - "merge", - "obj", - "object", - "object-assign", - "object.assign", - "prop", - "properties", - "property", - "props", - "shallow", - "util", - "utility", - "utils", - "value" - ], - "verb": { - "toc": false, - "layout": "default", - "tasks": [ - "readme" - ], - "related": { - "list": [ - "extend-shallow", - "for-in", - "for-own", - "is-plain-object", - "isobject", - "kind-of" - ] - }, - "plugins": [ - "gulp-format-md" - ], - "lint": { - "reflinks": true - } - } -} diff --git a/node_modules/micromatch/node_modules/is-extendable/LICENSE b/node_modules/micromatch/node_modules/is-extendable/LICENSE deleted file mode 100644 index c0d7f13..0000000 --- a/node_modules/micromatch/node_modules/is-extendable/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015-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. \ No newline at end of file diff --git a/node_modules/micromatch/node_modules/is-extendable/README.md b/node_modules/micromatch/node_modules/is-extendable/README.md deleted file mode 100644 index 875b56a..0000000 --- a/node_modules/micromatch/node_modules/is-extendable/README.md +++ /dev/null @@ -1,88 +0,0 @@ -# is-extendable [![NPM version](https://img.shields.io/npm/v/is-extendable.svg?style=flat)](https://www.npmjs.com/package/is-extendable) [![NPM monthly downloads](https://img.shields.io/npm/dm/is-extendable.svg?style=flat)](https://npmjs.org/package/is-extendable) [![NPM total downloads](https://img.shields.io/npm/dt/is-extendable.svg?style=flat)](https://npmjs.org/package/is-extendable) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/is-extendable.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/is-extendable) - -> Returns true if a value is a plain object, array or function. - -## Install - -Install with [npm](https://www.npmjs.com/): - -```sh -$ npm install --save is-extendable -``` - -## Usage - -```js -var isExtendable = require('is-extendable'); -``` - -Returns true if the value is any of the following: - -* array -* plain object -* function - -## Notes - -All objects in JavaScript can have keys, but it's a pain to check for this, since we ether need to verify that the value is not `null` or `undefined` and: - -* the value is not a primitive, or -* that the object is a plain object, function or array - -Also note that an `extendable` object is not the same as an [extensible object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isExtensible), which is one that (in es6) is not sealed, frozen, or marked as non-extensible using `preventExtensions`. - -## Release history - -### v1.0.0 - 2017/07/20 - -**Breaking changes** - -* No longer considers date, regex or error objects to be extendable - -## About - -### Related projects - -* [assign-deep](https://www.npmjs.com/package/assign-deep): Deeply assign the enumerable properties and/or es6 Symbol properies of source objects to the target… [more](https://github.com/jonschlinkert/assign-deep) | [homepage](https://github.com/jonschlinkert/assign-deep "Deeply assign the enumerable properties and/or es6 Symbol properies of source objects to the target (first) object.") -* [is-equal-shallow](https://www.npmjs.com/package/is-equal-shallow): Does a shallow comparison of two objects, returning false if the keys or values differ. | [homepage](https://github.com/jonschlinkert/is-equal-shallow "Does a shallow comparison of two objects, returning false if the keys or values differ.") -* [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.") -* [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.") - -### Contributing - -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). - -### 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 -``` - -### 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 -``` - -### Author - -**Jon Schlinkert** - -* [github/jonschlinkert](https://github.com/jonschlinkert) -* [twitter/jonschlinkert](https://twitter.com/jonschlinkert) - -### License - -Copyright © 2017, [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 July 20, 2017._ \ No newline at end of file diff --git a/node_modules/micromatch/node_modules/is-extendable/index.d.ts b/node_modules/micromatch/node_modules/is-extendable/index.d.ts deleted file mode 100644 index b96d507..0000000 --- a/node_modules/micromatch/node_modules/is-extendable/index.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export = isExtendable; - -declare function isExtendable(val: any): boolean; - -declare namespace isExtendable {} diff --git a/node_modules/micromatch/node_modules/is-extendable/index.js b/node_modules/micromatch/node_modules/is-extendable/index.js deleted file mode 100644 index a8b26ad..0000000 --- a/node_modules/micromatch/node_modules/is-extendable/index.js +++ /dev/null @@ -1,14 +0,0 @@ -/*! - * is-extendable - * - * Copyright (c) 2015-2017, Jon Schlinkert. - * Released under the MIT License. - */ - -'use strict'; - -var isPlainObject = require('is-plain-object'); - -module.exports = function isExtendable(val) { - return isPlainObject(val) || typeof val === 'function' || Array.isArray(val); -}; diff --git a/node_modules/micromatch/node_modules/is-extendable/package.json b/node_modules/micromatch/node_modules/is-extendable/package.json deleted file mode 100644 index 2aaab65..0000000 --- a/node_modules/micromatch/node_modules/is-extendable/package.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "name": "is-extendable", - "description": "Returns true if a value is a plain object, array or function.", - "version": "1.0.1", - "homepage": "https://github.com/jonschlinkert/is-extendable", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "repository": "jonschlinkert/is-extendable", - "bugs": { - "url": "https://github.com/jonschlinkert/is-extendable/issues" - }, - "license": "MIT", - "files": [ - "index.js", - "index.d.ts" - ], - "main": "index.js", - "types": "index.d.ts", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "devDependencies": { - "gulp-format-md": "^1.0.0", - "mocha": "^3.4.2" - }, - "keywords": [ - "array", - "assign", - "check", - "date", - "extend", - "extendable", - "extensible", - "function", - "is", - "object", - "regex", - "test" - ], - "verb": { - "related": { - "list": [ - "assign-deep", - "is-equal-shallow", - "is-plain-object", - "isobject", - "kind-of" - ] - }, - "toc": false, - "layout": "default", - "tasks": [ - "readme" - ], - "plugins": [ - "gulp-format-md" - ], - "lint": { - "reflinks": true - } - } -} diff --git a/node_modules/micromatch/node_modules/kind-of/CHANGELOG.md b/node_modules/micromatch/node_modules/kind-of/CHANGELOG.md deleted file mode 100644 index 01687d5..0000000 --- a/node_modules/micromatch/node_modules/kind-of/CHANGELOG.md +++ /dev/null @@ -1,160 +0,0 @@ -# Release history - -All notable changes to this project will be documented in this file. - -The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) -and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). - -
    - Guiding Principles - -- Changelogs are for humans, not machines. -- There should be an entry for every single version. -- The same types of changes should be grouped. -- Versions and sections should be linkable. -- The latest version comes first. -- The release date of each versions is displayed. -- Mention whether you follow Semantic Versioning. - -
    - -
    - Types of changes - -Changelog entries are classified using the following labels _(from [keep-a-changelog](http://keepachangelog.com/)_): - -- `Added` for new features. -- `Changed` for changes in existing functionality. -- `Deprecated` for soon-to-be removed features. -- `Removed` for now removed features. -- `Fixed` for any bug fixes. -- `Security` in case of vulnerabilities. - -
    - -## [6.0.3] - 2020-01-16 - -- Merge pull request #31 for issue #30 - -## [6.0.0] - 2017-10-13 - -- refactor code to be more performant -- refactor benchmarks - -## [5.1.0] - 2017-10-13 - -**Added** - -- Merge pull request #15 from aretecode/patch-1 -- adds support and tests for string & array iterators - -**Changed** - -- updates benchmarks - -## [5.0.2] - 2017-08-02 - -- Merge pull request #14 from struct78/master -- Added `undefined` check - -## [5.0.0] - 2017-06-21 - -- Merge pull request #12 from aretecode/iterator -- Set Iterator + Map Iterator -- streamline `isbuffer`, minor edits - -## [4.0.0] - 2017-05-19 - -- Merge pull request #8 from tunnckoCore/master -- update deps - -## [3.2.2] - 2017-05-16 - -- fix version - -## [3.2.1] - 2017-05-16 - -- add browserify - -## [3.2.0] - 2017-04-25 - -- Merge pull request #10 from ksheedlo/unrequire-buffer -- add `promise` support and tests -- Remove unnecessary `Buffer` check - -## [3.1.0] - 2016-12-07 - -- Merge pull request #7 from laggingreflex/err -- add support for `error` and tests -- run update - -## [3.0.4] - 2016-07-29 - -- move tests -- run update - -## [3.0.3] - 2016-05-03 - -- fix prepublish script -- remove unused dep - -## [3.0.0] - 2015-11-17 - -- add typed array support -- Merge pull request #5 from miguelmota/typed-arrays -- adds new tests - -## [2.0.1] - 2015-08-21 - -- use `is-buffer` module - -## [2.0.0] - 2015-05-31 - -- Create fallback for `Array.isArray` if used as a browser package -- Merge pull request #2 from dtothefp/patch-1 -- Merge pull request #3 from pdehaan/patch-1 -- Merge branch 'master' of https://github.com/chorks/kind-of into chorks-master -- optimizations, mostly date and regex - -## [1.1.0] - 2015-02-09 - -- adds `buffer` support -- adds tests for `buffer` - -## [1.0.0] - 2015-01-19 - -- update benchmarks -- optimizations based on benchmarks - -## [0.1.2] - 2014-10-26 - -- return `typeof` value if it's not an object. very slight speed improvement -- use `.slice` -- adds benchmarks - -## [0.1.0] - 2014-9-26 - -- first commit - -[6.0.0]: https://github.com/jonschlinkert/kind-of/compare/5.1.0...6.0.0 -[5.1.0]: https://github.com/jonschlinkert/kind-of/compare/5.0.2...5.1.0 -[5.0.2]: https://github.com/jonschlinkert/kind-of/compare/5.0.1...5.0.2 -[5.0.1]: https://github.com/jonschlinkert/kind-of/compare/5.0.0...5.0.1 -[5.0.0]: https://github.com/jonschlinkert/kind-of/compare/4.0.0...5.0.0 -[4.0.0]: https://github.com/jonschlinkert/kind-of/compare/3.2.2...4.0.0 -[3.2.2]: https://github.com/jonschlinkert/kind-of/compare/3.2.1...3.2.2 -[3.2.1]: https://github.com/jonschlinkert/kind-of/compare/3.2.0...3.2.1 -[3.2.0]: https://github.com/jonschlinkert/kind-of/compare/3.1.0...3.2.0 -[3.1.0]: https://github.com/jonschlinkert/kind-of/compare/3.0.4...3.1.0 -[3.0.4]: https://github.com/jonschlinkert/kind-of/compare/3.0.3...3.0.4 -[3.0.3]: https://github.com/jonschlinkert/kind-of/compare/3.0.0...3.0.3 -[3.0.0]: https://github.com/jonschlinkert/kind-of/compare/2.0.1...3.0.0 -[2.0.1]: https://github.com/jonschlinkert/kind-of/compare/2.0.0...2.0.1 -[2.0.0]: https://github.com/jonschlinkert/kind-of/compare/1.1.0...2.0.0 -[1.1.0]: https://github.com/jonschlinkert/kind-of/compare/1.0.0...1.1.0 -[1.0.0]: https://github.com/jonschlinkert/kind-of/compare/0.1.2...1.0.0 -[0.1.2]: https://github.com/jonschlinkert/kind-of/compare/0.1.0...0.1.2 -[0.1.0]: https://github.com/jonschlinkert/kind-of/commit/2fae09b0b19b1aadb558e9be39f0c3ef6034eb87 - -[Unreleased]: https://github.com/jonschlinkert/kind-of/compare/0.1.2...HEAD -[keep-a-changelog]: https://github.com/olivierlacan/keep-a-changelog \ No newline at end of file diff --git a/node_modules/micromatch/node_modules/kind-of/LICENSE b/node_modules/micromatch/node_modules/kind-of/LICENSE deleted file mode 100644 index 3f2eca1..0000000 --- a/node_modules/micromatch/node_modules/kind-of/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -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/micromatch/node_modules/kind-of/README.md b/node_modules/micromatch/node_modules/kind-of/README.md deleted file mode 100644 index 0411dc5..0000000 --- a/node_modules/micromatch/node_modules/kind-of/README.md +++ /dev/null @@ -1,367 +0,0 @@ -# kind-of [![NPM version](https://img.shields.io/npm/v/kind-of.svg?style=flat)](https://www.npmjs.com/package/kind-of) [![NPM monthly downloads](https://img.shields.io/npm/dm/kind-of.svg?style=flat)](https://npmjs.org/package/kind-of) [![NPM total downloads](https://img.shields.io/npm/dt/kind-of.svg?style=flat)](https://npmjs.org/package/kind-of) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/kind-of.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/kind-of) - -> Get the native type of a value. - -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 kind-of -``` - -Install with [bower](https://bower.io/) - -```sh -$ bower install kind-of --save -``` - -## Why use this? - -1. [it's fast](#benchmarks) | [optimizations](#optimizations) -2. [better type checking](#better-type-checking) - -## Usage - -> es5, es6, and browser ready - -```js -var kindOf = require('kind-of'); - -kindOf(undefined); -//=> 'undefined' - -kindOf(null); -//=> 'null' - -kindOf(true); -//=> 'boolean' - -kindOf(false); -//=> 'boolean' - -kindOf(new Buffer('')); -//=> 'buffer' - -kindOf(42); -//=> 'number' - -kindOf('str'); -//=> 'string' - -kindOf(arguments); -//=> 'arguments' - -kindOf({}); -//=> 'object' - -kindOf(Object.create(null)); -//=> 'object' - -kindOf(new Test()); -//=> 'object' - -kindOf(new Date()); -//=> 'date' - -kindOf([1, 2, 3]); -//=> 'array' - -kindOf(/foo/); -//=> 'regexp' - -kindOf(new RegExp('foo')); -//=> 'regexp' - -kindOf(new Error('error')); -//=> 'error' - -kindOf(function () {}); -//=> 'function' - -kindOf(function * () {}); -//=> 'generatorfunction' - -kindOf(Symbol('str')); -//=> 'symbol' - -kindOf(new Map()); -//=> 'map' - -kindOf(new WeakMap()); -//=> 'weakmap' - -kindOf(new Set()); -//=> 'set' - -kindOf(new WeakSet()); -//=> 'weakset' - -kindOf(new Int8Array()); -//=> 'int8array' - -kindOf(new Uint8Array()); -//=> 'uint8array' - -kindOf(new Uint8ClampedArray()); -//=> 'uint8clampedarray' - -kindOf(new Int16Array()); -//=> 'int16array' - -kindOf(new Uint16Array()); -//=> 'uint16array' - -kindOf(new Int32Array()); -//=> 'int32array' - -kindOf(new Uint32Array()); -//=> 'uint32array' - -kindOf(new Float32Array()); -//=> 'float32array' - -kindOf(new Float64Array()); -//=> 'float64array' -``` - -## Benchmarks - -Benchmarked against [typeof](http://github.com/CodingFu/typeof) and [type-of](https://github.com/ForbesLindesay/type-of). - -```bash -# arguments (32 bytes) - kind-of x 17,024,098 ops/sec ±1.90% (86 runs sampled) - lib-type-of x 11,926,235 ops/sec ±1.34% (83 runs sampled) - lib-typeof x 9,245,257 ops/sec ±1.22% (87 runs sampled) - - fastest is kind-of (by 161% avg) - -# array (22 bytes) - kind-of x 17,196,492 ops/sec ±1.07% (88 runs sampled) - lib-type-of x 8,838,283 ops/sec ±1.02% (87 runs sampled) - lib-typeof x 8,677,848 ops/sec ±0.87% (87 runs sampled) - - fastest is kind-of (by 196% avg) - -# boolean (24 bytes) - kind-of x 16,841,600 ops/sec ±1.10% (86 runs sampled) - lib-type-of x 8,096,787 ops/sec ±0.95% (87 runs sampled) - lib-typeof x 8,423,345 ops/sec ±1.15% (86 runs sampled) - - fastest is kind-of (by 204% avg) - -# buffer (38 bytes) - kind-of x 14,848,060 ops/sec ±1.05% (86 runs sampled) - lib-type-of x 3,671,577 ops/sec ±1.49% (87 runs sampled) - lib-typeof x 8,360,236 ops/sec ±1.24% (86 runs sampled) - - fastest is kind-of (by 247% avg) - -# date (30 bytes) - kind-of x 16,067,761 ops/sec ±1.58% (86 runs sampled) - lib-type-of x 8,954,436 ops/sec ±1.40% (87 runs sampled) - lib-typeof x 8,488,307 ops/sec ±1.51% (84 runs sampled) - - fastest is kind-of (by 184% avg) - -# error (36 bytes) - kind-of x 9,634,090 ops/sec ±1.12% (89 runs sampled) - lib-type-of x 7,735,624 ops/sec ±1.32% (86 runs sampled) - lib-typeof x 7,442,160 ops/sec ±1.11% (90 runs sampled) - - fastest is kind-of (by 127% avg) - -# function (34 bytes) - kind-of x 10,031,494 ops/sec ±1.27% (86 runs sampled) - lib-type-of x 9,502,757 ops/sec ±1.17% (89 runs sampled) - lib-typeof x 8,278,985 ops/sec ±1.08% (88 runs sampled) - - fastest is kind-of (by 113% avg) - -# null (24 bytes) - kind-of x 18,159,808 ops/sec ±1.92% (86 runs sampled) - lib-type-of x 12,927,635 ops/sec ±1.01% (88 runs sampled) - lib-typeof x 7,958,234 ops/sec ±1.21% (89 runs sampled) - - fastest is kind-of (by 174% avg) - -# number (22 bytes) - kind-of x 17,846,779 ops/sec ±0.91% (85 runs sampled) - lib-type-of x 3,316,636 ops/sec ±1.19% (86 runs sampled) - lib-typeof x 2,329,477 ops/sec ±2.21% (85 runs sampled) - - fastest is kind-of (by 632% avg) - -# object-plain (47 bytes) - kind-of x 7,085,155 ops/sec ±1.05% (88 runs sampled) - lib-type-of x 8,870,930 ops/sec ±1.06% (83 runs sampled) - lib-typeof x 8,716,024 ops/sec ±1.05% (87 runs sampled) - - fastest is lib-type-of (by 112% avg) - -# regex (25 bytes) - kind-of x 14,196,052 ops/sec ±1.65% (84 runs sampled) - lib-type-of x 9,554,164 ops/sec ±1.25% (88 runs sampled) - lib-typeof x 8,359,691 ops/sec ±1.07% (87 runs sampled) - - fastest is kind-of (by 158% avg) - -# string (33 bytes) - kind-of x 16,131,428 ops/sec ±1.41% (85 runs sampled) - lib-type-of x 7,273,172 ops/sec ±1.05% (87 runs sampled) - lib-typeof x 7,382,635 ops/sec ±1.17% (85 runs sampled) - - fastest is kind-of (by 220% avg) - -# symbol (34 bytes) - kind-of x 17,011,537 ops/sec ±1.24% (86 runs sampled) - lib-type-of x 3,492,454 ops/sec ±1.23% (89 runs sampled) - lib-typeof x 7,471,235 ops/sec ±2.48% (87 runs sampled) - - fastest is kind-of (by 310% avg) - -# template-strings (36 bytes) - kind-of x 15,434,250 ops/sec ±1.46% (83 runs sampled) - lib-type-of x 7,157,907 ops/sec ±0.97% (87 runs sampled) - lib-typeof x 7,517,986 ops/sec ±0.92% (86 runs sampled) - - fastest is kind-of (by 210% avg) - -# undefined (29 bytes) - kind-of x 19,167,115 ops/sec ±1.71% (87 runs sampled) - lib-type-of x 15,477,740 ops/sec ±1.63% (85 runs sampled) - lib-typeof x 19,075,495 ops/sec ±1.17% (83 runs sampled) - - fastest is lib-typeof,kind-of - -``` - -## Optimizations - -In 7 out of 8 cases, this library is 2x-10x faster than other top libraries included in the benchmarks. There are a few things that lead to this performance advantage, none of them hard and fast rules, but all of them simple and repeatable in almost any code library: - -1. Optimize around the fastest and most common use cases first. Of course, this will change from project-to-project, but I took some time to understand how and why `typeof` checks were being used in my own libraries and other libraries I use a lot. -2. Optimize around bottlenecks - In other words, the order in which conditionals are implemented is significant, because each check is only as fast as the failing checks that came before it. Here, the biggest bottleneck by far is checking for plain objects (an object that was created by the `Object` constructor). I opted to make this check happen by process of elimination rather than brute force up front (e.g. by using something like `val.constructor.name`), so that every other type check would not be penalized it. -3. Don't do uneccessary processing - why do `.slice(8, -1).toLowerCase();` just to get the word `regex`? It's much faster to do `if (type === '[object RegExp]') return 'regex'` -4. There is no reason to make the code in a microlib as terse as possible, just to win points for making it shorter. It's always better to favor performant code over terse code. You will always only be using a single `require()` statement to use the library anyway, regardless of how the code is written. - -## Better type checking - -kind-of seems to be more consistently "correct" than other type checking libs I've looked at. For example, here are some differing results from other popular libs: - -### [typeof](https://github.com/CodingFu/typeof) lib - -Incorrectly identifies instances of custom constructors (pretty common): - -```js -var typeOf = require('typeof'); -function Test() {} -console.log(typeOf(new Test())); -//=> 'test' -``` - -Returns `object` instead of `arguments`: - -```js -function foo() { - console.log(typeOf(arguments)) //=> 'object' -} -foo(); -``` - -### [type-of](https://github.com/ForbesLindesay/type-of) lib - -Incorrectly returns `object` for generator functions, buffers, `Map`, `Set`, `WeakMap` and `WeakSet`: - -```js -function * foo() {} -console.log(typeOf(foo)); -//=> 'object' -console.log(typeOf(new Buffer(''))); -//=> 'object' -console.log(typeOf(new Map())); -//=> 'object' -console.log(typeOf(new Set())); -//=> 'object' -console.log(typeOf(new WeakMap())); -//=> 'object' -console.log(typeOf(new WeakSet())); -//=> 'object' -``` - -## 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-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/micromatch/is-glob) | [homepage](https://github.com/micromatch/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") -* [is-number](https://www.npmjs.com/package/is-number): Returns true if a number or string value is a finite number. Useful for regex… [more](https://github.com/jonschlinkert/is-number) | [homepage](https://github.com/jonschlinkert/is-number "Returns true if a number or string value is a finite number. Useful for regex matches, parsing, user input, etc.") -* [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. ") - -### Contributors - -| **Commits** | **Contributor** | -| --- | --- | -| 102 | [jonschlinkert](https://github.com/jonschlinkert) | -| 3 | [aretecode](https://github.com/aretecode) | -| 2 | [miguelmota](https://github.com/miguelmota) | -| 1 | [doowb](https://github.com/doowb) | -| 1 | [dtothefp](https://github.com/dtothefp) | -| 1 | [ianstormtaylor](https://github.com/ianstormtaylor) | -| 1 | [ksheedlo](https://github.com/ksheedlo) | -| 1 | [pdehaan](https://github.com/pdehaan) | -| 1 | [laggingreflex](https://github.com/laggingreflex) | -| 1 | [tunnckoCore](https://github.com/tunnckoCore) | -| 1 | [xiaofen9](https://github.com/xiaofen9) | - -### Author - -**Jon Schlinkert** - -* [GitHub Profile](https://github.com/jonschlinkert) -* [Twitter Profile](https://twitter.com/jonschlinkert) -* [LinkedIn Profile](https://linkedin.com/in/jonschlinkert) - -### License - -Copyright © 2020, [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 January 16, 2020._ \ No newline at end of file diff --git a/node_modules/micromatch/node_modules/kind-of/index.js b/node_modules/micromatch/node_modules/kind-of/index.js deleted file mode 100644 index dfa799b..0000000 --- a/node_modules/micromatch/node_modules/kind-of/index.js +++ /dev/null @@ -1,129 +0,0 @@ -var toString = Object.prototype.toString; - -module.exports = function kindOf(val) { - if (val === void 0) return 'undefined'; - if (val === null) return 'null'; - - var type = typeof val; - if (type === 'boolean') return 'boolean'; - if (type === 'string') return 'string'; - if (type === 'number') return 'number'; - if (type === 'symbol') return 'symbol'; - if (type === 'function') { - return isGeneratorFn(val) ? 'generatorfunction' : 'function'; - } - - if (isArray(val)) return 'array'; - if (isBuffer(val)) return 'buffer'; - if (isArguments(val)) return 'arguments'; - if (isDate(val)) return 'date'; - if (isError(val)) return 'error'; - if (isRegexp(val)) return 'regexp'; - - switch (ctorName(val)) { - case 'Symbol': return 'symbol'; - case 'Promise': return 'promise'; - - // Set, Map, WeakSet, WeakMap - case 'WeakMap': return 'weakmap'; - case 'WeakSet': return 'weakset'; - case 'Map': return 'map'; - case 'Set': return 'set'; - - // 8-bit typed arrays - case 'Int8Array': return 'int8array'; - case 'Uint8Array': return 'uint8array'; - case 'Uint8ClampedArray': return 'uint8clampedarray'; - - // 16-bit typed arrays - case 'Int16Array': return 'int16array'; - case 'Uint16Array': return 'uint16array'; - - // 32-bit typed arrays - case 'Int32Array': return 'int32array'; - case 'Uint32Array': return 'uint32array'; - case 'Float32Array': return 'float32array'; - case 'Float64Array': return 'float64array'; - } - - if (isGeneratorObj(val)) { - return 'generator'; - } - - // Non-plain objects - type = toString.call(val); - switch (type) { - case '[object Object]': return 'object'; - // iterators - case '[object Map Iterator]': return 'mapiterator'; - case '[object Set Iterator]': return 'setiterator'; - case '[object String Iterator]': return 'stringiterator'; - case '[object Array Iterator]': return 'arrayiterator'; - } - - // other - return type.slice(8, -1).toLowerCase().replace(/\s/g, ''); -}; - -function ctorName(val) { - return typeof val.constructor === 'function' ? val.constructor.name : null; -} - -function isArray(val) { - if (Array.isArray) return Array.isArray(val); - return val instanceof Array; -} - -function isError(val) { - return val instanceof Error || (typeof val.message === 'string' && val.constructor && typeof val.constructor.stackTraceLimit === 'number'); -} - -function isDate(val) { - if (val instanceof Date) return true; - return typeof val.toDateString === 'function' - && typeof val.getDate === 'function' - && typeof val.setDate === 'function'; -} - -function isRegexp(val) { - if (val instanceof RegExp) return true; - return typeof val.flags === 'string' - && typeof val.ignoreCase === 'boolean' - && typeof val.multiline === 'boolean' - && typeof val.global === 'boolean'; -} - -function isGeneratorFn(name, val) { - return ctorName(name) === 'GeneratorFunction'; -} - -function isGeneratorObj(val) { - return typeof val.throw === 'function' - && typeof val.return === 'function' - && typeof val.next === 'function'; -} - -function isArguments(val) { - try { - if (typeof val.length === 'number' && typeof val.callee === 'function') { - return true; - } - } catch (err) { - if (err.message.indexOf('callee') !== -1) { - return true; - } - } - return false; -} - -/** - * If you need to support Safari 5-7 (8-10 yr-old browser), - * take a look at https://github.com/feross/is-buffer - */ - -function isBuffer(val) { - if (val.constructor && typeof val.constructor.isBuffer === 'function') { - return val.constructor.isBuffer(val); - } - return false; -} diff --git a/node_modules/micromatch/node_modules/kind-of/package.json b/node_modules/micromatch/node_modules/kind-of/package.json deleted file mode 100644 index 5820cad..0000000 --- a/node_modules/micromatch/node_modules/kind-of/package.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "name": "kind-of", - "description": "Get the native type of a value.", - "version": "6.0.3", - "homepage": "https://github.com/jonschlinkert/kind-of", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "contributors": [ - "David Fox-Powell (https://dtothefp.github.io/me)", - "James (https://twitter.com/aretecode)", - "Jon Schlinkert (http://twitter.com/jonschlinkert)", - "Ken Sheedlo (kensheedlo.com)", - "laggingreflex (https://github.com/laggingreflex)", - "Miguel Mota (https://miguelmota.com)", - "Peter deHaan (http://about.me/peterdehaan)", - "tunnckoCore (https://i.am.charlike.online)" - ], - "repository": "jonschlinkert/kind-of", - "bugs": { - "url": "https://github.com/jonschlinkert/kind-of/issues" - }, - "license": "MIT", - "files": [ - "index.js" - ], - "main": "index.js", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha", - "prepublish": "browserify -o browser.js -e index.js -s index --bare" - }, - "devDependencies": { - "benchmarked": "^2.0.0", - "browserify": "^14.4.0", - "gulp-format-md": "^1.0.0", - "mocha": "^4.0.1", - "write": "^1.0.3" - }, - "keywords": [ - "arguments", - "array", - "boolean", - "check", - "date", - "function", - "is", - "is-type", - "is-type-of", - "kind", - "kind-of", - "number", - "object", - "of", - "regexp", - "string", - "test", - "type", - "type-of", - "typeof", - "types" - ], - "verb": { - "toc": false, - "layout": "default", - "tasks": [ - "readme" - ], - "plugins": [ - "gulp-format-md" - ], - "lint": { - "reflinks": true - }, - "related": { - "list": [ - "is-glob", - "is-number", - "is-primitive" - ] - }, - "reflinks": [ - "type-of", - "typeof", - "verb" - ] - } -} diff --git a/node_modules/micromatch/package.json b/node_modules/micromatch/package.json deleted file mode 100644 index 4475155..0000000 --- a/node_modules/micromatch/package.json +++ /dev/null @@ -1,147 +0,0 @@ -{ - "name": "micromatch", - "description": "Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch.", - "version": "3.1.10", - "homepage": "https://github.com/micromatch/micromatch", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "contributors": [ - "Amila Welihinda (amilajack.com)", - "Bogdan Chadkin (https://github.com/TrySound)", - "Brian Woodward (https://twitter.com/doowb)", - "Devon Govett (http://badassjs.com)", - "Elan Shanker (https://github.com/es128)", - "Fabrício Matté (https://ultcombo.js.org)", - "Jon Schlinkert (http://twitter.com/jonschlinkert)", - "Martin Kolárik (https://kolarik.sk)", - "Olsten Larck (https://i.am.charlike.online)", - "Paul Miller (paulmillr.com)", - "Tom Byrer (https://github.com/tomByrer)", - "Tyler Akins (http://rumkin.com)", - "(https://github.com/DianeLooney)" - ], - "repository": "micromatch/micromatch", - "bugs": { - "url": "https://github.com/micromatch/micromatch/issues" - }, - "license": "MIT", - "files": [ - "index.js", - "lib" - ], - "main": "index.js", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "devDependencies": { - "bash-match": "^1.0.2", - "for-own": "^1.0.0", - "gulp": "^3.9.1", - "gulp-format-md": "^1.0.0", - "gulp-istanbul": "^1.1.3", - "gulp-mocha": "^5.0.0", - "gulp-unused": "^0.2.1", - "is-windows": "^1.0.2", - "minimatch": "^3.0.4", - "minimist": "^1.2.0", - "mocha": "^3.5.3", - "multimatch": "^2.1.0" - }, - "keywords": [ - "bash", - "expand", - "expansion", - "expression", - "file", - "files", - "filter", - "find", - "glob", - "globbing", - "globs", - "globstar", - "match", - "matcher", - "matches", - "matching", - "micromatch", - "minimatch", - "multimatch", - "path", - "pattern", - "patterns", - "regex", - "regexp", - "regular", - "shell", - "wildcard" - ], - "lintDeps": { - "dependencies": { - "options": { - "lock": { - "snapdragon": "^0.8.1" - } - } - }, - "devDependencies": { - "files": { - "options": { - "ignore": [ - "benchmark/**" - ] - } - } - } - }, - "verb": { - "toc": "collapsible", - "layout": "default", - "tasks": [ - "readme" - ], - "plugins": [ - "gulp-format-md" - ], - "helpers": [ - "./benchmark/helper.js" - ], - "related": { - "list": [ - "braces", - "expand-brackets", - "extglob", - "fill-range", - "nanomatch" - ] - }, - "lint": { - "reflinks": true - }, - "reflinks": [ - "expand-brackets", - "extglob", - "glob-object", - "minimatch", - "multimatch", - "snapdragon" - ] - } -} diff --git a/node_modules/mime-db/HISTORY.md b/node_modules/mime-db/HISTORY.md deleted file mode 100644 index 7436f64..0000000 --- a/node_modules/mime-db/HISTORY.md +++ /dev/null @@ -1,507 +0,0 @@ -1.52.0 / 2022-02-21 -=================== - - * Add extensions from IANA for more `image/*` types - * Add extension `.asc` to `application/pgp-keys` - * Add extensions to various XML types - * Add new upstream MIME types - -1.51.0 / 2021-11-08 -=================== - - * Add new upstream MIME types - * Mark `image/vnd.microsoft.icon` as compressible - * Mark `image/vnd.ms-dds` as compressible - -1.50.0 / 2021-09-15 -=================== - - * Add deprecated iWorks mime types and extensions - * Add new upstream MIME types - -1.49.0 / 2021-07-26 -=================== - - * Add extension `.trig` to `application/trig` - * Add new upstream MIME types - -1.48.0 / 2021-05-30 -=================== - - * Add extension `.mvt` to `application/vnd.mapbox-vector-tile` - * Add new upstream MIME types - * Mark `text/yaml` as compressible - -1.47.0 / 2021-04-01 -=================== - - * Add new upstream MIME types - * Remove ambigious extensions from IANA for `application/*+xml` types - * Update primary extension to `.es` for `application/ecmascript` - -1.46.0 / 2021-02-13 -=================== - - * Add extension `.amr` to `audio/amr` - * Add extension `.m4s` to `video/iso.segment` - * Add extension `.opus` to `audio/ogg` - * Add new upstream MIME types - -1.45.0 / 2020-09-22 -=================== - - * Add `application/ubjson` with extension `.ubj` - * Add `image/avif` with extension `.avif` - * Add `image/ktx2` with extension `.ktx2` - * Add extension `.dbf` to `application/vnd.dbf` - * Add extension `.rar` to `application/vnd.rar` - * Add extension `.td` to `application/urc-targetdesc+xml` - * Add new upstream MIME types - * Fix extension of `application/vnd.apple.keynote` to be `.key` - -1.44.0 / 2020-04-22 -=================== - - * Add charsets from IANA - * Add extension `.cjs` to `application/node` - * Add new upstream MIME types - -1.43.0 / 2020-01-05 -=================== - - * Add `application/x-keepass2` with extension `.kdbx` - * Add extension `.mxmf` to `audio/mobile-xmf` - * Add extensions from IANA for `application/*+xml` types - * Add new upstream MIME types - -1.42.0 / 2019-09-25 -=================== - - * Add `image/vnd.ms-dds` with extension `.dds` - * Add new upstream MIME types - * Remove compressible from `multipart/mixed` - -1.41.0 / 2019-08-30 -=================== - - * Add new upstream MIME types - * Add `application/toml` with extension `.toml` - * Mark `font/ttf` as compressible - -1.40.0 / 2019-04-20 -=================== - - * Add extensions from IANA for `model/*` types - * Add `text/mdx` with extension `.mdx` - -1.39.0 / 2019-04-04 -=================== - - * Add extensions `.siv` and `.sieve` to `application/sieve` - * Add new upstream MIME types - -1.38.0 / 2019-02-04 -=================== - - * Add extension `.nq` to `application/n-quads` - * Add extension `.nt` to `application/n-triples` - * Add new upstream MIME types - * Mark `text/less` as compressible - -1.37.0 / 2018-10-19 -=================== - - * Add extensions to HEIC image types - * Add new upstream MIME types - -1.36.0 / 2018-08-20 -=================== - - * Add Apple file extensions from IANA - * Add extensions from IANA for `image/*` types - * Add new upstream MIME types - -1.35.0 / 2018-07-15 -=================== - - * Add extension `.owl` to `application/rdf+xml` - * Add new upstream MIME types - - Removes extension `.woff` from `application/font-woff` - -1.34.0 / 2018-06-03 -=================== - - * Add extension `.csl` to `application/vnd.citationstyles.style+xml` - * Add extension `.es` to `application/ecmascript` - * Add new upstream MIME types - * Add `UTF-8` as default charset for `text/turtle` - * Mark all XML-derived types as compressible - -1.33.0 / 2018-02-15 -=================== - - * Add extensions from IANA for `message/*` types - * Add new upstream MIME types - * Fix some incorrect OOXML types - * Remove `application/font-woff2` - -1.32.0 / 2017-11-29 -=================== - - * Add new upstream MIME types - * Update `text/hjson` to registered `application/hjson` - * Add `text/shex` with extension `.shex` - -1.31.0 / 2017-10-25 -=================== - - * Add `application/raml+yaml` with extension `.raml` - * Add `application/wasm` with extension `.wasm` - * Add new `font` type from IANA - * Add new upstream font extensions - * Add new upstream MIME types - * Add extensions for JPEG-2000 images - -1.30.0 / 2017-08-27 -=================== - - * Add `application/vnd.ms-outlook` - * Add `application/x-arj` - * Add extension `.mjs` to `application/javascript` - * Add glTF types and extensions - * Add new upstream MIME types - * Add `text/x-org` - * Add VirtualBox MIME types - * Fix `source` records for `video/*` types that are IANA - * Update `font/opentype` to registered `font/otf` - -1.29.0 / 2017-07-10 -=================== - - * Add `application/fido.trusted-apps+json` - * Add extension `.wadl` to `application/vnd.sun.wadl+xml` - * Add new upstream MIME types - * Add `UTF-8` as default charset for `text/css` - -1.28.0 / 2017-05-14 -=================== - - * Add new upstream MIME types - * Add extension `.gz` to `application/gzip` - * Update extensions `.md` and `.markdown` to be `text/markdown` - -1.27.0 / 2017-03-16 -=================== - - * Add new upstream MIME types - * Add `image/apng` with extension `.apng` - -1.26.0 / 2017-01-14 -=================== - - * Add new upstream MIME types - * Add extension `.geojson` to `application/geo+json` - -1.25.0 / 2016-11-11 -=================== - - * Add new upstream MIME types - -1.24.0 / 2016-09-18 -=================== - - * Add `audio/mp3` - * Add new upstream MIME types - -1.23.0 / 2016-05-01 -=================== - - * Add new upstream MIME types - * Add extension `.3gpp` to `audio/3gpp` - -1.22.0 / 2016-02-15 -=================== - - * Add `text/slim` - * Add extension `.rng` to `application/xml` - * Add new upstream MIME types - * Fix extension of `application/dash+xml` to be `.mpd` - * Update primary extension to `.m4a` for `audio/mp4` - -1.21.0 / 2016-01-06 -=================== - - * Add Google document types - * Add new upstream MIME types - -1.20.0 / 2015-11-10 -=================== - - * Add `text/x-suse-ymp` - * Add new upstream MIME types - -1.19.0 / 2015-09-17 -=================== - - * Add `application/vnd.apple.pkpass` - * Add new upstream MIME types - -1.18.0 / 2015-09-03 -=================== - - * Add new upstream MIME types - -1.17.0 / 2015-08-13 -=================== - - * Add `application/x-msdos-program` - * Add `audio/g711-0` - * Add `image/vnd.mozilla.apng` - * Add extension `.exe` to `application/x-msdos-program` - -1.16.0 / 2015-07-29 -=================== - - * Add `application/vnd.uri-map` - -1.15.0 / 2015-07-13 -=================== - - * Add `application/x-httpd-php` - -1.14.0 / 2015-06-25 -=================== - - * Add `application/scim+json` - * Add `application/vnd.3gpp.ussd+xml` - * Add `application/vnd.biopax.rdf+xml` - * Add `text/x-processing` - -1.13.0 / 2015-06-07 -=================== - - * Add nginx as a source - * Add `application/x-cocoa` - * Add `application/x-java-archive-diff` - * Add `application/x-makeself` - * Add `application/x-perl` - * Add `application/x-pilot` - * Add `application/x-redhat-package-manager` - * Add `application/x-sea` - * Add `audio/x-m4a` - * Add `audio/x-realaudio` - * Add `image/x-jng` - * Add `text/mathml` - -1.12.0 / 2015-06-05 -=================== - - * Add `application/bdoc` - * Add `application/vnd.hyperdrive+json` - * Add `application/x-bdoc` - * Add extension `.rtf` to `text/rtf` - -1.11.0 / 2015-05-31 -=================== - - * Add `audio/wav` - * Add `audio/wave` - * Add extension `.litcoffee` to `text/coffeescript` - * Add extension `.sfd-hdstx` to `application/vnd.hydrostatix.sof-data` - * Add extension `.n-gage` to `application/vnd.nokia.n-gage.symbian.install` - -1.10.0 / 2015-05-19 -=================== - - * Add `application/vnd.balsamiq.bmpr` - * Add `application/vnd.microsoft.portable-executable` - * Add `application/x-ns-proxy-autoconfig` - -1.9.1 / 2015-04-19 -================== - - * Remove `.json` extension from `application/manifest+json` - - This is causing bugs downstream - -1.9.0 / 2015-04-19 -================== - - * Add `application/manifest+json` - * Add `application/vnd.micro+json` - * Add `image/vnd.zbrush.pcx` - * Add `image/x-ms-bmp` - -1.8.0 / 2015-03-13 -================== - - * Add `application/vnd.citationstyles.style+xml` - * Add `application/vnd.fastcopy-disk-image` - * Add `application/vnd.gov.sk.xmldatacontainer+xml` - * Add extension `.jsonld` to `application/ld+json` - -1.7.0 / 2015-02-08 -================== - - * Add `application/vnd.gerber` - * Add `application/vnd.msa-disk-image` - -1.6.1 / 2015-02-05 -================== - - * Community extensions ownership transferred from `node-mime` - -1.6.0 / 2015-01-29 -================== - - * Add `application/jose` - * Add `application/jose+json` - * Add `application/json-seq` - * Add `application/jwk+json` - * Add `application/jwk-set+json` - * Add `application/jwt` - * Add `application/rdap+json` - * Add `application/vnd.gov.sk.e-form+xml` - * Add `application/vnd.ims.imsccv1p3` - -1.5.0 / 2014-12-30 -================== - - * Add `application/vnd.oracle.resource+json` - * Fix various invalid MIME type entries - - `application/mbox+xml` - - `application/oscp-response` - - `application/vwg-multiplexed` - - `audio/g721` - -1.4.0 / 2014-12-21 -================== - - * Add `application/vnd.ims.imsccv1p2` - * Fix various invalid MIME type entries - - `application/vnd-acucobol` - - `application/vnd-curl` - - `application/vnd-dart` - - `application/vnd-dxr` - - `application/vnd-fdf` - - `application/vnd-mif` - - `application/vnd-sema` - - `application/vnd-wap-wmlc` - - `application/vnd.adobe.flash-movie` - - `application/vnd.dece-zip` - - `application/vnd.dvb_service` - - `application/vnd.micrografx-igx` - - `application/vnd.sealed-doc` - - `application/vnd.sealed-eml` - - `application/vnd.sealed-mht` - - `application/vnd.sealed-ppt` - - `application/vnd.sealed-tiff` - - `application/vnd.sealed-xls` - - `application/vnd.sealedmedia.softseal-html` - - `application/vnd.sealedmedia.softseal-pdf` - - `application/vnd.wap-slc` - - `application/vnd.wap-wbxml` - - `audio/vnd.sealedmedia.softseal-mpeg` - - `image/vnd-djvu` - - `image/vnd-svf` - - `image/vnd-wap-wbmp` - - `image/vnd.sealed-png` - - `image/vnd.sealedmedia.softseal-gif` - - `image/vnd.sealedmedia.softseal-jpg` - - `model/vnd-dwf` - - `model/vnd.parasolid.transmit-binary` - - `model/vnd.parasolid.transmit-text` - - `text/vnd-a` - - `text/vnd-curl` - - `text/vnd.wap-wml` - * Remove example template MIME types - - `application/example` - - `audio/example` - - `image/example` - - `message/example` - - `model/example` - - `multipart/example` - - `text/example` - - `video/example` - -1.3.1 / 2014-12-16 -================== - - * Fix missing extensions - - `application/json5` - - `text/hjson` - -1.3.0 / 2014-12-07 -================== - - * Add `application/a2l` - * Add `application/aml` - * Add `application/atfx` - * Add `application/atxml` - * Add `application/cdfx+xml` - * Add `application/dii` - * Add `application/json5` - * Add `application/lxf` - * Add `application/mf4` - * Add `application/vnd.apache.thrift.compact` - * Add `application/vnd.apache.thrift.json` - * Add `application/vnd.coffeescript` - * Add `application/vnd.enphase.envoy` - * Add `application/vnd.ims.imsccv1p1` - * Add `text/csv-schema` - * Add `text/hjson` - * Add `text/markdown` - * Add `text/yaml` - -1.2.0 / 2014-11-09 -================== - - * Add `application/cea` - * Add `application/dit` - * Add `application/vnd.gov.sk.e-form+zip` - * Add `application/vnd.tmd.mediaflex.api+xml` - * Type `application/epub+zip` is now IANA-registered - -1.1.2 / 2014-10-23 -================== - - * Rebuild database for `application/x-www-form-urlencoded` change - -1.1.1 / 2014-10-20 -================== - - * Mark `application/x-www-form-urlencoded` as compressible. - -1.1.0 / 2014-09-28 -================== - - * Add `application/font-woff2` - -1.0.3 / 2014-09-25 -================== - - * Fix engine requirement in package - -1.0.2 / 2014-09-25 -================== - - * Add `application/coap-group+json` - * Add `application/dcd` - * Add `application/vnd.apache.thrift.binary` - * Add `image/vnd.tencent.tap` - * Mark all JSON-derived types as compressible - * Update `text/vtt` data - -1.0.1 / 2014-08-30 -================== - - * Fix extension ordering - -1.0.0 / 2014-08-30 -================== - - * Add `application/atf` - * Add `application/merge-patch+json` - * Add `multipart/x-mixed-replace` - * Add `source: 'apache'` metadata - * Add `source: 'iana'` metadata - * Remove badly-assumed charset data diff --git a/node_modules/mime-db/LICENSE b/node_modules/mime-db/LICENSE deleted file mode 100644 index 0751cb1..0000000 --- a/node_modules/mime-db/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -(The MIT License) - -Copyright (c) 2014 Jonathan Ong -Copyright (c) 2015-2022 Douglas Christopher Wilson - -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/mime-db/README.md b/node_modules/mime-db/README.md deleted file mode 100644 index 5a8fcfe..0000000 --- a/node_modules/mime-db/README.md +++ /dev/null @@ -1,100 +0,0 @@ -# mime-db - -[![NPM Version][npm-version-image]][npm-url] -[![NPM Downloads][npm-downloads-image]][npm-url] -[![Node.js Version][node-image]][node-url] -[![Build Status][ci-image]][ci-url] -[![Coverage Status][coveralls-image]][coveralls-url] - -This is a large database of mime types and information about them. -It consists of a single, public JSON file and does not include any logic, -allowing it to remain as un-opinionated as possible with an API. -It aggregates data from the following sources: - -- http://www.iana.org/assignments/media-types/media-types.xhtml -- http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types -- http://hg.nginx.org/nginx/raw-file/default/conf/mime.types - -## Installation - -```bash -npm install mime-db -``` - -### Database Download - -If you're crazy enough to use this in the browser, you can just grab the -JSON file using [jsDelivr](https://www.jsdelivr.com/). It is recommended to -replace `master` with [a release tag](https://github.com/jshttp/mime-db/tags) -as the JSON format may change in the future. - -``` -https://cdn.jsdelivr.net/gh/jshttp/mime-db@master/db.json -``` - -## Usage - -```js -var db = require('mime-db') - -// grab data on .js files -var data = db['application/javascript'] -``` - -## Data Structure - -The JSON file is a map lookup for lowercased mime types. -Each mime type has the following properties: - -- `.source` - where the mime type is defined. - If not set, it's probably a custom media type. - - `apache` - [Apache common media types](http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types) - - `iana` - [IANA-defined media types](http://www.iana.org/assignments/media-types/media-types.xhtml) - - `nginx` - [nginx media types](http://hg.nginx.org/nginx/raw-file/default/conf/mime.types) -- `.extensions[]` - known extensions associated with this mime type. -- `.compressible` - whether a file of this type can be gzipped. -- `.charset` - the default charset associated with this type, if any. - -If unknown, every property could be `undefined`. - -## Contributing - -To edit the database, only make PRs against `src/custom-types.json` or -`src/custom-suffix.json`. - -The `src/custom-types.json` file is a JSON object with the MIME type as the -keys and the values being an object with the following keys: - -- `compressible` - leave out if you don't know, otherwise `true`/`false` to - indicate whether the data represented by the type is typically compressible. -- `extensions` - include an array of file extensions that are associated with - the type. -- `notes` - human-readable notes about the type, typically what the type is. -- `sources` - include an array of URLs of where the MIME type and the associated - extensions are sourced from. This needs to be a [primary source](https://en.wikipedia.org/wiki/Primary_source); - links to type aggregating sites and Wikipedia are _not acceptable_. - -To update the build, run `npm run build`. - -### Adding Custom Media Types - -The best way to get new media types included in this library is to register -them with the IANA. The community registration procedure is outlined in -[RFC 6838 section 5](http://tools.ietf.org/html/rfc6838#section-5). Types -registered with the IANA are automatically pulled into this library. - -If that is not possible / feasible, they can be added directly here as a -"custom" type. To do this, it is required to have a primary source that -definitively lists the media type. If an extension is going to be listed as -associateed with this media type, the source must definitively link the -media type and extension as well. - -[ci-image]: https://badgen.net/github/checks/jshttp/mime-db/master?label=ci -[ci-url]: https://github.com/jshttp/mime-db/actions?query=workflow%3Aci -[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/mime-db/master -[coveralls-url]: https://coveralls.io/r/jshttp/mime-db?branch=master -[node-image]: https://badgen.net/npm/node/mime-db -[node-url]: https://nodejs.org/en/download -[npm-downloads-image]: https://badgen.net/npm/dm/mime-db -[npm-url]: https://npmjs.org/package/mime-db -[npm-version-image]: https://badgen.net/npm/v/mime-db diff --git a/node_modules/mime-db/db.json b/node_modules/mime-db/db.json deleted file mode 100644 index eb9c42c..0000000 --- a/node_modules/mime-db/db.json +++ /dev/null @@ -1,8519 +0,0 @@ -{ - "application/1d-interleaved-parityfec": { - "source": "iana" - }, - "application/3gpdash-qoe-report+xml": { - "source": "iana", - "charset": "UTF-8", - "compressible": true - }, - "application/3gpp-ims+xml": { - "source": "iana", - "compressible": true - }, - "application/3gpphal+json": { - "source": "iana", - "compressible": true - }, - "application/3gpphalforms+json": { - "source": "iana", - "compressible": true - }, - "application/a2l": { - "source": "iana" - }, - "application/ace+cbor": { - "source": "iana" - }, - "application/activemessage": { - "source": "iana" - }, - "application/activity+json": { - "source": "iana", - "compressible": true - }, - "application/alto-costmap+json": { - "source": "iana", - "compressible": true - }, - "application/alto-costmapfilter+json": { - "source": "iana", - "compressible": true - }, - "application/alto-directory+json": { - "source": "iana", - "compressible": true - }, - "application/alto-endpointcost+json": { - "source": "iana", - "compressible": true - }, - "application/alto-endpointcostparams+json": { - "source": "iana", - "compressible": true - }, - "application/alto-endpointprop+json": { - "source": "iana", - "compressible": true - }, - "application/alto-endpointpropparams+json": { - "source": "iana", - "compressible": true - }, - "application/alto-error+json": { - "source": "iana", - "compressible": true - }, - "application/alto-networkmap+json": { - "source": "iana", - "compressible": true - }, - "application/alto-networkmapfilter+json": { - "source": "iana", - "compressible": true - }, - "application/alto-updatestreamcontrol+json": { - "source": "iana", - "compressible": true - }, - "application/alto-updatestreamparams+json": { - "source": "iana", - "compressible": true - }, - "application/aml": { - "source": "iana" - }, - "application/andrew-inset": { - "source": "iana", - "extensions": ["ez"] - }, - "application/applefile": { - "source": "iana" - }, - "application/applixware": { - "source": "apache", - "extensions": ["aw"] - }, - "application/at+jwt": { - "source": "iana" - }, - "application/atf": { - "source": "iana" - }, - "application/atfx": { - "source": "iana" - }, - "application/atom+xml": { - "source": "iana", - "compressible": true, - "extensions": ["atom"] - }, - "application/atomcat+xml": { - "source": "iana", - "compressible": true, - "extensions": ["atomcat"] - }, - "application/atomdeleted+xml": { - "source": "iana", - "compressible": true, - "extensions": ["atomdeleted"] - }, - "application/atomicmail": { - "source": "iana" - }, - "application/atomsvc+xml": { - "source": "iana", - "compressible": true, - "extensions": ["atomsvc"] - }, - "application/atsc-dwd+xml": { - "source": "iana", - "compressible": true, - "extensions": ["dwd"] - }, - "application/atsc-dynamic-event-message": { - "source": "iana" - }, - "application/atsc-held+xml": { - "source": "iana", - "compressible": true, - "extensions": ["held"] - }, - "application/atsc-rdt+json": { - "source": "iana", - "compressible": true - }, - "application/atsc-rsat+xml": { - "source": "iana", - "compressible": true, - "extensions": ["rsat"] - }, - "application/atxml": { - "source": "iana" - }, - "application/auth-policy+xml": { - "source": "iana", - "compressible": true - }, - "application/bacnet-xdd+zip": { - "source": "iana", - "compressible": false - }, - "application/batch-smtp": { - "source": "iana" - }, - "application/bdoc": { - "compressible": false, - "extensions": ["bdoc"] - }, - "application/beep+xml": { - "source": "iana", - "charset": "UTF-8", - "compressible": true - }, - "application/calendar+json": { - "source": "iana", - "compressible": true - }, - "application/calendar+xml": { - "source": "iana", - "compressible": true, - "extensions": ["xcs"] - }, - "application/call-completion": { - "source": "iana" - }, - "application/cals-1840": { - "source": "iana" - }, - "application/captive+json": { - "source": "iana", - "compressible": true - }, - "application/cbor": { - "source": "iana" - }, - "application/cbor-seq": { - "source": "iana" - }, - "application/cccex": { - "source": "iana" - }, - "application/ccmp+xml": { - "source": "iana", - "compressible": true - }, - "application/ccxml+xml": { - "source": "iana", - "compressible": true, - "extensions": ["ccxml"] - }, - "application/cdfx+xml": { - "source": "iana", - "compressible": true, - "extensions": ["cdfx"] - }, - "application/cdmi-capability": { - "source": "iana", - "extensions": ["cdmia"] - }, - "application/cdmi-container": { - "source": "iana", - "extensions": ["cdmic"] - }, - "application/cdmi-domain": { - "source": "iana", - "extensions": ["cdmid"] - }, - "application/cdmi-object": { - "source": "iana", - "extensions": ["cdmio"] - }, - "application/cdmi-queue": { - "source": "iana", - "extensions": ["cdmiq"] - }, - "application/cdni": { - "source": "iana" - }, - "application/cea": { - "source": "iana" - }, - "application/cea-2018+xml": { - "source": "iana", - "compressible": true - }, - "application/cellml+xml": { - "source": "iana", - "compressible": true - }, - "application/cfw": { - "source": "iana" - }, - "application/city+json": { - "source": "iana", - "compressible": true - }, - "application/clr": { - "source": "iana" - }, - "application/clue+xml": { - "source": "iana", - "compressible": true - }, - "application/clue_info+xml": { - "source": "iana", - "compressible": true - }, - "application/cms": { - "source": "iana" - }, - "application/cnrp+xml": { - "source": "iana", - "compressible": true - }, - "application/coap-group+json": { - "source": "iana", - "compressible": true - }, - "application/coap-payload": { - "source": "iana" - }, - "application/commonground": { - "source": "iana" - }, - "application/conference-info+xml": { - "source": "iana", - "compressible": true - }, - "application/cose": { - "source": "iana" - }, - "application/cose-key": { - "source": "iana" - }, - "application/cose-key-set": { - "source": "iana" - }, - "application/cpl+xml": { - "source": "iana", - "compressible": true, - "extensions": ["cpl"] - }, - "application/csrattrs": { - "source": "iana" - }, - "application/csta+xml": { - "source": "iana", - "compressible": true - }, - "application/cstadata+xml": { - "source": "iana", - "compressible": true - }, - "application/csvm+json": { - "source": "iana", - "compressible": true - }, - "application/cu-seeme": { - "source": "apache", - "extensions": ["cu"] - }, - "application/cwt": { - "source": "iana" - }, - "application/cybercash": { - "source": "iana" - }, - "application/dart": { - "compressible": true - }, - "application/dash+xml": { - "source": "iana", - "compressible": true, - "extensions": ["mpd"] - }, - "application/dash-patch+xml": { - "source": "iana", - "compressible": true, - "extensions": ["mpp"] - }, - "application/dashdelta": { - "source": "iana" - }, - "application/davmount+xml": { - "source": "iana", - "compressible": true, - "extensions": ["davmount"] - }, - "application/dca-rft": { - "source": "iana" - }, - "application/dcd": { - "source": "iana" - }, - "application/dec-dx": { - "source": "iana" - }, - "application/dialog-info+xml": { - "source": "iana", - "compressible": true - }, - "application/dicom": { - "source": "iana" - }, - "application/dicom+json": { - "source": "iana", - "compressible": true - }, - "application/dicom+xml": { - "source": "iana", - "compressible": true - }, - "application/dii": { - "source": "iana" - }, - "application/dit": { - "source": "iana" - }, - "application/dns": { - "source": "iana" - }, - "application/dns+json": { - "source": "iana", - "compressible": true - }, - "application/dns-message": { - "source": "iana" - }, - "application/docbook+xml": { - "source": "apache", - "compressible": true, - "extensions": ["dbk"] - }, - "application/dots+cbor": { - "source": "iana" - }, - "application/dskpp+xml": { - "source": "iana", - "compressible": true - }, - "application/dssc+der": { - "source": "iana", - "extensions": ["dssc"] - }, - "application/dssc+xml": { - "source": "iana", - "compressible": true, - "extensions": ["xdssc"] - }, - "application/dvcs": { - "source": "iana" - }, - "application/ecmascript": { - "source": "iana", - "compressible": true, - "extensions": ["es","ecma"] - }, - "application/edi-consent": { - "source": "iana" - }, - "application/edi-x12": { - "source": "iana", - "compressible": false - }, - "application/edifact": { - "source": "iana", - "compressible": false - }, - "application/efi": { - "source": "iana" - }, - "application/elm+json": { - "source": "iana", - "charset": "UTF-8", - "compressible": true - }, - "application/elm+xml": { - "source": "iana", - "compressible": true - }, - "application/emergencycalldata.cap+xml": { - "source": "iana", - "charset": "UTF-8", - "compressible": true - }, - "application/emergencycalldata.comment+xml": { - "source": "iana", - "compressible": true - }, - "application/emergencycalldata.control+xml": { - "source": "iana", - "compressible": true - }, - "application/emergencycalldata.deviceinfo+xml": { - "source": "iana", - "compressible": true - }, - "application/emergencycalldata.ecall.msd": { - "source": "iana" - }, - "application/emergencycalldata.providerinfo+xml": { - "source": "iana", - "compressible": true - }, - "application/emergencycalldata.serviceinfo+xml": { - "source": "iana", - "compressible": true - }, - "application/emergencycalldata.subscriberinfo+xml": { - "source": "iana", - "compressible": true - }, - "application/emergencycalldata.veds+xml": { - "source": "iana", - "compressible": true - }, - "application/emma+xml": { - "source": "iana", - "compressible": true, - "extensions": ["emma"] - }, - "application/emotionml+xml": { - "source": "iana", - "compressible": true, - "extensions": ["emotionml"] - }, - "application/encaprtp": { - "source": "iana" - }, - "application/epp+xml": { - "source": "iana", - "compressible": true - }, - "application/epub+zip": { - "source": "iana", - "compressible": false, - "extensions": ["epub"] - }, - "application/eshop": { - "source": "iana" - }, - "application/exi": { - "source": "iana", - "extensions": ["exi"] - }, - "application/expect-ct-report+json": { - "source": "iana", - "compressible": true - }, - "application/express": { - "source": "iana", - "extensions": ["exp"] - }, - "application/fastinfoset": { - "source": "iana" - }, - "application/fastsoap": { - "source": "iana" - }, - "application/fdt+xml": { - "source": "iana", - "compressible": true, - "extensions": ["fdt"] - }, - "application/fhir+json": { - "source": "iana", - "charset": "UTF-8", - "compressible": true - }, - "application/fhir+xml": { - "source": "iana", - "charset": "UTF-8", - "compressible": true - }, - "application/fido.trusted-apps+json": { - "compressible": true - }, - "application/fits": { - "source": "iana" - }, - "application/flexfec": { - "source": "iana" - }, - "application/font-sfnt": { - "source": "iana" - }, - "application/font-tdpfr": { - "source": "iana", - "extensions": ["pfr"] - }, - "application/font-woff": { - "source": "iana", - "compressible": false - }, - "application/framework-attributes+xml": { - "source": "iana", - "compressible": true - }, - "application/geo+json": { - "source": "iana", - "compressible": true, - "extensions": ["geojson"] - }, - "application/geo+json-seq": { - "source": "iana" - }, - "application/geopackage+sqlite3": { - "source": "iana" - }, - "application/geoxacml+xml": { - "source": "iana", - "compressible": true - }, - "application/gltf-buffer": { - "source": "iana" - }, - "application/gml+xml": { - "source": "iana", - "compressible": true, - "extensions": ["gml"] - }, - "application/gpx+xml": { - "source": "apache", - "compressible": true, - "extensions": ["gpx"] - }, - "application/gxf": { - "source": "apache", - "extensions": ["gxf"] - }, - "application/gzip": { - "source": "iana", - "compressible": false, - "extensions": ["gz"] - }, - "application/h224": { - "source": "iana" - }, - "application/held+xml": { - "source": "iana", - "compressible": true - }, - "application/hjson": { - "extensions": ["hjson"] - }, - "application/http": { - "source": "iana" - }, - "application/hyperstudio": { - "source": "iana", - "extensions": ["stk"] - }, - "application/ibe-key-request+xml": { - "source": "iana", - "compressible": true - }, - "application/ibe-pkg-reply+xml": { - "source": "iana", - "compressible": true - }, - "application/ibe-pp-data": { - "source": "iana" - }, - "application/iges": { - "source": "iana" - }, - "application/im-iscomposing+xml": { - "source": "iana", - "charset": "UTF-8", - "compressible": true - }, - "application/index": { - "source": "iana" - }, - "application/index.cmd": { - "source": "iana" - }, - "application/index.obj": { - "source": "iana" - }, - "application/index.response": { - "source": "iana" - }, - "application/index.vnd": { - "source": "iana" - }, - "application/inkml+xml": { - "source": "iana", - "compressible": true, - "extensions": ["ink","inkml"] - }, - "application/iotp": { - "source": "iana" - }, - "application/ipfix": { - "source": "iana", - "extensions": ["ipfix"] - }, - "application/ipp": { - "source": "iana" - }, - "application/isup": { - "source": "iana" - }, - "application/its+xml": { - "source": "iana", - "compressible": true, - "extensions": ["its"] - }, - "application/java-archive": { - "source": "apache", - "compressible": false, - "extensions": ["jar","war","ear"] - }, - "application/java-serialized-object": { - "source": "apache", - "compressible": false, - "extensions": ["ser"] - }, - "application/java-vm": { - "source": "apache", - "compressible": false, - "extensions": ["class"] - }, - "application/javascript": { - "source": "iana", - "charset": "UTF-8", - "compressible": true, - "extensions": ["js","mjs"] - }, - "application/jf2feed+json": { - "source": "iana", - "compressible": true - }, - "application/jose": { - "source": "iana" - }, - "application/jose+json": { - "source": "iana", - "compressible": true - }, - "application/jrd+json": { - "source": "iana", - "compressible": true - }, - "application/jscalendar+json": { - "source": "iana", - "compressible": true - }, - "application/json": { - "source": "iana", - "charset": "UTF-8", - "compressible": true, - "extensions": ["json","map"] - }, - "application/json-patch+json": { - "source": "iana", - "compressible": true - }, - "application/json-seq": { - "source": "iana" - }, - "application/json5": { - "extensions": ["json5"] - }, - "application/jsonml+json": { - "source": "apache", - "compressible": true, - "extensions": ["jsonml"] - }, - "application/jwk+json": { - "source": "iana", - "compressible": true - }, - "application/jwk-set+json": { - "source": "iana", - "compressible": true - }, - "application/jwt": { - "source": "iana" - }, - "application/kpml-request+xml": { - "source": "iana", - "compressible": true - }, - "application/kpml-response+xml": { - "source": "iana", - "compressible": true - }, - "application/ld+json": { - "source": "iana", - "compressible": true, - "extensions": ["jsonld"] - }, - "application/lgr+xml": { - "source": "iana", - "compressible": true, - "extensions": ["lgr"] - }, - "application/link-format": { - "source": "iana" - }, - "application/load-control+xml": { - "source": "iana", - "compressible": true - }, - "application/lost+xml": { - "source": "iana", - "compressible": true, - "extensions": ["lostxml"] - }, - "application/lostsync+xml": { - "source": "iana", - "compressible": true - }, - "application/lpf+zip": { - "source": "iana", - "compressible": false - }, - "application/lxf": { - "source": "iana" - }, - "application/mac-binhex40": { - "source": "iana", - "extensions": ["hqx"] - }, - "application/mac-compactpro": { - "source": "apache", - "extensions": ["cpt"] - }, - "application/macwriteii": { - "source": "iana" - }, - "application/mads+xml": { - "source": "iana", - "compressible": true, - "extensions": ["mads"] - }, - "application/manifest+json": { - "source": "iana", - "charset": "UTF-8", - "compressible": true, - "extensions": ["webmanifest"] - }, - "application/marc": { - "source": "iana", - "extensions": ["mrc"] - }, - "application/marcxml+xml": { - "source": "iana", - "compressible": true, - "extensions": ["mrcx"] - }, - "application/mathematica": { - "source": "iana", - "extensions": ["ma","nb","mb"] - }, - "application/mathml+xml": { - "source": "iana", - "compressible": true, - "extensions": ["mathml"] - }, - "application/mathml-content+xml": { - "source": "iana", - "compressible": true - }, - "application/mathml-presentation+xml": { - "source": "iana", - "compressible": true - }, - "application/mbms-associated-procedure-description+xml": { - "source": "iana", - "compressible": true - }, - "application/mbms-deregister+xml": { - "source": "iana", - "compressible": true - }, - "application/mbms-envelope+xml": { - "source": "iana", - "compressible": true - }, - "application/mbms-msk+xml": { - "source": "iana", - "compressible": true - }, - "application/mbms-msk-response+xml": { - "source": "iana", - "compressible": true - }, - "application/mbms-protection-description+xml": { - "source": "iana", - "compressible": true - }, - "application/mbms-reception-report+xml": { - "source": "iana", - "compressible": true - }, - "application/mbms-register+xml": { - "source": "iana", - "compressible": true - }, - "application/mbms-register-response+xml": { - "source": "iana", - "compressible": true - }, - "application/mbms-schedule+xml": { - "source": "iana", - "compressible": true - }, - "application/mbms-user-service-description+xml": { - "source": "iana", - "compressible": true - }, - "application/mbox": { - "source": "iana", - "extensions": ["mbox"] - }, - "application/media-policy-dataset+xml": { - "source": "iana", - "compressible": true, - "extensions": ["mpf"] - }, - "application/media_control+xml": { - "source": "iana", - "compressible": true - }, - "application/mediaservercontrol+xml": { - "source": "iana", - "compressible": true, - "extensions": ["mscml"] - }, - "application/merge-patch+json": { - "source": "iana", - "compressible": true - }, - "application/metalink+xml": { - "source": "apache", - "compressible": true, - "extensions": ["metalink"] - }, - "application/metalink4+xml": { - "source": "iana", - "compressible": true, - "extensions": ["meta4"] - }, - "application/mets+xml": { - "source": "iana", - "compressible": true, - "extensions": ["mets"] - }, - "application/mf4": { - "source": "iana" - }, - "application/mikey": { - "source": "iana" - }, - "application/mipc": { - "source": "iana" - }, - "application/missing-blocks+cbor-seq": { - "source": "iana" - }, - "application/mmt-aei+xml": { - "source": "iana", - "compressible": true, - "extensions": ["maei"] - }, - "application/mmt-usd+xml": { - "source": "iana", - "compressible": true, - "extensions": ["musd"] - }, - "application/mods+xml": { - "source": "iana", - "compressible": true, - "extensions": ["mods"] - }, - "application/moss-keys": { - "source": "iana" - }, - "application/moss-signature": { - "source": "iana" - }, - "application/mosskey-data": { - "source": "iana" - }, - "application/mosskey-request": { - "source": "iana" - }, - "application/mp21": { - "source": "iana", - "extensions": ["m21","mp21"] - }, - "application/mp4": { - "source": "iana", - "extensions": ["mp4s","m4p"] - }, - "application/mpeg4-generic": { - "source": "iana" - }, - "application/mpeg4-iod": { - "source": "iana" - }, - "application/mpeg4-iod-xmt": { - "source": "iana" - }, - "application/mrb-consumer+xml": { - "source": "iana", - "compressible": true - }, - "application/mrb-publish+xml": { - "source": "iana", - "compressible": true - }, - "application/msc-ivr+xml": { - "source": "iana", - "charset": "UTF-8", - "compressible": true - }, - "application/msc-mixer+xml": { - "source": "iana", - "charset": "UTF-8", - "compressible": true - }, - "application/msword": { - "source": "iana", - "compressible": false, - "extensions": ["doc","dot"] - }, - "application/mud+json": { - "source": "iana", - "compressible": true - }, - "application/multipart-core": { - "source": "iana" - }, - "application/mxf": { - "source": "iana", - "extensions": ["mxf"] - }, - "application/n-quads": { - "source": "iana", - "extensions": ["nq"] - }, - "application/n-triples": { - "source": "iana", - "extensions": ["nt"] - }, - "application/nasdata": { - "source": "iana" - }, - "application/news-checkgroups": { - "source": "iana", - "charset": "US-ASCII" - }, - "application/news-groupinfo": { - "source": "iana", - "charset": "US-ASCII" - }, - "application/news-transmission": { - "source": "iana" - }, - "application/nlsml+xml": { - "source": "iana", - "compressible": true - }, - "application/node": { - "source": "iana", - "extensions": ["cjs"] - }, - "application/nss": { - "source": "iana" - }, - "application/oauth-authz-req+jwt": { - "source": "iana" - }, - "application/oblivious-dns-message": { - "source": "iana" - }, - "application/ocsp-request": { - "source": "iana" - }, - "application/ocsp-response": { - "source": "iana" - }, - "application/octet-stream": { - "source": "iana", - "compressible": false, - "extensions": ["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"] - }, - "application/oda": { - "source": "iana", - "extensions": ["oda"] - }, - "application/odm+xml": { - "source": "iana", - "compressible": true - }, - "application/odx": { - "source": "iana" - }, - "application/oebps-package+xml": { - "source": "iana", - "compressible": true, - "extensions": ["opf"] - }, - "application/ogg": { - "source": "iana", - "compressible": false, - "extensions": ["ogx"] - }, - "application/omdoc+xml": { - "source": "apache", - "compressible": true, - "extensions": ["omdoc"] - }, - "application/onenote": { - "source": "apache", - "extensions": ["onetoc","onetoc2","onetmp","onepkg"] - }, - "application/opc-nodeset+xml": { - "source": "iana", - "compressible": true - }, - "application/oscore": { - "source": "iana" - }, - "application/oxps": { - "source": "iana", - "extensions": ["oxps"] - }, - "application/p21": { - "source": "iana" - }, - "application/p21+zip": { - "source": "iana", - "compressible": false - }, - "application/p2p-overlay+xml": { - "source": "iana", - "compressible": true, - "extensions": ["relo"] - }, - "application/parityfec": { - "source": "iana" - }, - "application/passport": { - "source": "iana" - }, - "application/patch-ops-error+xml": { - "source": "iana", - "compressible": true, - "extensions": ["xer"] - }, - "application/pdf": { - "source": "iana", - "compressible": false, - "extensions": ["pdf"] - }, - "application/pdx": { - "source": "iana" - }, - "application/pem-certificate-chain": { - "source": "iana" - }, - "application/pgp-encrypted": { - "source": "iana", - "compressible": false, - "extensions": ["pgp"] - }, - "application/pgp-keys": { - "source": "iana", - "extensions": ["asc"] - }, - "application/pgp-signature": { - "source": "iana", - "extensions": ["asc","sig"] - }, - "application/pics-rules": { - "source": "apache", - "extensions": ["prf"] - }, - "application/pidf+xml": { - "source": "iana", - "charset": "UTF-8", - "compressible": true - }, - "application/pidf-diff+xml": { - "source": "iana", - "charset": "UTF-8", - "compressible": true - }, - "application/pkcs10": { - "source": "iana", - "extensions": ["p10"] - }, - "application/pkcs12": { - "source": "iana" - }, - "application/pkcs7-mime": { - "source": "iana", - "extensions": ["p7m","p7c"] - }, - "application/pkcs7-signature": { - "source": "iana", - "extensions": ["p7s"] - }, - "application/pkcs8": { - "source": "iana", - "extensions": ["p8"] - }, - "application/pkcs8-encrypted": { - "source": "iana" - }, - "application/pkix-attr-cert": { - "source": "iana", - "extensions": ["ac"] - }, - "application/pkix-cert": { - "source": "iana", - "extensions": ["cer"] - }, - "application/pkix-crl": { - "source": "iana", - "extensions": ["crl"] - }, - "application/pkix-pkipath": { - "source": "iana", - "extensions": ["pkipath"] - }, - "application/pkixcmp": { - "source": "iana", - "extensions": ["pki"] - }, - "application/pls+xml": { - "source": "iana", - "compressible": true, - "extensions": ["pls"] - }, - "application/poc-settings+xml": { - "source": "iana", - "charset": "UTF-8", - "compressible": true - }, - "application/postscript": { - "source": "iana", - "compressible": true, - "extensions": ["ai","eps","ps"] - }, - "application/ppsp-tracker+json": { - "source": "iana", - "compressible": true - }, - "application/problem+json": { - "source": "iana", - "compressible": true - }, - "application/problem+xml": { - "source": "iana", - "compressible": true - }, - "application/provenance+xml": { - "source": "iana", - "compressible": true, - "extensions": ["provx"] - }, - "application/prs.alvestrand.titrax-sheet": { - "source": "iana" - }, - "application/prs.cww": { - "source": "iana", - "extensions": ["cww"] - }, - "application/prs.cyn": { - "source": "iana", - "charset": "7-BIT" - }, - "application/prs.hpub+zip": { - "source": "iana", - "compressible": false - }, - "application/prs.nprend": { - "source": "iana" - }, - "application/prs.plucker": { - "source": "iana" - }, - "application/prs.rdf-xml-crypt": { - "source": "iana" - }, - "application/prs.xsf+xml": { - "source": "iana", - "compressible": true - }, - "application/pskc+xml": { - "source": "iana", - "compressible": true, - "extensions": ["pskcxml"] - }, - "application/pvd+json": { - "source": "iana", - "compressible": true - }, - "application/qsig": { - "source": "iana" - }, - "application/raml+yaml": { - "compressible": true, - "extensions": ["raml"] - }, - "application/raptorfec": { - "source": "iana" - }, - "application/rdap+json": { - "source": "iana", - "compressible": true - }, - "application/rdf+xml": { - "source": "iana", - "compressible": true, - "extensions": ["rdf","owl"] - }, - "application/reginfo+xml": { - "source": "iana", - "compressible": true, - "extensions": ["rif"] - }, - "application/relax-ng-compact-syntax": { - "source": "iana", - "extensions": ["rnc"] - }, - "application/remote-printing": { - "source": "iana" - }, - "application/reputon+json": { - "source": "iana", - "compressible": true - }, - "application/resource-lists+xml": { - "source": "iana", - "compressible": true, - "extensions": ["rl"] - }, - "application/resource-lists-diff+xml": { - "source": "iana", - "compressible": true, - "extensions": ["rld"] - }, - "application/rfc+xml": { - "source": "iana", - "compressible": true - }, - "application/riscos": { - "source": "iana" - }, - "application/rlmi+xml": { - "source": "iana", - "compressible": true - }, - "application/rls-services+xml": { - "source": "iana", - "compressible": true, - "extensions": ["rs"] - }, - "application/route-apd+xml": { - "source": "iana", - "compressible": true, - "extensions": ["rapd"] - }, - "application/route-s-tsid+xml": { - "source": "iana", - "compressible": true, - "extensions": ["sls"] - }, - "application/route-usd+xml": { - "source": "iana", - "compressible": true, - "extensions": ["rusd"] - }, - "application/rpki-ghostbusters": { - "source": "iana", - "extensions": ["gbr"] - }, - "application/rpki-manifest": { - "source": "iana", - "extensions": ["mft"] - }, - "application/rpki-publication": { - "source": "iana" - }, - "application/rpki-roa": { - "source": "iana", - "extensions": ["roa"] - }, - "application/rpki-updown": { - "source": "iana" - }, - "application/rsd+xml": { - "source": "apache", - "compressible": true, - "extensions": ["rsd"] - }, - "application/rss+xml": { - "source": "apache", - "compressible": true, - "extensions": ["rss"] - }, - "application/rtf": { - "source": "iana", - "compressible": true, - "extensions": ["rtf"] - }, - "application/rtploopback": { - "source": "iana" - }, - "application/rtx": { - "source": "iana" - }, - "application/samlassertion+xml": { - "source": "iana", - "compressible": true - }, - "application/samlmetadata+xml": { - "source": "iana", - "compressible": true - }, - "application/sarif+json": { - "source": "iana", - "compressible": true - }, - "application/sarif-external-properties+json": { - "source": "iana", - "compressible": true - }, - "application/sbe": { - "source": "iana" - }, - "application/sbml+xml": { - "source": "iana", - "compressible": true, - "extensions": ["sbml"] - }, - "application/scaip+xml": { - "source": "iana", - "compressible": true - }, - "application/scim+json": { - "source": "iana", - "compressible": true - }, - "application/scvp-cv-request": { - "source": "iana", - "extensions": ["scq"] - }, - "application/scvp-cv-response": { - "source": "iana", - "extensions": ["scs"] - }, - "application/scvp-vp-request": { - "source": "iana", - "extensions": ["spq"] - }, - "application/scvp-vp-response": { - "source": "iana", - "extensions": ["spp"] - }, - "application/sdp": { - "source": "iana", - "extensions": ["sdp"] - }, - "application/secevent+jwt": { - "source": "iana" - }, - "application/senml+cbor": { - "source": "iana" - }, - "application/senml+json": { - "source": "iana", - "compressible": true - }, - "application/senml+xml": { - "source": "iana", - "compressible": true, - "extensions": ["senmlx"] - }, - "application/senml-etch+cbor": { - "source": "iana" - }, - "application/senml-etch+json": { - "source": "iana", - "compressible": true - }, - "application/senml-exi": { - "source": "iana" - }, - "application/sensml+cbor": { - "source": "iana" - }, - "application/sensml+json": { - "source": "iana", - "compressible": true - }, - "application/sensml+xml": { - "source": "iana", - "compressible": true, - "extensions": ["sensmlx"] - }, - "application/sensml-exi": { - "source": "iana" - }, - "application/sep+xml": { - "source": "iana", - "compressible": true - }, - "application/sep-exi": { - "source": "iana" - }, - "application/session-info": { - "source": "iana" - }, - "application/set-payment": { - "source": "iana" - }, - "application/set-payment-initiation": { - "source": "iana", - "extensions": ["setpay"] - }, - "application/set-registration": { - "source": "iana" - }, - "application/set-registration-initiation": { - "source": "iana", - "extensions": ["setreg"] - }, - "application/sgml": { - "source": "iana" - }, - "application/sgml-open-catalog": { - "source": "iana" - }, - "application/shf+xml": { - "source": "iana", - "compressible": true, - "extensions": ["shf"] - }, - "application/sieve": { - "source": "iana", - "extensions": ["siv","sieve"] - }, - "application/simple-filter+xml": { - "source": "iana", - "compressible": true - }, - "application/simple-message-summary": { - "source": "iana" - }, - "application/simplesymbolcontainer": { - "source": "iana" - }, - "application/sipc": { - "source": "iana" - }, - "application/slate": { - "source": "iana" - }, - "application/smil": { - "source": "iana" - }, - "application/smil+xml": { - "source": "iana", - "compressible": true, - "extensions": ["smi","smil"] - }, - "application/smpte336m": { - "source": "iana" - }, - "application/soap+fastinfoset": { - "source": "iana" - }, - "application/soap+xml": { - "source": "iana", - "compressible": true - }, - "application/sparql-query": { - "source": "iana", - "extensions": ["rq"] - }, - "application/sparql-results+xml": { - "source": "iana", - "compressible": true, - "extensions": ["srx"] - }, - "application/spdx+json": { - "source": "iana", - "compressible": true - }, - "application/spirits-event+xml": { - "source": "iana", - "compressible": true - }, - "application/sql": { - "source": "iana" - }, - "application/srgs": { - "source": "iana", - "extensions": ["gram"] - }, - "application/srgs+xml": { - "source": "iana", - "compressible": true, - "extensions": ["grxml"] - }, - "application/sru+xml": { - "source": "iana", - "compressible": true, - "extensions": ["sru"] - }, - "application/ssdl+xml": { - "source": "apache", - "compressible": true, - "extensions": ["ssdl"] - }, - "application/ssml+xml": { - "source": "iana", - "compressible": true, - "extensions": ["ssml"] - }, - "application/stix+json": { - "source": "iana", - "compressible": true - }, - "application/swid+xml": { - "source": "iana", - "compressible": true, - "extensions": ["swidtag"] - }, - "application/tamp-apex-update": { - "source": "iana" - }, - "application/tamp-apex-update-confirm": { - "source": "iana" - }, - "application/tamp-community-update": { - "source": "iana" - }, - "application/tamp-community-update-confirm": { - "source": "iana" - }, - "application/tamp-error": { - "source": "iana" - }, - "application/tamp-sequence-adjust": { - "source": "iana" - }, - "application/tamp-sequence-adjust-confirm": { - "source": "iana" - }, - "application/tamp-status-query": { - "source": "iana" - }, - "application/tamp-status-response": { - "source": "iana" - }, - "application/tamp-update": { - "source": "iana" - }, - "application/tamp-update-confirm": { - "source": "iana" - }, - "application/tar": { - "compressible": true - }, - "application/taxii+json": { - "source": "iana", - "compressible": true - }, - "application/td+json": { - "source": "iana", - "compressible": true - }, - "application/tei+xml": { - "source": "iana", - "compressible": true, - "extensions": ["tei","teicorpus"] - }, - "application/tetra_isi": { - "source": "iana" - }, - "application/thraud+xml": { - "source": "iana", - "compressible": true, - "extensions": ["tfi"] - }, - "application/timestamp-query": { - "source": "iana" - }, - "application/timestamp-reply": { - "source": "iana" - }, - "application/timestamped-data": { - "source": "iana", - "extensions": ["tsd"] - }, - "application/tlsrpt+gzip": { - "source": "iana" - }, - "application/tlsrpt+json": { - "source": "iana", - "compressible": true - }, - "application/tnauthlist": { - "source": "iana" - }, - "application/token-introspection+jwt": { - "source": "iana" - }, - "application/toml": { - "compressible": true, - "extensions": ["toml"] - }, - "application/trickle-ice-sdpfrag": { - "source": "iana" - }, - "application/trig": { - "source": "iana", - "extensions": ["trig"] - }, - "application/ttml+xml": { - "source": "iana", - "compressible": true, - "extensions": ["ttml"] - }, - "application/tve-trigger": { - "source": "iana" - }, - "application/tzif": { - "source": "iana" - }, - "application/tzif-leap": { - "source": "iana" - }, - "application/ubjson": { - "compressible": false, - "extensions": ["ubj"] - }, - "application/ulpfec": { - "source": "iana" - }, - "application/urc-grpsheet+xml": { - "source": "iana", - "compressible": true - }, - "application/urc-ressheet+xml": { - "source": "iana", - "compressible": true, - "extensions": ["rsheet"] - }, - "application/urc-targetdesc+xml": { - "source": "iana", - "compressible": true, - "extensions": ["td"] - }, - "application/urc-uisocketdesc+xml": { - "source": "iana", - "compressible": true - }, - "application/vcard+json": { - "source": "iana", - "compressible": true - }, - "application/vcard+xml": { - "source": "iana", - "compressible": true - }, - "application/vemmi": { - "source": "iana" - }, - "application/vividence.scriptfile": { - "source": "apache" - }, - "application/vnd.1000minds.decision-model+xml": { - "source": "iana", - "compressible": true, - "extensions": ["1km"] - }, - "application/vnd.3gpp-prose+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.3gpp-prose-pc3ch+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.3gpp-v2x-local-service-information": { - "source": "iana" - }, - "application/vnd.3gpp.5gnas": { - "source": "iana" - }, - "application/vnd.3gpp.access-transfer-events+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.3gpp.bsf+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.3gpp.gmop+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.3gpp.gtpc": { - "source": "iana" - }, - "application/vnd.3gpp.interworking-data": { - "source": "iana" - }, - "application/vnd.3gpp.lpp": { - "source": "iana" - }, - "application/vnd.3gpp.mc-signalling-ear": { - "source": "iana" - }, - "application/vnd.3gpp.mcdata-affiliation-command+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.3gpp.mcdata-info+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.3gpp.mcdata-payload": { - "source": "iana" - }, - "application/vnd.3gpp.mcdata-service-config+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.3gpp.mcdata-signalling": { - "source": "iana" - }, - "application/vnd.3gpp.mcdata-ue-config+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.3gpp.mcdata-user-profile+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.3gpp.mcptt-affiliation-command+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.3gpp.mcptt-floor-request+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.3gpp.mcptt-info+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.3gpp.mcptt-location-info+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.3gpp.mcptt-mbms-usage-info+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.3gpp.mcptt-service-config+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.3gpp.mcptt-signed+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.3gpp.mcptt-ue-config+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.3gpp.mcptt-ue-init-config+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.3gpp.mcptt-user-profile+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.3gpp.mcvideo-affiliation-command+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.3gpp.mcvideo-affiliation-info+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.3gpp.mcvideo-info+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.3gpp.mcvideo-location-info+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.3gpp.mcvideo-mbms-usage-info+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.3gpp.mcvideo-service-config+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.3gpp.mcvideo-transmission-request+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.3gpp.mcvideo-ue-config+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.3gpp.mcvideo-user-profile+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.3gpp.mid-call+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.3gpp.ngap": { - "source": "iana" - }, - "application/vnd.3gpp.pfcp": { - "source": "iana" - }, - "application/vnd.3gpp.pic-bw-large": { - "source": "iana", - "extensions": ["plb"] - }, - "application/vnd.3gpp.pic-bw-small": { - "source": "iana", - "extensions": ["psb"] - }, - "application/vnd.3gpp.pic-bw-var": { - "source": "iana", - "extensions": ["pvb"] - }, - "application/vnd.3gpp.s1ap": { - "source": "iana" - }, - "application/vnd.3gpp.sms": { - "source": "iana" - }, - "application/vnd.3gpp.sms+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.3gpp.srvcc-ext+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.3gpp.srvcc-info+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.3gpp.state-and-event-info+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.3gpp.ussd+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.3gpp2.bcmcsinfo+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.3gpp2.sms": { - "source": "iana" - }, - "application/vnd.3gpp2.tcap": { - "source": "iana", - "extensions": ["tcap"] - }, - "application/vnd.3lightssoftware.imagescal": { - "source": "iana" - }, - "application/vnd.3m.post-it-notes": { - "source": "iana", - "extensions": ["pwn"] - }, - "application/vnd.accpac.simply.aso": { - "source": "iana", - "extensions": ["aso"] - }, - "application/vnd.accpac.simply.imp": { - "source": "iana", - "extensions": ["imp"] - }, - "application/vnd.acucobol": { - "source": "iana", - "extensions": ["acu"] - }, - "application/vnd.acucorp": { - "source": "iana", - "extensions": ["atc","acutc"] - }, - "application/vnd.adobe.air-application-installer-package+zip": { - "source": "apache", - "compressible": false, - "extensions": ["air"] - }, - "application/vnd.adobe.flash.movie": { - "source": "iana" - }, - "application/vnd.adobe.formscentral.fcdt": { - "source": "iana", - "extensions": ["fcdt"] - }, - "application/vnd.adobe.fxp": { - "source": "iana", - "extensions": ["fxp","fxpl"] - }, - "application/vnd.adobe.partial-upload": { - "source": "iana" - }, - "application/vnd.adobe.xdp+xml": { - "source": "iana", - "compressible": true, - "extensions": ["xdp"] - }, - "application/vnd.adobe.xfdf": { - "source": "iana", - "extensions": ["xfdf"] - }, - "application/vnd.aether.imp": { - "source": "iana" - }, - "application/vnd.afpc.afplinedata": { - "source": "iana" - }, - "application/vnd.afpc.afplinedata-pagedef": { - "source": "iana" - }, - "application/vnd.afpc.cmoca-cmresource": { - "source": "iana" - }, - "application/vnd.afpc.foca-charset": { - "source": "iana" - }, - "application/vnd.afpc.foca-codedfont": { - "source": "iana" - }, - "application/vnd.afpc.foca-codepage": { - "source": "iana" - }, - "application/vnd.afpc.modca": { - "source": "iana" - }, - "application/vnd.afpc.modca-cmtable": { - "source": "iana" - }, - "application/vnd.afpc.modca-formdef": { - "source": "iana" - }, - "application/vnd.afpc.modca-mediummap": { - "source": "iana" - }, - "application/vnd.afpc.modca-objectcontainer": { - "source": "iana" - }, - "application/vnd.afpc.modca-overlay": { - "source": "iana" - }, - "application/vnd.afpc.modca-pagesegment": { - "source": "iana" - }, - "application/vnd.age": { - "source": "iana", - "extensions": ["age"] - }, - "application/vnd.ah-barcode": { - "source": "iana" - }, - "application/vnd.ahead.space": { - "source": "iana", - "extensions": ["ahead"] - }, - "application/vnd.airzip.filesecure.azf": { - "source": "iana", - "extensions": ["azf"] - }, - "application/vnd.airzip.filesecure.azs": { - "source": "iana", - "extensions": ["azs"] - }, - "application/vnd.amadeus+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.amazon.ebook": { - "source": "apache", - "extensions": ["azw"] - }, - "application/vnd.amazon.mobi8-ebook": { - "source": "iana" - }, - "application/vnd.americandynamics.acc": { - "source": "iana", - "extensions": ["acc"] - }, - "application/vnd.amiga.ami": { - "source": "iana", - "extensions": ["ami"] - }, - "application/vnd.amundsen.maze+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.android.ota": { - "source": "iana" - }, - "application/vnd.android.package-archive": { - "source": "apache", - "compressible": false, - "extensions": ["apk"] - }, - "application/vnd.anki": { - "source": "iana" - }, - "application/vnd.anser-web-certificate-issue-initiation": { - "source": "iana", - "extensions": ["cii"] - }, - "application/vnd.anser-web-funds-transfer-initiation": { - "source": "apache", - "extensions": ["fti"] - }, - "application/vnd.antix.game-component": { - "source": "iana", - "extensions": ["atx"] - }, - "application/vnd.apache.arrow.file": { - "source": "iana" - }, - "application/vnd.apache.arrow.stream": { - "source": "iana" - }, - "application/vnd.apache.thrift.binary": { - "source": "iana" - }, - "application/vnd.apache.thrift.compact": { - "source": "iana" - }, - "application/vnd.apache.thrift.json": { - "source": "iana" - }, - "application/vnd.api+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.aplextor.warrp+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.apothekende.reservation+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.apple.installer+xml": { - "source": "iana", - "compressible": true, - "extensions": ["mpkg"] - }, - "application/vnd.apple.keynote": { - "source": "iana", - "extensions": ["key"] - }, - "application/vnd.apple.mpegurl": { - "source": "iana", - "extensions": ["m3u8"] - }, - "application/vnd.apple.numbers": { - "source": "iana", - "extensions": ["numbers"] - }, - "application/vnd.apple.pages": { - "source": "iana", - "extensions": ["pages"] - }, - "application/vnd.apple.pkpass": { - "compressible": false, - "extensions": ["pkpass"] - }, - "application/vnd.arastra.swi": { - "source": "iana" - }, - "application/vnd.aristanetworks.swi": { - "source": "iana", - "extensions": ["swi"] - }, - "application/vnd.artisan+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.artsquare": { - "source": "iana" - }, - "application/vnd.astraea-software.iota": { - "source": "iana", - "extensions": ["iota"] - }, - "application/vnd.audiograph": { - "source": "iana", - "extensions": ["aep"] - }, - "application/vnd.autopackage": { - "source": "iana" - }, - "application/vnd.avalon+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.avistar+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.balsamiq.bmml+xml": { - "source": "iana", - "compressible": true, - "extensions": ["bmml"] - }, - "application/vnd.balsamiq.bmpr": { - "source": "iana" - }, - "application/vnd.banana-accounting": { - "source": "iana" - }, - "application/vnd.bbf.usp.error": { - "source": "iana" - }, - "application/vnd.bbf.usp.msg": { - "source": "iana" - }, - "application/vnd.bbf.usp.msg+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.bekitzur-stech+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.bint.med-content": { - "source": "iana" - }, - "application/vnd.biopax.rdf+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.blink-idb-value-wrapper": { - "source": "iana" - }, - "application/vnd.blueice.multipass": { - "source": "iana", - "extensions": ["mpm"] - }, - "application/vnd.bluetooth.ep.oob": { - "source": "iana" - }, - "application/vnd.bluetooth.le.oob": { - "source": "iana" - }, - "application/vnd.bmi": { - "source": "iana", - "extensions": ["bmi"] - }, - "application/vnd.bpf": { - "source": "iana" - }, - "application/vnd.bpf3": { - "source": "iana" - }, - "application/vnd.businessobjects": { - "source": "iana", - "extensions": ["rep"] - }, - "application/vnd.byu.uapi+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.cab-jscript": { - "source": "iana" - }, - "application/vnd.canon-cpdl": { - "source": "iana" - }, - "application/vnd.canon-lips": { - "source": "iana" - }, - "application/vnd.capasystems-pg+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.cendio.thinlinc.clientconf": { - "source": "iana" - }, - "application/vnd.century-systems.tcp_stream": { - "source": "iana" - }, - "application/vnd.chemdraw+xml": { - "source": "iana", - "compressible": true, - "extensions": ["cdxml"] - }, - "application/vnd.chess-pgn": { - "source": "iana" - }, - "application/vnd.chipnuts.karaoke-mmd": { - "source": "iana", - "extensions": ["mmd"] - }, - "application/vnd.ciedi": { - "source": "iana" - }, - "application/vnd.cinderella": { - "source": "iana", - "extensions": ["cdy"] - }, - "application/vnd.cirpack.isdn-ext": { - "source": "iana" - }, - "application/vnd.citationstyles.style+xml": { - "source": "iana", - "compressible": true, - "extensions": ["csl"] - }, - "application/vnd.claymore": { - "source": "iana", - "extensions": ["cla"] - }, - "application/vnd.cloanto.rp9": { - "source": "iana", - "extensions": ["rp9"] - }, - "application/vnd.clonk.c4group": { - "source": "iana", - "extensions": ["c4g","c4d","c4f","c4p","c4u"] - }, - "application/vnd.cluetrust.cartomobile-config": { - "source": "iana", - "extensions": ["c11amc"] - }, - "application/vnd.cluetrust.cartomobile-config-pkg": { - "source": "iana", - "extensions": ["c11amz"] - }, - "application/vnd.coffeescript": { - "source": "iana" - }, - "application/vnd.collabio.xodocuments.document": { - "source": "iana" - }, - "application/vnd.collabio.xodocuments.document-template": { - "source": "iana" - }, - "application/vnd.collabio.xodocuments.presentation": { - "source": "iana" - }, - "application/vnd.collabio.xodocuments.presentation-template": { - "source": "iana" - }, - "application/vnd.collabio.xodocuments.spreadsheet": { - "source": "iana" - }, - "application/vnd.collabio.xodocuments.spreadsheet-template": { - "source": "iana" - }, - "application/vnd.collection+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.collection.doc+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.collection.next+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.comicbook+zip": { - "source": "iana", - "compressible": false - }, - "application/vnd.comicbook-rar": { - "source": "iana" - }, - "application/vnd.commerce-battelle": { - "source": "iana" - }, - "application/vnd.commonspace": { - "source": "iana", - "extensions": ["csp"] - }, - "application/vnd.contact.cmsg": { - "source": "iana", - "extensions": ["cdbcmsg"] - }, - "application/vnd.coreos.ignition+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.cosmocaller": { - "source": "iana", - "extensions": ["cmc"] - }, - "application/vnd.crick.clicker": { - "source": "iana", - "extensions": ["clkx"] - }, - "application/vnd.crick.clicker.keyboard": { - "source": "iana", - "extensions": ["clkk"] - }, - "application/vnd.crick.clicker.palette": { - "source": "iana", - "extensions": ["clkp"] - }, - "application/vnd.crick.clicker.template": { - "source": "iana", - "extensions": ["clkt"] - }, - "application/vnd.crick.clicker.wordbank": { - "source": "iana", - "extensions": ["clkw"] - }, - "application/vnd.criticaltools.wbs+xml": { - "source": "iana", - "compressible": true, - "extensions": ["wbs"] - }, - "application/vnd.cryptii.pipe+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.crypto-shade-file": { - "source": "iana" - }, - "application/vnd.cryptomator.encrypted": { - "source": "iana" - }, - "application/vnd.cryptomator.vault": { - "source": "iana" - }, - "application/vnd.ctc-posml": { - "source": "iana", - "extensions": ["pml"] - }, - "application/vnd.ctct.ws+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.cups-pdf": { - "source": "iana" - }, - "application/vnd.cups-postscript": { - "source": "iana" - }, - "application/vnd.cups-ppd": { - "source": "iana", - "extensions": ["ppd"] - }, - "application/vnd.cups-raster": { - "source": "iana" - }, - "application/vnd.cups-raw": { - "source": "iana" - }, - "application/vnd.curl": { - "source": "iana" - }, - "application/vnd.curl.car": { - "source": "apache", - "extensions": ["car"] - }, - "application/vnd.curl.pcurl": { - "source": "apache", - "extensions": ["pcurl"] - }, - "application/vnd.cyan.dean.root+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.cybank": { - "source": "iana" - }, - "application/vnd.cyclonedx+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.cyclonedx+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.d2l.coursepackage1p0+zip": { - "source": "iana", - "compressible": false - }, - "application/vnd.d3m-dataset": { - "source": "iana" - }, - "application/vnd.d3m-problem": { - "source": "iana" - }, - "application/vnd.dart": { - "source": "iana", - "compressible": true, - "extensions": ["dart"] - }, - "application/vnd.data-vision.rdz": { - "source": "iana", - "extensions": ["rdz"] - }, - "application/vnd.datapackage+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.dataresource+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.dbf": { - "source": "iana", - "extensions": ["dbf"] - }, - "application/vnd.debian.binary-package": { - "source": "iana" - }, - "application/vnd.dece.data": { - "source": "iana", - "extensions": ["uvf","uvvf","uvd","uvvd"] - }, - "application/vnd.dece.ttml+xml": { - "source": "iana", - "compressible": true, - "extensions": ["uvt","uvvt"] - }, - "application/vnd.dece.unspecified": { - "source": "iana", - "extensions": ["uvx","uvvx"] - }, - "application/vnd.dece.zip": { - "source": "iana", - "extensions": ["uvz","uvvz"] - }, - "application/vnd.denovo.fcselayout-link": { - "source": "iana", - "extensions": ["fe_launch"] - }, - "application/vnd.desmume.movie": { - "source": "iana" - }, - "application/vnd.dir-bi.plate-dl-nosuffix": { - "source": "iana" - }, - "application/vnd.dm.delegation+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.dna": { - "source": "iana", - "extensions": ["dna"] - }, - "application/vnd.document+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.dolby.mlp": { - "source": "apache", - "extensions": ["mlp"] - }, - "application/vnd.dolby.mobile.1": { - "source": "iana" - }, - "application/vnd.dolby.mobile.2": { - "source": "iana" - }, - "application/vnd.doremir.scorecloud-binary-document": { - "source": "iana" - }, - "application/vnd.dpgraph": { - "source": "iana", - "extensions": ["dpg"] - }, - "application/vnd.dreamfactory": { - "source": "iana", - "extensions": ["dfac"] - }, - "application/vnd.drive+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.ds-keypoint": { - "source": "apache", - "extensions": ["kpxx"] - }, - "application/vnd.dtg.local": { - "source": "iana" - }, - "application/vnd.dtg.local.flash": { - "source": "iana" - }, - "application/vnd.dtg.local.html": { - "source": "iana" - }, - "application/vnd.dvb.ait": { - "source": "iana", - "extensions": ["ait"] - }, - "application/vnd.dvb.dvbisl+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.dvb.dvbj": { - "source": "iana" - }, - "application/vnd.dvb.esgcontainer": { - "source": "iana" - }, - "application/vnd.dvb.ipdcdftnotifaccess": { - "source": "iana" - }, - "application/vnd.dvb.ipdcesgaccess": { - "source": "iana" - }, - "application/vnd.dvb.ipdcesgaccess2": { - "source": "iana" - }, - "application/vnd.dvb.ipdcesgpdd": { - "source": "iana" - }, - "application/vnd.dvb.ipdcroaming": { - "source": "iana" - }, - "application/vnd.dvb.iptv.alfec-base": { - "source": "iana" - }, - "application/vnd.dvb.iptv.alfec-enhancement": { - "source": "iana" - }, - "application/vnd.dvb.notif-aggregate-root+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.dvb.notif-container+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.dvb.notif-generic+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.dvb.notif-ia-msglist+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.dvb.notif-ia-registration-request+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.dvb.notif-ia-registration-response+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.dvb.notif-init+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.dvb.pfr": { - "source": "iana" - }, - "application/vnd.dvb.service": { - "source": "iana", - "extensions": ["svc"] - }, - "application/vnd.dxr": { - "source": "iana" - }, - "application/vnd.dynageo": { - "source": "iana", - "extensions": ["geo"] - }, - "application/vnd.dzr": { - "source": "iana" - }, - "application/vnd.easykaraoke.cdgdownload": { - "source": "iana" - }, - "application/vnd.ecdis-update": { - "source": "iana" - }, - "application/vnd.ecip.rlp": { - "source": "iana" - }, - "application/vnd.eclipse.ditto+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.ecowin.chart": { - "source": "iana", - "extensions": ["mag"] - }, - "application/vnd.ecowin.filerequest": { - "source": "iana" - }, - "application/vnd.ecowin.fileupdate": { - "source": "iana" - }, - "application/vnd.ecowin.series": { - "source": "iana" - }, - "application/vnd.ecowin.seriesrequest": { - "source": "iana" - }, - "application/vnd.ecowin.seriesupdate": { - "source": "iana" - }, - "application/vnd.efi.img": { - "source": "iana" - }, - "application/vnd.efi.iso": { - "source": "iana" - }, - "application/vnd.emclient.accessrequest+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.enliven": { - "source": "iana", - "extensions": ["nml"] - }, - "application/vnd.enphase.envoy": { - "source": "iana" - }, - "application/vnd.eprints.data+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.epson.esf": { - "source": "iana", - "extensions": ["esf"] - }, - "application/vnd.epson.msf": { - "source": "iana", - "extensions": ["msf"] - }, - "application/vnd.epson.quickanime": { - "source": "iana", - "extensions": ["qam"] - }, - "application/vnd.epson.salt": { - "source": "iana", - "extensions": ["slt"] - }, - "application/vnd.epson.ssf": { - "source": "iana", - "extensions": ["ssf"] - }, - "application/vnd.ericsson.quickcall": { - "source": "iana" - }, - "application/vnd.espass-espass+zip": { - "source": "iana", - "compressible": false - }, - "application/vnd.eszigno3+xml": { - "source": "iana", - "compressible": true, - "extensions": ["es3","et3"] - }, - "application/vnd.etsi.aoc+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.etsi.asic-e+zip": { - "source": "iana", - "compressible": false - }, - "application/vnd.etsi.asic-s+zip": { - "source": "iana", - "compressible": false - }, - "application/vnd.etsi.cug+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.etsi.iptvcommand+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.etsi.iptvdiscovery+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.etsi.iptvprofile+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.etsi.iptvsad-bc+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.etsi.iptvsad-cod+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.etsi.iptvsad-npvr+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.etsi.iptvservice+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.etsi.iptvsync+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.etsi.iptvueprofile+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.etsi.mcid+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.etsi.mheg5": { - "source": "iana" - }, - "application/vnd.etsi.overload-control-policy-dataset+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.etsi.pstn+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.etsi.sci+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.etsi.simservs+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.etsi.timestamp-token": { - "source": "iana" - }, - "application/vnd.etsi.tsl+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.etsi.tsl.der": { - "source": "iana" - }, - "application/vnd.eu.kasparian.car+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.eudora.data": { - "source": "iana" - }, - "application/vnd.evolv.ecig.profile": { - "source": "iana" - }, - "application/vnd.evolv.ecig.settings": { - "source": "iana" - }, - "application/vnd.evolv.ecig.theme": { - "source": "iana" - }, - "application/vnd.exstream-empower+zip": { - "source": "iana", - "compressible": false - }, - "application/vnd.exstream-package": { - "source": "iana" - }, - "application/vnd.ezpix-album": { - "source": "iana", - "extensions": ["ez2"] - }, - "application/vnd.ezpix-package": { - "source": "iana", - "extensions": ["ez3"] - }, - "application/vnd.f-secure.mobile": { - "source": "iana" - }, - "application/vnd.familysearch.gedcom+zip": { - "source": "iana", - "compressible": false - }, - "application/vnd.fastcopy-disk-image": { - "source": "iana" - }, - "application/vnd.fdf": { - "source": "iana", - "extensions": ["fdf"] - }, - "application/vnd.fdsn.mseed": { - "source": "iana", - "extensions": ["mseed"] - }, - "application/vnd.fdsn.seed": { - "source": "iana", - "extensions": ["seed","dataless"] - }, - "application/vnd.ffsns": { - "source": "iana" - }, - "application/vnd.ficlab.flb+zip": { - "source": "iana", - "compressible": false - }, - "application/vnd.filmit.zfc": { - "source": "iana" - }, - "application/vnd.fints": { - "source": "iana" - }, - "application/vnd.firemonkeys.cloudcell": { - "source": "iana" - }, - "application/vnd.flographit": { - "source": "iana", - "extensions": ["gph"] - }, - "application/vnd.fluxtime.clip": { - "source": "iana", - "extensions": ["ftc"] - }, - "application/vnd.font-fontforge-sfd": { - "source": "iana" - }, - "application/vnd.framemaker": { - "source": "iana", - "extensions": ["fm","frame","maker","book"] - }, - "application/vnd.frogans.fnc": { - "source": "iana", - "extensions": ["fnc"] - }, - "application/vnd.frogans.ltf": { - "source": "iana", - "extensions": ["ltf"] - }, - "application/vnd.fsc.weblaunch": { - "source": "iana", - "extensions": ["fsc"] - }, - "application/vnd.fujifilm.fb.docuworks": { - "source": "iana" - }, - "application/vnd.fujifilm.fb.docuworks.binder": { - "source": "iana" - }, - "application/vnd.fujifilm.fb.docuworks.container": { - "source": "iana" - }, - "application/vnd.fujifilm.fb.jfi+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.fujitsu.oasys": { - "source": "iana", - "extensions": ["oas"] - }, - "application/vnd.fujitsu.oasys2": { - "source": "iana", - "extensions": ["oa2"] - }, - "application/vnd.fujitsu.oasys3": { - "source": "iana", - "extensions": ["oa3"] - }, - "application/vnd.fujitsu.oasysgp": { - "source": "iana", - "extensions": ["fg5"] - }, - "application/vnd.fujitsu.oasysprs": { - "source": "iana", - "extensions": ["bh2"] - }, - "application/vnd.fujixerox.art-ex": { - "source": "iana" - }, - "application/vnd.fujixerox.art4": { - "source": "iana" - }, - "application/vnd.fujixerox.ddd": { - "source": "iana", - "extensions": ["ddd"] - }, - "application/vnd.fujixerox.docuworks": { - "source": "iana", - "extensions": ["xdw"] - }, - "application/vnd.fujixerox.docuworks.binder": { - "source": "iana", - "extensions": ["xbd"] - }, - "application/vnd.fujixerox.docuworks.container": { - "source": "iana" - }, - "application/vnd.fujixerox.hbpl": { - "source": "iana" - }, - "application/vnd.fut-misnet": { - "source": "iana" - }, - "application/vnd.futoin+cbor": { - "source": "iana" - }, - "application/vnd.futoin+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.fuzzysheet": { - "source": "iana", - "extensions": ["fzs"] - }, - "application/vnd.genomatix.tuxedo": { - "source": "iana", - "extensions": ["txd"] - }, - "application/vnd.gentics.grd+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.geo+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.geocube+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.geogebra.file": { - "source": "iana", - "extensions": ["ggb"] - }, - "application/vnd.geogebra.slides": { - "source": "iana" - }, - "application/vnd.geogebra.tool": { - "source": "iana", - "extensions": ["ggt"] - }, - "application/vnd.geometry-explorer": { - "source": "iana", - "extensions": ["gex","gre"] - }, - "application/vnd.geonext": { - "source": "iana", - "extensions": ["gxt"] - }, - "application/vnd.geoplan": { - "source": "iana", - "extensions": ["g2w"] - }, - "application/vnd.geospace": { - "source": "iana", - "extensions": ["g3w"] - }, - "application/vnd.gerber": { - "source": "iana" - }, - "application/vnd.globalplatform.card-content-mgt": { - "source": "iana" - }, - "application/vnd.globalplatform.card-content-mgt-response": { - "source": "iana" - }, - "application/vnd.gmx": { - "source": "iana", - "extensions": ["gmx"] - }, - "application/vnd.google-apps.document": { - "compressible": false, - "extensions": ["gdoc"] - }, - "application/vnd.google-apps.presentation": { - "compressible": false, - "extensions": ["gslides"] - }, - "application/vnd.google-apps.spreadsheet": { - "compressible": false, - "extensions": ["gsheet"] - }, - "application/vnd.google-earth.kml+xml": { - "source": "iana", - "compressible": true, - "extensions": ["kml"] - }, - "application/vnd.google-earth.kmz": { - "source": "iana", - "compressible": false, - "extensions": ["kmz"] - }, - "application/vnd.gov.sk.e-form+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.gov.sk.e-form+zip": { - "source": "iana", - "compressible": false - }, - "application/vnd.gov.sk.xmldatacontainer+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.grafeq": { - "source": "iana", - "extensions": ["gqf","gqs"] - }, - "application/vnd.gridmp": { - "source": "iana" - }, - "application/vnd.groove-account": { - "source": "iana", - "extensions": ["gac"] - }, - "application/vnd.groove-help": { - "source": "iana", - "extensions": ["ghf"] - }, - "application/vnd.groove-identity-message": { - "source": "iana", - "extensions": ["gim"] - }, - "application/vnd.groove-injector": { - "source": "iana", - "extensions": ["grv"] - }, - "application/vnd.groove-tool-message": { - "source": "iana", - "extensions": ["gtm"] - }, - "application/vnd.groove-tool-template": { - "source": "iana", - "extensions": ["tpl"] - }, - "application/vnd.groove-vcard": { - "source": "iana", - "extensions": ["vcg"] - }, - "application/vnd.hal+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.hal+xml": { - "source": "iana", - "compressible": true, - "extensions": ["hal"] - }, - "application/vnd.handheld-entertainment+xml": { - "source": "iana", - "compressible": true, - "extensions": ["zmm"] - }, - "application/vnd.hbci": { - "source": "iana", - "extensions": ["hbci"] - }, - "application/vnd.hc+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.hcl-bireports": { - "source": "iana" - }, - "application/vnd.hdt": { - "source": "iana" - }, - "application/vnd.heroku+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.hhe.lesson-player": { - "source": "iana", - "extensions": ["les"] - }, - "application/vnd.hl7cda+xml": { - "source": "iana", - "charset": "UTF-8", - "compressible": true - }, - "application/vnd.hl7v2+xml": { - "source": "iana", - "charset": "UTF-8", - "compressible": true - }, - "application/vnd.hp-hpgl": { - "source": "iana", - "extensions": ["hpgl"] - }, - "application/vnd.hp-hpid": { - "source": "iana", - "extensions": ["hpid"] - }, - "application/vnd.hp-hps": { - "source": "iana", - "extensions": ["hps"] - }, - "application/vnd.hp-jlyt": { - "source": "iana", - "extensions": ["jlt"] - }, - "application/vnd.hp-pcl": { - "source": "iana", - "extensions": ["pcl"] - }, - "application/vnd.hp-pclxl": { - "source": "iana", - "extensions": ["pclxl"] - }, - "application/vnd.httphone": { - "source": "iana" - }, - "application/vnd.hydrostatix.sof-data": { - "source": "iana", - "extensions": ["sfd-hdstx"] - }, - "application/vnd.hyper+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.hyper-item+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.hyperdrive+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.hzn-3d-crossword": { - "source": "iana" - }, - "application/vnd.ibm.afplinedata": { - "source": "iana" - }, - "application/vnd.ibm.electronic-media": { - "source": "iana" - }, - "application/vnd.ibm.minipay": { - "source": "iana", - "extensions": ["mpy"] - }, - "application/vnd.ibm.modcap": { - "source": "iana", - "extensions": ["afp","listafp","list3820"] - }, - "application/vnd.ibm.rights-management": { - "source": "iana", - "extensions": ["irm"] - }, - "application/vnd.ibm.secure-container": { - "source": "iana", - "extensions": ["sc"] - }, - "application/vnd.iccprofile": { - "source": "iana", - "extensions": ["icc","icm"] - }, - "application/vnd.ieee.1905": { - "source": "iana" - }, - "application/vnd.igloader": { - "source": "iana", - "extensions": ["igl"] - }, - "application/vnd.imagemeter.folder+zip": { - "source": "iana", - "compressible": false - }, - "application/vnd.imagemeter.image+zip": { - "source": "iana", - "compressible": false - }, - "application/vnd.immervision-ivp": { - "source": "iana", - "extensions": ["ivp"] - }, - "application/vnd.immervision-ivu": { - "source": "iana", - "extensions": ["ivu"] - }, - "application/vnd.ims.imsccv1p1": { - "source": "iana" - }, - "application/vnd.ims.imsccv1p2": { - "source": "iana" - }, - "application/vnd.ims.imsccv1p3": { - "source": "iana" - }, - "application/vnd.ims.lis.v2.result+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.ims.lti.v2.toolconsumerprofile+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.ims.lti.v2.toolproxy+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.ims.lti.v2.toolproxy.id+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.ims.lti.v2.toolsettings+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.ims.lti.v2.toolsettings.simple+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.informedcontrol.rms+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.informix-visionary": { - "source": "iana" - }, - "application/vnd.infotech.project": { - "source": "iana" - }, - "application/vnd.infotech.project+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.innopath.wamp.notification": { - "source": "iana" - }, - "application/vnd.insors.igm": { - "source": "iana", - "extensions": ["igm"] - }, - "application/vnd.intercon.formnet": { - "source": "iana", - "extensions": ["xpw","xpx"] - }, - "application/vnd.intergeo": { - "source": "iana", - "extensions": ["i2g"] - }, - "application/vnd.intertrust.digibox": { - "source": "iana" - }, - "application/vnd.intertrust.nncp": { - "source": "iana" - }, - "application/vnd.intu.qbo": { - "source": "iana", - "extensions": ["qbo"] - }, - "application/vnd.intu.qfx": { - "source": "iana", - "extensions": ["qfx"] - }, - "application/vnd.iptc.g2.catalogitem+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.iptc.g2.conceptitem+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.iptc.g2.knowledgeitem+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.iptc.g2.newsitem+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.iptc.g2.newsmessage+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.iptc.g2.packageitem+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.iptc.g2.planningitem+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.ipunplugged.rcprofile": { - "source": "iana", - "extensions": ["rcprofile"] - }, - "application/vnd.irepository.package+xml": { - "source": "iana", - "compressible": true, - "extensions": ["irp"] - }, - "application/vnd.is-xpr": { - "source": "iana", - "extensions": ["xpr"] - }, - "application/vnd.isac.fcs": { - "source": "iana", - "extensions": ["fcs"] - }, - "application/vnd.iso11783-10+zip": { - "source": "iana", - "compressible": false - }, - "application/vnd.jam": { - "source": "iana", - "extensions": ["jam"] - }, - "application/vnd.japannet-directory-service": { - "source": "iana" - }, - "application/vnd.japannet-jpnstore-wakeup": { - "source": "iana" - }, - "application/vnd.japannet-payment-wakeup": { - "source": "iana" - }, - "application/vnd.japannet-registration": { - "source": "iana" - }, - "application/vnd.japannet-registration-wakeup": { - "source": "iana" - }, - "application/vnd.japannet-setstore-wakeup": { - "source": "iana" - }, - "application/vnd.japannet-verification": { - "source": "iana" - }, - "application/vnd.japannet-verification-wakeup": { - "source": "iana" - }, - "application/vnd.jcp.javame.midlet-rms": { - "source": "iana", - "extensions": ["rms"] - }, - "application/vnd.jisp": { - "source": "iana", - "extensions": ["jisp"] - }, - "application/vnd.joost.joda-archive": { - "source": "iana", - "extensions": ["joda"] - }, - "application/vnd.jsk.isdn-ngn": { - "source": "iana" - }, - "application/vnd.kahootz": { - "source": "iana", - "extensions": ["ktz","ktr"] - }, - "application/vnd.kde.karbon": { - "source": "iana", - "extensions": ["karbon"] - }, - "application/vnd.kde.kchart": { - "source": "iana", - "extensions": ["chrt"] - }, - "application/vnd.kde.kformula": { - "source": "iana", - "extensions": ["kfo"] - }, - "application/vnd.kde.kivio": { - "source": "iana", - "extensions": ["flw"] - }, - "application/vnd.kde.kontour": { - "source": "iana", - "extensions": ["kon"] - }, - "application/vnd.kde.kpresenter": { - "source": "iana", - "extensions": ["kpr","kpt"] - }, - "application/vnd.kde.kspread": { - "source": "iana", - "extensions": ["ksp"] - }, - "application/vnd.kde.kword": { - "source": "iana", - "extensions": ["kwd","kwt"] - }, - "application/vnd.kenameaapp": { - "source": "iana", - "extensions": ["htke"] - }, - "application/vnd.kidspiration": { - "source": "iana", - "extensions": ["kia"] - }, - "application/vnd.kinar": { - "source": "iana", - "extensions": ["kne","knp"] - }, - "application/vnd.koan": { - "source": "iana", - "extensions": ["skp","skd","skt","skm"] - }, - "application/vnd.kodak-descriptor": { - "source": "iana", - "extensions": ["sse"] - }, - "application/vnd.las": { - "source": "iana" - }, - "application/vnd.las.las+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.las.las+xml": { - "source": "iana", - "compressible": true, - "extensions": ["lasxml"] - }, - "application/vnd.laszip": { - "source": "iana" - }, - "application/vnd.leap+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.liberty-request+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.llamagraphics.life-balance.desktop": { - "source": "iana", - "extensions": ["lbd"] - }, - "application/vnd.llamagraphics.life-balance.exchange+xml": { - "source": "iana", - "compressible": true, - "extensions": ["lbe"] - }, - "application/vnd.logipipe.circuit+zip": { - "source": "iana", - "compressible": false - }, - "application/vnd.loom": { - "source": "iana" - }, - "application/vnd.lotus-1-2-3": { - "source": "iana", - "extensions": ["123"] - }, - "application/vnd.lotus-approach": { - "source": "iana", - "extensions": ["apr"] - }, - "application/vnd.lotus-freelance": { - "source": "iana", - "extensions": ["pre"] - }, - "application/vnd.lotus-notes": { - "source": "iana", - "extensions": ["nsf"] - }, - "application/vnd.lotus-organizer": { - "source": "iana", - "extensions": ["org"] - }, - "application/vnd.lotus-screencam": { - "source": "iana", - "extensions": ["scm"] - }, - "application/vnd.lotus-wordpro": { - "source": "iana", - "extensions": ["lwp"] - }, - "application/vnd.macports.portpkg": { - "source": "iana", - "extensions": ["portpkg"] - }, - "application/vnd.mapbox-vector-tile": { - "source": "iana", - "extensions": ["mvt"] - }, - "application/vnd.marlin.drm.actiontoken+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.marlin.drm.conftoken+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.marlin.drm.license+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.marlin.drm.mdcf": { - "source": "iana" - }, - "application/vnd.mason+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.maxar.archive.3tz+zip": { - "source": "iana", - "compressible": false - }, - "application/vnd.maxmind.maxmind-db": { - "source": "iana" - }, - "application/vnd.mcd": { - "source": "iana", - "extensions": ["mcd"] - }, - "application/vnd.medcalcdata": { - "source": "iana", - "extensions": ["mc1"] - }, - "application/vnd.mediastation.cdkey": { - "source": "iana", - "extensions": ["cdkey"] - }, - "application/vnd.meridian-slingshot": { - "source": "iana" - }, - "application/vnd.mfer": { - "source": "iana", - "extensions": ["mwf"] - }, - "application/vnd.mfmp": { - "source": "iana", - "extensions": ["mfm"] - }, - "application/vnd.micro+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.micrografx.flo": { - "source": "iana", - "extensions": ["flo"] - }, - "application/vnd.micrografx.igx": { - "source": "iana", - "extensions": ["igx"] - }, - "application/vnd.microsoft.portable-executable": { - "source": "iana" - }, - "application/vnd.microsoft.windows.thumbnail-cache": { - "source": "iana" - }, - "application/vnd.miele+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.mif": { - "source": "iana", - "extensions": ["mif"] - }, - "application/vnd.minisoft-hp3000-save": { - "source": "iana" - }, - "application/vnd.mitsubishi.misty-guard.trustweb": { - "source": "iana" - }, - "application/vnd.mobius.daf": { - "source": "iana", - "extensions": ["daf"] - }, - "application/vnd.mobius.dis": { - "source": "iana", - "extensions": ["dis"] - }, - "application/vnd.mobius.mbk": { - "source": "iana", - "extensions": ["mbk"] - }, - "application/vnd.mobius.mqy": { - "source": "iana", - "extensions": ["mqy"] - }, - "application/vnd.mobius.msl": { - "source": "iana", - "extensions": ["msl"] - }, - "application/vnd.mobius.plc": { - "source": "iana", - "extensions": ["plc"] - }, - "application/vnd.mobius.txf": { - "source": "iana", - "extensions": ["txf"] - }, - "application/vnd.mophun.application": { - "source": "iana", - "extensions": ["mpn"] - }, - "application/vnd.mophun.certificate": { - "source": "iana", - "extensions": ["mpc"] - }, - "application/vnd.motorola.flexsuite": { - "source": "iana" - }, - "application/vnd.motorola.flexsuite.adsi": { - "source": "iana" - }, - "application/vnd.motorola.flexsuite.fis": { - "source": "iana" - }, - "application/vnd.motorola.flexsuite.gotap": { - "source": "iana" - }, - "application/vnd.motorola.flexsuite.kmr": { - "source": "iana" - }, - "application/vnd.motorola.flexsuite.ttc": { - "source": "iana" - }, - "application/vnd.motorola.flexsuite.wem": { - "source": "iana" - }, - "application/vnd.motorola.iprm": { - "source": "iana" - }, - "application/vnd.mozilla.xul+xml": { - "source": "iana", - "compressible": true, - "extensions": ["xul"] - }, - "application/vnd.ms-3mfdocument": { - "source": "iana" - }, - "application/vnd.ms-artgalry": { - "source": "iana", - "extensions": ["cil"] - }, - "application/vnd.ms-asf": { - "source": "iana" - }, - "application/vnd.ms-cab-compressed": { - "source": "iana", - "extensions": ["cab"] - }, - "application/vnd.ms-color.iccprofile": { - "source": "apache" - }, - "application/vnd.ms-excel": { - "source": "iana", - "compressible": false, - "extensions": ["xls","xlm","xla","xlc","xlt","xlw"] - }, - "application/vnd.ms-excel.addin.macroenabled.12": { - "source": "iana", - "extensions": ["xlam"] - }, - "application/vnd.ms-excel.sheet.binary.macroenabled.12": { - "source": "iana", - "extensions": ["xlsb"] - }, - "application/vnd.ms-excel.sheet.macroenabled.12": { - "source": "iana", - "extensions": ["xlsm"] - }, - "application/vnd.ms-excel.template.macroenabled.12": { - "source": "iana", - "extensions": ["xltm"] - }, - "application/vnd.ms-fontobject": { - "source": "iana", - "compressible": true, - "extensions": ["eot"] - }, - "application/vnd.ms-htmlhelp": { - "source": "iana", - "extensions": ["chm"] - }, - "application/vnd.ms-ims": { - "source": "iana", - "extensions": ["ims"] - }, - "application/vnd.ms-lrm": { - "source": "iana", - "extensions": ["lrm"] - }, - "application/vnd.ms-office.activex+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.ms-officetheme": { - "source": "iana", - "extensions": ["thmx"] - }, - "application/vnd.ms-opentype": { - "source": "apache", - "compressible": true - }, - "application/vnd.ms-outlook": { - "compressible": false, - "extensions": ["msg"] - }, - "application/vnd.ms-package.obfuscated-opentype": { - "source": "apache" - }, - "application/vnd.ms-pki.seccat": { - "source": "apache", - "extensions": ["cat"] - }, - "application/vnd.ms-pki.stl": { - "source": "apache", - "extensions": ["stl"] - }, - "application/vnd.ms-playready.initiator+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.ms-powerpoint": { - "source": "iana", - "compressible": false, - "extensions": ["ppt","pps","pot"] - }, - "application/vnd.ms-powerpoint.addin.macroenabled.12": { - "source": "iana", - "extensions": ["ppam"] - }, - "application/vnd.ms-powerpoint.presentation.macroenabled.12": { - "source": "iana", - "extensions": ["pptm"] - }, - "application/vnd.ms-powerpoint.slide.macroenabled.12": { - "source": "iana", - "extensions": ["sldm"] - }, - "application/vnd.ms-powerpoint.slideshow.macroenabled.12": { - "source": "iana", - "extensions": ["ppsm"] - }, - "application/vnd.ms-powerpoint.template.macroenabled.12": { - "source": "iana", - "extensions": ["potm"] - }, - "application/vnd.ms-printdevicecapabilities+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.ms-printing.printticket+xml": { - "source": "apache", - "compressible": true - }, - "application/vnd.ms-printschematicket+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.ms-project": { - "source": "iana", - "extensions": ["mpp","mpt"] - }, - "application/vnd.ms-tnef": { - "source": "iana" - }, - "application/vnd.ms-windows.devicepairing": { - "source": "iana" - }, - "application/vnd.ms-windows.nwprinting.oob": { - "source": "iana" - }, - "application/vnd.ms-windows.printerpairing": { - "source": "iana" - }, - "application/vnd.ms-windows.wsd.oob": { - "source": "iana" - }, - "application/vnd.ms-wmdrm.lic-chlg-req": { - "source": "iana" - }, - "application/vnd.ms-wmdrm.lic-resp": { - "source": "iana" - }, - "application/vnd.ms-wmdrm.meter-chlg-req": { - "source": "iana" - }, - "application/vnd.ms-wmdrm.meter-resp": { - "source": "iana" - }, - "application/vnd.ms-word.document.macroenabled.12": { - "source": "iana", - "extensions": ["docm"] - }, - "application/vnd.ms-word.template.macroenabled.12": { - "source": "iana", - "extensions": ["dotm"] - }, - "application/vnd.ms-works": { - "source": "iana", - "extensions": ["wps","wks","wcm","wdb"] - }, - "application/vnd.ms-wpl": { - "source": "iana", - "extensions": ["wpl"] - }, - "application/vnd.ms-xpsdocument": { - "source": "iana", - "compressible": false, - "extensions": ["xps"] - }, - "application/vnd.msa-disk-image": { - "source": "iana" - }, - "application/vnd.mseq": { - "source": "iana", - "extensions": ["mseq"] - }, - "application/vnd.msign": { - "source": "iana" - }, - "application/vnd.multiad.creator": { - "source": "iana" - }, - "application/vnd.multiad.creator.cif": { - "source": "iana" - }, - "application/vnd.music-niff": { - "source": "iana" - }, - "application/vnd.musician": { - "source": "iana", - "extensions": ["mus"] - }, - "application/vnd.muvee.style": { - "source": "iana", - "extensions": ["msty"] - }, - "application/vnd.mynfc": { - "source": "iana", - "extensions": ["taglet"] - }, - "application/vnd.nacamar.ybrid+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.ncd.control": { - "source": "iana" - }, - "application/vnd.ncd.reference": { - "source": "iana" - }, - "application/vnd.nearst.inv+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.nebumind.line": { - "source": "iana" - }, - "application/vnd.nervana": { - "source": "iana" - }, - "application/vnd.netfpx": { - "source": "iana" - }, - "application/vnd.neurolanguage.nlu": { - "source": "iana", - "extensions": ["nlu"] - }, - "application/vnd.nimn": { - "source": "iana" - }, - "application/vnd.nintendo.nitro.rom": { - "source": "iana" - }, - "application/vnd.nintendo.snes.rom": { - "source": "iana" - }, - "application/vnd.nitf": { - "source": "iana", - "extensions": ["ntf","nitf"] - }, - "application/vnd.noblenet-directory": { - "source": "iana", - "extensions": ["nnd"] - }, - "application/vnd.noblenet-sealer": { - "source": "iana", - "extensions": ["nns"] - }, - "application/vnd.noblenet-web": { - "source": "iana", - "extensions": ["nnw"] - }, - "application/vnd.nokia.catalogs": { - "source": "iana" - }, - "application/vnd.nokia.conml+wbxml": { - "source": "iana" - }, - "application/vnd.nokia.conml+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.nokia.iptv.config+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.nokia.isds-radio-presets": { - "source": "iana" - }, - "application/vnd.nokia.landmark+wbxml": { - "source": "iana" - }, - "application/vnd.nokia.landmark+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.nokia.landmarkcollection+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.nokia.n-gage.ac+xml": { - "source": "iana", - "compressible": true, - "extensions": ["ac"] - }, - "application/vnd.nokia.n-gage.data": { - "source": "iana", - "extensions": ["ngdat"] - }, - "application/vnd.nokia.n-gage.symbian.install": { - "source": "iana", - "extensions": ["n-gage"] - }, - "application/vnd.nokia.ncd": { - "source": "iana" - }, - "application/vnd.nokia.pcd+wbxml": { - "source": "iana" - }, - "application/vnd.nokia.pcd+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.nokia.radio-preset": { - "source": "iana", - "extensions": ["rpst"] - }, - "application/vnd.nokia.radio-presets": { - "source": "iana", - "extensions": ["rpss"] - }, - "application/vnd.novadigm.edm": { - "source": "iana", - "extensions": ["edm"] - }, - "application/vnd.novadigm.edx": { - "source": "iana", - "extensions": ["edx"] - }, - "application/vnd.novadigm.ext": { - "source": "iana", - "extensions": ["ext"] - }, - "application/vnd.ntt-local.content-share": { - "source": "iana" - }, - "application/vnd.ntt-local.file-transfer": { - "source": "iana" - }, - "application/vnd.ntt-local.ogw_remote-access": { - "source": "iana" - }, - "application/vnd.ntt-local.sip-ta_remote": { - "source": "iana" - }, - "application/vnd.ntt-local.sip-ta_tcp_stream": { - "source": "iana" - }, - "application/vnd.oasis.opendocument.chart": { - "source": "iana", - "extensions": ["odc"] - }, - "application/vnd.oasis.opendocument.chart-template": { - "source": "iana", - "extensions": ["otc"] - }, - "application/vnd.oasis.opendocument.database": { - "source": "iana", - "extensions": ["odb"] - }, - "application/vnd.oasis.opendocument.formula": { - "source": "iana", - "extensions": ["odf"] - }, - "application/vnd.oasis.opendocument.formula-template": { - "source": "iana", - "extensions": ["odft"] - }, - "application/vnd.oasis.opendocument.graphics": { - "source": "iana", - "compressible": false, - "extensions": ["odg"] - }, - "application/vnd.oasis.opendocument.graphics-template": { - "source": "iana", - "extensions": ["otg"] - }, - "application/vnd.oasis.opendocument.image": { - "source": "iana", - "extensions": ["odi"] - }, - "application/vnd.oasis.opendocument.image-template": { - "source": "iana", - "extensions": ["oti"] - }, - "application/vnd.oasis.opendocument.presentation": { - "source": "iana", - "compressible": false, - "extensions": ["odp"] - }, - "application/vnd.oasis.opendocument.presentation-template": { - "source": "iana", - "extensions": ["otp"] - }, - "application/vnd.oasis.opendocument.spreadsheet": { - "source": "iana", - "compressible": false, - "extensions": ["ods"] - }, - "application/vnd.oasis.opendocument.spreadsheet-template": { - "source": "iana", - "extensions": ["ots"] - }, - "application/vnd.oasis.opendocument.text": { - "source": "iana", - "compressible": false, - "extensions": ["odt"] - }, - "application/vnd.oasis.opendocument.text-master": { - "source": "iana", - "extensions": ["odm"] - }, - "application/vnd.oasis.opendocument.text-template": { - "source": "iana", - "extensions": ["ott"] - }, - "application/vnd.oasis.opendocument.text-web": { - "source": "iana", - "extensions": ["oth"] - }, - "application/vnd.obn": { - "source": "iana" - }, - "application/vnd.ocf+cbor": { - "source": "iana" - }, - "application/vnd.oci.image.manifest.v1+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.oftn.l10n+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.oipf.contentaccessdownload+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oipf.contentaccessstreaming+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oipf.cspg-hexbinary": { - "source": "iana" - }, - "application/vnd.oipf.dae.svg+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oipf.dae.xhtml+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oipf.mippvcontrolmessage+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oipf.pae.gem": { - "source": "iana" - }, - "application/vnd.oipf.spdiscovery+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oipf.spdlist+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oipf.ueprofile+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oipf.userprofile+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.olpc-sugar": { - "source": "iana", - "extensions": ["xo"] - }, - "application/vnd.oma-scws-config": { - "source": "iana" - }, - "application/vnd.oma-scws-http-request": { - "source": "iana" - }, - "application/vnd.oma-scws-http-response": { - "source": "iana" - }, - "application/vnd.oma.bcast.associated-procedure-parameter+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oma.bcast.drm-trigger+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oma.bcast.imd+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oma.bcast.ltkm": { - "source": "iana" - }, - "application/vnd.oma.bcast.notification+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oma.bcast.provisioningtrigger": { - "source": "iana" - }, - "application/vnd.oma.bcast.sgboot": { - "source": "iana" - }, - "application/vnd.oma.bcast.sgdd+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oma.bcast.sgdu": { - "source": "iana" - }, - "application/vnd.oma.bcast.simple-symbol-container": { - "source": "iana" - }, - "application/vnd.oma.bcast.smartcard-trigger+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oma.bcast.sprov+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oma.bcast.stkm": { - "source": "iana" - }, - "application/vnd.oma.cab-address-book+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oma.cab-feature-handler+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oma.cab-pcc+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oma.cab-subs-invite+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oma.cab-user-prefs+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oma.dcd": { - "source": "iana" - }, - "application/vnd.oma.dcdc": { - "source": "iana" - }, - "application/vnd.oma.dd2+xml": { - "source": "iana", - "compressible": true, - "extensions": ["dd2"] - }, - "application/vnd.oma.drm.risd+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oma.group-usage-list+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oma.lwm2m+cbor": { - "source": "iana" - }, - "application/vnd.oma.lwm2m+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.oma.lwm2m+tlv": { - "source": "iana" - }, - "application/vnd.oma.pal+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oma.poc.detailed-progress-report+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oma.poc.final-report+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oma.poc.groups+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oma.poc.invocation-descriptor+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oma.poc.optimized-progress-report+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oma.push": { - "source": "iana" - }, - "application/vnd.oma.scidm.messages+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oma.xcap-directory+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.omads-email+xml": { - "source": "iana", - "charset": "UTF-8", - "compressible": true - }, - "application/vnd.omads-file+xml": { - "source": "iana", - "charset": "UTF-8", - "compressible": true - }, - "application/vnd.omads-folder+xml": { - "source": "iana", - "charset": "UTF-8", - "compressible": true - }, - "application/vnd.omaloc-supl-init": { - "source": "iana" - }, - "application/vnd.onepager": { - "source": "iana" - }, - "application/vnd.onepagertamp": { - "source": "iana" - }, - "application/vnd.onepagertamx": { - "source": "iana" - }, - "application/vnd.onepagertat": { - "source": "iana" - }, - "application/vnd.onepagertatp": { - "source": "iana" - }, - "application/vnd.onepagertatx": { - "source": "iana" - }, - "application/vnd.openblox.game+xml": { - "source": "iana", - "compressible": true, - "extensions": ["obgx"] - }, - "application/vnd.openblox.game-binary": { - "source": "iana" - }, - "application/vnd.openeye.oeb": { - "source": "iana" - }, - "application/vnd.openofficeorg.extension": { - "source": "apache", - "extensions": ["oxt"] - }, - "application/vnd.openstreetmap.data+xml": { - "source": "iana", - "compressible": true, - "extensions": ["osm"] - }, - "application/vnd.opentimestamps.ots": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.custom-properties+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.customxmlproperties+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.drawing+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.drawingml.chart+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.extended-properties+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.presentationml.comments+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.presentationml.presentation": { - "source": "iana", - "compressible": false, - "extensions": ["pptx"] - }, - "application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.presentationml.presprops+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.presentationml.slide": { - "source": "iana", - "extensions": ["sldx"] - }, - "application/vnd.openxmlformats-officedocument.presentationml.slide+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.presentationml.slideshow": { - "source": "iana", - "extensions": ["ppsx"] - }, - "application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.presentationml.tags+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.presentationml.template": { - "source": "iana", - "extensions": ["potx"] - }, - "application/vnd.openxmlformats-officedocument.presentationml.template.main+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": { - "source": "iana", - "compressible": false, - "extensions": ["xlsx"] - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.template": { - "source": "iana", - "extensions": ["xltx"] - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.theme+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.themeoverride+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.vmldrawing": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.wordprocessingml.document": { - "source": "iana", - "compressible": false, - "extensions": ["docx"] - }, - "application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.wordprocessingml.template": { - "source": "iana", - "extensions": ["dotx"] - }, - "application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-package.core-properties+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.openxmlformats-package.relationships+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oracle.resource+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.orange.indata": { - "source": "iana" - }, - "application/vnd.osa.netdeploy": { - "source": "iana" - }, - "application/vnd.osgeo.mapguide.package": { - "source": "iana", - "extensions": ["mgp"] - }, - "application/vnd.osgi.bundle": { - "source": "iana" - }, - "application/vnd.osgi.dp": { - "source": "iana", - "extensions": ["dp"] - }, - "application/vnd.osgi.subsystem": { - "source": "iana", - "extensions": ["esa"] - }, - "application/vnd.otps.ct-kip+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.oxli.countgraph": { - "source": "iana" - }, - "application/vnd.pagerduty+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.palm": { - "source": "iana", - "extensions": ["pdb","pqa","oprc"] - }, - "application/vnd.panoply": { - "source": "iana" - }, - "application/vnd.paos.xml": { - "source": "iana" - }, - "application/vnd.patentdive": { - "source": "iana" - }, - "application/vnd.patientecommsdoc": { - "source": "iana" - }, - "application/vnd.pawaafile": { - "source": "iana", - "extensions": ["paw"] - }, - "application/vnd.pcos": { - "source": "iana" - }, - "application/vnd.pg.format": { - "source": "iana", - "extensions": ["str"] - }, - "application/vnd.pg.osasli": { - "source": "iana", - "extensions": ["ei6"] - }, - "application/vnd.piaccess.application-licence": { - "source": "iana" - }, - "application/vnd.picsel": { - "source": "iana", - "extensions": ["efif"] - }, - "application/vnd.pmi.widget": { - "source": "iana", - "extensions": ["wg"] - }, - "application/vnd.poc.group-advertisement+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.pocketlearn": { - "source": "iana", - "extensions": ["plf"] - }, - "application/vnd.powerbuilder6": { - "source": "iana", - "extensions": ["pbd"] - }, - "application/vnd.powerbuilder6-s": { - "source": "iana" - }, - "application/vnd.powerbuilder7": { - "source": "iana" - }, - "application/vnd.powerbuilder7-s": { - "source": "iana" - }, - "application/vnd.powerbuilder75": { - "source": "iana" - }, - "application/vnd.powerbuilder75-s": { - "source": "iana" - }, - "application/vnd.preminet": { - "source": "iana" - }, - "application/vnd.previewsystems.box": { - "source": "iana", - "extensions": ["box"] - }, - "application/vnd.proteus.magazine": { - "source": "iana", - "extensions": ["mgz"] - }, - "application/vnd.psfs": { - "source": "iana" - }, - "application/vnd.publishare-delta-tree": { - "source": "iana", - "extensions": ["qps"] - }, - "application/vnd.pvi.ptid1": { - "source": "iana", - "extensions": ["ptid"] - }, - "application/vnd.pwg-multiplexed": { - "source": "iana" - }, - "application/vnd.pwg-xhtml-print+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.qualcomm.brew-app-res": { - "source": "iana" - }, - "application/vnd.quarantainenet": { - "source": "iana" - }, - "application/vnd.quark.quarkxpress": { - "source": "iana", - "extensions": ["qxd","qxt","qwd","qwt","qxl","qxb"] - }, - "application/vnd.quobject-quoxdocument": { - "source": "iana" - }, - "application/vnd.radisys.moml+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.radisys.msml+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.radisys.msml-audit+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.radisys.msml-audit-conf+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.radisys.msml-audit-conn+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.radisys.msml-audit-dialog+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.radisys.msml-audit-stream+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.radisys.msml-conf+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.radisys.msml-dialog+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.radisys.msml-dialog-base+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.radisys.msml-dialog-fax-detect+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.radisys.msml-dialog-fax-sendrecv+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.radisys.msml-dialog-group+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.radisys.msml-dialog-speech+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.radisys.msml-dialog-transform+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.rainstor.data": { - "source": "iana" - }, - "application/vnd.rapid": { - "source": "iana" - }, - "application/vnd.rar": { - "source": "iana", - "extensions": ["rar"] - }, - "application/vnd.realvnc.bed": { - "source": "iana", - "extensions": ["bed"] - }, - "application/vnd.recordare.musicxml": { - "source": "iana", - "extensions": ["mxl"] - }, - "application/vnd.recordare.musicxml+xml": { - "source": "iana", - "compressible": true, - "extensions": ["musicxml"] - }, - "application/vnd.renlearn.rlprint": { - "source": "iana" - }, - "application/vnd.resilient.logic": { - "source": "iana" - }, - "application/vnd.restful+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.rig.cryptonote": { - "source": "iana", - "extensions": ["cryptonote"] - }, - "application/vnd.rim.cod": { - "source": "apache", - "extensions": ["cod"] - }, - "application/vnd.rn-realmedia": { - "source": "apache", - "extensions": ["rm"] - }, - "application/vnd.rn-realmedia-vbr": { - "source": "apache", - "extensions": ["rmvb"] - }, - "application/vnd.route66.link66+xml": { - "source": "iana", - "compressible": true, - "extensions": ["link66"] - }, - "application/vnd.rs-274x": { - "source": "iana" - }, - "application/vnd.ruckus.download": { - "source": "iana" - }, - "application/vnd.s3sms": { - "source": "iana" - }, - "application/vnd.sailingtracker.track": { - "source": "iana", - "extensions": ["st"] - }, - "application/vnd.sar": { - "source": "iana" - }, - "application/vnd.sbm.cid": { - "source": "iana" - }, - "application/vnd.sbm.mid2": { - "source": "iana" - }, - "application/vnd.scribus": { - "source": "iana" - }, - "application/vnd.sealed.3df": { - "source": "iana" - }, - "application/vnd.sealed.csf": { - "source": "iana" - }, - "application/vnd.sealed.doc": { - "source": "iana" - }, - "application/vnd.sealed.eml": { - "source": "iana" - }, - "application/vnd.sealed.mht": { - "source": "iana" - }, - "application/vnd.sealed.net": { - "source": "iana" - }, - "application/vnd.sealed.ppt": { - "source": "iana" - }, - "application/vnd.sealed.tiff": { - "source": "iana" - }, - "application/vnd.sealed.xls": { - "source": "iana" - }, - "application/vnd.sealedmedia.softseal.html": { - "source": "iana" - }, - "application/vnd.sealedmedia.softseal.pdf": { - "source": "iana" - }, - "application/vnd.seemail": { - "source": "iana", - "extensions": ["see"] - }, - "application/vnd.seis+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.sema": { - "source": "iana", - "extensions": ["sema"] - }, - "application/vnd.semd": { - "source": "iana", - "extensions": ["semd"] - }, - "application/vnd.semf": { - "source": "iana", - "extensions": ["semf"] - }, - "application/vnd.shade-save-file": { - "source": "iana" - }, - "application/vnd.shana.informed.formdata": { - "source": "iana", - "extensions": ["ifm"] - }, - "application/vnd.shana.informed.formtemplate": { - "source": "iana", - "extensions": ["itp"] - }, - "application/vnd.shana.informed.interchange": { - "source": "iana", - "extensions": ["iif"] - }, - "application/vnd.shana.informed.package": { - "source": "iana", - "extensions": ["ipk"] - }, - "application/vnd.shootproof+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.shopkick+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.shp": { - "source": "iana" - }, - "application/vnd.shx": { - "source": "iana" - }, - "application/vnd.sigrok.session": { - "source": "iana" - }, - "application/vnd.simtech-mindmapper": { - "source": "iana", - "extensions": ["twd","twds"] - }, - "application/vnd.siren+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.smaf": { - "source": "iana", - "extensions": ["mmf"] - }, - "application/vnd.smart.notebook": { - "source": "iana" - }, - "application/vnd.smart.teacher": { - "source": "iana", - "extensions": ["teacher"] - }, - "application/vnd.snesdev-page-table": { - "source": "iana" - }, - "application/vnd.software602.filler.form+xml": { - "source": "iana", - "compressible": true, - "extensions": ["fo"] - }, - "application/vnd.software602.filler.form-xml-zip": { - "source": "iana" - }, - "application/vnd.solent.sdkm+xml": { - "source": "iana", - "compressible": true, - "extensions": ["sdkm","sdkd"] - }, - "application/vnd.spotfire.dxp": { - "source": "iana", - "extensions": ["dxp"] - }, - "application/vnd.spotfire.sfs": { - "source": "iana", - "extensions": ["sfs"] - }, - "application/vnd.sqlite3": { - "source": "iana" - }, - "application/vnd.sss-cod": { - "source": "iana" - }, - "application/vnd.sss-dtf": { - "source": "iana" - }, - "application/vnd.sss-ntf": { - "source": "iana" - }, - "application/vnd.stardivision.calc": { - "source": "apache", - "extensions": ["sdc"] - }, - "application/vnd.stardivision.draw": { - "source": "apache", - "extensions": ["sda"] - }, - "application/vnd.stardivision.impress": { - "source": "apache", - "extensions": ["sdd"] - }, - "application/vnd.stardivision.math": { - "source": "apache", - "extensions": ["smf"] - }, - "application/vnd.stardivision.writer": { - "source": "apache", - "extensions": ["sdw","vor"] - }, - "application/vnd.stardivision.writer-global": { - "source": "apache", - "extensions": ["sgl"] - }, - "application/vnd.stepmania.package": { - "source": "iana", - "extensions": ["smzip"] - }, - "application/vnd.stepmania.stepchart": { - "source": "iana", - "extensions": ["sm"] - }, - "application/vnd.street-stream": { - "source": "iana" - }, - "application/vnd.sun.wadl+xml": { - "source": "iana", - "compressible": true, - "extensions": ["wadl"] - }, - "application/vnd.sun.xml.calc": { - "source": "apache", - "extensions": ["sxc"] - }, - "application/vnd.sun.xml.calc.template": { - "source": "apache", - "extensions": ["stc"] - }, - "application/vnd.sun.xml.draw": { - "source": "apache", - "extensions": ["sxd"] - }, - "application/vnd.sun.xml.draw.template": { - "source": "apache", - "extensions": ["std"] - }, - "application/vnd.sun.xml.impress": { - "source": "apache", - "extensions": ["sxi"] - }, - "application/vnd.sun.xml.impress.template": { - "source": "apache", - "extensions": ["sti"] - }, - "application/vnd.sun.xml.math": { - "source": "apache", - "extensions": ["sxm"] - }, - "application/vnd.sun.xml.writer": { - "source": "apache", - "extensions": ["sxw"] - }, - "application/vnd.sun.xml.writer.global": { - "source": "apache", - "extensions": ["sxg"] - }, - "application/vnd.sun.xml.writer.template": { - "source": "apache", - "extensions": ["stw"] - }, - "application/vnd.sus-calendar": { - "source": "iana", - "extensions": ["sus","susp"] - }, - "application/vnd.svd": { - "source": "iana", - "extensions": ["svd"] - }, - "application/vnd.swiftview-ics": { - "source": "iana" - }, - "application/vnd.sycle+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.syft+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.symbian.install": { - "source": "apache", - "extensions": ["sis","sisx"] - }, - "application/vnd.syncml+xml": { - "source": "iana", - "charset": "UTF-8", - "compressible": true, - "extensions": ["xsm"] - }, - "application/vnd.syncml.dm+wbxml": { - "source": "iana", - "charset": "UTF-8", - "extensions": ["bdm"] - }, - "application/vnd.syncml.dm+xml": { - "source": "iana", - "charset": "UTF-8", - "compressible": true, - "extensions": ["xdm"] - }, - "application/vnd.syncml.dm.notification": { - "source": "iana" - }, - "application/vnd.syncml.dmddf+wbxml": { - "source": "iana" - }, - "application/vnd.syncml.dmddf+xml": { - "source": "iana", - "charset": "UTF-8", - "compressible": true, - "extensions": ["ddf"] - }, - "application/vnd.syncml.dmtnds+wbxml": { - "source": "iana" - }, - "application/vnd.syncml.dmtnds+xml": { - "source": "iana", - "charset": "UTF-8", - "compressible": true - }, - "application/vnd.syncml.ds.notification": { - "source": "iana" - }, - "application/vnd.tableschema+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.tao.intent-module-archive": { - "source": "iana", - "extensions": ["tao"] - }, - "application/vnd.tcpdump.pcap": { - "source": "iana", - "extensions": ["pcap","cap","dmp"] - }, - "application/vnd.think-cell.ppttc+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.tmd.mediaflex.api+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.tml": { - "source": "iana" - }, - "application/vnd.tmobile-livetv": { - "source": "iana", - "extensions": ["tmo"] - }, - "application/vnd.tri.onesource": { - "source": "iana" - }, - "application/vnd.trid.tpt": { - "source": "iana", - "extensions": ["tpt"] - }, - "application/vnd.triscape.mxs": { - "source": "iana", - "extensions": ["mxs"] - }, - "application/vnd.trueapp": { - "source": "iana", - "extensions": ["tra"] - }, - "application/vnd.truedoc": { - "source": "iana" - }, - "application/vnd.ubisoft.webplayer": { - "source": "iana" - }, - "application/vnd.ufdl": { - "source": "iana", - "extensions": ["ufd","ufdl"] - }, - "application/vnd.uiq.theme": { - "source": "iana", - "extensions": ["utz"] - }, - "application/vnd.umajin": { - "source": "iana", - "extensions": ["umj"] - }, - "application/vnd.unity": { - "source": "iana", - "extensions": ["unityweb"] - }, - "application/vnd.uoml+xml": { - "source": "iana", - "compressible": true, - "extensions": ["uoml"] - }, - "application/vnd.uplanet.alert": { - "source": "iana" - }, - "application/vnd.uplanet.alert-wbxml": { - "source": "iana" - }, - "application/vnd.uplanet.bearer-choice": { - "source": "iana" - }, - "application/vnd.uplanet.bearer-choice-wbxml": { - "source": "iana" - }, - "application/vnd.uplanet.cacheop": { - "source": "iana" - }, - "application/vnd.uplanet.cacheop-wbxml": { - "source": "iana" - }, - "application/vnd.uplanet.channel": { - "source": "iana" - }, - "application/vnd.uplanet.channel-wbxml": { - "source": "iana" - }, - "application/vnd.uplanet.list": { - "source": "iana" - }, - "application/vnd.uplanet.list-wbxml": { - "source": "iana" - }, - "application/vnd.uplanet.listcmd": { - "source": "iana" - }, - "application/vnd.uplanet.listcmd-wbxml": { - "source": "iana" - }, - "application/vnd.uplanet.signal": { - "source": "iana" - }, - "application/vnd.uri-map": { - "source": "iana" - }, - "application/vnd.valve.source.material": { - "source": "iana" - }, - "application/vnd.vcx": { - "source": "iana", - "extensions": ["vcx"] - }, - "application/vnd.vd-study": { - "source": "iana" - }, - "application/vnd.vectorworks": { - "source": "iana" - }, - "application/vnd.vel+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.verimatrix.vcas": { - "source": "iana" - }, - "application/vnd.veritone.aion+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.veryant.thin": { - "source": "iana" - }, - "application/vnd.ves.encrypted": { - "source": "iana" - }, - "application/vnd.vidsoft.vidconference": { - "source": "iana" - }, - "application/vnd.visio": { - "source": "iana", - "extensions": ["vsd","vst","vss","vsw"] - }, - "application/vnd.visionary": { - "source": "iana", - "extensions": ["vis"] - }, - "application/vnd.vividence.scriptfile": { - "source": "iana" - }, - "application/vnd.vsf": { - "source": "iana", - "extensions": ["vsf"] - }, - "application/vnd.wap.sic": { - "source": "iana" - }, - "application/vnd.wap.slc": { - "source": "iana" - }, - "application/vnd.wap.wbxml": { - "source": "iana", - "charset": "UTF-8", - "extensions": ["wbxml"] - }, - "application/vnd.wap.wmlc": { - "source": "iana", - "extensions": ["wmlc"] - }, - "application/vnd.wap.wmlscriptc": { - "source": "iana", - "extensions": ["wmlsc"] - }, - "application/vnd.webturbo": { - "source": "iana", - "extensions": ["wtb"] - }, - "application/vnd.wfa.dpp": { - "source": "iana" - }, - "application/vnd.wfa.p2p": { - "source": "iana" - }, - "application/vnd.wfa.wsc": { - "source": "iana" - }, - "application/vnd.windows.devicepairing": { - "source": "iana" - }, - "application/vnd.wmc": { - "source": "iana" - }, - "application/vnd.wmf.bootstrap": { - "source": "iana" - }, - "application/vnd.wolfram.mathematica": { - "source": "iana" - }, - "application/vnd.wolfram.mathematica.package": { - "source": "iana" - }, - "application/vnd.wolfram.player": { - "source": "iana", - "extensions": ["nbp"] - }, - "application/vnd.wordperfect": { - "source": "iana", - "extensions": ["wpd"] - }, - "application/vnd.wqd": { - "source": "iana", - "extensions": ["wqd"] - }, - "application/vnd.wrq-hp3000-labelled": { - "source": "iana" - }, - "application/vnd.wt.stf": { - "source": "iana", - "extensions": ["stf"] - }, - "application/vnd.wv.csp+wbxml": { - "source": "iana" - }, - "application/vnd.wv.csp+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.wv.ssp+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.xacml+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.xara": { - "source": "iana", - "extensions": ["xar"] - }, - "application/vnd.xfdl": { - "source": "iana", - "extensions": ["xfdl"] - }, - "application/vnd.xfdl.webform": { - "source": "iana" - }, - "application/vnd.xmi+xml": { - "source": "iana", - "compressible": true - }, - "application/vnd.xmpie.cpkg": { - "source": "iana" - }, - "application/vnd.xmpie.dpkg": { - "source": "iana" - }, - "application/vnd.xmpie.plan": { - "source": "iana" - }, - "application/vnd.xmpie.ppkg": { - "source": "iana" - }, - "application/vnd.xmpie.xlim": { - "source": "iana" - }, - "application/vnd.yamaha.hv-dic": { - "source": "iana", - "extensions": ["hvd"] - }, - "application/vnd.yamaha.hv-script": { - "source": "iana", - "extensions": ["hvs"] - }, - "application/vnd.yamaha.hv-voice": { - "source": "iana", - "extensions": ["hvp"] - }, - "application/vnd.yamaha.openscoreformat": { - "source": "iana", - "extensions": ["osf"] - }, - "application/vnd.yamaha.openscoreformat.osfpvg+xml": { - "source": "iana", - "compressible": true, - "extensions": ["osfpvg"] - }, - "application/vnd.yamaha.remote-setup": { - "source": "iana" - }, - "application/vnd.yamaha.smaf-audio": { - "source": "iana", - "extensions": ["saf"] - }, - "application/vnd.yamaha.smaf-phrase": { - "source": "iana", - "extensions": ["spf"] - }, - "application/vnd.yamaha.through-ngn": { - "source": "iana" - }, - "application/vnd.yamaha.tunnel-udpencap": { - "source": "iana" - }, - "application/vnd.yaoweme": { - "source": "iana" - }, - "application/vnd.yellowriver-custom-menu": { - "source": "iana", - "extensions": ["cmp"] - }, - "application/vnd.youtube.yt": { - "source": "iana" - }, - "application/vnd.zul": { - "source": "iana", - "extensions": ["zir","zirz"] - }, - "application/vnd.zzazz.deck+xml": { - "source": "iana", - "compressible": true, - "extensions": ["zaz"] - }, - "application/voicexml+xml": { - "source": "iana", - "compressible": true, - "extensions": ["vxml"] - }, - "application/voucher-cms+json": { - "source": "iana", - "compressible": true - }, - "application/vq-rtcpxr": { - "source": "iana" - }, - "application/wasm": { - "source": "iana", - "compressible": true, - "extensions": ["wasm"] - }, - "application/watcherinfo+xml": { - "source": "iana", - "compressible": true, - "extensions": ["wif"] - }, - "application/webpush-options+json": { - "source": "iana", - "compressible": true - }, - "application/whoispp-query": { - "source": "iana" - }, - "application/whoispp-response": { - "source": "iana" - }, - "application/widget": { - "source": "iana", - "extensions": ["wgt"] - }, - "application/winhlp": { - "source": "apache", - "extensions": ["hlp"] - }, - "application/wita": { - "source": "iana" - }, - "application/wordperfect5.1": { - "source": "iana" - }, - "application/wsdl+xml": { - "source": "iana", - "compressible": true, - "extensions": ["wsdl"] - }, - "application/wspolicy+xml": { - "source": "iana", - "compressible": true, - "extensions": ["wspolicy"] - }, - "application/x-7z-compressed": { - "source": "apache", - "compressible": false, - "extensions": ["7z"] - }, - "application/x-abiword": { - "source": "apache", - "extensions": ["abw"] - }, - "application/x-ace-compressed": { - "source": "apache", - "extensions": ["ace"] - }, - "application/x-amf": { - "source": "apache" - }, - "application/x-apple-diskimage": { - "source": "apache", - "extensions": ["dmg"] - }, - "application/x-arj": { - "compressible": false, - "extensions": ["arj"] - }, - "application/x-authorware-bin": { - "source": "apache", - "extensions": ["aab","x32","u32","vox"] - }, - "application/x-authorware-map": { - "source": "apache", - "extensions": ["aam"] - }, - "application/x-authorware-seg": { - "source": "apache", - "extensions": ["aas"] - }, - "application/x-bcpio": { - "source": "apache", - "extensions": ["bcpio"] - }, - "application/x-bdoc": { - "compressible": false, - "extensions": ["bdoc"] - }, - "application/x-bittorrent": { - "source": "apache", - "extensions": ["torrent"] - }, - "application/x-blorb": { - "source": "apache", - "extensions": ["blb","blorb"] - }, - "application/x-bzip": { - "source": "apache", - "compressible": false, - "extensions": ["bz"] - }, - "application/x-bzip2": { - "source": "apache", - "compressible": false, - "extensions": ["bz2","boz"] - }, - "application/x-cbr": { - "source": "apache", - "extensions": ["cbr","cba","cbt","cbz","cb7"] - }, - "application/x-cdlink": { - "source": "apache", - "extensions": ["vcd"] - }, - "application/x-cfs-compressed": { - "source": "apache", - "extensions": ["cfs"] - }, - "application/x-chat": { - "source": "apache", - "extensions": ["chat"] - }, - "application/x-chess-pgn": { - "source": "apache", - "extensions": ["pgn"] - }, - "application/x-chrome-extension": { - "extensions": ["crx"] - }, - "application/x-cocoa": { - "source": "nginx", - "extensions": ["cco"] - }, - "application/x-compress": { - "source": "apache" - }, - "application/x-conference": { - "source": "apache", - "extensions": ["nsc"] - }, - "application/x-cpio": { - "source": "apache", - "extensions": ["cpio"] - }, - "application/x-csh": { - "source": "apache", - "extensions": ["csh"] - }, - "application/x-deb": { - "compressible": false - }, - "application/x-debian-package": { - "source": "apache", - "extensions": ["deb","udeb"] - }, - "application/x-dgc-compressed": { - "source": "apache", - "extensions": ["dgc"] - }, - "application/x-director": { - "source": "apache", - "extensions": ["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"] - }, - "application/x-doom": { - "source": "apache", - "extensions": ["wad"] - }, - "application/x-dtbncx+xml": { - "source": "apache", - "compressible": true, - "extensions": ["ncx"] - }, - "application/x-dtbook+xml": { - "source": "apache", - "compressible": true, - "extensions": ["dtb"] - }, - "application/x-dtbresource+xml": { - "source": "apache", - "compressible": true, - "extensions": ["res"] - }, - "application/x-dvi": { - "source": "apache", - "compressible": false, - "extensions": ["dvi"] - }, - "application/x-envoy": { - "source": "apache", - "extensions": ["evy"] - }, - "application/x-eva": { - "source": "apache", - "extensions": ["eva"] - }, - "application/x-font-bdf": { - "source": "apache", - "extensions": ["bdf"] - }, - "application/x-font-dos": { - "source": "apache" - }, - "application/x-font-framemaker": { - "source": "apache" - }, - "application/x-font-ghostscript": { - "source": "apache", - "extensions": ["gsf"] - }, - "application/x-font-libgrx": { - "source": "apache" - }, - "application/x-font-linux-psf": { - "source": "apache", - "extensions": ["psf"] - }, - "application/x-font-pcf": { - "source": "apache", - "extensions": ["pcf"] - }, - "application/x-font-snf": { - "source": "apache", - "extensions": ["snf"] - }, - "application/x-font-speedo": { - "source": "apache" - }, - "application/x-font-sunos-news": { - "source": "apache" - }, - "application/x-font-type1": { - "source": "apache", - "extensions": ["pfa","pfb","pfm","afm"] - }, - "application/x-font-vfont": { - "source": "apache" - }, - "application/x-freearc": { - "source": "apache", - "extensions": ["arc"] - }, - "application/x-futuresplash": { - "source": "apache", - "extensions": ["spl"] - }, - "application/x-gca-compressed": { - "source": "apache", - "extensions": ["gca"] - }, - "application/x-glulx": { - "source": "apache", - "extensions": ["ulx"] - }, - "application/x-gnumeric": { - "source": "apache", - "extensions": ["gnumeric"] - }, - "application/x-gramps-xml": { - "source": "apache", - "extensions": ["gramps"] - }, - "application/x-gtar": { - "source": "apache", - "extensions": ["gtar"] - }, - "application/x-gzip": { - "source": "apache" - }, - "application/x-hdf": { - "source": "apache", - "extensions": ["hdf"] - }, - "application/x-httpd-php": { - "compressible": true, - "extensions": ["php"] - }, - "application/x-install-instructions": { - "source": "apache", - "extensions": ["install"] - }, - "application/x-iso9660-image": { - "source": "apache", - "extensions": ["iso"] - }, - "application/x-iwork-keynote-sffkey": { - "extensions": ["key"] - }, - "application/x-iwork-numbers-sffnumbers": { - "extensions": ["numbers"] - }, - "application/x-iwork-pages-sffpages": { - "extensions": ["pages"] - }, - "application/x-java-archive-diff": { - "source": "nginx", - "extensions": ["jardiff"] - }, - "application/x-java-jnlp-file": { - "source": "apache", - "compressible": false, - "extensions": ["jnlp"] - }, - "application/x-javascript": { - "compressible": true - }, - "application/x-keepass2": { - "extensions": ["kdbx"] - }, - "application/x-latex": { - "source": "apache", - "compressible": false, - "extensions": ["latex"] - }, - "application/x-lua-bytecode": { - "extensions": ["luac"] - }, - "application/x-lzh-compressed": { - "source": "apache", - "extensions": ["lzh","lha"] - }, - "application/x-makeself": { - "source": "nginx", - "extensions": ["run"] - }, - "application/x-mie": { - "source": "apache", - "extensions": ["mie"] - }, - "application/x-mobipocket-ebook": { - "source": "apache", - "extensions": ["prc","mobi"] - }, - "application/x-mpegurl": { - "compressible": false - }, - "application/x-ms-application": { - "source": "apache", - "extensions": ["application"] - }, - "application/x-ms-shortcut": { - "source": "apache", - "extensions": ["lnk"] - }, - "application/x-ms-wmd": { - "source": "apache", - "extensions": ["wmd"] - }, - "application/x-ms-wmz": { - "source": "apache", - "extensions": ["wmz"] - }, - "application/x-ms-xbap": { - "source": "apache", - "extensions": ["xbap"] - }, - "application/x-msaccess": { - "source": "apache", - "extensions": ["mdb"] - }, - "application/x-msbinder": { - "source": "apache", - "extensions": ["obd"] - }, - "application/x-mscardfile": { - "source": "apache", - "extensions": ["crd"] - }, - "application/x-msclip": { - "source": "apache", - "extensions": ["clp"] - }, - "application/x-msdos-program": { - "extensions": ["exe"] - }, - "application/x-msdownload": { - "source": "apache", - "extensions": ["exe","dll","com","bat","msi"] - }, - "application/x-msmediaview": { - "source": "apache", - "extensions": ["mvb","m13","m14"] - }, - "application/x-msmetafile": { - "source": "apache", - "extensions": ["wmf","wmz","emf","emz"] - }, - "application/x-msmoney": { - "source": "apache", - "extensions": ["mny"] - }, - "application/x-mspublisher": { - "source": "apache", - "extensions": ["pub"] - }, - "application/x-msschedule": { - "source": "apache", - "extensions": ["scd"] - }, - "application/x-msterminal": { - "source": "apache", - "extensions": ["trm"] - }, - "application/x-mswrite": { - "source": "apache", - "extensions": ["wri"] - }, - "application/x-netcdf": { - "source": "apache", - "extensions": ["nc","cdf"] - }, - "application/x-ns-proxy-autoconfig": { - "compressible": true, - "extensions": ["pac"] - }, - "application/x-nzb": { - "source": "apache", - "extensions": ["nzb"] - }, - "application/x-perl": { - "source": "nginx", - "extensions": ["pl","pm"] - }, - "application/x-pilot": { - "source": "nginx", - "extensions": ["prc","pdb"] - }, - "application/x-pkcs12": { - "source": "apache", - "compressible": false, - "extensions": ["p12","pfx"] - }, - "application/x-pkcs7-certificates": { - "source": "apache", - "extensions": ["p7b","spc"] - }, - "application/x-pkcs7-certreqresp": { - "source": "apache", - "extensions": ["p7r"] - }, - "application/x-pki-message": { - "source": "iana" - }, - "application/x-rar-compressed": { - "source": "apache", - "compressible": false, - "extensions": ["rar"] - }, - "application/x-redhat-package-manager": { - "source": "nginx", - "extensions": ["rpm"] - }, - "application/x-research-info-systems": { - "source": "apache", - "extensions": ["ris"] - }, - "application/x-sea": { - "source": "nginx", - "extensions": ["sea"] - }, - "application/x-sh": { - "source": "apache", - "compressible": true, - "extensions": ["sh"] - }, - "application/x-shar": { - "source": "apache", - "extensions": ["shar"] - }, - "application/x-shockwave-flash": { - "source": "apache", - "compressible": false, - "extensions": ["swf"] - }, - "application/x-silverlight-app": { - "source": "apache", - "extensions": ["xap"] - }, - "application/x-sql": { - "source": "apache", - "extensions": ["sql"] - }, - "application/x-stuffit": { - "source": "apache", - "compressible": false, - "extensions": ["sit"] - }, - "application/x-stuffitx": { - "source": "apache", - "extensions": ["sitx"] - }, - "application/x-subrip": { - "source": "apache", - "extensions": ["srt"] - }, - "application/x-sv4cpio": { - "source": "apache", - "extensions": ["sv4cpio"] - }, - "application/x-sv4crc": { - "source": "apache", - "extensions": ["sv4crc"] - }, - "application/x-t3vm-image": { - "source": "apache", - "extensions": ["t3"] - }, - "application/x-tads": { - "source": "apache", - "extensions": ["gam"] - }, - "application/x-tar": { - "source": "apache", - "compressible": true, - "extensions": ["tar"] - }, - "application/x-tcl": { - "source": "apache", - "extensions": ["tcl","tk"] - }, - "application/x-tex": { - "source": "apache", - "extensions": ["tex"] - }, - "application/x-tex-tfm": { - "source": "apache", - "extensions": ["tfm"] - }, - "application/x-texinfo": { - "source": "apache", - "extensions": ["texinfo","texi"] - }, - "application/x-tgif": { - "source": "apache", - "extensions": ["obj"] - }, - "application/x-ustar": { - "source": "apache", - "extensions": ["ustar"] - }, - "application/x-virtualbox-hdd": { - "compressible": true, - "extensions": ["hdd"] - }, - "application/x-virtualbox-ova": { - "compressible": true, - "extensions": ["ova"] - }, - "application/x-virtualbox-ovf": { - "compressible": true, - "extensions": ["ovf"] - }, - "application/x-virtualbox-vbox": { - "compressible": true, - "extensions": ["vbox"] - }, - "application/x-virtualbox-vbox-extpack": { - "compressible": false, - "extensions": ["vbox-extpack"] - }, - "application/x-virtualbox-vdi": { - "compressible": true, - "extensions": ["vdi"] - }, - "application/x-virtualbox-vhd": { - "compressible": true, - "extensions": ["vhd"] - }, - "application/x-virtualbox-vmdk": { - "compressible": true, - "extensions": ["vmdk"] - }, - "application/x-wais-source": { - "source": "apache", - "extensions": ["src"] - }, - "application/x-web-app-manifest+json": { - "compressible": true, - "extensions": ["webapp"] - }, - "application/x-www-form-urlencoded": { - "source": "iana", - "compressible": true - }, - "application/x-x509-ca-cert": { - "source": "iana", - "extensions": ["der","crt","pem"] - }, - "application/x-x509-ca-ra-cert": { - "source": "iana" - }, - "application/x-x509-next-ca-cert": { - "source": "iana" - }, - "application/x-xfig": { - "source": "apache", - "extensions": ["fig"] - }, - "application/x-xliff+xml": { - "source": "apache", - "compressible": true, - "extensions": ["xlf"] - }, - "application/x-xpinstall": { - "source": "apache", - "compressible": false, - "extensions": ["xpi"] - }, - "application/x-xz": { - "source": "apache", - "extensions": ["xz"] - }, - "application/x-zmachine": { - "source": "apache", - "extensions": ["z1","z2","z3","z4","z5","z6","z7","z8"] - }, - "application/x400-bp": { - "source": "iana" - }, - "application/xacml+xml": { - "source": "iana", - "compressible": true - }, - "application/xaml+xml": { - "source": "apache", - "compressible": true, - "extensions": ["xaml"] - }, - "application/xcap-att+xml": { - "source": "iana", - "compressible": true, - "extensions": ["xav"] - }, - "application/xcap-caps+xml": { - "source": "iana", - "compressible": true, - "extensions": ["xca"] - }, - "application/xcap-diff+xml": { - "source": "iana", - "compressible": true, - "extensions": ["xdf"] - }, - "application/xcap-el+xml": { - "source": "iana", - "compressible": true, - "extensions": ["xel"] - }, - "application/xcap-error+xml": { - "source": "iana", - "compressible": true - }, - "application/xcap-ns+xml": { - "source": "iana", - "compressible": true, - "extensions": ["xns"] - }, - "application/xcon-conference-info+xml": { - "source": "iana", - "compressible": true - }, - "application/xcon-conference-info-diff+xml": { - "source": "iana", - "compressible": true - }, - "application/xenc+xml": { - "source": "iana", - "compressible": true, - "extensions": ["xenc"] - }, - "application/xhtml+xml": { - "source": "iana", - "compressible": true, - "extensions": ["xhtml","xht"] - }, - "application/xhtml-voice+xml": { - "source": "apache", - "compressible": true - }, - "application/xliff+xml": { - "source": "iana", - "compressible": true, - "extensions": ["xlf"] - }, - "application/xml": { - "source": "iana", - "compressible": true, - "extensions": ["xml","xsl","xsd","rng"] - }, - "application/xml-dtd": { - "source": "iana", - "compressible": true, - "extensions": ["dtd"] - }, - "application/xml-external-parsed-entity": { - "source": "iana" - }, - "application/xml-patch+xml": { - "source": "iana", - "compressible": true - }, - "application/xmpp+xml": { - "source": "iana", - "compressible": true - }, - "application/xop+xml": { - "source": "iana", - "compressible": true, - "extensions": ["xop"] - }, - "application/xproc+xml": { - "source": "apache", - "compressible": true, - "extensions": ["xpl"] - }, - "application/xslt+xml": { - "source": "iana", - "compressible": true, - "extensions": ["xsl","xslt"] - }, - "application/xspf+xml": { - "source": "apache", - "compressible": true, - "extensions": ["xspf"] - }, - "application/xv+xml": { - "source": "iana", - "compressible": true, - "extensions": ["mxml","xhvml","xvml","xvm"] - }, - "application/yang": { - "source": "iana", - "extensions": ["yang"] - }, - "application/yang-data+json": { - "source": "iana", - "compressible": true - }, - "application/yang-data+xml": { - "source": "iana", - "compressible": true - }, - "application/yang-patch+json": { - "source": "iana", - "compressible": true - }, - "application/yang-patch+xml": { - "source": "iana", - "compressible": true - }, - "application/yin+xml": { - "source": "iana", - "compressible": true, - "extensions": ["yin"] - }, - "application/zip": { - "source": "iana", - "compressible": false, - "extensions": ["zip"] - }, - "application/zlib": { - "source": "iana" - }, - "application/zstd": { - "source": "iana" - }, - "audio/1d-interleaved-parityfec": { - "source": "iana" - }, - "audio/32kadpcm": { - "source": "iana" - }, - "audio/3gpp": { - "source": "iana", - "compressible": false, - "extensions": ["3gpp"] - }, - "audio/3gpp2": { - "source": "iana" - }, - "audio/aac": { - "source": "iana" - }, - "audio/ac3": { - "source": "iana" - }, - "audio/adpcm": { - "source": "apache", - "extensions": ["adp"] - }, - "audio/amr": { - "source": "iana", - "extensions": ["amr"] - }, - "audio/amr-wb": { - "source": "iana" - }, - "audio/amr-wb+": { - "source": "iana" - }, - "audio/aptx": { - "source": "iana" - }, - "audio/asc": { - "source": "iana" - }, - "audio/atrac-advanced-lossless": { - "source": "iana" - }, - "audio/atrac-x": { - "source": "iana" - }, - "audio/atrac3": { - "source": "iana" - }, - "audio/basic": { - "source": "iana", - "compressible": false, - "extensions": ["au","snd"] - }, - "audio/bv16": { - "source": "iana" - }, - "audio/bv32": { - "source": "iana" - }, - "audio/clearmode": { - "source": "iana" - }, - "audio/cn": { - "source": "iana" - }, - "audio/dat12": { - "source": "iana" - }, - "audio/dls": { - "source": "iana" - }, - "audio/dsr-es201108": { - "source": "iana" - }, - "audio/dsr-es202050": { - "source": "iana" - }, - "audio/dsr-es202211": { - "source": "iana" - }, - "audio/dsr-es202212": { - "source": "iana" - }, - "audio/dv": { - "source": "iana" - }, - "audio/dvi4": { - "source": "iana" - }, - "audio/eac3": { - "source": "iana" - }, - "audio/encaprtp": { - "source": "iana" - }, - "audio/evrc": { - "source": "iana" - }, - "audio/evrc-qcp": { - "source": "iana" - }, - "audio/evrc0": { - "source": "iana" - }, - "audio/evrc1": { - "source": "iana" - }, - "audio/evrcb": { - "source": "iana" - }, - "audio/evrcb0": { - "source": "iana" - }, - "audio/evrcb1": { - "source": "iana" - }, - "audio/evrcnw": { - "source": "iana" - }, - "audio/evrcnw0": { - "source": "iana" - }, - "audio/evrcnw1": { - "source": "iana" - }, - "audio/evrcwb": { - "source": "iana" - }, - "audio/evrcwb0": { - "source": "iana" - }, - "audio/evrcwb1": { - "source": "iana" - }, - "audio/evs": { - "source": "iana" - }, - "audio/flexfec": { - "source": "iana" - }, - "audio/fwdred": { - "source": "iana" - }, - "audio/g711-0": { - "source": "iana" - }, - "audio/g719": { - "source": "iana" - }, - "audio/g722": { - "source": "iana" - }, - "audio/g7221": { - "source": "iana" - }, - "audio/g723": { - "source": "iana" - }, - "audio/g726-16": { - "source": "iana" - }, - "audio/g726-24": { - "source": "iana" - }, - "audio/g726-32": { - "source": "iana" - }, - "audio/g726-40": { - "source": "iana" - }, - "audio/g728": { - "source": "iana" - }, - "audio/g729": { - "source": "iana" - }, - "audio/g7291": { - "source": "iana" - }, - "audio/g729d": { - "source": "iana" - }, - "audio/g729e": { - "source": "iana" - }, - "audio/gsm": { - "source": "iana" - }, - "audio/gsm-efr": { - "source": "iana" - }, - "audio/gsm-hr-08": { - "source": "iana" - }, - "audio/ilbc": { - "source": "iana" - }, - "audio/ip-mr_v2.5": { - "source": "iana" - }, - "audio/isac": { - "source": "apache" - }, - "audio/l16": { - "source": "iana" - }, - "audio/l20": { - "source": "iana" - }, - "audio/l24": { - "source": "iana", - "compressible": false - }, - "audio/l8": { - "source": "iana" - }, - "audio/lpc": { - "source": "iana" - }, - "audio/melp": { - "source": "iana" - }, - "audio/melp1200": { - "source": "iana" - }, - "audio/melp2400": { - "source": "iana" - }, - "audio/melp600": { - "source": "iana" - }, - "audio/mhas": { - "source": "iana" - }, - "audio/midi": { - "source": "apache", - "extensions": ["mid","midi","kar","rmi"] - }, - "audio/mobile-xmf": { - "source": "iana", - "extensions": ["mxmf"] - }, - "audio/mp3": { - "compressible": false, - "extensions": ["mp3"] - }, - "audio/mp4": { - "source": "iana", - "compressible": false, - "extensions": ["m4a","mp4a"] - }, - "audio/mp4a-latm": { - "source": "iana" - }, - "audio/mpa": { - "source": "iana" - }, - "audio/mpa-robust": { - "source": "iana" - }, - "audio/mpeg": { - "source": "iana", - "compressible": false, - "extensions": ["mpga","mp2","mp2a","mp3","m2a","m3a"] - }, - "audio/mpeg4-generic": { - "source": "iana" - }, - "audio/musepack": { - "source": "apache" - }, - "audio/ogg": { - "source": "iana", - "compressible": false, - "extensions": ["oga","ogg","spx","opus"] - }, - "audio/opus": { - "source": "iana" - }, - "audio/parityfec": { - "source": "iana" - }, - "audio/pcma": { - "source": "iana" - }, - "audio/pcma-wb": { - "source": "iana" - }, - "audio/pcmu": { - "source": "iana" - }, - "audio/pcmu-wb": { - "source": "iana" - }, - "audio/prs.sid": { - "source": "iana" - }, - "audio/qcelp": { - "source": "iana" - }, - "audio/raptorfec": { - "source": "iana" - }, - "audio/red": { - "source": "iana" - }, - "audio/rtp-enc-aescm128": { - "source": "iana" - }, - "audio/rtp-midi": { - "source": "iana" - }, - "audio/rtploopback": { - "source": "iana" - }, - "audio/rtx": { - "source": "iana" - }, - "audio/s3m": { - "source": "apache", - "extensions": ["s3m"] - }, - "audio/scip": { - "source": "iana" - }, - "audio/silk": { - "source": "apache", - "extensions": ["sil"] - }, - "audio/smv": { - "source": "iana" - }, - "audio/smv-qcp": { - "source": "iana" - }, - "audio/smv0": { - "source": "iana" - }, - "audio/sofa": { - "source": "iana" - }, - "audio/sp-midi": { - "source": "iana" - }, - "audio/speex": { - "source": "iana" - }, - "audio/t140c": { - "source": "iana" - }, - "audio/t38": { - "source": "iana" - }, - "audio/telephone-event": { - "source": "iana" - }, - "audio/tetra_acelp": { - "source": "iana" - }, - "audio/tetra_acelp_bb": { - "source": "iana" - }, - "audio/tone": { - "source": "iana" - }, - "audio/tsvcis": { - "source": "iana" - }, - "audio/uemclip": { - "source": "iana" - }, - "audio/ulpfec": { - "source": "iana" - }, - "audio/usac": { - "source": "iana" - }, - "audio/vdvi": { - "source": "iana" - }, - "audio/vmr-wb": { - "source": "iana" - }, - "audio/vnd.3gpp.iufp": { - "source": "iana" - }, - "audio/vnd.4sb": { - "source": "iana" - }, - "audio/vnd.audiokoz": { - "source": "iana" - }, - "audio/vnd.celp": { - "source": "iana" - }, - "audio/vnd.cisco.nse": { - "source": "iana" - }, - "audio/vnd.cmles.radio-events": { - "source": "iana" - }, - "audio/vnd.cns.anp1": { - "source": "iana" - }, - "audio/vnd.cns.inf1": { - "source": "iana" - }, - "audio/vnd.dece.audio": { - "source": "iana", - "extensions": ["uva","uvva"] - }, - "audio/vnd.digital-winds": { - "source": "iana", - "extensions": ["eol"] - }, - "audio/vnd.dlna.adts": { - "source": "iana" - }, - "audio/vnd.dolby.heaac.1": { - "source": "iana" - }, - "audio/vnd.dolby.heaac.2": { - "source": "iana" - }, - "audio/vnd.dolby.mlp": { - "source": "iana" - }, - "audio/vnd.dolby.mps": { - "source": "iana" - }, - "audio/vnd.dolby.pl2": { - "source": "iana" - }, - "audio/vnd.dolby.pl2x": { - "source": "iana" - }, - "audio/vnd.dolby.pl2z": { - "source": "iana" - }, - "audio/vnd.dolby.pulse.1": { - "source": "iana" - }, - "audio/vnd.dra": { - "source": "iana", - "extensions": ["dra"] - }, - "audio/vnd.dts": { - "source": "iana", - "extensions": ["dts"] - }, - "audio/vnd.dts.hd": { - "source": "iana", - "extensions": ["dtshd"] - }, - "audio/vnd.dts.uhd": { - "source": "iana" - }, - "audio/vnd.dvb.file": { - "source": "iana" - }, - "audio/vnd.everad.plj": { - "source": "iana" - }, - "audio/vnd.hns.audio": { - "source": "iana" - }, - "audio/vnd.lucent.voice": { - "source": "iana", - "extensions": ["lvp"] - }, - "audio/vnd.ms-playready.media.pya": { - "source": "iana", - "extensions": ["pya"] - }, - "audio/vnd.nokia.mobile-xmf": { - "source": "iana" - }, - "audio/vnd.nortel.vbk": { - "source": "iana" - }, - "audio/vnd.nuera.ecelp4800": { - "source": "iana", - "extensions": ["ecelp4800"] - }, - "audio/vnd.nuera.ecelp7470": { - "source": "iana", - "extensions": ["ecelp7470"] - }, - "audio/vnd.nuera.ecelp9600": { - "source": "iana", - "extensions": ["ecelp9600"] - }, - "audio/vnd.octel.sbc": { - "source": "iana" - }, - "audio/vnd.presonus.multitrack": { - "source": "iana" - }, - "audio/vnd.qcelp": { - "source": "iana" - }, - "audio/vnd.rhetorex.32kadpcm": { - "source": "iana" - }, - "audio/vnd.rip": { - "source": "iana", - "extensions": ["rip"] - }, - "audio/vnd.rn-realaudio": { - "compressible": false - }, - "audio/vnd.sealedmedia.softseal.mpeg": { - "source": "iana" - }, - "audio/vnd.vmx.cvsd": { - "source": "iana" - }, - "audio/vnd.wave": { - "compressible": false - }, - "audio/vorbis": { - "source": "iana", - "compressible": false - }, - "audio/vorbis-config": { - "source": "iana" - }, - "audio/wav": { - "compressible": false, - "extensions": ["wav"] - }, - "audio/wave": { - "compressible": false, - "extensions": ["wav"] - }, - "audio/webm": { - "source": "apache", - "compressible": false, - "extensions": ["weba"] - }, - "audio/x-aac": { - "source": "apache", - "compressible": false, - "extensions": ["aac"] - }, - "audio/x-aiff": { - "source": "apache", - "extensions": ["aif","aiff","aifc"] - }, - "audio/x-caf": { - "source": "apache", - "compressible": false, - "extensions": ["caf"] - }, - "audio/x-flac": { - "source": "apache", - "extensions": ["flac"] - }, - "audio/x-m4a": { - "source": "nginx", - "extensions": ["m4a"] - }, - "audio/x-matroska": { - "source": "apache", - "extensions": ["mka"] - }, - "audio/x-mpegurl": { - "source": "apache", - "extensions": ["m3u"] - }, - "audio/x-ms-wax": { - "source": "apache", - "extensions": ["wax"] - }, - "audio/x-ms-wma": { - "source": "apache", - "extensions": ["wma"] - }, - "audio/x-pn-realaudio": { - "source": "apache", - "extensions": ["ram","ra"] - }, - "audio/x-pn-realaudio-plugin": { - "source": "apache", - "extensions": ["rmp"] - }, - "audio/x-realaudio": { - "source": "nginx", - "extensions": ["ra"] - }, - "audio/x-tta": { - "source": "apache" - }, - "audio/x-wav": { - "source": "apache", - "extensions": ["wav"] - }, - "audio/xm": { - "source": "apache", - "extensions": ["xm"] - }, - "chemical/x-cdx": { - "source": "apache", - "extensions": ["cdx"] - }, - "chemical/x-cif": { - "source": "apache", - "extensions": ["cif"] - }, - "chemical/x-cmdf": { - "source": "apache", - "extensions": ["cmdf"] - }, - "chemical/x-cml": { - "source": "apache", - "extensions": ["cml"] - }, - "chemical/x-csml": { - "source": "apache", - "extensions": ["csml"] - }, - "chemical/x-pdb": { - "source": "apache" - }, - "chemical/x-xyz": { - "source": "apache", - "extensions": ["xyz"] - }, - "font/collection": { - "source": "iana", - "extensions": ["ttc"] - }, - "font/otf": { - "source": "iana", - "compressible": true, - "extensions": ["otf"] - }, - "font/sfnt": { - "source": "iana" - }, - "font/ttf": { - "source": "iana", - "compressible": true, - "extensions": ["ttf"] - }, - "font/woff": { - "source": "iana", - "extensions": ["woff"] - }, - "font/woff2": { - "source": "iana", - "extensions": ["woff2"] - }, - "image/aces": { - "source": "iana", - "extensions": ["exr"] - }, - "image/apng": { - "compressible": false, - "extensions": ["apng"] - }, - "image/avci": { - "source": "iana", - "extensions": ["avci"] - }, - "image/avcs": { - "source": "iana", - "extensions": ["avcs"] - }, - "image/avif": { - "source": "iana", - "compressible": false, - "extensions": ["avif"] - }, - "image/bmp": { - "source": "iana", - "compressible": true, - "extensions": ["bmp"] - }, - "image/cgm": { - "source": "iana", - "extensions": ["cgm"] - }, - "image/dicom-rle": { - "source": "iana", - "extensions": ["drle"] - }, - "image/emf": { - "source": "iana", - "extensions": ["emf"] - }, - "image/fits": { - "source": "iana", - "extensions": ["fits"] - }, - "image/g3fax": { - "source": "iana", - "extensions": ["g3"] - }, - "image/gif": { - "source": "iana", - "compressible": false, - "extensions": ["gif"] - }, - "image/heic": { - "source": "iana", - "extensions": ["heic"] - }, - "image/heic-sequence": { - "source": "iana", - "extensions": ["heics"] - }, - "image/heif": { - "source": "iana", - "extensions": ["heif"] - }, - "image/heif-sequence": { - "source": "iana", - "extensions": ["heifs"] - }, - "image/hej2k": { - "source": "iana", - "extensions": ["hej2"] - }, - "image/hsj2": { - "source": "iana", - "extensions": ["hsj2"] - }, - "image/ief": { - "source": "iana", - "extensions": ["ief"] - }, - "image/jls": { - "source": "iana", - "extensions": ["jls"] - }, - "image/jp2": { - "source": "iana", - "compressible": false, - "extensions": ["jp2","jpg2"] - }, - "image/jpeg": { - "source": "iana", - "compressible": false, - "extensions": ["jpeg","jpg","jpe"] - }, - "image/jph": { - "source": "iana", - "extensions": ["jph"] - }, - "image/jphc": { - "source": "iana", - "extensions": ["jhc"] - }, - "image/jpm": { - "source": "iana", - "compressible": false, - "extensions": ["jpm"] - }, - "image/jpx": { - "source": "iana", - "compressible": false, - "extensions": ["jpx","jpf"] - }, - "image/jxr": { - "source": "iana", - "extensions": ["jxr"] - }, - "image/jxra": { - "source": "iana", - "extensions": ["jxra"] - }, - "image/jxrs": { - "source": "iana", - "extensions": ["jxrs"] - }, - "image/jxs": { - "source": "iana", - "extensions": ["jxs"] - }, - "image/jxsc": { - "source": "iana", - "extensions": ["jxsc"] - }, - "image/jxsi": { - "source": "iana", - "extensions": ["jxsi"] - }, - "image/jxss": { - "source": "iana", - "extensions": ["jxss"] - }, - "image/ktx": { - "source": "iana", - "extensions": ["ktx"] - }, - "image/ktx2": { - "source": "iana", - "extensions": ["ktx2"] - }, - "image/naplps": { - "source": "iana" - }, - "image/pjpeg": { - "compressible": false - }, - "image/png": { - "source": "iana", - "compressible": false, - "extensions": ["png"] - }, - "image/prs.btif": { - "source": "iana", - "extensions": ["btif"] - }, - "image/prs.pti": { - "source": "iana", - "extensions": ["pti"] - }, - "image/pwg-raster": { - "source": "iana" - }, - "image/sgi": { - "source": "apache", - "extensions": ["sgi"] - }, - "image/svg+xml": { - "source": "iana", - "compressible": true, - "extensions": ["svg","svgz"] - }, - "image/t38": { - "source": "iana", - "extensions": ["t38"] - }, - "image/tiff": { - "source": "iana", - "compressible": false, - "extensions": ["tif","tiff"] - }, - "image/tiff-fx": { - "source": "iana", - "extensions": ["tfx"] - }, - "image/vnd.adobe.photoshop": { - "source": "iana", - "compressible": true, - "extensions": ["psd"] - }, - "image/vnd.airzip.accelerator.azv": { - "source": "iana", - "extensions": ["azv"] - }, - "image/vnd.cns.inf2": { - "source": "iana" - }, - "image/vnd.dece.graphic": { - "source": "iana", - "extensions": ["uvi","uvvi","uvg","uvvg"] - }, - "image/vnd.djvu": { - "source": "iana", - "extensions": ["djvu","djv"] - }, - "image/vnd.dvb.subtitle": { - "source": "iana", - "extensions": ["sub"] - }, - "image/vnd.dwg": { - "source": "iana", - "extensions": ["dwg"] - }, - "image/vnd.dxf": { - "source": "iana", - "extensions": ["dxf"] - }, - "image/vnd.fastbidsheet": { - "source": "iana", - "extensions": ["fbs"] - }, - "image/vnd.fpx": { - "source": "iana", - "extensions": ["fpx"] - }, - "image/vnd.fst": { - "source": "iana", - "extensions": ["fst"] - }, - "image/vnd.fujixerox.edmics-mmr": { - "source": "iana", - "extensions": ["mmr"] - }, - "image/vnd.fujixerox.edmics-rlc": { - "source": "iana", - "extensions": ["rlc"] - }, - "image/vnd.globalgraphics.pgb": { - "source": "iana" - }, - "image/vnd.microsoft.icon": { - "source": "iana", - "compressible": true, - "extensions": ["ico"] - }, - "image/vnd.mix": { - "source": "iana" - }, - "image/vnd.mozilla.apng": { - "source": "iana" - }, - "image/vnd.ms-dds": { - "compressible": true, - "extensions": ["dds"] - }, - "image/vnd.ms-modi": { - "source": "iana", - "extensions": ["mdi"] - }, - "image/vnd.ms-photo": { - "source": "apache", - "extensions": ["wdp"] - }, - "image/vnd.net-fpx": { - "source": "iana", - "extensions": ["npx"] - }, - "image/vnd.pco.b16": { - "source": "iana", - "extensions": ["b16"] - }, - "image/vnd.radiance": { - "source": "iana" - }, - "image/vnd.sealed.png": { - "source": "iana" - }, - "image/vnd.sealedmedia.softseal.gif": { - "source": "iana" - }, - "image/vnd.sealedmedia.softseal.jpg": { - "source": "iana" - }, - "image/vnd.svf": { - "source": "iana" - }, - "image/vnd.tencent.tap": { - "source": "iana", - "extensions": ["tap"] - }, - "image/vnd.valve.source.texture": { - "source": "iana", - "extensions": ["vtf"] - }, - "image/vnd.wap.wbmp": { - "source": "iana", - "extensions": ["wbmp"] - }, - "image/vnd.xiff": { - "source": "iana", - "extensions": ["xif"] - }, - "image/vnd.zbrush.pcx": { - "source": "iana", - "extensions": ["pcx"] - }, - "image/webp": { - "source": "apache", - "extensions": ["webp"] - }, - "image/wmf": { - "source": "iana", - "extensions": ["wmf"] - }, - "image/x-3ds": { - "source": "apache", - "extensions": ["3ds"] - }, - "image/x-cmu-raster": { - "source": "apache", - "extensions": ["ras"] - }, - "image/x-cmx": { - "source": "apache", - "extensions": ["cmx"] - }, - "image/x-freehand": { - "source": "apache", - "extensions": ["fh","fhc","fh4","fh5","fh7"] - }, - "image/x-icon": { - "source": "apache", - "compressible": true, - "extensions": ["ico"] - }, - "image/x-jng": { - "source": "nginx", - "extensions": ["jng"] - }, - "image/x-mrsid-image": { - "source": "apache", - "extensions": ["sid"] - }, - "image/x-ms-bmp": { - "source": "nginx", - "compressible": true, - "extensions": ["bmp"] - }, - "image/x-pcx": { - "source": "apache", - "extensions": ["pcx"] - }, - "image/x-pict": { - "source": "apache", - "extensions": ["pic","pct"] - }, - "image/x-portable-anymap": { - "source": "apache", - "extensions": ["pnm"] - }, - "image/x-portable-bitmap": { - "source": "apache", - "extensions": ["pbm"] - }, - "image/x-portable-graymap": { - "source": "apache", - "extensions": ["pgm"] - }, - "image/x-portable-pixmap": { - "source": "apache", - "extensions": ["ppm"] - }, - "image/x-rgb": { - "source": "apache", - "extensions": ["rgb"] - }, - "image/x-tga": { - "source": "apache", - "extensions": ["tga"] - }, - "image/x-xbitmap": { - "source": "apache", - "extensions": ["xbm"] - }, - "image/x-xcf": { - "compressible": false - }, - "image/x-xpixmap": { - "source": "apache", - "extensions": ["xpm"] - }, - "image/x-xwindowdump": { - "source": "apache", - "extensions": ["xwd"] - }, - "message/cpim": { - "source": "iana" - }, - "message/delivery-status": { - "source": "iana" - }, - "message/disposition-notification": { - "source": "iana", - "extensions": [ - "disposition-notification" - ] - }, - "message/external-body": { - "source": "iana" - }, - "message/feedback-report": { - "source": "iana" - }, - "message/global": { - "source": "iana", - "extensions": ["u8msg"] - }, - "message/global-delivery-status": { - "source": "iana", - "extensions": ["u8dsn"] - }, - "message/global-disposition-notification": { - "source": "iana", - "extensions": ["u8mdn"] - }, - "message/global-headers": { - "source": "iana", - "extensions": ["u8hdr"] - }, - "message/http": { - "source": "iana", - "compressible": false - }, - "message/imdn+xml": { - "source": "iana", - "compressible": true - }, - "message/news": { - "source": "iana" - }, - "message/partial": { - "source": "iana", - "compressible": false - }, - "message/rfc822": { - "source": "iana", - "compressible": true, - "extensions": ["eml","mime"] - }, - "message/s-http": { - "source": "iana" - }, - "message/sip": { - "source": "iana" - }, - "message/sipfrag": { - "source": "iana" - }, - "message/tracking-status": { - "source": "iana" - }, - "message/vnd.si.simp": { - "source": "iana" - }, - "message/vnd.wfa.wsc": { - "source": "iana", - "extensions": ["wsc"] - }, - "model/3mf": { - "source": "iana", - "extensions": ["3mf"] - }, - "model/e57": { - "source": "iana" - }, - "model/gltf+json": { - "source": "iana", - "compressible": true, - "extensions": ["gltf"] - }, - "model/gltf-binary": { - "source": "iana", - "compressible": true, - "extensions": ["glb"] - }, - "model/iges": { - "source": "iana", - "compressible": false, - "extensions": ["igs","iges"] - }, - "model/mesh": { - "source": "iana", - "compressible": false, - "extensions": ["msh","mesh","silo"] - }, - "model/mtl": { - "source": "iana", - "extensions": ["mtl"] - }, - "model/obj": { - "source": "iana", - "extensions": ["obj"] - }, - "model/step": { - "source": "iana" - }, - "model/step+xml": { - "source": "iana", - "compressible": true, - "extensions": ["stpx"] - }, - "model/step+zip": { - "source": "iana", - "compressible": false, - "extensions": ["stpz"] - }, - "model/step-xml+zip": { - "source": "iana", - "compressible": false, - "extensions": ["stpxz"] - }, - "model/stl": { - "source": "iana", - "extensions": ["stl"] - }, - "model/vnd.collada+xml": { - "source": "iana", - "compressible": true, - "extensions": ["dae"] - }, - "model/vnd.dwf": { - "source": "iana", - "extensions": ["dwf"] - }, - "model/vnd.flatland.3dml": { - "source": "iana" - }, - "model/vnd.gdl": { - "source": "iana", - "extensions": ["gdl"] - }, - "model/vnd.gs-gdl": { - "source": "apache" - }, - "model/vnd.gs.gdl": { - "source": "iana" - }, - "model/vnd.gtw": { - "source": "iana", - "extensions": ["gtw"] - }, - "model/vnd.moml+xml": { - "source": "iana", - "compressible": true - }, - "model/vnd.mts": { - "source": "iana", - "extensions": ["mts"] - }, - "model/vnd.opengex": { - "source": "iana", - "extensions": ["ogex"] - }, - "model/vnd.parasolid.transmit.binary": { - "source": "iana", - "extensions": ["x_b"] - }, - "model/vnd.parasolid.transmit.text": { - "source": "iana", - "extensions": ["x_t"] - }, - "model/vnd.pytha.pyox": { - "source": "iana" - }, - "model/vnd.rosette.annotated-data-model": { - "source": "iana" - }, - "model/vnd.sap.vds": { - "source": "iana", - "extensions": ["vds"] - }, - "model/vnd.usdz+zip": { - "source": "iana", - "compressible": false, - "extensions": ["usdz"] - }, - "model/vnd.valve.source.compiled-map": { - "source": "iana", - "extensions": ["bsp"] - }, - "model/vnd.vtu": { - "source": "iana", - "extensions": ["vtu"] - }, - "model/vrml": { - "source": "iana", - "compressible": false, - "extensions": ["wrl","vrml"] - }, - "model/x3d+binary": { - "source": "apache", - "compressible": false, - "extensions": ["x3db","x3dbz"] - }, - "model/x3d+fastinfoset": { - "source": "iana", - "extensions": ["x3db"] - }, - "model/x3d+vrml": { - "source": "apache", - "compressible": false, - "extensions": ["x3dv","x3dvz"] - }, - "model/x3d+xml": { - "source": "iana", - "compressible": true, - "extensions": ["x3d","x3dz"] - }, - "model/x3d-vrml": { - "source": "iana", - "extensions": ["x3dv"] - }, - "multipart/alternative": { - "source": "iana", - "compressible": false - }, - "multipart/appledouble": { - "source": "iana" - }, - "multipart/byteranges": { - "source": "iana" - }, - "multipart/digest": { - "source": "iana" - }, - "multipart/encrypted": { - "source": "iana", - "compressible": false - }, - "multipart/form-data": { - "source": "iana", - "compressible": false - }, - "multipart/header-set": { - "source": "iana" - }, - "multipart/mixed": { - "source": "iana" - }, - "multipart/multilingual": { - "source": "iana" - }, - "multipart/parallel": { - "source": "iana" - }, - "multipart/related": { - "source": "iana", - "compressible": false - }, - "multipart/report": { - "source": "iana" - }, - "multipart/signed": { - "source": "iana", - "compressible": false - }, - "multipart/vnd.bint.med-plus": { - "source": "iana" - }, - "multipart/voice-message": { - "source": "iana" - }, - "multipart/x-mixed-replace": { - "source": "iana" - }, - "text/1d-interleaved-parityfec": { - "source": "iana" - }, - "text/cache-manifest": { - "source": "iana", - "compressible": true, - "extensions": ["appcache","manifest"] - }, - "text/calendar": { - "source": "iana", - "extensions": ["ics","ifb"] - }, - "text/calender": { - "compressible": true - }, - "text/cmd": { - "compressible": true - }, - "text/coffeescript": { - "extensions": ["coffee","litcoffee"] - }, - "text/cql": { - "source": "iana" - }, - "text/cql-expression": { - "source": "iana" - }, - "text/cql-identifier": { - "source": "iana" - }, - "text/css": { - "source": "iana", - "charset": "UTF-8", - "compressible": true, - "extensions": ["css"] - }, - "text/csv": { - "source": "iana", - "compressible": true, - "extensions": ["csv"] - }, - "text/csv-schema": { - "source": "iana" - }, - "text/directory": { - "source": "iana" - }, - "text/dns": { - "source": "iana" - }, - "text/ecmascript": { - "source": "iana" - }, - "text/encaprtp": { - "source": "iana" - }, - "text/enriched": { - "source": "iana" - }, - "text/fhirpath": { - "source": "iana" - }, - "text/flexfec": { - "source": "iana" - }, - "text/fwdred": { - "source": "iana" - }, - "text/gff3": { - "source": "iana" - }, - "text/grammar-ref-list": { - "source": "iana" - }, - "text/html": { - "source": "iana", - "compressible": true, - "extensions": ["html","htm","shtml"] - }, - "text/jade": { - "extensions": ["jade"] - }, - "text/javascript": { - "source": "iana", - "compressible": true - }, - "text/jcr-cnd": { - "source": "iana" - }, - "text/jsx": { - "compressible": true, - "extensions": ["jsx"] - }, - "text/less": { - "compressible": true, - "extensions": ["less"] - }, - "text/markdown": { - "source": "iana", - "compressible": true, - "extensions": ["markdown","md"] - }, - "text/mathml": { - "source": "nginx", - "extensions": ["mml"] - }, - "text/mdx": { - "compressible": true, - "extensions": ["mdx"] - }, - "text/mizar": { - "source": "iana" - }, - "text/n3": { - "source": "iana", - "charset": "UTF-8", - "compressible": true, - "extensions": ["n3"] - }, - "text/parameters": { - "source": "iana", - "charset": "UTF-8" - }, - "text/parityfec": { - "source": "iana" - }, - "text/plain": { - "source": "iana", - "compressible": true, - "extensions": ["txt","text","conf","def","list","log","in","ini"] - }, - "text/provenance-notation": { - "source": "iana", - "charset": "UTF-8" - }, - "text/prs.fallenstein.rst": { - "source": "iana" - }, - "text/prs.lines.tag": { - "source": "iana", - "extensions": ["dsc"] - }, - "text/prs.prop.logic": { - "source": "iana" - }, - "text/raptorfec": { - "source": "iana" - }, - "text/red": { - "source": "iana" - }, - "text/rfc822-headers": { - "source": "iana" - }, - "text/richtext": { - "source": "iana", - "compressible": true, - "extensions": ["rtx"] - }, - "text/rtf": { - "source": "iana", - "compressible": true, - "extensions": ["rtf"] - }, - "text/rtp-enc-aescm128": { - "source": "iana" - }, - "text/rtploopback": { - "source": "iana" - }, - "text/rtx": { - "source": "iana" - }, - "text/sgml": { - "source": "iana", - "extensions": ["sgml","sgm"] - }, - "text/shaclc": { - "source": "iana" - }, - "text/shex": { - "source": "iana", - "extensions": ["shex"] - }, - "text/slim": { - "extensions": ["slim","slm"] - }, - "text/spdx": { - "source": "iana", - "extensions": ["spdx"] - }, - "text/strings": { - "source": "iana" - }, - "text/stylus": { - "extensions": ["stylus","styl"] - }, - "text/t140": { - "source": "iana" - }, - "text/tab-separated-values": { - "source": "iana", - "compressible": true, - "extensions": ["tsv"] - }, - "text/troff": { - "source": "iana", - "extensions": ["t","tr","roff","man","me","ms"] - }, - "text/turtle": { - "source": "iana", - "charset": "UTF-8", - "extensions": ["ttl"] - }, - "text/ulpfec": { - "source": "iana" - }, - "text/uri-list": { - "source": "iana", - "compressible": true, - "extensions": ["uri","uris","urls"] - }, - "text/vcard": { - "source": "iana", - "compressible": true, - "extensions": ["vcard"] - }, - "text/vnd.a": { - "source": "iana" - }, - "text/vnd.abc": { - "source": "iana" - }, - "text/vnd.ascii-art": { - "source": "iana" - }, - "text/vnd.curl": { - "source": "iana", - "extensions": ["curl"] - }, - "text/vnd.curl.dcurl": { - "source": "apache", - "extensions": ["dcurl"] - }, - "text/vnd.curl.mcurl": { - "source": "apache", - "extensions": ["mcurl"] - }, - "text/vnd.curl.scurl": { - "source": "apache", - "extensions": ["scurl"] - }, - "text/vnd.debian.copyright": { - "source": "iana", - "charset": "UTF-8" - }, - "text/vnd.dmclientscript": { - "source": "iana" - }, - "text/vnd.dvb.subtitle": { - "source": "iana", - "extensions": ["sub"] - }, - "text/vnd.esmertec.theme-descriptor": { - "source": "iana", - "charset": "UTF-8" - }, - "text/vnd.familysearch.gedcom": { - "source": "iana", - "extensions": ["ged"] - }, - "text/vnd.ficlab.flt": { - "source": "iana" - }, - "text/vnd.fly": { - "source": "iana", - "extensions": ["fly"] - }, - "text/vnd.fmi.flexstor": { - "source": "iana", - "extensions": ["flx"] - }, - "text/vnd.gml": { - "source": "iana" - }, - "text/vnd.graphviz": { - "source": "iana", - "extensions": ["gv"] - }, - "text/vnd.hans": { - "source": "iana" - }, - "text/vnd.hgl": { - "source": "iana" - }, - "text/vnd.in3d.3dml": { - "source": "iana", - "extensions": ["3dml"] - }, - "text/vnd.in3d.spot": { - "source": "iana", - "extensions": ["spot"] - }, - "text/vnd.iptc.newsml": { - "source": "iana" - }, - "text/vnd.iptc.nitf": { - "source": "iana" - }, - "text/vnd.latex-z": { - "source": "iana" - }, - "text/vnd.motorola.reflex": { - "source": "iana" - }, - "text/vnd.ms-mediapackage": { - "source": "iana" - }, - "text/vnd.net2phone.commcenter.command": { - "source": "iana" - }, - "text/vnd.radisys.msml-basic-layout": { - "source": "iana" - }, - "text/vnd.senx.warpscript": { - "source": "iana" - }, - "text/vnd.si.uricatalogue": { - "source": "iana" - }, - "text/vnd.sosi": { - "source": "iana" - }, - "text/vnd.sun.j2me.app-descriptor": { - "source": "iana", - "charset": "UTF-8", - "extensions": ["jad"] - }, - "text/vnd.trolltech.linguist": { - "source": "iana", - "charset": "UTF-8" - }, - "text/vnd.wap.si": { - "source": "iana" - }, - "text/vnd.wap.sl": { - "source": "iana" - }, - "text/vnd.wap.wml": { - "source": "iana", - "extensions": ["wml"] - }, - "text/vnd.wap.wmlscript": { - "source": "iana", - "extensions": ["wmls"] - }, - "text/vtt": { - "source": "iana", - "charset": "UTF-8", - "compressible": true, - "extensions": ["vtt"] - }, - "text/x-asm": { - "source": "apache", - "extensions": ["s","asm"] - }, - "text/x-c": { - "source": "apache", - "extensions": ["c","cc","cxx","cpp","h","hh","dic"] - }, - "text/x-component": { - "source": "nginx", - "extensions": ["htc"] - }, - "text/x-fortran": { - "source": "apache", - "extensions": ["f","for","f77","f90"] - }, - "text/x-gwt-rpc": { - "compressible": true - }, - "text/x-handlebars-template": { - "extensions": ["hbs"] - }, - "text/x-java-source": { - "source": "apache", - "extensions": ["java"] - }, - "text/x-jquery-tmpl": { - "compressible": true - }, - "text/x-lua": { - "extensions": ["lua"] - }, - "text/x-markdown": { - "compressible": true, - "extensions": ["mkd"] - }, - "text/x-nfo": { - "source": "apache", - "extensions": ["nfo"] - }, - "text/x-opml": { - "source": "apache", - "extensions": ["opml"] - }, - "text/x-org": { - "compressible": true, - "extensions": ["org"] - }, - "text/x-pascal": { - "source": "apache", - "extensions": ["p","pas"] - }, - "text/x-processing": { - "compressible": true, - "extensions": ["pde"] - }, - "text/x-sass": { - "extensions": ["sass"] - }, - "text/x-scss": { - "extensions": ["scss"] - }, - "text/x-setext": { - "source": "apache", - "extensions": ["etx"] - }, - "text/x-sfv": { - "source": "apache", - "extensions": ["sfv"] - }, - "text/x-suse-ymp": { - "compressible": true, - "extensions": ["ymp"] - }, - "text/x-uuencode": { - "source": "apache", - "extensions": ["uu"] - }, - "text/x-vcalendar": { - "source": "apache", - "extensions": ["vcs"] - }, - "text/x-vcard": { - "source": "apache", - "extensions": ["vcf"] - }, - "text/xml": { - "source": "iana", - "compressible": true, - "extensions": ["xml"] - }, - "text/xml-external-parsed-entity": { - "source": "iana" - }, - "text/yaml": { - "compressible": true, - "extensions": ["yaml","yml"] - }, - "video/1d-interleaved-parityfec": { - "source": "iana" - }, - "video/3gpp": { - "source": "iana", - "extensions": ["3gp","3gpp"] - }, - "video/3gpp-tt": { - "source": "iana" - }, - "video/3gpp2": { - "source": "iana", - "extensions": ["3g2"] - }, - "video/av1": { - "source": "iana" - }, - "video/bmpeg": { - "source": "iana" - }, - "video/bt656": { - "source": "iana" - }, - "video/celb": { - "source": "iana" - }, - "video/dv": { - "source": "iana" - }, - "video/encaprtp": { - "source": "iana" - }, - "video/ffv1": { - "source": "iana" - }, - "video/flexfec": { - "source": "iana" - }, - "video/h261": { - "source": "iana", - "extensions": ["h261"] - }, - "video/h263": { - "source": "iana", - "extensions": ["h263"] - }, - "video/h263-1998": { - "source": "iana" - }, - "video/h263-2000": { - "source": "iana" - }, - "video/h264": { - "source": "iana", - "extensions": ["h264"] - }, - "video/h264-rcdo": { - "source": "iana" - }, - "video/h264-svc": { - "source": "iana" - }, - "video/h265": { - "source": "iana" - }, - "video/iso.segment": { - "source": "iana", - "extensions": ["m4s"] - }, - "video/jpeg": { - "source": "iana", - "extensions": ["jpgv"] - }, - "video/jpeg2000": { - "source": "iana" - }, - "video/jpm": { - "source": "apache", - "extensions": ["jpm","jpgm"] - }, - "video/jxsv": { - "source": "iana" - }, - "video/mj2": { - "source": "iana", - "extensions": ["mj2","mjp2"] - }, - "video/mp1s": { - "source": "iana" - }, - "video/mp2p": { - "source": "iana" - }, - "video/mp2t": { - "source": "iana", - "extensions": ["ts"] - }, - "video/mp4": { - "source": "iana", - "compressible": false, - "extensions": ["mp4","mp4v","mpg4"] - }, - "video/mp4v-es": { - "source": "iana" - }, - "video/mpeg": { - "source": "iana", - "compressible": false, - "extensions": ["mpeg","mpg","mpe","m1v","m2v"] - }, - "video/mpeg4-generic": { - "source": "iana" - }, - "video/mpv": { - "source": "iana" - }, - "video/nv": { - "source": "iana" - }, - "video/ogg": { - "source": "iana", - "compressible": false, - "extensions": ["ogv"] - }, - "video/parityfec": { - "source": "iana" - }, - "video/pointer": { - "source": "iana" - }, - "video/quicktime": { - "source": "iana", - "compressible": false, - "extensions": ["qt","mov"] - }, - "video/raptorfec": { - "source": "iana" - }, - "video/raw": { - "source": "iana" - }, - "video/rtp-enc-aescm128": { - "source": "iana" - }, - "video/rtploopback": { - "source": "iana" - }, - "video/rtx": { - "source": "iana" - }, - "video/scip": { - "source": "iana" - }, - "video/smpte291": { - "source": "iana" - }, - "video/smpte292m": { - "source": "iana" - }, - "video/ulpfec": { - "source": "iana" - }, - "video/vc1": { - "source": "iana" - }, - "video/vc2": { - "source": "iana" - }, - "video/vnd.cctv": { - "source": "iana" - }, - "video/vnd.dece.hd": { - "source": "iana", - "extensions": ["uvh","uvvh"] - }, - "video/vnd.dece.mobile": { - "source": "iana", - "extensions": ["uvm","uvvm"] - }, - "video/vnd.dece.mp4": { - "source": "iana" - }, - "video/vnd.dece.pd": { - "source": "iana", - "extensions": ["uvp","uvvp"] - }, - "video/vnd.dece.sd": { - "source": "iana", - "extensions": ["uvs","uvvs"] - }, - "video/vnd.dece.video": { - "source": "iana", - "extensions": ["uvv","uvvv"] - }, - "video/vnd.directv.mpeg": { - "source": "iana" - }, - "video/vnd.directv.mpeg-tts": { - "source": "iana" - }, - "video/vnd.dlna.mpeg-tts": { - "source": "iana" - }, - "video/vnd.dvb.file": { - "source": "iana", - "extensions": ["dvb"] - }, - "video/vnd.fvt": { - "source": "iana", - "extensions": ["fvt"] - }, - "video/vnd.hns.video": { - "source": "iana" - }, - "video/vnd.iptvforum.1dparityfec-1010": { - "source": "iana" - }, - "video/vnd.iptvforum.1dparityfec-2005": { - "source": "iana" - }, - "video/vnd.iptvforum.2dparityfec-1010": { - "source": "iana" - }, - "video/vnd.iptvforum.2dparityfec-2005": { - "source": "iana" - }, - "video/vnd.iptvforum.ttsavc": { - "source": "iana" - }, - "video/vnd.iptvforum.ttsmpeg2": { - "source": "iana" - }, - "video/vnd.motorola.video": { - "source": "iana" - }, - "video/vnd.motorola.videop": { - "source": "iana" - }, - "video/vnd.mpegurl": { - "source": "iana", - "extensions": ["mxu","m4u"] - }, - "video/vnd.ms-playready.media.pyv": { - "source": "iana", - "extensions": ["pyv"] - }, - "video/vnd.nokia.interleaved-multimedia": { - "source": "iana" - }, - "video/vnd.nokia.mp4vr": { - "source": "iana" - }, - "video/vnd.nokia.videovoip": { - "source": "iana" - }, - "video/vnd.objectvideo": { - "source": "iana" - }, - "video/vnd.radgamettools.bink": { - "source": "iana" - }, - "video/vnd.radgamettools.smacker": { - "source": "iana" - }, - "video/vnd.sealed.mpeg1": { - "source": "iana" - }, - "video/vnd.sealed.mpeg4": { - "source": "iana" - }, - "video/vnd.sealed.swf": { - "source": "iana" - }, - "video/vnd.sealedmedia.softseal.mov": { - "source": "iana" - }, - "video/vnd.uvvu.mp4": { - "source": "iana", - "extensions": ["uvu","uvvu"] - }, - "video/vnd.vivo": { - "source": "iana", - "extensions": ["viv"] - }, - "video/vnd.youtube.yt": { - "source": "iana" - }, - "video/vp8": { - "source": "iana" - }, - "video/vp9": { - "source": "iana" - }, - "video/webm": { - "source": "apache", - "compressible": false, - "extensions": ["webm"] - }, - "video/x-f4v": { - "source": "apache", - "extensions": ["f4v"] - }, - "video/x-fli": { - "source": "apache", - "extensions": ["fli"] - }, - "video/x-flv": { - "source": "apache", - "compressible": false, - "extensions": ["flv"] - }, - "video/x-m4v": { - "source": "apache", - "extensions": ["m4v"] - }, - "video/x-matroska": { - "source": "apache", - "compressible": false, - "extensions": ["mkv","mk3d","mks"] - }, - "video/x-mng": { - "source": "apache", - "extensions": ["mng"] - }, - "video/x-ms-asf": { - "source": "apache", - "extensions": ["asf","asx"] - }, - "video/x-ms-vob": { - "source": "apache", - "extensions": ["vob"] - }, - "video/x-ms-wm": { - "source": "apache", - "extensions": ["wm"] - }, - "video/x-ms-wmv": { - "source": "apache", - "compressible": false, - "extensions": ["wmv"] - }, - "video/x-ms-wmx": { - "source": "apache", - "extensions": ["wmx"] - }, - "video/x-ms-wvx": { - "source": "apache", - "extensions": ["wvx"] - }, - "video/x-msvideo": { - "source": "apache", - "extensions": ["avi"] - }, - "video/x-sgi-movie": { - "source": "apache", - "extensions": ["movie"] - }, - "video/x-smv": { - "source": "apache", - "extensions": ["smv"] - }, - "x-conference/x-cooltalk": { - "source": "apache", - "extensions": ["ice"] - }, - "x-shader/x-fragment": { - "compressible": true - }, - "x-shader/x-vertex": { - "compressible": true - } -} diff --git a/node_modules/mime-db/index.js b/node_modules/mime-db/index.js deleted file mode 100644 index ec2be30..0000000 --- a/node_modules/mime-db/index.js +++ /dev/null @@ -1,12 +0,0 @@ -/*! - * mime-db - * Copyright(c) 2014 Jonathan Ong - * Copyright(c) 2015-2022 Douglas Christopher Wilson - * MIT Licensed - */ - -/** - * Module exports. - */ - -module.exports = require('./db.json') diff --git a/node_modules/mime-db/package.json b/node_modules/mime-db/package.json deleted file mode 100644 index 32c14b8..0000000 --- a/node_modules/mime-db/package.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "name": "mime-db", - "description": "Media Type Database", - "version": "1.52.0", - "contributors": [ - "Douglas Christopher Wilson ", - "Jonathan Ong (http://jongleberry.com)", - "Robert Kieffer (http://github.com/broofa)" - ], - "license": "MIT", - "keywords": [ - "mime", - "db", - "type", - "types", - "database", - "charset", - "charsets" - ], - "repository": "jshttp/mime-db", - "devDependencies": { - "bluebird": "3.7.2", - "co": "4.6.0", - "cogent": "1.0.1", - "csv-parse": "4.16.3", - "eslint": "7.32.0", - "eslint-config-standard": "15.0.1", - "eslint-plugin-import": "2.25.4", - "eslint-plugin-markdown": "2.2.1", - "eslint-plugin-node": "11.1.0", - "eslint-plugin-promise": "5.1.1", - "eslint-plugin-standard": "4.1.0", - "gnode": "0.1.2", - "media-typer": "1.1.0", - "mocha": "9.2.1", - "nyc": "15.1.0", - "raw-body": "2.5.0", - "stream-to-array": "2.3.0" - }, - "files": [ - "HISTORY.md", - "LICENSE", - "README.md", - "db.json", - "index.js" - ], - "engines": { - "node": ">= 0.6" - }, - "scripts": { - "build": "node scripts/build", - "fetch": "node scripts/fetch-apache && gnode scripts/fetch-iana && node scripts/fetch-nginx", - "lint": "eslint .", - "test": "mocha --reporter spec --bail --check-leaks test/", - "test-ci": "nyc --reporter=lcov --reporter=text npm test", - "test-cov": "nyc --reporter=html --reporter=text npm test", - "update": "npm run fetch && npm run build", - "version": "node scripts/version-history.js && git add HISTORY.md" - } -} diff --git a/node_modules/mime-types/HISTORY.md b/node_modules/mime-types/HISTORY.md deleted file mode 100644 index c5043b7..0000000 --- a/node_modules/mime-types/HISTORY.md +++ /dev/null @@ -1,397 +0,0 @@ -2.1.35 / 2022-03-12 -=================== - - * deps: mime-db@1.52.0 - - Add extensions from IANA for more `image/*` types - - Add extension `.asc` to `application/pgp-keys` - - Add extensions to various XML types - - Add new upstream MIME types - -2.1.34 / 2021-11-08 -=================== - - * deps: mime-db@1.51.0 - - Add new upstream MIME types - -2.1.33 / 2021-10-01 -=================== - - * deps: mime-db@1.50.0 - - Add deprecated iWorks mime types and extensions - - Add new upstream MIME types - -2.1.32 / 2021-07-27 -=================== - - * deps: mime-db@1.49.0 - - Add extension `.trig` to `application/trig` - - Add new upstream MIME types - -2.1.31 / 2021-06-01 -=================== - - * deps: mime-db@1.48.0 - - Add extension `.mvt` to `application/vnd.mapbox-vector-tile` - - Add new upstream MIME types - -2.1.30 / 2021-04-02 -=================== - - * deps: mime-db@1.47.0 - - Add extension `.amr` to `audio/amr` - - Remove ambigious extensions from IANA for `application/*+xml` types - - Update primary extension to `.es` for `application/ecmascript` - -2.1.29 / 2021-02-17 -=================== - - * deps: mime-db@1.46.0 - - Add extension `.amr` to `audio/amr` - - Add extension `.m4s` to `video/iso.segment` - - Add extension `.opus` to `audio/ogg` - - Add new upstream MIME types - -2.1.28 / 2021-01-01 -=================== - - * deps: mime-db@1.45.0 - - Add `application/ubjson` with extension `.ubj` - - Add `image/avif` with extension `.avif` - - Add `image/ktx2` with extension `.ktx2` - - Add extension `.dbf` to `application/vnd.dbf` - - Add extension `.rar` to `application/vnd.rar` - - Add extension `.td` to `application/urc-targetdesc+xml` - - Add new upstream MIME types - - Fix extension of `application/vnd.apple.keynote` to be `.key` - -2.1.27 / 2020-04-23 -=================== - - * deps: mime-db@1.44.0 - - Add charsets from IANA - - Add extension `.cjs` to `application/node` - - Add new upstream MIME types - -2.1.26 / 2020-01-05 -=================== - - * deps: mime-db@1.43.0 - - Add `application/x-keepass2` with extension `.kdbx` - - Add extension `.mxmf` to `audio/mobile-xmf` - - Add extensions from IANA for `application/*+xml` types - - Add new upstream MIME types - -2.1.25 / 2019-11-12 -=================== - - * deps: mime-db@1.42.0 - - Add new upstream MIME types - - Add `application/toml` with extension `.toml` - - Add `image/vnd.ms-dds` with extension `.dds` - -2.1.24 / 2019-04-20 -=================== - - * deps: mime-db@1.40.0 - - Add extensions from IANA for `model/*` types - - Add `text/mdx` with extension `.mdx` - -2.1.23 / 2019-04-17 -=================== - - * deps: mime-db@~1.39.0 - - Add extensions `.siv` and `.sieve` to `application/sieve` - - Add new upstream MIME types - -2.1.22 / 2019-02-14 -=================== - - * deps: mime-db@~1.38.0 - - Add extension `.nq` to `application/n-quads` - - Add extension `.nt` to `application/n-triples` - - Add new upstream MIME types - -2.1.21 / 2018-10-19 -=================== - - * deps: mime-db@~1.37.0 - - Add extensions to HEIC image types - - Add new upstream MIME types - -2.1.20 / 2018-08-26 -=================== - - * deps: mime-db@~1.36.0 - - Add Apple file extensions from IANA - - Add extensions from IANA for `image/*` types - - Add new upstream MIME types - -2.1.19 / 2018-07-17 -=================== - - * deps: mime-db@~1.35.0 - - Add extension `.csl` to `application/vnd.citationstyles.style+xml` - - Add extension `.es` to `application/ecmascript` - - Add extension `.owl` to `application/rdf+xml` - - Add new upstream MIME types - - Add UTF-8 as default charset for `text/turtle` - -2.1.18 / 2018-02-16 -=================== - - * deps: mime-db@~1.33.0 - - Add `application/raml+yaml` with extension `.raml` - - Add `application/wasm` with extension `.wasm` - - Add `text/shex` with extension `.shex` - - Add extensions for JPEG-2000 images - - Add extensions from IANA for `message/*` types - - Add new upstream MIME types - - Update font MIME types - - Update `text/hjson` to registered `application/hjson` - -2.1.17 / 2017-09-01 -=================== - - * deps: mime-db@~1.30.0 - - Add `application/vnd.ms-outlook` - - Add `application/x-arj` - - Add extension `.mjs` to `application/javascript` - - Add glTF types and extensions - - Add new upstream MIME types - - Add `text/x-org` - - Add VirtualBox MIME types - - Fix `source` records for `video/*` types that are IANA - - Update `font/opentype` to registered `font/otf` - -2.1.16 / 2017-07-24 -=================== - - * deps: mime-db@~1.29.0 - - Add `application/fido.trusted-apps+json` - - Add extension `.wadl` to `application/vnd.sun.wadl+xml` - - Add extension `.gz` to `application/gzip` - - Add new upstream MIME types - - Update extensions `.md` and `.markdown` to be `text/markdown` - -2.1.15 / 2017-03-23 -=================== - - * deps: mime-db@~1.27.0 - - Add new mime types - - Add `image/apng` - -2.1.14 / 2017-01-14 -=================== - - * deps: mime-db@~1.26.0 - - Add new mime types - -2.1.13 / 2016-11-18 -=================== - - * deps: mime-db@~1.25.0 - - Add new mime types - -2.1.12 / 2016-09-18 -=================== - - * deps: mime-db@~1.24.0 - - Add new mime types - - Add `audio/mp3` - -2.1.11 / 2016-05-01 -=================== - - * deps: mime-db@~1.23.0 - - Add new mime types - -2.1.10 / 2016-02-15 -=================== - - * deps: mime-db@~1.22.0 - - Add new mime types - - Fix extension of `application/dash+xml` - - Update primary extension for `audio/mp4` - -2.1.9 / 2016-01-06 -================== - - * deps: mime-db@~1.21.0 - - Add new mime types - -2.1.8 / 2015-11-30 -================== - - * deps: mime-db@~1.20.0 - - Add new mime types - -2.1.7 / 2015-09-20 -================== - - * deps: mime-db@~1.19.0 - - Add new mime types - -2.1.6 / 2015-09-03 -================== - - * deps: mime-db@~1.18.0 - - Add new mime types - -2.1.5 / 2015-08-20 -================== - - * deps: mime-db@~1.17.0 - - Add new mime types - -2.1.4 / 2015-07-30 -================== - - * deps: mime-db@~1.16.0 - - Add new mime types - -2.1.3 / 2015-07-13 -================== - - * deps: mime-db@~1.15.0 - - Add new mime types - -2.1.2 / 2015-06-25 -================== - - * deps: mime-db@~1.14.0 - - Add new mime types - -2.1.1 / 2015-06-08 -================== - - * perf: fix deopt during mapping - -2.1.0 / 2015-06-07 -================== - - * Fix incorrectly treating extension-less file name as extension - - i.e. `'path/to/json'` will no longer return `application/json` - * Fix `.charset(type)` to accept parameters - * Fix `.charset(type)` to match case-insensitive - * Improve generation of extension to MIME mapping - * Refactor internals for readability and no argument reassignment - * Prefer `application/*` MIME types from the same source - * Prefer any type over `application/octet-stream` - * deps: mime-db@~1.13.0 - - Add nginx as a source - - Add new mime types - -2.0.14 / 2015-06-06 -=================== - - * deps: mime-db@~1.12.0 - - Add new mime types - -2.0.13 / 2015-05-31 -=================== - - * deps: mime-db@~1.11.0 - - Add new mime types - -2.0.12 / 2015-05-19 -=================== - - * deps: mime-db@~1.10.0 - - Add new mime types - -2.0.11 / 2015-05-05 -=================== - - * deps: mime-db@~1.9.1 - - Add new mime types - -2.0.10 / 2015-03-13 -=================== - - * deps: mime-db@~1.8.0 - - Add new mime types - -2.0.9 / 2015-02-09 -================== - - * deps: mime-db@~1.7.0 - - Add new mime types - - Community extensions ownership transferred from `node-mime` - -2.0.8 / 2015-01-29 -================== - - * deps: mime-db@~1.6.0 - - Add new mime types - -2.0.7 / 2014-12-30 -================== - - * deps: mime-db@~1.5.0 - - Add new mime types - - Fix various invalid MIME type entries - -2.0.6 / 2014-12-30 -================== - - * deps: mime-db@~1.4.0 - - Add new mime types - - Fix various invalid MIME type entries - - Remove example template MIME types - -2.0.5 / 2014-12-29 -================== - - * deps: mime-db@~1.3.1 - - Fix missing extensions - -2.0.4 / 2014-12-10 -================== - - * deps: mime-db@~1.3.0 - - Add new mime types - -2.0.3 / 2014-11-09 -================== - - * deps: mime-db@~1.2.0 - - Add new mime types - -2.0.2 / 2014-09-28 -================== - - * deps: mime-db@~1.1.0 - - Add new mime types - - Update charsets - -2.0.1 / 2014-09-07 -================== - - * Support Node.js 0.6 - -2.0.0 / 2014-09-02 -================== - - * Use `mime-db` - * Remove `.define()` - -1.0.2 / 2014-08-04 -================== - - * Set charset=utf-8 for `text/javascript` - -1.0.1 / 2014-06-24 -================== - - * Add `text/jsx` type - -1.0.0 / 2014-05-12 -================== - - * Return `false` for unknown types - * Set charset=utf-8 for `application/json` - -0.1.0 / 2014-05-02 -================== - - * Initial release diff --git a/node_modules/mime-types/LICENSE b/node_modules/mime-types/LICENSE deleted file mode 100644 index 0616607..0000000 --- a/node_modules/mime-types/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -(The MIT License) - -Copyright (c) 2014 Jonathan Ong -Copyright (c) 2015 Douglas Christopher Wilson - -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/mime-types/README.md b/node_modules/mime-types/README.md deleted file mode 100644 index 48d2fb4..0000000 --- a/node_modules/mime-types/README.md +++ /dev/null @@ -1,113 +0,0 @@ -# mime-types - -[![NPM Version][npm-version-image]][npm-url] -[![NPM Downloads][npm-downloads-image]][npm-url] -[![Node.js Version][node-version-image]][node-version-url] -[![Build Status][ci-image]][ci-url] -[![Test Coverage][coveralls-image]][coveralls-url] - -The ultimate javascript content-type utility. - -Similar to [the `mime@1.x` module](https://www.npmjs.com/package/mime), except: - -- __No fallbacks.__ Instead of naively returning the first available type, - `mime-types` simply returns `false`, so do - `var type = mime.lookup('unrecognized') || 'application/octet-stream'`. -- No `new Mime()` business, so you could do `var lookup = require('mime-types').lookup`. -- No `.define()` functionality -- Bug fixes for `.lookup(path)` - -Otherwise, the API is compatible with `mime` 1.x. - -## Install - -This is a [Node.js](https://nodejs.org/en/) module available through the -[npm registry](https://www.npmjs.com/). Installation is done using the -[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): - -```sh -$ npm install mime-types -``` - -## Adding Types - -All mime types are based on [mime-db](https://www.npmjs.com/package/mime-db), -so open a PR there if you'd like to add mime types. - -## API - -```js -var mime = require('mime-types') -``` - -All functions return `false` if input is invalid or not found. - -### mime.lookup(path) - -Lookup the content-type associated with a file. - -```js -mime.lookup('json') // 'application/json' -mime.lookup('.md') // 'text/markdown' -mime.lookup('file.html') // 'text/html' -mime.lookup('folder/file.js') // 'application/javascript' -mime.lookup('folder/.htaccess') // false - -mime.lookup('cats') // false -``` - -### mime.contentType(type) - -Create a full content-type header given a content-type or extension. -When given an extension, `mime.lookup` is used to get the matching -content-type, otherwise the given content-type is used. Then if the -content-type does not already have a `charset` parameter, `mime.charset` -is used to get the default charset and add to the returned content-type. - -```js -mime.contentType('markdown') // 'text/x-markdown; charset=utf-8' -mime.contentType('file.json') // 'application/json; charset=utf-8' -mime.contentType('text/html') // 'text/html; charset=utf-8' -mime.contentType('text/html; charset=iso-8859-1') // 'text/html; charset=iso-8859-1' - -// from a full path -mime.contentType(path.extname('/path/to/file.json')) // 'application/json; charset=utf-8' -``` - -### mime.extension(type) - -Get the default extension for a content-type. - -```js -mime.extension('application/octet-stream') // 'bin' -``` - -### mime.charset(type) - -Lookup the implied default charset of a content-type. - -```js -mime.charset('text/markdown') // 'UTF-8' -``` - -### var type = mime.types[extension] - -A map of content-types by extension. - -### [extensions...] = mime.extensions[type] - -A map of extensions by content-type. - -## License - -[MIT](LICENSE) - -[ci-image]: https://badgen.net/github/checks/jshttp/mime-types/master?label=ci -[ci-url]: https://github.com/jshttp/mime-types/actions/workflows/ci.yml -[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/mime-types/master -[coveralls-url]: https://coveralls.io/r/jshttp/mime-types?branch=master -[node-version-image]: https://badgen.net/npm/node/mime-types -[node-version-url]: https://nodejs.org/en/download -[npm-downloads-image]: https://badgen.net/npm/dm/mime-types -[npm-url]: https://npmjs.org/package/mime-types -[npm-version-image]: https://badgen.net/npm/v/mime-types diff --git a/node_modules/mime-types/index.js b/node_modules/mime-types/index.js deleted file mode 100644 index b9f34d5..0000000 --- a/node_modules/mime-types/index.js +++ /dev/null @@ -1,188 +0,0 @@ -/*! - * mime-types - * Copyright(c) 2014 Jonathan Ong - * Copyright(c) 2015 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict' - -/** - * Module dependencies. - * @private - */ - -var db = require('mime-db') -var extname = require('path').extname - -/** - * Module variables. - * @private - */ - -var EXTRACT_TYPE_REGEXP = /^\s*([^;\s]*)(?:;|\s|$)/ -var TEXT_TYPE_REGEXP = /^text\//i - -/** - * Module exports. - * @public - */ - -exports.charset = charset -exports.charsets = { lookup: charset } -exports.contentType = contentType -exports.extension = extension -exports.extensions = Object.create(null) -exports.lookup = lookup -exports.types = Object.create(null) - -// Populate the extensions/types maps -populateMaps(exports.extensions, exports.types) - -/** - * Get the default charset for a MIME type. - * - * @param {string} type - * @return {boolean|string} - */ - -function charset (type) { - if (!type || typeof type !== 'string') { - return false - } - - // TODO: use media-typer - var match = EXTRACT_TYPE_REGEXP.exec(type) - var mime = match && db[match[1].toLowerCase()] - - if (mime && mime.charset) { - return mime.charset - } - - // default text/* to utf-8 - if (match && TEXT_TYPE_REGEXP.test(match[1])) { - return 'UTF-8' - } - - return false -} - -/** - * Create a full Content-Type header given a MIME type or extension. - * - * @param {string} str - * @return {boolean|string} - */ - -function contentType (str) { - // TODO: should this even be in this module? - if (!str || typeof str !== 'string') { - return false - } - - var mime = str.indexOf('/') === -1 - ? exports.lookup(str) - : str - - if (!mime) { - return false - } - - // TODO: use content-type or other module - if (mime.indexOf('charset') === -1) { - var charset = exports.charset(mime) - if (charset) mime += '; charset=' + charset.toLowerCase() - } - - return mime -} - -/** - * Get the default extension for a MIME type. - * - * @param {string} type - * @return {boolean|string} - */ - -function extension (type) { - if (!type || typeof type !== 'string') { - return false - } - - // TODO: use media-typer - var match = EXTRACT_TYPE_REGEXP.exec(type) - - // get extensions - var exts = match && exports.extensions[match[1].toLowerCase()] - - if (!exts || !exts.length) { - return false - } - - return exts[0] -} - -/** - * Lookup the MIME type for a file path/extension. - * - * @param {string} path - * @return {boolean|string} - */ - -function lookup (path) { - if (!path || typeof path !== 'string') { - return false - } - - // get the extension ("ext" or ".ext" or full path) - var extension = extname('x.' + path) - .toLowerCase() - .substr(1) - - if (!extension) { - return false - } - - return exports.types[extension] || false -} - -/** - * Populate the extensions and types maps. - * @private - */ - -function populateMaps (extensions, types) { - // source preference (least -> most) - var preference = ['nginx', 'apache', undefined, 'iana'] - - Object.keys(db).forEach(function forEachMimeType (type) { - var mime = db[type] - var exts = mime.extensions - - if (!exts || !exts.length) { - return - } - - // mime -> extensions - extensions[type] = exts - - // extension -> mime - for (var i = 0; i < exts.length; i++) { - var extension = exts[i] - - if (types[extension]) { - var from = preference.indexOf(db[types[extension]].source) - var to = preference.indexOf(mime.source) - - if (types[extension] !== 'application/octet-stream' && - (from > to || (from === to && types[extension].substr(0, 12) === 'application/'))) { - // skip the remapping - continue - } - } - - // set the extension -> mime - types[extension] = type - } - }) -} diff --git a/node_modules/mime-types/package.json b/node_modules/mime-types/package.json deleted file mode 100644 index bbef696..0000000 --- a/node_modules/mime-types/package.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "name": "mime-types", - "description": "The ultimate javascript content-type utility.", - "version": "2.1.35", - "contributors": [ - "Douglas Christopher Wilson ", - "Jeremiah Senkpiel (https://searchbeam.jit.su)", - "Jonathan Ong (http://jongleberry.com)" - ], - "license": "MIT", - "keywords": [ - "mime", - "types" - ], - "repository": "jshttp/mime-types", - "dependencies": { - "mime-db": "1.52.0" - }, - "devDependencies": { - "eslint": "7.32.0", - "eslint-config-standard": "14.1.1", - "eslint-plugin-import": "2.25.4", - "eslint-plugin-markdown": "2.2.1", - "eslint-plugin-node": "11.1.0", - "eslint-plugin-promise": "5.2.0", - "eslint-plugin-standard": "4.1.0", - "mocha": "9.2.2", - "nyc": "15.1.0" - }, - "files": [ - "HISTORY.md", - "LICENSE", - "index.js" - ], - "engines": { - "node": ">= 0.6" - }, - "scripts": { - "lint": "eslint .", - "test": "mocha --reporter spec test/test.js", - "test-ci": "nyc --reporter=lcov --reporter=text npm test", - "test-cov": "nyc --reporter=html --reporter=text npm test" - } -} diff --git a/node_modules/mime/.npmignore b/node_modules/mime/.npmignore deleted file mode 100644 index e69de29..0000000 diff --git a/node_modules/mime/CHANGELOG.md b/node_modules/mime/CHANGELOG.md deleted file mode 100644 index f127535..0000000 --- a/node_modules/mime/CHANGELOG.md +++ /dev/null @@ -1,164 +0,0 @@ -# Changelog - -## v1.6.0 (24/11/2017) -*No changelog for this release.* - ---- - -## v2.0.4 (24/11/2017) -- [**closed**] Switch to mime-score module for resolving extension contention issues. [#182](https://github.com/broofa/node-mime/issues/182) -- [**closed**] Update mime-db to 1.31.0 in v1.x branch [#181](https://github.com/broofa/node-mime/issues/181) - ---- - -## v1.5.0 (22/11/2017) -- [**closed**] need ES5 version ready in npm package [#179](https://github.com/broofa/node-mime/issues/179) -- [**closed**] mime-db no trace of iWork - pages / numbers / etc. [#178](https://github.com/broofa/node-mime/issues/178) -- [**closed**] How it works in brownser ? [#176](https://github.com/broofa/node-mime/issues/176) -- [**closed**] Missing `./Mime` [#175](https://github.com/broofa/node-mime/issues/175) -- [**closed**] Vulnerable Regular Expression [#167](https://github.com/broofa/node-mime/issues/167) - ---- - -## v2.0.3 (25/09/2017) -*No changelog for this release.* - ---- - -## v1.4.1 (25/09/2017) -- [**closed**] Issue when bundling with webpack [#172](https://github.com/broofa/node-mime/issues/172) - ---- - -## v2.0.2 (15/09/2017) -- [**V2**] fs.readFileSync is not a function [#165](https://github.com/broofa/node-mime/issues/165) -- [**closed**] The extension for video/quicktime should map to .mov, not .qt [#164](https://github.com/broofa/node-mime/issues/164) -- [**V2**] [v2 Feedback request] Mime class API [#163](https://github.com/broofa/node-mime/issues/163) -- [**V2**] [v2 Feedback request] Resolving conflicts over extensions [#162](https://github.com/broofa/node-mime/issues/162) -- [**V2**] Allow callers to load module with official, full, or no defined types. [#161](https://github.com/broofa/node-mime/issues/161) -- [**V2**] Use "facets" to resolve extension conflicts [#160](https://github.com/broofa/node-mime/issues/160) -- [**V2**] Remove fs and path dependencies [#152](https://github.com/broofa/node-mime/issues/152) -- [**V2**] Default content-type should not be application/octet-stream [#139](https://github.com/broofa/node-mime/issues/139) -- [**V2**] reset mime-types [#124](https://github.com/broofa/node-mime/issues/124) -- [**V2**] Extensionless paths should return null or false [#113](https://github.com/broofa/node-mime/issues/113) - ---- - -## v2.0.1 (14/09/2017) -- [**closed**] Changelog for v2.0 does not mention breaking changes [#171](https://github.com/broofa/node-mime/issues/171) -- [**closed**] MIME breaking with 'class' declaration as it is without 'use strict mode' [#170](https://github.com/broofa/node-mime/issues/170) - ---- - -## v2.0.0 (12/09/2017) -- [**closed**] woff and woff2 [#168](https://github.com/broofa/node-mime/issues/168) - ---- - -## v1.4.0 (28/08/2017) -- [**closed**] support for ac3 voc files [#159](https://github.com/broofa/node-mime/issues/159) -- [**closed**] Help understanding change from application/xml to text/xml [#158](https://github.com/broofa/node-mime/issues/158) -- [**closed**] no longer able to override mimetype [#157](https://github.com/broofa/node-mime/issues/157) -- [**closed**] application/vnd.adobe.photoshop [#147](https://github.com/broofa/node-mime/issues/147) -- [**closed**] Directories should appear as something other than application/octet-stream [#135](https://github.com/broofa/node-mime/issues/135) -- [**closed**] requested features [#131](https://github.com/broofa/node-mime/issues/131) -- [**closed**] Make types.json loading optional? [#129](https://github.com/broofa/node-mime/issues/129) -- [**closed**] Cannot find module './types.json' [#120](https://github.com/broofa/node-mime/issues/120) -- [**V2**] .wav files show up as "audio/x-wav" instead of "audio/x-wave" [#118](https://github.com/broofa/node-mime/issues/118) -- [**closed**] Don't be a pain in the ass for node community [#108](https://github.com/broofa/node-mime/issues/108) -- [**closed**] don't make default_type global [#78](https://github.com/broofa/node-mime/issues/78) -- [**closed**] mime.extension() fails if the content-type is parameterized [#74](https://github.com/broofa/node-mime/issues/74) - ---- - -## v1.3.6 (11/05/2017) -- [**closed**] .md should be text/markdown as of March 2016 [#154](https://github.com/broofa/node-mime/issues/154) -- [**closed**] Error while installing mime [#153](https://github.com/broofa/node-mime/issues/153) -- [**closed**] application/manifest+json [#149](https://github.com/broofa/node-mime/issues/149) -- [**closed**] Dynamic adaptive streaming over HTTP (DASH) file extension typo [#141](https://github.com/broofa/node-mime/issues/141) -- [**closed**] charsets image/png undefined [#140](https://github.com/broofa/node-mime/issues/140) -- [**closed**] Mime-db dependency out of date [#130](https://github.com/broofa/node-mime/issues/130) -- [**closed**] how to support plist? [#126](https://github.com/broofa/node-mime/issues/126) -- [**closed**] how does .types file format look like? [#123](https://github.com/broofa/node-mime/issues/123) -- [**closed**] Feature: support for expanding MIME patterns [#121](https://github.com/broofa/node-mime/issues/121) -- [**closed**] DEBUG_MIME doesn't work [#117](https://github.com/broofa/node-mime/issues/117) - ---- - -## v1.3.4 (06/02/2015) -*No changelog for this release.* - ---- - -## v1.3.3 (06/02/2015) -*No changelog for this release.* - ---- - -## v1.3.1 (05/02/2015) -- [**closed**] Consider adding support for Handlebars .hbs file ending [#111](https://github.com/broofa/node-mime/issues/111) -- [**closed**] Consider adding support for hjson. [#110](https://github.com/broofa/node-mime/issues/110) -- [**closed**] Add mime type for Opus audio files [#94](https://github.com/broofa/node-mime/issues/94) -- [**closed**] Consider making the `Requesting New Types` information more visible [#77](https://github.com/broofa/node-mime/issues/77) - ---- - -## v1.3.0 (05/02/2015) -- [**closed**] Add common name? [#114](https://github.com/broofa/node-mime/issues/114) -- [**closed**] application/x-yaml [#104](https://github.com/broofa/node-mime/issues/104) -- [**closed**] Add mime type for WOFF file format 2.0 [#102](https://github.com/broofa/node-mime/issues/102) -- [**closed**] application/x-msi for .msi [#99](https://github.com/broofa/node-mime/issues/99) -- [**closed**] Add mimetype for gettext translation files [#98](https://github.com/broofa/node-mime/issues/98) -- [**closed**] collaborators [#88](https://github.com/broofa/node-mime/issues/88) -- [**closed**] getting errot in installation of mime module...any1 can help? [#87](https://github.com/broofa/node-mime/issues/87) -- [**closed**] should application/json's charset be utf8? [#86](https://github.com/broofa/node-mime/issues/86) -- [**closed**] Add "license" and "licenses" to package.json [#81](https://github.com/broofa/node-mime/issues/81) -- [**closed**] lookup with extension-less file on Windows returns wrong type [#68](https://github.com/broofa/node-mime/issues/68) - ---- - -## v1.2.11 (15/08/2013) -- [**closed**] Update mime.types [#65](https://github.com/broofa/node-mime/issues/65) -- [**closed**] Publish a new version [#63](https://github.com/broofa/node-mime/issues/63) -- [**closed**] README should state upfront that "application/octet-stream" is default for unknown extension [#55](https://github.com/broofa/node-mime/issues/55) -- [**closed**] Suggested improvement to the charset API [#52](https://github.com/broofa/node-mime/issues/52) - ---- - -## v1.2.10 (25/07/2013) -- [**closed**] Mime type for woff files should be application/font-woff and not application/x-font-woff [#62](https://github.com/broofa/node-mime/issues/62) -- [**closed**] node.types in conflict with mime.types [#51](https://github.com/broofa/node-mime/issues/51) - ---- - -## v1.2.9 (17/01/2013) -- [**closed**] Please update "mime" NPM [#49](https://github.com/broofa/node-mime/issues/49) -- [**closed**] Please add semicolon [#46](https://github.com/broofa/node-mime/issues/46) -- [**closed**] parse full mime types [#43](https://github.com/broofa/node-mime/issues/43) - ---- - -## v1.2.8 (10/01/2013) -- [**closed**] /js directory mime is application/javascript. Is it correct? [#47](https://github.com/broofa/node-mime/issues/47) -- [**closed**] Add mime types for lua code. [#45](https://github.com/broofa/node-mime/issues/45) - ---- - -## v1.2.7 (19/10/2012) -- [**closed**] cannot install 1.2.7 via npm [#41](https://github.com/broofa/node-mime/issues/41) -- [**closed**] Transfer ownership to @broofa [#36](https://github.com/broofa/node-mime/issues/36) -- [**closed**] it's wrong to set charset to UTF-8 for text [#30](https://github.com/broofa/node-mime/issues/30) -- [**closed**] Allow multiple instances of MIME types container [#27](https://github.com/broofa/node-mime/issues/27) - ---- - -## v1.2.5 (16/02/2012) -- [**closed**] When looking up a types, check hasOwnProperty [#23](https://github.com/broofa/node-mime/issues/23) -- [**closed**] Bump version to 1.2.2 [#18](https://github.com/broofa/node-mime/issues/18) -- [**closed**] No license [#16](https://github.com/broofa/node-mime/issues/16) -- [**closed**] Some types missing that are used by html5/css3 [#13](https://github.com/broofa/node-mime/issues/13) -- [**closed**] npm install fails for 1.2.1 [#12](https://github.com/broofa/node-mime/issues/12) -- [**closed**] image/pjpeg + image/x-png [#10](https://github.com/broofa/node-mime/issues/10) -- [**closed**] symlink [#8](https://github.com/broofa/node-mime/issues/8) -- [**closed**] gzip [#2](https://github.com/broofa/node-mime/issues/2) -- [**closed**] ALL CAPS filenames return incorrect mime type [#1](https://github.com/broofa/node-mime/issues/1) diff --git a/node_modules/mime/LICENSE b/node_modules/mime/LICENSE deleted file mode 100644 index d3f46f7..0000000 --- a/node_modules/mime/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2010 Benjamin Thomas, Robert Kieffer - -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/mime/README.md b/node_modules/mime/README.md deleted file mode 100644 index 506fbe5..0000000 --- a/node_modules/mime/README.md +++ /dev/null @@ -1,90 +0,0 @@ -# mime - -Comprehensive MIME type mapping API based on mime-db module. - -## Install - -Install with [npm](http://github.com/isaacs/npm): - - npm install mime - -## Contributing / Testing - - npm run test - -## Command Line - - mime [path_string] - -E.g. - - > mime scripts/jquery.js - application/javascript - -## API - Queries - -### mime.lookup(path) -Get the mime type associated with a file, if no mime type is found `application/octet-stream` is returned. Performs a case-insensitive lookup using the extension in `path` (the substring after the last '/' or '.'). E.g. - -```js -var mime = require('mime'); - -mime.lookup('/path/to/file.txt'); // => 'text/plain' -mime.lookup('file.txt'); // => 'text/plain' -mime.lookup('.TXT'); // => 'text/plain' -mime.lookup('htm'); // => 'text/html' -``` - -### mime.default_type -Sets the mime type returned when `mime.lookup` fails to find the extension searched for. (Default is `application/octet-stream`.) - -### mime.extension(type) -Get the default extension for `type` - -```js -mime.extension('text/html'); // => 'html' -mime.extension('application/octet-stream'); // => 'bin' -``` - -### mime.charsets.lookup() - -Map mime-type to charset - -```js -mime.charsets.lookup('text/plain'); // => 'UTF-8' -``` - -(The logic for charset lookups is pretty rudimentary. Feel free to suggest improvements.) - -## API - Defining Custom Types - -Custom type mappings can be added on a per-project basis via the following APIs. - -### mime.define() - -Add custom mime/extension mappings - -```js -mime.define({ - 'text/x-some-format': ['x-sf', 'x-sft', 'x-sfml'], - 'application/x-my-type': ['x-mt', 'x-mtt'], - // etc ... -}); - -mime.lookup('x-sft'); // => 'text/x-some-format' -``` - -The first entry in the extensions array is returned by `mime.extension()`. E.g. - -```js -mime.extension('text/x-some-format'); // => 'x-sf' -``` - -### mime.load(filepath) - -Load mappings from an Apache ".types" format file - -```js -mime.load('./my_project.types'); -``` -The .types file format is simple - See the `types` dir for examples. diff --git a/node_modules/mime/cli.js b/node_modules/mime/cli.js deleted file mode 100755 index 20b1ffe..0000000 --- a/node_modules/mime/cli.js +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env node - -var mime = require('./mime.js'); -var file = process.argv[2]; -var type = mime.lookup(file); - -process.stdout.write(type + '\n'); - diff --git a/node_modules/mime/mime.js b/node_modules/mime/mime.js deleted file mode 100644 index d7efbde..0000000 --- a/node_modules/mime/mime.js +++ /dev/null @@ -1,108 +0,0 @@ -var path = require('path'); -var fs = require('fs'); - -function Mime() { - // Map of extension -> mime type - this.types = Object.create(null); - - // Map of mime type -> extension - this.extensions = Object.create(null); -} - -/** - * Define mimetype -> extension mappings. Each key is a mime-type that maps - * to an array of extensions associated with the type. The first extension is - * used as the default extension for the type. - * - * e.g. mime.define({'audio/ogg', ['oga', 'ogg', 'spx']}); - * - * @param map (Object) type definitions - */ -Mime.prototype.define = function (map) { - for (var type in map) { - var exts = map[type]; - for (var i = 0; i < exts.length; i++) { - if (process.env.DEBUG_MIME && this.types[exts[i]]) { - console.warn((this._loading || "define()").replace(/.*\//, ''), 'changes "' + exts[i] + '" extension type from ' + - this.types[exts[i]] + ' to ' + type); - } - - this.types[exts[i]] = type; - } - - // Default extension is the first one we encounter - if (!this.extensions[type]) { - this.extensions[type] = exts[0]; - } - } -}; - -/** - * Load an Apache2-style ".types" file - * - * This may be called multiple times (it's expected). Where files declare - * overlapping types/extensions, the last file wins. - * - * @param file (String) path of file to load. - */ -Mime.prototype.load = function(file) { - this._loading = file; - // Read file and split into lines - var map = {}, - content = fs.readFileSync(file, 'ascii'), - lines = content.split(/[\r\n]+/); - - lines.forEach(function(line) { - // Clean up whitespace/comments, and split into fields - var fields = line.replace(/\s*#.*|^\s*|\s*$/g, '').split(/\s+/); - map[fields.shift()] = fields; - }); - - this.define(map); - - this._loading = null; -}; - -/** - * Lookup a mime type based on extension - */ -Mime.prototype.lookup = function(path, fallback) { - var ext = path.replace(/^.*[\.\/\\]/, '').toLowerCase(); - - return this.types[ext] || fallback || this.default_type; -}; - -/** - * Return file extension associated with a mime type - */ -Mime.prototype.extension = function(mimeType) { - var type = mimeType.match(/^\s*([^;\s]*)(?:;|\s|$)/)[1].toLowerCase(); - return this.extensions[type]; -}; - -// Default instance -var mime = new Mime(); - -// Define built-in types -mime.define(require('./types.json')); - -// Default type -mime.default_type = mime.lookup('bin'); - -// -// Additional API specific to the default instance -// - -mime.Mime = Mime; - -/** - * Lookup a charset based on mime type. - */ -mime.charsets = { - lookup: function(mimeType, fallback) { - // Assume text types are utf8 - return (/^text\/|^application\/(javascript|json)/).test(mimeType) ? 'UTF-8' : fallback; - } -}; - -module.exports = mime; diff --git a/node_modules/mime/package.json b/node_modules/mime/package.json deleted file mode 100644 index 6bd24bc..0000000 --- a/node_modules/mime/package.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "author": { - "name": "Robert Kieffer", - "url": "http://github.com/broofa", - "email": "robert@broofa.com" - }, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - }, - "contributors": [ - { - "name": "Benjamin Thomas", - "url": "http://github.com/bentomas", - "email": "benjamin@benjaminthomas.org" - } - ], - "description": "A comprehensive library for mime-type mapping", - "license": "MIT", - "dependencies": {}, - "devDependencies": { - "github-release-notes": "0.13.1", - "mime-db": "1.31.0", - "mime-score": "1.1.0" - }, - "scripts": { - "prepare": "node src/build.js", - "changelog": "gren changelog --tags=all --generate --override", - "test": "node src/test.js" - }, - "keywords": [ - "util", - "mime" - ], - "main": "mime.js", - "name": "mime", - "repository": { - "url": "https://github.com/broofa/node-mime", - "type": "git" - }, - "version": "1.6.0" -} diff --git a/node_modules/mime/src/build.js b/node_modules/mime/src/build.js deleted file mode 100755 index 4928e48..0000000 --- a/node_modules/mime/src/build.js +++ /dev/null @@ -1,53 +0,0 @@ -#!/usr/bin/env node - -'use strict'; - -const fs = require('fs'); -const path = require('path'); -const mimeScore = require('mime-score'); - -let db = require('mime-db'); -let chalk = require('chalk'); - -const STANDARD_FACET_SCORE = 900; - -const byExtension = {}; - -// Clear out any conflict extensions in mime-db -for (let type in db) { - let entry = db[type]; - entry.type = type; - - if (!entry.extensions) continue; - - entry.extensions.forEach(ext => { - if (ext in byExtension) { - const e0 = entry; - const e1 = byExtension[ext]; - e0.pri = mimeScore(e0.type, e0.source); - e1.pri = mimeScore(e1.type, e1.source); - - let drop = e0.pri < e1.pri ? e0 : e1; - let keep = e0.pri >= e1.pri ? e0 : e1; - drop.extensions = drop.extensions.filter(e => e !== ext); - - console.log(`${ext}: Keeping ${chalk.green(keep.type)} (${keep.pri}), dropping ${chalk.red(drop.type)} (${drop.pri})`); - } - byExtension[ext] = entry; - }); -} - -function writeTypesFile(types, path) { - fs.writeFileSync(path, JSON.stringify(types)); -} - -// Segregate into standard and non-standard types based on facet per -// https://tools.ietf.org/html/rfc6838#section-3.1 -const types = {}; - -Object.keys(db).sort().forEach(k => { - const entry = db[k]; - types[entry.type] = entry.extensions; -}); - -writeTypesFile(types, path.join(__dirname, '..', 'types.json')); diff --git a/node_modules/mime/src/test.js b/node_modules/mime/src/test.js deleted file mode 100644 index 42958a2..0000000 --- a/node_modules/mime/src/test.js +++ /dev/null @@ -1,60 +0,0 @@ -/** - * Usage: node test.js - */ - -var mime = require('../mime'); -var assert = require('assert'); -var path = require('path'); - -// -// Test mime lookups -// - -assert.equal('text/plain', mime.lookup('text.txt')); // normal file -assert.equal('text/plain', mime.lookup('TEXT.TXT')); // uppercase -assert.equal('text/plain', mime.lookup('dir/text.txt')); // dir + file -assert.equal('text/plain', mime.lookup('.text.txt')); // hidden file -assert.equal('text/plain', mime.lookup('.txt')); // nameless -assert.equal('text/plain', mime.lookup('txt')); // extension-only -assert.equal('text/plain', mime.lookup('/txt')); // extension-less () -assert.equal('text/plain', mime.lookup('\\txt')); // Windows, extension-less -assert.equal('application/octet-stream', mime.lookup('text.nope')); // unrecognized -assert.equal('fallback', mime.lookup('text.fallback', 'fallback')); // alternate default - -// -// Test extensions -// - -assert.equal('txt', mime.extension(mime.types.text)); -assert.equal('html', mime.extension(mime.types.htm)); -assert.equal('bin', mime.extension('application/octet-stream')); -assert.equal('bin', mime.extension('application/octet-stream ')); -assert.equal('html', mime.extension(' text/html; charset=UTF-8')); -assert.equal('html', mime.extension('text/html; charset=UTF-8 ')); -assert.equal('html', mime.extension('text/html; charset=UTF-8')); -assert.equal('html', mime.extension('text/html ; charset=UTF-8')); -assert.equal('html', mime.extension('text/html;charset=UTF-8')); -assert.equal('html', mime.extension('text/Html;charset=UTF-8')); -assert.equal(undefined, mime.extension('unrecognized')); - -// -// Test node.types lookups -// - -assert.equal('font/woff', mime.lookup('file.woff')); -assert.equal('application/octet-stream', mime.lookup('file.buffer')); -// TODO: Uncomment once #157 is resolved -// assert.equal('audio/mp4', mime.lookup('file.m4a')); -assert.equal('font/otf', mime.lookup('file.otf')); - -// -// Test charsets -// - -assert.equal('UTF-8', mime.charsets.lookup('text/plain')); -assert.equal('UTF-8', mime.charsets.lookup(mime.types.js)); -assert.equal('UTF-8', mime.charsets.lookup(mime.types.json)); -assert.equal(undefined, mime.charsets.lookup(mime.types.bin)); -assert.equal('fallback', mime.charsets.lookup('application/octet-stream', 'fallback')); - -console.log('\nAll tests passed'); diff --git a/node_modules/mime/types.json b/node_modules/mime/types.json deleted file mode 100644 index bec78ab..0000000 --- a/node_modules/mime/types.json +++ /dev/null @@ -1 +0,0 @@ -{"application/andrew-inset":["ez"],"application/applixware":["aw"],"application/atom+xml":["atom"],"application/atomcat+xml":["atomcat"],"application/atomsvc+xml":["atomsvc"],"application/bdoc":["bdoc"],"application/ccxml+xml":["ccxml"],"application/cdmi-capability":["cdmia"],"application/cdmi-container":["cdmic"],"application/cdmi-domain":["cdmid"],"application/cdmi-object":["cdmio"],"application/cdmi-queue":["cdmiq"],"application/cu-seeme":["cu"],"application/dash+xml":["mpd"],"application/davmount+xml":["davmount"],"application/docbook+xml":["dbk"],"application/dssc+der":["dssc"],"application/dssc+xml":["xdssc"],"application/ecmascript":["ecma"],"application/emma+xml":["emma"],"application/epub+zip":["epub"],"application/exi":["exi"],"application/font-tdpfr":["pfr"],"application/font-woff":[],"application/font-woff2":[],"application/geo+json":["geojson"],"application/gml+xml":["gml"],"application/gpx+xml":["gpx"],"application/gxf":["gxf"],"application/gzip":["gz"],"application/hyperstudio":["stk"],"application/inkml+xml":["ink","inkml"],"application/ipfix":["ipfix"],"application/java-archive":["jar","war","ear"],"application/java-serialized-object":["ser"],"application/java-vm":["class"],"application/javascript":["js","mjs"],"application/json":["json","map"],"application/json5":["json5"],"application/jsonml+json":["jsonml"],"application/ld+json":["jsonld"],"application/lost+xml":["lostxml"],"application/mac-binhex40":["hqx"],"application/mac-compactpro":["cpt"],"application/mads+xml":["mads"],"application/manifest+json":["webmanifest"],"application/marc":["mrc"],"application/marcxml+xml":["mrcx"],"application/mathematica":["ma","nb","mb"],"application/mathml+xml":["mathml"],"application/mbox":["mbox"],"application/mediaservercontrol+xml":["mscml"],"application/metalink+xml":["metalink"],"application/metalink4+xml":["meta4"],"application/mets+xml":["mets"],"application/mods+xml":["mods"],"application/mp21":["m21","mp21"],"application/mp4":["mp4s","m4p"],"application/msword":["doc","dot"],"application/mxf":["mxf"],"application/octet-stream":["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"],"application/oda":["oda"],"application/oebps-package+xml":["opf"],"application/ogg":["ogx"],"application/omdoc+xml":["omdoc"],"application/onenote":["onetoc","onetoc2","onetmp","onepkg"],"application/oxps":["oxps"],"application/patch-ops-error+xml":["xer"],"application/pdf":["pdf"],"application/pgp-encrypted":["pgp"],"application/pgp-signature":["asc","sig"],"application/pics-rules":["prf"],"application/pkcs10":["p10"],"application/pkcs7-mime":["p7m","p7c"],"application/pkcs7-signature":["p7s"],"application/pkcs8":["p8"],"application/pkix-attr-cert":["ac"],"application/pkix-cert":["cer"],"application/pkix-crl":["crl"],"application/pkix-pkipath":["pkipath"],"application/pkixcmp":["pki"],"application/pls+xml":["pls"],"application/postscript":["ai","eps","ps"],"application/prs.cww":["cww"],"application/pskc+xml":["pskcxml"],"application/raml+yaml":["raml"],"application/rdf+xml":["rdf"],"application/reginfo+xml":["rif"],"application/relax-ng-compact-syntax":["rnc"],"application/resource-lists+xml":["rl"],"application/resource-lists-diff+xml":["rld"],"application/rls-services+xml":["rs"],"application/rpki-ghostbusters":["gbr"],"application/rpki-manifest":["mft"],"application/rpki-roa":["roa"],"application/rsd+xml":["rsd"],"application/rss+xml":["rss"],"application/rtf":["rtf"],"application/sbml+xml":["sbml"],"application/scvp-cv-request":["scq"],"application/scvp-cv-response":["scs"],"application/scvp-vp-request":["spq"],"application/scvp-vp-response":["spp"],"application/sdp":["sdp"],"application/set-payment-initiation":["setpay"],"application/set-registration-initiation":["setreg"],"application/shf+xml":["shf"],"application/smil+xml":["smi","smil"],"application/sparql-query":["rq"],"application/sparql-results+xml":["srx"],"application/srgs":["gram"],"application/srgs+xml":["grxml"],"application/sru+xml":["sru"],"application/ssdl+xml":["ssdl"],"application/ssml+xml":["ssml"],"application/tei+xml":["tei","teicorpus"],"application/thraud+xml":["tfi"],"application/timestamped-data":["tsd"],"application/vnd.3gpp.pic-bw-large":["plb"],"application/vnd.3gpp.pic-bw-small":["psb"],"application/vnd.3gpp.pic-bw-var":["pvb"],"application/vnd.3gpp2.tcap":["tcap"],"application/vnd.3m.post-it-notes":["pwn"],"application/vnd.accpac.simply.aso":["aso"],"application/vnd.accpac.simply.imp":["imp"],"application/vnd.acucobol":["acu"],"application/vnd.acucorp":["atc","acutc"],"application/vnd.adobe.air-application-installer-package+zip":["air"],"application/vnd.adobe.formscentral.fcdt":["fcdt"],"application/vnd.adobe.fxp":["fxp","fxpl"],"application/vnd.adobe.xdp+xml":["xdp"],"application/vnd.adobe.xfdf":["xfdf"],"application/vnd.ahead.space":["ahead"],"application/vnd.airzip.filesecure.azf":["azf"],"application/vnd.airzip.filesecure.azs":["azs"],"application/vnd.amazon.ebook":["azw"],"application/vnd.americandynamics.acc":["acc"],"application/vnd.amiga.ami":["ami"],"application/vnd.android.package-archive":["apk"],"application/vnd.anser-web-certificate-issue-initiation":["cii"],"application/vnd.anser-web-funds-transfer-initiation":["fti"],"application/vnd.antix.game-component":["atx"],"application/vnd.apple.installer+xml":["mpkg"],"application/vnd.apple.mpegurl":["m3u8"],"application/vnd.apple.pkpass":["pkpass"],"application/vnd.aristanetworks.swi":["swi"],"application/vnd.astraea-software.iota":["iota"],"application/vnd.audiograph":["aep"],"application/vnd.blueice.multipass":["mpm"],"application/vnd.bmi":["bmi"],"application/vnd.businessobjects":["rep"],"application/vnd.chemdraw+xml":["cdxml"],"application/vnd.chipnuts.karaoke-mmd":["mmd"],"application/vnd.cinderella":["cdy"],"application/vnd.claymore":["cla"],"application/vnd.cloanto.rp9":["rp9"],"application/vnd.clonk.c4group":["c4g","c4d","c4f","c4p","c4u"],"application/vnd.cluetrust.cartomobile-config":["c11amc"],"application/vnd.cluetrust.cartomobile-config-pkg":["c11amz"],"application/vnd.commonspace":["csp"],"application/vnd.contact.cmsg":["cdbcmsg"],"application/vnd.cosmocaller":["cmc"],"application/vnd.crick.clicker":["clkx"],"application/vnd.crick.clicker.keyboard":["clkk"],"application/vnd.crick.clicker.palette":["clkp"],"application/vnd.crick.clicker.template":["clkt"],"application/vnd.crick.clicker.wordbank":["clkw"],"application/vnd.criticaltools.wbs+xml":["wbs"],"application/vnd.ctc-posml":["pml"],"application/vnd.cups-ppd":["ppd"],"application/vnd.curl.car":["car"],"application/vnd.curl.pcurl":["pcurl"],"application/vnd.dart":["dart"],"application/vnd.data-vision.rdz":["rdz"],"application/vnd.dece.data":["uvf","uvvf","uvd","uvvd"],"application/vnd.dece.ttml+xml":["uvt","uvvt"],"application/vnd.dece.unspecified":["uvx","uvvx"],"application/vnd.dece.zip":["uvz","uvvz"],"application/vnd.denovo.fcselayout-link":["fe_launch"],"application/vnd.dna":["dna"],"application/vnd.dolby.mlp":["mlp"],"application/vnd.dpgraph":["dpg"],"application/vnd.dreamfactory":["dfac"],"application/vnd.ds-keypoint":["kpxx"],"application/vnd.dvb.ait":["ait"],"application/vnd.dvb.service":["svc"],"application/vnd.dynageo":["geo"],"application/vnd.ecowin.chart":["mag"],"application/vnd.enliven":["nml"],"application/vnd.epson.esf":["esf"],"application/vnd.epson.msf":["msf"],"application/vnd.epson.quickanime":["qam"],"application/vnd.epson.salt":["slt"],"application/vnd.epson.ssf":["ssf"],"application/vnd.eszigno3+xml":["es3","et3"],"application/vnd.ezpix-album":["ez2"],"application/vnd.ezpix-package":["ez3"],"application/vnd.fdf":["fdf"],"application/vnd.fdsn.mseed":["mseed"],"application/vnd.fdsn.seed":["seed","dataless"],"application/vnd.flographit":["gph"],"application/vnd.fluxtime.clip":["ftc"],"application/vnd.framemaker":["fm","frame","maker","book"],"application/vnd.frogans.fnc":["fnc"],"application/vnd.frogans.ltf":["ltf"],"application/vnd.fsc.weblaunch":["fsc"],"application/vnd.fujitsu.oasys":["oas"],"application/vnd.fujitsu.oasys2":["oa2"],"application/vnd.fujitsu.oasys3":["oa3"],"application/vnd.fujitsu.oasysgp":["fg5"],"application/vnd.fujitsu.oasysprs":["bh2"],"application/vnd.fujixerox.ddd":["ddd"],"application/vnd.fujixerox.docuworks":["xdw"],"application/vnd.fujixerox.docuworks.binder":["xbd"],"application/vnd.fuzzysheet":["fzs"],"application/vnd.genomatix.tuxedo":["txd"],"application/vnd.geogebra.file":["ggb"],"application/vnd.geogebra.tool":["ggt"],"application/vnd.geometry-explorer":["gex","gre"],"application/vnd.geonext":["gxt"],"application/vnd.geoplan":["g2w"],"application/vnd.geospace":["g3w"],"application/vnd.gmx":["gmx"],"application/vnd.google-apps.document":["gdoc"],"application/vnd.google-apps.presentation":["gslides"],"application/vnd.google-apps.spreadsheet":["gsheet"],"application/vnd.google-earth.kml+xml":["kml"],"application/vnd.google-earth.kmz":["kmz"],"application/vnd.grafeq":["gqf","gqs"],"application/vnd.groove-account":["gac"],"application/vnd.groove-help":["ghf"],"application/vnd.groove-identity-message":["gim"],"application/vnd.groove-injector":["grv"],"application/vnd.groove-tool-message":["gtm"],"application/vnd.groove-tool-template":["tpl"],"application/vnd.groove-vcard":["vcg"],"application/vnd.hal+xml":["hal"],"application/vnd.handheld-entertainment+xml":["zmm"],"application/vnd.hbci":["hbci"],"application/vnd.hhe.lesson-player":["les"],"application/vnd.hp-hpgl":["hpgl"],"application/vnd.hp-hpid":["hpid"],"application/vnd.hp-hps":["hps"],"application/vnd.hp-jlyt":["jlt"],"application/vnd.hp-pcl":["pcl"],"application/vnd.hp-pclxl":["pclxl"],"application/vnd.hydrostatix.sof-data":["sfd-hdstx"],"application/vnd.ibm.minipay":["mpy"],"application/vnd.ibm.modcap":["afp","listafp","list3820"],"application/vnd.ibm.rights-management":["irm"],"application/vnd.ibm.secure-container":["sc"],"application/vnd.iccprofile":["icc","icm"],"application/vnd.igloader":["igl"],"application/vnd.immervision-ivp":["ivp"],"application/vnd.immervision-ivu":["ivu"],"application/vnd.insors.igm":["igm"],"application/vnd.intercon.formnet":["xpw","xpx"],"application/vnd.intergeo":["i2g"],"application/vnd.intu.qbo":["qbo"],"application/vnd.intu.qfx":["qfx"],"application/vnd.ipunplugged.rcprofile":["rcprofile"],"application/vnd.irepository.package+xml":["irp"],"application/vnd.is-xpr":["xpr"],"application/vnd.isac.fcs":["fcs"],"application/vnd.jam":["jam"],"application/vnd.jcp.javame.midlet-rms":["rms"],"application/vnd.jisp":["jisp"],"application/vnd.joost.joda-archive":["joda"],"application/vnd.kahootz":["ktz","ktr"],"application/vnd.kde.karbon":["karbon"],"application/vnd.kde.kchart":["chrt"],"application/vnd.kde.kformula":["kfo"],"application/vnd.kde.kivio":["flw"],"application/vnd.kde.kontour":["kon"],"application/vnd.kde.kpresenter":["kpr","kpt"],"application/vnd.kde.kspread":["ksp"],"application/vnd.kde.kword":["kwd","kwt"],"application/vnd.kenameaapp":["htke"],"application/vnd.kidspiration":["kia"],"application/vnd.kinar":["kne","knp"],"application/vnd.koan":["skp","skd","skt","skm"],"application/vnd.kodak-descriptor":["sse"],"application/vnd.las.las+xml":["lasxml"],"application/vnd.llamagraphics.life-balance.desktop":["lbd"],"application/vnd.llamagraphics.life-balance.exchange+xml":["lbe"],"application/vnd.lotus-1-2-3":["123"],"application/vnd.lotus-approach":["apr"],"application/vnd.lotus-freelance":["pre"],"application/vnd.lotus-notes":["nsf"],"application/vnd.lotus-organizer":["org"],"application/vnd.lotus-screencam":["scm"],"application/vnd.lotus-wordpro":["lwp"],"application/vnd.macports.portpkg":["portpkg"],"application/vnd.mcd":["mcd"],"application/vnd.medcalcdata":["mc1"],"application/vnd.mediastation.cdkey":["cdkey"],"application/vnd.mfer":["mwf"],"application/vnd.mfmp":["mfm"],"application/vnd.micrografx.flo":["flo"],"application/vnd.micrografx.igx":["igx"],"application/vnd.mif":["mif"],"application/vnd.mobius.daf":["daf"],"application/vnd.mobius.dis":["dis"],"application/vnd.mobius.mbk":["mbk"],"application/vnd.mobius.mqy":["mqy"],"application/vnd.mobius.msl":["msl"],"application/vnd.mobius.plc":["plc"],"application/vnd.mobius.txf":["txf"],"application/vnd.mophun.application":["mpn"],"application/vnd.mophun.certificate":["mpc"],"application/vnd.mozilla.xul+xml":["xul"],"application/vnd.ms-artgalry":["cil"],"application/vnd.ms-cab-compressed":["cab"],"application/vnd.ms-excel":["xls","xlm","xla","xlc","xlt","xlw"],"application/vnd.ms-excel.addin.macroenabled.12":["xlam"],"application/vnd.ms-excel.sheet.binary.macroenabled.12":["xlsb"],"application/vnd.ms-excel.sheet.macroenabled.12":["xlsm"],"application/vnd.ms-excel.template.macroenabled.12":["xltm"],"application/vnd.ms-fontobject":["eot"],"application/vnd.ms-htmlhelp":["chm"],"application/vnd.ms-ims":["ims"],"application/vnd.ms-lrm":["lrm"],"application/vnd.ms-officetheme":["thmx"],"application/vnd.ms-outlook":["msg"],"application/vnd.ms-pki.seccat":["cat"],"application/vnd.ms-pki.stl":["stl"],"application/vnd.ms-powerpoint":["ppt","pps","pot"],"application/vnd.ms-powerpoint.addin.macroenabled.12":["ppam"],"application/vnd.ms-powerpoint.presentation.macroenabled.12":["pptm"],"application/vnd.ms-powerpoint.slide.macroenabled.12":["sldm"],"application/vnd.ms-powerpoint.slideshow.macroenabled.12":["ppsm"],"application/vnd.ms-powerpoint.template.macroenabled.12":["potm"],"application/vnd.ms-project":["mpp","mpt"],"application/vnd.ms-word.document.macroenabled.12":["docm"],"application/vnd.ms-word.template.macroenabled.12":["dotm"],"application/vnd.ms-works":["wps","wks","wcm","wdb"],"application/vnd.ms-wpl":["wpl"],"application/vnd.ms-xpsdocument":["xps"],"application/vnd.mseq":["mseq"],"application/vnd.musician":["mus"],"application/vnd.muvee.style":["msty"],"application/vnd.mynfc":["taglet"],"application/vnd.neurolanguage.nlu":["nlu"],"application/vnd.nitf":["ntf","nitf"],"application/vnd.noblenet-directory":["nnd"],"application/vnd.noblenet-sealer":["nns"],"application/vnd.noblenet-web":["nnw"],"application/vnd.nokia.n-gage.data":["ngdat"],"application/vnd.nokia.n-gage.symbian.install":["n-gage"],"application/vnd.nokia.radio-preset":["rpst"],"application/vnd.nokia.radio-presets":["rpss"],"application/vnd.novadigm.edm":["edm"],"application/vnd.novadigm.edx":["edx"],"application/vnd.novadigm.ext":["ext"],"application/vnd.oasis.opendocument.chart":["odc"],"application/vnd.oasis.opendocument.chart-template":["otc"],"application/vnd.oasis.opendocument.database":["odb"],"application/vnd.oasis.opendocument.formula":["odf"],"application/vnd.oasis.opendocument.formula-template":["odft"],"application/vnd.oasis.opendocument.graphics":["odg"],"application/vnd.oasis.opendocument.graphics-template":["otg"],"application/vnd.oasis.opendocument.image":["odi"],"application/vnd.oasis.opendocument.image-template":["oti"],"application/vnd.oasis.opendocument.presentation":["odp"],"application/vnd.oasis.opendocument.presentation-template":["otp"],"application/vnd.oasis.opendocument.spreadsheet":["ods"],"application/vnd.oasis.opendocument.spreadsheet-template":["ots"],"application/vnd.oasis.opendocument.text":["odt"],"application/vnd.oasis.opendocument.text-master":["odm"],"application/vnd.oasis.opendocument.text-template":["ott"],"application/vnd.oasis.opendocument.text-web":["oth"],"application/vnd.olpc-sugar":["xo"],"application/vnd.oma.dd2+xml":["dd2"],"application/vnd.openofficeorg.extension":["oxt"],"application/vnd.openxmlformats-officedocument.presentationml.presentation":["pptx"],"application/vnd.openxmlformats-officedocument.presentationml.slide":["sldx"],"application/vnd.openxmlformats-officedocument.presentationml.slideshow":["ppsx"],"application/vnd.openxmlformats-officedocument.presentationml.template":["potx"],"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":["xlsx"],"application/vnd.openxmlformats-officedocument.spreadsheetml.template":["xltx"],"application/vnd.openxmlformats-officedocument.wordprocessingml.document":["docx"],"application/vnd.openxmlformats-officedocument.wordprocessingml.template":["dotx"],"application/vnd.osgeo.mapguide.package":["mgp"],"application/vnd.osgi.dp":["dp"],"application/vnd.osgi.subsystem":["esa"],"application/vnd.palm":["pdb","pqa","oprc"],"application/vnd.pawaafile":["paw"],"application/vnd.pg.format":["str"],"application/vnd.pg.osasli":["ei6"],"application/vnd.picsel":["efif"],"application/vnd.pmi.widget":["wg"],"application/vnd.pocketlearn":["plf"],"application/vnd.powerbuilder6":["pbd"],"application/vnd.previewsystems.box":["box"],"application/vnd.proteus.magazine":["mgz"],"application/vnd.publishare-delta-tree":["qps"],"application/vnd.pvi.ptid1":["ptid"],"application/vnd.quark.quarkxpress":["qxd","qxt","qwd","qwt","qxl","qxb"],"application/vnd.realvnc.bed":["bed"],"application/vnd.recordare.musicxml":["mxl"],"application/vnd.recordare.musicxml+xml":["musicxml"],"application/vnd.rig.cryptonote":["cryptonote"],"application/vnd.rim.cod":["cod"],"application/vnd.rn-realmedia":["rm"],"application/vnd.rn-realmedia-vbr":["rmvb"],"application/vnd.route66.link66+xml":["link66"],"application/vnd.sailingtracker.track":["st"],"application/vnd.seemail":["see"],"application/vnd.sema":["sema"],"application/vnd.semd":["semd"],"application/vnd.semf":["semf"],"application/vnd.shana.informed.formdata":["ifm"],"application/vnd.shana.informed.formtemplate":["itp"],"application/vnd.shana.informed.interchange":["iif"],"application/vnd.shana.informed.package":["ipk"],"application/vnd.simtech-mindmapper":["twd","twds"],"application/vnd.smaf":["mmf"],"application/vnd.smart.teacher":["teacher"],"application/vnd.solent.sdkm+xml":["sdkm","sdkd"],"application/vnd.spotfire.dxp":["dxp"],"application/vnd.spotfire.sfs":["sfs"],"application/vnd.stardivision.calc":["sdc"],"application/vnd.stardivision.draw":["sda"],"application/vnd.stardivision.impress":["sdd"],"application/vnd.stardivision.math":["smf"],"application/vnd.stardivision.writer":["sdw","vor"],"application/vnd.stardivision.writer-global":["sgl"],"application/vnd.stepmania.package":["smzip"],"application/vnd.stepmania.stepchart":["sm"],"application/vnd.sun.wadl+xml":["wadl"],"application/vnd.sun.xml.calc":["sxc"],"application/vnd.sun.xml.calc.template":["stc"],"application/vnd.sun.xml.draw":["sxd"],"application/vnd.sun.xml.draw.template":["std"],"application/vnd.sun.xml.impress":["sxi"],"application/vnd.sun.xml.impress.template":["sti"],"application/vnd.sun.xml.math":["sxm"],"application/vnd.sun.xml.writer":["sxw"],"application/vnd.sun.xml.writer.global":["sxg"],"application/vnd.sun.xml.writer.template":["stw"],"application/vnd.sus-calendar":["sus","susp"],"application/vnd.svd":["svd"],"application/vnd.symbian.install":["sis","sisx"],"application/vnd.syncml+xml":["xsm"],"application/vnd.syncml.dm+wbxml":["bdm"],"application/vnd.syncml.dm+xml":["xdm"],"application/vnd.tao.intent-module-archive":["tao"],"application/vnd.tcpdump.pcap":["pcap","cap","dmp"],"application/vnd.tmobile-livetv":["tmo"],"application/vnd.trid.tpt":["tpt"],"application/vnd.triscape.mxs":["mxs"],"application/vnd.trueapp":["tra"],"application/vnd.ufdl":["ufd","ufdl"],"application/vnd.uiq.theme":["utz"],"application/vnd.umajin":["umj"],"application/vnd.unity":["unityweb"],"application/vnd.uoml+xml":["uoml"],"application/vnd.vcx":["vcx"],"application/vnd.visio":["vsd","vst","vss","vsw"],"application/vnd.visionary":["vis"],"application/vnd.vsf":["vsf"],"application/vnd.wap.wbxml":["wbxml"],"application/vnd.wap.wmlc":["wmlc"],"application/vnd.wap.wmlscriptc":["wmlsc"],"application/vnd.webturbo":["wtb"],"application/vnd.wolfram.player":["nbp"],"application/vnd.wordperfect":["wpd"],"application/vnd.wqd":["wqd"],"application/vnd.wt.stf":["stf"],"application/vnd.xara":["xar"],"application/vnd.xfdl":["xfdl"],"application/vnd.yamaha.hv-dic":["hvd"],"application/vnd.yamaha.hv-script":["hvs"],"application/vnd.yamaha.hv-voice":["hvp"],"application/vnd.yamaha.openscoreformat":["osf"],"application/vnd.yamaha.openscoreformat.osfpvg+xml":["osfpvg"],"application/vnd.yamaha.smaf-audio":["saf"],"application/vnd.yamaha.smaf-phrase":["spf"],"application/vnd.yellowriver-custom-menu":["cmp"],"application/vnd.zul":["zir","zirz"],"application/vnd.zzazz.deck+xml":["zaz"],"application/voicexml+xml":["vxml"],"application/wasm":["wasm"],"application/widget":["wgt"],"application/winhlp":["hlp"],"application/wsdl+xml":["wsdl"],"application/wspolicy+xml":["wspolicy"],"application/x-7z-compressed":["7z"],"application/x-abiword":["abw"],"application/x-ace-compressed":["ace"],"application/x-apple-diskimage":[],"application/x-arj":["arj"],"application/x-authorware-bin":["aab","x32","u32","vox"],"application/x-authorware-map":["aam"],"application/x-authorware-seg":["aas"],"application/x-bcpio":["bcpio"],"application/x-bdoc":[],"application/x-bittorrent":["torrent"],"application/x-blorb":["blb","blorb"],"application/x-bzip":["bz"],"application/x-bzip2":["bz2","boz"],"application/x-cbr":["cbr","cba","cbt","cbz","cb7"],"application/x-cdlink":["vcd"],"application/x-cfs-compressed":["cfs"],"application/x-chat":["chat"],"application/x-chess-pgn":["pgn"],"application/x-chrome-extension":["crx"],"application/x-cocoa":["cco"],"application/x-conference":["nsc"],"application/x-cpio":["cpio"],"application/x-csh":["csh"],"application/x-debian-package":["udeb"],"application/x-dgc-compressed":["dgc"],"application/x-director":["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"],"application/x-doom":["wad"],"application/x-dtbncx+xml":["ncx"],"application/x-dtbook+xml":["dtb"],"application/x-dtbresource+xml":["res"],"application/x-dvi":["dvi"],"application/x-envoy":["evy"],"application/x-eva":["eva"],"application/x-font-bdf":["bdf"],"application/x-font-ghostscript":["gsf"],"application/x-font-linux-psf":["psf"],"application/x-font-pcf":["pcf"],"application/x-font-snf":["snf"],"application/x-font-type1":["pfa","pfb","pfm","afm"],"application/x-freearc":["arc"],"application/x-futuresplash":["spl"],"application/x-gca-compressed":["gca"],"application/x-glulx":["ulx"],"application/x-gnumeric":["gnumeric"],"application/x-gramps-xml":["gramps"],"application/x-gtar":["gtar"],"application/x-hdf":["hdf"],"application/x-httpd-php":["php"],"application/x-install-instructions":["install"],"application/x-iso9660-image":[],"application/x-java-archive-diff":["jardiff"],"application/x-java-jnlp-file":["jnlp"],"application/x-latex":["latex"],"application/x-lua-bytecode":["luac"],"application/x-lzh-compressed":["lzh","lha"],"application/x-makeself":["run"],"application/x-mie":["mie"],"application/x-mobipocket-ebook":["prc","mobi"],"application/x-ms-application":["application"],"application/x-ms-shortcut":["lnk"],"application/x-ms-wmd":["wmd"],"application/x-ms-wmz":["wmz"],"application/x-ms-xbap":["xbap"],"application/x-msaccess":["mdb"],"application/x-msbinder":["obd"],"application/x-mscardfile":["crd"],"application/x-msclip":["clp"],"application/x-msdos-program":[],"application/x-msdownload":["com","bat"],"application/x-msmediaview":["mvb","m13","m14"],"application/x-msmetafile":["wmf","emf","emz"],"application/x-msmoney":["mny"],"application/x-mspublisher":["pub"],"application/x-msschedule":["scd"],"application/x-msterminal":["trm"],"application/x-mswrite":["wri"],"application/x-netcdf":["nc","cdf"],"application/x-ns-proxy-autoconfig":["pac"],"application/x-nzb":["nzb"],"application/x-perl":["pl","pm"],"application/x-pilot":[],"application/x-pkcs12":["p12","pfx"],"application/x-pkcs7-certificates":["p7b","spc"],"application/x-pkcs7-certreqresp":["p7r"],"application/x-rar-compressed":["rar"],"application/x-redhat-package-manager":["rpm"],"application/x-research-info-systems":["ris"],"application/x-sea":["sea"],"application/x-sh":["sh"],"application/x-shar":["shar"],"application/x-shockwave-flash":["swf"],"application/x-silverlight-app":["xap"],"application/x-sql":["sql"],"application/x-stuffit":["sit"],"application/x-stuffitx":["sitx"],"application/x-subrip":["srt"],"application/x-sv4cpio":["sv4cpio"],"application/x-sv4crc":["sv4crc"],"application/x-t3vm-image":["t3"],"application/x-tads":["gam"],"application/x-tar":["tar"],"application/x-tcl":["tcl","tk"],"application/x-tex":["tex"],"application/x-tex-tfm":["tfm"],"application/x-texinfo":["texinfo","texi"],"application/x-tgif":["obj"],"application/x-ustar":["ustar"],"application/x-virtualbox-hdd":["hdd"],"application/x-virtualbox-ova":["ova"],"application/x-virtualbox-ovf":["ovf"],"application/x-virtualbox-vbox":["vbox"],"application/x-virtualbox-vbox-extpack":["vbox-extpack"],"application/x-virtualbox-vdi":["vdi"],"application/x-virtualbox-vhd":["vhd"],"application/x-virtualbox-vmdk":["vmdk"],"application/x-wais-source":["src"],"application/x-web-app-manifest+json":["webapp"],"application/x-x509-ca-cert":["der","crt","pem"],"application/x-xfig":["fig"],"application/x-xliff+xml":["xlf"],"application/x-xpinstall":["xpi"],"application/x-xz":["xz"],"application/x-zmachine":["z1","z2","z3","z4","z5","z6","z7","z8"],"application/xaml+xml":["xaml"],"application/xcap-diff+xml":["xdf"],"application/xenc+xml":["xenc"],"application/xhtml+xml":["xhtml","xht"],"application/xml":["xml","xsl","xsd","rng"],"application/xml-dtd":["dtd"],"application/xop+xml":["xop"],"application/xproc+xml":["xpl"],"application/xslt+xml":["xslt"],"application/xspf+xml":["xspf"],"application/xv+xml":["mxml","xhvml","xvml","xvm"],"application/yang":["yang"],"application/yin+xml":["yin"],"application/zip":["zip"],"audio/3gpp":[],"audio/adpcm":["adp"],"audio/basic":["au","snd"],"audio/midi":["mid","midi","kar","rmi"],"audio/mp3":[],"audio/mp4":["m4a","mp4a"],"audio/mpeg":["mpga","mp2","mp2a","mp3","m2a","m3a"],"audio/ogg":["oga","ogg","spx"],"audio/s3m":["s3m"],"audio/silk":["sil"],"audio/vnd.dece.audio":["uva","uvva"],"audio/vnd.digital-winds":["eol"],"audio/vnd.dra":["dra"],"audio/vnd.dts":["dts"],"audio/vnd.dts.hd":["dtshd"],"audio/vnd.lucent.voice":["lvp"],"audio/vnd.ms-playready.media.pya":["pya"],"audio/vnd.nuera.ecelp4800":["ecelp4800"],"audio/vnd.nuera.ecelp7470":["ecelp7470"],"audio/vnd.nuera.ecelp9600":["ecelp9600"],"audio/vnd.rip":["rip"],"audio/wav":["wav"],"audio/wave":[],"audio/webm":["weba"],"audio/x-aac":["aac"],"audio/x-aiff":["aif","aiff","aifc"],"audio/x-caf":["caf"],"audio/x-flac":["flac"],"audio/x-m4a":[],"audio/x-matroska":["mka"],"audio/x-mpegurl":["m3u"],"audio/x-ms-wax":["wax"],"audio/x-ms-wma":["wma"],"audio/x-pn-realaudio":["ram","ra"],"audio/x-pn-realaudio-plugin":["rmp"],"audio/x-realaudio":[],"audio/x-wav":[],"audio/xm":["xm"],"chemical/x-cdx":["cdx"],"chemical/x-cif":["cif"],"chemical/x-cmdf":["cmdf"],"chemical/x-cml":["cml"],"chemical/x-csml":["csml"],"chemical/x-xyz":["xyz"],"font/collection":["ttc"],"font/otf":["otf"],"font/ttf":["ttf"],"font/woff":["woff"],"font/woff2":["woff2"],"image/apng":["apng"],"image/bmp":["bmp"],"image/cgm":["cgm"],"image/g3fax":["g3"],"image/gif":["gif"],"image/ief":["ief"],"image/jp2":["jp2","jpg2"],"image/jpeg":["jpeg","jpg","jpe"],"image/jpm":["jpm"],"image/jpx":["jpx","jpf"],"image/ktx":["ktx"],"image/png":["png"],"image/prs.btif":["btif"],"image/sgi":["sgi"],"image/svg+xml":["svg","svgz"],"image/tiff":["tiff","tif"],"image/vnd.adobe.photoshop":["psd"],"image/vnd.dece.graphic":["uvi","uvvi","uvg","uvvg"],"image/vnd.djvu":["djvu","djv"],"image/vnd.dvb.subtitle":[],"image/vnd.dwg":["dwg"],"image/vnd.dxf":["dxf"],"image/vnd.fastbidsheet":["fbs"],"image/vnd.fpx":["fpx"],"image/vnd.fst":["fst"],"image/vnd.fujixerox.edmics-mmr":["mmr"],"image/vnd.fujixerox.edmics-rlc":["rlc"],"image/vnd.ms-modi":["mdi"],"image/vnd.ms-photo":["wdp"],"image/vnd.net-fpx":["npx"],"image/vnd.wap.wbmp":["wbmp"],"image/vnd.xiff":["xif"],"image/webp":["webp"],"image/x-3ds":["3ds"],"image/x-cmu-raster":["ras"],"image/x-cmx":["cmx"],"image/x-freehand":["fh","fhc","fh4","fh5","fh7"],"image/x-icon":["ico"],"image/x-jng":["jng"],"image/x-mrsid-image":["sid"],"image/x-ms-bmp":[],"image/x-pcx":["pcx"],"image/x-pict":["pic","pct"],"image/x-portable-anymap":["pnm"],"image/x-portable-bitmap":["pbm"],"image/x-portable-graymap":["pgm"],"image/x-portable-pixmap":["ppm"],"image/x-rgb":["rgb"],"image/x-tga":["tga"],"image/x-xbitmap":["xbm"],"image/x-xpixmap":["xpm"],"image/x-xwindowdump":["xwd"],"message/rfc822":["eml","mime"],"model/gltf+json":["gltf"],"model/gltf-binary":["glb"],"model/iges":["igs","iges"],"model/mesh":["msh","mesh","silo"],"model/vnd.collada+xml":["dae"],"model/vnd.dwf":["dwf"],"model/vnd.gdl":["gdl"],"model/vnd.gtw":["gtw"],"model/vnd.mts":["mts"],"model/vnd.vtu":["vtu"],"model/vrml":["wrl","vrml"],"model/x3d+binary":["x3db","x3dbz"],"model/x3d+vrml":["x3dv","x3dvz"],"model/x3d+xml":["x3d","x3dz"],"text/cache-manifest":["appcache","manifest"],"text/calendar":["ics","ifb"],"text/coffeescript":["coffee","litcoffee"],"text/css":["css"],"text/csv":["csv"],"text/hjson":["hjson"],"text/html":["html","htm","shtml"],"text/jade":["jade"],"text/jsx":["jsx"],"text/less":["less"],"text/markdown":["markdown","md"],"text/mathml":["mml"],"text/n3":["n3"],"text/plain":["txt","text","conf","def","list","log","in","ini"],"text/prs.lines.tag":["dsc"],"text/richtext":["rtx"],"text/rtf":[],"text/sgml":["sgml","sgm"],"text/slim":["slim","slm"],"text/stylus":["stylus","styl"],"text/tab-separated-values":["tsv"],"text/troff":["t","tr","roff","man","me","ms"],"text/turtle":["ttl"],"text/uri-list":["uri","uris","urls"],"text/vcard":["vcard"],"text/vnd.curl":["curl"],"text/vnd.curl.dcurl":["dcurl"],"text/vnd.curl.mcurl":["mcurl"],"text/vnd.curl.scurl":["scurl"],"text/vnd.dvb.subtitle":["sub"],"text/vnd.fly":["fly"],"text/vnd.fmi.flexstor":["flx"],"text/vnd.graphviz":["gv"],"text/vnd.in3d.3dml":["3dml"],"text/vnd.in3d.spot":["spot"],"text/vnd.sun.j2me.app-descriptor":["jad"],"text/vnd.wap.wml":["wml"],"text/vnd.wap.wmlscript":["wmls"],"text/vtt":["vtt"],"text/x-asm":["s","asm"],"text/x-c":["c","cc","cxx","cpp","h","hh","dic"],"text/x-component":["htc"],"text/x-fortran":["f","for","f77","f90"],"text/x-handlebars-template":["hbs"],"text/x-java-source":["java"],"text/x-lua":["lua"],"text/x-markdown":["mkd"],"text/x-nfo":["nfo"],"text/x-opml":["opml"],"text/x-org":[],"text/x-pascal":["p","pas"],"text/x-processing":["pde"],"text/x-sass":["sass"],"text/x-scss":["scss"],"text/x-setext":["etx"],"text/x-sfv":["sfv"],"text/x-suse-ymp":["ymp"],"text/x-uuencode":["uu"],"text/x-vcalendar":["vcs"],"text/x-vcard":["vcf"],"text/xml":[],"text/yaml":["yaml","yml"],"video/3gpp":["3gp","3gpp"],"video/3gpp2":["3g2"],"video/h261":["h261"],"video/h263":["h263"],"video/h264":["h264"],"video/jpeg":["jpgv"],"video/jpm":["jpgm"],"video/mj2":["mj2","mjp2"],"video/mp2t":["ts"],"video/mp4":["mp4","mp4v","mpg4"],"video/mpeg":["mpeg","mpg","mpe","m1v","m2v"],"video/ogg":["ogv"],"video/quicktime":["qt","mov"],"video/vnd.dece.hd":["uvh","uvvh"],"video/vnd.dece.mobile":["uvm","uvvm"],"video/vnd.dece.pd":["uvp","uvvp"],"video/vnd.dece.sd":["uvs","uvvs"],"video/vnd.dece.video":["uvv","uvvv"],"video/vnd.dvb.file":["dvb"],"video/vnd.fvt":["fvt"],"video/vnd.mpegurl":["mxu","m4u"],"video/vnd.ms-playready.media.pyv":["pyv"],"video/vnd.uvvu.mp4":["uvu","uvvu"],"video/vnd.vivo":["viv"],"video/webm":["webm"],"video/x-f4v":["f4v"],"video/x-fli":["fli"],"video/x-flv":["flv"],"video/x-m4v":["m4v"],"video/x-matroska":["mkv","mk3d","mks"],"video/x-mng":["mng"],"video/x-ms-asf":["asf","asx"],"video/x-ms-vob":["vob"],"video/x-ms-wm":["wm"],"video/x-ms-wmv":["wmv"],"video/x-ms-wmx":["wmx"],"video/x-ms-wvx":["wvx"],"video/x-msvideo":["avi"],"video/x-sgi-movie":["movie"],"video/x-smv":["smv"],"x-conference/x-cooltalk":["ice"]} \ No newline at end of file diff --git a/node_modules/mixin-deep/LICENSE b/node_modules/mixin-deep/LICENSE deleted file mode 100644 index 99c9369..0000000 --- a/node_modules/mixin-deep/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014-2015, 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/mixin-deep/README.md b/node_modules/mixin-deep/README.md deleted file mode 100644 index 111bde0..0000000 --- a/node_modules/mixin-deep/README.md +++ /dev/null @@ -1,80 +0,0 @@ -# mixin-deep [![NPM version](https://img.shields.io/npm/v/mixin-deep.svg?style=flat)](https://www.npmjs.com/package/mixin-deep) [![NPM monthly downloads](https://img.shields.io/npm/dm/mixin-deep.svg?style=flat)](https://npmjs.org/package/mixin-deep) [![NPM total downloads](https://img.shields.io/npm/dt/mixin-deep.svg?style=flat)](https://npmjs.org/package/mixin-deep) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/mixin-deep.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/mixin-deep) - -> Deeply mix the properties of objects into the first object. Like merge-deep, but doesn't clone. - -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 mixin-deep -``` - -## Usage - -```js -var mixinDeep = require('mixin-deep'); - -mixinDeep({a: {aa: 'aa'}}, {a: {bb: 'bb'}}, {a: {cc: 'cc'}}); -//=> { a: { aa: 'aa', bb: 'bb', cc: 'cc' } } -``` - -## 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: - -* [defaults-deep](https://www.npmjs.com/package/defaults-deep): Like `extend` but recursively copies only the missing properties/values to the target object. | [homepage](https://github.com/jonschlinkert/defaults-deep "Like `extend` but recursively copies only the missing properties/values to the target object.") -* [extend-shallow](https://www.npmjs.com/package/extend-shallow): Extend an object with the properties of additional objects. node.js/javascript util. | [homepage](https://github.com/jonschlinkert/extend-shallow "Extend an object with the properties of additional objects. node.js/javascript util.") -* [merge-deep](https://www.npmjs.com/package/merge-deep): Recursively merge values in a javascript object. | [homepage](https://github.com/jonschlinkert/merge-deep "Recursively merge values in a javascript object.") -* [mixin-object](https://www.npmjs.com/package/mixin-object): Mixin the own and inherited properties of other objects onto the first object. Pass an… [more](https://github.com/jonschlinkert/mixin-object) | [homepage](https://github.com/jonschlinkert/mixin-object "Mixin the own and inherited properties of other objects onto the first object. Pass an empty object as the first arg to shallow clone.") - -### Author - -**Jon Schlinkert** - -* [linkedin/in/jonschlinkert](https://linkedin.com/in/jonschlinkert) -* [github/jonschlinkert](https://github.com/jonschlinkert) -* [twitter/jonschlinkert](https://twitter.com/jonschlinkert) - -### License - -Copyright © 2017, [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 December 09, 2017._ \ No newline at end of file diff --git a/node_modules/mixin-deep/index.js b/node_modules/mixin-deep/index.js deleted file mode 100644 index 47face2..0000000 --- a/node_modules/mixin-deep/index.js +++ /dev/null @@ -1,64 +0,0 @@ -'use strict'; - -var isExtendable = require('is-extendable'); -var forIn = require('for-in'); - -function mixinDeep(target, objects) { - var len = arguments.length, i = 0; - while (++i < len) { - var obj = arguments[i]; - if (isObject(obj)) { - forIn(obj, copy, target); - } - } - return target; -} - -/** - * Copy properties from the source object to the - * target object. - * - * @param {*} `val` - * @param {String} `key` - */ - -function copy(val, key) { - if (!isValidKey(key)) { - return; - } - - var obj = this[key]; - if (isObject(val) && isObject(obj)) { - mixinDeep(obj, val); - } else { - this[key] = val; - } -} - -/** - * Returns true if `val` is an object or function. - * - * @param {any} val - * @return {Boolean} - */ - -function isObject(val) { - return isExtendable(val) && !Array.isArray(val); -} - -/** - * Returns true if `key` is a valid key to use when extending objects. - * - * @param {String} `key` - * @return {Boolean} - */ - -function isValidKey(key) { - return key !== '__proto__' && key !== 'constructor' && key !== 'prototype'; -}; - -/** - * Expose `mixinDeep` - */ - -module.exports = mixinDeep; diff --git a/node_modules/mixin-deep/node_modules/is-extendable/LICENSE b/node_modules/mixin-deep/node_modules/is-extendable/LICENSE deleted file mode 100644 index c0d7f13..0000000 --- a/node_modules/mixin-deep/node_modules/is-extendable/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015-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. \ No newline at end of file diff --git a/node_modules/mixin-deep/node_modules/is-extendable/README.md b/node_modules/mixin-deep/node_modules/is-extendable/README.md deleted file mode 100644 index 875b56a..0000000 --- a/node_modules/mixin-deep/node_modules/is-extendable/README.md +++ /dev/null @@ -1,88 +0,0 @@ -# is-extendable [![NPM version](https://img.shields.io/npm/v/is-extendable.svg?style=flat)](https://www.npmjs.com/package/is-extendable) [![NPM monthly downloads](https://img.shields.io/npm/dm/is-extendable.svg?style=flat)](https://npmjs.org/package/is-extendable) [![NPM total downloads](https://img.shields.io/npm/dt/is-extendable.svg?style=flat)](https://npmjs.org/package/is-extendable) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/is-extendable.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/is-extendable) - -> Returns true if a value is a plain object, array or function. - -## Install - -Install with [npm](https://www.npmjs.com/): - -```sh -$ npm install --save is-extendable -``` - -## Usage - -```js -var isExtendable = require('is-extendable'); -``` - -Returns true if the value is any of the following: - -* array -* plain object -* function - -## Notes - -All objects in JavaScript can have keys, but it's a pain to check for this, since we ether need to verify that the value is not `null` or `undefined` and: - -* the value is not a primitive, or -* that the object is a plain object, function or array - -Also note that an `extendable` object is not the same as an [extensible object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isExtensible), which is one that (in es6) is not sealed, frozen, or marked as non-extensible using `preventExtensions`. - -## Release history - -### v1.0.0 - 2017/07/20 - -**Breaking changes** - -* No longer considers date, regex or error objects to be extendable - -## About - -### Related projects - -* [assign-deep](https://www.npmjs.com/package/assign-deep): Deeply assign the enumerable properties and/or es6 Symbol properies of source objects to the target… [more](https://github.com/jonschlinkert/assign-deep) | [homepage](https://github.com/jonschlinkert/assign-deep "Deeply assign the enumerable properties and/or es6 Symbol properies of source objects to the target (first) object.") -* [is-equal-shallow](https://www.npmjs.com/package/is-equal-shallow): Does a shallow comparison of two objects, returning false if the keys or values differ. | [homepage](https://github.com/jonschlinkert/is-equal-shallow "Does a shallow comparison of two objects, returning false if the keys or values differ.") -* [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.") -* [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.") - -### Contributing - -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). - -### 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 -``` - -### 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 -``` - -### Author - -**Jon Schlinkert** - -* [github/jonschlinkert](https://github.com/jonschlinkert) -* [twitter/jonschlinkert](https://twitter.com/jonschlinkert) - -### License - -Copyright © 2017, [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 July 20, 2017._ \ No newline at end of file diff --git a/node_modules/mixin-deep/node_modules/is-extendable/index.d.ts b/node_modules/mixin-deep/node_modules/is-extendable/index.d.ts deleted file mode 100644 index b96d507..0000000 --- a/node_modules/mixin-deep/node_modules/is-extendable/index.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export = isExtendable; - -declare function isExtendable(val: any): boolean; - -declare namespace isExtendable {} diff --git a/node_modules/mixin-deep/node_modules/is-extendable/index.js b/node_modules/mixin-deep/node_modules/is-extendable/index.js deleted file mode 100644 index a8b26ad..0000000 --- a/node_modules/mixin-deep/node_modules/is-extendable/index.js +++ /dev/null @@ -1,14 +0,0 @@ -/*! - * is-extendable - * - * Copyright (c) 2015-2017, Jon Schlinkert. - * Released under the MIT License. - */ - -'use strict'; - -var isPlainObject = require('is-plain-object'); - -module.exports = function isExtendable(val) { - return isPlainObject(val) || typeof val === 'function' || Array.isArray(val); -}; diff --git a/node_modules/mixin-deep/node_modules/is-extendable/package.json b/node_modules/mixin-deep/node_modules/is-extendable/package.json deleted file mode 100644 index 2aaab65..0000000 --- a/node_modules/mixin-deep/node_modules/is-extendable/package.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "name": "is-extendable", - "description": "Returns true if a value is a plain object, array or function.", - "version": "1.0.1", - "homepage": "https://github.com/jonschlinkert/is-extendable", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "repository": "jonschlinkert/is-extendable", - "bugs": { - "url": "https://github.com/jonschlinkert/is-extendable/issues" - }, - "license": "MIT", - "files": [ - "index.js", - "index.d.ts" - ], - "main": "index.js", - "types": "index.d.ts", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "devDependencies": { - "gulp-format-md": "^1.0.0", - "mocha": "^3.4.2" - }, - "keywords": [ - "array", - "assign", - "check", - "date", - "extend", - "extendable", - "extensible", - "function", - "is", - "object", - "regex", - "test" - ], - "verb": { - "related": { - "list": [ - "assign-deep", - "is-equal-shallow", - "is-plain-object", - "isobject", - "kind-of" - ] - }, - "toc": false, - "layout": "default", - "tasks": [ - "readme" - ], - "plugins": [ - "gulp-format-md" - ], - "lint": { - "reflinks": true - } - } -} diff --git a/node_modules/mixin-deep/package.json b/node_modules/mixin-deep/package.json deleted file mode 100644 index 0581c46..0000000 --- a/node_modules/mixin-deep/package.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "name": "mixin-deep", - "description": "Deeply mix the properties of objects into the first object. Like merge-deep, but doesn't clone.", - "version": "1.3.2", - "homepage": "https://github.com/jonschlinkert/mixin-deep", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "repository": "jonschlinkert/mixin-deep", - "bugs": { - "url": "https://github.com/jonschlinkert/mixin-deep/issues" - }, - "license": "MIT", - "files": [ - "index.js" - ], - "main": "index.js", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "devDependencies": { - "gulp-format-md": "^1.0.0", - "mocha": "^3.5.3", - "should": "^13.1.3" - }, - "keywords": [ - "deep", - "extend", - "key", - "keys", - "merge", - "mixin", - "object", - "prop", - "properties", - "util", - "values" - ], - "verb": { - "toc": false, - "layout": "default", - "tasks": [ - "readme" - ], - "plugins": [ - "gulp-format-md" - ], - "related": { - "list": [ - "defaults-deep", - "extend-shallow", - "merge-deep", - "mixin-object" - ] - }, - "lint": { - "reflinks": true - } - } -} diff --git a/node_modules/morgan/HISTORY.md b/node_modules/morgan/HISTORY.md deleted file mode 100644 index 436db47..0000000 --- a/node_modules/morgan/HISTORY.md +++ /dev/null @@ -1,215 +0,0 @@ -1.10.0 / 2020-03-20 -=================== - - * Add `:total-time` token - * Fix trailing space in colored status code for `dev` format - * deps: basic-auth@~2.0.1 - - deps: safe-buffer@5.1.2 - * deps: depd@~2.0.0 - - Replace internal `eval` usage with `Function` constructor - - Use instance methods on `process` to check for listeners - * deps: on-headers@~1.0.2 - - Fix `res.writeHead` patch missing return value - -1.9.1 / 2018-09-10 -================== - - * Fix using special characters in format - * deps: depd@~1.1.2 - - perf: remove argument reassignment - -1.9.0 / 2017-09-26 -================== - - * Use `res.headersSent` when available - * deps: basic-auth@~2.0.0 - - Use `safe-buffer` for improved Buffer API - * deps: debug@2.6.9 - * deps: depd@~1.1.1 - - Remove unnecessary `Buffer` loading - -1.8.2 / 2017-05-23 -================== - - * deps: debug@2.6.8 - - Fix `DEBUG_MAX_ARRAY_LENGTH` - - deps: ms@2.0.0 - -1.8.1 / 2017-02-04 -================== - - * deps: debug@2.6.1 - - Fix deprecation messages in WebStorm and other editors - - Undeprecate `DEBUG_FD` set to `1` or `2` - -1.8.0 / 2017-02-04 -================== - - * Fix sending unnecessary `undefined` argument to token functions - * deps: basic-auth@~1.1.0 - * deps: debug@2.6.0 - - Allow colors in workers - - Deprecated `DEBUG_FD` environment variable - - Fix error when running under React Native - - Use same color for same namespace - - deps: ms@0.7.2 - * perf: enable strict mode in compiled functions - -1.7.0 / 2016-02-18 -================== - - * Add `digits` argument to `response-time` token - * deps: depd@~1.1.0 - - Enable strict mode in more places - - Support web browser loading - * deps: on-headers@~1.0.1 - - perf: enable strict mode - -1.6.1 / 2015-07-03 -================== - - * deps: basic-auth@~1.0.3 - -1.6.0 / 2015-06-12 -================== - - * Add `morgan.compile(format)` export - * Do not color 1xx status codes in `dev` format - * Fix `response-time` token to not include response latency - * Fix `status` token incorrectly displaying before response in `dev` format - * Fix token return values to be `undefined` or a string - * Improve representation of multiple headers in `req` and `res` tokens - * Use `res.getHeader` in `res` token - * deps: basic-auth@~1.0.2 - - perf: enable strict mode - - perf: hoist regular expression - - perf: parse with regular expressions - - perf: remove argument reassignment - * deps: on-finished@~2.3.0 - - Add defined behavior for HTTP `CONNECT` requests - - Add defined behavior for HTTP `Upgrade` requests - - deps: ee-first@1.1.1 - * pref: enable strict mode - * pref: reduce function closure scopes - * pref: remove dynamic compile on every request for `dev` format - * pref: remove an argument reassignment - * pref: skip function call without `skip` option - -1.5.3 / 2015-05-10 -================== - - * deps: basic-auth@~1.0.1 - * deps: debug@~2.2.0 - - deps: ms@0.7.1 - * deps: depd@~1.0.1 - * deps: on-finished@~2.2.1 - - Fix `isFinished(req)` when data buffered - -1.5.2 / 2015-03-15 -================== - - * deps: debug@~2.1.3 - - Fix high intensity foreground color for bold - - deps: ms@0.7.0 - -1.5.1 / 2014-12-31 -================== - - * deps: debug@~2.1.1 - * deps: on-finished@~2.2.0 - -1.5.0 / 2014-11-06 -================== - - * Add multiple date formats - - `clf` for the common log format - - `iso` for the common ISO 8601 date time format - - `web` for the common RFC 1123 date time format - * Deprecate `buffer` option - * Fix date format in `common` and `combined` formats - * Fix token arguments to accept values with `"` - -1.4.1 / 2014-10-22 -================== - - * deps: on-finished@~2.1.1 - - Fix handling of pipelined requests - -1.4.0 / 2014-10-16 -================== - - * Add `debug` messages - * deps: depd@~1.0.0 - -1.3.2 / 2014-09-27 -================== - - * Fix `req.ip` integration when `immediate: false` - -1.3.1 / 2014-09-14 -================== - - * Remove un-used `bytes` dependency - * deps: depd@0.4.5 - -1.3.0 / 2014-09-01 -================== - - * Assert if `format` is not a function or string - -1.2.3 / 2014-08-16 -================== - - * deps: on-finished@2.1.0 - -1.2.2 / 2014-07-27 -================== - - * deps: depd@0.4.4 - - Work-around v8 generating empty stack traces - -1.2.1 / 2014-07-26 -================== - - * deps: depd@0.4.3 - - Fix exception when global `Error.stackTraceLimit` is too low - -1.2.0 / 2014-07-19 -================== - - * Add `:remote-user` token - * Add `combined` log format - * Add `common` log format - * Add `morgan(format, options)` function signature - * Deprecate `default` format -- use `combined` format instead - * Deprecate not providing a format - * Remove non-standard grey color from `dev` format - -1.1.1 / 2014-05-20 -================== - - * simplify method to get remote address - -1.1.0 / 2014-05-18 -================== - - * "dev" format will use same tokens as other formats - * `:response-time` token is now empty when immediate used - * `:response-time` token is now monotonic - * `:response-time` token has precision to 1 μs - * fix `:status` + immediate output in node.js 0.8 - * improve `buffer` option to prevent indefinite event loop holding - * deps: bytes@1.0.0 - - add negative support - -1.0.1 / 2014-05-04 -================== - - * Make buffer unique per morgan instance - * deps: bytes@0.3.0 - * added terabyte support - -1.0.0 / 2014-02-08 -================== - - * Initial release diff --git a/node_modules/morgan/LICENSE b/node_modules/morgan/LICENSE deleted file mode 100644 index 3fefed9..0000000 --- a/node_modules/morgan/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -(The MIT License) - -Copyright (c) 2014 Jonathan Ong -Copyright (c) 2014-2017 Douglas Christopher Wilson - -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/morgan/README.md b/node_modules/morgan/README.md deleted file mode 100644 index fc1c4b4..0000000 --- a/node_modules/morgan/README.md +++ /dev/null @@ -1,417 +0,0 @@ -# morgan - -[![NPM Version][npm-version-image]][npm-url] -[![NPM Downloads][npm-downloads-image]][npm-url] -[![Build Status][travis-image]][travis-url] -[![Test Coverage][coveralls-image]][coveralls-url] - -HTTP request logger middleware for node.js - -> Named after [Dexter](http://en.wikipedia.org/wiki/Dexter_Morgan), a show you should not watch until completion. - -## API - - - -```js -var morgan = require('morgan') -``` - -### morgan(format, options) - -Create a new morgan logger middleware function using the given `format` and `options`. -The `format` argument may be a string of a predefined name (see below for the names), -a string of a format string, or a function that will produce a log entry. - -The `format` function will be called with three arguments `tokens`, `req`, and `res`, -where `tokens` is an object with all defined tokens, `req` is the HTTP request and `res` -is the HTTP response. The function is expected to return a string that will be the log -line, or `undefined` / `null` to skip logging. - -#### Using a predefined format string - - - -```js -morgan('tiny') -``` - -#### Using format string of predefined tokens - - - -```js -morgan(':method :url :status :res[content-length] - :response-time ms') -``` - -#### Using a custom format function - - - -``` js -morgan(function (tokens, req, res) { - return [ - tokens.method(req, res), - tokens.url(req, res), - tokens.status(req, res), - tokens.res(req, res, 'content-length'), '-', - tokens['response-time'](req, res), 'ms' - ].join(' ') -}) -``` - -#### Options - -Morgan accepts these properties in the options object. - -##### immediate - -Write log line on request instead of response. This means that a requests will -be logged even if the server crashes, _but data from the response (like the -response code, content length, etc.) cannot be logged_. - -##### skip - -Function to determine if logging is skipped, defaults to `false`. This function -will be called as `skip(req, res)`. - - - -```js -// EXAMPLE: only log error responses -morgan('combined', { - skip: function (req, res) { return res.statusCode < 400 } -}) -``` - -##### stream - -Output stream for writing log lines, defaults to `process.stdout`. - -#### Predefined Formats - -There are various pre-defined formats provided: - -##### combined - -Standard Apache combined log output. - -``` -:remote-addr - :remote-user [:date[clf]] ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent" -``` - -##### common - -Standard Apache common log output. - -``` -:remote-addr - :remote-user [:date[clf]] ":method :url HTTP/:http-version" :status :res[content-length] -``` - -##### dev - -Concise output colored by response status for development use. The `:status` -token will be colored green for success codes, red for server error codes, -yellow for client error codes, cyan for redirection codes, and uncolored -for information codes. - -``` -:method :url :status :response-time ms - :res[content-length] -``` - -##### short - -Shorter than default, also including response time. - -``` -:remote-addr :remote-user :method :url HTTP/:http-version :status :res[content-length] - :response-time ms -``` - -##### tiny - -The minimal output. - -``` -:method :url :status :res[content-length] - :response-time ms -``` - -#### Tokens - -##### Creating new tokens - -To define a token, simply invoke `morgan.token()` with the name and a callback function. -This callback function is expected to return a string value. The value returned is then -available as ":type" in this case: - - - -```js -morgan.token('type', function (req, res) { return req.headers['content-type'] }) -``` - -Calling `morgan.token()` using the same name as an existing token will overwrite that -token definition. - -The token function is expected to be called with the arguments `req` and `res`, representing -the HTTP request and HTTP response. Additionally, the token can accept further arguments of -it's choosing to customize behavior. - -##### :date[format] - -The current date and time in UTC. The available formats are: - - - `clf` for the common log format (`"10/Oct/2000:13:55:36 +0000"`) - - `iso` for the common ISO 8601 date time format (`2000-10-10T13:55:36.000Z`) - - `web` for the common RFC 1123 date time format (`Tue, 10 Oct 2000 13:55:36 GMT`) - -If no format is given, then the default is `web`. - -##### :http-version - -The HTTP version of the request. - -##### :method - -The HTTP method of the request. - -##### :referrer - -The Referrer header of the request. This will use the standard mis-spelled Referer header if exists, otherwise Referrer. - -##### :remote-addr - -The remote address of the request. This will use `req.ip`, otherwise the standard `req.connection.remoteAddress` value (socket address). - -##### :remote-user - -The user authenticated as part of Basic auth for the request. - -##### :req[header] - -The given `header` of the request. If the header is not present, the -value will be displayed as `"-"` in the log. - -##### :res[header] - -The given `header` of the response. If the header is not present, the -value will be displayed as `"-"` in the log. - -##### :response-time[digits] - -The time between the request coming into `morgan` and when the response -headers are written, in milliseconds. - -The `digits` argument is a number that specifies the number of digits to -include on the number, defaulting to `3`, which provides microsecond precision. - -##### :status - -The status code of the response. - -If the request/response cycle completes before a response was sent to the -client (for example, the TCP socket closed prematurely by a client aborting -the request), then the status will be empty (displayed as `"-"` in the log). - -##### :total-time[digits] - -The time between the request coming into `morgan` and when the response -has finished being written out to the connection, in milliseconds. - -The `digits` argument is a number that specifies the number of digits to -include on the number, defaulting to `3`, which provides microsecond precision. - -##### :url - -The URL of the request. This will use `req.originalUrl` if exists, otherwise `req.url`. - -##### :user-agent - -The contents of the User-Agent header of the request. - -### morgan.compile(format) - -Compile a format string into a `format` function for use by `morgan`. A format string -is a string that represents a single log line and can utilize token syntax. -Tokens are references by `:token-name`. If tokens accept arguments, they can -be passed using `[]`, for example: `:token-name[pretty]` would pass the string -`'pretty'` as an argument to the token `token-name`. - -The function returned from `morgan.compile` takes three arguments `tokens`, `req`, and -`res`, where `tokens` is object with all defined tokens, `req` is the HTTP request and -`res` is the HTTP response. The function will return a string that will be the log line, -or `undefined` / `null` to skip logging. - -Normally formats are defined using `morgan.format(name, format)`, but for certain -advanced uses, this compile function is directly available. - -## Examples - -### express/connect - -Simple app that will log all request in the Apache combined format to STDOUT - -```js -var express = require('express') -var morgan = require('morgan') - -var app = express() - -app.use(morgan('combined')) - -app.get('/', function (req, res) { - res.send('hello, world!') -}) -``` - -### vanilla http server - -Simple app that will log all request in the Apache combined format to STDOUT - -```js -var finalhandler = require('finalhandler') -var http = require('http') -var morgan = require('morgan') - -// create "middleware" -var logger = morgan('combined') - -http.createServer(function (req, res) { - var done = finalhandler(req, res) - logger(req, res, function (err) { - if (err) return done(err) - - // respond to request - res.setHeader('content-type', 'text/plain') - res.end('hello, world!') - }) -}) -``` - -### write logs to a file - -#### single file - -Simple app that will log all requests in the Apache combined format to the file -`access.log`. - -```js -var express = require('express') -var fs = require('fs') -var morgan = require('morgan') -var path = require('path') - -var app = express() - -// create a write stream (in append mode) -var accessLogStream = fs.createWriteStream(path.join(__dirname, 'access.log'), { flags: 'a' }) - -// setup the logger -app.use(morgan('combined', { stream: accessLogStream })) - -app.get('/', function (req, res) { - res.send('hello, world!') -}) -``` - -#### log file rotation - -Simple app that will log all requests in the Apache combined format to one log -file per day in the `log/` directory using the -[rotating-file-stream module](https://www.npmjs.com/package/rotating-file-stream). - -```js -var express = require('express') -var morgan = require('morgan') -var path = require('path') -var rfs = require('rotating-file-stream') // version 2.x - -var app = express() - -// create a rotating write stream -var accessLogStream = rfs.createStream('access.log', { - interval: '1d', // rotate daily - path: path.join(__dirname, 'log') -}) - -// setup the logger -app.use(morgan('combined', { stream: accessLogStream })) - -app.get('/', function (req, res) { - res.send('hello, world!') -}) -``` - -### split / dual logging - -The `morgan` middleware can be used as many times as needed, enabling -combinations like: - - * Log entry on request and one on response - * Log all requests to file, but errors to console - * ... and more! - -Sample app that will log all requests to a file using Apache format, but -error responses are logged to the console: - -```js -var express = require('express') -var fs = require('fs') -var morgan = require('morgan') -var path = require('path') - -var app = express() - -// log only 4xx and 5xx responses to console -app.use(morgan('dev', { - skip: function (req, res) { return res.statusCode < 400 } -})) - -// log all requests to access.log -app.use(morgan('common', { - stream: fs.createWriteStream(path.join(__dirname, 'access.log'), { flags: 'a' }) -})) - -app.get('/', function (req, res) { - res.send('hello, world!') -}) -``` - -### use custom token formats - -Sample app that will use custom token formats. This adds an ID to all requests and displays it using the `:id` token. - -```js -var express = require('express') -var morgan = require('morgan') -var uuid = require('node-uuid') - -morgan.token('id', function getId (req) { - return req.id -}) - -var app = express() - -app.use(assignId) -app.use(morgan(':id :method :url :response-time')) - -app.get('/', function (req, res) { - res.send('hello, world!') -}) - -function assignId (req, res, next) { - req.id = uuid.v4() - next() -} -``` - -## License - -[MIT](LICENSE) - -[coveralls-image]: https://badgen.net/coveralls/c/github/expressjs/morgan/master -[coveralls-url]: https://coveralls.io/r/expressjs/morgan?branch=master -[npm-downloads-image]: https://badgen.net/npm/dm/morgan -[npm-url]: https://npmjs.org/package/morgan -[npm-version-image]: https://badgen.net/npm/v/morgan -[travis-image]: https://badgen.net/travis/expressjs/morgan/master -[travis-url]: https://travis-ci.org/expressjs/morgan diff --git a/node_modules/morgan/index.js b/node_modules/morgan/index.js deleted file mode 100644 index b33c4f2..0000000 --- a/node_modules/morgan/index.js +++ /dev/null @@ -1,544 +0,0 @@ -/*! - * morgan - * Copyright(c) 2010 Sencha Inc. - * Copyright(c) 2011 TJ Holowaychuk - * Copyright(c) 2014 Jonathan Ong - * Copyright(c) 2014-2017 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict' - -/** - * Module exports. - * @public - */ - -module.exports = morgan -module.exports.compile = compile -module.exports.format = format -module.exports.token = token - -/** - * Module dependencies. - * @private - */ - -var auth = require('basic-auth') -var debug = require('debug')('morgan') -var deprecate = require('depd')('morgan') -var onFinished = require('on-finished') -var onHeaders = require('on-headers') - -/** - * Array of CLF month names. - * @private - */ - -var CLF_MONTH = [ - 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', - 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' -] - -/** - * Default log buffer duration. - * @private - */ - -var DEFAULT_BUFFER_DURATION = 1000 - -/** - * Create a logger middleware. - * - * @public - * @param {String|Function} format - * @param {Object} [options] - * @return {Function} middleware - */ - -function morgan (format, options) { - var fmt = format - var opts = options || {} - - if (format && typeof format === 'object') { - opts = format - fmt = opts.format || 'default' - - // smart deprecation message - deprecate('morgan(options): use morgan(' + (typeof fmt === 'string' ? JSON.stringify(fmt) : 'format') + ', options) instead') - } - - if (fmt === undefined) { - deprecate('undefined format: specify a format') - } - - // output on request instead of response - var immediate = opts.immediate - - // check if log entry should be skipped - var skip = opts.skip || false - - // format function - var formatLine = typeof fmt !== 'function' - ? getFormatFunction(fmt) - : fmt - - // stream - var buffer = opts.buffer - var stream = opts.stream || process.stdout - - // buffering support - if (buffer) { - deprecate('buffer option') - - // flush interval - var interval = typeof buffer !== 'number' - ? DEFAULT_BUFFER_DURATION - : buffer - - // swap the stream - stream = createBufferStream(stream, interval) - } - - return function logger (req, res, next) { - // request data - req._startAt = undefined - req._startTime = undefined - req._remoteAddress = getip(req) - - // response data - res._startAt = undefined - res._startTime = undefined - - // record request start - recordStartTime.call(req) - - function logRequest () { - if (skip !== false && skip(req, res)) { - debug('skip request') - return - } - - var line = formatLine(morgan, req, res) - - if (line == null) { - debug('skip line') - return - } - - debug('log request') - stream.write(line + '\n') - }; - - if (immediate) { - // immediate log - logRequest() - } else { - // record response start - onHeaders(res, recordStartTime) - - // log when response finished - onFinished(res, logRequest) - } - - next() - } -} - -/** - * Apache combined log format. - */ - -morgan.format('combined', ':remote-addr - :remote-user [:date[clf]] ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent"') - -/** - * Apache common log format. - */ - -morgan.format('common', ':remote-addr - :remote-user [:date[clf]] ":method :url HTTP/:http-version" :status :res[content-length]') - -/** - * Default format. - */ - -morgan.format('default', ':remote-addr - :remote-user [:date] ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent"') -deprecate.property(morgan, 'default', 'default format: use combined format') - -/** - * Short format. - */ - -morgan.format('short', ':remote-addr :remote-user :method :url HTTP/:http-version :status :res[content-length] - :response-time ms') - -/** - * Tiny format. - */ - -morgan.format('tiny', ':method :url :status :res[content-length] - :response-time ms') - -/** - * dev (colored) - */ - -morgan.format('dev', function developmentFormatLine (tokens, req, res) { - // get the status code if response written - var status = headersSent(res) - ? res.statusCode - : undefined - - // get status color - var color = status >= 500 ? 31 // red - : status >= 400 ? 33 // yellow - : status >= 300 ? 36 // cyan - : status >= 200 ? 32 // green - : 0 // no color - - // get colored function - var fn = developmentFormatLine[color] - - if (!fn) { - // compile - fn = developmentFormatLine[color] = compile('\x1b[0m:method :url \x1b[' + - color + 'm:status\x1b[0m :response-time ms - :res[content-length]\x1b[0m') - } - - return fn(tokens, req, res) -}) - -/** - * request url - */ - -morgan.token('url', function getUrlToken (req) { - return req.originalUrl || req.url -}) - -/** - * request method - */ - -morgan.token('method', function getMethodToken (req) { - return req.method -}) - -/** - * response time in milliseconds - */ - -morgan.token('response-time', function getResponseTimeToken (req, res, digits) { - if (!req._startAt || !res._startAt) { - // missing request and/or response start time - return - } - - // calculate diff - var ms = (res._startAt[0] - req._startAt[0]) * 1e3 + - (res._startAt[1] - req._startAt[1]) * 1e-6 - - // return truncated value - return ms.toFixed(digits === undefined ? 3 : digits) -}) - -/** - * total time in milliseconds - */ - -morgan.token('total-time', function getTotalTimeToken (req, res, digits) { - if (!req._startAt || !res._startAt) { - // missing request and/or response start time - return - } - - // time elapsed from request start - var elapsed = process.hrtime(req._startAt) - - // cover to milliseconds - var ms = (elapsed[0] * 1e3) + (elapsed[1] * 1e-6) - - // return truncated value - return ms.toFixed(digits === undefined ? 3 : digits) -}) - -/** - * current date - */ - -morgan.token('date', function getDateToken (req, res, format) { - var date = new Date() - - switch (format || 'web') { - case 'clf': - return clfdate(date) - case 'iso': - return date.toISOString() - case 'web': - return date.toUTCString() - } -}) - -/** - * response status code - */ - -morgan.token('status', function getStatusToken (req, res) { - return headersSent(res) - ? String(res.statusCode) - : undefined -}) - -/** - * normalized referrer - */ - -morgan.token('referrer', function getReferrerToken (req) { - return req.headers.referer || req.headers.referrer -}) - -/** - * remote address - */ - -morgan.token('remote-addr', getip) - -/** - * remote user - */ - -morgan.token('remote-user', function getRemoteUserToken (req) { - // parse basic credentials - var credentials = auth(req) - - // return username - return credentials - ? credentials.name - : undefined -}) - -/** - * HTTP version - */ - -morgan.token('http-version', function getHttpVersionToken (req) { - return req.httpVersionMajor + '.' + req.httpVersionMinor -}) - -/** - * UA string - */ - -morgan.token('user-agent', function getUserAgentToken (req) { - return req.headers['user-agent'] -}) - -/** - * request header - */ - -morgan.token('req', function getRequestToken (req, res, field) { - // get header - var header = req.headers[field.toLowerCase()] - - return Array.isArray(header) - ? header.join(', ') - : header -}) - -/** - * response header - */ - -morgan.token('res', function getResponseHeader (req, res, field) { - if (!headersSent(res)) { - return undefined - } - - // get header - var header = res.getHeader(field) - - return Array.isArray(header) - ? header.join(', ') - : header -}) - -/** - * Format a Date in the common log format. - * - * @private - * @param {Date} dateTime - * @return {string} - */ - -function clfdate (dateTime) { - var date = dateTime.getUTCDate() - var hour = dateTime.getUTCHours() - var mins = dateTime.getUTCMinutes() - var secs = dateTime.getUTCSeconds() - var year = dateTime.getUTCFullYear() - - var month = CLF_MONTH[dateTime.getUTCMonth()] - - return pad2(date) + '/' + month + '/' + year + - ':' + pad2(hour) + ':' + pad2(mins) + ':' + pad2(secs) + - ' +0000' -} - -/** - * Compile a format string into a function. - * - * @param {string} format - * @return {function} - * @public - */ - -function compile (format) { - if (typeof format !== 'string') { - throw new TypeError('argument format must be a string') - } - - var fmt = String(JSON.stringify(format)) - var js = ' "use strict"\n return ' + fmt.replace(/:([-\w]{2,})(?:\[([^\]]+)\])?/g, function (_, name, arg) { - var tokenArguments = 'req, res' - var tokenFunction = 'tokens[' + String(JSON.stringify(name)) + ']' - - if (arg !== undefined) { - tokenArguments += ', ' + String(JSON.stringify(arg)) - } - - return '" +\n (' + tokenFunction + '(' + tokenArguments + ') || "-") + "' - }) - - // eslint-disable-next-line no-new-func - return new Function('tokens, req, res', js) -} - -/** - * Create a basic buffering stream. - * - * @param {object} stream - * @param {number} interval - * @public - */ - -function createBufferStream (stream, interval) { - var buf = [] - var timer = null - - // flush function - function flush () { - timer = null - stream.write(buf.join('')) - buf.length = 0 - } - - // write function - function write (str) { - if (timer === null) { - timer = setTimeout(flush, interval) - } - - buf.push(str) - } - - // return a minimal "stream" - return { write: write } -} - -/** - * Define a format with the given name. - * - * @param {string} name - * @param {string|function} fmt - * @public - */ - -function format (name, fmt) { - morgan[name] = fmt - return this -} - -/** - * Lookup and compile a named format function. - * - * @param {string} name - * @return {function} - * @public - */ - -function getFormatFunction (name) { - // lookup format - var fmt = morgan[name] || name || morgan.default - - // return compiled format - return typeof fmt !== 'function' - ? compile(fmt) - : fmt -} - -/** - * Get request IP address. - * - * @private - * @param {IncomingMessage} req - * @return {string} - */ - -function getip (req) { - return req.ip || - req._remoteAddress || - (req.connection && req.connection.remoteAddress) || - undefined -} - -/** - * Determine if the response headers have been sent. - * - * @param {object} res - * @returns {boolean} - * @private - */ - -function headersSent (res) { - // istanbul ignore next: node.js 0.8 support - return typeof res.headersSent !== 'boolean' - ? Boolean(res._header) - : res.headersSent -} - -/** - * Pad number to two digits. - * - * @private - * @param {number} num - * @return {string} - */ - -function pad2 (num) { - var str = String(num) - - // istanbul ignore next: num is current datetime - return (str.length === 1 ? '0' : '') + str -} - -/** - * Record the start time. - * @private - */ - -function recordStartTime () { - this._startAt = process.hrtime() - this._startTime = new Date() -} - -/** - * Define a token function with the given name, - * and callback fn(req, res). - * - * @param {string} name - * @param {function} fn - * @public - */ - -function token (name, fn) { - morgan[name] = fn - return this -} diff --git a/node_modules/morgan/package.json b/node_modules/morgan/package.json deleted file mode 100644 index b25a647..0000000 --- a/node_modules/morgan/package.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "name": "morgan", - "description": "HTTP request logger middleware for node.js", - "version": "1.10.0", - "contributors": [ - "Douglas Christopher Wilson ", - "Jonathan Ong (http://jongleberry.com)" - ], - "license": "MIT", - "keywords": [ - "express", - "http", - "logger", - "middleware" - ], - "repository": "expressjs/morgan", - "dependencies": { - "basic-auth": "~2.0.1", - "debug": "2.6.9", - "depd": "~2.0.0", - "on-finished": "~2.3.0", - "on-headers": "~1.0.2" - }, - "devDependencies": { - "eslint": "6.8.0", - "eslint-config-standard": "14.1.0", - "eslint-plugin-import": "2.20.1", - "eslint-plugin-markdown": "1.0.2", - "eslint-plugin-node": "9.2.0", - "eslint-plugin-promise": "4.2.1", - "eslint-plugin-standard": "4.0.1", - "mocha": "7.1.1", - "nyc": "15.0.0", - "split": "1.0.1", - "supertest": "4.0.2" - }, - "files": [ - "LICENSE", - "HISTORY.md", - "README.md", - "index.js" - ], - "engines": { - "node": ">= 0.8.0" - }, - "scripts": { - "lint": "eslint --plugin markdown --ext js,md .", - "test": "mocha --check-leaks --reporter spec --bail", - "test-ci": "nyc --reporter=text npm test", - "test-cov": "nyc --reporter=html --reporter=text npm test" - } -} diff --git a/node_modules/ms/index.js b/node_modules/ms/index.js deleted file mode 100644 index 6a522b1..0000000 --- a/node_modules/ms/index.js +++ /dev/null @@ -1,152 +0,0 @@ -/** - * Helpers. - */ - -var s = 1000; -var m = s * 60; -var h = m * 60; -var d = h * 24; -var y = d * 365.25; - -/** - * Parse or format the given `val`. - * - * Options: - * - * - `long` verbose formatting [false] - * - * @param {String|Number} val - * @param {Object} [options] - * @throws {Error} throw an error if val is not a non-empty string or a number - * @return {String|Number} - * @api public - */ - -module.exports = function(val, options) { - options = options || {}; - var type = typeof val; - if (type === 'string' && val.length > 0) { - return parse(val); - } else if (type === 'number' && isNaN(val) === false) { - return options.long ? fmtLong(val) : fmtShort(val); - } - throw new Error( - 'val is not a non-empty string or a valid number. val=' + - JSON.stringify(val) - ); -}; - -/** - * Parse the given `str` and return milliseconds. - * - * @param {String} str - * @return {Number} - * @api private - */ - -function parse(str) { - str = String(str); - if (str.length > 100) { - return; - } - var match = /^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec( - str - ); - if (!match) { - return; - } - var n = parseFloat(match[1]); - var type = (match[2] || 'ms').toLowerCase(); - switch (type) { - case 'years': - case 'year': - case 'yrs': - case 'yr': - case 'y': - return n * y; - case 'days': - case 'day': - case 'd': - return n * d; - case 'hours': - case 'hour': - case 'hrs': - case 'hr': - case 'h': - return n * h; - case 'minutes': - case 'minute': - case 'mins': - case 'min': - case 'm': - return n * m; - case 'seconds': - case 'second': - case 'secs': - case 'sec': - case 's': - return n * s; - case 'milliseconds': - case 'millisecond': - case 'msecs': - case 'msec': - case 'ms': - return n; - default: - return undefined; - } -} - -/** - * Short format for `ms`. - * - * @param {Number} ms - * @return {String} - * @api private - */ - -function fmtShort(ms) { - if (ms >= d) { - return Math.round(ms / d) + 'd'; - } - if (ms >= h) { - return Math.round(ms / h) + 'h'; - } - if (ms >= m) { - return Math.round(ms / m) + 'm'; - } - if (ms >= s) { - return Math.round(ms / s) + 's'; - } - return ms + 'ms'; -} - -/** - * Long format for `ms`. - * - * @param {Number} ms - * @return {String} - * @api private - */ - -function fmtLong(ms) { - return plural(ms, d, 'day') || - plural(ms, h, 'hour') || - plural(ms, m, 'minute') || - plural(ms, s, 'second') || - ms + ' ms'; -} - -/** - * Pluralization helper. - */ - -function plural(ms, n, name) { - if (ms < n) { - return; - } - if (ms < n * 1.5) { - return Math.floor(ms / n) + ' ' + name; - } - return Math.ceil(ms / n) + ' ' + name + 's'; -} diff --git a/node_modules/ms/license.md b/node_modules/ms/license.md deleted file mode 100644 index 69b6125..0000000 --- a/node_modules/ms/license.md +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 Zeit, 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. diff --git a/node_modules/ms/package.json b/node_modules/ms/package.json deleted file mode 100644 index 6a31c81..0000000 --- a/node_modules/ms/package.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "ms", - "version": "2.0.0", - "description": "Tiny milisecond conversion utility", - "repository": "zeit/ms", - "main": "./index", - "files": [ - "index.js" - ], - "scripts": { - "precommit": "lint-staged", - "lint": "eslint lib/* bin/*", - "test": "mocha tests.js" - }, - "eslintConfig": { - "extends": "eslint:recommended", - "env": { - "node": true, - "es6": true - } - }, - "lint-staged": { - "*.js": [ - "npm run lint", - "prettier --single-quote --write", - "git add" - ] - }, - "license": "MIT", - "devDependencies": { - "eslint": "3.19.0", - "expect.js": "0.3.1", - "husky": "0.13.3", - "lint-staged": "3.4.1", - "mocha": "3.4.1" - } -} diff --git a/node_modules/ms/readme.md b/node_modules/ms/readme.md deleted file mode 100644 index 84a9974..0000000 --- a/node_modules/ms/readme.md +++ /dev/null @@ -1,51 +0,0 @@ -# ms - -[![Build Status](https://travis-ci.org/zeit/ms.svg?branch=master)](https://travis-ci.org/zeit/ms) -[![Slack Channel](http://zeit-slackin.now.sh/badge.svg)](https://zeit.chat/) - -Use this package to easily convert various time formats to milliseconds. - -## Examples - -```js -ms('2 days') // 172800000 -ms('1d') // 86400000 -ms('10h') // 36000000 -ms('2.5 hrs') // 9000000 -ms('2h') // 7200000 -ms('1m') // 60000 -ms('5s') // 5000 -ms('1y') // 31557600000 -ms('100') // 100 -``` - -### Convert from milliseconds - -```js -ms(60000) // "1m" -ms(2 * 60000) // "2m" -ms(ms('10 hours')) // "10h" -``` - -### Time format written-out - -```js -ms(60000, { long: true }) // "1 minute" -ms(2 * 60000, { long: true }) // "2 minutes" -ms(ms('10 hours'), { long: true }) // "10 hours" -``` - -## Features - -- Works both in [node](https://nodejs.org) and in the browser. -- If a number is supplied to `ms`, a string with a unit is returned. -- If a string that contains the number is supplied, it returns it as a number (e.g.: it returns `100` for `'100'`). -- If you pass a string with a number and a valid unit, the number of equivalent ms is returned. - -## Caught a bug? - -1. [Fork](https://help.github.com/articles/fork-a-repo/) this repository to your own GitHub account and then [clone](https://help.github.com/articles/cloning-a-repository/) it to your local device -2. Link the package to the global module directory: `npm link` -3. Within the module you want to test your local development instance of ms, just link it to the dependencies: `npm link ms`. Instead of the default one from npm, node will now use your clone of ms! - -As always, you can run the tests using: `npm test` diff --git a/node_modules/nanomatch/CHANGELOG.md b/node_modules/nanomatch/CHANGELOG.md deleted file mode 100644 index 8c3aead..0000000 --- a/node_modules/nanomatch/CHANGELOG.md +++ /dev/null @@ -1,57 +0,0 @@ -## History - -### key - -Changelog entries are classified using the following labels _(from [keep-a-changelog][]_): - -- `added`: for new features -- `changed`: for changes in existing functionality -- `deprecated`: for once-stable features removed in upcoming releases -- `removed`: for deprecated features removed in this release -- `fixed`: for any bug fixes -- `bumped`: updated dependencies, only minor or higher will be listed. - -### [1.1.0] - 2017-04-11 - -**Fixed** - -- adds support for unclosed quotes - -**Added** - -- adds support for `options.noglobstar` - -### [1.0.4] - 2017-04-06 - -Housekeeping updates. Adds documentation section about escaping, cleans up utils. - -### [1.0.3] - 2017-04-06 - -This release includes fixes for windows path edge cases and other improvements for stricter adherence to bash spec. - -**Fixed** - -- More windows path edge cases - -**Added** - -- Support for bash-like quoted strings for escaping sequences of characters, such as `foo/"**"/bar` where `**` should be matched literally and not evaluated as special characters. - -### [1.0.1] - 2016-12-12 - -**Added** - -- Support for windows path edge cases where backslashes are used in brackets or other unusual combinations. - -### [1.0.0] - 2016-12-12 - -Stable release. - -### [0.1.0] - 2016-10-08 - -First release. - -[Unreleased]: https://github.com/jonschlinkert/nanomatch/compare/0.1.0...HEAD -[0.2.0]: https://github.com/jonschlinkert/nanomatch/compare/0.1.0...0.2.0 - -[keep-a-changelog]: https://github.com/olivierlacan/keep-a-changelog diff --git a/node_modules/nanomatch/LICENSE b/node_modules/nanomatch/LICENSE deleted file mode 100644 index 7c9987b..0000000 --- a/node_modules/nanomatch/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016-2018, 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/nanomatch/README.md b/node_modules/nanomatch/README.md deleted file mode 100644 index bdd35a9..0000000 --- a/node_modules/nanomatch/README.md +++ /dev/null @@ -1,1148 +0,0 @@ -# nanomatch [![NPM version](https://img.shields.io/npm/v/nanomatch.svg?style=flat)](https://www.npmjs.com/package/nanomatch) [![NPM monthly downloads](https://img.shields.io/npm/dm/nanomatch.svg?style=flat)](https://npmjs.org/package/nanomatch) [![NPM total downloads](https://img.shields.io/npm/dt/nanomatch.svg?style=flat)](https://npmjs.org/package/nanomatch) [![Linux Build Status](https://img.shields.io/travis/micromatch/nanomatch.svg?style=flat&label=Travis)](https://travis-ci.org/micromatch/nanomatch) [![Windows Build Status](https://img.shields.io/appveyor/ci/micromatch/nanomatch.svg?style=flat&label=AppVeyor)](https://ci.appveyor.com/project/micromatch/nanomatch) - -> Fast, minimal glob matcher for node.js. Similar to micromatch, minimatch and multimatch, but complete Bash 4.3 wildcard support only (no support for exglobs, posix brackets or braces) - -Please consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support. - -## Table of Contents - -
    -Details - -- [Install](#install) -- [What is nanomatch?](#what-is-nanomatch) -- [Getting started](#getting-started) - * [Installing nanomatch](#installing-nanomatch) - * [Usage](#usage) -- [Documentation](#documentation) - * [Escaping](#escaping) -- [API](#api) -- [Options](#options) - * [options.basename](#optionsbasename) - * [options.bash](#optionsbash) - * [options.cache](#optionscache) - * [options.dot](#optionsdot) - * [options.failglob](#optionsfailglob) - * [options.ignore](#optionsignore) - * [options.matchBase](#optionsmatchbase) - * [options.nocase](#optionsnocase) - * [options.nodupes](#optionsnodupes) - * [options.noglobstar](#optionsnoglobstar) - * [options.nonegate](#optionsnonegate) - * [options.nonull](#optionsnonull) - * [options.nullglob](#optionsnullglob) - * [options.slash](#optionsslash) - * [options.star](#optionsstar) - * [options.snapdragon](#optionssnapdragon) - * [options.sourcemap](#optionssourcemap) - * [options.unescape](#optionsunescape) - * [options.unixify](#optionsunixify) -- [Features](#features) -- [Bash expansion libs](#bash-expansion-libs) -- [Benchmarks](#benchmarks) - * [Running benchmarks](#running-benchmarks) - * [Nanomatch vs. Minimatch vs. Multimatch](#nanomatch-vs-minimatch-vs-multimatch) -- [About](#about) - -
    - -## Install - -Install with [npm](https://www.npmjs.com/): - -```sh -$ npm install --save nanomatch -``` - -
    -Release history - -## History - -### key - -Changelog entries are classified using the following labels _(from [keep-a-changelog](https://github.com/olivierlacan/keep-a-changelog)_): - -* `added`: for new features -* `changed`: for changes in existing functionality -* `deprecated`: for once-stable features removed in upcoming releases -* `removed`: for deprecated features removed in this release -* `fixed`: for any bug fixes -* `bumped`: updated dependencies, only minor or higher will be listed. - -### [1.1.0](https://github.com/micromatch/nanomatch/compare/1.0.4...1.1.0) - 2017-04-11 - -**Fixed** - -* adds support for unclosed quotes - -**Added** - -* adds support for `options.noglobstar` - -### [1.0.4](https://github.com/micromatch/nanomatch/compare/1.0.3...1.0.4) - 2017-04-06 - -Housekeeping updates. Adds documentation section about escaping, cleans up utils. - -### [1.0.3](https://github.com/micromatch/nanomatch/compare/1.0.1...1.0.3) - 2017-04-06 - -This release includes fixes for windows path edge cases and other improvements for stricter adherence to bash spec. - -**Fixed** - -* More windows path edge cases - -**Added** - -* Support for bash-like quoted strings for escaping sequences of characters, such as `foo/"**"/bar` where `**` should be matched literally and not evaluated as special characters. - -### [1.0.1](https://github.com/micromatch/nanomatch/compare/1.0.0...1.0.1) - 2016-12-12 - -**Added** - -* Support for windows path edge cases where backslashes are used in brackets or other unusual combinations. - -### [1.0.0](https://github.com/micromatch/nanomatch/compare/0.1.0...1.0.0) - 2016-12-12 - -Stable release. - -### [0.1.0] - 2016-10-08 - -First release. - -
    - -## What is nanomatch? - -Nanomatch is a fast and accurate glob matcher with full support for standard Bash glob features, including the following "metacharacters": `*`, `**`, `?` and `[...]`. - -**Learn more** - -* [Getting started](#getting-started): learn how to install and begin using nanomatch -* [Features](#features): jump to info about supported patterns, and a glob matching reference -* [API documentation](#api): jump to available options and methods -* [Unit tests](test): visit unit tests. there is no better way to learn a code library than spending time the unit tests. Nanomatch has 36,000 unit tests - go become a glob matching ninja! - -
    -How is this different? - -**Speed and accuracy** - -Nanomatch uses [snapdragon](https://github.com/jonschlinkert/snapdragon) for parsing and compiling globs, which results in: - -* Granular control over the entire conversion process in a way that is easy to understand, reason about, and customize. -* Faster matching, from a combination of optimized glob patterns and (optional) caching. -* Much greater accuracy than minimatch. In fact, nanomatch passes _all of the spec tests_ from bash, including some that bash still fails. However, since there is no real specification for globs, if you encounter a pattern that yields unexpected match results [after researching previous issues](../../issues), [please let us know](../../issues/new). - -**Basic globbing only** - -Nanomatch supports [basic globbing only](#features), which is limited to `*`, `**`, `?` and regex-like brackets. - -If you need support for the other [bash "expansion" types](#bash-expansion-libs) (in addition to the wildcard matching provided by nanomatch), consider using [micromatch](https://github.com/micromatch/micromatch) instead. _(micromatch >=3.0.0 uses the nanomatch parser and compiler for basic glob matching)_ - -
    - -## Getting started - -### Installing nanomatch - -**Install with [yarn](https://yarnpkg.com/)** - -```sh -$ yarn add nanomatch -``` - -**Install with [npm](https://npmjs.com)** - -```sh -$ npm install nanomatch -``` - -### Usage - -Add nanomatch to your project using node's `require()` system: - -```js -var nanomatch = require('nanomatch'); - -// the main export is a function that takes an array of strings to match -// and a string or array of patterns to use for matching -nanomatch(list, patterns[, options]); -``` - -**Params** - -* `list` **{String|Array}**: List of strings to perform matches against. This is often a list of file paths. -* `patterns` **{String|Array}**: One or more [glob paterns](#features) to use for matching. -* `options` **{Object}**: Any [supported options](#options) may be passed - -**Examples** - -```js -var nm = require('nanomatch'); -console.log(nm(['a', 'b/b', 'c/c/c'], '*')); -//=> ['a'] - -console.log(nm(['a', 'b/b', 'c/c/c'], '*/*')); -//=> ['b/b'] - -console.log(nm(['a', 'b/b', 'c/c/c'], '**')); -//=> ['a', 'b/b', 'c/c/c'] -``` - -See the [API documentation](#api) for available methods and [options](https://github.com/einaros/options.js). - -## Documentation - -### Escaping - -_Backslashes and quotes_ can be used to escape characters, forcing nanomatch to regard those characters as a literal characters. - -**Backslashes** - -Use backslashes to escape single characters. For example, the following pattern would match `foo/*/bar` exactly: - -```js -'foo/\*/bar' -``` - -The following pattern would match `foo/` followed by a literal `*`, followed by zero or more of any characters besides `/`, followed by `/bar`. - -```js -'foo/\**/bar' -``` - -**Quoted strings** - -Use single or double quotes to escape sequences of characters. For example, the following patterns would match `foo/**/bar` exactly: - -```js -'foo/"**"/bar' -'foo/\'**\'/bar' -"foo/'**'/bar" -``` - -**Matching literal quotes** - -If you need to match quotes literally, you can escape them as well. For example, the following will match `foo/"*"/bar`, `foo/"a"/bar`, `foo/"b"/bar`, or `foo/"c"/bar`: - -```js -'foo/\\"*\\"/bar' -``` - -And the following will match `foo/'*'/bar`, `foo/'a'/bar`, `foo/'b'/bar`, or `foo/'c'/bar`: - -```js -'foo/\\\'*\\\'/bar' -``` - -## API - -### [nanomatch](index.js#L40) - -The main function takes a list of strings and one or more glob patterns to use for matching. - -**Params** - -* `list` **{Array}**: A list of strings to match -* `patterns` **{String|Array}**: One or more glob patterns to use for matching. -* `options` **{Object}**: See available [options](#options) for changing how matches are performed -* `returns` **{Array}**: Returns an array of matches - -**Example** - -```js -var nm = require('nanomatch'); -nm(list, patterns[, options]); - -console.log(nm(['a.js', 'a.txt'], ['*.js'])); -//=> [ 'a.js' ] -``` - -### [.match](index.js#L106) - -Similar to the main function, but `pattern` must be a string. - -**Params** - -* `list` **{Array}**: Array of strings to match -* `pattern` **{String}**: Glob pattern to use for matching. -* `options` **{Object}**: See available [options](#options) for changing how matches are performed -* `returns` **{Array}**: Returns an array of matches - -**Example** - -```js -var nm = require('nanomatch'); -nm.match(list, pattern[, options]); - -console.log(nm.match(['a.a', 'a.aa', 'a.b', 'a.c'], '*.a')); -//=> ['a.a', 'a.aa'] -``` - -### [.isMatch](index.js#L167) - -Returns true if the specified `string` matches the given glob `pattern`. - -**Params** - -* `string` **{String}**: String to match -* `pattern` **{String}**: Glob pattern to use for matching. -* `options` **{Object}**: See available [options](#options) for changing how matches are performed -* `returns` **{Boolean}**: Returns true if the string matches the glob pattern. - -**Example** - -```js -var nm = require('nanomatch'); -nm.isMatch(string, pattern[, options]); - -console.log(nm.isMatch('a.a', '*.a')); -//=> true -console.log(nm.isMatch('a.b', '*.a')); -//=> false -``` - -### [.some](index.js#L205) - -Returns true if some of the elements in the given `list` match any of the given glob `patterns`. - -**Params** - -* `list` **{String|Array}**: The string or array of strings to test. Returns as soon as the first match is found. -* `patterns` **{String|Array}**: One or more glob patterns to use for matching. -* `options` **{Object}**: See available [options](#options) for changing how matches are performed -* `returns` **{Boolean}**: Returns true if any patterns match `str` - -**Example** - -```js -var nm = require('nanomatch'); -nm.some(list, patterns[, options]); - -console.log(nm.some(['foo.js', 'bar.js'], ['*.js', '!foo.js'])); -// true -console.log(nm.some(['foo.js'], ['*.js', '!foo.js'])); -// false -``` - -### [.every](index.js#L243) - -Returns true if every element in the given `list` matches at least one of the given glob `patterns`. - -**Params** - -* `list` **{String|Array}**: The string or array of strings to test. -* `patterns` **{String|Array}**: One or more glob patterns to use for matching. -* `options` **{Object}**: See available [options](#options) for changing how matches are performed -* `returns` **{Boolean}**: Returns true if any patterns match `str` - -**Example** - -```js -var nm = require('nanomatch'); -nm.every(list, patterns[, options]); - -console.log(nm.every('foo.js', ['foo.js'])); -// true -console.log(nm.every(['foo.js', 'bar.js'], ['*.js'])); -// true -console.log(nm.every(['foo.js', 'bar.js'], ['*.js', '!foo.js'])); -// false -console.log(nm.every(['foo.js'], ['*.js', '!foo.js'])); -// false -``` - -### [.any](index.js#L277) - -Returns true if **any** of the given glob `patterns` match the specified `string`. - -**Params** - -* `str` **{String|Array}**: The string to test. -* `patterns` **{String|Array}**: One or more glob patterns to use for matching. -* `options` **{Object}**: See available [options](#options) for changing how matches are performed -* `returns` **{Boolean}**: Returns true if any patterns match `str` - -**Example** - -```js -var nm = require('nanomatch'); -nm.any(string, patterns[, options]); - -console.log(nm.any('a.a', ['b.*', '*.a'])); -//=> true -console.log(nm.any('a.a', 'b.*')); -//=> false -``` - -### [.all](index.js#L325) - -Returns true if **all** of the given `patterns` match the specified string. - -**Params** - -* `str` **{String|Array}**: The string to test. -* `patterns` **{String|Array}**: One or more glob patterns to use for matching. -* `options` **{Object}**: See available [options](#options) for changing how matches are performed -* `returns` **{Boolean}**: Returns true if any patterns match `str` - -**Example** - -```js -var nm = require('nanomatch'); -nm.all(string, patterns[, options]); - -console.log(nm.all('foo.js', ['foo.js'])); -// true - -console.log(nm.all('foo.js', ['*.js', '!foo.js'])); -// false - -console.log(nm.all('foo.js', ['*.js', 'foo.js'])); -// true - -console.log(nm.all('foo.js', ['*.js', 'f*', '*o*', '*o.js'])); -// true -``` - -### [.not](index.js#L359) - -Returns a list of strings that _**do not match any**_ of the given `patterns`. - -**Params** - -* `list` **{Array}**: Array of strings to match. -* `patterns` **{String|Array}**: One or more glob pattern to use for matching. -* `options` **{Object}**: See available [options](#options) for changing how matches are performed -* `returns` **{Array}**: Returns an array of strings that **do not match** the given patterns. - -**Example** - -```js -var nm = require('nanomatch'); -nm.not(list, patterns[, options]); - -console.log(nm.not(['a.a', 'b.b', 'c.c'], '*.a')); -//=> ['b.b', 'c.c'] -``` - -### [.contains](index.js#L394) - -Returns true if the given `string` contains the given pattern. Similar to [.isMatch](#isMatch) but the pattern can match any part of the string. - -**Params** - -* `str` **{String}**: The string to match. -* `patterns` **{String|Array}**: Glob pattern to use for matching. -* `options` **{Object}**: See available [options](#options) for changing how matches are performed -* `returns` **{Boolean}**: Returns true if the patter matches any part of `str`. - -**Example** - -```js -var nm = require('nanomatch'); -nm.contains(string, pattern[, options]); - -console.log(nm.contains('aa/bb/cc', '*b')); -//=> true -console.log(nm.contains('aa/bb/cc', '*d')); -//=> false -``` - -### [.matchKeys](index.js#L450) - -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](https://github.com/jonschlinkert/glob-object) instead. - -**Params** - -* `object` **{Object}**: The object with keys to filter. -* `patterns` **{String|Array}**: One or more glob patterns to use for matching. -* `options` **{Object}**: See available [options](#options) for changing how matches are performed -* `returns` **{Object}**: Returns an object with only keys that match the given patterns. - -**Example** - -```js -var nm = require('nanomatch'); -nm.matchKeys(object, patterns[, options]); - -var obj = { aa: 'a', ab: 'b', ac: 'c' }; -console.log(nm.matchKeys(obj, '*b')); -//=> { ab: 'b' } -``` - -### [.matcher](index.js#L479) - -Returns a memoized 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. - -**Params** - -* `pattern` **{String}**: Glob pattern -* `options` **{Object}**: See available [options](#options) for changing how matches are performed. -* `returns` **{Function}**: Returns a matcher function. - -**Example** - -```js -var nm = require('nanomatch'); -nm.matcher(pattern[, options]); - -var isMatch = nm.matcher('*.!(*a)'); -console.log(isMatch('a.a')); -//=> false -console.log(isMatch('a.b')); -//=> true -``` - -### [.capture](index.js#L560) - -Returns an array of matches captured by `pattern` in `string, or`null` if the pattern did not match. - -**Params** - -* `pattern` **{String}**: Glob pattern to use for matching. -* `string` **{String}**: String to match -* `options` **{Object}**: See available [options](#options) for changing how matches are performed -* `returns` **{Boolean}**: Returns an array of captures if the string matches the glob pattern, otherwise `null`. - -**Example** - -```js -var nm = require('nanomatch'); -nm.capture(pattern, string[, options]); - -console.log(nm.capture('test/*.js', 'test/foo.js')); -//=> ['foo'] -console.log(nm.capture('test/*.js', 'foo/bar.css')); -//=> null -``` - -### [.makeRe](index.js#L595) - -Create a regular expression from the given glob `pattern`. - -**Params** - -* `pattern` **{String}**: A glob pattern to convert to regex. -* `options` **{Object}**: See available [options](#options) for changing how matches are performed. -* `returns` **{RegExp}**: Returns a regex created from the given pattern. - -**Example** - -```js -var nm = require('nanomatch'); -nm.makeRe(pattern[, options]); - -console.log(nm.makeRe('*.js')); -//=> /^(?:(\.[\\\/])?(?!\.)(?=.)[^\/]*?\.js)$/ -``` - -### [.create](index.js#L658) - -Parses the given glob `pattern` and returns an object with the compiled `output` and optional source `map`. - -**Params** - -* `pattern` **{String}**: Glob pattern to parse and compile. -* `options` **{Object}**: Any [options](#options) to change how parsing and compiling is performed. -* `returns` **{Object}**: Returns an object with the parsed AST, compiled string and optional source map. - -**Example** - -```js -var nm = require('nanomatch'); -nm.create(pattern[, options]); - -console.log(nm.create('abc/*.js')); -// { options: { source: 'string', sourcemap: true }, -// state: {}, -// compilers: -// { ... }, -// output: '(\\.[\\\\\\/])?abc\\/(?!\\.)(?=.)[^\\/]*?\\.js', -// ast: -// { type: 'root', -// errors: [], -// nodes: -// [ ... ], -// dot: false, -// input: 'abc/*.js' }, -// parsingErrors: [], -// map: -// { version: 3, -// sources: [ 'string' ], -// names: [], -// mappings: 'AAAA,GAAG,EAAC,kBAAC,EAAC,EAAE', -// sourcesContent: [ 'abc/*.js' ] }, -// position: { line: 1, column: 28 }, -// content: {}, -// files: {}, -// idx: 6 } -``` - -### [.parse](index.js#L697) - -Parse the given `str` with the given `options`. - -**Params** - -* `str` **{String}** -* `options` **{Object}** -* `returns` **{Object}**: Returns an AST - -**Example** - -```js -var nm = require('nanomatch'); -nm.parse(pattern[, options]); - -var ast = nm.parse('a/{b,c}/d'); -console.log(ast); -// { type: 'root', -// errors: [], -// input: 'a/{b,c}/d', -// nodes: -// [ { type: 'bos', val: '' }, -// { type: 'text', val: 'a/' }, -// { type: 'brace', -// nodes: -// [ { type: 'brace.open', val: '{' }, -// { type: 'text', val: 'b,c' }, -// { type: 'brace.close', val: '}' } ] }, -// { type: 'text', val: '/d' }, -// { type: 'eos', val: '' } ] } -``` - -### [.compile](index.js#L745) - -Compile the given `ast` or string with the given `options`. - -**Params** - -* `ast` **{Object|String}** -* `options` **{Object}** -* `returns` **{Object}**: Returns an object that has an `output` property with the compiled string. - -**Example** - -```js -var nm = require('nanomatch'); -nm.compile(ast[, options]); - -var ast = nm.parse('a/{b,c}/d'); -console.log(nm.compile(ast)); -// { options: { source: 'string' }, -// state: {}, -// compilers: -// { eos: [Function], -// noop: [Function], -// bos: [Function], -// brace: [Function], -// 'brace.open': [Function], -// text: [Function], -// 'brace.close': [Function] }, -// output: [ 'a/(b|c)/d' ], -// ast: -// { ... }, -// parsingErrors: [] } -``` - -### [.clearCache](index.js#L768) - -Clear the regex cache. - -**Example** - -```js -nm.clearCache(); -``` - -## Options - -
    -basename - -### options.basename - -Allow glob patterns without slashes to match a file path based on its basename. Same behavior as [minimatch](https://github.com/isaacs/minimatch) option `matchBase`. - -Type: `boolean` - -Default: `false` - -**Example** - -```js -nm(['a/b.js', 'a/c.md'], '*.js'); -//=> [] - -nm(['a/b.js', 'a/c.md'], '*.js', {matchBase: true}); -//=> ['a/b.js'] -``` - -
    - -
    -bash - -### options.bash - -Enabled by default, this option enforces bash-like behavior with stars immediately following a bracket expression. Bash bracket expressions are similar to regex character classes, but unlike regex, a star following a bracket expression **does not repeat the bracketed characters**. Instead, the star is treated the same as an other star. - -Type: `boolean` - -Default: `true` - -**Example** - -```js -var files = ['abc', 'ajz']; -console.log(nm(files, '[a-c]*')); -//=> ['abc', 'ajz'] - -console.log(nm(files, '[a-c]*', {bash: false})); -``` - -
    - -
    -cache - -### options.cache - -Disable regex and function memoization. - -Type: `boolean` - -Default: `undefined` - -
    - -
    -dot - -### options.dot - -Match dotfiles. Same behavior as [minimatch](https://github.com/isaacs/minimatch) option `dot`. - -Type: `boolean` - -Default: `false` - -
    - -
    -failglob - -### options.failglob - -Similar to the `--failglob` behavior in Bash, throws an error when no matches are found. - -Type: `boolean` - -Default: `undefined` - -
    - -
    -ignore - -### options.ignore - -String or array of glob patterns to match files to ignore. - -Type: `String|Array` - -Default: `undefined` - -
    - -
    -matchBase - -### options.matchBase - -Alias for [options.basename](#options-basename). - -
    - -
    -nocase - -### options.nocase - -Use a case-insensitive regex for matching files. Same behavior as [minimatch](https://github.com/isaacs/minimatch). - -Type: `boolean` - -Default: `undefined` - -
    - -
    -nodupes - -### options.nodupes - -Remove duplicate elements from the result array. - -Type: `boolean` - -Default: `true` (enabled by default) - -**Example** - -Example of using the `unescape` and `nodupes` options together: - -```js -nm.match(['a/b/c', 'a/b/c'], '**'); -//=> ['abc'] - -nm.match(['a/b/c', 'a/b/c'], '**', {nodupes: false}); -//=> ['a/b/c', 'a/b/c'] -``` - -
    - -
    -nonegate - -### options.noglobstar - -Disable matching with globstars (`**`). - -Type: `boolean` - -Default: `undefined` - -```js -nm(['a/b', 'a/b/c', 'a/b/c/d'], 'a/**'); -//=> ['a/b', 'a/b/c', 'a/b/c/d'] - -nm(['a/b', 'a/b/c', 'a/b/c/d'], 'a/**', {noglobstar: true}); -//=> ['a/b'] -``` - -
    - -
    -nonegate - -### options.nonegate - -Disallow negation (`!`) patterns, and treat leading `!` as a literal character to match. - -Type: `boolean` - -Default: `undefined` - -
    - -
    -nonull - -### options.nonull - -Alias for [options.nullglob](#options-nullglob). - -
    - -
    -nullglob - -### options.nullglob - -If `true`, when no matches are found the actual (arrayified) glob pattern is returned instead of an empty array. Same behavior as [minimatch](https://github.com/isaacs/minimatch) option `nonull`. - -Type: `boolean` - -Default: `undefined` - -
    - -
    -slash - -### options.slash - -Customize the slash character(s) to use for matching. - -Type: `string|function` - -Default: `[/\\]` (forward slash and backslash) - -
    - -
    -star - -### options.star - -Customize the star character(s) to use for matching. It's not recommended that you modify this unless you have advanced knowledge of the compiler and matching rules. - -Type: `string|function` - -Default: `[^/\\]*?` - -
    - -
    -snapdragon - -### options.snapdragon - -Pass your own instance of [snapdragon](https://github.com/jonschlinkert/snapdragon) to customize parsers or compilers. - -Type: `object` - -Default: `undefined` - -
    - -
    -snapdragon - -### options.sourcemap - -Generate a source map by enabling the `sourcemap` option with the `.parse`, `.compile`, or `.create` methods. - -**Examples** - -```js -var nm = require('nanomatch'); - -var res = nm.create('abc/*.js', {sourcemap: true}); -console.log(res.map); -// { version: 3, -// sources: [ 'string' ], -// names: [], -// mappings: 'AAAA,GAAG,EAAC,iBAAC,EAAC,EAAE', -// sourcesContent: [ 'abc/*.js' ] } - -var ast = nm.parse('abc/**/*.js'); -var res = nm.compile(ast, {sourcemap: true}); -console.log(res.map); -// { version: 3, -// sources: [ 'string' ], -// names: [], -// mappings: 'AAAA,GAAG,EAAC,2BAAE,EAAC,iBAAC,EAAC,EAAE', -// sourcesContent: [ 'abc/**/*.js' ] } -``` - -
    - -
    -unescape - -### options.unescape - -Remove backslashes from returned matches. - -Type: `boolean` - -Default: `undefined` - -**Example** - -In this example we want to match a literal `*`: - -```js -nm.match(['abc', 'a\\*c'], 'a\\*c'); -//=> ['a\\*c'] - -nm.match(['abc', 'a\\*c'], 'a\\*c', {unescape: true}); -//=> ['a*c'] -``` - -
    - -
    -unixify - -### options.unixify - -Convert path separators on returned files to posix/unix-style forward slashes. - -Type: `boolean` - -Default: `true` - -**Example** - -```js -nm.match(['a\\b\\c'], 'a/**'); -//=> ['a/b/c'] - -nm.match(['a\\b\\c'], {unixify: false}); -//=> ['a\\b\\c'] -``` - -
    - -## Features - -Nanomatch has full support for standard Bash glob features, including the following "metacharacters": `*`, `**`, `?` and `[...]`. - -Here are some examples of how they work: - -| **Pattern** | **Description** | -| --- | --- | -| `*` | Matches any string except for `/`, leading `.`, or `/.` inside a path | -| `**` | Matches any string including `/`, but not a leading `.` or `/.` inside a path. More than two stars (e.g. `***` is treated the same as one star, and `**` loses its special meaning | when it's not the only thing in a path segment, per Bash specifications) | -| `foo*` | Matches any string beginning with `foo` | -| `*bar*` | Matches any string containing `bar` (beginning, middle or end) | -| `*.min.js` | Matches any string ending with `.min.js` | -| `[abc]*.js` | Matches any string beginning with `a`, `b`, or `c` and ending with `.js` | -| `abc?` | Matches `abcd` or `abcz` but not `abcde` | - -The exceptions noted for `*` apply to all patterns that contain a `*`. - -**Not supported** - -The following extended-globbing features are not supported: - -* [brace expansion](https://github.com/jonschlinkert/braces) (e.g. `{a,b,c}`) -* [extglobs](https://github.com/jonschlinkert/extglob) (e.g. `@(a|!(c|d))`) -* [POSIX brackets](https://github.com/jonschlinkert/expand-brackets) (e.g. `[[:alpha:][:digit:]]`) - -If you need any of these features consider using [micromatch](https://github.com/micromatch/micromatch) instead. - -## Bash expansion libs - -Nanomatch is part of a suite of libraries aimed at bringing the power and expressiveness of [Bash's](https://www.gnu.org/software/bash/) matching and expansion capabilities to JavaScript, _and - as you can see by the [benchmarks](#benchmarks) - without sacrificing speed_. - -| **Related library** | **Matching Type** | **Example** | **Description** | -| --- | --- | --- | --- | -| `nanomatch` (you are here) | Wildcards | `*` | [Filename expansion](https://www.gnu.org/software/bash/manual/html_node/Filename-Expansion.html#Filename-Expansion), also referred to as globbing and pathname expansion, allows the use of [wildcards](#features) for matching. | -| [expand-tilde](https://github.com/jonschlinkert/expand-tilde) | Tildes | `~` | [Tilde expansion](https://www.gnu.org/software/bash/manual/html_node/Tilde-Expansion.html#Tilde-Expansion) converts the leading tilde in a file path to the user home directory. | -| [braces](https://github.com/jonschlinkert/braces) | Braces | `{a,b,c}` | [Brace expansion](https://www.gnu.org/software/bash/manual/html_node/Brace-Expansion.html) | -| [expand-brackets](https://github.com/jonschlinkert/expand-brackets) | Brackets | `[[:alpha:]]` | [POSIX character classes](https://www.gnu.org/software/grep/manual/html_node/Character-Classes-and-Bracket-Expressions.html) (also referred to as POSIX brackets, or POSIX character classes) | -| [extglob](https://github.com/jonschlinkert/extglob) | Parens | `!(a\ | b)` | [Extglobs](https://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html#Pattern-Matching) | -| [micromatch](https://github.com/micromatch/micromatch) | All | all | Micromatch is built on top of the other libraries. | - -There are many resources available on the web if you want to dive deeper into how these features work in Bash. - -## Benchmarks - -### Running benchmarks - -Install dev dependencies: - -```bash -npm i -d && node benchmark -``` - -### Nanomatch vs. Minimatch vs. Multimatch - -```bash -# globstar-basic (182 bytes) - minimatch x 69,512 ops/sec ±1.92% (88 runs sampled) - multimatch x 63,376 ops/sec ±1.41% (89 runs sampled) - nanomatch x 432,451 ops/sec ±0.92% (88 runs sampled) - - fastest is nanomatch (by 651% avg) - -# large-list-globstar (485686 bytes) - minimatch x 34.02 ops/sec ±1.42% (59 runs sampled) - multimatch x 33.58 ops/sec ±1.97% (58 runs sampled) - nanomatch x 483 ops/sec ±1.06% (86 runs sampled) - - fastest is nanomatch (by 1429% avg) - -# long-list-globstar (194085 bytes) - minimatch x 383 ops/sec ±0.74% (90 runs sampled) - multimatch x 378 ops/sec ±0.59% (89 runs sampled) - nanomatch x 990 ops/sec ±1.14% (85 runs sampled) - - fastest is nanomatch (by 260% avg) - -# negation-basic (132 bytes) - minimatch x 242,145 ops/sec ±1.17% (89 runs sampled) - multimatch x 76,403 ops/sec ±0.78% (92 runs sampled) - nanomatch x 537,253 ops/sec ±1.44% (86 runs sampled) - - fastest is nanomatch (by 337% avg) - -# not-glob-basic (93 bytes) - minimatch x 252,402 ops/sec ±1.33% (89 runs sampled) - multimatch x 209,954 ops/sec ±1.30% (90 runs sampled) - nanomatch x 1,716,468 ops/sec ±1.13% (86 runs sampled) - - fastest is nanomatch (by 742% avg) - -# star-basic (93 bytes) - minimatch x 182,780 ops/sec ±1.41% (91 runs sampled) - multimatch x 153,210 ops/sec ±0.72% (89 runs sampled) - nanomatch x 599,621 ops/sec ±1.22% (90 runs sampled) - - fastest is nanomatch (by 357% avg) - -``` - -## About - -
    -Contributing - -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). - -Please read the [contributing guide](.github/contributing.md) for advice on opening issues, pull requests, and coding standards. - -
    - -
    -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: - -* [extglob](https://www.npmjs.com/package/extglob): Extended glob support for JavaScript. Adds (almost) the expressive power of regular expressions to glob… [more](https://github.com/micromatch/extglob) | [homepage](https://github.com/micromatch/extglob "Extended glob support for JavaScript. Adds (almost) the expressive power of regular expressions to glob patterns.") -* [is-extglob](https://www.npmjs.com/package/is-extglob): Returns true if a string has an extglob. | [homepage](https://github.com/jonschlinkert/is-extglob "Returns true if a string has an extglob.") -* [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/micromatch/micromatch "Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch.") - -### Contributors - -| **Commits** | **Contributor** | -| --- | --- | -| 164 | [jonschlinkert](https://github.com/jonschlinkert) | -| 1 | [devongovett](https://github.com/devongovett) | - -### Author - -**Jon Schlinkert** - -* [linkedin/in/jonschlinkert](https://linkedin.com/in/jonschlinkert) -* [github/jonschlinkert](https://github.com/jonschlinkert) -* [twitter/jonschlinkert](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 February 18, 2018._ \ No newline at end of file diff --git a/node_modules/nanomatch/index.js b/node_modules/nanomatch/index.js deleted file mode 100644 index dddc612..0000000 --- a/node_modules/nanomatch/index.js +++ /dev/null @@ -1,838 +0,0 @@ -'use strict'; - -/** - * Module dependencies - */ - -var util = require('util'); -var toRegex = require('to-regex'); -var extend = require('extend-shallow'); - -/** - * Local dependencies - */ - -var compilers = require('./lib/compilers'); -var parsers = require('./lib/parsers'); -var cache = require('./lib/cache'); -var utils = require('./lib/utils'); -var MAX_LENGTH = 1024 * 64; - -/** - * The main function takes a list of strings and one or more - * glob patterns to use for matching. - * - * ```js - * var nm = require('nanomatch'); - * nm(list, patterns[, options]); - * - * console.log(nm(['a.js', 'a.txt'], ['*.js'])); - * //=> [ 'a.js' ] - * ``` - * @param {Array} `list` A 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) for changing how matches are performed - * @return {Array} Returns an array of matches - * @summary false - * @api public - */ - -function nanomatch(list, patterns, options) { - patterns = utils.arrayify(patterns); - list = utils.arrayify(list); - - var len = patterns.length; - if (list.length === 0 || len === 0) { - return []; - } - - if (len === 1) { - return nanomatch.match(list, patterns[0], options); - } - - var negated = false; - var omit = []; - var keep = []; - var idx = -1; - - while (++idx < len) { - var pattern = patterns[idx]; - - if (typeof pattern === 'string' && pattern.charCodeAt(0) === 33 /* ! */) { - omit.push.apply(omit, nanomatch.match(list, pattern.slice(1), options)); - negated = true; - } else { - keep.push.apply(keep, nanomatch.match(list, pattern, options)); - } - } - - // minimatch.match parity - if (negated && keep.length === 0) { - if (options && options.unixify === false) { - keep = list.slice(); - } else { - var unixify = utils.unixify(options); - for (var i = 0; i < list.length; i++) { - keep.push(unixify(list[i])); - } - } - } - - var matches = utils.diff(keep, omit); - if (!options || options.nodupes !== false) { - return utils.unique(matches); - } - - return matches; -} - -/** - * Similar to the main function, but `pattern` must be a string. - * - * ```js - * var nm = require('nanomatch'); - * nm.match(list, pattern[, options]); - * - * console.log(nm.match(['a.a', 'a.aa', 'a.b', 'a.c'], '*.a')); - * //=> ['a.a', 'a.aa'] - * ``` - * @param {Array} `list` Array of strings to match - * @param {String} `pattern` 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 matches - * @api public - */ - -nanomatch.match = function(list, pattern, options) { - if (Array.isArray(pattern)) { - throw new TypeError('expected pattern to be a string'); - } - - var unixify = utils.unixify(options); - var isMatch = memoize('match', pattern, options, nanomatch.matcher); - var matches = []; - - list = utils.arrayify(list); - var len = list.length; - var idx = -1; - - while (++idx < len) { - var ele = list[idx]; - if (ele === pattern || isMatch(ele)) { - matches.push(utils.value(ele, unixify, options)); - } - } - - // if no options were passed, uniquify results and return - if (typeof options === 'undefined') { - return utils.unique(matches); - } - - if (matches.length === 0) { - if (options.failglob === true) { - throw new Error('no matches found for "' + pattern + '"'); - } - if (options.nonull === true || options.nullglob === true) { - return [options.unescape ? utils.unescape(pattern) : pattern]; - } - } - - // if `opts.ignore` was defined, diff ignored list - if (options.ignore) { - matches = nanomatch.not(matches, options.ignore, options); - } - - return options.nodupes !== false ? utils.unique(matches) : matches; -}; - -/** - * Returns true if the specified `string` matches the given glob `pattern`. - * - * ```js - * var nm = require('nanomatch'); - * nm.isMatch(string, pattern[, options]); - * - * console.log(nm.isMatch('a.a', '*.a')); - * //=> true - * console.log(nm.isMatch('a.b', '*.a')); - * //=> false - * ``` - * @param {String} `string` String to match - * @param {String} `pattern` Glob pattern to use for matching. - * @param {Object} `options` See available [options](#options) for changing how matches are performed - * @return {Boolean} Returns true if the string matches the glob pattern. - * @api public - */ - -nanomatch.isMatch = function(str, pattern, options) { - if (typeof str !== 'string') { - throw new TypeError('expected a string: "' + util.inspect(str) + '"'); - } - - if (utils.isEmptyString(str) || utils.isEmptyString(pattern)) { - return false; - } - - var equals = utils.equalsPattern(options); - if (equals(str)) { - return true; - } - - var isMatch = memoize('isMatch', pattern, options, nanomatch.matcher); - return isMatch(str); -}; - -/** - * Returns true if some of the elements in the given `list` match any of the - * given glob `patterns`. - * - * ```js - * var nm = require('nanomatch'); - * nm.some(list, patterns[, options]); - * - * console.log(nm.some(['foo.js', 'bar.js'], ['*.js', '!foo.js'])); - * // true - * console.log(nm.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 match `str` - * @api public - */ - -nanomatch.some = function(list, patterns, options) { - if (typeof list === 'string') { - list = [list]; - } - - for (var i = 0; i < list.length; i++) { - if (nanomatch(list[i], patterns, options).length === 1) { - return true; - } - } - - return false; -}; - -/** - * Returns true if every element in the given `list` matches - * at least one of the given glob `patterns`. - * - * ```js - * var nm = require('nanomatch'); - * nm.every(list, patterns[, options]); - * - * console.log(nm.every('foo.js', ['foo.js'])); - * // true - * console.log(nm.every(['foo.js', 'bar.js'], ['*.js'])); - * // true - * console.log(nm.every(['foo.js', 'bar.js'], ['*.js', '!foo.js'])); - * // false - * console.log(nm.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 any patterns match `str` - * @api public - */ - -nanomatch.every = function(list, patterns, options) { - if (typeof list === 'string') { - list = [list]; - } - - for (var i = 0; i < list.length; i++) { - if (nanomatch(list[i], patterns, options).length !== 1) { - return false; - } - } - - return true; -}; - -/** - * Returns true if **any** of the given glob `patterns` - * match the specified `string`. - * - * ```js - * var nm = require('nanomatch'); - * nm.any(string, patterns[, options]); - * - * console.log(nm.any('a.a', ['b.*', '*.a'])); - * //=> true - * console.log(nm.any('a.a', 'b.*')); - * //=> false - * ``` - * @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 - */ - -nanomatch.any = function(str, patterns, options) { - if (typeof str !== 'string') { - throw new TypeError('expected a string: "' + util.inspect(str) + '"'); - } - - if (utils.isEmptyString(str) || utils.isEmptyString(patterns)) { - return false; - } - - if (typeof patterns === 'string') { - patterns = [patterns]; - } - - for (var i = 0; i < patterns.length; i++) { - if (nanomatch.isMatch(str, patterns[i], options)) { - return true; - } - } - return false; -}; - -/** - * Returns true if **all** of the given `patterns` - * match the specified string. - * - * ```js - * var nm = require('nanomatch'); - * nm.all(string, patterns[, options]); - * - * console.log(nm.all('foo.js', ['foo.js'])); - * // true - * - * console.log(nm.all('foo.js', ['*.js', '!foo.js'])); - * // false - * - * console.log(nm.all('foo.js', ['*.js', 'foo.js'])); - * // true - * - * console.log(nm.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 - */ - -nanomatch.all = function(str, patterns, options) { - if (typeof str !== 'string') { - throw new TypeError('expected a string: "' + util.inspect(str) + '"'); - } - - if (typeof patterns === 'string') { - patterns = [patterns]; - } - - for (var i = 0; i < patterns.length; i++) { - if (!nanomatch.isMatch(str, patterns[i], options)) { - return false; - } - } - return true; -}; - -/** - * Returns a list of strings that _**do not match any**_ of the given `patterns`. - * - * ```js - * var nm = require('nanomatch'); - * nm.not(list, patterns[, options]); - * - * console.log(nm.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 - */ - -nanomatch.not = function(list, patterns, options) { - var opts = extend({}, options); - var ignore = opts.ignore; - delete opts.ignore; - - list = utils.arrayify(list); - - var matches = utils.diff(list, nanomatch(list, patterns, opts)); - if (ignore) { - matches = utils.diff(matches, nanomatch(list, ignore)); - } - - return opts.nodupes !== false ? utils.unique(matches) : matches; -}; - -/** - * 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 nm = require('nanomatch'); - * nm.contains(string, pattern[, options]); - * - * console.log(nm.contains('aa/bb/cc', '*b')); - * //=> true - * console.log(nm.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 the patter matches any part of `str`. - * @api public - */ - -nanomatch.contains = function(str, patterns, options) { - if (typeof str !== 'string') { - throw new TypeError('expected a string: "' + util.inspect(str) + '"'); - } - - if (typeof patterns === 'string') { - if (utils.isEmptyString(str) || utils.isEmptyString(patterns)) { - return false; - } - - var equals = utils.equalsPattern(patterns, options); - if (equals(str)) { - return true; - } - var contains = utils.containsPattern(patterns, options); - if (contains(str)) { - return true; - } - } - - var opts = extend({}, options, {contains: true}); - return nanomatch.any(str, patterns, opts); -}; - -/** - * Returns true if the given pattern and options should enable - * the `matchBase` option. - * @return {Boolean} - * @api private - */ - -nanomatch.matchBase = function(pattern, options) { - if (pattern && pattern.indexOf('/') !== -1 || !options) return false; - return options.basename === true || options.matchBase === 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 - * var nm = require('nanomatch'); - * nm.matchKeys(object, patterns[, options]); - * - * var obj = { aa: 'a', ab: 'b', ac: 'c' }; - * console.log(nm.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 - */ - -nanomatch.matchKeys = function(obj, patterns, options) { - if (!utils.isObject(obj)) { - throw new TypeError('expected the first argument to be an object'); - } - var keys = nanomatch(Object.keys(obj), patterns, options); - return utils.pick(obj, keys); -}; - -/** - * Returns a memoized 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 - * var nm = require('nanomatch'); - * nm.matcher(pattern[, options]); - * - * var isMatch = nm.matcher('*.!(*a)'); - * console.log(isMatch('a.a')); - * //=> false - * console.log(isMatch('a.b')); - * //=> true - * ``` - * @param {String} `pattern` Glob pattern - * @param {Object} `options` See available [options](#options) for changing how matches are performed. - * @return {Function} Returns a matcher function. - * @api public - */ - -nanomatch.matcher = function matcher(pattern, options) { - if (utils.isEmptyString(pattern)) { - return function() { - return false; - }; - } - - if (Array.isArray(pattern)) { - return compose(pattern, options, matcher); - } - - // if pattern is a regex - if (pattern instanceof RegExp) { - return test(pattern); - } - - // if pattern is invalid - if (!utils.isString(pattern)) { - throw new TypeError('expected pattern to be an array, string or regex'); - } - - // if pattern is a non-glob string - if (!utils.hasSpecialChars(pattern)) { - if (options && options.nocase === true) { - pattern = pattern.toLowerCase(); - } - return utils.matchPath(pattern, options); - } - - // if pattern is a glob string - var re = nanomatch.makeRe(pattern, options); - - // if `options.matchBase` or `options.basename` is defined - if (nanomatch.matchBase(pattern, options)) { - return utils.matchBasename(re, options); - } - - function test(regex) { - var equals = utils.equalsPattern(options); - var unixify = utils.unixify(options); - - return function(str) { - if (equals(str)) { - return true; - } - - if (regex.test(unixify(str))) { - return true; - } - return false; - }; - } - - // create matcher function - var matcherFn = test(re); - // set result object from compiler on matcher function, - // as a non-enumerable property. useful for debugging - utils.define(matcherFn, 'result', re.result); - return matcherFn; -}; - -/** - * Returns an array of matches captured by `pattern` in `string, or - * `null` if the pattern did not match. - * - * ```js - * var nm = require('nanomatch'); - * nm.capture(pattern, string[, options]); - * - * console.log(nm.capture('test/*.js', 'test/foo.js')); - * //=> ['foo'] - * console.log(nm.capture('test/*.js', 'foo/bar.css')); - * //=> null - * ``` - * @param {String} `pattern` Glob pattern to use for matching. - * @param {String} `string` String to match - * @param {Object} `options` See available [options](#options) for changing how matches are performed - * @return {Boolean} Returns an array of captures if the string matches the glob pattern, otherwise `null`. - * @api public - */ - -nanomatch.capture = function(pattern, str, options) { - var re = nanomatch.makeRe(pattern, extend({capture: true}, options)); - var unixify = utils.unixify(options); - - function match() { - return function(string) { - var match = re.exec(unixify(string)); - if (!match) { - return null; - } - - return match.slice(1); - }; - } - - var capture = memoize('capture', pattern, options, match); - return capture(str); -}; - -/** - * Create a regular expression from the given glob `pattern`. - * - * ```js - * var nm = require('nanomatch'); - * nm.makeRe(pattern[, options]); - * - * console.log(nm.makeRe('*.js')); - * //=> /^(?:(\.[\\\/])?(?!\.)(?=.)[^\/]*?\.js)$/ - * ``` - * @param {String} `pattern` A glob pattern to convert to regex. - * @param {Object} `options` See available [options](#options) for changing how matches are performed. - * @return {RegExp} Returns a regex created from the given pattern. - * @api public - */ - -nanomatch.makeRe = function(pattern, options) { - if (pattern instanceof RegExp) { - return pattern; - } - - if (typeof pattern !== 'string') { - throw new TypeError('expected pattern to be a string'); - } - - if (pattern.length > MAX_LENGTH) { - throw new Error('expected pattern to be less than ' + MAX_LENGTH + ' characters'); - } - - function makeRe() { - var opts = utils.extend({wrap: false}, options); - var result = nanomatch.create(pattern, opts); - var regex = toRegex(result.output, opts); - utils.define(regex, 'result', result); - return regex; - } - - return memoize('makeRe', pattern, options, makeRe); -}; - -/** - * Parses the given glob `pattern` and returns an object with the compiled `output` - * and optional source `map`. - * - * ```js - * var nm = require('nanomatch'); - * nm.create(pattern[, options]); - * - * console.log(nm.create('abc/*.js')); - * // { options: { source: 'string', sourcemap: true }, - * // state: {}, - * // compilers: - * // { ... }, - * // output: '(\\.[\\\\\\/])?abc\\/(?!\\.)(?=.)[^\\/]*?\\.js', - * // ast: - * // { type: 'root', - * // errors: [], - * // nodes: - * // [ ... ], - * // dot: false, - * // input: 'abc/*.js' }, - * // parsingErrors: [], - * // map: - * // { version: 3, - * // sources: [ 'string' ], - * // names: [], - * // mappings: 'AAAA,GAAG,EAAC,kBAAC,EAAC,EAAE', - * // sourcesContent: [ 'abc/*.js' ] }, - * // position: { line: 1, column: 28 }, - * // content: {}, - * // files: {}, - * // idx: 6 } - * ``` - * @param {String} `pattern` Glob pattern to parse and compile. - * @param {Object} `options` Any [options](#options) to change how parsing and compiling is performed. - * @return {Object} Returns an object with the parsed AST, compiled string and optional source map. - * @api public - */ - -nanomatch.create = function(pattern, options) { - if (typeof pattern !== 'string') { - throw new TypeError('expected a string'); - } - function create() { - return nanomatch.compile(nanomatch.parse(pattern, options), options); - } - return memoize('create', pattern, options, create); -}; - -/** - * Parse the given `str` with the given `options`. - * - * ```js - * var nm = require('nanomatch'); - * nm.parse(pattern[, options]); - * - * var ast = nm.parse('a/{b,c}/d'); - * console.log(ast); - * // { type: 'root', - * // errors: [], - * // input: 'a/{b,c}/d', - * // nodes: - * // [ { type: 'bos', val: '' }, - * // { type: 'text', val: 'a/' }, - * // { type: 'brace', - * // nodes: - * // [ { type: 'brace.open', val: '{' }, - * // { type: 'text', val: 'b,c' }, - * // { type: 'brace.close', val: '}' } ] }, - * // { type: 'text', val: '/d' }, - * // { type: 'eos', val: '' } ] } - * ``` - * @param {String} `str` - * @param {Object} `options` - * @return {Object} Returns an AST - * @api public - */ - -nanomatch.parse = function(pattern, options) { - if (typeof pattern !== 'string') { - throw new TypeError('expected a string'); - } - - function parse() { - var snapdragon = utils.instantiate(null, options); - parsers(snapdragon, options); - - var ast = snapdragon.parse(pattern, options); - utils.define(ast, 'snapdragon', snapdragon); - ast.input = pattern; - return ast; - } - - return memoize('parse', pattern, options, parse); -}; - -/** - * Compile the given `ast` or string with the given `options`. - * - * ```js - * var nm = require('nanomatch'); - * nm.compile(ast[, options]); - * - * var ast = nm.parse('a/{b,c}/d'); - * console.log(nm.compile(ast)); - * // { options: { source: 'string' }, - * // state: {}, - * // compilers: - * // { eos: [Function], - * // noop: [Function], - * // bos: [Function], - * // brace: [Function], - * // 'brace.open': [Function], - * // text: [Function], - * // 'brace.close': [Function] }, - * // output: [ 'a/(b|c)/d' ], - * // ast: - * // { ... }, - * // parsingErrors: [] } - * ``` - * @param {Object|String} `ast` - * @param {Object} `options` - * @return {Object} Returns an object that has an `output` property with the compiled string. - * @api public - */ - -nanomatch.compile = function(ast, options) { - if (typeof ast === 'string') { - ast = nanomatch.parse(ast, options); - } - - function compile() { - var snapdragon = utils.instantiate(ast, options); - compilers(snapdragon, options); - return snapdragon.compile(ast, options); - } - - return memoize('compile', ast.input, options, compile); -}; - -/** - * Clear the regex cache. - * - * ```js - * nm.clearCache(); - * ``` - * @api public - */ - -nanomatch.clearCache = function() { - nanomatch.cache.__data__ = {}; -}; - -/** - * Compose a matcher function with the given patterns. - * This allows matcher functions to be compiled once and - * called multiple times. - */ - -function compose(patterns, options, matcher) { - var matchers; - - return memoize('compose', String(patterns), options, function() { - return function(file) { - // delay composition until it's invoked the first time, - // after that it won't be called again - if (!matchers) { - matchers = []; - for (var i = 0; i < patterns.length; i++) { - matchers.push(matcher(patterns[i], options)); - } - } - - var len = matchers.length; - while (len--) { - if (matchers[len](file) === true) { - return true; - } - } - return false; - }; - }); -} - -/** - * Memoize a generated regex or function. A unique key is generated - * from the `type` (usually method name), the `pattern`, and - * user-defined options. - */ - -function memoize(type, pattern, options, fn) { - var key = utils.createKey(type + '=' + pattern, options); - - if (options && options.cache === false) { - return fn(pattern, options); - } - - if (cache.has(type, key)) { - return cache.get(type, key); - } - - var val = fn(pattern, options); - cache.set(type, key, val); - return val; -} - -/** - * Expose compiler, parser and cache on `nanomatch` - */ - -nanomatch.compilers = compilers; -nanomatch.parsers = parsers; -nanomatch.cache = cache; - -/** - * Expose `nanomatch` - * @type {Function} - */ - -module.exports = nanomatch; diff --git a/node_modules/nanomatch/lib/cache.js b/node_modules/nanomatch/lib/cache.js deleted file mode 100644 index fffc4c1..0000000 --- a/node_modules/nanomatch/lib/cache.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = new (require('fragment-cache'))(); diff --git a/node_modules/nanomatch/lib/compilers.js b/node_modules/nanomatch/lib/compilers.js deleted file mode 100644 index d7a786e..0000000 --- a/node_modules/nanomatch/lib/compilers.js +++ /dev/null @@ -1,339 +0,0 @@ -'use strict'; - -/** -* Nanomatch compilers -*/ - -module.exports = function(nanomatch, options) { - function slash() { - if (options && typeof options.slash === 'string') { - return options.slash; - } - if (options && typeof options.slash === 'function') { - return options.slash.call(nanomatch); - } - return '\\\\/'; - } - - function star() { - if (options && typeof options.star === 'string') { - return options.star; - } - if (options && typeof options.star === 'function') { - return options.star.call(nanomatch); - } - return '[^' + slash() + ']*?'; - } - - var ast = nanomatch.ast = nanomatch.parser.ast; - ast.state = nanomatch.parser.state; - nanomatch.compiler.state = ast.state; - nanomatch.compiler - - /** - * Negation / escaping - */ - - .set('not', function(node) { - var prev = this.prev(); - if (this.options.nonegate === true || prev.type !== 'bos') { - return this.emit('\\' + node.val, node); - } - return this.emit(node.val, node); - }) - .set('escape', function(node) { - if (this.options.unescape && /^[-\w_.]/.test(node.val)) { - return this.emit(node.val, node); - } - return this.emit('\\' + node.val, node); - }) - .set('quoted', function(node) { - return this.emit(node.val, node); - }) - - /** - * Regex - */ - - .set('dollar', function(node) { - if (node.parent.type === 'bracket') { - return this.emit(node.val, node); - } - return this.emit('\\' + node.val, node); - }) - - /** - * Dot: "." - */ - - .set('dot', function(node) { - if (node.dotfiles === true) this.dotfiles = true; - return this.emit('\\' + node.val, node); - }) - - /** - * Slashes: "/" and "\" - */ - - .set('backslash', function(node) { - return this.emit(node.val, node); - }) - .set('slash', function(node, nodes, i) { - var val = '[' + slash() + ']'; - var parent = node.parent; - var prev = this.prev(); - - // set "node.hasSlash" to true on all ancestor parens nodes - while (parent.type === 'paren' && !parent.hasSlash) { - parent.hasSlash = true; - parent = parent.parent; - } - - if (prev.addQmark) { - val += '?'; - } - - // word boundary - if (node.rest.slice(0, 2) === '\\b') { - return this.emit(val, node); - } - - // globstars - if (node.parsed === '**' || node.parsed === './**') { - this.output = '(?:' + this.output; - return this.emit(val + ')?', node); - } - - // negation - if (node.parsed === '!**' && this.options.nonegate !== true) { - return this.emit(val + '?\\b', node); - } - return this.emit(val, node); - }) - - /** - * Square brackets - */ - - .set('bracket', function(node) { - var close = node.close; - var open = !node.escaped ? '[' : '\\['; - var negated = node.negated; - var inner = node.inner; - var val = node.val; - - if (node.escaped === true) { - inner = inner.replace(/\\?(\W)/g, '\\$1'); - negated = ''; - } - - if (inner === ']-') { - inner = '\\]\\-'; - } - - if (negated && inner.indexOf('.') === -1) { - inner += '.'; - } - if (negated && inner.indexOf('/') === -1) { - inner += '/'; - } - - val = open + negated + inner + close; - return this.emit(val, node); - }) - - /** - * Square: "[.]" (only matches a single character in brackets) - */ - - .set('square', function(node) { - var val = (/^\W/.test(node.val) ? '\\' : '') + node.val; - return this.emit(val, node); - }) - - /** - * Question mark: "?" - */ - - .set('qmark', function(node) { - var prev = this.prev(); - // don't use "slash" variable so that we always avoid - // matching backslashes and slashes with a qmark - var val = '[^.\\\\/]'; - if (this.options.dot || (prev.type !== 'bos' && prev.type !== 'slash')) { - val = '[^\\\\/]'; - } - - if (node.parsed.slice(-1) === '(') { - var ch = node.rest.charAt(0); - if (ch === '!' || ch === '=' || ch === ':') { - return this.emit(node.val, node); - } - } - - if (node.val.length > 1) { - val += '{' + node.val.length + '}'; - } - return this.emit(val, node); - }) - - /** - * Plus - */ - - .set('plus', function(node) { - var prev = node.parsed.slice(-1); - if (prev === ']' || prev === ')') { - return this.emit(node.val, node); - } - if (!this.output || (/[?*+]/.test(ch) && node.parent.type !== 'bracket')) { - return this.emit('\\+', node); - } - var ch = this.output.slice(-1); - if (/\w/.test(ch) && !node.inside) { - return this.emit('+\\+?', node); - } - return this.emit('+', node); - }) - - /** - * globstar: '**' - */ - - .set('globstar', function(node, nodes, i) { - if (!this.output) { - this.state.leadingGlobstar = true; - } - - var prev = this.prev(); - var before = this.prev(2); - var next = this.next(); - var after = this.next(2); - var type = prev.type; - var val = node.val; - - if (prev.type === 'slash' && next.type === 'slash') { - if (before.type === 'text') { - this.output += '?'; - - if (after.type !== 'text') { - this.output += '\\b'; - } - } - } - - var parsed = node.parsed; - if (parsed.charAt(0) === '!') { - parsed = parsed.slice(1); - } - - var isInside = node.isInside.paren || node.isInside.brace; - if (parsed && type !== 'slash' && type !== 'bos' && !isInside) { - val = star(); - } else { - val = this.options.dot !== true - ? '(?:(?!(?:[' + slash() + ']|^)\\.).)*?' - : '(?:(?!(?:[' + slash() + ']|^)(?:\\.{1,2})($|[' + slash() + ']))(?!\\.{2}).)*?'; - } - - if ((type === 'slash' || type === 'bos') && this.options.dot !== true) { - val = '(?!\\.)' + val; - } - - if (prev.type === 'slash' && next.type === 'slash' && before.type !== 'text') { - if (after.type === 'text' || after.type === 'star') { - node.addQmark = true; - } - } - - if (this.options.capture) { - val = '(' + val + ')'; - } - - return this.emit(val, node); - }) - - /** - * Star: "*" - */ - - .set('star', function(node, nodes, i) { - var prior = nodes[i - 2] || {}; - var prev = this.prev(); - var next = this.next(); - var type = prev.type; - - function isStart(n) { - return n.type === 'bos' || n.type === 'slash'; - } - - if (this.output === '' && this.options.contains !== true) { - this.output = '(?![' + slash() + '])'; - } - - if (type === 'bracket' && this.options.bash === false) { - var str = next && next.type === 'bracket' ? star() : '*?'; - if (!prev.nodes || prev.nodes[1].type !== 'posix') { - return this.emit(str, node); - } - } - - var prefix = !this.dotfiles && type !== 'text' && type !== 'escape' - ? (this.options.dot ? '(?!(?:^|[' + slash() + '])\\.{1,2}(?:$|[' + slash() + ']))' : '(?!\\.)') - : ''; - - if (isStart(prev) || (isStart(prior) && type === 'not')) { - if (prefix !== '(?!\\.)') { - prefix += '(?!(\\.{2}|\\.[' + slash() + ']))(?=.)'; - } else { - prefix += '(?=.)'; - } - } else if (prefix === '(?!\\.)') { - prefix = ''; - } - - if (prev.type === 'not' && prior.type === 'bos' && this.options.dot === true) { - this.output = '(?!\\.)' + this.output; - } - - var output = prefix + star(); - if (this.options.capture) { - output = '(' + output + ')'; - } - - return this.emit(output, node); - }) - - /** - * Text - */ - - .set('text', function(node) { - return this.emit(node.val, node); - }) - - /** - * End-of-string - */ - - .set('eos', function(node) { - var prev = this.prev(); - var val = node.val; - - this.output = '(?:\\.[' + slash() + '](?=.))?' + this.output; - if (this.state.metachar && prev.type !== 'qmark' && prev.type !== 'slash') { - val += (this.options.contains ? '[' + slash() + ']?' : '(?:[' + slash() + ']|$)'); - } - - return this.emit(val, node); - }); - - /** - * Allow custom compilers to be passed on options - */ - - if (options && typeof options.compilers === 'function') { - options.compilers(nanomatch.compiler); - } -}; - diff --git a/node_modules/nanomatch/lib/parsers.js b/node_modules/nanomatch/lib/parsers.js deleted file mode 100644 index f87df8f..0000000 --- a/node_modules/nanomatch/lib/parsers.js +++ /dev/null @@ -1,386 +0,0 @@ -'use strict'; - -var regexNot = require('regex-not'); -var toRegex = require('to-regex'); - -/** - * Characters to use in negation regex (we want to "not" match - * characters that are matched by other parsers) - */ - -var cached; -var NOT_REGEX = '[\\[!*+?$^"\'.\\\\/]+'; -var not = createTextRegex(NOT_REGEX); - -/** - * Nanomatch parsers - */ - -module.exports = function(nanomatch, options) { - var parser = nanomatch.parser; - var opts = parser.options; - - parser.state = { - slashes: 0, - paths: [] - }; - - parser.ast.state = parser.state; - parser - - /** - * Beginning-of-string - */ - - .capture('prefix', function() { - if (this.parsed) return; - var m = this.match(/^\.[\\/]/); - if (!m) return; - this.state.strictOpen = !!this.options.strictOpen; - this.state.addPrefix = true; - }) - - /** - * Escape: "\\." - */ - - .capture('escape', function() { - if (this.isInside('bracket')) return; - var pos = this.position(); - var m = this.match(/^(?:\\(.)|([$^]))/); - if (!m) return; - - return pos({ - type: 'escape', - val: m[2] || m[1] - }); - }) - - /** - * Quoted strings - */ - - .capture('quoted', function() { - var pos = this.position(); - var m = this.match(/^["']/); - if (!m) return; - - var quote = m[0]; - if (this.input.indexOf(quote) === -1) { - return pos({ - type: 'escape', - val: quote - }); - } - - var tok = advanceTo(this.input, quote); - this.consume(tok.len); - - return pos({ - type: 'quoted', - val: tok.esc - }); - }) - - /** - * Negations: "!" - */ - - .capture('not', function() { - var parsed = this.parsed; - var pos = this.position(); - var m = this.match(this.notRegex || /^!+/); - if (!m) return; - var val = m[0]; - - var isNegated = (val.length % 2) === 1; - if (parsed === '' && !isNegated) { - val = ''; - } - - // if nothing has been parsed, we know `!` is at the start, - // so we need to wrap the result in a negation regex - if (parsed === '' && isNegated && this.options.nonegate !== true) { - this.bos.val = '(?!^(?:'; - this.append = ')$).*'; - val = ''; - } - return pos({ - type: 'not', - val: val - }); - }) - - /** - * Dot: "." - */ - - .capture('dot', function() { - var parsed = this.parsed; - var pos = this.position(); - var m = this.match(/^\.+/); - if (!m) return; - - var val = m[0]; - this.state.dot = val === '.' && (parsed === '' || parsed.slice(-1) === '/'); - - return pos({ - type: 'dot', - dotfiles: this.state.dot, - val: val - }); - }) - - /** - * Plus: "+" - */ - - .capture('plus', /^\+(?!\()/) - - /** - * Question mark: "?" - */ - - .capture('qmark', function() { - var parsed = this.parsed; - var pos = this.position(); - var m = this.match(/^\?+(?!\()/); - if (!m) return; - - this.state.metachar = true; - this.state.qmark = true; - - return pos({ - type: 'qmark', - parsed: parsed, - val: m[0] - }); - }) - - /** - * Globstar: "**" - */ - - .capture('globstar', function() { - var parsed = this.parsed; - var pos = this.position(); - var m = this.match(/^\*{2}(?![*(])(?=[,)/]|$)/); - if (!m) return; - - var type = opts.noglobstar !== true ? 'globstar' : 'star'; - var node = pos({type: type, parsed: parsed}); - this.state.metachar = true; - - while (this.input.slice(0, 4) === '/**/') { - this.input = this.input.slice(3); - } - - node.isInside = { - brace: this.isInside('brace'), - paren: this.isInside('paren') - }; - - if (type === 'globstar') { - this.state.globstar = true; - node.val = '**'; - - } else { - this.state.star = true; - node.val = '*'; - } - - return node; - }) - - /** - * Star: "*" - */ - - .capture('star', function() { - var pos = this.position(); - var starRe = /^(?:\*(?![*(])|[*]{3,}(?!\()|[*]{2}(?![(/]|$)|\*(?=\*\())/; - var m = this.match(starRe); - if (!m) return; - - this.state.metachar = true; - this.state.star = true; - return pos({ - type: 'star', - val: m[0] - }); - }) - - /** - * Slash: "/" - */ - - .capture('slash', function() { - var pos = this.position(); - var m = this.match(/^\//); - if (!m) return; - - this.state.slashes++; - return pos({ - type: 'slash', - val: m[0] - }); - }) - - /** - * Backslash: "\\" - */ - - .capture('backslash', function() { - var pos = this.position(); - var m = this.match(/^\\(?![*+?(){}[\]'"])/); - if (!m) return; - - var val = m[0]; - - if (this.isInside('bracket')) { - val = '\\'; - } else if (val.length > 1) { - val = '\\\\'; - } - - return pos({ - type: 'backslash', - val: val - }); - }) - - /** - * Square: "[.]" - */ - - .capture('square', function() { - if (this.isInside('bracket')) return; - var pos = this.position(); - var m = this.match(/^\[([^!^\\])\]/); - if (!m) return; - - return pos({ - type: 'square', - val: m[1] - }); - }) - - /** - * Brackets: "[...]" (basic, this can be overridden by other parsers) - */ - - .capture('bracket', function() { - var pos = this.position(); - var m = this.match(/^(?:\[([!^]?)([^\]]+|\]-)(\]|[^*+?]+)|\[)/); - if (!m) return; - - var val = m[0]; - var negated = m[1] ? '^' : ''; - var inner = (m[2] || '').replace(/\\\\+/, '\\\\'); - var close = m[3] || ''; - - if (m[2] && inner.length < m[2].length) { - val = val.replace(/\\\\+/, '\\\\'); - } - - var esc = this.input.slice(0, 2); - if (inner === '' && esc === '\\]') { - inner += esc; - this.consume(2); - - var str = this.input; - var idx = -1; - var ch; - - while ((ch = str[++idx])) { - this.consume(1); - if (ch === ']') { - close = ch; - break; - } - inner += ch; - } - } - - return pos({ - type: 'bracket', - val: val, - escaped: close !== ']', - negated: negated, - inner: inner, - close: close - }); - }) - - /** - * Text - */ - - .capture('text', function() { - if (this.isInside('bracket')) return; - var pos = this.position(); - var m = this.match(not); - if (!m || !m[0]) return; - - return pos({ - type: 'text', - val: m[0] - }); - }); - - /** - * Allow custom parsers to be passed on options - */ - - if (options && typeof options.parsers === 'function') { - options.parsers(nanomatch.parser); - } -}; - -/** - * Advance to the next non-escaped character - */ - -function advanceTo(input, endChar) { - var ch = input.charAt(0); - var tok = { len: 1, val: '', esc: '' }; - var idx = 0; - - function advance() { - if (ch !== '\\') { - tok.esc += '\\' + ch; - tok.val += ch; - } - - ch = input.charAt(++idx); - tok.len++; - - if (ch === '\\') { - advance(); - advance(); - } - } - - while (ch && ch !== endChar) { - advance(); - } - return tok; -} - -/** - * Create text regex - */ - -function createTextRegex(pattern) { - if (cached) return cached; - var opts = {contains: true, strictClose: false}; - var not = regexNot.create(pattern, opts); - var re = toRegex('^(?:[*]\\((?=.)|' + not + ')', opts); - return (cached = re); -} - -/** - * Expose negation string - */ - -module.exports.not = NOT_REGEX; diff --git a/node_modules/nanomatch/lib/utils.js b/node_modules/nanomatch/lib/utils.js deleted file mode 100644 index 0cf1501..0000000 --- a/node_modules/nanomatch/lib/utils.js +++ /dev/null @@ -1,379 +0,0 @@ -'use strict'; - -var utils = module.exports; -var path = require('path'); - -/** - * Module dependencies - */ - -var isWindows = require('is-windows')(); -var Snapdragon = require('snapdragon'); -utils.define = require('define-property'); -utils.diff = require('arr-diff'); -utils.extend = require('extend-shallow'); -utils.pick = require('object.pick'); -utils.typeOf = require('kind-of'); -utils.unique = require('array-unique'); - -/** - * Returns true if the given value is effectively an empty string - */ - -utils.isEmptyString = function(val) { - return String(val) === '' || String(val) === './'; -}; - -/** - * Returns true if the platform is windows, or `path.sep` is `\\`. - * This is defined as a function to allow `path.sep` to be set in unit tests, - * or by the user, if there is a reason to do so. - * @return {Boolean} - */ - -utils.isWindows = function() { - return path.sep === '\\' || isWindows === true; -}; - -/** - * Return the last element from an array - */ - -utils.last = function(arr, n) { - return arr[arr.length - (n || 1)]; -}; - -/** - * Get the `Snapdragon` instance to use - */ - -utils.instantiate = function(ast, options) { - var snapdragon; - // if an instance was created by `.parse`, use that instance - if (utils.typeOf(ast) === 'object' && ast.snapdragon) { - snapdragon = ast.snapdragon; - // if the user supplies an instance on options, use that instance - } else if (utils.typeOf(options) === 'object' && options.snapdragon) { - snapdragon = options.snapdragon; - // create a new instance - } else { - snapdragon = new Snapdragon(options); - } - - utils.define(snapdragon, 'parse', function(str, options) { - var parsed = Snapdragon.prototype.parse.call(this, str, options); - parsed.input = str; - - // escape unmatched brace/bracket/parens - var last = this.parser.stack.pop(); - if (last && this.options.strictErrors !== true) { - var open = last.nodes[0]; - var inner = last.nodes[1]; - if (last.type === 'bracket') { - if (inner.val.charAt(0) === '[') { - inner.val = '\\' + inner.val; - } - - } else { - open.val = '\\' + open.val; - var sibling = open.parent.nodes[1]; - if (sibling.type === 'star') { - sibling.loose = true; - } - } - } - - // add non-enumerable parser reference - utils.define(parsed, 'parser', this.parser); - return parsed; - }); - - return snapdragon; -}; - -/** - * Create the key to use for memoization. The key is generated - * by iterating over the options and concatenating key-value pairs - * to the pattern string. - */ - -utils.createKey = function(pattern, options) { - if (typeof options === 'undefined') { - return pattern; - } - var key = pattern; - for (var prop in options) { - if (options.hasOwnProperty(prop)) { - key += ';' + prop + '=' + String(options[prop]); - } - } - return key; -}; - -/** - * Cast `val` to an array - * @return {Array} - */ - -utils.arrayify = function(val) { - if (typeof val === 'string') return [val]; - return val ? (Array.isArray(val) ? val : [val]) : []; -}; - -/** - * Return true if `val` is a non-empty string - */ - -utils.isString = function(val) { - return typeof val === 'string'; -}; - -/** - * Return true if `val` is a non-empty string - */ - -utils.isRegex = function(val) { - return utils.typeOf(val) === 'regexp'; -}; - -/** - * Return true if `val` is a non-empty string - */ - -utils.isObject = function(val) { - return utils.typeOf(val) === 'object'; -}; - -/** - * Escape regex characters in the given string - */ - -utils.escapeRegex = function(str) { - return str.replace(/[-[\]{}()^$|*+?.\\/\s]/g, '\\$&'); -}; - -/** - * Combines duplicate characters in the provided `input` string. - * @param {String} `input` - * @returns {String} - */ - -utils.combineDupes = function(input, patterns) { - patterns = utils.arrayify(patterns).join('|').split('|'); - patterns = patterns.map(function(s) { - return s.replace(/\\?([+*\\/])/g, '\\$1'); - }); - var substr = patterns.join('|'); - var regex = new RegExp('(' + substr + ')(?=\\1)', 'g'); - return input.replace(regex, ''); -}; - -/** - * Returns true if the given `str` has special characters - */ - -utils.hasSpecialChars = function(str) { - return /(?:(?:(^|\/)[!.])|[*?+()|[\]{}]|[+@]\()/.test(str); -}; - -/** - * Normalize slashes in the given filepath. - * - * @param {String} `filepath` - * @return {String} - */ - -utils.toPosixPath = function(str) { - return str.replace(/\\+/g, '/'); -}; - -/** - * Strip backslashes before special characters in a string. - * - * @param {String} `str` - * @return {String} - */ - -utils.unescape = function(str) { - return utils.toPosixPath(str.replace(/\\(?=[*+?!.])/g, '')); -}; - -/** - * Strip the drive letter from a windows filepath - * @param {String} `fp` - * @return {String} - */ - -utils.stripDrive = function(fp) { - return utils.isWindows() ? fp.replace(/^[a-z]:[\\/]+?/i, '/') : fp; -}; - -/** - * Strip the prefix from a filepath - * @param {String} `fp` - * @return {String} - */ - -utils.stripPrefix = function(str) { - if (str.charAt(0) === '.' && (str.charAt(1) === '/' || str.charAt(1) === '\\')) { - return str.slice(2); - } - return str; -}; - -/** - * Returns true if `str` is a common character that doesn't need - * to be processed to be used for matching. - * @param {String} `str` - * @return {Boolean} - */ - -utils.isSimpleChar = function(str) { - return str.trim() === '' || str === '.'; -}; - -/** - * Returns true if the given str is an escaped or - * unescaped path character - */ - -utils.isSlash = function(str) { - return str === '/' || str === '\\/' || str === '\\' || str === '\\\\'; -}; - -/** - * Returns a function that returns true if the given - * pattern matches or contains a `filepath` - * - * @param {String} `pattern` - * @return {Function} - */ - -utils.matchPath = function(pattern, options) { - return (options && options.contains) - ? utils.containsPattern(pattern, options) - : utils.equalsPattern(pattern, options); -}; - -/** - * Returns true if the given (original) filepath or unixified path are equal - * to the given pattern. - */ - -utils._equals = function(filepath, unixPath, pattern) { - return pattern === filepath || pattern === unixPath; -}; - -/** - * Returns true if the given (original) filepath or unixified path contain - * the given pattern. - */ - -utils._contains = function(filepath, unixPath, pattern) { - return filepath.indexOf(pattern) !== -1 || unixPath.indexOf(pattern) !== -1; -}; - -/** - * Returns a function that returns true if the given - * pattern is the same as a given `filepath` - * - * @param {String} `pattern` - * @return {Function} - */ - -utils.equalsPattern = function(pattern, options) { - var unixify = utils.unixify(options); - options = options || {}; - - return function fn(filepath) { - var equal = utils._equals(filepath, unixify(filepath), pattern); - if (equal === true || options.nocase !== true) { - return equal; - } - var lower = filepath.toLowerCase(); - return utils._equals(lower, unixify(lower), pattern); - }; -}; - -/** - * Returns a function that returns true if the given - * pattern contains a `filepath` - * - * @param {String} `pattern` - * @return {Function} - */ - -utils.containsPattern = function(pattern, options) { - var unixify = utils.unixify(options); - options = options || {}; - - return function(filepath) { - var contains = utils._contains(filepath, unixify(filepath), pattern); - if (contains === true || options.nocase !== true) { - return contains; - } - var lower = filepath.toLowerCase(); - return utils._contains(lower, unixify(lower), pattern); - }; -}; - -/** - * Returns a function that returns true if the given - * regex matches the `filename` of a file path. - * - * @param {RegExp} `re` Matching regex - * @return {Function} - */ - -utils.matchBasename = function(re) { - return function(filepath) { - return re.test(filepath) || re.test(path.basename(filepath)); - }; -}; - -/** - * Returns the given value unchanced. - * @return {any} - */ - -utils.identity = function(val) { - return val; -}; - -/** - * Determines the filepath to return based on the provided options. - * @return {any} - */ - -utils.value = function(str, unixify, options) { - if (options && options.unixify === false) { - return str; - } - if (options && typeof options.unixify === 'function') { - return options.unixify(str); - } - return unixify(str); -}; - -/** - * Returns a function that normalizes slashes in a string to forward - * slashes, strips `./` from beginning of paths, and optionally unescapes - * special characters. - * @return {Function} - */ - -utils.unixify = function(options) { - var opts = options || {}; - return function(filepath) { - if (opts.stripPrefix !== false) { - filepath = utils.stripPrefix(filepath); - } - if (opts.unescape === true) { - filepath = utils.unescape(filepath); - } - if (opts.unixify === true || utils.isWindows()) { - filepath = utils.toPosixPath(filepath); - } - return filepath; - }; -}; diff --git a/node_modules/nanomatch/node_modules/extend-shallow/LICENSE b/node_modules/nanomatch/node_modules/extend-shallow/LICENSE deleted file mode 100644 index 99c9369..0000000 --- a/node_modules/nanomatch/node_modules/extend-shallow/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014-2015, 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/nanomatch/node_modules/extend-shallow/README.md b/node_modules/nanomatch/node_modules/extend-shallow/README.md deleted file mode 100644 index dee226f..0000000 --- a/node_modules/nanomatch/node_modules/extend-shallow/README.md +++ /dev/null @@ -1,97 +0,0 @@ -# extend-shallow [![NPM version](https://img.shields.io/npm/v/extend-shallow.svg?style=flat)](https://www.npmjs.com/package/extend-shallow) [![NPM monthly downloads](https://img.shields.io/npm/dm/extend-shallow.svg?style=flat)](https://npmjs.org/package/extend-shallow) [![NPM total downloads](https://img.shields.io/npm/dt/extend-shallow.svg?style=flat)](https://npmjs.org/package/extend-shallow) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/extend-shallow.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/extend-shallow) - -> Extend an object with the properties of additional objects. node.js/javascript util. - -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 extend-shallow -``` - -## Usage - -```js -var extend = require('extend-shallow'); - -extend({a: 'b'}, {c: 'd'}) -//=> {a: 'b', c: 'd'} -``` - -Pass an empty object to shallow clone: - -```js -var obj = {}; -extend(obj, {a: 'b'}, {c: 'd'}) -//=> {a: 'b', c: 'd'} -``` - -## 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: - -* [extend-shallow](https://www.npmjs.com/package/extend-shallow): Extend an object with the properties of additional objects. node.js/javascript util. | [homepage](https://github.com/jonschlinkert/extend-shallow "Extend an object with the properties of additional objects. node.js/javascript util.") -* [for-in](https://www.npmjs.com/package/for-in): Iterate over the own and inherited enumerable properties of an object, and return an object… [more](https://github.com/jonschlinkert/for-in) | [homepage](https://github.com/jonschlinkert/for-in "Iterate over the own and inherited enumerable properties of an object, and return an object with properties that evaluate to true from the callback. Exit early by returning `false`. JavaScript/Node.js") -* [for-own](https://www.npmjs.com/package/for-own): Iterate over the own enumerable properties of an object, and return an object with properties… [more](https://github.com/jonschlinkert/for-own) | [homepage](https://github.com/jonschlinkert/for-own "Iterate over the own enumerable properties of an object, and return an object with properties that evaluate to true from the callback. Exit early by returning `false`. JavaScript/Node.js.") -* [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.") -* [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** | -| --- | --- | -| 33 | [jonschlinkert](https://github.com/jonschlinkert) | -| 1 | [pdehaan](https://github.com/pdehaan) | - -### Author - -**Jon Schlinkert** - -* [github/jonschlinkert](https://github.com/jonschlinkert) -* [twitter/jonschlinkert](https://twitter.com/jonschlinkert) - -### License - -Copyright © 2017, [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 November 19, 2017._ \ No newline at end of file diff --git a/node_modules/nanomatch/node_modules/extend-shallow/index.js b/node_modules/nanomatch/node_modules/extend-shallow/index.js deleted file mode 100644 index c9582f8..0000000 --- a/node_modules/nanomatch/node_modules/extend-shallow/index.js +++ /dev/null @@ -1,60 +0,0 @@ -'use strict'; - -var isExtendable = require('is-extendable'); -var assignSymbols = require('assign-symbols'); - -module.exports = Object.assign || function(obj/*, objects*/) { - if (obj === null || typeof obj === 'undefined') { - throw new TypeError('Cannot convert undefined or null to object'); - } - if (!isObject(obj)) { - obj = {}; - } - for (var i = 1; i < arguments.length; i++) { - var val = arguments[i]; - if (isString(val)) { - val = toObject(val); - } - if (isObject(val)) { - assign(obj, val); - assignSymbols(obj, val); - } - } - return obj; -}; - -function assign(a, b) { - for (var key in b) { - if (hasOwn(b, key)) { - a[key] = b[key]; - } - } -} - -function isString(val) { - return (val && typeof val === 'string'); -} - -function toObject(str) { - var obj = {}; - for (var i in str) { - obj[i] = str[i]; - } - return obj; -} - -function isObject(val) { - return (val && typeof val === 'object') || isExtendable(val); -} - -/** - * Returns true if the given `key` is an own property of `obj`. - */ - -function hasOwn(obj, key) { - return Object.prototype.hasOwnProperty.call(obj, key); -} - -function isEnum(obj, key) { - return Object.prototype.propertyIsEnumerable.call(obj, key); -} diff --git a/node_modules/nanomatch/node_modules/extend-shallow/package.json b/node_modules/nanomatch/node_modules/extend-shallow/package.json deleted file mode 100644 index e5e9105..0000000 --- a/node_modules/nanomatch/node_modules/extend-shallow/package.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "name": "extend-shallow", - "description": "Extend an object with the properties of additional objects. node.js/javascript util.", - "version": "3.0.2", - "homepage": "https://github.com/jonschlinkert/extend-shallow", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "contributors": [ - "Jon Schlinkert (http://twitter.com/jonschlinkert)", - "Peter deHaan (http://about.me/peterdehaan)" - ], - "repository": "jonschlinkert/extend-shallow", - "bugs": { - "url": "https://github.com/jonschlinkert/extend-shallow/issues" - }, - "license": "MIT", - "files": [ - "index.js" - ], - "main": "index.js", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "devDependencies": { - "array-slice": "^1.0.0", - "benchmarked": "^2.0.0", - "for-own": "^1.0.0", - "gulp-format-md": "^1.0.0", - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.1", - "minimist": "^1.2.0", - "mocha": "^3.5.3", - "object-assign": "^4.1.1" - }, - "keywords": [ - "assign", - "clone", - "extend", - "merge", - "obj", - "object", - "object-assign", - "object.assign", - "prop", - "properties", - "property", - "props", - "shallow", - "util", - "utility", - "utils", - "value" - ], - "verb": { - "toc": false, - "layout": "default", - "tasks": [ - "readme" - ], - "related": { - "list": [ - "extend-shallow", - "for-in", - "for-own", - "is-plain-object", - "isobject", - "kind-of" - ] - }, - "plugins": [ - "gulp-format-md" - ], - "lint": { - "reflinks": true - } - } -} diff --git a/node_modules/nanomatch/node_modules/is-extendable/LICENSE b/node_modules/nanomatch/node_modules/is-extendable/LICENSE deleted file mode 100644 index c0d7f13..0000000 --- a/node_modules/nanomatch/node_modules/is-extendable/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015-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. \ No newline at end of file diff --git a/node_modules/nanomatch/node_modules/is-extendable/README.md b/node_modules/nanomatch/node_modules/is-extendable/README.md deleted file mode 100644 index 875b56a..0000000 --- a/node_modules/nanomatch/node_modules/is-extendable/README.md +++ /dev/null @@ -1,88 +0,0 @@ -# is-extendable [![NPM version](https://img.shields.io/npm/v/is-extendable.svg?style=flat)](https://www.npmjs.com/package/is-extendable) [![NPM monthly downloads](https://img.shields.io/npm/dm/is-extendable.svg?style=flat)](https://npmjs.org/package/is-extendable) [![NPM total downloads](https://img.shields.io/npm/dt/is-extendable.svg?style=flat)](https://npmjs.org/package/is-extendable) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/is-extendable.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/is-extendable) - -> Returns true if a value is a plain object, array or function. - -## Install - -Install with [npm](https://www.npmjs.com/): - -```sh -$ npm install --save is-extendable -``` - -## Usage - -```js -var isExtendable = require('is-extendable'); -``` - -Returns true if the value is any of the following: - -* array -* plain object -* function - -## Notes - -All objects in JavaScript can have keys, but it's a pain to check for this, since we ether need to verify that the value is not `null` or `undefined` and: - -* the value is not a primitive, or -* that the object is a plain object, function or array - -Also note that an `extendable` object is not the same as an [extensible object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isExtensible), which is one that (in es6) is not sealed, frozen, or marked as non-extensible using `preventExtensions`. - -## Release history - -### v1.0.0 - 2017/07/20 - -**Breaking changes** - -* No longer considers date, regex or error objects to be extendable - -## About - -### Related projects - -* [assign-deep](https://www.npmjs.com/package/assign-deep): Deeply assign the enumerable properties and/or es6 Symbol properies of source objects to the target… [more](https://github.com/jonschlinkert/assign-deep) | [homepage](https://github.com/jonschlinkert/assign-deep "Deeply assign the enumerable properties and/or es6 Symbol properies of source objects to the target (first) object.") -* [is-equal-shallow](https://www.npmjs.com/package/is-equal-shallow): Does a shallow comparison of two objects, returning false if the keys or values differ. | [homepage](https://github.com/jonschlinkert/is-equal-shallow "Does a shallow comparison of two objects, returning false if the keys or values differ.") -* [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.") -* [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.") - -### Contributing - -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). - -### 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 -``` - -### 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 -``` - -### Author - -**Jon Schlinkert** - -* [github/jonschlinkert](https://github.com/jonschlinkert) -* [twitter/jonschlinkert](https://twitter.com/jonschlinkert) - -### License - -Copyright © 2017, [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 July 20, 2017._ \ No newline at end of file diff --git a/node_modules/nanomatch/node_modules/is-extendable/index.d.ts b/node_modules/nanomatch/node_modules/is-extendable/index.d.ts deleted file mode 100644 index b96d507..0000000 --- a/node_modules/nanomatch/node_modules/is-extendable/index.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export = isExtendable; - -declare function isExtendable(val: any): boolean; - -declare namespace isExtendable {} diff --git a/node_modules/nanomatch/node_modules/is-extendable/index.js b/node_modules/nanomatch/node_modules/is-extendable/index.js deleted file mode 100644 index a8b26ad..0000000 --- a/node_modules/nanomatch/node_modules/is-extendable/index.js +++ /dev/null @@ -1,14 +0,0 @@ -/*! - * is-extendable - * - * Copyright (c) 2015-2017, Jon Schlinkert. - * Released under the MIT License. - */ - -'use strict'; - -var isPlainObject = require('is-plain-object'); - -module.exports = function isExtendable(val) { - return isPlainObject(val) || typeof val === 'function' || Array.isArray(val); -}; diff --git a/node_modules/nanomatch/node_modules/is-extendable/package.json b/node_modules/nanomatch/node_modules/is-extendable/package.json deleted file mode 100644 index 2aaab65..0000000 --- a/node_modules/nanomatch/node_modules/is-extendable/package.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "name": "is-extendable", - "description": "Returns true if a value is a plain object, array or function.", - "version": "1.0.1", - "homepage": "https://github.com/jonschlinkert/is-extendable", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "repository": "jonschlinkert/is-extendable", - "bugs": { - "url": "https://github.com/jonschlinkert/is-extendable/issues" - }, - "license": "MIT", - "files": [ - "index.js", - "index.d.ts" - ], - "main": "index.js", - "types": "index.d.ts", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "devDependencies": { - "gulp-format-md": "^1.0.0", - "mocha": "^3.4.2" - }, - "keywords": [ - "array", - "assign", - "check", - "date", - "extend", - "extendable", - "extensible", - "function", - "is", - "object", - "regex", - "test" - ], - "verb": { - "related": { - "list": [ - "assign-deep", - "is-equal-shallow", - "is-plain-object", - "isobject", - "kind-of" - ] - }, - "toc": false, - "layout": "default", - "tasks": [ - "readme" - ], - "plugins": [ - "gulp-format-md" - ], - "lint": { - "reflinks": true - } - } -} diff --git a/node_modules/nanomatch/node_modules/kind-of/CHANGELOG.md b/node_modules/nanomatch/node_modules/kind-of/CHANGELOG.md deleted file mode 100644 index 01687d5..0000000 --- a/node_modules/nanomatch/node_modules/kind-of/CHANGELOG.md +++ /dev/null @@ -1,160 +0,0 @@ -# Release history - -All notable changes to this project will be documented in this file. - -The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) -and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). - -
    - Guiding Principles - -- Changelogs are for humans, not machines. -- There should be an entry for every single version. -- The same types of changes should be grouped. -- Versions and sections should be linkable. -- The latest version comes first. -- The release date of each versions is displayed. -- Mention whether you follow Semantic Versioning. - -
    - -
    - Types of changes - -Changelog entries are classified using the following labels _(from [keep-a-changelog](http://keepachangelog.com/)_): - -- `Added` for new features. -- `Changed` for changes in existing functionality. -- `Deprecated` for soon-to-be removed features. -- `Removed` for now removed features. -- `Fixed` for any bug fixes. -- `Security` in case of vulnerabilities. - -
    - -## [6.0.3] - 2020-01-16 - -- Merge pull request #31 for issue #30 - -## [6.0.0] - 2017-10-13 - -- refactor code to be more performant -- refactor benchmarks - -## [5.1.0] - 2017-10-13 - -**Added** - -- Merge pull request #15 from aretecode/patch-1 -- adds support and tests for string & array iterators - -**Changed** - -- updates benchmarks - -## [5.0.2] - 2017-08-02 - -- Merge pull request #14 from struct78/master -- Added `undefined` check - -## [5.0.0] - 2017-06-21 - -- Merge pull request #12 from aretecode/iterator -- Set Iterator + Map Iterator -- streamline `isbuffer`, minor edits - -## [4.0.0] - 2017-05-19 - -- Merge pull request #8 from tunnckoCore/master -- update deps - -## [3.2.2] - 2017-05-16 - -- fix version - -## [3.2.1] - 2017-05-16 - -- add browserify - -## [3.2.0] - 2017-04-25 - -- Merge pull request #10 from ksheedlo/unrequire-buffer -- add `promise` support and tests -- Remove unnecessary `Buffer` check - -## [3.1.0] - 2016-12-07 - -- Merge pull request #7 from laggingreflex/err -- add support for `error` and tests -- run update - -## [3.0.4] - 2016-07-29 - -- move tests -- run update - -## [3.0.3] - 2016-05-03 - -- fix prepublish script -- remove unused dep - -## [3.0.0] - 2015-11-17 - -- add typed array support -- Merge pull request #5 from miguelmota/typed-arrays -- adds new tests - -## [2.0.1] - 2015-08-21 - -- use `is-buffer` module - -## [2.0.0] - 2015-05-31 - -- Create fallback for `Array.isArray` if used as a browser package -- Merge pull request #2 from dtothefp/patch-1 -- Merge pull request #3 from pdehaan/patch-1 -- Merge branch 'master' of https://github.com/chorks/kind-of into chorks-master -- optimizations, mostly date and regex - -## [1.1.0] - 2015-02-09 - -- adds `buffer` support -- adds tests for `buffer` - -## [1.0.0] - 2015-01-19 - -- update benchmarks -- optimizations based on benchmarks - -## [0.1.2] - 2014-10-26 - -- return `typeof` value if it's not an object. very slight speed improvement -- use `.slice` -- adds benchmarks - -## [0.1.0] - 2014-9-26 - -- first commit - -[6.0.0]: https://github.com/jonschlinkert/kind-of/compare/5.1.0...6.0.0 -[5.1.0]: https://github.com/jonschlinkert/kind-of/compare/5.0.2...5.1.0 -[5.0.2]: https://github.com/jonschlinkert/kind-of/compare/5.0.1...5.0.2 -[5.0.1]: https://github.com/jonschlinkert/kind-of/compare/5.0.0...5.0.1 -[5.0.0]: https://github.com/jonschlinkert/kind-of/compare/4.0.0...5.0.0 -[4.0.0]: https://github.com/jonschlinkert/kind-of/compare/3.2.2...4.0.0 -[3.2.2]: https://github.com/jonschlinkert/kind-of/compare/3.2.1...3.2.2 -[3.2.1]: https://github.com/jonschlinkert/kind-of/compare/3.2.0...3.2.1 -[3.2.0]: https://github.com/jonschlinkert/kind-of/compare/3.1.0...3.2.0 -[3.1.0]: https://github.com/jonschlinkert/kind-of/compare/3.0.4...3.1.0 -[3.0.4]: https://github.com/jonschlinkert/kind-of/compare/3.0.3...3.0.4 -[3.0.3]: https://github.com/jonschlinkert/kind-of/compare/3.0.0...3.0.3 -[3.0.0]: https://github.com/jonschlinkert/kind-of/compare/2.0.1...3.0.0 -[2.0.1]: https://github.com/jonschlinkert/kind-of/compare/2.0.0...2.0.1 -[2.0.0]: https://github.com/jonschlinkert/kind-of/compare/1.1.0...2.0.0 -[1.1.0]: https://github.com/jonschlinkert/kind-of/compare/1.0.0...1.1.0 -[1.0.0]: https://github.com/jonschlinkert/kind-of/compare/0.1.2...1.0.0 -[0.1.2]: https://github.com/jonschlinkert/kind-of/compare/0.1.0...0.1.2 -[0.1.0]: https://github.com/jonschlinkert/kind-of/commit/2fae09b0b19b1aadb558e9be39f0c3ef6034eb87 - -[Unreleased]: https://github.com/jonschlinkert/kind-of/compare/0.1.2...HEAD -[keep-a-changelog]: https://github.com/olivierlacan/keep-a-changelog \ No newline at end of file diff --git a/node_modules/nanomatch/node_modules/kind-of/LICENSE b/node_modules/nanomatch/node_modules/kind-of/LICENSE deleted file mode 100644 index 3f2eca1..0000000 --- a/node_modules/nanomatch/node_modules/kind-of/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -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/nanomatch/node_modules/kind-of/README.md b/node_modules/nanomatch/node_modules/kind-of/README.md deleted file mode 100644 index 0411dc5..0000000 --- a/node_modules/nanomatch/node_modules/kind-of/README.md +++ /dev/null @@ -1,367 +0,0 @@ -# kind-of [![NPM version](https://img.shields.io/npm/v/kind-of.svg?style=flat)](https://www.npmjs.com/package/kind-of) [![NPM monthly downloads](https://img.shields.io/npm/dm/kind-of.svg?style=flat)](https://npmjs.org/package/kind-of) [![NPM total downloads](https://img.shields.io/npm/dt/kind-of.svg?style=flat)](https://npmjs.org/package/kind-of) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/kind-of.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/kind-of) - -> Get the native type of a value. - -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 kind-of -``` - -Install with [bower](https://bower.io/) - -```sh -$ bower install kind-of --save -``` - -## Why use this? - -1. [it's fast](#benchmarks) | [optimizations](#optimizations) -2. [better type checking](#better-type-checking) - -## Usage - -> es5, es6, and browser ready - -```js -var kindOf = require('kind-of'); - -kindOf(undefined); -//=> 'undefined' - -kindOf(null); -//=> 'null' - -kindOf(true); -//=> 'boolean' - -kindOf(false); -//=> 'boolean' - -kindOf(new Buffer('')); -//=> 'buffer' - -kindOf(42); -//=> 'number' - -kindOf('str'); -//=> 'string' - -kindOf(arguments); -//=> 'arguments' - -kindOf({}); -//=> 'object' - -kindOf(Object.create(null)); -//=> 'object' - -kindOf(new Test()); -//=> 'object' - -kindOf(new Date()); -//=> 'date' - -kindOf([1, 2, 3]); -//=> 'array' - -kindOf(/foo/); -//=> 'regexp' - -kindOf(new RegExp('foo')); -//=> 'regexp' - -kindOf(new Error('error')); -//=> 'error' - -kindOf(function () {}); -//=> 'function' - -kindOf(function * () {}); -//=> 'generatorfunction' - -kindOf(Symbol('str')); -//=> 'symbol' - -kindOf(new Map()); -//=> 'map' - -kindOf(new WeakMap()); -//=> 'weakmap' - -kindOf(new Set()); -//=> 'set' - -kindOf(new WeakSet()); -//=> 'weakset' - -kindOf(new Int8Array()); -//=> 'int8array' - -kindOf(new Uint8Array()); -//=> 'uint8array' - -kindOf(new Uint8ClampedArray()); -//=> 'uint8clampedarray' - -kindOf(new Int16Array()); -//=> 'int16array' - -kindOf(new Uint16Array()); -//=> 'uint16array' - -kindOf(new Int32Array()); -//=> 'int32array' - -kindOf(new Uint32Array()); -//=> 'uint32array' - -kindOf(new Float32Array()); -//=> 'float32array' - -kindOf(new Float64Array()); -//=> 'float64array' -``` - -## Benchmarks - -Benchmarked against [typeof](http://github.com/CodingFu/typeof) and [type-of](https://github.com/ForbesLindesay/type-of). - -```bash -# arguments (32 bytes) - kind-of x 17,024,098 ops/sec ±1.90% (86 runs sampled) - lib-type-of x 11,926,235 ops/sec ±1.34% (83 runs sampled) - lib-typeof x 9,245,257 ops/sec ±1.22% (87 runs sampled) - - fastest is kind-of (by 161% avg) - -# array (22 bytes) - kind-of x 17,196,492 ops/sec ±1.07% (88 runs sampled) - lib-type-of x 8,838,283 ops/sec ±1.02% (87 runs sampled) - lib-typeof x 8,677,848 ops/sec ±0.87% (87 runs sampled) - - fastest is kind-of (by 196% avg) - -# boolean (24 bytes) - kind-of x 16,841,600 ops/sec ±1.10% (86 runs sampled) - lib-type-of x 8,096,787 ops/sec ±0.95% (87 runs sampled) - lib-typeof x 8,423,345 ops/sec ±1.15% (86 runs sampled) - - fastest is kind-of (by 204% avg) - -# buffer (38 bytes) - kind-of x 14,848,060 ops/sec ±1.05% (86 runs sampled) - lib-type-of x 3,671,577 ops/sec ±1.49% (87 runs sampled) - lib-typeof x 8,360,236 ops/sec ±1.24% (86 runs sampled) - - fastest is kind-of (by 247% avg) - -# date (30 bytes) - kind-of x 16,067,761 ops/sec ±1.58% (86 runs sampled) - lib-type-of x 8,954,436 ops/sec ±1.40% (87 runs sampled) - lib-typeof x 8,488,307 ops/sec ±1.51% (84 runs sampled) - - fastest is kind-of (by 184% avg) - -# error (36 bytes) - kind-of x 9,634,090 ops/sec ±1.12% (89 runs sampled) - lib-type-of x 7,735,624 ops/sec ±1.32% (86 runs sampled) - lib-typeof x 7,442,160 ops/sec ±1.11% (90 runs sampled) - - fastest is kind-of (by 127% avg) - -# function (34 bytes) - kind-of x 10,031,494 ops/sec ±1.27% (86 runs sampled) - lib-type-of x 9,502,757 ops/sec ±1.17% (89 runs sampled) - lib-typeof x 8,278,985 ops/sec ±1.08% (88 runs sampled) - - fastest is kind-of (by 113% avg) - -# null (24 bytes) - kind-of x 18,159,808 ops/sec ±1.92% (86 runs sampled) - lib-type-of x 12,927,635 ops/sec ±1.01% (88 runs sampled) - lib-typeof x 7,958,234 ops/sec ±1.21% (89 runs sampled) - - fastest is kind-of (by 174% avg) - -# number (22 bytes) - kind-of x 17,846,779 ops/sec ±0.91% (85 runs sampled) - lib-type-of x 3,316,636 ops/sec ±1.19% (86 runs sampled) - lib-typeof x 2,329,477 ops/sec ±2.21% (85 runs sampled) - - fastest is kind-of (by 632% avg) - -# object-plain (47 bytes) - kind-of x 7,085,155 ops/sec ±1.05% (88 runs sampled) - lib-type-of x 8,870,930 ops/sec ±1.06% (83 runs sampled) - lib-typeof x 8,716,024 ops/sec ±1.05% (87 runs sampled) - - fastest is lib-type-of (by 112% avg) - -# regex (25 bytes) - kind-of x 14,196,052 ops/sec ±1.65% (84 runs sampled) - lib-type-of x 9,554,164 ops/sec ±1.25% (88 runs sampled) - lib-typeof x 8,359,691 ops/sec ±1.07% (87 runs sampled) - - fastest is kind-of (by 158% avg) - -# string (33 bytes) - kind-of x 16,131,428 ops/sec ±1.41% (85 runs sampled) - lib-type-of x 7,273,172 ops/sec ±1.05% (87 runs sampled) - lib-typeof x 7,382,635 ops/sec ±1.17% (85 runs sampled) - - fastest is kind-of (by 220% avg) - -# symbol (34 bytes) - kind-of x 17,011,537 ops/sec ±1.24% (86 runs sampled) - lib-type-of x 3,492,454 ops/sec ±1.23% (89 runs sampled) - lib-typeof x 7,471,235 ops/sec ±2.48% (87 runs sampled) - - fastest is kind-of (by 310% avg) - -# template-strings (36 bytes) - kind-of x 15,434,250 ops/sec ±1.46% (83 runs sampled) - lib-type-of x 7,157,907 ops/sec ±0.97% (87 runs sampled) - lib-typeof x 7,517,986 ops/sec ±0.92% (86 runs sampled) - - fastest is kind-of (by 210% avg) - -# undefined (29 bytes) - kind-of x 19,167,115 ops/sec ±1.71% (87 runs sampled) - lib-type-of x 15,477,740 ops/sec ±1.63% (85 runs sampled) - lib-typeof x 19,075,495 ops/sec ±1.17% (83 runs sampled) - - fastest is lib-typeof,kind-of - -``` - -## Optimizations - -In 7 out of 8 cases, this library is 2x-10x faster than other top libraries included in the benchmarks. There are a few things that lead to this performance advantage, none of them hard and fast rules, but all of them simple and repeatable in almost any code library: - -1. Optimize around the fastest and most common use cases first. Of course, this will change from project-to-project, but I took some time to understand how and why `typeof` checks were being used in my own libraries and other libraries I use a lot. -2. Optimize around bottlenecks - In other words, the order in which conditionals are implemented is significant, because each check is only as fast as the failing checks that came before it. Here, the biggest bottleneck by far is checking for plain objects (an object that was created by the `Object` constructor). I opted to make this check happen by process of elimination rather than brute force up front (e.g. by using something like `val.constructor.name`), so that every other type check would not be penalized it. -3. Don't do uneccessary processing - why do `.slice(8, -1).toLowerCase();` just to get the word `regex`? It's much faster to do `if (type === '[object RegExp]') return 'regex'` -4. There is no reason to make the code in a microlib as terse as possible, just to win points for making it shorter. It's always better to favor performant code over terse code. You will always only be using a single `require()` statement to use the library anyway, regardless of how the code is written. - -## Better type checking - -kind-of seems to be more consistently "correct" than other type checking libs I've looked at. For example, here are some differing results from other popular libs: - -### [typeof](https://github.com/CodingFu/typeof) lib - -Incorrectly identifies instances of custom constructors (pretty common): - -```js -var typeOf = require('typeof'); -function Test() {} -console.log(typeOf(new Test())); -//=> 'test' -``` - -Returns `object` instead of `arguments`: - -```js -function foo() { - console.log(typeOf(arguments)) //=> 'object' -} -foo(); -``` - -### [type-of](https://github.com/ForbesLindesay/type-of) lib - -Incorrectly returns `object` for generator functions, buffers, `Map`, `Set`, `WeakMap` and `WeakSet`: - -```js -function * foo() {} -console.log(typeOf(foo)); -//=> 'object' -console.log(typeOf(new Buffer(''))); -//=> 'object' -console.log(typeOf(new Map())); -//=> 'object' -console.log(typeOf(new Set())); -//=> 'object' -console.log(typeOf(new WeakMap())); -//=> 'object' -console.log(typeOf(new WeakSet())); -//=> 'object' -``` - -## 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-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/micromatch/is-glob) | [homepage](https://github.com/micromatch/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") -* [is-number](https://www.npmjs.com/package/is-number): Returns true if a number or string value is a finite number. Useful for regex… [more](https://github.com/jonschlinkert/is-number) | [homepage](https://github.com/jonschlinkert/is-number "Returns true if a number or string value is a finite number. Useful for regex matches, parsing, user input, etc.") -* [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. ") - -### Contributors - -| **Commits** | **Contributor** | -| --- | --- | -| 102 | [jonschlinkert](https://github.com/jonschlinkert) | -| 3 | [aretecode](https://github.com/aretecode) | -| 2 | [miguelmota](https://github.com/miguelmota) | -| 1 | [doowb](https://github.com/doowb) | -| 1 | [dtothefp](https://github.com/dtothefp) | -| 1 | [ianstormtaylor](https://github.com/ianstormtaylor) | -| 1 | [ksheedlo](https://github.com/ksheedlo) | -| 1 | [pdehaan](https://github.com/pdehaan) | -| 1 | [laggingreflex](https://github.com/laggingreflex) | -| 1 | [tunnckoCore](https://github.com/tunnckoCore) | -| 1 | [xiaofen9](https://github.com/xiaofen9) | - -### Author - -**Jon Schlinkert** - -* [GitHub Profile](https://github.com/jonschlinkert) -* [Twitter Profile](https://twitter.com/jonschlinkert) -* [LinkedIn Profile](https://linkedin.com/in/jonschlinkert) - -### License - -Copyright © 2020, [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 January 16, 2020._ \ No newline at end of file diff --git a/node_modules/nanomatch/node_modules/kind-of/index.js b/node_modules/nanomatch/node_modules/kind-of/index.js deleted file mode 100644 index dfa799b..0000000 --- a/node_modules/nanomatch/node_modules/kind-of/index.js +++ /dev/null @@ -1,129 +0,0 @@ -var toString = Object.prototype.toString; - -module.exports = function kindOf(val) { - if (val === void 0) return 'undefined'; - if (val === null) return 'null'; - - var type = typeof val; - if (type === 'boolean') return 'boolean'; - if (type === 'string') return 'string'; - if (type === 'number') return 'number'; - if (type === 'symbol') return 'symbol'; - if (type === 'function') { - return isGeneratorFn(val) ? 'generatorfunction' : 'function'; - } - - if (isArray(val)) return 'array'; - if (isBuffer(val)) return 'buffer'; - if (isArguments(val)) return 'arguments'; - if (isDate(val)) return 'date'; - if (isError(val)) return 'error'; - if (isRegexp(val)) return 'regexp'; - - switch (ctorName(val)) { - case 'Symbol': return 'symbol'; - case 'Promise': return 'promise'; - - // Set, Map, WeakSet, WeakMap - case 'WeakMap': return 'weakmap'; - case 'WeakSet': return 'weakset'; - case 'Map': return 'map'; - case 'Set': return 'set'; - - // 8-bit typed arrays - case 'Int8Array': return 'int8array'; - case 'Uint8Array': return 'uint8array'; - case 'Uint8ClampedArray': return 'uint8clampedarray'; - - // 16-bit typed arrays - case 'Int16Array': return 'int16array'; - case 'Uint16Array': return 'uint16array'; - - // 32-bit typed arrays - case 'Int32Array': return 'int32array'; - case 'Uint32Array': return 'uint32array'; - case 'Float32Array': return 'float32array'; - case 'Float64Array': return 'float64array'; - } - - if (isGeneratorObj(val)) { - return 'generator'; - } - - // Non-plain objects - type = toString.call(val); - switch (type) { - case '[object Object]': return 'object'; - // iterators - case '[object Map Iterator]': return 'mapiterator'; - case '[object Set Iterator]': return 'setiterator'; - case '[object String Iterator]': return 'stringiterator'; - case '[object Array Iterator]': return 'arrayiterator'; - } - - // other - return type.slice(8, -1).toLowerCase().replace(/\s/g, ''); -}; - -function ctorName(val) { - return typeof val.constructor === 'function' ? val.constructor.name : null; -} - -function isArray(val) { - if (Array.isArray) return Array.isArray(val); - return val instanceof Array; -} - -function isError(val) { - return val instanceof Error || (typeof val.message === 'string' && val.constructor && typeof val.constructor.stackTraceLimit === 'number'); -} - -function isDate(val) { - if (val instanceof Date) return true; - return typeof val.toDateString === 'function' - && typeof val.getDate === 'function' - && typeof val.setDate === 'function'; -} - -function isRegexp(val) { - if (val instanceof RegExp) return true; - return typeof val.flags === 'string' - && typeof val.ignoreCase === 'boolean' - && typeof val.multiline === 'boolean' - && typeof val.global === 'boolean'; -} - -function isGeneratorFn(name, val) { - return ctorName(name) === 'GeneratorFunction'; -} - -function isGeneratorObj(val) { - return typeof val.throw === 'function' - && typeof val.return === 'function' - && typeof val.next === 'function'; -} - -function isArguments(val) { - try { - if (typeof val.length === 'number' && typeof val.callee === 'function') { - return true; - } - } catch (err) { - if (err.message.indexOf('callee') !== -1) { - return true; - } - } - return false; -} - -/** - * If you need to support Safari 5-7 (8-10 yr-old browser), - * take a look at https://github.com/feross/is-buffer - */ - -function isBuffer(val) { - if (val.constructor && typeof val.constructor.isBuffer === 'function') { - return val.constructor.isBuffer(val); - } - return false; -} diff --git a/node_modules/nanomatch/node_modules/kind-of/package.json b/node_modules/nanomatch/node_modules/kind-of/package.json deleted file mode 100644 index 5820cad..0000000 --- a/node_modules/nanomatch/node_modules/kind-of/package.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "name": "kind-of", - "description": "Get the native type of a value.", - "version": "6.0.3", - "homepage": "https://github.com/jonschlinkert/kind-of", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "contributors": [ - "David Fox-Powell (https://dtothefp.github.io/me)", - "James (https://twitter.com/aretecode)", - "Jon Schlinkert (http://twitter.com/jonschlinkert)", - "Ken Sheedlo (kensheedlo.com)", - "laggingreflex (https://github.com/laggingreflex)", - "Miguel Mota (https://miguelmota.com)", - "Peter deHaan (http://about.me/peterdehaan)", - "tunnckoCore (https://i.am.charlike.online)" - ], - "repository": "jonschlinkert/kind-of", - "bugs": { - "url": "https://github.com/jonschlinkert/kind-of/issues" - }, - "license": "MIT", - "files": [ - "index.js" - ], - "main": "index.js", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha", - "prepublish": "browserify -o browser.js -e index.js -s index --bare" - }, - "devDependencies": { - "benchmarked": "^2.0.0", - "browserify": "^14.4.0", - "gulp-format-md": "^1.0.0", - "mocha": "^4.0.1", - "write": "^1.0.3" - }, - "keywords": [ - "arguments", - "array", - "boolean", - "check", - "date", - "function", - "is", - "is-type", - "is-type-of", - "kind", - "kind-of", - "number", - "object", - "of", - "regexp", - "string", - "test", - "type", - "type-of", - "typeof", - "types" - ], - "verb": { - "toc": false, - "layout": "default", - "tasks": [ - "readme" - ], - "plugins": [ - "gulp-format-md" - ], - "lint": { - "reflinks": true - }, - "related": { - "list": [ - "is-glob", - "is-number", - "is-primitive" - ] - }, - "reflinks": [ - "type-of", - "typeof", - "verb" - ] - } -} diff --git a/node_modules/nanomatch/package.json b/node_modules/nanomatch/package.json deleted file mode 100644 index 0a85f0a..0000000 --- a/node_modules/nanomatch/package.json +++ /dev/null @@ -1,134 +0,0 @@ -{ - "name": "nanomatch", - "description": "Fast, minimal glob matcher for node.js. Similar to micromatch, minimatch and multimatch, but complete Bash 4.3 wildcard support only (no support for exglobs, posix brackets or braces)", - "version": "1.2.13", - "homepage": "https://github.com/micromatch/nanomatch", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "contributors": [ - "Devon Govett (http://badassjs.com)", - "Jon Schlinkert (http://twitter.com/jonschlinkert)" - ], - "repository": "micromatch/nanomatch", - "bugs": { - "url": "https://github.com/micromatch/nanomatch/issues" - }, - "license": "MIT", - "files": [ - "index.js", - "lib" - ], - "main": "index.js", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "devDependencies": { - "bash-match": "^1.0.2", - "for-own": "^1.0.0", - "gulp": "^3.9.1", - "gulp-format-md": "^1.0.0", - "gulp-istanbul": "^1.1.3", - "gulp-mocha": "^5.0.0", - "helper-changelog": "^0.3.0", - "minimatch": "^3.0.4", - "minimist": "^1.2.0", - "mocha": "^3.5.3", - "multimatch": "^2.1.0" - }, - "keywords": [ - "bash", - "expand", - "expansion", - "expression", - "file", - "files", - "filter", - "find", - "glob", - "globbing", - "globs", - "globstar", - "match", - "matcher", - "matches", - "matching", - "micromatch", - "minimatch", - "multimatch", - "nanomatch", - "path", - "pattern", - "patterns", - "regex", - "regexp", - "regular", - "shell", - "wildcard" - ], - "lintDeps": { - "dependencies": { - "options": { - "lock": { - "snapdragon": "^0.8.1" - } - } - }, - "devDependencies": { - "files": { - "options": { - "ignore": [ - "benchmark/**" - ] - } - } - } - }, - "verb": { - "toc": "collapsible", - "layout": "default", - "tasks": [ - "readme" - ], - "helpers": [ - "helper-changelog" - ], - "plugins": [ - "gulp-format-md" - ], - "related": { - "list": [ - "extglob", - "is-extglob", - "is-glob", - "micromatch" - ] - }, - "reflinks": [ - "expand-brackets", - "expand-tilde", - "glob-object", - "micromatch", - "minimatch", - "options", - "snapdragon" - ], - "lint": { - "reflinks": true - } - } -} diff --git a/node_modules/negotiator/HISTORY.md b/node_modules/negotiator/HISTORY.md deleted file mode 100644 index a9a5449..0000000 --- a/node_modules/negotiator/HISTORY.md +++ /dev/null @@ -1,108 +0,0 @@ -0.6.3 / 2022-01-22 -================== - - * Revert "Lazy-load modules from main entry point" - -0.6.2 / 2019-04-29 -================== - - * Fix sorting charset, encoding, and language with extra parameters - -0.6.1 / 2016-05-02 -================== - - * perf: improve `Accept` parsing speed - * perf: improve `Accept-Charset` parsing speed - * perf: improve `Accept-Encoding` parsing speed - * perf: improve `Accept-Language` parsing speed - -0.6.0 / 2015-09-29 -================== - - * Fix including type extensions in parameters in `Accept` parsing - * Fix parsing `Accept` parameters with quoted equals - * Fix parsing `Accept` parameters with quoted semicolons - * Lazy-load modules from main entry point - * perf: delay type concatenation until needed - * perf: enable strict mode - * perf: hoist regular expressions - * perf: remove closures getting spec properties - * perf: remove a closure from media type parsing - * perf: remove property delete from media type parsing - -0.5.3 / 2015-05-10 -================== - - * Fix media type parameter matching to be case-insensitive - -0.5.2 / 2015-05-06 -================== - - * Fix comparing media types with quoted values - * Fix splitting media types with quoted commas - -0.5.1 / 2015-02-14 -================== - - * Fix preference sorting to be stable for long acceptable lists - -0.5.0 / 2014-12-18 -================== - - * Fix list return order when large accepted list - * Fix missing identity encoding when q=0 exists - * Remove dynamic building of Negotiator class - -0.4.9 / 2014-10-14 -================== - - * Fix error when media type has invalid parameter - -0.4.8 / 2014-09-28 -================== - - * Fix all negotiations to be case-insensitive - * Stable sort preferences of same quality according to client order - * Support Node.js 0.6 - -0.4.7 / 2014-06-24 -================== - - * Handle invalid provided languages - * Handle invalid provided media types - -0.4.6 / 2014-06-11 -================== - - * Order by specificity when quality is the same - -0.4.5 / 2014-05-29 -================== - - * Fix regression in empty header handling - -0.4.4 / 2014-05-29 -================== - - * Fix behaviors when headers are not present - -0.4.3 / 2014-04-16 -================== - - * Handle slashes on media params correctly - -0.4.2 / 2014-02-28 -================== - - * Fix media type sorting - * Handle media types params strictly - -0.4.1 / 2014-01-16 -================== - - * Use most specific matches - -0.4.0 / 2014-01-09 -================== - - * Remove preferred prefix from methods diff --git a/node_modules/negotiator/LICENSE b/node_modules/negotiator/LICENSE deleted file mode 100644 index ea6b9e2..0000000 --- a/node_modules/negotiator/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -(The MIT License) - -Copyright (c) 2012-2014 Federico Romero -Copyright (c) 2012-2014 Isaac Z. Schlueter -Copyright (c) 2014-2015 Douglas Christopher Wilson - -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/negotiator/README.md b/node_modules/negotiator/README.md deleted file mode 100644 index 82915e5..0000000 --- a/node_modules/negotiator/README.md +++ /dev/null @@ -1,203 +0,0 @@ -# negotiator - -[![NPM Version][npm-image]][npm-url] -[![NPM Downloads][downloads-image]][downloads-url] -[![Node.js Version][node-version-image]][node-version-url] -[![Build Status][github-actions-ci-image]][github-actions-ci-url] -[![Test Coverage][coveralls-image]][coveralls-url] - -An HTTP content negotiator for Node.js - -## Installation - -```sh -$ npm install negotiator -``` - -## API - -```js -var Negotiator = require('negotiator') -``` - -### Accept Negotiation - -```js -availableMediaTypes = ['text/html', 'text/plain', 'application/json'] - -// The negotiator constructor receives a request object -negotiator = new Negotiator(request) - -// Let's say Accept header is 'text/html, application/*;q=0.2, image/jpeg;q=0.8' - -negotiator.mediaTypes() -// -> ['text/html', 'image/jpeg', 'application/*'] - -negotiator.mediaTypes(availableMediaTypes) -// -> ['text/html', 'application/json'] - -negotiator.mediaType(availableMediaTypes) -// -> 'text/html' -``` - -You can check a working example at `examples/accept.js`. - -#### Methods - -##### mediaType() - -Returns the most preferred media type from the client. - -##### mediaType(availableMediaType) - -Returns the most preferred media type from a list of available media types. - -##### mediaTypes() - -Returns an array of preferred media types ordered by the client preference. - -##### mediaTypes(availableMediaTypes) - -Returns an array of preferred media types ordered by priority from a list of -available media types. - -### Accept-Language Negotiation - -```js -negotiator = new Negotiator(request) - -availableLanguages = ['en', 'es', 'fr'] - -// Let's say Accept-Language header is 'en;q=0.8, es, pt' - -negotiator.languages() -// -> ['es', 'pt', 'en'] - -negotiator.languages(availableLanguages) -// -> ['es', 'en'] - -language = negotiator.language(availableLanguages) -// -> 'es' -``` - -You can check a working example at `examples/language.js`. - -#### Methods - -##### language() - -Returns the most preferred language from the client. - -##### language(availableLanguages) - -Returns the most preferred language from a list of available languages. - -##### languages() - -Returns an array of preferred languages ordered by the client preference. - -##### languages(availableLanguages) - -Returns an array of preferred languages ordered by priority from a list of -available languages. - -### Accept-Charset Negotiation - -```js -availableCharsets = ['utf-8', 'iso-8859-1', 'iso-8859-5'] - -negotiator = new Negotiator(request) - -// Let's say Accept-Charset header is 'utf-8, iso-8859-1;q=0.8, utf-7;q=0.2' - -negotiator.charsets() -// -> ['utf-8', 'iso-8859-1', 'utf-7'] - -negotiator.charsets(availableCharsets) -// -> ['utf-8', 'iso-8859-1'] - -negotiator.charset(availableCharsets) -// -> 'utf-8' -``` - -You can check a working example at `examples/charset.js`. - -#### Methods - -##### charset() - -Returns the most preferred charset from the client. - -##### charset(availableCharsets) - -Returns the most preferred charset from a list of available charsets. - -##### charsets() - -Returns an array of preferred charsets ordered by the client preference. - -##### charsets(availableCharsets) - -Returns an array of preferred charsets ordered by priority from a list of -available charsets. - -### Accept-Encoding Negotiation - -```js -availableEncodings = ['identity', 'gzip'] - -negotiator = new Negotiator(request) - -// Let's say Accept-Encoding header is 'gzip, compress;q=0.2, identity;q=0.5' - -negotiator.encodings() -// -> ['gzip', 'identity', 'compress'] - -negotiator.encodings(availableEncodings) -// -> ['gzip', 'identity'] - -negotiator.encoding(availableEncodings) -// -> 'gzip' -``` - -You can check a working example at `examples/encoding.js`. - -#### Methods - -##### encoding() - -Returns the most preferred encoding from the client. - -##### encoding(availableEncodings) - -Returns the most preferred encoding from a list of available encodings. - -##### encodings() - -Returns an array of preferred encodings ordered by the client preference. - -##### encodings(availableEncodings) - -Returns an array of preferred encodings ordered by priority from a list of -available encodings. - -## See Also - -The [accepts](https://npmjs.org/package/accepts#readme) module builds on -this module and provides an alternative interface, mime type validation, -and more. - -## License - -[MIT](LICENSE) - -[npm-image]: https://img.shields.io/npm/v/negotiator.svg -[npm-url]: https://npmjs.org/package/negotiator -[node-version-image]: https://img.shields.io/node/v/negotiator.svg -[node-version-url]: https://nodejs.org/en/download/ -[coveralls-image]: https://img.shields.io/coveralls/jshttp/negotiator/master.svg -[coveralls-url]: https://coveralls.io/r/jshttp/negotiator?branch=master -[downloads-image]: https://img.shields.io/npm/dm/negotiator.svg -[downloads-url]: https://npmjs.org/package/negotiator -[github-actions-ci-image]: https://img.shields.io/github/workflow/status/jshttp/negotiator/ci/master?label=ci -[github-actions-ci-url]: https://github.com/jshttp/negotiator/actions/workflows/ci.yml diff --git a/node_modules/negotiator/index.js b/node_modules/negotiator/index.js deleted file mode 100644 index 4788264..0000000 --- a/node_modules/negotiator/index.js +++ /dev/null @@ -1,82 +0,0 @@ -/*! - * negotiator - * Copyright(c) 2012 Federico Romero - * Copyright(c) 2012-2014 Isaac Z. Schlueter - * Copyright(c) 2015 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict'; - -var preferredCharsets = require('./lib/charset') -var preferredEncodings = require('./lib/encoding') -var preferredLanguages = require('./lib/language') -var preferredMediaTypes = require('./lib/mediaType') - -/** - * Module exports. - * @public - */ - -module.exports = Negotiator; -module.exports.Negotiator = Negotiator; - -/** - * Create a Negotiator instance from a request. - * @param {object} request - * @public - */ - -function Negotiator(request) { - if (!(this instanceof Negotiator)) { - return new Negotiator(request); - } - - this.request = request; -} - -Negotiator.prototype.charset = function charset(available) { - var set = this.charsets(available); - return set && set[0]; -}; - -Negotiator.prototype.charsets = function charsets(available) { - return preferredCharsets(this.request.headers['accept-charset'], available); -}; - -Negotiator.prototype.encoding = function encoding(available) { - var set = this.encodings(available); - return set && set[0]; -}; - -Negotiator.prototype.encodings = function encodings(available) { - return preferredEncodings(this.request.headers['accept-encoding'], available); -}; - -Negotiator.prototype.language = function language(available) { - var set = this.languages(available); - return set && set[0]; -}; - -Negotiator.prototype.languages = function languages(available) { - return preferredLanguages(this.request.headers['accept-language'], available); -}; - -Negotiator.prototype.mediaType = function mediaType(available) { - var set = this.mediaTypes(available); - return set && set[0]; -}; - -Negotiator.prototype.mediaTypes = function mediaTypes(available) { - return preferredMediaTypes(this.request.headers.accept, available); -}; - -// Backwards compatibility -Negotiator.prototype.preferredCharset = Negotiator.prototype.charset; -Negotiator.prototype.preferredCharsets = Negotiator.prototype.charsets; -Negotiator.prototype.preferredEncoding = Negotiator.prototype.encoding; -Negotiator.prototype.preferredEncodings = Negotiator.prototype.encodings; -Negotiator.prototype.preferredLanguage = Negotiator.prototype.language; -Negotiator.prototype.preferredLanguages = Negotiator.prototype.languages; -Negotiator.prototype.preferredMediaType = Negotiator.prototype.mediaType; -Negotiator.prototype.preferredMediaTypes = Negotiator.prototype.mediaTypes; diff --git a/node_modules/negotiator/lib/charset.js b/node_modules/negotiator/lib/charset.js deleted file mode 100644 index cdd0148..0000000 --- a/node_modules/negotiator/lib/charset.js +++ /dev/null @@ -1,169 +0,0 @@ -/** - * negotiator - * Copyright(c) 2012 Isaac Z. Schlueter - * Copyright(c) 2014 Federico Romero - * Copyright(c) 2014-2015 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict'; - -/** - * Module exports. - * @public - */ - -module.exports = preferredCharsets; -module.exports.preferredCharsets = preferredCharsets; - -/** - * Module variables. - * @private - */ - -var simpleCharsetRegExp = /^\s*([^\s;]+)\s*(?:;(.*))?$/; - -/** - * Parse the Accept-Charset header. - * @private - */ - -function parseAcceptCharset(accept) { - var accepts = accept.split(','); - - for (var i = 0, j = 0; i < accepts.length; i++) { - var charset = parseCharset(accepts[i].trim(), i); - - if (charset) { - accepts[j++] = charset; - } - } - - // trim accepts - accepts.length = j; - - return accepts; -} - -/** - * Parse a charset from the Accept-Charset header. - * @private - */ - -function parseCharset(str, i) { - var match = simpleCharsetRegExp.exec(str); - if (!match) return null; - - var charset = match[1]; - var q = 1; - if (match[2]) { - var params = match[2].split(';') - for (var j = 0; j < params.length; j++) { - var p = params[j].trim().split('='); - if (p[0] === 'q') { - q = parseFloat(p[1]); - break; - } - } - } - - return { - charset: charset, - q: q, - i: i - }; -} - -/** - * Get the priority of a charset. - * @private - */ - -function getCharsetPriority(charset, accepted, index) { - var priority = {o: -1, q: 0, s: 0}; - - for (var i = 0; i < accepted.length; i++) { - var spec = specify(charset, accepted[i], index); - - if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) { - priority = spec; - } - } - - return priority; -} - -/** - * Get the specificity of the charset. - * @private - */ - -function specify(charset, spec, index) { - var s = 0; - if(spec.charset.toLowerCase() === charset.toLowerCase()){ - s |= 1; - } else if (spec.charset !== '*' ) { - return null - } - - return { - i: index, - o: spec.i, - q: spec.q, - s: s - } -} - -/** - * Get the preferred charsets from an Accept-Charset header. - * @public - */ - -function preferredCharsets(accept, provided) { - // RFC 2616 sec 14.2: no header = * - var accepts = parseAcceptCharset(accept === undefined ? '*' : accept || ''); - - if (!provided) { - // sorted list of all charsets - return accepts - .filter(isQuality) - .sort(compareSpecs) - .map(getFullCharset); - } - - var priorities = provided.map(function getPriority(type, index) { - return getCharsetPriority(type, accepts, index); - }); - - // sorted list of accepted charsets - return priorities.filter(isQuality).sort(compareSpecs).map(function getCharset(priority) { - return provided[priorities.indexOf(priority)]; - }); -} - -/** - * Compare two specs. - * @private - */ - -function compareSpecs(a, b) { - return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0; -} - -/** - * Get full charset string. - * @private - */ - -function getFullCharset(spec) { - return spec.charset; -} - -/** - * Check if a spec has any quality. - * @private - */ - -function isQuality(spec) { - return spec.q > 0; -} diff --git a/node_modules/negotiator/lib/encoding.js b/node_modules/negotiator/lib/encoding.js deleted file mode 100644 index 8432cd7..0000000 --- a/node_modules/negotiator/lib/encoding.js +++ /dev/null @@ -1,184 +0,0 @@ -/** - * negotiator - * Copyright(c) 2012 Isaac Z. Schlueter - * Copyright(c) 2014 Federico Romero - * Copyright(c) 2014-2015 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict'; - -/** - * Module exports. - * @public - */ - -module.exports = preferredEncodings; -module.exports.preferredEncodings = preferredEncodings; - -/** - * Module variables. - * @private - */ - -var simpleEncodingRegExp = /^\s*([^\s;]+)\s*(?:;(.*))?$/; - -/** - * Parse the Accept-Encoding header. - * @private - */ - -function parseAcceptEncoding(accept) { - var accepts = accept.split(','); - var hasIdentity = false; - var minQuality = 1; - - for (var i = 0, j = 0; i < accepts.length; i++) { - var encoding = parseEncoding(accepts[i].trim(), i); - - if (encoding) { - accepts[j++] = encoding; - hasIdentity = hasIdentity || specify('identity', encoding); - minQuality = Math.min(minQuality, encoding.q || 1); - } - } - - if (!hasIdentity) { - /* - * If identity doesn't explicitly appear in the accept-encoding header, - * it's added to the list of acceptable encoding with the lowest q - */ - accepts[j++] = { - encoding: 'identity', - q: minQuality, - i: i - }; - } - - // trim accepts - accepts.length = j; - - return accepts; -} - -/** - * Parse an encoding from the Accept-Encoding header. - * @private - */ - -function parseEncoding(str, i) { - var match = simpleEncodingRegExp.exec(str); - if (!match) return null; - - var encoding = match[1]; - var q = 1; - if (match[2]) { - var params = match[2].split(';'); - for (var j = 0; j < params.length; j++) { - var p = params[j].trim().split('='); - if (p[0] === 'q') { - q = parseFloat(p[1]); - break; - } - } - } - - return { - encoding: encoding, - q: q, - i: i - }; -} - -/** - * Get the priority of an encoding. - * @private - */ - -function getEncodingPriority(encoding, accepted, index) { - var priority = {o: -1, q: 0, s: 0}; - - for (var i = 0; i < accepted.length; i++) { - var spec = specify(encoding, accepted[i], index); - - if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) { - priority = spec; - } - } - - return priority; -} - -/** - * Get the specificity of the encoding. - * @private - */ - -function specify(encoding, spec, index) { - var s = 0; - if(spec.encoding.toLowerCase() === encoding.toLowerCase()){ - s |= 1; - } else if (spec.encoding !== '*' ) { - return null - } - - return { - i: index, - o: spec.i, - q: spec.q, - s: s - } -}; - -/** - * Get the preferred encodings from an Accept-Encoding header. - * @public - */ - -function preferredEncodings(accept, provided) { - var accepts = parseAcceptEncoding(accept || ''); - - if (!provided) { - // sorted list of all encodings - return accepts - .filter(isQuality) - .sort(compareSpecs) - .map(getFullEncoding); - } - - var priorities = provided.map(function getPriority(type, index) { - return getEncodingPriority(type, accepts, index); - }); - - // sorted list of accepted encodings - return priorities.filter(isQuality).sort(compareSpecs).map(function getEncoding(priority) { - return provided[priorities.indexOf(priority)]; - }); -} - -/** - * Compare two specs. - * @private - */ - -function compareSpecs(a, b) { - return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0; -} - -/** - * Get full encoding string. - * @private - */ - -function getFullEncoding(spec) { - return spec.encoding; -} - -/** - * Check if a spec has any quality. - * @private - */ - -function isQuality(spec) { - return spec.q > 0; -} diff --git a/node_modules/negotiator/lib/language.js b/node_modules/negotiator/lib/language.js deleted file mode 100644 index a231672..0000000 --- a/node_modules/negotiator/lib/language.js +++ /dev/null @@ -1,179 +0,0 @@ -/** - * negotiator - * Copyright(c) 2012 Isaac Z. Schlueter - * Copyright(c) 2014 Federico Romero - * Copyright(c) 2014-2015 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict'; - -/** - * Module exports. - * @public - */ - -module.exports = preferredLanguages; -module.exports.preferredLanguages = preferredLanguages; - -/** - * Module variables. - * @private - */ - -var simpleLanguageRegExp = /^\s*([^\s\-;]+)(?:-([^\s;]+))?\s*(?:;(.*))?$/; - -/** - * Parse the Accept-Language header. - * @private - */ - -function parseAcceptLanguage(accept) { - var accepts = accept.split(','); - - for (var i = 0, j = 0; i < accepts.length; i++) { - var language = parseLanguage(accepts[i].trim(), i); - - if (language) { - accepts[j++] = language; - } - } - - // trim accepts - accepts.length = j; - - return accepts; -} - -/** - * Parse a language from the Accept-Language header. - * @private - */ - -function parseLanguage(str, i) { - var match = simpleLanguageRegExp.exec(str); - if (!match) return null; - - var prefix = match[1] - var suffix = match[2] - var full = prefix - - if (suffix) full += "-" + suffix; - - var q = 1; - if (match[3]) { - var params = match[3].split(';') - for (var j = 0; j < params.length; j++) { - var p = params[j].split('='); - if (p[0] === 'q') q = parseFloat(p[1]); - } - } - - return { - prefix: prefix, - suffix: suffix, - q: q, - i: i, - full: full - }; -} - -/** - * Get the priority of a language. - * @private - */ - -function getLanguagePriority(language, accepted, index) { - var priority = {o: -1, q: 0, s: 0}; - - for (var i = 0; i < accepted.length; i++) { - var spec = specify(language, accepted[i], index); - - if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) { - priority = spec; - } - } - - return priority; -} - -/** - * Get the specificity of the language. - * @private - */ - -function specify(language, spec, index) { - var p = parseLanguage(language) - if (!p) return null; - var s = 0; - if(spec.full.toLowerCase() === p.full.toLowerCase()){ - s |= 4; - } else if (spec.prefix.toLowerCase() === p.full.toLowerCase()) { - s |= 2; - } else if (spec.full.toLowerCase() === p.prefix.toLowerCase()) { - s |= 1; - } else if (spec.full !== '*' ) { - return null - } - - return { - i: index, - o: spec.i, - q: spec.q, - s: s - } -}; - -/** - * Get the preferred languages from an Accept-Language header. - * @public - */ - -function preferredLanguages(accept, provided) { - // RFC 2616 sec 14.4: no header = * - var accepts = parseAcceptLanguage(accept === undefined ? '*' : accept || ''); - - if (!provided) { - // sorted list of all languages - return accepts - .filter(isQuality) - .sort(compareSpecs) - .map(getFullLanguage); - } - - var priorities = provided.map(function getPriority(type, index) { - return getLanguagePriority(type, accepts, index); - }); - - // sorted list of accepted languages - return priorities.filter(isQuality).sort(compareSpecs).map(function getLanguage(priority) { - return provided[priorities.indexOf(priority)]; - }); -} - -/** - * Compare two specs. - * @private - */ - -function compareSpecs(a, b) { - return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0; -} - -/** - * Get full language string. - * @private - */ - -function getFullLanguage(spec) { - return spec.full; -} - -/** - * Check if a spec has any quality. - * @private - */ - -function isQuality(spec) { - return spec.q > 0; -} diff --git a/node_modules/negotiator/lib/mediaType.js b/node_modules/negotiator/lib/mediaType.js deleted file mode 100644 index 67309dd..0000000 --- a/node_modules/negotiator/lib/mediaType.js +++ /dev/null @@ -1,294 +0,0 @@ -/** - * negotiator - * Copyright(c) 2012 Isaac Z. Schlueter - * Copyright(c) 2014 Federico Romero - * Copyright(c) 2014-2015 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict'; - -/** - * Module exports. - * @public - */ - -module.exports = preferredMediaTypes; -module.exports.preferredMediaTypes = preferredMediaTypes; - -/** - * Module variables. - * @private - */ - -var simpleMediaTypeRegExp = /^\s*([^\s\/;]+)\/([^;\s]+)\s*(?:;(.*))?$/; - -/** - * Parse the Accept header. - * @private - */ - -function parseAccept(accept) { - var accepts = splitMediaTypes(accept); - - for (var i = 0, j = 0; i < accepts.length; i++) { - var mediaType = parseMediaType(accepts[i].trim(), i); - - if (mediaType) { - accepts[j++] = mediaType; - } - } - - // trim accepts - accepts.length = j; - - return accepts; -} - -/** - * Parse a media type from the Accept header. - * @private - */ - -function parseMediaType(str, i) { - var match = simpleMediaTypeRegExp.exec(str); - if (!match) return null; - - var params = Object.create(null); - var q = 1; - var subtype = match[2]; - var type = match[1]; - - if (match[3]) { - var kvps = splitParameters(match[3]).map(splitKeyValuePair); - - for (var j = 0; j < kvps.length; j++) { - var pair = kvps[j]; - var key = pair[0].toLowerCase(); - var val = pair[1]; - - // get the value, unwrapping quotes - var value = val && val[0] === '"' && val[val.length - 1] === '"' - ? val.substr(1, val.length - 2) - : val; - - if (key === 'q') { - q = parseFloat(value); - break; - } - - // store parameter - params[key] = value; - } - } - - return { - type: type, - subtype: subtype, - params: params, - q: q, - i: i - }; -} - -/** - * Get the priority of a media type. - * @private - */ - -function getMediaTypePriority(type, accepted, index) { - var priority = {o: -1, q: 0, s: 0}; - - for (var i = 0; i < accepted.length; i++) { - var spec = specify(type, accepted[i], index); - - if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) { - priority = spec; - } - } - - return priority; -} - -/** - * Get the specificity of the media type. - * @private - */ - -function specify(type, spec, index) { - var p = parseMediaType(type); - var s = 0; - - if (!p) { - return null; - } - - if(spec.type.toLowerCase() == p.type.toLowerCase()) { - s |= 4 - } else if(spec.type != '*') { - return null; - } - - if(spec.subtype.toLowerCase() == p.subtype.toLowerCase()) { - s |= 2 - } else if(spec.subtype != '*') { - return null; - } - - var keys = Object.keys(spec.params); - if (keys.length > 0) { - if (keys.every(function (k) { - return spec.params[k] == '*' || (spec.params[k] || '').toLowerCase() == (p.params[k] || '').toLowerCase(); - })) { - s |= 1 - } else { - return null - } - } - - return { - i: index, - o: spec.i, - q: spec.q, - s: s, - } -} - -/** - * Get the preferred media types from an Accept header. - * @public - */ - -function preferredMediaTypes(accept, provided) { - // RFC 2616 sec 14.2: no header = */* - var accepts = parseAccept(accept === undefined ? '*/*' : accept || ''); - - if (!provided) { - // sorted list of all types - return accepts - .filter(isQuality) - .sort(compareSpecs) - .map(getFullType); - } - - var priorities = provided.map(function getPriority(type, index) { - return getMediaTypePriority(type, accepts, index); - }); - - // sorted list of accepted types - return priorities.filter(isQuality).sort(compareSpecs).map(function getType(priority) { - return provided[priorities.indexOf(priority)]; - }); -} - -/** - * Compare two specs. - * @private - */ - -function compareSpecs(a, b) { - return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0; -} - -/** - * Get full type string. - * @private - */ - -function getFullType(spec) { - return spec.type + '/' + spec.subtype; -} - -/** - * Check if a spec has any quality. - * @private - */ - -function isQuality(spec) { - return spec.q > 0; -} - -/** - * Count the number of quotes in a string. - * @private - */ - -function quoteCount(string) { - var count = 0; - var index = 0; - - while ((index = string.indexOf('"', index)) !== -1) { - count++; - index++; - } - - return count; -} - -/** - * Split a key value pair. - * @private - */ - -function splitKeyValuePair(str) { - var index = str.indexOf('='); - var key; - var val; - - if (index === -1) { - key = str; - } else { - key = str.substr(0, index); - val = str.substr(index + 1); - } - - return [key, val]; -} - -/** - * Split an Accept header into media types. - * @private - */ - -function splitMediaTypes(accept) { - var accepts = accept.split(','); - - for (var i = 1, j = 0; i < accepts.length; i++) { - if (quoteCount(accepts[j]) % 2 == 0) { - accepts[++j] = accepts[i]; - } else { - accepts[j] += ',' + accepts[i]; - } - } - - // trim accepts - accepts.length = j + 1; - - return accepts; -} - -/** - * Split a string of parameters. - * @private - */ - -function splitParameters(str) { - var parameters = str.split(';'); - - for (var i = 1, j = 0; i < parameters.length; i++) { - if (quoteCount(parameters[j]) % 2 == 0) { - parameters[++j] = parameters[i]; - } else { - parameters[j] += ';' + parameters[i]; - } - } - - // trim parameters - parameters.length = j + 1; - - for (var i = 0; i < parameters.length; i++) { - parameters[i] = parameters[i].trim(); - } - - return parameters; -} diff --git a/node_modules/negotiator/package.json b/node_modules/negotiator/package.json deleted file mode 100644 index 297635f..0000000 --- a/node_modules/negotiator/package.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "name": "negotiator", - "description": "HTTP content negotiation", - "version": "0.6.3", - "contributors": [ - "Douglas Christopher Wilson ", - "Federico Romero ", - "Isaac Z. Schlueter (http://blog.izs.me/)" - ], - "license": "MIT", - "keywords": [ - "http", - "content negotiation", - "accept", - "accept-language", - "accept-encoding", - "accept-charset" - ], - "repository": "jshttp/negotiator", - "devDependencies": { - "eslint": "7.32.0", - "eslint-plugin-markdown": "2.2.1", - "mocha": "9.1.3", - "nyc": "15.1.0" - }, - "files": [ - "lib/", - "HISTORY.md", - "LICENSE", - "index.js", - "README.md" - ], - "engines": { - "node": ">= 0.6" - }, - "scripts": { - "lint": "eslint .", - "test": "mocha --reporter spec --check-leaks --bail test/", - "test-ci": "nyc --reporter=lcov --reporter=text npm test", - "test-cov": "nyc --reporter=html --reporter=text npm test" - } -} diff --git a/node_modules/normalize-path/LICENSE b/node_modules/normalize-path/LICENSE deleted file mode 100644 index d32ab44..0000000 --- a/node_modules/normalize-path/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014-2018, 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/normalize-path/README.md b/node_modules/normalize-path/README.md deleted file mode 100644 index 726d4d6..0000000 --- a/node_modules/normalize-path/README.md +++ /dev/null @@ -1,127 +0,0 @@ -# normalize-path [![NPM version](https://img.shields.io/npm/v/normalize-path.svg?style=flat)](https://www.npmjs.com/package/normalize-path) [![NPM monthly downloads](https://img.shields.io/npm/dm/normalize-path.svg?style=flat)](https://npmjs.org/package/normalize-path) [![NPM total downloads](https://img.shields.io/npm/dt/normalize-path.svg?style=flat)](https://npmjs.org/package/normalize-path) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/normalize-path.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/normalize-path) - -> Normalize slashes in a file path to be posix/unix-like forward slashes. Also condenses repeat slashes to a single slash and removes and trailing slashes, unless disabled. - -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 normalize-path -``` - -## Usage - -```js -const normalize = require('normalize-path'); - -console.log(normalize('\\foo\\bar\\baz\\')); -//=> '/foo/bar/baz' -``` - -**win32 namespaces** - -```js -console.log(normalize('\\\\?\\UNC\\Server01\\user\\docs\\Letter.txt')); -//=> '//?/UNC/Server01/user/docs/Letter.txt' - -console.log(normalize('\\\\.\\CdRomX')); -//=> '//./CdRomX' -``` - -**Consecutive slashes** - -Condenses multiple consecutive forward slashes (except for leading slashes in win32 namespaces) to a single slash. - -```js -console.log(normalize('.//foo//bar///////baz/')); -//=> './foo/bar/baz' -``` - -### Trailing slashes - -By default trailing slashes are removed. Pass `false` as the last argument to disable this behavior and _**keep** trailing slashes_: - -```js -console.log(normalize('foo\\bar\\baz\\', false)); //=> 'foo/bar/baz/' -console.log(normalize('./foo/bar/baz/', false)); //=> './foo/bar/baz/' -``` - -## Release history - -### v3.0 - -No breaking changes in this release. - -* a check was added to ensure that [win32 namespaces](https://msdn.microsoft.com/library/windows/desktop/aa365247(v=vs.85).aspx#namespaces) are handled properly by win32 `path.parse()` after a path has been normalized by this library. -* a minor optimization was made to simplify how the trailing separator was handled - -## 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 - -Other useful path-related libraries: - -* [contains-path](https://www.npmjs.com/package/contains-path): Return true if a file path contains the given path. | [homepage](https://github.com/jonschlinkert/contains-path "Return true if a file path contains the given path.") -* [is-absolute](https://www.npmjs.com/package/is-absolute): Returns true if a file path is absolute. Does not rely on the path module… [more](https://github.com/jonschlinkert/is-absolute) | [homepage](https://github.com/jonschlinkert/is-absolute "Returns true if a file path is absolute. Does not rely on the path module and can be used as a polyfill for node.js native `path.isAbolute`.") -* [is-relative](https://www.npmjs.com/package/is-relative): Returns `true` if the path appears to be relative. | [homepage](https://github.com/jonschlinkert/is-relative "Returns `true` if the path appears to be relative.") -* [parse-filepath](https://www.npmjs.com/package/parse-filepath): Pollyfill for node.js `path.parse`, parses a filepath into an object. | [homepage](https://github.com/jonschlinkert/parse-filepath "Pollyfill for node.js `path.parse`, parses a filepath into an object.") -* [path-ends-with](https://www.npmjs.com/package/path-ends-with): Return `true` if a file path ends with the given string/suffix. | [homepage](https://github.com/jonschlinkert/path-ends-with "Return `true` if a file path ends with the given string/suffix.") -* [unixify](https://www.npmjs.com/package/unixify): Convert Windows file paths to unix paths. | [homepage](https://github.com/jonschlinkert/unixify "Convert Windows file paths to unix paths.") - -### Contributors - -| **Commits** | **Contributor** | -| --- | --- | -| 35 | [jonschlinkert](https://github.com/jonschlinkert) | -| 1 | [phated](https://github.com/phated) | - -### 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 April 19, 2018._ \ No newline at end of file diff --git a/node_modules/normalize-path/index.js b/node_modules/normalize-path/index.js deleted file mode 100644 index 6fac553..0000000 --- a/node_modules/normalize-path/index.js +++ /dev/null @@ -1,35 +0,0 @@ -/*! - * normalize-path - * - * Copyright (c) 2014-2018, Jon Schlinkert. - * Released under the MIT License. - */ - -module.exports = function(path, stripTrailing) { - if (typeof path !== 'string') { - throw new TypeError('expected path to be a string'); - } - - if (path === '\\' || path === '/') return '/'; - - var len = path.length; - if (len <= 1) return path; - - // ensure that win32 namespaces has two leading slashes, so that the path is - // handled properly by the win32 version of path.parse() after being normalized - // https://msdn.microsoft.com/library/windows/desktop/aa365247(v=vs.85).aspx#namespaces - var prefix = ''; - if (len > 4 && path[3] === '\\') { - var ch = path[2]; - if ((ch === '?' || ch === '.') && path.slice(0, 2) === '\\\\') { - path = path.slice(2); - prefix = '//'; - } - } - - var segs = path.split(/[/\\]+/); - if (stripTrailing !== false && segs[segs.length - 1] === '') { - segs.pop(); - } - return prefix + segs.join('/'); -}; diff --git a/node_modules/normalize-path/package.json b/node_modules/normalize-path/package.json deleted file mode 100644 index ad61098..0000000 --- a/node_modules/normalize-path/package.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "name": "normalize-path", - "description": "Normalize slashes in a file path to be posix/unix-like forward slashes. Also condenses repeat slashes to a single slash and removes and trailing slashes, unless disabled.", - "version": "3.0.0", - "homepage": "https://github.com/jonschlinkert/normalize-path", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "contributors": [ - "Blaine Bublitz (https://twitter.com/BlaineBublitz)", - "Jon Schlinkert (http://twitter.com/jonschlinkert)" - ], - "repository": "jonschlinkert/normalize-path", - "bugs": { - "url": "https://github.com/jonschlinkert/normalize-path/issues" - }, - "license": "MIT", - "files": [ - "index.js" - ], - "main": "index.js", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "devDependencies": { - "gulp-format-md": "^1.0.0", - "minimist": "^1.2.0", - "mocha": "^3.5.3" - }, - "keywords": [ - "absolute", - "backslash", - "delimiter", - "file", - "file-path", - "filepath", - "fix", - "forward", - "fp", - "fs", - "normalize", - "path", - "relative", - "separator", - "slash", - "slashes", - "trailing", - "unix", - "urix" - ], - "verb": { - "toc": false, - "layout": "default", - "tasks": [ - "readme" - ], - "plugins": [ - "gulp-format-md" - ], - "related": { - "description": "Other useful path-related libraries:", - "list": [ - "contains-path", - "is-absolute", - "is-relative", - "parse-filepath", - "path-ends-with", - "path-ends-with", - "unixify" - ] - }, - "lint": { - "reflinks": true - } - } -} diff --git a/node_modules/object-assign/index.js b/node_modules/object-assign/index.js deleted file mode 100644 index 0930cf8..0000000 --- a/node_modules/object-assign/index.js +++ /dev/null @@ -1,90 +0,0 @@ -/* -object-assign -(c) Sindre Sorhus -@license MIT -*/ - -'use strict'; -/* eslint-disable no-unused-vars */ -var getOwnPropertySymbols = Object.getOwnPropertySymbols; -var hasOwnProperty = Object.prototype.hasOwnProperty; -var propIsEnumerable = Object.prototype.propertyIsEnumerable; - -function toObject(val) { - if (val === null || val === undefined) { - throw new TypeError('Object.assign cannot be called with null or undefined'); - } - - return Object(val); -} - -function shouldUseNative() { - try { - if (!Object.assign) { - return false; - } - - // Detect buggy property enumeration order in older V8 versions. - - // https://bugs.chromium.org/p/v8/issues/detail?id=4118 - var test1 = new String('abc'); // eslint-disable-line no-new-wrappers - test1[5] = 'de'; - if (Object.getOwnPropertyNames(test1)[0] === '5') { - return false; - } - - // https://bugs.chromium.org/p/v8/issues/detail?id=3056 - var test2 = {}; - for (var i = 0; i < 10; i++) { - test2['_' + String.fromCharCode(i)] = i; - } - var order2 = Object.getOwnPropertyNames(test2).map(function (n) { - return test2[n]; - }); - if (order2.join('') !== '0123456789') { - return false; - } - - // https://bugs.chromium.org/p/v8/issues/detail?id=3056 - var test3 = {}; - 'abcdefghijklmnopqrst'.split('').forEach(function (letter) { - test3[letter] = letter; - }); - if (Object.keys(Object.assign({}, test3)).join('') !== - 'abcdefghijklmnopqrst') { - return false; - } - - return true; - } catch (err) { - // We don't expect any of the above to throw, but better to be safe. - return false; - } -} - -module.exports = shouldUseNative() ? Object.assign : function (target, source) { - var from; - var to = toObject(target); - var symbols; - - for (var s = 1; s < arguments.length; s++) { - from = Object(arguments[s]); - - for (var key in from) { - if (hasOwnProperty.call(from, key)) { - to[key] = from[key]; - } - } - - if (getOwnPropertySymbols) { - symbols = getOwnPropertySymbols(from); - for (var i = 0; i < symbols.length; i++) { - if (propIsEnumerable.call(from, symbols[i])) { - to[symbols[i]] = from[symbols[i]]; - } - } - } - } - - return to; -}; diff --git a/node_modules/object-assign/license b/node_modules/object-assign/license deleted file mode 100644 index 654d0bf..0000000 --- a/node_modules/object-assign/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (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/object-assign/package.json b/node_modules/object-assign/package.json deleted file mode 100644 index 503eb1e..0000000 --- a/node_modules/object-assign/package.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "name": "object-assign", - "version": "4.1.1", - "description": "ES2015 `Object.assign()` ponyfill", - "license": "MIT", - "repository": "sindresorhus/object-assign", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "xo && ava", - "bench": "matcha bench.js" - }, - "files": [ - "index.js" - ], - "keywords": [ - "object", - "assign", - "extend", - "properties", - "es2015", - "ecmascript", - "harmony", - "ponyfill", - "prollyfill", - "polyfill", - "shim", - "browser" - ], - "devDependencies": { - "ava": "^0.16.0", - "lodash": "^4.16.4", - "matcha": "^0.7.0", - "xo": "^0.16.0" - } -} diff --git a/node_modules/object-assign/readme.md b/node_modules/object-assign/readme.md deleted file mode 100644 index 1be09d3..0000000 --- a/node_modules/object-assign/readme.md +++ /dev/null @@ -1,61 +0,0 @@ -# object-assign [![Build Status](https://travis-ci.org/sindresorhus/object-assign.svg?branch=master)](https://travis-ci.org/sindresorhus/object-assign) - -> ES2015 [`Object.assign()`](http://www.2ality.com/2014/01/object-assign.html) [ponyfill](https://ponyfill.com) - - -## Use the built-in - -Node.js 4 and up, as well as every evergreen browser (Chrome, Edge, Firefox, Opera, Safari), -support `Object.assign()` :tada:. If you target only those environments, then by all -means, use `Object.assign()` instead of this package. - - -## Install - -``` -$ npm install --save object-assign -``` - - -## Usage - -```js -const objectAssign = require('object-assign'); - -objectAssign({foo: 0}, {bar: 1}); -//=> {foo: 0, bar: 1} - -// multiple sources -objectAssign({foo: 0}, {bar: 1}, {baz: 2}); -//=> {foo: 0, bar: 1, baz: 2} - -// overwrites equal keys -objectAssign({foo: 0}, {foo: 1}, {foo: 2}); -//=> {foo: 2} - -// ignores null and undefined sources -objectAssign({foo: 0}, null, {bar: 1}, undefined); -//=> {foo: 0, bar: 1} -``` - - -## API - -### objectAssign(target, [source, ...]) - -Assigns enumerable own properties of `source` objects to the `target` object and returns the `target` object. Additional `source` objects will overwrite previous ones. - - -## Resources - -- [ES2015 spec - Object.assign](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.assign) - - -## Related - -- [deep-assign](https://github.com/sindresorhus/deep-assign) - Recursive `Object.assign()` - - -## License - -MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/object-copy/LICENSE b/node_modules/object-copy/LICENSE deleted file mode 100644 index e28e603..0000000 --- a/node_modules/object-copy/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 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/object-copy/index.js b/node_modules/object-copy/index.js deleted file mode 100644 index f9faa22..0000000 --- a/node_modules/object-copy/index.js +++ /dev/null @@ -1,174 +0,0 @@ -'use strict'; - -var typeOf = require('kind-of'); -var copyDescriptor = require('copy-descriptor'); -var define = require('define-property'); - -/** - * Copy static properties, prototype properties, and descriptors from one object to another. - * - * ```js - * function App() {} - * var proto = App.prototype; - * App.prototype.set = function() {}; - * App.prototype.get = function() {}; - * - * var obj = {}; - * copy(obj, proto); - * ``` - * @param {Object} `receiver` - * @param {Object} `provider` - * @param {String|Array} `omit` One or more properties to omit - * @return {Object} - * @api public - */ - -function copy(receiver, provider, omit) { - if (!isObject(receiver)) { - throw new TypeError('expected receiving object to be an object.'); - } - if (!isObject(provider)) { - throw new TypeError('expected providing object to be an object.'); - } - - var props = nativeKeys(provider); - var keys = Object.keys(provider); - var len = props.length; - omit = arrayify(omit); - - while (len--) { - var key = props[len]; - - if (has(keys, key)) { - define(receiver, key, provider[key]); - } else if (!(key in receiver) && !has(omit, key)) { - copyDescriptor(receiver, provider, key); - } - } -}; - -/** - * Return true if the given value is an object or function - */ - -function isObject(val) { - return typeOf(val) === 'object' || typeof val === 'function'; -} - -/** - * Returns true if an array has any of the given elements, or an - * object has any of the give keys. - * - * ```js - * has(['a', 'b', 'c'], 'c'); - * //=> true - * - * has(['a', 'b', 'c'], ['c', 'z']); - * //=> true - * - * has({a: 'b', c: 'd'}, ['c', 'z']); - * //=> true - * ``` - * @param {Object} `obj` - * @param {String|Array} `val` - * @return {Boolean} - */ - -function has(obj, val) { - val = arrayify(val); - var len = val.length; - - if (isObject(obj)) { - for (var key in obj) { - if (val.indexOf(key) > -1) { - return true; - } - } - - var keys = nativeKeys(obj); - return has(keys, val); - } - - if (Array.isArray(obj)) { - var arr = obj; - while (len--) { - if (arr.indexOf(val[len]) > -1) { - return true; - } - } - return false; - } - - throw new TypeError('expected an array or object.'); -} - -/** - * Cast the given value to an array. - * - * ```js - * arrayify('foo'); - * //=> ['foo'] - * - * arrayify(['foo']); - * //=> ['foo'] - * ``` - * - * @param {String|Array} `val` - * @return {Array} - */ - -function arrayify(val) { - return val ? (Array.isArray(val) ? val : [val]) : []; -} - -/** - * Returns true if a value has a `contructor` - * - * ```js - * hasConstructor({}); - * //=> true - * - * hasConstructor(Object.create(null)); - * //=> false - * ``` - * @param {Object} `value` - * @return {Boolean} - */ - -function hasConstructor(val) { - return isObject(val) && typeof val.constructor !== 'undefined'; -} - -/** - * Get the native `ownPropertyNames` from the constructor of the - * given `object`. An empty array is returned if the object does - * not have a constructor. - * - * ```js - * nativeKeys({a: 'b', b: 'c', c: 'd'}) - * //=> ['a', 'b', 'c'] - * - * nativeKeys(function(){}) - * //=> ['length', 'caller'] - * ``` - * - * @param {Object} `obj` Object that has a `constructor`. - * @return {Array} Array of keys. - */ - -function nativeKeys(val) { - if (!hasConstructor(val)) return []; - return Object.getOwnPropertyNames(val); -} - -/** - * Expose `copy` - */ - -module.exports = copy; - -/** - * Expose `copy.has` for tests - */ - -module.exports.has = has; diff --git a/node_modules/object-copy/node_modules/define-property/LICENSE b/node_modules/object-copy/node_modules/define-property/LICENSE deleted file mode 100644 index 65f90ac..0000000 --- a/node_modules/object-copy/node_modules/define-property/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015, 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/object-copy/node_modules/define-property/README.md b/node_modules/object-copy/node_modules/define-property/README.md deleted file mode 100644 index 8cac698..0000000 --- a/node_modules/object-copy/node_modules/define-property/README.md +++ /dev/null @@ -1,77 +0,0 @@ -# define-property [![NPM version](https://badge.fury.io/js/define-property.svg)](http://badge.fury.io/js/define-property) - -> Define a non-enumerable property on an object. - -## Install - -Install with [npm](https://www.npmjs.com/) - -```sh -$ npm i define-property --save -``` - -## Usage - -**Params** - -* `obj`: The object on which to define the property. -* `prop`: The name of the property to be defined or modified. -* `descriptor`: The descriptor for the property being defined or modified. - -```js -var define = require('define-property'); -var obj = {}; -define(obj, 'foo', function(val) { - return val.toUpperCase(); -}); - -console.log(obj); -//=> {} - -console.log(obj.foo('bar')); -//=> 'BAR' -``` - -**get/set** - -```js -define(obj, 'foo', { - get: function() {}, - set: function() {} -}); -``` - -## Related projects - -* [delegate-object](https://www.npmjs.com/package/delegate-object): Copy properties from an object to another object, where properties with function values will be… [more](https://www.npmjs.com/package/delegate-object) | [homepage](https://github.com/doowb/delegate-object) -* [forward-object](https://www.npmjs.com/package/forward-object): Copy properties from an object to another object, where properties with function values will be… [more](https://www.npmjs.com/package/forward-object) | [homepage](https://github.com/doowb/forward-object) -* [mixin-deep](https://www.npmjs.com/package/mixin-deep): Deeply mix the properties of objects into the first object. Like merge-deep, but doesn't clone. | [homepage](https://github.com/jonschlinkert/mixin-deep) -* [mixin-object](https://www.npmjs.com/package/mixin-object): Mixin the own and inherited properties of other objects onto the first object. Pass an… [more](https://www.npmjs.com/package/mixin-object) | [homepage](https://github.com/jonschlinkert/mixin-object) - -## Running tests - -Install dev dependencies: - -```sh -$ npm i -d && npm test -``` - -## Contributing - -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/define-property/issues/new). - -## Author - -**Jon Schlinkert** - -+ [github/jonschlinkert](https://github.com/jonschlinkert) -+ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) - -## License - -Copyright © 2015 Jon Schlinkert -Released under the MIT license. - -*** - -_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on August 31, 2015._ diff --git a/node_modules/object-copy/node_modules/define-property/index.js b/node_modules/object-copy/node_modules/define-property/index.js deleted file mode 100644 index 3e0e5e1..0000000 --- a/node_modules/object-copy/node_modules/define-property/index.js +++ /dev/null @@ -1,31 +0,0 @@ -/*! - * define-property - * - * Copyright (c) 2015, Jon Schlinkert. - * Licensed under the MIT License. - */ - -'use strict'; - -var isDescriptor = require('is-descriptor'); - -module.exports = function defineProperty(obj, prop, val) { - if (typeof obj !== 'object' && typeof obj !== 'function') { - throw new TypeError('expected an object or function.'); - } - - if (typeof prop !== 'string') { - throw new TypeError('expected `prop` to be a string.'); - } - - if (isDescriptor(val) && ('set' in val || 'get' in val)) { - return Object.defineProperty(obj, prop, val); - } - - return Object.defineProperty(obj, prop, { - configurable: true, - enumerable: false, - writable: true, - value: val - }); -}; diff --git a/node_modules/object-copy/node_modules/define-property/package.json b/node_modules/object-copy/node_modules/define-property/package.json deleted file mode 100644 index 43561bf..0000000 --- a/node_modules/object-copy/node_modules/define-property/package.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "name": "define-property", - "description": "Define a non-enumerable property on an object.", - "version": "0.2.5", - "homepage": "https://github.com/jonschlinkert/define-property", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "repository": "jonschlinkert/define-property", - "bugs": { - "url": "https://github.com/jonschlinkert/define-property/issues" - }, - "license": "MIT", - "files": [ - "index.js" - ], - "main": "index.js", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "devDependencies": { - "mocha": "*", - "should": "^7.0.4" - }, - "keywords": [ - "define", - "define-property", - "enumerable", - "key", - "non", - "non-enumerable", - "object", - "prop", - "property", - "value" - ], - "verb": { - "related": { - "list": [ - "mixin-deep", - "mixin-object", - "delegate-object", - "forward-object" - ] - } - }, - "dependencies": { - "is-descriptor": "^0.1.0" - } -} diff --git a/node_modules/object-copy/node_modules/is-accessor-descriptor/LICENSE b/node_modules/object-copy/node_modules/is-accessor-descriptor/LICENSE deleted file mode 100644 index 65f90ac..0000000 --- a/node_modules/object-copy/node_modules/is-accessor-descriptor/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015, 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/object-copy/node_modules/is-accessor-descriptor/README.md b/node_modules/object-copy/node_modules/is-accessor-descriptor/README.md deleted file mode 100644 index 3743fe6..0000000 --- a/node_modules/object-copy/node_modules/is-accessor-descriptor/README.md +++ /dev/null @@ -1,123 +0,0 @@ -# is-accessor-descriptor [![NPM version](https://img.shields.io/npm/v/is-accessor-descriptor.svg)](https://www.npmjs.com/package/is-accessor-descriptor) [![Build Status](https://img.shields.io/travis/jonschlinkert/is-accessor-descriptor.svg)](https://travis-ci.org/jonschlinkert/is-accessor-descriptor) - -> Returns true if a value has the characteristics of a valid JavaScript accessor descriptor. - -- [Install](#install) -- [Usage](#usage) -- [Examples](#examples) -- [API](#api) -- [Related projects](#related-projects) -- [Running tests](#running-tests) -- [Contributing](#contributing) -- [Author](#author) -- [License](#license) - -_(TOC generated by [verb](https://github.com/verbose/verb) using [markdown-toc](https://github.com/jonschlinkert/markdown-toc))_ - -## Install - -Install with [npm](https://www.npmjs.com/): - -```sh -$ npm i is-accessor-descriptor --save -``` - -## Usage - -```js -var isAccessor = require('is-accessor-descriptor'); - -isAccessor({get: function() {}}); -//=> true -``` - -You may also pass an object and property name to check if the property is an accessor: - -```js -isAccessor(foo, 'bar'); -``` - -## Examples - -`false` when not an object - -```js -isAccessor('a') -isAccessor(null) -isAccessor([]) -//=> false -``` - -`true` when the object has valid properties - -and the properties all have the correct JavaScript types: - -```js -isAccessor({get: noop, set: noop}) -isAccessor({get: noop}) -isAccessor({set: noop}) -//=> true -``` - -`false` when the object has invalid properties - -```js -isAccessor({get: noop, set: noop, bar: 'baz'}) -isAccessor({get: noop, writable: true}) -isAccessor({get: noop, value: true}) -//=> false -``` - -`false` when an accessor is not a function - -```js -isAccessor({get: noop, set: 'baz'}) -isAccessor({get: 'foo', set: noop}) -isAccessor({get: 'foo', bar: 'baz'}) -isAccessor({get: 'foo', set: 'baz'}) -//=> false -``` - -`false` when a value is not the correct type - -```js -isAccessor({get: noop, set: noop, enumerable: 'foo'}) -isAccessor({set: noop, configurable: 'foo'}) -isAccessor({get: noop, configurable: 'foo'}) -//=> false -``` - -## Related projects - -* [is-accessor-descriptor](https://www.npmjs.com/package/is-accessor-descriptor): Returns true if a value has the characteristics of a valid JavaScript accessor descriptor. | [homepage](https://github.com/jonschlinkert/is-accessor-descriptor) -* [is-data-descriptor](https://www.npmjs.com/package/is-data-descriptor): Returns true if a value has the characteristics of a valid JavaScript data descriptor. | [homepage](https://github.com/jonschlinkert/is-data-descriptor) -* [is-descriptor](https://www.npmjs.com/package/is-descriptor): Returns true if a value has the characteristics of a valid JavaScript descriptor. Works for… [more](https://www.npmjs.com/package/is-descriptor) | [homepage](https://github.com/jonschlinkert/is-descriptor) -* [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) - -## Running tests - -Install dev dependencies: - -```sh -$ npm i -d && npm test -``` - -## Contributing - -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/is-accessor-descriptor/issues/new). - -## Author - -**Jon Schlinkert** - -* [github/jonschlinkert](https://github.com/jonschlinkert) -* [twitter/jonschlinkert](http://twitter.com/jonschlinkert) - -## License - -Copyright © 2015 [Jon Schlinkert](https://github.com/jonschlinkert) -Released under the MIT license. - -*** - -_This file was generated by [verb](https://github.com/verbose/verb) on December 28, 2015._ \ No newline at end of file diff --git a/node_modules/object-copy/node_modules/is-accessor-descriptor/index.js b/node_modules/object-copy/node_modules/is-accessor-descriptor/index.js deleted file mode 100644 index 2ca4af8..0000000 --- a/node_modules/object-copy/node_modules/is-accessor-descriptor/index.js +++ /dev/null @@ -1,69 +0,0 @@ -/*! - * is-accessor-descriptor - * - * Copyright (c) 2015, Jon Schlinkert. - * Licensed under the MIT License. - */ - -'use strict'; - -var typeOf = require('kind-of'); - -// accessor descriptor properties -var accessor = { - get: 'function', - set: 'function', - configurable: 'boolean', - enumerable: 'boolean' -}; - -function isAccessorDescriptor(obj, prop) { - if (typeof prop === 'string') { - var val = Object.getOwnPropertyDescriptor(obj, prop); - return typeof val !== 'undefined'; - } - - if (typeOf(obj) !== 'object') { - return false; - } - - if (has(obj, 'value') || has(obj, 'writable')) { - return false; - } - - if (!has(obj, 'get') || typeof obj.get !== 'function') { - return false; - } - - // tldr: it's valid to have "set" be undefined - // "set" might be undefined if `Object.getOwnPropertyDescriptor` - // was used to get the value, and only `get` was defined by the user - if (has(obj, 'set') && typeof obj[key] !== 'function' && typeof obj[key] !== 'undefined') { - return false; - } - - for (var key in obj) { - if (!accessor.hasOwnProperty(key)) { - continue; - } - - if (typeOf(obj[key]) === accessor[key]) { - continue; - } - - if (typeof obj[key] !== 'undefined') { - return false; - } - } - return true; -} - -function has(obj, key) { - return {}.hasOwnProperty.call(obj, key); -} - -/** - * Expose `isAccessorDescriptor` - */ - -module.exports = isAccessorDescriptor; diff --git a/node_modules/object-copy/node_modules/is-accessor-descriptor/package.json b/node_modules/object-copy/node_modules/is-accessor-descriptor/package.json deleted file mode 100644 index 0f39c64..0000000 --- a/node_modules/object-copy/node_modules/is-accessor-descriptor/package.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "name": "is-accessor-descriptor", - "description": "Returns true if a value has the characteristics of a valid JavaScript accessor descriptor.", - "version": "0.1.6", - "homepage": "https://github.com/jonschlinkert/is-accessor-descriptor", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "repository": "jonschlinkert/is-accessor-descriptor", - "bugs": { - "url": "https://github.com/jonschlinkert/is-accessor-descriptor/issues" - }, - "license": "MIT", - "files": [ - "index.js" - ], - "main": "index.js", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "dependencies": { - "kind-of": "^3.0.2" - }, - "devDependencies": { - "mocha": "*", - "should": "*" - }, - "keywords": [ - "accessor", - "check", - "data", - "descriptor", - "get", - "getter", - "is", - "keys", - "object", - "properties", - "property", - "set", - "setter", - "type", - "valid", - "value" - ], - "verb": { - "related": { - "list": [ - "is-accessor-descriptor", - "is-data-descriptor", - "is-descriptor", - "isobject" - ] - }, - "plugins": [ - "gulp-format-md" - ], - "layout": "default" - } -} diff --git a/node_modules/object-copy/node_modules/is-data-descriptor/LICENSE b/node_modules/object-copy/node_modules/is-data-descriptor/LICENSE deleted file mode 100644 index 65f90ac..0000000 --- a/node_modules/object-copy/node_modules/is-data-descriptor/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015, 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/object-copy/node_modules/is-data-descriptor/README.md b/node_modules/object-copy/node_modules/is-data-descriptor/README.md deleted file mode 100644 index 41e1643..0000000 --- a/node_modules/object-copy/node_modules/is-data-descriptor/README.md +++ /dev/null @@ -1,128 +0,0 @@ -# is-data-descriptor [![NPM version](https://img.shields.io/npm/v/is-data-descriptor.svg)](https://www.npmjs.com/package/is-data-descriptor) [![Build Status](https://img.shields.io/travis/jonschlinkert/is-data-descriptor.svg)](https://travis-ci.org/jonschlinkert/is-data-descriptor) - -> Returns true if a value has the characteristics of a valid JavaScript data descriptor. - -## Install - -Install with [npm](https://www.npmjs.com/): - -```sh -$ npm i is-data-descriptor --save -``` - -## Usage - -```js -var isDataDesc = require('is-data-descriptor'); -``` - -## Examples - -`true` when the descriptor has valid properties with valid values. - -```js -// `value` can be anything -isDataDesc({value: 'foo'}) -isDataDesc({value: function() {}}) -isDataDesc({value: true}) -//=> true -``` - -`false` when not an object - -```js -isDataDesc('a') -//=> false -isDataDesc(null) -//=> false -isDataDesc([]) -//=> false -``` - -`false` when the object has invalid properties - -```js -isDataDesc({value: 'foo', bar: 'baz'}) -//=> false -isDataDesc({value: 'foo', bar: 'baz'}) -//=> false -isDataDesc({value: 'foo', get: function(){}}) -//=> false -isDataDesc({get: function(){}, value: 'foo'}) -//=> false -``` - -`false` when a value is not the correct type - -```js -isDataDesc({value: 'foo', enumerable: 'foo'}) -//=> false -isDataDesc({value: 'foo', configurable: 'foo'}) -//=> false -isDataDesc({value: 'foo', writable: 'foo'}) -//=> false -``` - -## Valid properties - -The only valid data descriptor properties are the following: - -* `configurable` (required) -* `enumerable` (required) -* `value` (optional) -* `writable` (optional) - -To be a valid data descriptor, either `value` or `writable` must be defined. - -**Invalid properties** - -A descriptor may have additional _invalid_ properties (an error will **not** be thrown). - -```js -var foo = {}; - -Object.defineProperty(foo, 'bar', { - enumerable: true, - whatever: 'blah', // invalid, but doesn't cause an error - get: function() { - return 'baz'; - } -}); - -console.log(foo.bar); -//=> 'baz' -``` - -## Related projects - -* [is-accessor-descriptor](https://www.npmjs.com/package/is-accessor-descriptor): Returns true if a value has the characteristics of a valid JavaScript accessor descriptor. | [homepage](https://github.com/jonschlinkert/is-accessor-descriptor) -* [is-descriptor](https://www.npmjs.com/package/is-descriptor): Returns true if a value has the characteristics of a valid JavaScript descriptor. Works for… [more](https://www.npmjs.com/package/is-descriptor) | [homepage](https://github.com/jonschlinkert/is-descriptor) -* [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) - -## Running tests - -Install dev dependencies: - -```sh -$ npm i -d && npm test -``` - -## Contributing - -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/is-data-descriptor/issues/new). - -## Author - -**Jon Schlinkert** - -* [github/jonschlinkert](https://github.com/jonschlinkert) -* [twitter/jonschlinkert](http://twitter.com/jonschlinkert) - -## License - -Copyright © 2015 [Jon Schlinkert](https://github.com/jonschlinkert) -Released under the MIT license. - -*** - -_This file was generated by [verb](https://github.com/verbose/verb) on December 28, 2015._ \ No newline at end of file diff --git a/node_modules/object-copy/node_modules/is-data-descriptor/index.js b/node_modules/object-copy/node_modules/is-data-descriptor/index.js deleted file mode 100644 index d4d09c9..0000000 --- a/node_modules/object-copy/node_modules/is-data-descriptor/index.js +++ /dev/null @@ -1,55 +0,0 @@ -/*! - * is-data-descriptor - * - * Copyright (c) 2015, Jon Schlinkert. - * Licensed under the MIT License. - */ - -'use strict'; - -var typeOf = require('kind-of'); - -// data descriptor properties -var data = { - configurable: 'boolean', - enumerable: 'boolean', - writable: 'boolean' -}; - -function isDataDescriptor(obj, prop) { - if (typeOf(obj) !== 'object') { - return false; - } - - if (typeof prop === 'string') { - var val = Object.getOwnPropertyDescriptor(obj, prop); - return typeof val !== 'undefined'; - } - - if (!('value' in obj) && !('writable' in obj)) { - return false; - } - - for (var key in obj) { - if (key === 'value') continue; - - if (!data.hasOwnProperty(key)) { - continue; - } - - if (typeOf(obj[key]) === data[key]) { - continue; - } - - if (typeof obj[key] !== 'undefined') { - return false; - } - } - return true; -} - -/** - * Expose `isDataDescriptor` - */ - -module.exports = isDataDescriptor; diff --git a/node_modules/object-copy/node_modules/is-data-descriptor/package.json b/node_modules/object-copy/node_modules/is-data-descriptor/package.json deleted file mode 100644 index 5fb294b..0000000 --- a/node_modules/object-copy/node_modules/is-data-descriptor/package.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "name": "is-data-descriptor", - "description": "Returns true if a value has the characteristics of a valid JavaScript data descriptor.", - "version": "0.1.4", - "homepage": "https://github.com/jonschlinkert/is-data-descriptor", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "repository": "jonschlinkert/is-data-descriptor", - "bugs": { - "url": "https://github.com/jonschlinkert/is-data-descriptor/issues" - }, - "license": "MIT", - "files": [ - "index.js" - ], - "main": "index.js", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "dependencies": { - "kind-of": "^3.0.2" - }, - "devDependencies": { - "mocha": "*", - "should": "*" - }, - "keywords": [ - "accessor", - "check", - "data", - "descriptor", - "get", - "getter", - "is", - "keys", - "object", - "properties", - "property", - "set", - "setter", - "type", - "valid", - "value" - ], - "verb": { - "related": { - "list": [ - "is-accessor-descriptor", - "is-data-descriptor", - "is-descriptor", - "isobject" - ] - }, - "plugins": [ - "gulp-format-md" - ] - } -} diff --git a/node_modules/object-copy/node_modules/is-descriptor/LICENSE b/node_modules/object-copy/node_modules/is-descriptor/LICENSE deleted file mode 100644 index c0d7f13..0000000 --- a/node_modules/object-copy/node_modules/is-descriptor/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015-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. \ No newline at end of file diff --git a/node_modules/object-copy/node_modules/is-descriptor/README.md b/node_modules/object-copy/node_modules/is-descriptor/README.md deleted file mode 100644 index 658e533..0000000 --- a/node_modules/object-copy/node_modules/is-descriptor/README.md +++ /dev/null @@ -1,193 +0,0 @@ -# is-descriptor [![NPM version](https://img.shields.io/npm/v/is-descriptor.svg?style=flat)](https://www.npmjs.com/package/is-descriptor) [![NPM monthly downloads](https://img.shields.io/npm/dm/is-descriptor.svg?style=flat)](https://npmjs.org/package/is-descriptor) [![NPM total downloads](https://img.shields.io/npm/dt/is-descriptor.svg?style=flat)](https://npmjs.org/package/is-descriptor) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/is-descriptor.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/is-descriptor) - -> Returns true if a value has the characteristics of a valid JavaScript descriptor. Works for data descriptors and accessor descriptors. - -## Install - -Install with [npm](https://www.npmjs.com/): - -```sh -$ npm install --save is-descriptor -``` - -## Usage - -```js -var isDescriptor = require('is-descriptor'); - -isDescriptor({value: 'foo'}) -//=> true -isDescriptor({get: function(){}, set: function(){}}) -//=> true -isDescriptor({get: 'foo', set: function(){}}) -//=> false -``` - -You may also check for a descriptor by passing an object as the first argument and property name (`string`) as the second argument. - -```js -var obj = {}; -obj.foo = 'abc'; - -Object.defineProperty(obj, 'bar', { - value: 'xyz' -}); - -isDescriptor(obj, 'foo'); -//=> true -isDescriptor(obj, 'bar'); -//=> true -``` - -## Examples - -### value type - -`false` when not an object - -```js -isDescriptor('a'); -//=> false -isDescriptor(null); -//=> false -isDescriptor([]); -//=> false -``` - -### data descriptor - -`true` when the object has valid properties with valid values. - -```js -isDescriptor({value: 'foo'}); -//=> true -isDescriptor({value: noop}); -//=> true -``` - -`false` when the object has invalid properties - -```js -isDescriptor({value: 'foo', bar: 'baz'}); -//=> false -isDescriptor({value: 'foo', bar: 'baz'}); -//=> false -isDescriptor({value: 'foo', get: noop}); -//=> false -isDescriptor({get: noop, value: noop}); -//=> false -``` - -`false` when a value is not the correct type - -```js -isDescriptor({value: 'foo', enumerable: 'foo'}); -//=> false -isDescriptor({value: 'foo', configurable: 'foo'}); -//=> false -isDescriptor({value: 'foo', writable: 'foo'}); -//=> false -``` - -### accessor descriptor - -`true` when the object has valid properties with valid values. - -```js -isDescriptor({get: noop, set: noop}); -//=> true -isDescriptor({get: noop}); -//=> true -isDescriptor({set: noop}); -//=> true -``` - -`false` when the object has invalid properties - -```js -isDescriptor({get: noop, set: noop, bar: 'baz'}); -//=> false -isDescriptor({get: noop, writable: true}); -//=> false -isDescriptor({get: noop, value: true}); -//=> false -``` - -`false` when an accessor is not a function - -```js -isDescriptor({get: noop, set: 'baz'}); -//=> false -isDescriptor({get: 'foo', set: noop}); -//=> false -isDescriptor({get: 'foo', bar: 'baz'}); -//=> false -isDescriptor({get: 'foo', set: 'baz'}); -//=> false -``` - -`false` when a value is not the correct type - -```js -isDescriptor({get: noop, set: noop, enumerable: 'foo'}); -//=> false -isDescriptor({set: noop, configurable: 'foo'}); -//=> false -isDescriptor({get: noop, configurable: 'foo'}); -//=> false -``` - -## About - -### Related projects - -* [is-accessor-descriptor](https://www.npmjs.com/package/is-accessor-descriptor): Returns true if a value has the characteristics of a valid JavaScript accessor descriptor. | [homepage](https://github.com/jonschlinkert/is-accessor-descriptor "Returns true if a value has the characteristics of a valid JavaScript accessor descriptor.") -* [is-data-descriptor](https://www.npmjs.com/package/is-data-descriptor): Returns true if a value has the characteristics of a valid JavaScript data descriptor. | [homepage](https://github.com/jonschlinkert/is-data-descriptor "Returns true if a value has the characteristics of a valid JavaScript data descriptor.") -* [is-descriptor](https://www.npmjs.com/package/is-descriptor): Returns true if a value has the characteristics of a valid JavaScript descriptor. Works for… [more](https://github.com/jonschlinkert/is-descriptor) | [homepage](https://github.com/jonschlinkert/is-descriptor "Returns true if a value has the characteristics of a valid JavaScript descriptor. Works for data descriptors and accessor descriptors.") -* [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.") - -### Contributing - -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). - -### Contributors - -| **Commits** | **Contributor** | -| --- | --- | -| 24 | [jonschlinkert](https://github.com/jonschlinkert) | -| 1 | [doowb](https://github.com/doowb) | -| 1 | [wtgtybhertgeghgtwtg](https://github.com/wtgtybhertgeghgtwtg) | - -### 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 -``` - -### 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 -``` - -### Author - -**Jon Schlinkert** - -* [github/jonschlinkert](https://github.com/jonschlinkert) -* [twitter/jonschlinkert](https://twitter.com/jonschlinkert) - -### License - -Copyright © 2017, [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 July 22, 2017._ \ No newline at end of file diff --git a/node_modules/object-copy/node_modules/is-descriptor/index.js b/node_modules/object-copy/node_modules/is-descriptor/index.js deleted file mode 100644 index c9b91d7..0000000 --- a/node_modules/object-copy/node_modules/is-descriptor/index.js +++ /dev/null @@ -1,22 +0,0 @@ -/*! - * is-descriptor - * - * Copyright (c) 2015-2017, Jon Schlinkert. - * Released under the MIT License. - */ - -'use strict'; - -var typeOf = require('kind-of'); -var isAccessor = require('is-accessor-descriptor'); -var isData = require('is-data-descriptor'); - -module.exports = function isDescriptor(obj, key) { - if (typeOf(obj) !== 'object') { - return false; - } - if ('get' in obj) { - return isAccessor(obj, key); - } - return isData(obj, key); -}; diff --git a/node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of/LICENSE b/node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of/LICENSE deleted file mode 100644 index 3f2eca1..0000000 --- a/node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -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/object-copy/node_modules/is-descriptor/node_modules/kind-of/README.md b/node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of/README.md deleted file mode 100644 index 170bf30..0000000 --- a/node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of/README.md +++ /dev/null @@ -1,342 +0,0 @@ -# kind-of [![NPM version](https://img.shields.io/npm/v/kind-of.svg?style=flat)](https://www.npmjs.com/package/kind-of) [![NPM monthly downloads](https://img.shields.io/npm/dm/kind-of.svg?style=flat)](https://npmjs.org/package/kind-of) [![NPM total downloads](https://img.shields.io/npm/dt/kind-of.svg?style=flat)](https://npmjs.org/package/kind-of) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/kind-of.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/kind-of) - -> Get the native type of a value. - -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 kind-of -``` - -Install with [bower](https://bower.io/) - -```sh -$ bower install kind-of --save -``` - -## Why use this? - -1. [it's fast](#benchmarks) | [optimizations](#optimizations) -2. [better type checking](#better-type-checking) - -## Usage - -> es5, browser and es6 ready - -```js -var kindOf = require('kind-of'); - -kindOf(undefined); -//=> 'undefined' - -kindOf(null); -//=> 'null' - -kindOf(true); -//=> 'boolean' - -kindOf(false); -//=> 'boolean' - -kindOf(new Boolean(true)); -//=> 'boolean' - -kindOf(new Buffer('')); -//=> 'buffer' - -kindOf(42); -//=> 'number' - -kindOf(new Number(42)); -//=> 'number' - -kindOf('str'); -//=> 'string' - -kindOf(new String('str')); -//=> 'string' - -kindOf(arguments); -//=> 'arguments' - -kindOf({}); -//=> 'object' - -kindOf(Object.create(null)); -//=> 'object' - -kindOf(new Test()); -//=> 'object' - -kindOf(new Date()); -//=> 'date' - -kindOf([]); -//=> 'array' - -kindOf([1, 2, 3]); -//=> 'array' - -kindOf(new Array()); -//=> 'array' - -kindOf(/foo/); -//=> 'regexp' - -kindOf(new RegExp('foo')); -//=> 'regexp' - -kindOf(function () {}); -//=> 'function' - -kindOf(function * () {}); -//=> 'function' - -kindOf(new Function()); -//=> 'function' - -kindOf(new Map()); -//=> 'map' - -kindOf(new WeakMap()); -//=> 'weakmap' - -kindOf(new Set()); -//=> 'set' - -kindOf(new WeakSet()); -//=> 'weakset' - -kindOf(Symbol('str')); -//=> 'symbol' - -kindOf(new Int8Array()); -//=> 'int8array' - -kindOf(new Uint8Array()); -//=> 'uint8array' - -kindOf(new Uint8ClampedArray()); -//=> 'uint8clampedarray' - -kindOf(new Int16Array()); -//=> 'int16array' - -kindOf(new Uint16Array()); -//=> 'uint16array' - -kindOf(new Int32Array()); -//=> 'int32array' - -kindOf(new Uint32Array()); -//=> 'uint32array' - -kindOf(new Float32Array()); -//=> 'float32array' - -kindOf(new Float64Array()); -//=> 'float64array' -``` - -## Release history - -### v4.0.0 - -**Added** - -* `promise` support - -### v5.0.0 - -**Added** - -* `Set Iterator` and `Map Iterator` support - -**Fixed** - -* Now returns `generatorfunction` for generator functions - -## Benchmarks - -Benchmarked against [typeof](http://github.com/CodingFu/typeof) and [type-of](https://github.com/ForbesLindesay/type-of). -Note that performaces is slower for es6 features `Map`, `WeakMap`, `Set` and `WeakSet`. - -```bash -#1: array - current x 23,329,397 ops/sec ±0.82% (94 runs sampled) - lib-type-of x 4,170,273 ops/sec ±0.55% (94 runs sampled) - lib-typeof x 9,686,935 ops/sec ±0.59% (98 runs sampled) - -#2: boolean - current x 27,197,115 ops/sec ±0.85% (94 runs sampled) - lib-type-of x 3,145,791 ops/sec ±0.73% (97 runs sampled) - lib-typeof x 9,199,562 ops/sec ±0.44% (99 runs sampled) - -#3: date - current x 20,190,117 ops/sec ±0.86% (92 runs sampled) - lib-type-of x 5,166,970 ops/sec ±0.74% (94 runs sampled) - lib-typeof x 9,610,821 ops/sec ±0.50% (96 runs sampled) - -#4: function - current x 23,855,460 ops/sec ±0.60% (97 runs sampled) - lib-type-of x 5,667,740 ops/sec ±0.54% (100 runs sampled) - lib-typeof x 10,010,644 ops/sec ±0.44% (100 runs sampled) - -#5: null - current x 27,061,047 ops/sec ±0.97% (96 runs sampled) - lib-type-of x 13,965,573 ops/sec ±0.62% (97 runs sampled) - lib-typeof x 8,460,194 ops/sec ±0.61% (97 runs sampled) - -#6: number - current x 25,075,682 ops/sec ±0.53% (99 runs sampled) - lib-type-of x 2,266,405 ops/sec ±0.41% (98 runs sampled) - lib-typeof x 9,821,481 ops/sec ±0.45% (99 runs sampled) - -#7: object - current x 3,348,980 ops/sec ±0.49% (99 runs sampled) - lib-type-of x 3,245,138 ops/sec ±0.60% (94 runs sampled) - lib-typeof x 9,262,952 ops/sec ±0.59% (99 runs sampled) - -#8: regex - current x 21,284,827 ops/sec ±0.72% (96 runs sampled) - lib-type-of x 4,689,241 ops/sec ±0.43% (100 runs sampled) - lib-typeof x 8,957,593 ops/sec ±0.62% (98 runs sampled) - -#9: string - current x 25,379,234 ops/sec ±0.58% (96 runs sampled) - lib-type-of x 3,635,148 ops/sec ±0.76% (93 runs sampled) - lib-typeof x 9,494,134 ops/sec ±0.49% (98 runs sampled) - -#10: undef - current x 27,459,221 ops/sec ±1.01% (93 runs sampled) - lib-type-of x 14,360,433 ops/sec ±0.52% (99 runs sampled) - lib-typeof x 23,202,868 ops/sec ±0.59% (94 runs sampled) - -``` - -## Optimizations - -In 7 out of 8 cases, this library is 2x-10x faster than other top libraries included in the benchmarks. There are a few things that lead to this performance advantage, none of them hard and fast rules, but all of them simple and repeatable in almost any code library: - -1. Optimize around the fastest and most common use cases first. Of course, this will change from project-to-project, but I took some time to understand how and why `typeof` checks were being used in my own libraries and other libraries I use a lot. -2. Optimize around bottlenecks - In other words, the order in which conditionals are implemented is significant, because each check is only as fast as the failing checks that came before it. Here, the biggest bottleneck by far is checking for plain objects (an object that was created by the `Object` constructor). I opted to make this check happen by process of elimination rather than brute force up front (e.g. by using something like `val.constructor.name`), so that every other type check would not be penalized it. -3. Don't do uneccessary processing - why do `.slice(8, -1).toLowerCase();` just to get the word `regex`? It's much faster to do `if (type === '[object RegExp]') return 'regex'` -4. There is no reason to make the code in a microlib as terse as possible, just to win points for making it shorter. It's always better to favor performant code over terse code. You will always only be using a single `require()` statement to use the library anyway, regardless of how the code is written. - -## Better type checking - -kind-of is more correct than other type checking libs I've looked at. For example, here are some differing results from other popular libs: - -### [typeof](https://github.com/CodingFu/typeof) lib - -Incorrectly tests instances of custom constructors (pretty common): - -```js -var typeOf = require('typeof'); -function Test() {} -console.log(typeOf(new Test())); -//=> 'test' -``` - -Returns `object` instead of `arguments`: - -```js -function foo() { - console.log(typeOf(arguments)) //=> 'object' -} -foo(); -``` - -### [type-of](https://github.com/ForbesLindesay/type-of) lib - -Incorrectly returns `object` for generator functions, buffers, `Map`, `Set`, `WeakMap` and `WeakSet`: - -```js -function * foo() {} -console.log(typeOf(foo)); -//=> 'object' -console.log(typeOf(new Buffer(''))); -//=> 'object' -console.log(typeOf(new Map())); -//=> 'object' -console.log(typeOf(new Set())); -//=> 'object' -console.log(typeOf(new WeakMap())); -//=> 'object' -console.log(typeOf(new WeakSet())); -//=> 'object' -``` - -## 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-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") -* [is-number](https://www.npmjs.com/package/is-number): Returns true if the value is a number. comprehensive tests. | [homepage](https://github.com/jonschlinkert/is-number "Returns true if the value is a number. comprehensive tests.") -* [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. ") - -### Contributors - -| **Commits** | **Contributor** | -| --- | --- | -| 82 | [jonschlinkert](https://github.com/jonschlinkert) | -| 3 | [aretecode](https://github.com/aretecode) | -| 2 | [miguelmota](https://github.com/miguelmota) | -| 1 | [dtothefp](https://github.com/dtothefp) | -| 1 | [ksheedlo](https://github.com/ksheedlo) | -| 1 | [pdehaan](https://github.com/pdehaan) | -| 1 | [laggingreflex](https://github.com/laggingreflex) | -| 1 | [charlike](https://github.com/charlike) | - -### Author - -**Jon Schlinkert** - -* [github/jonschlinkert](https://github.com/jonschlinkert) -* [twitter/jonschlinkert](https://twitter.com/jonschlinkert) - -### License - -Copyright © 2017, [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 October 13, 2017._ \ No newline at end of file diff --git a/node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of/index.js b/node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of/index.js deleted file mode 100644 index fc5cde9..0000000 --- a/node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of/index.js +++ /dev/null @@ -1,147 +0,0 @@ -var toString = Object.prototype.toString; - -/** - * Get the native `typeof` a value. - * - * @param {*} `val` - * @return {*} Native javascript type - */ - -module.exports = function kindOf(val) { - var type = typeof val; - - // primitivies - if (type === 'undefined') { - return 'undefined'; - } - if (val === null) { - return 'null'; - } - if (val === true || val === false || val instanceof Boolean) { - return 'boolean'; - } - if (type === 'string' || val instanceof String) { - return 'string'; - } - if (type === 'number' || val instanceof Number) { - return 'number'; - } - - // functions - if (type === 'function' || val instanceof Function) { - if (typeof val.constructor.name !== 'undefined' && val.constructor.name.slice(0, 9) === 'Generator') { - return 'generatorfunction'; - } - return 'function'; - } - - // array - if (typeof Array.isArray !== 'undefined' && Array.isArray(val)) { - return 'array'; - } - - // check for instances of RegExp and Date before calling `toString` - if (val instanceof RegExp) { - return 'regexp'; - } - if (val instanceof Date) { - return 'date'; - } - - // other objects - type = toString.call(val); - - if (type === '[object RegExp]') { - return 'regexp'; - } - if (type === '[object Date]') { - return 'date'; - } - if (type === '[object Arguments]') { - return 'arguments'; - } - if (type === '[object Error]') { - return 'error'; - } - if (type === '[object Promise]') { - return 'promise'; - } - - // buffer - if (isBuffer(val)) { - return 'buffer'; - } - - // es6: Map, WeakMap, Set, WeakSet - if (type === '[object Set]') { - return 'set'; - } - if (type === '[object WeakSet]') { - return 'weakset'; - } - if (type === '[object Map]') { - return 'map'; - } - if (type === '[object WeakMap]') { - return 'weakmap'; - } - if (type === '[object Symbol]') { - return 'symbol'; - } - - if (type === '[object Map Iterator]') { - return 'mapiterator'; - } - if (type === '[object Set Iterator]') { - return 'setiterator'; - } - if (type === '[object String Iterator]') { - return 'stringiterator'; - } - if (type === '[object Array Iterator]') { - return 'arrayiterator'; - } - - // typed arrays - if (type === '[object Int8Array]') { - return 'int8array'; - } - if (type === '[object Uint8Array]') { - return 'uint8array'; - } - if (type === '[object Uint8ClampedArray]') { - return 'uint8clampedarray'; - } - if (type === '[object Int16Array]') { - return 'int16array'; - } - if (type === '[object Uint16Array]') { - return 'uint16array'; - } - if (type === '[object Int32Array]') { - return 'int32array'; - } - if (type === '[object Uint32Array]') { - return 'uint32array'; - } - if (type === '[object Float32Array]') { - return 'float32array'; - } - if (type === '[object Float64Array]') { - return 'float64array'; - } - - // must be a plain object - return 'object'; -}; - -/** - * If you need to support Safari 5-7 (8-10 yr-old browser), - * take a look at https://github.com/feross/is-buffer - */ - -function isBuffer(val) { - return val.constructor - && typeof val.constructor.isBuffer === 'function' - && val.constructor.isBuffer(val); -} diff --git a/node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of/package.json b/node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of/package.json deleted file mode 100644 index 334235f..0000000 --- a/node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of/package.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "name": "kind-of", - "description": "Get the native type of a value.", - "version": "5.1.0", - "homepage": "https://github.com/jonschlinkert/kind-of", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "contributors": [ - "David Fox-Powell (https://dtothefp.github.io/me)", - "James (https://twitter.com/aretecode)", - "Jon Schlinkert (http://twitter.com/jonschlinkert)", - "Ken Sheedlo (kensheedlo.com)", - "laggingreflex (https://github.com/laggingreflex)", - "Miguel Mota (https://miguelmota.com)", - "Peter deHaan (http://about.me/peterdehaan)", - "tunnckoCore (https://i.am.charlike.online)" - ], - "repository": "jonschlinkert/kind-of", - "bugs": { - "url": "https://github.com/jonschlinkert/kind-of/issues" - }, - "license": "MIT", - "files": [ - "index.js" - ], - "main": "index.js", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha", - "prepublish": "browserify -o browser.js -e index.js -s index --bare" - }, - "devDependencies": { - "ansi-bold": "^0.1.1", - "benchmarked": "^1.1.1", - "browserify": "^14.4.0", - "gulp-format-md": "^0.1.12", - "matched": "^0.4.4", - "mocha": "^3.4.2", - "type-of": "^2.0.1", - "typeof": "^1.0.0" - }, - "keywords": [ - "arguments", - "array", - "boolean", - "check", - "date", - "function", - "is", - "is-type", - "is-type-of", - "kind", - "kind-of", - "number", - "object", - "of", - "regexp", - "string", - "test", - "type", - "type-of", - "typeof", - "types" - ], - "verb": { - "related": { - "list": [ - "is-glob", - "is-number", - "is-primitive" - ] - }, - "toc": false, - "layout": "default", - "tasks": [ - "readme" - ], - "plugins": [ - "gulp-format-md" - ], - "lint": { - "reflinks": true - }, - "reflinks": [ - "type-of", - "typeof", - "verb" - ] - } -} diff --git a/node_modules/object-copy/node_modules/is-descriptor/package.json b/node_modules/object-copy/node_modules/is-descriptor/package.json deleted file mode 100644 index a561bfe..0000000 --- a/node_modules/object-copy/node_modules/is-descriptor/package.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "name": "is-descriptor", - "description": "Returns true if a value has the characteristics of a valid JavaScript descriptor. Works for data descriptors and accessor descriptors.", - "version": "0.1.6", - "homepage": "https://github.com/jonschlinkert/is-descriptor", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "contributors": [ - "Brian Woodward (https://twitter.com/doowb)", - "Jon Schlinkert (http://twitter.com/jonschlinkert)", - "(https://github.com/wtgtybhertgeghgtwtg)" - ], - "repository": "jonschlinkert/is-descriptor", - "bugs": { - "url": "https://github.com/jonschlinkert/is-descriptor/issues" - }, - "license": "MIT", - "files": [ - "index.js" - ], - "main": "index.js", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "devDependencies": { - "gulp-format-md": "^1.0.0", - "mocha": "^3.4.2" - }, - "keywords": [ - "accessor", - "check", - "data", - "descriptor", - "get", - "getter", - "is", - "keys", - "object", - "properties", - "property", - "set", - "setter", - "type", - "valid", - "value" - ], - "verb": { - "related": { - "list": [ - "is-accessor-descriptor", - "is-data-descriptor", - "is-descriptor", - "isobject" - ] - }, - "plugins": [ - "gulp-format-md" - ], - "toc": false, - "layout": "default", - "tasks": [ - "readme" - ], - "lint": { - "reflinks": true - } - } -} diff --git a/node_modules/object-copy/package.json b/node_modules/object-copy/package.json deleted file mode 100644 index f02a96c..0000000 --- a/node_modules/object-copy/package.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "object-copy", - "description": "Copy static properties, prototype properties, and descriptors from one object to another.", - "version": "0.1.0", - "homepage": "https://github.com/jonschlinkert/object-copy", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "repository": "jonschlinkert/object-copy", - "bugs": { - "url": "https://github.com/jonschlinkert/object-copy/issues" - }, - "license": "MIT", - "files": [ - "index.js" - ], - "main": "index.js", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "devDependencies": { - "gulp-format-md": "*", - "mocha": "*" - }, - "keywords": [ - "copy", - "object" - ], - "verb": { - "layout": "default", - "plugins": [ - "gulp-format-md" - ], - "related": { - "list": [] - }, - "reflinks": [ - "verb" - ] - } -} diff --git a/node_modules/object-visit/LICENSE b/node_modules/object-visit/LICENSE deleted file mode 100644 index ec85897..0000000 --- a/node_modules/object-visit/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015, 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/object-visit/README.md b/node_modules/object-visit/README.md deleted file mode 100644 index 64015cb..0000000 --- a/node_modules/object-visit/README.md +++ /dev/null @@ -1,83 +0,0 @@ -# object-visit [![NPM version](https://img.shields.io/npm/v/object-visit.svg?style=flat)](https://www.npmjs.com/package/object-visit) [![NPM monthly downloads](https://img.shields.io/npm/dm/object-visit.svg?style=flat)](https://npmjs.org/package/object-visit) [![NPM total downloads](https://img.shields.io/npm/dt/object-visit.svg?style=flat)](https://npmjs.org/package/object-visit) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/object-visit.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/object-visit) - -> Call a specified method on each value in the given object. - -## Install - -Install with [npm](https://www.npmjs.com/): - -```sh -$ npm install --save object-visit -``` - -## Usage - -```js -var visit = require('object-visit'); - -var ctx = { - data: {}, - set: function (key, value) { - if (typeof key === 'object') { - visit(ctx, 'set', key); - } else { - ctx.data[key] = value; - } - } -}; - -ctx.set('a', 'a'); -ctx.set('b', 'b'); -ctx.set('c', 'c'); -ctx.set({d: {e: 'f'}}); - -console.log(ctx.data); -//=> {a: 'a', b: 'b', c: 'c', d: { e: 'f' }}; -``` - -## About - -### Related projects - -* [base-methods](https://www.npmjs.com/package/base-methods): base-methods is the foundation for creating modular, unit testable and highly pluggable node.js applications, starting… [more](https://github.com/jonschlinkert/base-methods) | [homepage](https://github.com/jonschlinkert/base-methods "base-methods is the foundation for creating modular, unit testable and highly pluggable node.js applications, starting with a handful of common methods, like `set`, `get`, `del` and `use`.") -* [collection-visit](https://www.npmjs.com/package/collection-visit): Visit a method over the items in an object, or map visit over the objects… [more](https://github.com/jonschlinkert/collection-visit) | [homepage](https://github.com/jonschlinkert/collection-visit "Visit a method over the items in an object, or map visit over the objects in an array.") -* [define-property](https://www.npmjs.com/package/define-property): Define a non-enumerable property on an object. | [homepage](https://github.com/jonschlinkert/define-property "Define a non-enumerable property on an object.") -* [map-visit](https://www.npmjs.com/package/map-visit): Map `visit` over an array of objects. | [homepage](https://github.com/jonschlinkert/map-visit "Map `visit` over an array of objects.") - -### Contributing - -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). - -### 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 -``` - -### 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 -``` - -### Author - -**Jon Schlinkert** - -* [github/jonschlinkert](https://github.com/jonschlinkert) -* [twitter/jonschlinkert](https://twitter.com/jonschlinkert) - -### License - -Copyright © 2017, [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 May 30, 2017._ \ No newline at end of file diff --git a/node_modules/object-visit/index.js b/node_modules/object-visit/index.js deleted file mode 100644 index fcaeda9..0000000 --- a/node_modules/object-visit/index.js +++ /dev/null @@ -1,33 +0,0 @@ -/*! - * object-visit - * - * Copyright (c) 2015, 2017, Jon Schlinkert. - * Released under the MIT License. - */ - -'use strict'; - -var isObject = require('isobject'); - -module.exports = function visit(thisArg, method, target, val) { - if (!isObject(thisArg) && typeof thisArg !== 'function') { - throw new Error('object-visit expects `thisArg` to be an object.'); - } - - if (typeof method !== 'string') { - throw new Error('object-visit expects `method` name to be a string'); - } - - if (typeof thisArg[method] !== 'function') { - return thisArg; - } - - var args = [].slice.call(arguments, 3); - target = target || {}; - - for (var key in target) { - var arr = [key, target[key]].concat(args); - thisArg[method].apply(thisArg, arr); - } - return thisArg; -}; diff --git a/node_modules/object-visit/package.json b/node_modules/object-visit/package.json deleted file mode 100644 index 15fd0ff..0000000 --- a/node_modules/object-visit/package.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "name": "object-visit", - "description": "Call a specified method on each value in the given object.", - "version": "1.0.1", - "homepage": "https://github.com/jonschlinkert/object-visit", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "repository": "jonschlinkert/object-visit", - "bugs": { - "url": "https://github.com/jonschlinkert/object-visit/issues" - }, - "license": "MIT", - "files": [ - "index.js" - ], - "main": "index.js", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "dependencies": { - "isobject": "^3.0.0" - }, - "devDependencies": { - "gulp": "^3.9.1", - "gulp-eslint": "^3.0.1", - "gulp-format-md": "^0.1.12", - "gulp-istanbul": "^1.1.1", - "gulp-mocha": "^3.0.0", - "mocha": "^3.2.0" - }, - "keywords": [ - "context", - "function", - "helper", - "key", - "method", - "object", - "value", - "visit", - "visitor" - ], - "verb": { - "related": { - "list": [ - "base-methods", - "collection-visit", - "define-property", - "map-visit" - ] - }, - "toc": false, - "layout": "default", - "tasks": [ - "readme" - ], - "plugins": [ - "gulp-format-md" - ], - "lint": { - "reflinks": true - } - } -} diff --git a/node_modules/object.pick/LICENSE b/node_modules/object.pick/LICENSE deleted file mode 100644 index 39245ac..0000000 --- a/node_modules/object.pick/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -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/object.pick/README.md b/node_modules/object.pick/README.md deleted file mode 100644 index 48f7453..0000000 --- a/node_modules/object.pick/README.md +++ /dev/null @@ -1,76 +0,0 @@ -# object.pick [![NPM version](https://img.shields.io/npm/v/object.pick.svg?style=flat)](https://www.npmjs.com/package/object.pick) [![NPM monthly downloads](https://img.shields.io/npm/dm/object.pick.svg?style=flat)](https://npmjs.org/package/object.pick) [![NPM total downloads](https://img.shields.io/npm/dt/object.pick.svg?style=flat)](https://npmjs.org/package/object.pick) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/object.pick.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/object.pick) - -> Returns a filtered copy of an object with only the specified keys, similar to `_.pick` from lodash / underscore. - -You might also be interested in [object.omit](https://github.com/jonschlinkert/object.omit). - -## Install - -Install with [npm](https://www.npmjs.com/): - -```sh -$ npm install --save object.pick -``` - -## benchmarks - -This is the [fastest implementation](http://jsperf.com/pick-props) I tested. Pull requests welcome! - -## Usage - -```js -var pick = require('object.pick'); - -pick({a: 'a', b: 'b'}, 'a') -//=> {a: 'a'} - -pick({a: 'a', b: 'b', c: 'c'}, ['a', 'b']) -//=> {a: 'a', b: 'b'} -``` - -## About - -### Related projects - -* [extend-shallow](https://www.npmjs.com/package/extend-shallow): Extend an object with the properties of additional objects. node.js/javascript util. | [homepage](https://github.com/jonschlinkert/extend-shallow "Extend an object with the properties of additional objects. node.js/javascript util.") -* [get-value](https://www.npmjs.com/package/get-value): Use property paths (`a.b.c`) to get a nested value from an object. | [homepage](https://github.com/jonschlinkert/get-value "Use property paths (`a.b.c`) to get a nested value from an object.") -* [mixin-deep](https://www.npmjs.com/package/mixin-deep): Deeply mix the properties of objects into the first object. Like merge-deep, but doesn't clone. | [homepage](https://github.com/jonschlinkert/mixin-deep "Deeply mix the properties of objects into the first object. Like merge-deep, but doesn't clone.") -* [set-value](https://www.npmjs.com/package/set-value): Create nested values and any intermediaries using dot notation (`'a.b.c'`) paths. | [homepage](https://github.com/jonschlinkert/set-value "Create nested values and any intermediaries using dot notation (`'a.b.c'`) paths.") - -### 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/object.pick/blob/master/LICENSE). - -*** - -_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.2.0, on October 27, 2016._ \ No newline at end of file diff --git a/node_modules/object.pick/index.js b/node_modules/object.pick/index.js deleted file mode 100644 index 0ce0178..0000000 --- a/node_modules/object.pick/index.js +++ /dev/null @@ -1,35 +0,0 @@ -/*! - * object.pick - * - * Copyright (c) 2014-2015 Jon Schlinkert, contributors. - * Licensed under the MIT License - */ - -'use strict'; - -var isObject = require('isobject'); - -module.exports = function pick(obj, keys) { - if (!isObject(obj) && typeof obj !== 'function') { - return {}; - } - - var res = {}; - if (typeof keys === 'string') { - if (keys in obj) { - res[keys] = obj[keys]; - } - return res; - } - - var len = keys.length; - var idx = -1; - - while (++idx < len) { - var key = keys[idx]; - if (key in obj) { - res[key] = obj[key]; - } - } - return res; -}; diff --git a/node_modules/object.pick/package.json b/node_modules/object.pick/package.json deleted file mode 100644 index b655dbe..0000000 --- a/node_modules/object.pick/package.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "name": "object.pick", - "description": "Returns a filtered copy of an object with only the specified keys, similar to `_.pick` from lodash / underscore.", - "version": "1.3.0", - "homepage": "https://github.com/jonschlinkert/object.pick", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "repository": "jonschlinkert/object.pick", - "bugs": { - "url": "https://github.com/jonschlinkert/object.pick/issues" - }, - "license": "MIT", - "files": [ - "index.js" - ], - "main": "index.js", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "dependencies": { - "isobject": "^3.0.1" - }, - "devDependencies": { - "gulp-format-md": "^1.0.0", - "mocha": "^3.1.2", - "vinyl": "^2.0.0" - }, - "keywords": [ - "object", - "pick" - ], - "verb": { - "run": true, - "toc": false, - "layout": "default", - "tasks": [ - "readme" - ], - "plugins": [ - "gulp-format-md" - ], - "related": { - "list": [ - "extend-shallow", - "get-value", - "mixin-deep", - "set-value" - ], - "highlight": "object.omit" - }, - "reflinks": [ - "verb" - ], - "lint": { - "reflinks": true - } - } -} diff --git a/node_modules/on-finished/HISTORY.md b/node_modules/on-finished/HISTORY.md deleted file mode 100644 index 98ff0e9..0000000 --- a/node_modules/on-finished/HISTORY.md +++ /dev/null @@ -1,88 +0,0 @@ -2.3.0 / 2015-05-26 -================== - - * Add defined behavior for HTTP `CONNECT` requests - * Add defined behavior for HTTP `Upgrade` requests - * deps: ee-first@1.1.1 - -2.2.1 / 2015-04-22 -================== - - * Fix `isFinished(req)` when data buffered - -2.2.0 / 2014-12-22 -================== - - * Add message object to callback arguments - -2.1.1 / 2014-10-22 -================== - - * Fix handling of pipelined requests - -2.1.0 / 2014-08-16 -================== - - * Check if `socket` is detached - * Return `undefined` for `isFinished` if state unknown - -2.0.0 / 2014-08-16 -================== - - * Add `isFinished` function - * Move to `jshttp` organization - * Remove support for plain socket argument - * Rename to `on-finished` - * Support both `req` and `res` as arguments - * deps: ee-first@1.0.5 - -1.2.2 / 2014-06-10 -================== - - * Reduce listeners added to emitters - - avoids "event emitter leak" warnings when used multiple times on same request - -1.2.1 / 2014-06-08 -================== - - * Fix returned value when already finished - -1.2.0 / 2014-06-05 -================== - - * Call callback when called on already-finished socket - -1.1.4 / 2014-05-27 -================== - - * Support node.js 0.8 - -1.1.3 / 2014-04-30 -================== - - * Make sure errors passed as instanceof `Error` - -1.1.2 / 2014-04-18 -================== - - * Default the `socket` to passed-in object - -1.1.1 / 2014-01-16 -================== - - * Rename module to `finished` - -1.1.0 / 2013-12-25 -================== - - * Call callback when called on already-errored socket - -1.0.1 / 2013-12-20 -================== - - * Actually pass the error to the callback - -1.0.0 / 2013-12-20 -================== - - * Initial release diff --git a/node_modules/on-finished/LICENSE b/node_modules/on-finished/LICENSE deleted file mode 100644 index 5931fd2..0000000 --- a/node_modules/on-finished/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -(The MIT License) - -Copyright (c) 2013 Jonathan Ong -Copyright (c) 2014 Douglas Christopher Wilson - -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/on-finished/README.md b/node_modules/on-finished/README.md deleted file mode 100644 index a0e1157..0000000 --- a/node_modules/on-finished/README.md +++ /dev/null @@ -1,154 +0,0 @@ -# on-finished - -[![NPM Version][npm-image]][npm-url] -[![NPM Downloads][downloads-image]][downloads-url] -[![Node.js Version][node-version-image]][node-version-url] -[![Build Status][travis-image]][travis-url] -[![Test Coverage][coveralls-image]][coveralls-url] - -Execute a callback when a HTTP request closes, finishes, or errors. - -## Install - -```sh -$ npm install on-finished -``` - -## API - -```js -var onFinished = require('on-finished') -``` - -### onFinished(res, listener) - -Attach a listener to listen for the response to finish. The listener will -be invoked only once when the response finished. If the response finished -to an error, the first argument will contain the error. If the response -has already finished, the listener will be invoked. - -Listening to the end of a response would be used to close things associated -with the response, like open files. - -Listener is invoked as `listener(err, res)`. - -```js -onFinished(res, function (err, res) { - // clean up open fds, etc. - // err contains the error is request error'd -}) -``` - -### onFinished(req, listener) - -Attach a listener to listen for the request to finish. The listener will -be invoked only once when the request finished. If the request finished -to an error, the first argument will contain the error. If the request -has already finished, the listener will be invoked. - -Listening to the end of a request would be used to know when to continue -after reading the data. - -Listener is invoked as `listener(err, req)`. - -```js -var data = '' - -req.setEncoding('utf8') -res.on('data', function (str) { - data += str -}) - -onFinished(req, function (err, req) { - // data is read unless there is err -}) -``` - -### onFinished.isFinished(res) - -Determine if `res` is already finished. This would be useful to check and -not even start certain operations if the response has already finished. - -### onFinished.isFinished(req) - -Determine if `req` is already finished. This would be useful to check and -not even start certain operations if the request has already finished. - -## Special Node.js requests - -### HTTP CONNECT method - -The meaning of the `CONNECT` method from RFC 7231, section 4.3.6: - -> The CONNECT method requests that the recipient establish a tunnel to -> the destination origin server identified by the request-target and, -> if successful, thereafter restrict its behavior to blind forwarding -> of packets, in both directions, until the tunnel is closed. Tunnels -> are commonly used to create an end-to-end virtual connection, through -> one or more proxies, which can then be secured using TLS (Transport -> Layer Security, [RFC5246]). - -In Node.js, these request objects come from the `'connect'` event on -the HTTP server. - -When this module is used on a HTTP `CONNECT` request, the request is -considered "finished" immediately, **due to limitations in the Node.js -interface**. This means if the `CONNECT` request contains a request entity, -the request will be considered "finished" even before it has been read. - -There is no such thing as a response object to a `CONNECT` request in -Node.js, so there is no support for for one. - -### HTTP Upgrade request - -The meaning of the `Upgrade` header from RFC 7230, section 6.1: - -> The "Upgrade" header field is intended to provide a simple mechanism -> for transitioning from HTTP/1.1 to some other protocol on the same -> connection. - -In Node.js, these request objects come from the `'upgrade'` event on -the HTTP server. - -When this module is used on a HTTP request with an `Upgrade` header, the -request is considered "finished" immediately, **due to limitations in the -Node.js interface**. This means if the `Upgrade` request contains a request -entity, the request will be considered "finished" even before it has been -read. - -There is no such thing as a response object to a `Upgrade` request in -Node.js, so there is no support for for one. - -## Example - -The following code ensures that file descriptors are always closed -once the response finishes. - -```js -var destroy = require('destroy') -var http = require('http') -var onFinished = require('on-finished') - -http.createServer(function onRequest(req, res) { - var stream = fs.createReadStream('package.json') - stream.pipe(res) - onFinished(res, function (err) { - destroy(stream) - }) -}) -``` - -## License - -[MIT](LICENSE) - -[npm-image]: https://img.shields.io/npm/v/on-finished.svg -[npm-url]: https://npmjs.org/package/on-finished -[node-version-image]: https://img.shields.io/node/v/on-finished.svg -[node-version-url]: http://nodejs.org/download/ -[travis-image]: https://img.shields.io/travis/jshttp/on-finished/master.svg -[travis-url]: https://travis-ci.org/jshttp/on-finished -[coveralls-image]: https://img.shields.io/coveralls/jshttp/on-finished/master.svg -[coveralls-url]: https://coveralls.io/r/jshttp/on-finished?branch=master -[downloads-image]: https://img.shields.io/npm/dm/on-finished.svg -[downloads-url]: https://npmjs.org/package/on-finished diff --git a/node_modules/on-finished/index.js b/node_modules/on-finished/index.js deleted file mode 100644 index 9abd98f..0000000 --- a/node_modules/on-finished/index.js +++ /dev/null @@ -1,196 +0,0 @@ -/*! - * on-finished - * Copyright(c) 2013 Jonathan Ong - * Copyright(c) 2014 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict' - -/** - * Module exports. - * @public - */ - -module.exports = onFinished -module.exports.isFinished = isFinished - -/** - * Module dependencies. - * @private - */ - -var first = require('ee-first') - -/** - * Variables. - * @private - */ - -/* istanbul ignore next */ -var defer = typeof setImmediate === 'function' - ? setImmediate - : function(fn){ process.nextTick(fn.bind.apply(fn, arguments)) } - -/** - * Invoke callback when the response has finished, useful for - * cleaning up resources afterwards. - * - * @param {object} msg - * @param {function} listener - * @return {object} - * @public - */ - -function onFinished(msg, listener) { - if (isFinished(msg) !== false) { - defer(listener, null, msg) - return msg - } - - // attach the listener to the message - attachListener(msg, listener) - - return msg -} - -/** - * Determine if message is already finished. - * - * @param {object} msg - * @return {boolean} - * @public - */ - -function isFinished(msg) { - var socket = msg.socket - - if (typeof msg.finished === 'boolean') { - // OutgoingMessage - return Boolean(msg.finished || (socket && !socket.writable)) - } - - if (typeof msg.complete === 'boolean') { - // IncomingMessage - return Boolean(msg.upgrade || !socket || !socket.readable || (msg.complete && !msg.readable)) - } - - // don't know - return undefined -} - -/** - * Attach a finished listener to the message. - * - * @param {object} msg - * @param {function} callback - * @private - */ - -function attachFinishedListener(msg, callback) { - var eeMsg - var eeSocket - var finished = false - - function onFinish(error) { - eeMsg.cancel() - eeSocket.cancel() - - finished = true - callback(error) - } - - // finished on first message event - eeMsg = eeSocket = first([[msg, 'end', 'finish']], onFinish) - - function onSocket(socket) { - // remove listener - msg.removeListener('socket', onSocket) - - if (finished) return - if (eeMsg !== eeSocket) return - - // finished on first socket event - eeSocket = first([[socket, 'error', 'close']], onFinish) - } - - if (msg.socket) { - // socket already assigned - onSocket(msg.socket) - return - } - - // wait for socket to be assigned - msg.on('socket', onSocket) - - if (msg.socket === undefined) { - // node.js 0.8 patch - patchAssignSocket(msg, onSocket) - } -} - -/** - * Attach the listener to the message. - * - * @param {object} msg - * @return {function} - * @private - */ - -function attachListener(msg, listener) { - var attached = msg.__onFinished - - // create a private single listener with queue - if (!attached || !attached.queue) { - attached = msg.__onFinished = createListener(msg) - attachFinishedListener(msg, attached) - } - - attached.queue.push(listener) -} - -/** - * Create listener on message. - * - * @param {object} msg - * @return {function} - * @private - */ - -function createListener(msg) { - function listener(err) { - if (msg.__onFinished === listener) msg.__onFinished = null - if (!listener.queue) return - - var queue = listener.queue - listener.queue = null - - for (var i = 0; i < queue.length; i++) { - queue[i](err, msg) - } - } - - listener.queue = [] - - return listener -} - -/** - * Patch ServerResponse.prototype.assignSocket for node.js 0.8. - * - * @param {ServerResponse} res - * @param {function} callback - * @private - */ - -function patchAssignSocket(res, callback) { - var assignSocket = res.assignSocket - - if (typeof assignSocket !== 'function') return - - // res.on('socket', callback) is broken in 0.8 - res.assignSocket = function _assignSocket(socket) { - assignSocket.call(this, socket) - callback(socket) - } -} diff --git a/node_modules/on-finished/package.json b/node_modules/on-finished/package.json deleted file mode 100644 index b9df1bd..0000000 --- a/node_modules/on-finished/package.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "on-finished", - "description": "Execute a callback when a request closes, finishes, or errors", - "version": "2.3.0", - "contributors": [ - "Douglas Christopher Wilson ", - "Jonathan Ong (http://jongleberry.com)" - ], - "license": "MIT", - "repository": "jshttp/on-finished", - "dependencies": { - "ee-first": "1.1.1" - }, - "devDependencies": { - "istanbul": "0.3.9", - "mocha": "2.2.5" - }, - "engines": { - "node": ">= 0.8" - }, - "files": [ - "HISTORY.md", - "LICENSE", - "index.js" - ], - "scripts": { - "test": "mocha --reporter spec --bail --check-leaks test/", - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/", - "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/" - } -} diff --git a/node_modules/on-headers/HISTORY.md b/node_modules/on-headers/HISTORY.md deleted file mode 100644 index 090598d..0000000 --- a/node_modules/on-headers/HISTORY.md +++ /dev/null @@ -1,21 +0,0 @@ -1.0.2 / 2019-02-21 -================== - - * Fix `res.writeHead` patch missing return value - -1.0.1 / 2015-09-29 -================== - - * perf: enable strict mode - -1.0.0 / 2014-08-10 -================== - - * Honor `res.statusCode` change in `listener` - * Move to `jshttp` organization - * Prevent `arguments`-related de-opt - -0.0.0 / 2014-05-13 -================== - - * Initial implementation diff --git a/node_modules/on-headers/LICENSE b/node_modules/on-headers/LICENSE deleted file mode 100644 index b7dce6c..0000000 --- a/node_modules/on-headers/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) 2014 Douglas Christopher Wilson - -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/on-headers/README.md b/node_modules/on-headers/README.md deleted file mode 100644 index ae84282..0000000 --- a/node_modules/on-headers/README.md +++ /dev/null @@ -1,81 +0,0 @@ -# on-headers - -[![NPM Version][npm-version-image]][npm-url] -[![NPM Downloads][npm-downloads-image]][npm-url] -[![Node.js Version][node-version-image]][node-version-url] -[![Build Status][travis-image]][travis-url] -[![Test Coverage][coveralls-image]][coveralls-url] - -Execute a listener when a response is about to write headers. - -## Installation - -This is a [Node.js](https://nodejs.org/en/) module available through the -[npm registry](https://www.npmjs.com/). Installation is done using the -[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): - -```sh -$ npm install on-headers -``` - -## API - - - -```js -var onHeaders = require('on-headers') -``` - -### onHeaders(res, listener) - -This will add the listener `listener` to fire when headers are emitted for `res`. -The listener is passed the `response` object as it's context (`this`). Headers are -considered to be emitted only once, right before they are sent to the client. - -When this is called multiple times on the same `res`, the `listener`s are fired -in the reverse order they were added. - -## Examples - -```js -var http = require('http') -var onHeaders = require('on-headers') - -http - .createServer(onRequest) - .listen(3000) - -function addPoweredBy () { - // set if not set by end of request - if (!this.getHeader('X-Powered-By')) { - this.setHeader('X-Powered-By', 'Node.js') - } -} - -function onRequest (req, res) { - onHeaders(res, addPoweredBy) - - res.setHeader('Content-Type', 'text/plain') - res.end('hello!') -} -``` - -## Testing - -```sh -$ npm test -``` - -## License - -[MIT](LICENSE) - -[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/on-headers/master -[coveralls-url]: https://coveralls.io/r/jshttp/on-headers?branch=master -[node-version-image]: https://badgen.net/npm/node/on-headers -[node-version-url]: https://nodejs.org/en/download -[npm-downloads-image]: https://badgen.net/npm/dm/on-headers -[npm-url]: https://npmjs.org/package/on-headers -[npm-version-image]: https://badgen.net/npm/v/on-headers -[travis-image]: https://badgen.net/travis/jshttp/on-headers/master -[travis-url]: https://travis-ci.org/jshttp/on-headers diff --git a/node_modules/on-headers/index.js b/node_modules/on-headers/index.js deleted file mode 100644 index 7db6375..0000000 --- a/node_modules/on-headers/index.js +++ /dev/null @@ -1,132 +0,0 @@ -/*! - * on-headers - * Copyright(c) 2014 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict' - -/** - * Module exports. - * @public - */ - -module.exports = onHeaders - -/** - * Create a replacement writeHead method. - * - * @param {function} prevWriteHead - * @param {function} listener - * @private - */ - -function createWriteHead (prevWriteHead, listener) { - var fired = false - - // return function with core name and argument list - return function writeHead (statusCode) { - // set headers from arguments - var args = setWriteHeadHeaders.apply(this, arguments) - - // fire listener - if (!fired) { - fired = true - listener.call(this) - - // pass-along an updated status code - if (typeof args[0] === 'number' && this.statusCode !== args[0]) { - args[0] = this.statusCode - args.length = 1 - } - } - - return prevWriteHead.apply(this, args) - } -} - -/** - * Execute a listener when a response is about to write headers. - * - * @param {object} res - * @return {function} listener - * @public - */ - -function onHeaders (res, listener) { - if (!res) { - throw new TypeError('argument res is required') - } - - if (typeof listener !== 'function') { - throw new TypeError('argument listener must be a function') - } - - res.writeHead = createWriteHead(res.writeHead, listener) -} - -/** - * Set headers contained in array on the response object. - * - * @param {object} res - * @param {array} headers - * @private - */ - -function setHeadersFromArray (res, headers) { - for (var i = 0; i < headers.length; i++) { - res.setHeader(headers[i][0], headers[i][1]) - } -} - -/** - * Set headers contained in object on the response object. - * - * @param {object} res - * @param {object} headers - * @private - */ - -function setHeadersFromObject (res, headers) { - var keys = Object.keys(headers) - for (var i = 0; i < keys.length; i++) { - var k = keys[i] - if (k) res.setHeader(k, headers[k]) - } -} - -/** - * Set headers and other properties on the response object. - * - * @param {number} statusCode - * @private - */ - -function setWriteHeadHeaders (statusCode) { - var length = arguments.length - var headerIndex = length > 1 && typeof arguments[1] === 'string' - ? 2 - : 1 - - var headers = length >= headerIndex + 1 - ? arguments[headerIndex] - : undefined - - this.statusCode = statusCode - - if (Array.isArray(headers)) { - // handle array case - setHeadersFromArray(this, headers) - } else if (headers) { - // handle object case - setHeadersFromObject(this, headers) - } - - // copy leading arguments - var args = new Array(Math.min(length, headerIndex)) - for (var i = 0; i < args.length; i++) { - args[i] = arguments[i] - } - - return args -} diff --git a/node_modules/on-headers/package.json b/node_modules/on-headers/package.json deleted file mode 100644 index 1e9bf9e..0000000 --- a/node_modules/on-headers/package.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "name": "on-headers", - "description": "Execute a listener when a response is about to write headers", - "version": "1.0.2", - "author": "Douglas Christopher Wilson ", - "license": "MIT", - "keywords": [ - "event", - "headers", - "http", - "onheaders" - ], - "repository": "jshttp/on-headers", - "devDependencies": { - "eslint": "5.14.1", - "eslint-config-standard": "12.0.0", - "eslint-plugin-import": "2.16.0", - "eslint-plugin-markdown": "1.0.0", - "eslint-plugin-node": "8.0.1", - "eslint-plugin-promise": "4.0.1", - "eslint-plugin-standard": "4.0.0", - "istanbul": "0.4.5", - "mocha": "6.0.1", - "supertest": "3.4.2" - }, - "files": [ - "LICENSE", - "HISTORY.md", - "README.md", - "index.js" - ], - "engines": { - "node": ">= 0.8" - }, - "scripts": { - "lint": "eslint --plugin markdown --ext js,md .", - "test": "mocha --reporter spec --bail --check-leaks test/", - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/", - "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/", - "version": "node scripts/version-history.js && git add HISTORY.md" - } -} diff --git a/node_modules/opn/index.js b/node_modules/opn/index.js deleted file mode 100644 index 3daa162..0000000 --- a/node_modules/opn/index.js +++ /dev/null @@ -1,113 +0,0 @@ -'use strict'; -const {promisify} = require('util'); -const path = require('path'); -const childProcess = require('child_process'); -const isWsl = require('is-wsl'); - -const pExecFile = promisify(childProcess.execFile); - -// Convert a path from WSL format to Windows format: -// `/mnt/c/Program Files/Example/MyApp.exe` → `C:\Program Files\Example\MyApp.exe`` -const wslToWindowsPath = async path => { - const {stdout} = await pExecFile('wslpath', ['-w', path]); - return stdout.trim(); -}; - -module.exports = async (target, options) => { - if (typeof target !== 'string') { - throw new TypeError('Expected a `target`'); - } - - options = { - wait: false, - ...options - }; - - let command; - let appArguments = []; - const cliArguments = []; - const childProcessOptions = {}; - - if (Array.isArray(options.app)) { - appArguments = options.app.slice(1); - options.app = options.app[0]; - } - - if (process.platform === 'darwin') { - command = 'open'; - - if (options.wait) { - cliArguments.push('-W'); - } - - if (options.app) { - cliArguments.push('-a', options.app); - } - } else if (process.platform === 'win32' || isWsl) { - command = 'cmd' + (isWsl ? '.exe' : ''); - cliArguments.push('/c', 'start', '""', '/b'); - target = target.replace(/&/g, '^&'); - - if (options.wait) { - cliArguments.push('/wait'); - } - - if (options.app) { - if (isWsl && options.app.startsWith('/mnt/')) { - const windowsPath = await wslToWindowsPath(options.app); - options.app = windowsPath; - } - - cliArguments.push(options.app); - } - - if (appArguments.length > 0) { - cliArguments.push(...appArguments); - } - } else { - if (options.app) { - command = options.app; - } else { - const useSystemXdgOpen = process.versions.electron || process.platform === 'android'; - command = useSystemXdgOpen ? 'xdg-open' : path.join(__dirname, 'xdg-open'); - } - - if (appArguments.length > 0) { - cliArguments.push(...appArguments); - } - - if (!options.wait) { - // `xdg-open` will block the process unless stdio is ignored - // and it's detached from the parent even if it's unref'd. - childProcessOptions.stdio = 'ignore'; - childProcessOptions.detached = true; - } - } - - cliArguments.push(target); - - if (process.platform === 'darwin' && appArguments.length > 0) { - cliArguments.push('--args', ...appArguments); - } - - const subprocess = childProcess.spawn(command, cliArguments, childProcessOptions); - - if (options.wait) { - return new Promise((resolve, reject) => { - subprocess.once('error', reject); - - subprocess.once('close', exitCode => { - if (exitCode > 0) { - reject(new Error(`Exited with code ${exitCode}`)); - return; - } - - resolve(subprocess); - }); - }); - } - - subprocess.unref(); - - return subprocess; -}; diff --git a/node_modules/opn/license b/node_modules/opn/license deleted file mode 100644 index e7af2f7..0000000 --- a/node_modules/opn/license +++ /dev/null @@ -1,9 +0,0 @@ -MIT License - -Copyright (c) Sindre Sorhus (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/opn/package.json b/node_modules/opn/package.json deleted file mode 100644 index 2a2616a..0000000 --- a/node_modules/opn/package.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "name": "opn", - "version": "6.0.0", - "description": "Open stuff like URLs, files, executables. Cross-platform.", - "license": "MIT", - "repository": "sindresorhus/open", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "engines": { - "node": ">=8" - }, - "scripts": { - "test": "xo" - }, - "files": [ - "index.js", - "xdg-open" - ], - "keywords": [ - "app", - "open", - "opener", - "opens", - "launch", - "start", - "xdg-open", - "xdg", - "default", - "cmd", - "browser", - "editor", - "executable", - "exe", - "url", - "urls", - "arguments", - "args", - "spawn", - "exec", - "child", - "process", - "website", - "file" - ], - "dependencies": { - "is-wsl": "^1.1.0" - }, - "devDependencies": { - "ava": "^1.4.0", - "xo": "^0.24.0" - } -} diff --git a/node_modules/opn/readme.md b/node_modules/opn/readme.md deleted file mode 100644 index 160b743..0000000 --- a/node_modules/opn/readme.md +++ /dev/null @@ -1,98 +0,0 @@ -# open - -> Open stuff like URLs, files, executables. Cross-platform. - -If need this for Electron, use [`shell.openItem()`](https://electronjs.org/docs/api/shell#shellopenitemfullpath) instead. - -Note: The original [`open` package](https://github.com/pwnall/node-open) was recently deprecated in favor of this package, and we got the name, so this package is now named `open` instead of `opn`. If you're upgrading from the original `open` package (`open@0.0.5` or lower), keep in mind that the API is different. - -#### Why? - -- Actively maintained. -- Supports app arguments. -- Safer as it uses `spawn` instead of `exec`. -- Fixes most of the open original `node-open` issues. -- Includes the latest [`xdg-open` script](http://cgit.freedesktop.org/xdg/xdg-utils/commit/?id=c55122295c2a480fa721a9614f0e2d42b2949c18) for Linux. -- Supports WSL paths to Windows apps under `/mnt/*`. - - -## Install - -``` -$ npm install open -``` - - -## Usage - -```js -const open = require('open'); - -// Opens the image in the default image viewer -(async () => { - await open('unicorn.png', {wait: true}); - console.log('The image viewer app closed'); - - // Opens the url in the default browser - await open('https://sindresorhus.com'); - - // Specify the app to open in - await open('https://sindresorhus.com', {app: 'firefox'}); - - // Specify app arguments - await open('https://sindresorhus.com', {app: ['google chrome', '--incognito']}); -})(); -``` - - -## API - -It uses the command `open` on macOS, `start` on Windows and `xdg-open` on other platforms. - -### open(target, [options]) - -Returns a promise for the [spawned child process](https://nodejs.org/api/child_process.html#child_process_class_childprocess). You would normally not need to use this for anything, but it can be useful if you'd like to attach custom event listeners or perform other operations directly on the spawned process. - -#### target - -Type: `string` - -The thing you want to open. Can be a URL, file, or executable. - -Opens in the default app for the file type. For example, URLs opens in your default browser. - -#### options - -Type: `Object` - -##### wait - -Type: `boolean`
    -Default: `false` - -Wait for the opened app to exit before fulfilling the promise. If `false` it's fulfilled immediately when opening the app. - -Note that it waits for the app to exit, not just for the window to close. - -On Windows, you have to explicitly specify an app for it to be able to wait. - -##### app - -Type: `string | string[]` - -Specify the app to open the `target` with, or an array with the app and app arguments. - -The app name is platform dependent. Don't hard code it in reusable modules. For example, Chrome is `google chrome` on macOS, `google-chrome` on Linux and `chrome` on Windows. - -You may also pass in the app's full path. For example on WSL, this can be `/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe` for the Windows installation of Chrome. - - -## Related - -- [opn-cli](https://github.com/sindresorhus/opn-cli) - CLI for this module -- [open-editor](https://github.com/sindresorhus/open-editor) - Open files in your editor at a specific line and column - - -## License - -MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/opn/xdg-open b/node_modules/opn/xdg-open deleted file mode 100755 index faaea7f..0000000 --- a/node_modules/opn/xdg-open +++ /dev/null @@ -1,1066 +0,0 @@ -#!/bin/sh -#--------------------------------------------- -# xdg-open -# -# Utility script to open a URL in the registered default application. -# -# Refer to the usage() function below for usage. -# -# Copyright 2009-2010, Fathi Boudra -# Copyright 2009-2010, Rex Dieter -# Copyright 2006, Kevin Krammer -# Copyright 2006, Jeremy White -# -# LICENSE: -# -# 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. -# -#--------------------------------------------- - -manualpage() -{ -cat << _MANUALPAGE -Name - - xdg-open -- opens a file or URL in the user's preferred - application - -Synopsis - - xdg-open { file | URL } - - xdg-open { --help | --manual | --version } - -Description - - xdg-open opens a file or URL in the user's preferred - application. If a URL is provided the URL will be opened in the - user's preferred web browser. If a file is provided the file - will be opened in the preferred application for files of that - type. xdg-open supports file, ftp, http and https URLs. - - xdg-open is for use inside a desktop session only. It is not - recommended to use xdg-open as root. - -Options - - --help - Show command synopsis. - - --manual - Show this manual page. - - --version - Show the xdg-utils version information. - -Exit Codes - - An exit code of 0 indicates success while a non-zero exit code - indicates failure. The following failure codes can be returned: - - 1 - Error in command line syntax. - - 2 - One of the files passed on the command line did not - exist. - - 3 - A required tool could not be found. - - 4 - The action failed. - -See Also - - xdg-mime(1), xdg-settings(1), MIME applications associations - specification - -Examples - -xdg-open 'http://www.freedesktop.org/' - - Opens the freedesktop.org website in the user's default - browser. - -xdg-open /tmp/foobar.png - - Opens the PNG image file /tmp/foobar.png in the user's default - image viewing application. -_MANUALPAGE -} - -usage() -{ -cat << _USAGE - xdg-open -- opens a file or URL in the user's preferred - application - -Synopsis - - xdg-open { file | URL } - - xdg-open { --help | --manual | --version } - -_USAGE -} - -#@xdg-utils-common@ - -#---------------------------------------------------------------------------- -# Common utility functions included in all XDG wrapper scripts -#---------------------------------------------------------------------------- - -DEBUG() -{ - [ -z "${XDG_UTILS_DEBUG_LEVEL}" ] && return 0; - [ ${XDG_UTILS_DEBUG_LEVEL} -lt $1 ] && return 0; - shift - echo "$@" >&2 -} - -# This handles backslashes but not quote marks. -first_word() -{ - read first rest - echo "$first" -} - -#------------------------------------------------------------- -# map a binary to a .desktop file -binary_to_desktop_file() -{ - search="${XDG_DATA_HOME:-$HOME/.local/share}:${XDG_DATA_DIRS:-/usr/local/share:/usr/share}" - binary="`which "$1"`" - binary="`readlink -f "$binary"`" - base="`basename "$binary"`" - IFS=: - for dir in $search; do - unset IFS - [ "$dir" ] || continue - [ -d "$dir/applications" ] || [ -d "$dir/applnk" ] || continue - for file in "$dir"/applications/*.desktop "$dir"/applications/*/*.desktop "$dir"/applnk/*.desktop "$dir"/applnk/*/*.desktop; do - [ -r "$file" ] || continue - # Check to make sure it's worth the processing. - grep -q "^Exec.*$base" "$file" || continue - # Make sure it's a visible desktop file (e.g. not "preferred-web-browser.desktop"). - grep -Eq "^(NoDisplay|Hidden)=true" "$file" && continue - command="`grep -E "^Exec(\[[^]=]*])?=" "$file" | cut -d= -f 2- | first_word`" - command="`which "$command"`" - if [ x"`readlink -f "$command"`" = x"$binary" ]; then - # Fix any double slashes that got added path composition - echo "$file" | sed -e 's,//*,/,g' - return - fi - done - done -} - -#------------------------------------------------------------- -# map a .desktop file to a binary -desktop_file_to_binary() -{ - search="${XDG_DATA_HOME:-$HOME/.local/share}:${XDG_DATA_DIRS:-/usr/local/share:/usr/share}" - desktop="`basename "$1"`" - IFS=: - for dir in $search; do - unset IFS - [ "$dir" ] && [ -d "$dir/applications" ] || [ -d "$dir/applnk" ] || continue - # Check if desktop file contains - - if [ "${desktop#*-}" != "$desktop" ]; then - vendor=${desktop%-*} - app=${desktop#*-} - if [ -r $dir/applications/$vendor/$app ]; then - file_path=$dir/applications/$vendor/$app - elif [ -r $dir/applnk/$vendor/$app ]; then - file_path=$dir/applnk/$vendor/$app - fi - fi - if test -z "$file_path" ; then - for indir in "$dir"/applications/ "$dir"/applications/*/ "$dir"/applnk/ "$dir"/applnk/*/; do - file="$indir/$desktop" - if [ -r "$file" ]; then - file_path=$file - break - fi - done - fi - if [ -r "$file_path" ]; then - # Remove any arguments (%F, %f, %U, %u, etc.). - command="`grep -E "^Exec(\[[^]=]*])?=" "$file_path" | cut -d= -f 2- | first_word`" - command="`which "$command"`" - readlink -f "$command" - return - fi - done -} - -#------------------------------------------------------------- -# Exit script on successfully completing the desired operation - -exit_success() -{ - if [ $# -gt 0 ]; then - echo "$@" - echo - fi - - exit 0 -} - - -#----------------------------------------- -# Exit script on malformed arguments, not enough arguments -# or missing required option. -# prints usage information - -exit_failure_syntax() -{ - if [ $# -gt 0 ]; then - echo "xdg-open: $@" >&2 - echo "Try 'xdg-open --help' for more information." >&2 - else - usage - echo "Use 'man xdg-open' or 'xdg-open --manual' for additional info." - fi - - exit 1 -} - -#------------------------------------------------------------- -# Exit script on missing file specified on command line - -exit_failure_file_missing() -{ - if [ $# -gt 0 ]; then - echo "xdg-open: $@" >&2 - fi - - exit 2 -} - -#------------------------------------------------------------- -# Exit script on failure to locate necessary tool applications - -exit_failure_operation_impossible() -{ - if [ $# -gt 0 ]; then - echo "xdg-open: $@" >&2 - fi - - exit 3 -} - -#------------------------------------------------------------- -# Exit script on failure returned by a tool application - -exit_failure_operation_failed() -{ - if [ $# -gt 0 ]; then - echo "xdg-open: $@" >&2 - fi - - exit 4 -} - -#------------------------------------------------------------ -# Exit script on insufficient permission to read a specified file - -exit_failure_file_permission_read() -{ - if [ $# -gt 0 ]; then - echo "xdg-open: $@" >&2 - fi - - exit 5 -} - -#------------------------------------------------------------ -# Exit script on insufficient permission to write a specified file - -exit_failure_file_permission_write() -{ - if [ $# -gt 0 ]; then - echo "xdg-open: $@" >&2 - fi - - exit 6 -} - -check_input_file() -{ - if [ ! -e "$1" ]; then - exit_failure_file_missing "file '$1' does not exist" - fi - if [ ! -r "$1" ]; then - exit_failure_file_permission_read "no permission to read file '$1'" - fi -} - -check_vendor_prefix() -{ - file_label="$2" - [ -n "$file_label" ] || file_label="filename" - file=`basename "$1"` - case "$file" in - [[:alpha:]]*-*) - return - ;; - esac - - echo "xdg-open: $file_label '$file' does not have a proper vendor prefix" >&2 - echo 'A vendor prefix consists of alpha characters ([a-zA-Z]) and is terminated' >&2 - echo 'with a dash ("-"). An example '"$file_label"' is '"'example-$file'" >&2 - echo "Use --novendor to override or 'xdg-open --manual' for additional info." >&2 - exit 1 -} - -check_output_file() -{ - # if the file exists, check if it is writeable - # if it does not exists, check if we are allowed to write on the directory - if [ -e "$1" ]; then - if [ ! -w "$1" ]; then - exit_failure_file_permission_write "no permission to write to file '$1'" - fi - else - DIR=`dirname "$1"` - if [ ! -w "$DIR" ] || [ ! -x "$DIR" ]; then - exit_failure_file_permission_write "no permission to create file '$1'" - fi - fi -} - -#---------------------------------------- -# Checks for shared commands, e.g. --help - -check_common_commands() -{ - while [ $# -gt 0 ] ; do - parm="$1" - shift - - case "$parm" in - --help) - usage - echo "Use 'man xdg-open' or 'xdg-open --manual' for additional info." - exit_success - ;; - - --manual) - manualpage - exit_success - ;; - - --version) - echo "xdg-open 1.1.3" - exit_success - ;; - esac - done -} - -check_common_commands "$@" - -[ -z "${XDG_UTILS_DEBUG_LEVEL}" ] && unset XDG_UTILS_DEBUG_LEVEL; -if [ ${XDG_UTILS_DEBUG_LEVEL-0} -lt 1 ]; then - # Be silent - xdg_redirect_output=" > /dev/null 2> /dev/null" -else - # All output to stderr - xdg_redirect_output=" >&2" -fi - -#-------------------------------------- -# Checks for known desktop environments -# set variable DE to the desktop environments name, lowercase - -detectDE() -{ - # see https://bugs.freedesktop.org/show_bug.cgi?id=34164 - unset GREP_OPTIONS - - if [ -n "${XDG_CURRENT_DESKTOP}" ]; then - case "${XDG_CURRENT_DESKTOP}" in - # only recently added to menu-spec, pre-spec X- still in use - Cinnamon|X-Cinnamon) - DE=cinnamon; - ;; - ENLIGHTENMENT) - DE=enlightenment; - ;; - # GNOME, GNOME-Classic:GNOME, or GNOME-Flashback:GNOME - GNOME*) - DE=gnome; - ;; - KDE) - DE=kde; - ;; - # Deepin Desktop Environments - DEEPIN|Deepin|deepin) - DE=dde; - ;; - LXDE) - DE=lxde; - ;; - LXQt) - DE=lxqt; - ;; - MATE) - DE=mate; - ;; - XFCE) - DE=xfce - ;; - X-Generic) - DE=generic - ;; - esac - fi - - if [ x"$DE" = x"" ]; then - # classic fallbacks - if [ x"$KDE_FULL_SESSION" != x"" ]; then DE=kde; - elif [ x"$GNOME_DESKTOP_SESSION_ID" != x"" ]; then DE=gnome; - elif [ x"$MATE_DESKTOP_SESSION_ID" != x"" ]; then DE=mate; - elif `dbus-send --print-reply --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.GetNameOwner string:org.gnome.SessionManager > /dev/null 2>&1` ; then DE=gnome; - elif xprop -root _DT_SAVE_MODE 2> /dev/null | grep ' = \"xfce4\"$' >/dev/null 2>&1; then DE=xfce; - elif xprop -root 2> /dev/null | grep -i '^xfce_desktop_window' >/dev/null 2>&1; then DE=xfce - elif echo $DESKTOP | grep -q '^Enlightenment'; then DE=enlightenment; - elif [ x"$LXQT_SESSION_CONFIG" != x"" ]; then DE=lxqt; - fi - fi - - if [ x"$DE" = x"" ]; then - # fallback to checking $DESKTOP_SESSION - case "$DESKTOP_SESSION" in - gnome) - DE=gnome; - ;; - LXDE|Lubuntu) - DE=lxde; - ;; - MATE) - DE=mate; - ;; - xfce|xfce4|'Xfce Session') - DE=xfce; - ;; - esac - fi - - if [ x"$DE" = x"" ]; then - # fallback to uname output for other platforms - case "$(uname 2>/dev/null)" in - CYGWIN*) - DE=cygwin; - ;; - Darwin) - DE=darwin; - ;; - esac - fi - - if [ x"$DE" = x"gnome" ]; then - # gnome-default-applications-properties is only available in GNOME 2.x - # but not in GNOME 3.x - which gnome-default-applications-properties > /dev/null 2>&1 || DE="gnome3" - fi - - if [ -f "$XDG_RUNTIME_DIR/flatpak-info" ]; then - DE="flatpak" - fi -} - -#---------------------------------------------------------------------------- -# kfmclient exec/openURL can give bogus exit value in KDE <= 3.5.4 -# It also always returns 1 in KDE 3.4 and earlier -# Simply return 0 in such case - -kfmclient_fix_exit_code() -{ - version=`LC_ALL=C.UTF-8 kde-config --version 2>/dev/null | grep '^KDE'` - major=`echo $version | sed 's/KDE.*: \([0-9]\).*/\1/'` - minor=`echo $version | sed 's/KDE.*: [0-9]*\.\([0-9]\).*/\1/'` - release=`echo $version | sed 's/KDE.*: [0-9]*\.[0-9]*\.\([0-9]\).*/\1/'` - test "$major" -gt 3 && return $1 - test "$minor" -gt 5 && return $1 - test "$release" -gt 4 && return $1 - return 0 -} - -#---------------------------------------------------------------------------- -# Returns true if there is a graphical display attached. - -has_display() -{ - if [ -n "$DISPLAY" ] || [ -n "$WAYLAND_DISPLAY" ]; then - return 0 - else - return 1 - fi -} - -# This handles backslashes but not quote marks. -last_word() -{ - read first rest - echo "$rest" -} - -# Get the value of a key in a desktop file's Desktop Entry group. -# Example: Use get_key foo.desktop Exec -# to get the values of the Exec= key for the Desktop Entry group. -get_key() -{ - local file="${1}" - local key="${2}" - local desktop_entry="" - - IFS_="${IFS}" - IFS="" - while read line - do - case "$line" in - "[Desktop Entry]") - desktop_entry="y" - ;; - # Reset match flag for other groups - "["*) - desktop_entry="" - ;; - "${key}="*) - # Only match Desktop Entry group - if [ -n "${desktop_entry}" ] - then - echo "${line}" | cut -d= -f 2- - fi - esac - done < "${file}" - IFS="${IFS_}" -} - -# Returns true if argument is a file:// URL or path -is_file_url_or_path() -{ - if echo "$1" | grep -q '^file://' \ - || ! echo "$1" | egrep -q '^[[:alpha:]+\.\-]+:'; then - return 0 - else - return 1 - fi -} - -# If argument is a file URL, convert it to a (percent-decoded) path. -# If not, leave it as it is. -file_url_to_path() -{ - local file="$1" - if echo "$file" | grep -q '^file:///'; then - file=${file#file://} - file=${file%%#*} - file=$(echo "$file" | sed -r 's/\?.*$//') - local printf=printf - if [ -x /usr/bin/printf ]; then - printf=/usr/bin/printf - fi - file=$($printf "$(echo "$file" | sed -e 's@%\([a-f0-9A-F]\{2\}\)@\\x\1@g')") - fi - echo "$file" -} - -open_cygwin() -{ - cygstart "$1" - - if [ $? -eq 0 ]; then - exit_success - else - exit_failure_operation_failed - fi -} - -open_darwin() -{ - open "$1" - - if [ $? -eq 0 ]; then - exit_success - else - exit_failure_operation_failed - fi -} - -open_kde() -{ - if [ -n "${KDE_SESSION_VERSION}" ]; then - case "${KDE_SESSION_VERSION}" in - 4) - kde-open "$1" - ;; - 5) - kde-open${KDE_SESSION_VERSION} "$1" - ;; - esac - else - kfmclient exec "$1" - kfmclient_fix_exit_code $? - fi - - if [ $? -eq 0 ]; then - exit_success - else - exit_failure_operation_failed - fi -} - -open_dde() -{ - if dde-open -version >/dev/null 2>&1; then - dde-open "$1" - else - open_generic "$1" - fi - - if [ $? -eq 0 ]; then - exit_success - else - exit_failure_operation_failed - fi -} - -open_gnome3() -{ - if gio help open 2>/dev/null 1>&2; then - gio open "$1" - elif gvfs-open --help 2>/dev/null 1>&2; then - gvfs-open "$1" - else - open_generic "$1" - fi - - if [ $? -eq 0 ]; then - exit_success - else - exit_failure_operation_failed - fi -} - -open_gnome() -{ - if gio help open 2>/dev/null 1>&2; then - gio open "$1" - elif gvfs-open --help 2>/dev/null 1>&2; then - gvfs-open "$1" - elif gnome-open --help 2>/dev/null 1>&2; then - gnome-open "$1" - else - open_generic "$1" - fi - - if [ $? -eq 0 ]; then - exit_success - else - exit_failure_operation_failed - fi -} - -open_mate() -{ - if gio help open 2>/dev/null 1>&2; then - gio open "$1" - elif gvfs-open --help 2>/dev/null 1>&2; then - gvfs-open "$1" - elif mate-open --help 2>/dev/null 1>&2; then - mate-open "$1" - else - open_generic "$1" - fi - - if [ $? -eq 0 ]; then - exit_success - else - exit_failure_operation_failed - fi -} - -open_xfce() -{ - if exo-open --help 2>/dev/null 1>&2; then - exo-open "$1" - elif gio help open 2>/dev/null 1>&2; then - gio open "$1" - elif gvfs-open --help 2>/dev/null 1>&2; then - gvfs-open "$1" - else - open_generic "$1" - fi - - if [ $? -eq 0 ]; then - exit_success - else - exit_failure_operation_failed - fi -} - -open_enlightenment() -{ - if enlightenment_open --help 2>/dev/null 1>&2; then - enlightenment_open "$1" - else - open_generic "$1" - fi - - if [ $? -eq 0 ]; then - exit_success - else - exit_failure_operation_failed - fi -} - -open_flatpak() -{ - gdbus call --session \ - --dest org.freedesktop.portal.Desktop \ - --object-path /org/freedesktop/portal/desktop \ - --method org.freedesktop.portal.OpenURI.OpenURI \ - "" "$1" {} - - if [ $? -eq 0 ]; then - exit_success - else - exit_failure_operation_failed - fi -} - -#----------------------------------------- -# Recursively search .desktop file - -search_desktop_file() -{ - local default="$1" - local dir="$2" - local target="$3" - - local file="" - # look for both vendor-app.desktop, vendor/app.desktop - if [ -r "$dir/$default" ]; then - file="$dir/$default" - elif [ -r "$dir/`echo $default | sed -e 's|-|/|'`" ]; then - file="$dir/`echo $default | sed -e 's|-|/|'`" - fi - - if [ -r "$file" ] ; then - command="$(get_key "${file}" "Exec" | first_word)" - command_exec=`which $command 2>/dev/null` - icon="$(get_key "${file}" "Icon")" - # FIXME: Actually LC_MESSAGES should be used as described in - # http://standards.freedesktop.org/desktop-entry-spec/latest/ar01s04.html - localised_name="$(get_key "${file}" "Name")" - set -- $(get_key "${file}" "Exec" | last_word) - # We need to replace any occurrence of "%f", "%F" and - # the like by the target file. We examine each - # argument and append the modified argument to the - # end then shift. - local args=$# - local replaced=0 - while [ $args -gt 0 ]; do - case $1 in - %[c]) - replaced=1 - arg="${localised_name}" - shift - set -- "$@" "$arg" - ;; - %[fFuU]) - replaced=1 - arg="$target" - shift - set -- "$@" "$arg" - ;; - %[i]) - replaced=1 - shift - set -- "$@" "--icon" "$icon" - ;; - *) - arg="$1" - shift - set -- "$@" "$arg" - ;; - esac - args=$(( $args - 1 )) - done - [ $replaced -eq 1 ] || set -- "$@" "$target" - "$command_exec" "$@" - - if [ $? -eq 0 ]; then - exit_success - fi - fi - - for d in $dir/*/; do - [ -d "$d" ] && search_desktop_file "$default" "$d" "$target" - done -} - - -open_generic_xdg_mime() -{ - filetype="$2" - default=`xdg-mime query default "$filetype"` - if [ -n "$default" ] ; then - xdg_user_dir="$XDG_DATA_HOME" - [ -n "$xdg_user_dir" ] || xdg_user_dir="$HOME/.local/share" - - xdg_system_dirs="$XDG_DATA_DIRS" - [ -n "$xdg_system_dirs" ] || xdg_system_dirs=/usr/local/share/:/usr/share/ - -DEBUG 3 "$xdg_user_dir:$xdg_system_dirs" - for x in `echo "$xdg_user_dir:$xdg_system_dirs" | sed 's/:/ /g'`; do - search_desktop_file "$default" "$x/applications/" "$1" - done - fi -} - -open_generic_xdg_file_mime() -{ - filetype=`xdg-mime query filetype "$1" | sed "s/;.*//"` - open_generic_xdg_mime "$1" "$filetype" -} - -open_generic_xdg_x_scheme_handler() -{ - scheme="`echo $1 | sed -n 's/\(^[[:alnum:]+\.-]*\):.*$/\1/p'`" - if [ -n $scheme ]; then - filetype="x-scheme-handler/$scheme" - open_generic_xdg_mime "$1" "$filetype" - fi -} - -has_single_argument() -{ - test $# = 1 -} - -open_envvar() -{ - local oldifs="$IFS" - local browser browser_with_arg - - IFS=":" - for browser in $BROWSER; do - IFS="$oldifs" - - if [ -z "$browser" ]; then - continue - fi - - if echo "$browser" | grep -q %s; then - # Avoid argument injection. - # See https://bugs.freedesktop.org/show_bug.cgi?id=103807 - # URIs don't have IFS characters spaces anyway. - has_single_argument $1 && $(printf "$browser" "$1") - else - $browser "$1" - fi - - if [ $? -eq 0 ]; then - exit_success - fi - done -} - -open_generic() -{ - if is_file_url_or_path "$1"; then - local file="$(file_url_to_path "$1")" - - check_input_file "$file" - - if has_display; then - filetype=`xdg-mime query filetype "$file" | sed "s/;.*//"` - open_generic_xdg_mime "$file" "$filetype" - fi - - if which run-mailcap 2>/dev/null 1>&2; then - run-mailcap --action=view "$file" - if [ $? -eq 0 ]; then - exit_success - fi - fi - - if has_display && mimeopen -v 2>/dev/null 1>&2; then - mimeopen -L -n "$file" - if [ $? -eq 0 ]; then - exit_success - fi - fi - fi - - if has_display; then - open_generic_xdg_x_scheme_handler "$1" - fi - - if [ -n "$BROWSER" ]; then - open_envvar "$1" - fi - - # if BROWSER variable is not set, check some well known browsers instead - if [ x"$BROWSER" = x"" ]; then - BROWSER=www-browser:links2:elinks:links:lynx:w3m - if has_display; then - BROWSER=x-www-browser:firefox:iceweasel:seamonkey:mozilla:epiphany:konqueror:chromium:chromium-browser:google-chrome:$BROWSER - fi - fi - - open_envvar "$1" - - exit_failure_operation_impossible "no method available for opening '$1'" -} - -open_lxde() -{ - - # pcmanfm only knows how to handle file:// urls and filepaths, it seems. - if pcmanfm --help >/dev/null 2>&1 && is_file_url_or_path "$1"; then - local file="$(file_url_to_path "$1")" - - # handle relative paths - if ! echo "$file" | grep -q ^/; then - file="$(pwd)/$file" - fi - - pcmanfm "$file" - else - open_generic "$1" - fi - - if [ $? -eq 0 ]; then - exit_success - else - exit_failure_operation_failed - fi -} - -open_lxqt() -{ - open_generic "$1" -} - -[ x"$1" != x"" ] || exit_failure_syntax - -url= -while [ $# -gt 0 ] ; do - parm="$1" - shift - - case "$parm" in - -*) - exit_failure_syntax "unexpected option '$parm'" - ;; - - *) - if [ -n "$url" ] ; then - exit_failure_syntax "unexpected argument '$parm'" - fi - url="$parm" - ;; - esac -done - -if [ -z "${url}" ] ; then - exit_failure_syntax "file or URL argument missing" -fi - -detectDE - -if [ x"$DE" = x"" ]; then - DE=generic -fi - -DEBUG 2 "Selected DE $DE" - -# sanitize BROWSER (avoid caling ourselves in particular) -case "${BROWSER}" in - *:"xdg-open"|"xdg-open":*) - BROWSER=$(echo $BROWSER | sed -e 's|:xdg-open||g' -e 's|xdg-open:||g') - ;; - "xdg-open") - BROWSER= - ;; -esac - -case "$DE" in - kde) - open_kde "$url" - ;; - - dde) - open_dde "$url" - ;; - - gnome3|cinnamon) - open_gnome3 "$url" - ;; - - gnome) - open_gnome "$url" - ;; - - mate) - open_mate "$url" - ;; - - xfce) - open_xfce "$url" - ;; - - lxde) - open_lxde "$url" - ;; - - lxqt) - open_lxqt "$url" - ;; - - enlightenment) - open_enlightenment "$url" - ;; - - cygwin) - open_cygwin "$url" - ;; - - darwin) - open_darwin "$url" - ;; - - flatpak) - open_flatpak "$url" - ;; - - generic) - open_generic "$url" - ;; - - *) - exit_failure_operation_impossible "no method available for opening '$url'" - ;; -esac diff --git a/node_modules/parseurl/HISTORY.md b/node_modules/parseurl/HISTORY.md deleted file mode 100644 index 8e40954..0000000 --- a/node_modules/parseurl/HISTORY.md +++ /dev/null @@ -1,58 +0,0 @@ -1.3.3 / 2019-04-15 -================== - - * Fix Node.js 0.8 return value inconsistencies - -1.3.2 / 2017-09-09 -================== - - * perf: reduce overhead for full URLs - * perf: unroll the "fast-path" `RegExp` - -1.3.1 / 2016-01-17 -================== - - * perf: enable strict mode - -1.3.0 / 2014-08-09 -================== - - * Add `parseurl.original` for parsing `req.originalUrl` with fallback - * Return `undefined` if `req.url` is `undefined` - -1.2.0 / 2014-07-21 -================== - - * Cache URLs based on original value - * Remove no-longer-needed URL mis-parse work-around - * Simplify the "fast-path" `RegExp` - -1.1.3 / 2014-07-08 -================== - - * Fix typo - -1.1.2 / 2014-07-08 -================== - - * Seriously fix Node.js 0.8 compatibility - -1.1.1 / 2014-07-08 -================== - - * Fix Node.js 0.8 compatibility - -1.1.0 / 2014-07-08 -================== - - * Incorporate URL href-only parse fast-path - -1.0.1 / 2014-03-08 -================== - - * Add missing `require` - -1.0.0 / 2014-03-08 -================== - - * Genesis from `connect` diff --git a/node_modules/parseurl/LICENSE b/node_modules/parseurl/LICENSE deleted file mode 100644 index 27653d3..0000000 --- a/node_modules/parseurl/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ - -(The MIT License) - -Copyright (c) 2014 Jonathan Ong -Copyright (c) 2014-2017 Douglas Christopher Wilson - -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/parseurl/README.md b/node_modules/parseurl/README.md deleted file mode 100644 index 443e716..0000000 --- a/node_modules/parseurl/README.md +++ /dev/null @@ -1,133 +0,0 @@ -# parseurl - -[![NPM Version][npm-version-image]][npm-url] -[![NPM Downloads][npm-downloads-image]][npm-url] -[![Node.js Version][node-image]][node-url] -[![Build Status][travis-image]][travis-url] -[![Test Coverage][coveralls-image]][coveralls-url] - -Parse a URL with memoization. - -## Install - -This is a [Node.js](https://nodejs.org/en/) module available through the -[npm registry](https://www.npmjs.com/). Installation is done using the -[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): - -```sh -$ npm install parseurl -``` - -## API - -```js -var parseurl = require('parseurl') -``` - -### parseurl(req) - -Parse the URL of the given request object (looks at the `req.url` property) -and return the result. The result is the same as `url.parse` in Node.js core. -Calling this function multiple times on the same `req` where `req.url` does -not change will return a cached parsed object, rather than parsing again. - -### parseurl.original(req) - -Parse the original URL of the given request object and return the result. -This works by trying to parse `req.originalUrl` if it is a string, otherwise -parses `req.url`. The result is the same as `url.parse` in Node.js core. -Calling this function multiple times on the same `req` where `req.originalUrl` -does not change will return a cached parsed object, rather than parsing again. - -## Benchmark - -```bash -$ npm run-script bench - -> parseurl@1.3.3 bench nodejs-parseurl -> node benchmark/index.js - - http_parser@2.8.0 - node@10.6.0 - v8@6.7.288.46-node.13 - uv@1.21.0 - zlib@1.2.11 - ares@1.14.0 - modules@64 - nghttp2@1.32.0 - napi@3 - openssl@1.1.0h - icu@61.1 - unicode@10.0 - cldr@33.0 - tz@2018c - -> node benchmark/fullurl.js - - Parsing URL "http://localhost:8888/foo/bar?user=tj&pet=fluffy" - - 4 tests completed. - - fasturl x 2,207,842 ops/sec ±3.76% (184 runs sampled) - nativeurl - legacy x 507,180 ops/sec ±0.82% (191 runs sampled) - nativeurl - whatwg x 290,044 ops/sec ±1.96% (189 runs sampled) - parseurl x 488,907 ops/sec ±2.13% (192 runs sampled) - -> node benchmark/pathquery.js - - Parsing URL "/foo/bar?user=tj&pet=fluffy" - - 4 tests completed. - - fasturl x 3,812,564 ops/sec ±3.15% (188 runs sampled) - nativeurl - legacy x 2,651,631 ops/sec ±1.68% (189 runs sampled) - nativeurl - whatwg x 161,837 ops/sec ±2.26% (189 runs sampled) - parseurl x 4,166,338 ops/sec ±2.23% (184 runs sampled) - -> node benchmark/samerequest.js - - Parsing URL "/foo/bar?user=tj&pet=fluffy" on same request object - - 4 tests completed. - - fasturl x 3,821,651 ops/sec ±2.42% (185 runs sampled) - nativeurl - legacy x 2,651,162 ops/sec ±1.90% (187 runs sampled) - nativeurl - whatwg x 175,166 ops/sec ±1.44% (188 runs sampled) - parseurl x 14,912,606 ops/sec ±3.59% (183 runs sampled) - -> node benchmark/simplepath.js - - Parsing URL "/foo/bar" - - 4 tests completed. - - fasturl x 12,421,765 ops/sec ±2.04% (191 runs sampled) - nativeurl - legacy x 7,546,036 ops/sec ±1.41% (188 runs sampled) - nativeurl - whatwg x 198,843 ops/sec ±1.83% (189 runs sampled) - parseurl x 24,244,006 ops/sec ±0.51% (194 runs sampled) - -> node benchmark/slash.js - - Parsing URL "/" - - 4 tests completed. - - fasturl x 17,159,456 ops/sec ±3.25% (188 runs sampled) - nativeurl - legacy x 11,635,097 ops/sec ±3.79% (184 runs sampled) - nativeurl - whatwg x 240,693 ops/sec ±0.83% (189 runs sampled) - parseurl x 42,279,067 ops/sec ±0.55% (190 runs sampled) -``` - -## License - - [MIT](LICENSE) - -[coveralls-image]: https://badgen.net/coveralls/c/github/pillarjs/parseurl/master -[coveralls-url]: https://coveralls.io/r/pillarjs/parseurl?branch=master -[node-image]: https://badgen.net/npm/node/parseurl -[node-url]: https://nodejs.org/en/download -[npm-downloads-image]: https://badgen.net/npm/dm/parseurl -[npm-url]: https://npmjs.org/package/parseurl -[npm-version-image]: https://badgen.net/npm/v/parseurl -[travis-image]: https://badgen.net/travis/pillarjs/parseurl/master -[travis-url]: https://travis-ci.org/pillarjs/parseurl diff --git a/node_modules/parseurl/index.js b/node_modules/parseurl/index.js deleted file mode 100644 index ece7223..0000000 --- a/node_modules/parseurl/index.js +++ /dev/null @@ -1,158 +0,0 @@ -/*! - * parseurl - * Copyright(c) 2014 Jonathan Ong - * Copyright(c) 2014-2017 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict' - -/** - * Module dependencies. - * @private - */ - -var url = require('url') -var parse = url.parse -var Url = url.Url - -/** - * Module exports. - * @public - */ - -module.exports = parseurl -module.exports.original = originalurl - -/** - * Parse the `req` url with memoization. - * - * @param {ServerRequest} req - * @return {Object} - * @public - */ - -function parseurl (req) { - var url = req.url - - if (url === undefined) { - // URL is undefined - return undefined - } - - var parsed = req._parsedUrl - - if (fresh(url, parsed)) { - // Return cached URL parse - return parsed - } - - // Parse the URL - parsed = fastparse(url) - parsed._raw = url - - return (req._parsedUrl = parsed) -}; - -/** - * Parse the `req` original url with fallback and memoization. - * - * @param {ServerRequest} req - * @return {Object} - * @public - */ - -function originalurl (req) { - var url = req.originalUrl - - if (typeof url !== 'string') { - // Fallback - return parseurl(req) - } - - var parsed = req._parsedOriginalUrl - - if (fresh(url, parsed)) { - // Return cached URL parse - return parsed - } - - // Parse the URL - parsed = fastparse(url) - parsed._raw = url - - return (req._parsedOriginalUrl = parsed) -}; - -/** - * Parse the `str` url with fast-path short-cut. - * - * @param {string} str - * @return {Object} - * @private - */ - -function fastparse (str) { - if (typeof str !== 'string' || str.charCodeAt(0) !== 0x2f /* / */) { - return parse(str) - } - - var pathname = str - var query = null - var search = null - - // This takes the regexp from https://github.com/joyent/node/pull/7878 - // Which is /^(\/[^?#\s]*)(\?[^#\s]*)?$/ - // And unrolls it into a for loop - for (var i = 1; i < str.length; i++) { - switch (str.charCodeAt(i)) { - case 0x3f: /* ? */ - if (search === null) { - pathname = str.substring(0, i) - query = str.substring(i + 1) - search = str.substring(i) - } - break - case 0x09: /* \t */ - case 0x0a: /* \n */ - case 0x0c: /* \f */ - case 0x0d: /* \r */ - case 0x20: /* */ - case 0x23: /* # */ - case 0xa0: - case 0xfeff: - return parse(str) - } - } - - var url = Url !== undefined - ? new Url() - : {} - - url.path = str - url.href = str - url.pathname = pathname - - if (search !== null) { - url.query = query - url.search = search - } - - return url -} - -/** - * Determine if parsed is still fresh for url. - * - * @param {string} url - * @param {object} parsedUrl - * @return {boolean} - * @private - */ - -function fresh (url, parsedUrl) { - return typeof parsedUrl === 'object' && - parsedUrl !== null && - (Url === undefined || parsedUrl instanceof Url) && - parsedUrl._raw === url -} diff --git a/node_modules/parseurl/package.json b/node_modules/parseurl/package.json deleted file mode 100644 index 6b443ca..0000000 --- a/node_modules/parseurl/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "parseurl", - "description": "parse a url with memoization", - "version": "1.3.3", - "contributors": [ - "Douglas Christopher Wilson ", - "Jonathan Ong (http://jongleberry.com)" - ], - "repository": "pillarjs/parseurl", - "license": "MIT", - "devDependencies": { - "beautify-benchmark": "0.2.4", - "benchmark": "2.1.4", - "eslint": "5.16.0", - "eslint-config-standard": "12.0.0", - "eslint-plugin-import": "2.17.1", - "eslint-plugin-node": "7.0.1", - "eslint-plugin-promise": "4.1.1", - "eslint-plugin-standard": "4.0.0", - "fast-url-parser": "1.1.3", - "istanbul": "0.4.5", - "mocha": "6.1.3" - }, - "files": [ - "LICENSE", - "HISTORY.md", - "README.md", - "index.js" - ], - "engines": { - "node": ">= 0.8" - }, - "scripts": { - "bench": "node benchmark/index.js", - "lint": "eslint .", - "test": "mocha --check-leaks --bail --reporter spec test/", - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --check-leaks --reporter dot test/", - "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --check-leaks --reporter spec test/" - } -} diff --git a/node_modules/pascalcase/LICENSE b/node_modules/pascalcase/LICENSE deleted file mode 100644 index 65f90ac..0000000 --- a/node_modules/pascalcase/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015, 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/pascalcase/README.md b/node_modules/pascalcase/README.md deleted file mode 100644 index fa3fd00..0000000 --- a/node_modules/pascalcase/README.md +++ /dev/null @@ -1,80 +0,0 @@ -# pascalcase [![NPM version](https://badge.fury.io/js/pascalcase.svg)](http://badge.fury.io/js/pascalcase) - -> Convert a string to pascal-case. - -## Install - -Install with [npm](https://www.npmjs.com/) - -```sh -$ npm i pascalcase --save -``` - -## Usage - -```js -var pascalcase = require('pascalcase'); - -pascalcase('a'); -//=> 'A' - -pascalcase('foo bar baz'); -//=> 'FooBarBaz' - -pascalcase('foo_bar-baz'); -//=> 'FooBarBaz' - -pascalcase('foo.bar.baz'); -//=> 'FooBarBaz' - -pascalcase('foo/bar/baz'); -//=> 'FooBarBaz' - -pascalcase('foo[bar)baz'); -//=> 'FooBarBaz' - -pascalcase('#foo+bar*baz'); -//=> 'FooBarBaz' - -pascalcase('$foo~bar`baz'); -//=> 'FooBarBaz' - -pascalcase('_foo_bar-baz-'); -//=> 'FooBarBaz' -``` - -## Related projects - -* [justified](https://github.com/jonschlinkert/justified): Wrap words to a specified length and justified the text. -* [pad-left](https://github.com/jonschlinkert/pad-left): Left pad a string with zeros or a specified string. Fastest implementation. -* [pad-right](https://github.com/jonschlinkert/pad-right): Right pad a string with zeros or a specified string. Fastest implementation. -* [repeat-string](https://github.com/jonschlinkert/repeat-string): Repeat the given string n times. Fastest implementation for repeating a string. -* [word-wrap](https://github.com/jonschlinkert/word-wrap): Wrap words to a specified length. - -## Running tests - -Install dev dependencies: - -```sh -$ npm i -d && npm test -``` - -## Contributing - -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/pascalcase/issues/new) - -## Author - -**Jon Schlinkert** - -+ [github/jonschlinkert](https://github.com/jonschlinkert) -+ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) - -## License - -Copyright © 2015 Jon Schlinkert -Released under the MIT license. - -*** - -_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on August 19, 2015._ \ No newline at end of file diff --git a/node_modules/pascalcase/index.js b/node_modules/pascalcase/index.js deleted file mode 100644 index 7e8159c..0000000 --- a/node_modules/pascalcase/index.js +++ /dev/null @@ -1,21 +0,0 @@ -/*! - * pascalcase - * - * Copyright (c) 2015, Jon Schlinkert. - * Licensed under the MIT License. - */ - -function pascalcase(str) { - if (typeof str !== 'string') { - throw new TypeError('expected a string.'); - } - str = str.replace(/([A-Z])/g, ' $1'); - if (str.length === 1) { return str.toUpperCase(); } - str = str.replace(/^[\W_]+|[\W_]+$/g, '').toLowerCase(); - str = str.charAt(0).toUpperCase() + str.slice(1); - return str.replace(/[\W_]+(\w|$)/g, function (_, ch) { - return ch.toUpperCase(); - }); -} - -module.exports = pascalcase; diff --git a/node_modules/pascalcase/package.json b/node_modules/pascalcase/package.json deleted file mode 100644 index 0576d13..0000000 --- a/node_modules/pascalcase/package.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "name": "pascalcase", - "description": "Convert a string to pascal-case.", - "version": "0.1.1", - "homepage": "https://github.com/jonschlinkert/pascalcase", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "repository": "jonschlinkert/pascalcase", - "bugs": { - "url": "https://github.com/jonschlinkert/pascalcase/issues" - }, - "license": "MIT", - "files": [ - "index.js" - ], - "main": "index.js", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "devDependencies": { - "mocha": "*", - "should": "*" - }, - "keywords": [ - "camelcase", - "case", - "casing", - "pascal", - "pascal-case", - "pascalcase", - "string" - ], - "verb": { - "related": { - "list": [ - "pad-left", - "pad-right", - "word-wrap", - "repeat-string", - "justified" - ] - } - } -} \ No newline at end of file diff --git a/node_modules/path-dirname/index.js b/node_modules/path-dirname/index.js deleted file mode 100644 index ed67817..0000000 --- a/node_modules/path-dirname/index.js +++ /dev/null @@ -1,143 +0,0 @@ -'use strict'; - -var path = require('path'); -var inspect = require('util').inspect; - -function assertPath(path) { - if (typeof path !== 'string') { - throw new TypeError('Path must be a string. Received ' + inspect(path)); - } -} - -function posix(path) { - assertPath(path); - if (path.length === 0) - return '.'; - var code = path.charCodeAt(0); - var hasRoot = (code === 47/*/*/); - var end = -1; - var matchedSlash = true; - for (var i = path.length - 1; i >= 1; --i) { - code = path.charCodeAt(i); - if (code === 47/*/*/) { - if (!matchedSlash) { - end = i; - break; - } - } else { - // We saw the first non-path separator - matchedSlash = false; - } - } - - if (end === -1) - return hasRoot ? '/' : '.'; - if (hasRoot && end === 1) - return '//'; - return path.slice(0, end); -} - -function win32(path) { - assertPath(path); - var len = path.length; - if (len === 0) - return '.'; - var rootEnd = -1; - var end = -1; - var matchedSlash = true; - var offset = 0; - var code = path.charCodeAt(0); - - // Try to match a root - if (len > 1) { - if (code === 47/*/*/ || code === 92/*\*/) { - // Possible UNC root - - rootEnd = offset = 1; - - code = path.charCodeAt(1); - if (code === 47/*/*/ || code === 92/*\*/) { - // Matched double path separator at beginning - var j = 2; - var last = j; - // Match 1 or more non-path separators - for (; j < len; ++j) { - code = path.charCodeAt(j); - if (code === 47/*/*/ || code === 92/*\*/) - break; - } - if (j < len && j !== last) { - // Matched! - last = j; - // Match 1 or more path separators - for (; j < len; ++j) { - code = path.charCodeAt(j); - if (code !== 47/*/*/ && code !== 92/*\*/) - break; - } - if (j < len && j !== last) { - // Matched! - last = j; - // Match 1 or more non-path separators - for (; j < len; ++j) { - code = path.charCodeAt(j); - if (code === 47/*/*/ || code === 92/*\*/) - break; - } - if (j === len) { - // We matched a UNC root only - return path; - } - if (j !== last) { - // We matched a UNC root with leftovers - - // Offset by 1 to include the separator after the UNC root to - // treat it as a "normal root" on top of a (UNC) root - rootEnd = offset = j + 1; - } - } - } - } - } else if ((code >= 65/*A*/ && code <= 90/*Z*/) || - (code >= 97/*a*/ && code <= 122/*z*/)) { - // Possible device root - - code = path.charCodeAt(1); - if (path.charCodeAt(1) === 58/*:*/) { - rootEnd = offset = 2; - if (len > 2) { - code = path.charCodeAt(2); - if (code === 47/*/*/ || code === 92/*\*/) - rootEnd = offset = 3; - } - } - } - } else if (code === 47/*/*/ || code === 92/*\*/) { - return path[0]; - } - - for (var i = len - 1; i >= offset; --i) { - code = path.charCodeAt(i); - if (code === 47/*/*/ || code === 92/*\*/) { - if (!matchedSlash) { - end = i; - break; - } - } else { - // We saw the first non-path separator - matchedSlash = false; - } - } - - if (end === -1) { - if (rootEnd === -1) - return '.'; - else - end = rootEnd; - } - return path.slice(0, end); -} - -module.exports = process.platform === 'win32' ? win32 : posix; -module.exports.posix = posix; -module.exports.win32 = win32; diff --git a/node_modules/path-dirname/license b/node_modules/path-dirname/license deleted file mode 100644 index 1981663..0000000 --- a/node_modules/path-dirname/license +++ /dev/null @@ -1,22 +0,0 @@ - -The MIT License (MIT) - -Copyright (c) Elan Shanker and Node.js contributors. 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. diff --git a/node_modules/path-dirname/package.json b/node_modules/path-dirname/package.json deleted file mode 100644 index eb78533..0000000 --- a/node_modules/path-dirname/package.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "name": "path-dirname", - "version": "1.0.2", - "description": "Node.js path.dirname() ponyfill", - "license": "MIT", - "repository": "es128/path-dirname", - "author": "Elan Shanker", - "scripts": { - "test": "node test.js" - }, - "files": [ - "index.js" - ], - "keywords": [ - "dirname", - "dir", - "path", - "paths", - "file", - "built-in", - "util", - "utils", - "core", - "stdlib", - "ponyfill", - "polyfill", - "shim" - ] -} diff --git a/node_modules/path-dirname/readme.md b/node_modules/path-dirname/readme.md deleted file mode 100644 index 652a562..0000000 --- a/node_modules/path-dirname/readme.md +++ /dev/null @@ -1,53 +0,0 @@ -# path-dirname [![Build Status](https://travis-ci.org/es128/path-dirname.svg?branch=master)](https://travis-ci.org/es128/path-dirname) - -> Node.js [`path.dirname()`](https://nodejs.org/api/path.html#path_path_dirname_path) [ponyfill](https://ponyfill.com) - -This was needed in order to expose `path.posix.dirname()` on Node.js v0.10 - -## Install - -``` -$ npm install --save path-dirname -``` - - -## Usage - -```js -const pathDirname = require('path-dirname'); - -pathDirname('/home/foo'); -//=> '/home' -pathDirname('C:\\Users\\foo'); -//=> 'C:\\Users' -pathDirname('foo'); -//=> '.' -pathDirname('foo/bar'); -//=> 'foo' - -//Using posix version for consistent output when dealing with glob escape chars -pathDirname.win32('C:\\Users\\foo/\\*bar'); -//=> 'C:\\Users\\foo/' -pathDirname.posix('C:\\Users\\foo/\\*bar'); -//=> 'C:\\Users\\foo' -``` - - -## API - -See the [`path.dirname()` docs](https://nodejs.org/api/path.html#path_path_dirname_path). - -### pathDirname(path) - -### pathDirname.posix(path) - -POSIX specific version. - -### pathDirname.win32(path) - -Windows specific version. - - -## License - -MIT diff --git a/node_modules/path-is-absolute/index.js b/node_modules/path-is-absolute/index.js deleted file mode 100644 index 22aa6c3..0000000 --- a/node_modules/path-is-absolute/index.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -function posix(path) { - return path.charAt(0) === '/'; -} - -function win32(path) { - // https://github.com/nodejs/node/blob/b3fcc245fb25539909ef1d5eaa01dbf92e168633/lib/path.js#L56 - var splitDeviceRe = /^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/; - var result = splitDeviceRe.exec(path); - var device = result[1] || ''; - var isUnc = Boolean(device && device.charAt(1) !== ':'); - - // UNC paths are always absolute - return Boolean(result[2] || isUnc); -} - -module.exports = process.platform === 'win32' ? win32 : posix; -module.exports.posix = posix; -module.exports.win32 = win32; diff --git a/node_modules/path-is-absolute/license b/node_modules/path-is-absolute/license deleted file mode 100644 index 654d0bf..0000000 --- a/node_modules/path-is-absolute/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (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/path-is-absolute/package.json b/node_modules/path-is-absolute/package.json deleted file mode 100644 index 91196d5..0000000 --- a/node_modules/path-is-absolute/package.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "name": "path-is-absolute", - "version": "1.0.1", - "description": "Node.js 0.12 path.isAbsolute() ponyfill", - "license": "MIT", - "repository": "sindresorhus/path-is-absolute", - "author": { - "name": "Sindre Sorhus", - "email": "sindresorhus@gmail.com", - "url": "sindresorhus.com" - }, - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "xo && node test.js" - }, - "files": [ - "index.js" - ], - "keywords": [ - "path", - "paths", - "file", - "dir", - "absolute", - "isabsolute", - "is-absolute", - "built-in", - "util", - "utils", - "core", - "ponyfill", - "polyfill", - "shim", - "is", - "detect", - "check" - ], - "devDependencies": { - "xo": "^0.16.0" - } -} diff --git a/node_modules/path-is-absolute/readme.md b/node_modules/path-is-absolute/readme.md deleted file mode 100644 index 8dbdf5f..0000000 --- a/node_modules/path-is-absolute/readme.md +++ /dev/null @@ -1,59 +0,0 @@ -# path-is-absolute [![Build Status](https://travis-ci.org/sindresorhus/path-is-absolute.svg?branch=master)](https://travis-ci.org/sindresorhus/path-is-absolute) - -> Node.js 0.12 [`path.isAbsolute()`](http://nodejs.org/api/path.html#path_path_isabsolute_path) [ponyfill](https://ponyfill.com) - - -## Install - -``` -$ npm install --save path-is-absolute -``` - - -## Usage - -```js -const pathIsAbsolute = require('path-is-absolute'); - -// Running on Linux -pathIsAbsolute('/home/foo'); -//=> true -pathIsAbsolute('C:/Users/foo'); -//=> false - -// Running on Windows -pathIsAbsolute('C:/Users/foo'); -//=> true -pathIsAbsolute('/home/foo'); -//=> false - -// Running on any OS -pathIsAbsolute.posix('/home/foo'); -//=> true -pathIsAbsolute.posix('C:/Users/foo'); -//=> false -pathIsAbsolute.win32('C:/Users/foo'); -//=> true -pathIsAbsolute.win32('/home/foo'); -//=> false -``` - - -## API - -See the [`path.isAbsolute()` docs](http://nodejs.org/api/path.html#path_path_isabsolute_path). - -### pathIsAbsolute(path) - -### pathIsAbsolute.posix(path) - -POSIX specific version. - -### pathIsAbsolute.win32(path) - -Windows specific version. - - -## License - -MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/node_modules/pause-stream/.npmignore b/node_modules/pause-stream/.npmignore deleted file mode 100644 index 13abef4..0000000 --- a/node_modules/pause-stream/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules -node_modules/* -npm_debug.log diff --git a/node_modules/pause-stream/LICENSE b/node_modules/pause-stream/LICENSE deleted file mode 100644 index 6a477d4..0000000 --- a/node_modules/pause-stream/LICENSE +++ /dev/null @@ -1,231 +0,0 @@ -Dual Licensed MIT and Apache 2 - -The MIT License - -Copyright (c) 2013 Dominic Tarr - -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. - - - ----------------------------------------------------------------------- - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright (c) 2013 Dominic Tarr - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. \ No newline at end of file diff --git a/node_modules/pause-stream/index.js b/node_modules/pause-stream/index.js deleted file mode 100644 index 0e0bf96..0000000 --- a/node_modules/pause-stream/index.js +++ /dev/null @@ -1,3 +0,0 @@ -//through@2 handles this by default! -module.exports = require('through') - diff --git a/node_modules/pause-stream/package.json b/node_modules/pause-stream/package.json deleted file mode 100644 index 2a22646..0000000 --- a/node_modules/pause-stream/package.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "pause-stream", - "version": "0.0.11", - "description": "a ThroughStream that strictly buffers all readable events when paused.", - "main": "index.js", - "directories": { - "test": "test" - }, - "devDependencies": { - "stream-tester": "0.0.2", - "stream-spec": "~0.2.0" - }, - "scripts": { - "test": "node test/index.js && node test/pause-end.js" - }, - "repository": { - "type": "git", - "url": "git://github.com/dominictarr/pause-stream.git" - }, - "keywords": [ - "stream", - "pipe", - "pause", - "drain", - "buffer" - ], - "author": "Dominic Tarr (dominictarr.com)", - "license": [ - "MIT", - "Apache2" - ], - "dependencies": { - "through": "~2.3" - } -} diff --git a/node_modules/pause-stream/readme.markdown b/node_modules/pause-stream/readme.markdown deleted file mode 100644 index 2366939..0000000 --- a/node_modules/pause-stream/readme.markdown +++ /dev/null @@ -1,29 +0,0 @@ -# PauseStream - -This is a `Stream` that will strictly buffer when paused. -Connect it to anything you need buffered. - -``` js - var ps = require('pause-stream')(); - - badlyBehavedStream.pipe(ps.pause()) - - aLittleLater(function (err, data) { - ps.pipe(createAnotherStream(data)) - ps.resume() - }) -``` - -`PauseStream` will buffer whenever paused. -it will buffer when yau have called `pause` manually. -but also when it's downstream `dest.write()===false`. -it will attempt to drain the buffer when you call resume -or the downstream emits `'drain'` - -`PauseStream` is tested using [stream-spec](https://github.com/dominictarr/stream-spec) -and [stream-tester](https://github.com/dominictarr/stream-tester) - -This is now the default case of -[through](https://github.com/dominictarr/through) - -https://github.com/dominictarr/pause-stream/commit/4a6fe3dc2c11091b1efbfde912e0473719ed9cc0 diff --git a/node_modules/pause-stream/test/index.js b/node_modules/pause-stream/test/index.js deleted file mode 100644 index db8778d..0000000 --- a/node_modules/pause-stream/test/index.js +++ /dev/null @@ -1,17 +0,0 @@ -var spec = require('stream-spec') -var tester = require('stream-tester') -var ps = require('..')() - -spec(ps) - .through({strict: false}) - .validateOnExit() - -var master = tester.createConsistent - -tester.createRandomStream(1000) //1k random numbers - .pipe(master = tester.createConsistentStream()) - .pipe(tester.createUnpauseStream()) - .pipe(ps) - .pipe(tester.createPauseStream()) - .pipe(master.createSlave()) - diff --git a/node_modules/pause-stream/test/pause-end.js b/node_modules/pause-stream/test/pause-end.js deleted file mode 100644 index a6c27ef..0000000 --- a/node_modules/pause-stream/test/pause-end.js +++ /dev/null @@ -1,33 +0,0 @@ - -var pause = require('..') -var assert = require('assert') - -var ps = pause() -var read = [], ended = false - -ps.on('data', function (i) { - read.push(i) -}) - -ps.on('end', function () { - ended = true -}) - -assert.deepEqual(read, []) - -ps.write(0) -ps.write(1) -ps.write(2) - -assert.deepEqual(read, [0, 1, 2]) - -ps.pause() - -assert.deepEqual(read, [0, 1, 2]) - -ps.end() -assert.equal(ended, false) -ps.resume() -assert.equal(ended, true) - - diff --git a/node_modules/posix-character-classes/LICENSE b/node_modules/posix-character-classes/LICENSE deleted file mode 100644 index b11cb79..0000000 --- a/node_modules/posix-character-classes/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016-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/posix-character-classes/README.md b/node_modules/posix-character-classes/README.md deleted file mode 100644 index 894ae23..0000000 --- a/node_modules/posix-character-classes/README.md +++ /dev/null @@ -1,103 +0,0 @@ -# posix-character-classes [![NPM version](https://img.shields.io/npm/v/posix-character-classes.svg?style=flat)](https://www.npmjs.com/package/posix-character-classes) [![NPM monthly downloads](https://img.shields.io/npm/dm/posix-character-classes.svg?style=flat)](https://npmjs.org/package/posix-character-classes) [![NPM total downloads](https://img.shields.io/npm/dt/posix-character-classes.svg?style=flat)](https://npmjs.org/package/posix-character-classes) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/posix-character-classes.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/posix-character-classes) - -> POSIX character classes for creating regular expressions. - -## Install - -Install with [npm](https://www.npmjs.com/): - -```sh -$ npm install --save posix-character-classes -``` - -Install with [yarn](https://yarnpkg.com): - -```sh -$ yarn add posix-character-classes -``` - -## Usage - -```js -var posix = require('posix-character-classes'); -console.log(posix.alpha); -//=> 'A-Za-z' -``` - -## POSIX Character classes - -The POSIX standard supports the following classes or categories of charactersh (note that classes must be defined within brackets)[1]: - -| **POSIX class** | **Equivalent to** | **Matches** | -| --- | --- | --- | -| `[:alnum:]` | `[A-Za-z0-9]` | digits, uppercase and lowercase letters | -| `[:alpha:]` | `[A-Za-z]` | upper- and lowercase letters | -| `[:ascii:]` | `[\x00-\x7F]` | ASCII characters | -| `[:blank:]` | `[ \t]` | space and TAB characters only | -| `[:cntrl:]` | `[\x00-\x1F\x7F]` | Control characters | -| `[:digit:]` | `[0-9]` | digits | -| `[:graph:]` | `[^[:cntrl:]]` | graphic characters (all characters which have graphic representation) | -| `[:lower:]` | `[a-z]` | lowercase letters | -| `[:print:]` | `[[:graph] ]` | graphic characters and space | -| `[:punct:]` | ``[-!"#$%&'()*+,./:;<=>?@[]^_`{ | }~]`` | all punctuation characters (all graphic characters except letters and digits) | -| `[:space:]` | `[ \t\n\r\f\v]` | all blank (whitespace) characters, including spaces, tabs, new lines, carriage returns, form feeds, and vertical tabs | -| `[:upper:]` | `[A-Z]` | uppercase letters | -| `[:word:]` | `[A-Za-z0-9_]` | word characters | -| `[:xdigit:]` | `[0-9A-Fa-f]` | hexadecimal digits | - -## Examples - -* `a[[:digit:]]b` matches `a0b`, `a1b`, ..., `a9b`. -* `a[:digit:]b` is invalid, character classes must be enclosed in brackets -* `[[:digit:]abc]` matches any digit, as well as `a`, `b`, and `c`. -* `[abc[:digit:]]` is the same as the previous, matching any digit, as well as `a`, `b`, and `c` -* `[^ABZ[:lower:]]` matches any character except lowercase letters, `A`, `B`, and `Z`. - -## About - -### Contributing - -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). - -### 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 -``` - -### 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 -``` - -### Author - -**Jon Schlinkert** - -* [github/jonschlinkert](https://github.com/jonschlinkert) -* [twitter/jonschlinkert](https://twitter.com/jonschlinkert) - -### License - -Copyright © 2017, [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.5.0, on April 20, 2017._ - -
    -
    -
      -
    1. table and examples are based on the WikiBooks page for [Regular Expressions/POSIX Basic Regular Expressions](https://en.wikibooks.org/wiki/Regular_Expressions/POSIX_Basic_Regular_Expressions), which is available under the [Creative Commons Attribution-ShareAlike License](https://creativecommons.org/licenses/by-sa/3.0/). - -
    2. -
    -
    \ No newline at end of file diff --git a/node_modules/posix-character-classes/index.js b/node_modules/posix-character-classes/index.js deleted file mode 100644 index 19f1c98..0000000 --- a/node_modules/posix-character-classes/index.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict'; - -/** - * POSIX character classes - */ - -module.exports = { - alnum: 'a-zA-Z0-9', - alpha: 'a-zA-Z', - ascii: '\\x00-\\x7F', - blank: ' \\t', - cntrl: '\\x00-\\x1F\\x7F', - digit: '0-9', - graph: '\\x21-\\x7E', - lower: 'a-z', - print: '\\x20-\\x7E ', - punct: '\\-!"#$%&\'()\\*+,./:;<=>?@[\\]^_`{|}~', - space: ' \\t\\r\\n\\v\\f', - upper: 'A-Z', - word: 'A-Za-z0-9_', - xdigit: 'A-Fa-f0-9' -}; diff --git a/node_modules/posix-character-classes/package.json b/node_modules/posix-character-classes/package.json deleted file mode 100644 index acce4ba..0000000 --- a/node_modules/posix-character-classes/package.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "name": "posix-character-classes", - "description": "POSIX character classes for creating regular expressions.", - "version": "0.1.1", - "homepage": "https://github.com/jonschlinkert/posix-character-classes", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "repository": "jonschlinkert/posix-character-classes", - "bugs": { - "url": "https://github.com/jonschlinkert/posix-character-classes/issues" - }, - "license": "MIT", - "files": [ - "index.js" - ], - "main": "index.js", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "devDependencies": { - "gulp-format-md": "^0.1.12", - "mocha": "^3.2.0" - }, - "keywords": [ - "character", - "classes", - "posix" - ], - "verb": { - "toc": false, - "layout": "default", - "tasks": [ - "readme" - ], - "plugins": [ - "gulp-format-md" - ], - "reflinks": [ - "verb", - "verb-generate-readme" - ], - "lint": { - "reflinks": true - }, - "related-list": [ - "micromatch", - "nanomatch", - "extglob", - "expand-brackets" - ] - } -} diff --git a/node_modules/process-nextick-args/index.js b/node_modules/process-nextick-args/index.js deleted file mode 100644 index 3eecf11..0000000 --- a/node_modules/process-nextick-args/index.js +++ /dev/null @@ -1,45 +0,0 @@ -'use strict'; - -if (typeof process === 'undefined' || - !process.version || - process.version.indexOf('v0.') === 0 || - process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) { - module.exports = { nextTick: nextTick }; -} else { - module.exports = process -} - -function nextTick(fn, arg1, arg2, arg3) { - if (typeof fn !== 'function') { - throw new TypeError('"callback" argument must be a function'); - } - var len = arguments.length; - var args, i; - switch (len) { - case 0: - case 1: - return process.nextTick(fn); - case 2: - return process.nextTick(function afterTickOne() { - fn.call(null, arg1); - }); - case 3: - return process.nextTick(function afterTickTwo() { - fn.call(null, arg1, arg2); - }); - case 4: - return process.nextTick(function afterTickThree() { - fn.call(null, arg1, arg2, arg3); - }); - default: - args = new Array(len - 1); - i = 0; - while (i < args.length) { - args[i++] = arguments[i]; - } - return process.nextTick(function afterTick() { - fn.apply(null, args); - }); - } -} - diff --git a/node_modules/process-nextick-args/license.md b/node_modules/process-nextick-args/license.md deleted file mode 100644 index c67e353..0000000 --- a/node_modules/process-nextick-args/license.md +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2015 Calvin Metcalf - -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/process-nextick-args/package.json b/node_modules/process-nextick-args/package.json deleted file mode 100644 index 6070b72..0000000 --- a/node_modules/process-nextick-args/package.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "process-nextick-args", - "version": "2.0.1", - "description": "process.nextTick but always with args", - "main": "index.js", - "files": [ - "index.js" - ], - "scripts": { - "test": "node test.js" - }, - "repository": { - "type": "git", - "url": "https://github.com/calvinmetcalf/process-nextick-args.git" - }, - "author": "", - "license": "MIT", - "bugs": { - "url": "https://github.com/calvinmetcalf/process-nextick-args/issues" - }, - "homepage": "https://github.com/calvinmetcalf/process-nextick-args", - "devDependencies": { - "tap": "~0.2.6" - } -} diff --git a/node_modules/process-nextick-args/readme.md b/node_modules/process-nextick-args/readme.md deleted file mode 100644 index ecb432c..0000000 --- a/node_modules/process-nextick-args/readme.md +++ /dev/null @@ -1,18 +0,0 @@ -process-nextick-args -===== - -[![Build Status](https://travis-ci.org/calvinmetcalf/process-nextick-args.svg?branch=master)](https://travis-ci.org/calvinmetcalf/process-nextick-args) - -```bash -npm install --save process-nextick-args -``` - -Always be able to pass arguments to process.nextTick, no matter the platform - -```js -var pna = require('process-nextick-args'); - -pna.nextTick(function (a, b, c) { - console.log(a, b, c); -}, 'step', 3, 'profit'); -``` diff --git a/node_modules/proxy-middleware/.npmignore b/node_modules/proxy-middleware/.npmignore deleted file mode 100644 index e216ae5..0000000 --- a/node_modules/proxy-middleware/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -/node_modules -/test diff --git a/node_modules/proxy-middleware/.travis.yml b/node_modules/proxy-middleware/.travis.yml deleted file mode 100644 index df63076..0000000 --- a/node_modules/proxy-middleware/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - "0.10" - - "0.8" diff --git a/node_modules/proxy-middleware/LICENSE b/node_modules/proxy-middleware/LICENSE deleted file mode 100644 index 0bbb53e..0000000 --- a/node_modules/proxy-middleware/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -The MIT License (Expat) - -Copyright (c) 2014 Andrew Kelley - -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/proxy-middleware/README.md b/node_modules/proxy-middleware/README.md deleted file mode 100644 index 6bcb842..0000000 --- a/node_modules/proxy-middleware/README.md +++ /dev/null @@ -1,40 +0,0 @@ -[![Build Status](https://secure.travis-ci.org/andrewrk/node-proxy-middleware.png)](http://travis-ci.org/andrewrk/node-proxy-middleware) - -### Usage: - -```js -var connect = require('connect'); -var url = require('url'); -var proxy = require('proxy-middleware'); - -var app = connect(); -app.use('/api', proxy(url.parse('https://example.com/endpoint'))); -// now requests to '/api/x/y/z' are proxied to 'https://example.com/endpoint/x/y/z' - -//same as example above but also uses a short hand string only parameter -app.use('/api-string-only', proxy('https://example.com/endpoint')); -``` - -### Documentation: - -`proxyMiddleware(options)` - -`options` allows any options that are permitted on the [`http`](http://nodejs.org/api/http.html#http_http_request_options_callback) or [`https`](http://nodejs.org/api/https.html#https_https_request_options_callback) request options. - -Other options: -- `route`: you can pass the route for connect middleware within the options, as well. -- `via`: by default no [via header](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.45) is added. If you pass `true` for this option the local hostname will be used for the via header. You can also pass a string for this option in which case that will be used for the via header. -- `cookieRewrite`: this option can be used to support cookies via the proxy by rewriting the cookie domain to that of the proxy server. By default cookie domains are not rewritten. The `cookieRewrite` option works as the `via` option - if you pass `true` the local hostname will be used, and if you pass a string that will be used as the rewritten cookie domain. -- `preserveHost`: When enabled, this option will pass the Host: line from the incoming request to the proxied host. Default: `false`. - -### Usage with route: - -```js -var proxyOptions = url.parse('https://example.com/endpoint'); -proxyOptions.route = '/api'; - -var middleWares = [proxy(proxyOptions) /*, ...*/]; - -// Grunt connect uses this method -connect(middleWares); -``` diff --git a/node_modules/proxy-middleware/index.js b/node_modules/proxy-middleware/index.js deleted file mode 100644 index b8c573e..0000000 --- a/node_modules/proxy-middleware/index.js +++ /dev/null @@ -1,141 +0,0 @@ -var os = require('os'); -var http = require('http'); -var https = require('https'); -var owns = {}.hasOwnProperty; - -module.exports = function proxyMiddleware(options) { - //enable ability to quickly pass a url for shorthand setup - if(typeof options === 'string'){ - options = require('url').parse(options); - } - - var httpLib = options.protocol === 'https:' ? https : http; - var request = httpLib.request; - - options = options || {}; - options.hostname = options.hostname; - options.port = options.port; - options.pathname = options.pathname || '/'; - - return function (req, resp, next) { - var url = req.url; - // You can pass the route within the options, as well - if (typeof options.route === 'string') { - if (url === options.route) { - url = ''; - } else if (url.slice(0, options.route.length) === options.route) { - url = url.slice(options.route.length); - } else { - return next(); - } - } - - //options for this request - var opts = extend({}, options); - if (url && url.charAt(0) === '?') { // prevent /api/resource/?offset=0 - if (options.pathname.length > 1 && options.pathname.charAt(options.pathname.length - 1) === '/') { - opts.path = options.pathname.substring(0, options.pathname.length - 1) + url; - } else { - opts.path = options.pathname + url; - } - } else if (url) { - opts.path = slashJoin(options.pathname, url); - } else { - opts.path = options.pathname; - } - opts.method = req.method; - opts.headers = options.headers ? merge(req.headers, options.headers) : req.headers; - - applyViaHeader(req.headers, opts, opts.headers); - - if (!options.preserveHost) { - // Forwarding the host breaks dotcloud - delete opts.headers.host; - } - - var myReq = request(opts, function (myRes) { - var statusCode = myRes.statusCode - , headers = myRes.headers - , location = headers.location; - // Fix the location - if (((statusCode > 300 && statusCode < 304) || statusCode === 201) && location && location.indexOf(options.href) > -1) { - // absoulte path - headers.location = location.replace(options.href, slashJoin('/', slashJoin((options.route || ''), ''))); - } - applyViaHeader(myRes.headers, opts, myRes.headers); - rewriteCookieHosts(myRes.headers, opts, myRes.headers, req); - resp.writeHead(myRes.statusCode, myRes.headers); - myRes.on('error', function (err) { - next(err); - }); - myRes.pipe(resp); - }); - myReq.on('error', function (err) { - next(err); - }); - if (!req.readable) { - myReq.end(); - } else { - req.pipe(myReq); - } - }; -}; - -function applyViaHeader(existingHeaders, opts, applyTo) { - if (!opts.via) return; - - var viaName = (true === opts.via) ? os.hostname() : opts.via; - var viaHeader = '1.1 ' + viaName; - if(existingHeaders.via) { - viaHeader = existingHeaders.via + ', ' + viaHeader; - } - - applyTo.via = viaHeader; -} - -function rewriteCookieHosts(existingHeaders, opts, applyTo, req) { - if (!opts.cookieRewrite || !owns.call(existingHeaders, 'set-cookie')) { - return; - } - - var existingCookies = existingHeaders['set-cookie'], - rewrittenCookies = [], - rewriteHostname = (true === opts.cookieRewrite) ? os.hostname() : opts.cookieRewrite; - - if (!Array.isArray(existingCookies)) { - existingCookies = [ existingCookies ]; - } - - for (var i = 0; i < existingCookies.length; i++) { - var rewrittenCookie = existingCookies[i].replace(/(Domain)=[a-z\.-_]*?(;|$)/gi, '$1=' + rewriteHostname + '$2'); - - if (!req.connection.encrypted) { - rewrittenCookie = rewrittenCookie.replace(/;\s*?(Secure)/i, ''); - } - rewrittenCookies.push(rewrittenCookie); - } - - applyTo['set-cookie'] = rewrittenCookies; -} - -function slashJoin(p1, p2) { - var trailing_slash = false; - - if (p1.length && p1[p1.length - 1] === '/') { trailing_slash = true; } - if (trailing_slash && p2.length && p2[0] === '/') {p2 = p2.substring(1); } - - return p1 + p2; -} - -function extend(obj, src) { - for (var key in src) if (owns.call(src, key)) obj[key] = src[key]; - return obj; -} - -//merges data without changing state in either argument -function merge(src1, src2) { - var merged = {}; - extend(merged, src1); - extend(merged, src2); - return merged; -} diff --git a/node_modules/proxy-middleware/package.json b/node_modules/proxy-middleware/package.json deleted file mode 100644 index af7170e..0000000 --- a/node_modules/proxy-middleware/package.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "proxy-middleware", - "version": "0.15.0", - "description": "http(s) proxy as connect middleware", - "main": "index.js", - "scripts": { - "test": "mocha" - }, - "repository": { - "type": "git", - "url": "https://github.com/andrewrk/connect-proxy" - }, - "keywords": [ - "connect", - "proxy", - "middleware", - "https", - "http", - "ssl" - ], - "author": "Andrew Kelley", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - }, - "devDependencies": { - "connect": "~3.3.5", - "mocha": "~2.2.5", - "serve-static": "~1.9.3" - } -} diff --git a/node_modules/range-parser/HISTORY.md b/node_modules/range-parser/HISTORY.md deleted file mode 100644 index 70a973d..0000000 --- a/node_modules/range-parser/HISTORY.md +++ /dev/null @@ -1,56 +0,0 @@ -1.2.1 / 2019-05-10 -================== - - * Improve error when `str` is not a string - -1.2.0 / 2016-06-01 -================== - - * Add `combine` option to combine overlapping ranges - -1.1.0 / 2016-05-13 -================== - - * Fix incorrectly returning -1 when there is at least one valid range - * perf: remove internal function - -1.0.3 / 2015-10-29 -================== - - * perf: enable strict mode - -1.0.2 / 2014-09-08 -================== - - * Support Node.js 0.6 - -1.0.1 / 2014-09-07 -================== - - * Move repository to jshttp - -1.0.0 / 2013-12-11 -================== - - * Add repository to package.json - * Add MIT license - -0.0.4 / 2012-06-17 -================== - - * Change ret -1 for unsatisfiable and -2 when invalid - -0.0.3 / 2012-06-17 -================== - - * Fix last-byte-pos default to len - 1 - -0.0.2 / 2012-06-14 -================== - - * Add `.type` - -0.0.1 / 2012-06-11 -================== - - * Initial release diff --git a/node_modules/range-parser/LICENSE b/node_modules/range-parser/LICENSE deleted file mode 100644 index 3599954..0000000 --- a/node_modules/range-parser/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -(The MIT License) - -Copyright (c) 2012-2014 TJ Holowaychuk -Copyright (c) 2015-2016 Douglas Christopher Wilson - -```js -var parseRange = require('range-parser') -``` - -### parseRange(size, header, options) - -Parse the given `header` string where `size` is the maximum size of the resource. -An array of ranges will be returned or negative numbers indicating an error parsing. - - * `-2` signals a malformed header string - * `-1` signals an unsatisfiable range - - - -```js -// parse header from request -var range = parseRange(size, req.headers.range) - -// the type of the range -if (range.type === 'bytes') { - // the ranges - range.forEach(function (r) { - // do something with r.start and r.end - }) -} -``` - -#### Options - -These properties are accepted in the options object. - -##### combine - -Specifies if overlapping & adjacent ranges should be combined, defaults to `false`. -When `true`, ranges will be combined and returned as if they were specified that -way in the header. - - - -```js -parseRange(100, 'bytes=50-55,0-10,5-10,56-60', { combine: true }) -// => [ -// { start: 0, end: 10 }, -// { start: 50, end: 60 } -// ] -``` - -## License - -[MIT](LICENSE) - -[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/range-parser/master -[coveralls-url]: https://coveralls.io/r/jshttp/range-parser?branch=master -[node-image]: https://badgen.net/npm/node/range-parser -[node-url]: https://nodejs.org/en/download -[npm-downloads-image]: https://badgen.net/npm/dm/range-parser -[npm-url]: https://npmjs.org/package/range-parser -[npm-version-image]: https://badgen.net/npm/v/range-parser -[travis-image]: https://badgen.net/travis/jshttp/range-parser/master -[travis-url]: https://travis-ci.org/jshttp/range-parser diff --git a/node_modules/range-parser/index.js b/node_modules/range-parser/index.js deleted file mode 100644 index b7dc5c0..0000000 --- a/node_modules/range-parser/index.js +++ /dev/null @@ -1,162 +0,0 @@ -/*! - * range-parser - * Copyright(c) 2012-2014 TJ Holowaychuk - * Copyright(c) 2015-2016 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict' - -/** - * Module exports. - * @public - */ - -module.exports = rangeParser - -/** - * Parse "Range" header `str` relative to the given file `size`. - * - * @param {Number} size - * @param {String} str - * @param {Object} [options] - * @return {Array} - * @public - */ - -function rangeParser (size, str, options) { - if (typeof str !== 'string') { - throw new TypeError('argument str must be a string') - } - - var index = str.indexOf('=') - - if (index === -1) { - return -2 - } - - // split the range string - var arr = str.slice(index + 1).split(',') - var ranges = [] - - // add ranges type - ranges.type = str.slice(0, index) - - // parse all ranges - for (var i = 0; i < arr.length; i++) { - var range = arr[i].split('-') - var start = parseInt(range[0], 10) - var end = parseInt(range[1], 10) - - // -nnn - if (isNaN(start)) { - start = size - end - end = size - 1 - // nnn- - } else if (isNaN(end)) { - end = size - 1 - } - - // limit last-byte-pos to current length - if (end > size - 1) { - end = size - 1 - } - - // invalid or unsatisifiable - if (isNaN(start) || isNaN(end) || start > end || start < 0) { - continue - } - - // add range - ranges.push({ - start: start, - end: end - }) - } - - if (ranges.length < 1) { - // unsatisifiable - return -1 - } - - return options && options.combine - ? combineRanges(ranges) - : ranges -} - -/** - * Combine overlapping & adjacent ranges. - * @private - */ - -function combineRanges (ranges) { - var ordered = ranges.map(mapWithIndex).sort(sortByRangeStart) - - for (var j = 0, i = 1; i < ordered.length; i++) { - var range = ordered[i] - var current = ordered[j] - - if (range.start > current.end + 1) { - // next range - ordered[++j] = range - } else if (range.end > current.end) { - // extend range - current.end = range.end - current.index = Math.min(current.index, range.index) - } - } - - // trim ordered array - ordered.length = j + 1 - - // generate combined range - var combined = ordered.sort(sortByRangeIndex).map(mapWithoutIndex) - - // copy ranges type - combined.type = ranges.type - - return combined -} - -/** - * Map function to add index value to ranges. - * @private - */ - -function mapWithIndex (range, index) { - return { - start: range.start, - end: range.end, - index: index - } -} - -/** - * Map function to remove index value from ranges. - * @private - */ - -function mapWithoutIndex (range) { - return { - start: range.start, - end: range.end - } -} - -/** - * Sort function to sort ranges by index. - * @private - */ - -function sortByRangeIndex (a, b) { - return a.index - b.index -} - -/** - * Sort function to sort ranges by start position. - * @private - */ - -function sortByRangeStart (a, b) { - return a.start - b.start -} diff --git a/node_modules/range-parser/package.json b/node_modules/range-parser/package.json deleted file mode 100644 index abea6d8..0000000 --- a/node_modules/range-parser/package.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "name": "range-parser", - "author": "TJ Holowaychuk (http://tjholowaychuk.com)", - "description": "Range header field string parser", - "version": "1.2.1", - "contributors": [ - "Douglas Christopher Wilson ", - "James Wyatt Cready ", - "Jonathan Ong (http://jongleberry.com)" - ], - "license": "MIT", - "keywords": [ - "range", - "parser", - "http" - ], - "repository": "jshttp/range-parser", - "devDependencies": { - "deep-equal": "1.0.1", - "eslint": "5.16.0", - "eslint-config-standard": "12.0.0", - "eslint-plugin-markdown": "1.0.0", - "eslint-plugin-import": "2.17.2", - "eslint-plugin-node": "8.0.1", - "eslint-plugin-promise": "4.1.1", - "eslint-plugin-standard": "4.0.0", - "mocha": "6.1.4", - "nyc": "14.1.1" - }, - "files": [ - "HISTORY.md", - "LICENSE", - "index.js" - ], - "engines": { - "node": ">= 0.6" - }, - "scripts": { - "lint": "eslint --plugin markdown --ext js,md .", - "test": "mocha --reporter spec", - "test-cov": "nyc --reporter=html --reporter=text npm test", - "test-travis": "nyc --reporter=text npm test" - } -} diff --git a/node_modules/readable-stream/.travis.yml b/node_modules/readable-stream/.travis.yml deleted file mode 100644 index f62cdac..0000000 --- a/node_modules/readable-stream/.travis.yml +++ /dev/null @@ -1,34 +0,0 @@ -sudo: false -language: node_js -before_install: - - (test $NPM_LEGACY && npm install -g npm@2 && npm install -g npm@3) || true -notifications: - email: false -matrix: - fast_finish: true - include: - - node_js: '0.8' - env: NPM_LEGACY=true - - node_js: '0.10' - env: NPM_LEGACY=true - - node_js: '0.11' - env: NPM_LEGACY=true - - node_js: '0.12' - env: NPM_LEGACY=true - - node_js: 1 - env: NPM_LEGACY=true - - node_js: 2 - env: NPM_LEGACY=true - - node_js: 3 - env: NPM_LEGACY=true - - node_js: 4 - - node_js: 5 - - node_js: 6 - - node_js: 7 - - node_js: 8 - - node_js: 9 -script: "npm run test" -env: - global: - - secure: rE2Vvo7vnjabYNULNyLFxOyt98BoJexDqsiOnfiD6kLYYsiQGfr/sbZkPMOFm9qfQG7pjqx+zZWZjGSswhTt+626C0t/njXqug7Yps4c3dFblzGfreQHp7wNX5TFsvrxd6dAowVasMp61sJcRnB2w8cUzoe3RAYUDHyiHktwqMc= - - secure: g9YINaKAdMatsJ28G9jCGbSaguXCyxSTy+pBO6Ch0Cf57ZLOTka3HqDj8p3nV28LUIHZ3ut5WO43CeYKwt4AUtLpBS3a0dndHdY6D83uY6b2qh5hXlrcbeQTq2cvw2y95F7hm4D1kwrgZ7ViqaKggRcEupAL69YbJnxeUDKWEdI= diff --git a/node_modules/readable-stream/CONTRIBUTING.md b/node_modules/readable-stream/CONTRIBUTING.md deleted file mode 100644 index f478d58..0000000 --- a/node_modules/readable-stream/CONTRIBUTING.md +++ /dev/null @@ -1,38 +0,0 @@ -# Developer's Certificate of Origin 1.1 - -By making a contribution to this project, I certify that: - -* (a) The contribution was created in whole or in part by me and I - have the right to submit it under the open source license - indicated in the file; or - -* (b) The contribution is based upon previous work that, to the best - of my knowledge, is covered under an appropriate open source - license and I have the right under that license to submit that - work with modifications, whether created in whole or in part - by me, under the same open source license (unless I am - permitted to submit under a different license), as indicated - in the file; or - -* (c) The contribution was provided directly to me by some other - person who certified (a), (b) or (c) and I have not modified - it. - -* (d) I understand and agree that this project and the contribution - are public and that a record of the contribution (including all - personal information I submit with it, including my sign-off) is - maintained indefinitely and may be redistributed consistent with - this project or the open source license(s) involved. - -## Moderation Policy - -The [Node.js Moderation Policy] applies to this WG. - -## Code of Conduct - -The [Node.js Code of Conduct][] applies to this WG. - -[Node.js Code of Conduct]: -https://github.com/nodejs/node/blob/master/CODE_OF_CONDUCT.md -[Node.js Moderation Policy]: -https://github.com/nodejs/TSC/blob/master/Moderation-Policy.md diff --git a/node_modules/readable-stream/GOVERNANCE.md b/node_modules/readable-stream/GOVERNANCE.md deleted file mode 100644 index 16ffb93..0000000 --- a/node_modules/readable-stream/GOVERNANCE.md +++ /dev/null @@ -1,136 +0,0 @@ -### Streams Working Group - -The Node.js Streams is jointly governed by a Working Group -(WG) -that is responsible for high-level guidance of the project. - -The WG has final authority over this project including: - -* Technical direction -* Project governance and process (including this policy) -* Contribution policy -* GitHub repository hosting -* Conduct guidelines -* Maintaining the list of additional Collaborators - -For the current list of WG members, see the project -[README.md](./README.md#current-project-team-members). - -### Collaborators - -The readable-stream GitHub repository is -maintained by the WG and additional Collaborators who are added by the -WG on an ongoing basis. - -Individuals making significant and valuable contributions are made -Collaborators and given commit-access to the project. These -individuals are identified by the WG and their addition as -Collaborators is discussed during the WG meeting. - -_Note:_ If you make a significant contribution and are not considered -for commit-access log an issue or contact a WG member directly and it -will be brought up in the next WG meeting. - -Modifications of the contents of the readable-stream repository are -made on -a collaborative basis. Anybody with a GitHub account may propose a -modification via pull request and it will be considered by the project -Collaborators. All pull requests must be reviewed and accepted by a -Collaborator with sufficient expertise who is able to take full -responsibility for the change. In the case of pull requests proposed -by an existing Collaborator, an additional Collaborator is required -for sign-off. Consensus should be sought if additional Collaborators -participate and there is disagreement around a particular -modification. See _Consensus Seeking Process_ below for further detail -on the consensus model used for governance. - -Collaborators may opt to elevate significant or controversial -modifications, or modifications that have not found consensus to the -WG for discussion by assigning the ***WG-agenda*** tag to a pull -request or issue. The WG should serve as the final arbiter where -required. - -For the current list of Collaborators, see the project -[README.md](./README.md#members). - -### WG Membership - -WG seats are not time-limited. There is no fixed size of the WG. -However, the expected target is between 6 and 12, to ensure adequate -coverage of important areas of expertise, balanced with the ability to -make decisions efficiently. - -There is no specific set of requirements or qualifications for WG -membership beyond these rules. - -The WG may add additional members to the WG by unanimous consensus. - -A WG member may be removed from the WG by voluntary resignation, or by -unanimous consensus of all other WG members. - -Changes to WG membership should be posted in the agenda, and may be -suggested as any other agenda item (see "WG Meetings" below). - -If an addition or removal is proposed during a meeting, and the full -WG is not in attendance to participate, then the addition or removal -is added to the agenda for the subsequent meeting. This is to ensure -that all members are given the opportunity to participate in all -membership decisions. If a WG member is unable to attend a meeting -where a planned membership decision is being made, then their consent -is assumed. - -No more than 1/3 of the WG members may be affiliated with the same -employer. If removal or resignation of a WG member, or a change of -employment by a WG member, creates a situation where more than 1/3 of -the WG membership shares an employer, then the situation must be -immediately remedied by the resignation or removal of one or more WG -members affiliated with the over-represented employer(s). - -### WG Meetings - -The WG meets occasionally on a Google Hangout On Air. A designated moderator -approved by the WG runs the meeting. Each meeting should be -published to YouTube. - -Items are added to the WG agenda that are considered contentious or -are modifications of governance, contribution policy, WG membership, -or release process. - -The intention of the agenda is not to approve or review all patches; -that should happen continuously on GitHub and be handled by the larger -group of Collaborators. - -Any community member or contributor can ask that something be added to -the next meeting's agenda by logging a GitHub Issue. Any Collaborator, -WG member or the moderator can add the item to the agenda by adding -the ***WG-agenda*** tag to the issue. - -Prior to each WG meeting the moderator will share the Agenda with -members of the WG. WG members can add any items they like to the -agenda at the beginning of each meeting. The moderator and the WG -cannot veto or remove items. - -The WG may invite persons or representatives from certain projects to -participate in a non-voting capacity. - -The moderator is responsible for summarizing the discussion of each -agenda item and sends it as a pull request after the meeting. - -### Consensus Seeking Process - -The WG follows a -[Consensus -Seeking](http://en.wikipedia.org/wiki/Consensus-seeking_decision-making) -decision-making model. - -When an agenda item has appeared to reach a consensus the moderator -will ask "Does anyone object?" as a final call for dissent from the -consensus. - -If an agenda item cannot reach a consensus a WG member can call for -either a closing vote or a vote to table the issue to the next -meeting. The call for a vote must be seconded by a majority of the WG -or else the discussion will continue. Simple majority wins. - -Note that changes to WG membership require a majority consensus. See -"WG Membership" above. diff --git a/node_modules/readable-stream/LICENSE b/node_modules/readable-stream/LICENSE deleted file mode 100644 index 2873b3b..0000000 --- a/node_modules/readable-stream/LICENSE +++ /dev/null @@ -1,47 +0,0 @@ -Node.js is licensed for use as follows: - -""" -Copyright Node.js contributors. 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. -""" - -This license applies to parts of Node.js originating from the -https://github.com/joyent/node repository: - -""" -Copyright Joyent, Inc. and other Node contributors. 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. -""" diff --git a/node_modules/readable-stream/README.md b/node_modules/readable-stream/README.md deleted file mode 100644 index f1c5a93..0000000 --- a/node_modules/readable-stream/README.md +++ /dev/null @@ -1,58 +0,0 @@ -# readable-stream - -***Node-core v8.17.0 streams for userland*** [![Build Status](https://travis-ci.org/nodejs/readable-stream.svg?branch=master)](https://travis-ci.org/nodejs/readable-stream) - - -[![NPM](https://nodei.co/npm/readable-stream.png?downloads=true&downloadRank=true)](https://nodei.co/npm/readable-stream/) -[![NPM](https://nodei.co/npm-dl/readable-stream.png?&months=6&height=3)](https://nodei.co/npm/readable-stream/) - - -[![Sauce Test Status](https://saucelabs.com/browser-matrix/readable-stream.svg)](https://saucelabs.com/u/readable-stream) - -```bash -npm install --save readable-stream -``` - -***Node-core streams for userland*** - -This package is a mirror of the Streams2 and Streams3 implementations in -Node-core. - -Full documentation may be found on the [Node.js website](https://nodejs.org/dist/v8.17.0/docs/api/stream.html). - -If you want to guarantee a stable streams base, regardless of what version of -Node you, or the users of your libraries are using, use **readable-stream** *only* and avoid the *"stream"* module in Node-core, for background see [this blogpost](http://r.va.gg/2014/06/why-i-dont-use-nodes-core-stream-module.html). - -As of version 2.0.0 **readable-stream** uses semantic versioning. - -# Streams Working Group - -`readable-stream` is maintained by the Streams Working Group, which -oversees the development and maintenance of the Streams API within -Node.js. The responsibilities of the Streams Working Group include: - -* Addressing stream issues on the Node.js issue tracker. -* Authoring and editing stream documentation within the Node.js project. -* Reviewing changes to stream subclasses within the Node.js project. -* Redirecting changes to streams from the Node.js project to this - project. -* Assisting in the implementation of stream providers within Node.js. -* Recommending versions of `readable-stream` to be included in Node.js. -* Messaging about the future of streams to give the community advance - notice of changes. - - -## Team Members - -* **Chris Dickinson** ([@chrisdickinson](https://github.com/chrisdickinson)) <christopher.s.dickinson@gmail.com> - - Release GPG key: 9554F04D7259F04124DE6B476D5A82AC7E37093B -* **Calvin Metcalf** ([@calvinmetcalf](https://github.com/calvinmetcalf)) <calvin.metcalf@gmail.com> - - Release GPG key: F3EF5F62A87FC27A22E643F714CE4FF5015AA242 -* **Rod Vagg** ([@rvagg](https://github.com/rvagg)) <rod@vagg.org> - - Release GPG key: DD8F2338BAE7501E3DD5AC78C273792F7D83545D -* **Sam Newman** ([@sonewman](https://github.com/sonewman)) <newmansam@outlook.com> -* **Mathias Buus** ([@mafintosh](https://github.com/mafintosh)) <mathiasbuus@gmail.com> -* **Domenic Denicola** ([@domenic](https://github.com/domenic)) <d@domenic.me> -* **Matteo Collina** ([@mcollina](https://github.com/mcollina)) <matteo.collina@gmail.com> - - Release GPG key: 3ABC01543F22DD2239285CDD818674489FBC127E -* **Irina Shestak** ([@lrlna](https://github.com/lrlna)) <shestak.irina@gmail.com> diff --git a/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md b/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md deleted file mode 100644 index 83275f1..0000000 --- a/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md +++ /dev/null @@ -1,60 +0,0 @@ -# streams WG Meeting 2015-01-30 - -## Links - -* **Google Hangouts Video**: http://www.youtube.com/watch?v=I9nDOSGfwZg -* **GitHub Issue**: https://github.com/iojs/readable-stream/issues/106 -* **Original Minutes Google Doc**: https://docs.google.com/document/d/17aTgLnjMXIrfjgNaTUnHQO7m3xgzHR2VXBTmi03Qii4/ - -## Agenda - -Extracted from https://github.com/iojs/readable-stream/labels/wg-agenda prior to meeting. - -* adopt a charter [#105](https://github.com/iojs/readable-stream/issues/105) -* release and versioning strategy [#101](https://github.com/iojs/readable-stream/issues/101) -* simpler stream creation [#102](https://github.com/iojs/readable-stream/issues/102) -* proposal: deprecate implicit flowing of streams [#99](https://github.com/iojs/readable-stream/issues/99) - -## Minutes - -### adopt a charter - -* group: +1's all around - -### What versioning scheme should be adopted? -* group: +1’s 3.0.0 -* domenic+group: pulling in patches from other sources where appropriate -* mikeal: version independently, suggesting versions for io.js -* mikeal+domenic: work with TC to notify in advance of changes -simpler stream creation - -### streamline creation of streams -* sam: streamline creation of streams -* domenic: nice simple solution posted - but, we lose the opportunity to change the model - may not be backwards incompatible (double check keys) - - **action item:** domenic will check - -### remove implicit flowing of streams on(‘data’) -* add isFlowing / isPaused -* mikeal: worrying that we’re documenting polyfill methods – confuses users -* domenic: more reflective API is probably good, with warning labels for users -* new section for mad scientists (reflective stream access) -* calvin: name the “third state” -* mikeal: maybe borrow the name from whatwg? -* domenic: we’re missing the “third state” -* consensus: kind of difficult to name the third state -* mikeal: figure out differences in states / compat -* mathias: always flow on data – eliminates third state - * explore what it breaks - -**action items:** -* ask isaac for ability to list packages by what public io.js APIs they use (esp. Stream) -* ask rod/build for infrastructure -* **chris**: explore the “flow on data” approach -* add isPaused/isFlowing -* add new docs section -* move isPaused to that section - - diff --git a/node_modules/readable-stream/duplex-browser.js b/node_modules/readable-stream/duplex-browser.js deleted file mode 100644 index f8b2db8..0000000 --- a/node_modules/readable-stream/duplex-browser.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./lib/_stream_duplex.js'); diff --git a/node_modules/readable-stream/duplex.js b/node_modules/readable-stream/duplex.js deleted file mode 100644 index 46924cb..0000000 --- a/node_modules/readable-stream/duplex.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./readable').Duplex diff --git a/node_modules/readable-stream/lib/_stream_duplex.js b/node_modules/readable-stream/lib/_stream_duplex.js deleted file mode 100644 index 57003c3..0000000 --- a/node_modules/readable-stream/lib/_stream_duplex.js +++ /dev/null @@ -1,131 +0,0 @@ -// Copyright Joyent, Inc. and other Node 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. - -// a duplex stream is just a stream that is both readable and writable. -// Since JS doesn't have multiple prototypal inheritance, this class -// prototypally inherits from Readable, and then parasitically from -// Writable. - -'use strict'; - -/**/ - -var pna = require('process-nextick-args'); -/**/ - -/**/ -var objectKeys = Object.keys || function (obj) { - var keys = []; - for (var key in obj) { - keys.push(key); - }return keys; -}; -/**/ - -module.exports = Duplex; - -/**/ -var util = Object.create(require('core-util-is')); -util.inherits = require('inherits'); -/**/ - -var Readable = require('./_stream_readable'); -var Writable = require('./_stream_writable'); - -util.inherits(Duplex, Readable); - -{ - // avoid scope creep, the keys array can then be collected - var keys = objectKeys(Writable.prototype); - for (var v = 0; v < keys.length; v++) { - var method = keys[v]; - if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method]; - } -} - -function Duplex(options) { - if (!(this instanceof Duplex)) return new Duplex(options); - - Readable.call(this, options); - Writable.call(this, options); - - if (options && options.readable === false) this.readable = false; - - if (options && options.writable === false) this.writable = false; - - this.allowHalfOpen = true; - if (options && options.allowHalfOpen === false) this.allowHalfOpen = false; - - this.once('end', onend); -} - -Object.defineProperty(Duplex.prototype, 'writableHighWaterMark', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function () { - return this._writableState.highWaterMark; - } -}); - -// the no-half-open enforcer -function onend() { - // if we allow half-open state, or if the writable side ended, - // then we're ok. - if (this.allowHalfOpen || this._writableState.ended) return; - - // no more data can be written. - // But allow more writes to happen in this tick. - pna.nextTick(onEndNT, this); -} - -function onEndNT(self) { - self.end(); -} - -Object.defineProperty(Duplex.prototype, 'destroyed', { - get: function () { - if (this._readableState === undefined || this._writableState === undefined) { - return false; - } - return this._readableState.destroyed && this._writableState.destroyed; - }, - set: function (value) { - // we ignore the value if the stream - // has not been initialized yet - if (this._readableState === undefined || this._writableState === undefined) { - return; - } - - // backward compatibility, the user is explicitly - // managing destroyed - this._readableState.destroyed = value; - this._writableState.destroyed = value; - } -}); - -Duplex.prototype._destroy = function (err, cb) { - this.push(null); - this.end(); - - pna.nextTick(cb, err); -}; \ No newline at end of file diff --git a/node_modules/readable-stream/lib/_stream_passthrough.js b/node_modules/readable-stream/lib/_stream_passthrough.js deleted file mode 100644 index 612edb4..0000000 --- a/node_modules/readable-stream/lib/_stream_passthrough.js +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright Joyent, Inc. and other Node 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. - -// a passthrough stream. -// basically just the most minimal sort of Transform stream. -// Every written chunk gets output as-is. - -'use strict'; - -module.exports = PassThrough; - -var Transform = require('./_stream_transform'); - -/**/ -var util = Object.create(require('core-util-is')); -util.inherits = require('inherits'); -/**/ - -util.inherits(PassThrough, Transform); - -function PassThrough(options) { - if (!(this instanceof PassThrough)) return new PassThrough(options); - - Transform.call(this, options); -} - -PassThrough.prototype._transform = function (chunk, encoding, cb) { - cb(null, chunk); -}; \ No newline at end of file diff --git a/node_modules/readable-stream/lib/_stream_readable.js b/node_modules/readable-stream/lib/_stream_readable.js deleted file mode 100644 index 3af95cb..0000000 --- a/node_modules/readable-stream/lib/_stream_readable.js +++ /dev/null @@ -1,1019 +0,0 @@ -// Copyright Joyent, Inc. and other Node 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. - -'use strict'; - -/**/ - -var pna = require('process-nextick-args'); -/**/ - -module.exports = Readable; - -/**/ -var isArray = require('isarray'); -/**/ - -/**/ -var Duplex; -/**/ - -Readable.ReadableState = ReadableState; - -/**/ -var EE = require('events').EventEmitter; - -var EElistenerCount = function (emitter, type) { - return emitter.listeners(type).length; -}; -/**/ - -/**/ -var Stream = require('./internal/streams/stream'); -/**/ - -/**/ - -var Buffer = require('safe-buffer').Buffer; -var OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {}; -function _uint8ArrayToBuffer(chunk) { - return Buffer.from(chunk); -} -function _isUint8Array(obj) { - return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; -} - -/**/ - -/**/ -var util = Object.create(require('core-util-is')); -util.inherits = require('inherits'); -/**/ - -/**/ -var debugUtil = require('util'); -var debug = void 0; -if (debugUtil && debugUtil.debuglog) { - debug = debugUtil.debuglog('stream'); -} else { - debug = function () {}; -} -/**/ - -var BufferList = require('./internal/streams/BufferList'); -var destroyImpl = require('./internal/streams/destroy'); -var StringDecoder; - -util.inherits(Readable, Stream); - -var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume']; - -function prependListener(emitter, event, fn) { - // Sadly this is not cacheable as some libraries bundle their own - // event emitter implementation with them. - if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); - - // This is a hack to make sure that our error handler is attached before any - // userland ones. NEVER DO THIS. This is here only because this code needs - // to continue to work with older versions of Node.js that do not include - // the prependListener() method. The goal is to eventually remove this hack. - if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]]; -} - -function ReadableState(options, stream) { - Duplex = Duplex || require('./_stream_duplex'); - - options = options || {}; - - // Duplex streams are both readable and writable, but share - // the same options object. - // However, some cases require setting options to different - // values for the readable and the writable sides of the duplex stream. - // These options can be provided separately as readableXXX and writableXXX. - var isDuplex = stream instanceof Duplex; - - // object stream flag. Used to make read(n) ignore n and to - // make all the buffer merging and length checks go away - this.objectMode = !!options.objectMode; - - if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; - - // the point at which it stops calling _read() to fill the buffer - // Note: 0 is a valid value, means "don't call _read preemptively ever" - var hwm = options.highWaterMark; - var readableHwm = options.readableHighWaterMark; - var defaultHwm = this.objectMode ? 16 : 16 * 1024; - - if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm; - - // cast to ints. - this.highWaterMark = Math.floor(this.highWaterMark); - - // A linked list is used to store data chunks instead of an array because the - // linked list can remove elements from the beginning faster than - // array.shift() - this.buffer = new BufferList(); - this.length = 0; - this.pipes = null; - this.pipesCount = 0; - this.flowing = null; - this.ended = false; - this.endEmitted = false; - this.reading = false; - - // a flag to be able to tell if the event 'readable'/'data' is emitted - // immediately, or on a later tick. We set this to true at first, because - // any actions that shouldn't happen until "later" should generally also - // not happen before the first read call. - this.sync = true; - - // whenever we return null, then we set a flag to say - // that we're awaiting a 'readable' event emission. - this.needReadable = false; - this.emittedReadable = false; - this.readableListening = false; - this.resumeScheduled = false; - - // has it been destroyed - this.destroyed = false; - - // Crypto is kind of old and crusty. Historically, its default string - // encoding is 'binary' so we have to make this configurable. - // Everything else in the universe uses 'utf8', though. - this.defaultEncoding = options.defaultEncoding || 'utf8'; - - // the number of writers that are awaiting a drain event in .pipe()s - this.awaitDrain = 0; - - // if true, a maybeReadMore has been scheduled - this.readingMore = false; - - this.decoder = null; - this.encoding = null; - if (options.encoding) { - if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; - this.decoder = new StringDecoder(options.encoding); - this.encoding = options.encoding; - } -} - -function Readable(options) { - Duplex = Duplex || require('./_stream_duplex'); - - if (!(this instanceof Readable)) return new Readable(options); - - this._readableState = new ReadableState(options, this); - - // legacy - this.readable = true; - - if (options) { - if (typeof options.read === 'function') this._read = options.read; - - if (typeof options.destroy === 'function') this._destroy = options.destroy; - } - - Stream.call(this); -} - -Object.defineProperty(Readable.prototype, 'destroyed', { - get: function () { - if (this._readableState === undefined) { - return false; - } - return this._readableState.destroyed; - }, - set: function (value) { - // we ignore the value if the stream - // has not been initialized yet - if (!this._readableState) { - return; - } - - // backward compatibility, the user is explicitly - // managing destroyed - this._readableState.destroyed = value; - } -}); - -Readable.prototype.destroy = destroyImpl.destroy; -Readable.prototype._undestroy = destroyImpl.undestroy; -Readable.prototype._destroy = function (err, cb) { - this.push(null); - cb(err); -}; - -// Manually shove something into the read() buffer. -// This returns true if the highWaterMark has not been hit yet, -// similar to how Writable.write() returns true if you should -// write() some more. -Readable.prototype.push = function (chunk, encoding) { - var state = this._readableState; - var skipChunkCheck; - - if (!state.objectMode) { - if (typeof chunk === 'string') { - encoding = encoding || state.defaultEncoding; - if (encoding !== state.encoding) { - chunk = Buffer.from(chunk, encoding); - encoding = ''; - } - skipChunkCheck = true; - } - } else { - skipChunkCheck = true; - } - - return readableAddChunk(this, chunk, encoding, false, skipChunkCheck); -}; - -// Unshift should *always* be something directly out of read() -Readable.prototype.unshift = function (chunk) { - return readableAddChunk(this, chunk, null, true, false); -}; - -function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) { - var state = stream._readableState; - if (chunk === null) { - state.reading = false; - onEofChunk(stream, state); - } else { - var er; - if (!skipChunkCheck) er = chunkInvalid(state, chunk); - if (er) { - stream.emit('error', er); - } else if (state.objectMode || chunk && chunk.length > 0) { - if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) { - chunk = _uint8ArrayToBuffer(chunk); - } - - if (addToFront) { - if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true); - } else if (state.ended) { - stream.emit('error', new Error('stream.push() after EOF')); - } else { - state.reading = false; - if (state.decoder && !encoding) { - chunk = state.decoder.write(chunk); - if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state); - } else { - addChunk(stream, state, chunk, false); - } - } - } else if (!addToFront) { - state.reading = false; - } - } - - return needMoreData(state); -} - -function addChunk(stream, state, chunk, addToFront) { - if (state.flowing && state.length === 0 && !state.sync) { - stream.emit('data', chunk); - stream.read(0); - } else { - // update the buffer info. - state.length += state.objectMode ? 1 : chunk.length; - if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk); - - if (state.needReadable) emitReadable(stream); - } - maybeReadMore(stream, state); -} - -function chunkInvalid(state, chunk) { - var er; - if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { - er = new TypeError('Invalid non-string/buffer chunk'); - } - return er; -} - -// if it's past the high water mark, we can push in some more. -// Also, if we have no data yet, we can stand some -// more bytes. This is to work around cases where hwm=0, -// such as the repl. Also, if the push() triggered a -// readable event, and the user called read(largeNumber) such that -// needReadable was set, then we ought to push more, so that another -// 'readable' event will be triggered. -function needMoreData(state) { - return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0); -} - -Readable.prototype.isPaused = function () { - return this._readableState.flowing === false; -}; - -// backwards compatibility. -Readable.prototype.setEncoding = function (enc) { - if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; - this._readableState.decoder = new StringDecoder(enc); - this._readableState.encoding = enc; - return this; -}; - -// Don't raise the hwm > 8MB -var MAX_HWM = 0x800000; -function computeNewHighWaterMark(n) { - if (n >= MAX_HWM) { - n = MAX_HWM; - } else { - // Get the next highest power of 2 to prevent increasing hwm excessively in - // tiny amounts - n--; - n |= n >>> 1; - n |= n >>> 2; - n |= n >>> 4; - n |= n >>> 8; - n |= n >>> 16; - n++; - } - return n; -} - -// This function is designed to be inlinable, so please take care when making -// changes to the function body. -function howMuchToRead(n, state) { - if (n <= 0 || state.length === 0 && state.ended) return 0; - if (state.objectMode) return 1; - if (n !== n) { - // Only flow one buffer at a time - if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length; - } - // If we're asking for more than the current hwm, then raise the hwm. - if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n); - if (n <= state.length) return n; - // Don't have enough - if (!state.ended) { - state.needReadable = true; - return 0; - } - return state.length; -} - -// you can override either this method, or the async _read(n) below. -Readable.prototype.read = function (n) { - debug('read', n); - n = parseInt(n, 10); - var state = this._readableState; - var nOrig = n; - - if (n !== 0) state.emittedReadable = false; - - // if we're doing read(0) to trigger a readable event, but we - // already have a bunch of data in the buffer, then just trigger - // the 'readable' event and move on. - if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) { - debug('read: emitReadable', state.length, state.ended); - if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this); - return null; - } - - n = howMuchToRead(n, state); - - // if we've ended, and we're now clear, then finish it up. - if (n === 0 && state.ended) { - if (state.length === 0) endReadable(this); - return null; - } - - // All the actual chunk generation logic needs to be - // *below* the call to _read. The reason is that in certain - // synthetic stream cases, such as passthrough streams, _read - // may be a completely synchronous operation which may change - // the state of the read buffer, providing enough data when - // before there was *not* enough. - // - // So, the steps are: - // 1. Figure out what the state of things will be after we do - // a read from the buffer. - // - // 2. If that resulting state will trigger a _read, then call _read. - // Note that this may be asynchronous, or synchronous. Yes, it is - // deeply ugly to write APIs this way, but that still doesn't mean - // that the Readable class should behave improperly, as streams are - // designed to be sync/async agnostic. - // Take note if the _read call is sync or async (ie, if the read call - // has returned yet), so that we know whether or not it's safe to emit - // 'readable' etc. - // - // 3. Actually pull the requested chunks out of the buffer and return. - - // if we need a readable event, then we need to do some reading. - var doRead = state.needReadable; - debug('need readable', doRead); - - // if we currently have less than the highWaterMark, then also read some - if (state.length === 0 || state.length - n < state.highWaterMark) { - doRead = true; - debug('length less than watermark', doRead); - } - - // however, if we've ended, then there's no point, and if we're already - // reading, then it's unnecessary. - if (state.ended || state.reading) { - doRead = false; - debug('reading or ended', doRead); - } else if (doRead) { - debug('do read'); - state.reading = true; - state.sync = true; - // if the length is currently zero, then we *need* a readable event. - if (state.length === 0) state.needReadable = true; - // call internal read method - this._read(state.highWaterMark); - state.sync = false; - // If _read pushed data synchronously, then `reading` will be false, - // and we need to re-evaluate how much data we can return to the user. - if (!state.reading) n = howMuchToRead(nOrig, state); - } - - var ret; - if (n > 0) ret = fromList(n, state);else ret = null; - - if (ret === null) { - state.needReadable = true; - n = 0; - } else { - state.length -= n; - } - - if (state.length === 0) { - // If we have nothing in the buffer, then we want to know - // as soon as we *do* get something into the buffer. - if (!state.ended) state.needReadable = true; - - // If we tried to read() past the EOF, then emit end on the next tick. - if (nOrig !== n && state.ended) endReadable(this); - } - - if (ret !== null) this.emit('data', ret); - - return ret; -}; - -function onEofChunk(stream, state) { - if (state.ended) return; - if (state.decoder) { - var chunk = state.decoder.end(); - if (chunk && chunk.length) { - state.buffer.push(chunk); - state.length += state.objectMode ? 1 : chunk.length; - } - } - state.ended = true; - - // emit 'readable' now to make sure it gets picked up. - emitReadable(stream); -} - -// Don't emit readable right away in sync mode, because this can trigger -// another read() call => stack overflow. This way, it might trigger -// a nextTick recursion warning, but that's not so bad. -function emitReadable(stream) { - var state = stream._readableState; - state.needReadable = false; - if (!state.emittedReadable) { - debug('emitReadable', state.flowing); - state.emittedReadable = true; - if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream); - } -} - -function emitReadable_(stream) { - debug('emit readable'); - stream.emit('readable'); - flow(stream); -} - -// at this point, the user has presumably seen the 'readable' event, -// and called read() to consume some data. that may have triggered -// in turn another _read(n) call, in which case reading = true if -// it's in progress. -// However, if we're not ended, or reading, and the length < hwm, -// then go ahead and try to read some more preemptively. -function maybeReadMore(stream, state) { - if (!state.readingMore) { - state.readingMore = true; - pna.nextTick(maybeReadMore_, stream, state); - } -} - -function maybeReadMore_(stream, state) { - var len = state.length; - while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) { - debug('maybeReadMore read 0'); - stream.read(0); - if (len === state.length) - // didn't get any data, stop spinning. - break;else len = state.length; - } - state.readingMore = false; -} - -// abstract method. to be overridden in specific implementation classes. -// call cb(er, data) where data is <= n in length. -// for virtual (non-string, non-buffer) streams, "length" is somewhat -// arbitrary, and perhaps not very meaningful. -Readable.prototype._read = function (n) { - this.emit('error', new Error('_read() is not implemented')); -}; - -Readable.prototype.pipe = function (dest, pipeOpts) { - var src = this; - var state = this._readableState; - - switch (state.pipesCount) { - case 0: - state.pipes = dest; - break; - case 1: - state.pipes = [state.pipes, dest]; - break; - default: - state.pipes.push(dest); - break; - } - state.pipesCount += 1; - debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts); - - var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr; - - var endFn = doEnd ? onend : unpipe; - if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn); - - dest.on('unpipe', onunpipe); - function onunpipe(readable, unpipeInfo) { - debug('onunpipe'); - if (readable === src) { - if (unpipeInfo && unpipeInfo.hasUnpiped === false) { - unpipeInfo.hasUnpiped = true; - cleanup(); - } - } - } - - function onend() { - debug('onend'); - dest.end(); - } - - // when the dest drains, it reduces the awaitDrain counter - // on the source. This would be more elegant with a .once() - // handler in flow(), but adding and removing repeatedly is - // too slow. - var ondrain = pipeOnDrain(src); - dest.on('drain', ondrain); - - var cleanedUp = false; - function cleanup() { - debug('cleanup'); - // cleanup event handlers once the pipe is broken - dest.removeListener('close', onclose); - dest.removeListener('finish', onfinish); - dest.removeListener('drain', ondrain); - dest.removeListener('error', onerror); - dest.removeListener('unpipe', onunpipe); - src.removeListener('end', onend); - src.removeListener('end', unpipe); - src.removeListener('data', ondata); - - cleanedUp = true; - - // if the reader is waiting for a drain event from this - // specific writer, then it would cause it to never start - // flowing again. - // So, if this is awaiting a drain, then we just call it now. - // If we don't know, then assume that we are waiting for one. - if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain(); - } - - // If the user pushes more data while we're writing to dest then we'll end up - // in ondata again. However, we only want to increase awaitDrain once because - // dest will only emit one 'drain' event for the multiple writes. - // => Introduce a guard on increasing awaitDrain. - var increasedAwaitDrain = false; - src.on('data', ondata); - function ondata(chunk) { - debug('ondata'); - increasedAwaitDrain = false; - var ret = dest.write(chunk); - if (false === ret && !increasedAwaitDrain) { - // If the user unpiped during `dest.write()`, it is possible - // to get stuck in a permanently paused state if that write - // also returned false. - // => Check whether `dest` is still a piping destination. - if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) { - debug('false write response, pause', state.awaitDrain); - state.awaitDrain++; - increasedAwaitDrain = true; - } - src.pause(); - } - } - - // if the dest has an error, then stop piping into it. - // however, don't suppress the throwing behavior for this. - function onerror(er) { - debug('onerror', er); - unpipe(); - dest.removeListener('error', onerror); - if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er); - } - - // Make sure our error handler is attached before userland ones. - prependListener(dest, 'error', onerror); - - // Both close and finish should trigger unpipe, but only once. - function onclose() { - dest.removeListener('finish', onfinish); - unpipe(); - } - dest.once('close', onclose); - function onfinish() { - debug('onfinish'); - dest.removeListener('close', onclose); - unpipe(); - } - dest.once('finish', onfinish); - - function unpipe() { - debug('unpipe'); - src.unpipe(dest); - } - - // tell the dest that it's being piped to - dest.emit('pipe', src); - - // start the flow if it hasn't been started already. - if (!state.flowing) { - debug('pipe resume'); - src.resume(); - } - - return dest; -}; - -function pipeOnDrain(src) { - return function () { - var state = src._readableState; - debug('pipeOnDrain', state.awaitDrain); - if (state.awaitDrain) state.awaitDrain--; - if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) { - state.flowing = true; - flow(src); - } - }; -} - -Readable.prototype.unpipe = function (dest) { - var state = this._readableState; - var unpipeInfo = { hasUnpiped: false }; - - // if we're not piping anywhere, then do nothing. - if (state.pipesCount === 0) return this; - - // just one destination. most common case. - if (state.pipesCount === 1) { - // passed in one, but it's not the right one. - if (dest && dest !== state.pipes) return this; - - if (!dest) dest = state.pipes; - - // got a match. - state.pipes = null; - state.pipesCount = 0; - state.flowing = false; - if (dest) dest.emit('unpipe', this, unpipeInfo); - return this; - } - - // slow case. multiple pipe destinations. - - if (!dest) { - // remove all. - var dests = state.pipes; - var len = state.pipesCount; - state.pipes = null; - state.pipesCount = 0; - state.flowing = false; - - for (var i = 0; i < len; i++) { - dests[i].emit('unpipe', this, { hasUnpiped: false }); - }return this; - } - - // try to find the right one. - var index = indexOf(state.pipes, dest); - if (index === -1) return this; - - state.pipes.splice(index, 1); - state.pipesCount -= 1; - if (state.pipesCount === 1) state.pipes = state.pipes[0]; - - dest.emit('unpipe', this, unpipeInfo); - - return this; -}; - -// set up data events if they are asked for -// Ensure readable listeners eventually get something -Readable.prototype.on = function (ev, fn) { - var res = Stream.prototype.on.call(this, ev, fn); - - if (ev === 'data') { - // Start flowing on next tick if stream isn't explicitly paused - if (this._readableState.flowing !== false) this.resume(); - } else if (ev === 'readable') { - var state = this._readableState; - if (!state.endEmitted && !state.readableListening) { - state.readableListening = state.needReadable = true; - state.emittedReadable = false; - if (!state.reading) { - pna.nextTick(nReadingNextTick, this); - } else if (state.length) { - emitReadable(this); - } - } - } - - return res; -}; -Readable.prototype.addListener = Readable.prototype.on; - -function nReadingNextTick(self) { - debug('readable nexttick read 0'); - self.read(0); -} - -// pause() and resume() are remnants of the legacy readable stream API -// If the user uses them, then switch into old mode. -Readable.prototype.resume = function () { - var state = this._readableState; - if (!state.flowing) { - debug('resume'); - state.flowing = true; - resume(this, state); - } - return this; -}; - -function resume(stream, state) { - if (!state.resumeScheduled) { - state.resumeScheduled = true; - pna.nextTick(resume_, stream, state); - } -} - -function resume_(stream, state) { - if (!state.reading) { - debug('resume read 0'); - stream.read(0); - } - - state.resumeScheduled = false; - state.awaitDrain = 0; - stream.emit('resume'); - flow(stream); - if (state.flowing && !state.reading) stream.read(0); -} - -Readable.prototype.pause = function () { - debug('call pause flowing=%j', this._readableState.flowing); - if (false !== this._readableState.flowing) { - debug('pause'); - this._readableState.flowing = false; - this.emit('pause'); - } - return this; -}; - -function flow(stream) { - var state = stream._readableState; - debug('flow', state.flowing); - while (state.flowing && stream.read() !== null) {} -} - -// wrap an old-style stream as the async data source. -// This is *not* part of the readable stream interface. -// It is an ugly unfortunate mess of history. -Readable.prototype.wrap = function (stream) { - var _this = this; - - var state = this._readableState; - var paused = false; - - stream.on('end', function () { - debug('wrapped end'); - if (state.decoder && !state.ended) { - var chunk = state.decoder.end(); - if (chunk && chunk.length) _this.push(chunk); - } - - _this.push(null); - }); - - stream.on('data', function (chunk) { - debug('wrapped data'); - if (state.decoder) chunk = state.decoder.write(chunk); - - // don't skip over falsy values in objectMode - if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return; - - var ret = _this.push(chunk); - if (!ret) { - paused = true; - stream.pause(); - } - }); - - // proxy all the other methods. - // important when wrapping filters and duplexes. - for (var i in stream) { - if (this[i] === undefined && typeof stream[i] === 'function') { - this[i] = function (method) { - return function () { - return stream[method].apply(stream, arguments); - }; - }(i); - } - } - - // proxy certain important events. - for (var n = 0; n < kProxyEvents.length; n++) { - stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n])); - } - - // when we try to consume some more bytes, simply unpause the - // underlying stream. - this._read = function (n) { - debug('wrapped _read', n); - if (paused) { - paused = false; - stream.resume(); - } - }; - - return this; -}; - -Object.defineProperty(Readable.prototype, 'readableHighWaterMark', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function () { - return this._readableState.highWaterMark; - } -}); - -// exposed for testing purposes only. -Readable._fromList = fromList; - -// Pluck off n bytes from an array of buffers. -// Length is the combined lengths of all the buffers in the list. -// This function is designed to be inlinable, so please take care when making -// changes to the function body. -function fromList(n, state) { - // nothing buffered - if (state.length === 0) return null; - - var ret; - if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) { - // read it all, truncate the list - if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length); - state.buffer.clear(); - } else { - // read part of list - ret = fromListPartial(n, state.buffer, state.decoder); - } - - return ret; -} - -// Extracts only enough buffered data to satisfy the amount requested. -// This function is designed to be inlinable, so please take care when making -// changes to the function body. -function fromListPartial(n, list, hasStrings) { - var ret; - if (n < list.head.data.length) { - // slice is the same for buffers and strings - ret = list.head.data.slice(0, n); - list.head.data = list.head.data.slice(n); - } else if (n === list.head.data.length) { - // first chunk is a perfect match - ret = list.shift(); - } else { - // result spans more than one buffer - ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list); - } - return ret; -} - -// Copies a specified amount of characters from the list of buffered data -// chunks. -// This function is designed to be inlinable, so please take care when making -// changes to the function body. -function copyFromBufferString(n, list) { - var p = list.head; - var c = 1; - var ret = p.data; - n -= ret.length; - while (p = p.next) { - var str = p.data; - var nb = n > str.length ? str.length : n; - if (nb === str.length) ret += str;else ret += str.slice(0, n); - n -= nb; - if (n === 0) { - if (nb === str.length) { - ++c; - if (p.next) list.head = p.next;else list.head = list.tail = null; - } else { - list.head = p; - p.data = str.slice(nb); - } - break; - } - ++c; - } - list.length -= c; - return ret; -} - -// Copies a specified amount of bytes from the list of buffered data chunks. -// This function is designed to be inlinable, so please take care when making -// changes to the function body. -function copyFromBuffer(n, list) { - var ret = Buffer.allocUnsafe(n); - var p = list.head; - var c = 1; - p.data.copy(ret); - n -= p.data.length; - while (p = p.next) { - var buf = p.data; - var nb = n > buf.length ? buf.length : n; - buf.copy(ret, ret.length - n, 0, nb); - n -= nb; - if (n === 0) { - if (nb === buf.length) { - ++c; - if (p.next) list.head = p.next;else list.head = list.tail = null; - } else { - list.head = p; - p.data = buf.slice(nb); - } - break; - } - ++c; - } - list.length -= c; - return ret; -} - -function endReadable(stream) { - var state = stream._readableState; - - // If we get here before consuming all the bytes, then that is a - // bug in node. Should never happen. - if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream'); - - if (!state.endEmitted) { - state.ended = true; - pna.nextTick(endReadableNT, state, stream); - } -} - -function endReadableNT(state, stream) { - // Check that we didn't get one last unshift. - if (!state.endEmitted && state.length === 0) { - state.endEmitted = true; - stream.readable = false; - stream.emit('end'); - } -} - -function indexOf(xs, x) { - for (var i = 0, l = xs.length; i < l; i++) { - if (xs[i] === x) return i; - } - return -1; -} \ No newline at end of file diff --git a/node_modules/readable-stream/lib/_stream_transform.js b/node_modules/readable-stream/lib/_stream_transform.js deleted file mode 100644 index fcfc105..0000000 --- a/node_modules/readable-stream/lib/_stream_transform.js +++ /dev/null @@ -1,214 +0,0 @@ -// Copyright Joyent, Inc. and other Node 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. - -// a transform stream is a readable/writable stream where you do -// something with the data. Sometimes it's called a "filter", -// but that's not a great name for it, since that implies a thing where -// some bits pass through, and others are simply ignored. (That would -// be a valid example of a transform, of course.) -// -// While the output is causally related to the input, it's not a -// necessarily symmetric or synchronous transformation. For example, -// a zlib stream might take multiple plain-text writes(), and then -// emit a single compressed chunk some time in the future. -// -// Here's how this works: -// -// The Transform stream has all the aspects of the readable and writable -// stream classes. When you write(chunk), that calls _write(chunk,cb) -// internally, and returns false if there's a lot of pending writes -// buffered up. When you call read(), that calls _read(n) until -// there's enough pending readable data buffered up. -// -// In a transform stream, the written data is placed in a buffer. When -// _read(n) is called, it transforms the queued up data, calling the -// buffered _write cb's as it consumes chunks. If consuming a single -// written chunk would result in multiple output chunks, then the first -// outputted bit calls the readcb, and subsequent chunks just go into -// the read buffer, and will cause it to emit 'readable' if necessary. -// -// This way, back-pressure is actually determined by the reading side, -// since _read has to be called to start processing a new chunk. However, -// a pathological inflate type of transform can cause excessive buffering -// here. For example, imagine a stream where every byte of input is -// interpreted as an integer from 0-255, and then results in that many -// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in -// 1kb of data being output. In this case, you could write a very small -// amount of input, and end up with a very large amount of output. In -// such a pathological inflating mechanism, there'd be no way to tell -// the system to stop doing the transform. A single 4MB write could -// cause the system to run out of memory. -// -// However, even in such a pathological case, only a single written chunk -// would be consumed, and then the rest would wait (un-transformed) until -// the results of the previous transformed chunk were consumed. - -'use strict'; - -module.exports = Transform; - -var Duplex = require('./_stream_duplex'); - -/**/ -var util = Object.create(require('core-util-is')); -util.inherits = require('inherits'); -/**/ - -util.inherits(Transform, Duplex); - -function afterTransform(er, data) { - var ts = this._transformState; - ts.transforming = false; - - var cb = ts.writecb; - - if (!cb) { - return this.emit('error', new Error('write callback called multiple times')); - } - - ts.writechunk = null; - ts.writecb = null; - - if (data != null) // single equals check for both `null` and `undefined` - this.push(data); - - cb(er); - - var rs = this._readableState; - rs.reading = false; - if (rs.needReadable || rs.length < rs.highWaterMark) { - this._read(rs.highWaterMark); - } -} - -function Transform(options) { - if (!(this instanceof Transform)) return new Transform(options); - - Duplex.call(this, options); - - this._transformState = { - afterTransform: afterTransform.bind(this), - needTransform: false, - transforming: false, - writecb: null, - writechunk: null, - writeencoding: null - }; - - // start out asking for a readable event once data is transformed. - this._readableState.needReadable = true; - - // we have implemented the _read method, and done the other things - // that Readable wants before the first _read call, so unset the - // sync guard flag. - this._readableState.sync = false; - - if (options) { - if (typeof options.transform === 'function') this._transform = options.transform; - - if (typeof options.flush === 'function') this._flush = options.flush; - } - - // When the writable side finishes, then flush out anything remaining. - this.on('prefinish', prefinish); -} - -function prefinish() { - var _this = this; - - if (typeof this._flush === 'function') { - this._flush(function (er, data) { - done(_this, er, data); - }); - } else { - done(this, null, null); - } -} - -Transform.prototype.push = function (chunk, encoding) { - this._transformState.needTransform = false; - return Duplex.prototype.push.call(this, chunk, encoding); -}; - -// This is the part where you do stuff! -// override this function in implementation classes. -// 'chunk' is an input chunk. -// -// Call `push(newChunk)` to pass along transformed output -// to the readable side. You may call 'push' zero or more times. -// -// Call `cb(err)` when you are done with this chunk. If you pass -// an error, then that'll put the hurt on the whole operation. If you -// never call cb(), then you'll never get another chunk. -Transform.prototype._transform = function (chunk, encoding, cb) { - throw new Error('_transform() is not implemented'); -}; - -Transform.prototype._write = function (chunk, encoding, cb) { - var ts = this._transformState; - ts.writecb = cb; - ts.writechunk = chunk; - ts.writeencoding = encoding; - if (!ts.transforming) { - var rs = this._readableState; - if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark); - } -}; - -// Doesn't matter what the args are here. -// _transform does all the work. -// That we got here means that the readable side wants more data. -Transform.prototype._read = function (n) { - var ts = this._transformState; - - if (ts.writechunk !== null && ts.writecb && !ts.transforming) { - ts.transforming = true; - this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform); - } else { - // mark that we need a transform, so that any data that comes in - // will get processed, now that we've asked for it. - ts.needTransform = true; - } -}; - -Transform.prototype._destroy = function (err, cb) { - var _this2 = this; - - Duplex.prototype._destroy.call(this, err, function (err2) { - cb(err2); - _this2.emit('close'); - }); -}; - -function done(stream, er, data) { - if (er) return stream.emit('error', er); - - if (data != null) // single equals check for both `null` and `undefined` - stream.push(data); - - // if there's nothing in the write buffer, then that means - // that nothing more will ever be provided - if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0'); - - if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming'); - - return stream.push(null); -} \ No newline at end of file diff --git a/node_modules/readable-stream/lib/_stream_writable.js b/node_modules/readable-stream/lib/_stream_writable.js deleted file mode 100644 index e1e897f..0000000 --- a/node_modules/readable-stream/lib/_stream_writable.js +++ /dev/null @@ -1,685 +0,0 @@ -// Copyright Joyent, Inc. and other Node 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. - -// A bit simpler than readable streams. -// Implement an async ._write(chunk, encoding, cb), and it'll handle all -// the drain event emission and buffering. - -'use strict'; - -/**/ - -var pna = require('process-nextick-args'); -/**/ - -module.exports = Writable; - -/* */ -function WriteReq(chunk, encoding, cb) { - this.chunk = chunk; - this.encoding = encoding; - this.callback = cb; - this.next = null; -} - -// It seems a linked list but it is not -// there will be only 2 of these for each stream -function CorkedRequest(state) { - var _this = this; - - this.next = null; - this.entry = null; - this.finish = function () { - onCorkedFinish(_this, state); - }; -} -/* */ - -/**/ -var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick; -/**/ - -/**/ -var Duplex; -/**/ - -Writable.WritableState = WritableState; - -/**/ -var util = Object.create(require('core-util-is')); -util.inherits = require('inherits'); -/**/ - -/**/ -var internalUtil = { - deprecate: require('util-deprecate') -}; -/**/ - -/**/ -var Stream = require('./internal/streams/stream'); -/**/ - -/**/ - -var Buffer = require('safe-buffer').Buffer; -var OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {}; -function _uint8ArrayToBuffer(chunk) { - return Buffer.from(chunk); -} -function _isUint8Array(obj) { - return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; -} - -/**/ - -var destroyImpl = require('./internal/streams/destroy'); - -util.inherits(Writable, Stream); - -function nop() {} - -function WritableState(options, stream) { - Duplex = Duplex || require('./_stream_duplex'); - - options = options || {}; - - // Duplex streams are both readable and writable, but share - // the same options object. - // However, some cases require setting options to different - // values for the readable and the writable sides of the duplex stream. - // These options can be provided separately as readableXXX and writableXXX. - var isDuplex = stream instanceof Duplex; - - // object stream flag to indicate whether or not this stream - // contains buffers or objects. - this.objectMode = !!options.objectMode; - - if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; - - // the point at which write() starts returning false - // Note: 0 is a valid value, means that we always return false if - // the entire buffer is not flushed immediately on write() - var hwm = options.highWaterMark; - var writableHwm = options.writableHighWaterMark; - var defaultHwm = this.objectMode ? 16 : 16 * 1024; - - if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm; - - // cast to ints. - this.highWaterMark = Math.floor(this.highWaterMark); - - // if _final has been called - this.finalCalled = false; - - // drain event flag. - this.needDrain = false; - // at the start of calling end() - this.ending = false; - // when end() has been called, and returned - this.ended = false; - // when 'finish' is emitted - this.finished = false; - - // has it been destroyed - this.destroyed = false; - - // should we decode strings into buffers before passing to _write? - // this is here so that some node-core streams can optimize string - // handling at a lower level. - var noDecode = options.decodeStrings === false; - this.decodeStrings = !noDecode; - - // Crypto is kind of old and crusty. Historically, its default string - // encoding is 'binary' so we have to make this configurable. - // Everything else in the universe uses 'utf8', though. - this.defaultEncoding = options.defaultEncoding || 'utf8'; - - // not an actual buffer we keep track of, but a measurement - // of how much we're waiting to get pushed to some underlying - // socket or file. - this.length = 0; - - // a flag to see when we're in the middle of a write. - this.writing = false; - - // when true all writes will be buffered until .uncork() call - this.corked = 0; - - // a flag to be able to tell if the onwrite cb is called immediately, - // or on a later tick. We set this to true at first, because any - // actions that shouldn't happen until "later" should generally also - // not happen before the first write call. - this.sync = true; - - // a flag to know if we're processing previously buffered items, which - // may call the _write() callback in the same tick, so that we don't - // end up in an overlapped onwrite situation. - this.bufferProcessing = false; - - // the callback that's passed to _write(chunk,cb) - this.onwrite = function (er) { - onwrite(stream, er); - }; - - // the callback that the user supplies to write(chunk,encoding,cb) - this.writecb = null; - - // the amount that is being written when _write is called. - this.writelen = 0; - - this.bufferedRequest = null; - this.lastBufferedRequest = null; - - // number of pending user-supplied write callbacks - // this must be 0 before 'finish' can be emitted - this.pendingcb = 0; - - // emit prefinish if the only thing we're waiting for is _write cbs - // This is relevant for synchronous Transform streams - this.prefinished = false; - - // True if the error was already emitted and should not be thrown again - this.errorEmitted = false; - - // count buffered requests - this.bufferedRequestCount = 0; - - // allocate the first CorkedRequest, there is always - // one allocated and free to use, and we maintain at most two - this.corkedRequestsFree = new CorkedRequest(this); -} - -WritableState.prototype.getBuffer = function getBuffer() { - var current = this.bufferedRequest; - var out = []; - while (current) { - out.push(current); - current = current.next; - } - return out; -}; - -(function () { - try { - Object.defineProperty(WritableState.prototype, 'buffer', { - get: internalUtil.deprecate(function () { - return this.getBuffer(); - }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003') - }); - } catch (_) {} -})(); - -// Test _writableState for inheritance to account for Duplex streams, -// whose prototype chain only points to Readable. -var realHasInstance; -if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') { - realHasInstance = Function.prototype[Symbol.hasInstance]; - Object.defineProperty(Writable, Symbol.hasInstance, { - value: function (object) { - if (realHasInstance.call(this, object)) return true; - if (this !== Writable) return false; - - return object && object._writableState instanceof WritableState; - } - }); -} else { - realHasInstance = function (object) { - return object instanceof this; - }; -} - -function Writable(options) { - Duplex = Duplex || require('./_stream_duplex'); - - // Writable ctor is applied to Duplexes, too. - // `realHasInstance` is necessary because using plain `instanceof` - // would return false, as no `_writableState` property is attached. - - // Trying to use the custom `instanceof` for Writable here will also break the - // Node.js LazyTransform implementation, which has a non-trivial getter for - // `_writableState` that would lead to infinite recursion. - if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) { - return new Writable(options); - } - - this._writableState = new WritableState(options, this); - - // legacy. - this.writable = true; - - if (options) { - if (typeof options.write === 'function') this._write = options.write; - - if (typeof options.writev === 'function') this._writev = options.writev; - - if (typeof options.destroy === 'function') this._destroy = options.destroy; - - if (typeof options.final === 'function') this._final = options.final; - } - - Stream.call(this); -} - -// Otherwise people can pipe Writable streams, which is just wrong. -Writable.prototype.pipe = function () { - this.emit('error', new Error('Cannot pipe, not readable')); -}; - -function writeAfterEnd(stream, cb) { - var er = new Error('write after end'); - // TODO: defer error events consistently everywhere, not just the cb - stream.emit('error', er); - pna.nextTick(cb, er); -} - -// Checks that a user-supplied chunk is valid, especially for the particular -// mode the stream is in. Currently this means that `null` is never accepted -// and undefined/non-string values are only allowed in object mode. -function validChunk(stream, state, chunk, cb) { - var valid = true; - var er = false; - - if (chunk === null) { - er = new TypeError('May not write null values to stream'); - } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { - er = new TypeError('Invalid non-string/buffer chunk'); - } - if (er) { - stream.emit('error', er); - pna.nextTick(cb, er); - valid = false; - } - return valid; -} - -Writable.prototype.write = function (chunk, encoding, cb) { - var state = this._writableState; - var ret = false; - var isBuf = !state.objectMode && _isUint8Array(chunk); - - if (isBuf && !Buffer.isBuffer(chunk)) { - chunk = _uint8ArrayToBuffer(chunk); - } - - if (typeof encoding === 'function') { - cb = encoding; - encoding = null; - } - - if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding; - - if (typeof cb !== 'function') cb = nop; - - if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) { - state.pendingcb++; - ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb); - } - - return ret; -}; - -Writable.prototype.cork = function () { - var state = this._writableState; - - state.corked++; -}; - -Writable.prototype.uncork = function () { - var state = this._writableState; - - if (state.corked) { - state.corked--; - - if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state); - } -}; - -Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) { - // node::ParseEncoding() requires lower case. - if (typeof encoding === 'string') encoding = encoding.toLowerCase(); - if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding); - this._writableState.defaultEncoding = encoding; - return this; -}; - -function decodeChunk(state, chunk, encoding) { - if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') { - chunk = Buffer.from(chunk, encoding); - } - return chunk; -} - -Object.defineProperty(Writable.prototype, 'writableHighWaterMark', { - // making it explicit this property is not enumerable - // because otherwise some prototype manipulation in - // userland will fail - enumerable: false, - get: function () { - return this._writableState.highWaterMark; - } -}); - -// if we're already writing something, then just put this -// in the queue, and wait our turn. Otherwise, call _write -// If we return false, then we need a drain event, so set that flag. -function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) { - if (!isBuf) { - var newChunk = decodeChunk(state, chunk, encoding); - if (chunk !== newChunk) { - isBuf = true; - encoding = 'buffer'; - chunk = newChunk; - } - } - var len = state.objectMode ? 1 : chunk.length; - - state.length += len; - - var ret = state.length < state.highWaterMark; - // we must ensure that previous needDrain will not be reset to false. - if (!ret) state.needDrain = true; - - if (state.writing || state.corked) { - var last = state.lastBufferedRequest; - state.lastBufferedRequest = { - chunk: chunk, - encoding: encoding, - isBuf: isBuf, - callback: cb, - next: null - }; - if (last) { - last.next = state.lastBufferedRequest; - } else { - state.bufferedRequest = state.lastBufferedRequest; - } - state.bufferedRequestCount += 1; - } else { - doWrite(stream, state, false, len, chunk, encoding, cb); - } - - return ret; -} - -function doWrite(stream, state, writev, len, chunk, encoding, cb) { - state.writelen = len; - state.writecb = cb; - state.writing = true; - state.sync = true; - if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite); - state.sync = false; -} - -function onwriteError(stream, state, sync, er, cb) { - --state.pendingcb; - - if (sync) { - // defer the callback if we are being called synchronously - // to avoid piling up things on the stack - pna.nextTick(cb, er); - // this can emit finish, and it will always happen - // after error - pna.nextTick(finishMaybe, stream, state); - stream._writableState.errorEmitted = true; - stream.emit('error', er); - } else { - // the caller expect this to happen before if - // it is async - cb(er); - stream._writableState.errorEmitted = true; - stream.emit('error', er); - // this can emit finish, but finish must - // always follow error - finishMaybe(stream, state); - } -} - -function onwriteStateUpdate(state) { - state.writing = false; - state.writecb = null; - state.length -= state.writelen; - state.writelen = 0; -} - -function onwrite(stream, er) { - var state = stream._writableState; - var sync = state.sync; - var cb = state.writecb; - - onwriteStateUpdate(state); - - if (er) onwriteError(stream, state, sync, er, cb);else { - // Check if we're actually ready to finish, but don't emit yet - var finished = needFinish(state); - - if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) { - clearBuffer(stream, state); - } - - if (sync) { - /**/ - asyncWrite(afterWrite, stream, state, finished, cb); - /**/ - } else { - afterWrite(stream, state, finished, cb); - } - } -} - -function afterWrite(stream, state, finished, cb) { - if (!finished) onwriteDrain(stream, state); - state.pendingcb--; - cb(); - finishMaybe(stream, state); -} - -// Must force callback to be called on nextTick, so that we don't -// emit 'drain' before the write() consumer gets the 'false' return -// value, and has a chance to attach a 'drain' listener. -function onwriteDrain(stream, state) { - if (state.length === 0 && state.needDrain) { - state.needDrain = false; - stream.emit('drain'); - } -} - -// if there's something in the buffer waiting, then process it -function clearBuffer(stream, state) { - state.bufferProcessing = true; - var entry = state.bufferedRequest; - - if (stream._writev && entry && entry.next) { - // Fast case, write everything using _writev() - var l = state.bufferedRequestCount; - var buffer = new Array(l); - var holder = state.corkedRequestsFree; - holder.entry = entry; - - var count = 0; - var allBuffers = true; - while (entry) { - buffer[count] = entry; - if (!entry.isBuf) allBuffers = false; - entry = entry.next; - count += 1; - } - buffer.allBuffers = allBuffers; - - doWrite(stream, state, true, state.length, buffer, '', holder.finish); - - // doWrite is almost always async, defer these to save a bit of time - // as the hot path ends with doWrite - state.pendingcb++; - state.lastBufferedRequest = null; - if (holder.next) { - state.corkedRequestsFree = holder.next; - holder.next = null; - } else { - state.corkedRequestsFree = new CorkedRequest(state); - } - state.bufferedRequestCount = 0; - } else { - // Slow case, write chunks one-by-one - while (entry) { - var chunk = entry.chunk; - var encoding = entry.encoding; - var cb = entry.callback; - var len = state.objectMode ? 1 : chunk.length; - - doWrite(stream, state, false, len, chunk, encoding, cb); - entry = entry.next; - state.bufferedRequestCount--; - // if we didn't call the onwrite immediately, then - // it means that we need to wait until it does. - // also, that means that the chunk and cb are currently - // being processed, so move the buffer counter past them. - if (state.writing) { - break; - } - } - - if (entry === null) state.lastBufferedRequest = null; - } - - state.bufferedRequest = entry; - state.bufferProcessing = false; -} - -Writable.prototype._write = function (chunk, encoding, cb) { - cb(new Error('_write() is not implemented')); -}; - -Writable.prototype._writev = null; - -Writable.prototype.end = function (chunk, encoding, cb) { - var state = this._writableState; - - if (typeof chunk === 'function') { - cb = chunk; - chunk = null; - encoding = null; - } else if (typeof encoding === 'function') { - cb = encoding; - encoding = null; - } - - if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); - - // .end() fully uncorks - if (state.corked) { - state.corked = 1; - this.uncork(); - } - - // ignore unnecessary end() calls. - if (!state.ending) endWritable(this, state, cb); -}; - -function needFinish(state) { - return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing; -} -function callFinal(stream, state) { - stream._final(function (err) { - state.pendingcb--; - if (err) { - stream.emit('error', err); - } - state.prefinished = true; - stream.emit('prefinish'); - finishMaybe(stream, state); - }); -} -function prefinish(stream, state) { - if (!state.prefinished && !state.finalCalled) { - if (typeof stream._final === 'function') { - state.pendingcb++; - state.finalCalled = true; - pna.nextTick(callFinal, stream, state); - } else { - state.prefinished = true; - stream.emit('prefinish'); - } - } -} - -function finishMaybe(stream, state) { - var need = needFinish(state); - if (need) { - prefinish(stream, state); - if (state.pendingcb === 0) { - state.finished = true; - stream.emit('finish'); - } - } - return need; -} - -function endWritable(stream, state, cb) { - state.ending = true; - finishMaybe(stream, state); - if (cb) { - if (state.finished) pna.nextTick(cb);else stream.once('finish', cb); - } - state.ended = true; - stream.writable = false; -} - -function onCorkedFinish(corkReq, state, err) { - var entry = corkReq.entry; - corkReq.entry = null; - while (entry) { - var cb = entry.callback; - state.pendingcb--; - cb(err); - entry = entry.next; - } - - // reuse the free corkReq. - state.corkedRequestsFree.next = corkReq; -} - -Object.defineProperty(Writable.prototype, 'destroyed', { - get: function () { - if (this._writableState === undefined) { - return false; - } - return this._writableState.destroyed; - }, - set: function (value) { - // we ignore the value if the stream - // has not been initialized yet - if (!this._writableState) { - return; - } - - // backward compatibility, the user is explicitly - // managing destroyed - this._writableState.destroyed = value; - } -}); - -Writable.prototype.destroy = destroyImpl.destroy; -Writable.prototype._undestroy = destroyImpl.undestroy; -Writable.prototype._destroy = function (err, cb) { - this.end(); - cb(err); -}; \ No newline at end of file diff --git a/node_modules/readable-stream/lib/internal/streams/BufferList.js b/node_modules/readable-stream/lib/internal/streams/BufferList.js deleted file mode 100644 index 5e08097..0000000 --- a/node_modules/readable-stream/lib/internal/streams/BufferList.js +++ /dev/null @@ -1,78 +0,0 @@ -'use strict'; - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var Buffer = require('safe-buffer').Buffer; -var util = require('util'); - -function copyBuffer(src, target, offset) { - src.copy(target, offset); -} - -module.exports = function () { - function BufferList() { - _classCallCheck(this, BufferList); - - this.head = null; - this.tail = null; - this.length = 0; - } - - BufferList.prototype.push = function push(v) { - var entry = { data: v, next: null }; - if (this.length > 0) this.tail.next = entry;else this.head = entry; - this.tail = entry; - ++this.length; - }; - - BufferList.prototype.unshift = function unshift(v) { - var entry = { data: v, next: this.head }; - if (this.length === 0) this.tail = entry; - this.head = entry; - ++this.length; - }; - - BufferList.prototype.shift = function shift() { - if (this.length === 0) return; - var ret = this.head.data; - if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next; - --this.length; - return ret; - }; - - BufferList.prototype.clear = function clear() { - this.head = this.tail = null; - this.length = 0; - }; - - BufferList.prototype.join = function join(s) { - if (this.length === 0) return ''; - var p = this.head; - var ret = '' + p.data; - while (p = p.next) { - ret += s + p.data; - }return ret; - }; - - BufferList.prototype.concat = function concat(n) { - if (this.length === 0) return Buffer.alloc(0); - var ret = Buffer.allocUnsafe(n >>> 0); - var p = this.head; - var i = 0; - while (p) { - copyBuffer(p.data, ret, i); - i += p.data.length; - p = p.next; - } - return ret; - }; - - return BufferList; -}(); - -if (util && util.inspect && util.inspect.custom) { - module.exports.prototype[util.inspect.custom] = function () { - var obj = util.inspect({ length: this.length }); - return this.constructor.name + ' ' + obj; - }; -} \ No newline at end of file diff --git a/node_modules/readable-stream/lib/internal/streams/destroy.js b/node_modules/readable-stream/lib/internal/streams/destroy.js deleted file mode 100644 index 85a8214..0000000 --- a/node_modules/readable-stream/lib/internal/streams/destroy.js +++ /dev/null @@ -1,84 +0,0 @@ -'use strict'; - -/**/ - -var pna = require('process-nextick-args'); -/**/ - -// undocumented cb() API, needed for core, not for public API -function destroy(err, cb) { - var _this = this; - - var readableDestroyed = this._readableState && this._readableState.destroyed; - var writableDestroyed = this._writableState && this._writableState.destroyed; - - if (readableDestroyed || writableDestroyed) { - if (cb) { - cb(err); - } else if (err) { - if (!this._writableState) { - pna.nextTick(emitErrorNT, this, err); - } else if (!this._writableState.errorEmitted) { - this._writableState.errorEmitted = true; - pna.nextTick(emitErrorNT, this, err); - } - } - - return this; - } - - // we set destroyed to true before firing error callbacks in order - // to make it re-entrance safe in case destroy() is called within callbacks - - if (this._readableState) { - this._readableState.destroyed = true; - } - - // if this is a duplex stream mark the writable part as destroyed as well - if (this._writableState) { - this._writableState.destroyed = true; - } - - this._destroy(err || null, function (err) { - if (!cb && err) { - if (!_this._writableState) { - pna.nextTick(emitErrorNT, _this, err); - } else if (!_this._writableState.errorEmitted) { - _this._writableState.errorEmitted = true; - pna.nextTick(emitErrorNT, _this, err); - } - } else if (cb) { - cb(err); - } - }); - - return this; -} - -function undestroy() { - if (this._readableState) { - this._readableState.destroyed = false; - this._readableState.reading = false; - this._readableState.ended = false; - this._readableState.endEmitted = false; - } - - if (this._writableState) { - this._writableState.destroyed = false; - this._writableState.ended = false; - this._writableState.ending = false; - this._writableState.finalCalled = false; - this._writableState.prefinished = false; - this._writableState.finished = false; - this._writableState.errorEmitted = false; - } -} - -function emitErrorNT(self, err) { - self.emit('error', err); -} - -module.exports = { - destroy: destroy, - undestroy: undestroy -}; \ No newline at end of file diff --git a/node_modules/readable-stream/lib/internal/streams/stream-browser.js b/node_modules/readable-stream/lib/internal/streams/stream-browser.js deleted file mode 100644 index 9332a3f..0000000 --- a/node_modules/readable-stream/lib/internal/streams/stream-browser.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('events').EventEmitter; diff --git a/node_modules/readable-stream/lib/internal/streams/stream.js b/node_modules/readable-stream/lib/internal/streams/stream.js deleted file mode 100644 index ce2ad5b..0000000 --- a/node_modules/readable-stream/lib/internal/streams/stream.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('stream'); diff --git a/node_modules/readable-stream/package.json b/node_modules/readable-stream/package.json deleted file mode 100644 index 514c178..0000000 --- a/node_modules/readable-stream/package.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "name": "readable-stream", - "version": "2.3.8", - "description": "Streams3, a user-land copy of the stream library from Node.js", - "main": "readable.js", - "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" - }, - "devDependencies": { - "assert": "^1.4.0", - "babel-polyfill": "^6.9.1", - "buffer": "^4.9.0", - "lolex": "^2.3.2", - "nyc": "^6.4.0", - "tap": "^0.7.0", - "tape": "^4.8.0" - }, - "scripts": { - "test": "tap test/parallel/*.js test/ours/*.js && node test/verify-dependencies.js", - "ci": "tap test/parallel/*.js test/ours/*.js --tap | tee test.tap && node test/verify-dependencies.js", - "cover": "nyc npm test", - "report": "nyc report --reporter=lcov" - }, - "repository": { - "type": "git", - "url": "git://github.com/nodejs/readable-stream" - }, - "keywords": [ - "readable", - "stream", - "pipe" - ], - "browser": { - "util": false, - "./readable.js": "./readable-browser.js", - "./writable.js": "./writable-browser.js", - "./duplex.js": "./duplex-browser.js", - "./lib/internal/streams/stream.js": "./lib/internal/streams/stream-browser.js" - }, - "nyc": { - "include": [ - "lib/**.js" - ] - }, - "license": "MIT" -} diff --git a/node_modules/readable-stream/passthrough.js b/node_modules/readable-stream/passthrough.js deleted file mode 100644 index ffd791d..0000000 --- a/node_modules/readable-stream/passthrough.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./readable').PassThrough diff --git a/node_modules/readable-stream/readable-browser.js b/node_modules/readable-stream/readable-browser.js deleted file mode 100644 index e503725..0000000 --- a/node_modules/readable-stream/readable-browser.js +++ /dev/null @@ -1,7 +0,0 @@ -exports = module.exports = require('./lib/_stream_readable.js'); -exports.Stream = exports; -exports.Readable = exports; -exports.Writable = require('./lib/_stream_writable.js'); -exports.Duplex = require('./lib/_stream_duplex.js'); -exports.Transform = require('./lib/_stream_transform.js'); -exports.PassThrough = require('./lib/_stream_passthrough.js'); diff --git a/node_modules/readable-stream/readable.js b/node_modules/readable-stream/readable.js deleted file mode 100644 index ec89ec5..0000000 --- a/node_modules/readable-stream/readable.js +++ /dev/null @@ -1,19 +0,0 @@ -var Stream = require('stream'); -if (process.env.READABLE_STREAM === 'disable' && Stream) { - module.exports = Stream; - exports = module.exports = Stream.Readable; - exports.Readable = Stream.Readable; - exports.Writable = Stream.Writable; - exports.Duplex = Stream.Duplex; - exports.Transform = Stream.Transform; - exports.PassThrough = Stream.PassThrough; - exports.Stream = Stream; -} else { - exports = module.exports = require('./lib/_stream_readable.js'); - exports.Stream = Stream || exports; - exports.Readable = exports; - exports.Writable = require('./lib/_stream_writable.js'); - exports.Duplex = require('./lib/_stream_duplex.js'); - exports.Transform = require('./lib/_stream_transform.js'); - exports.PassThrough = require('./lib/_stream_passthrough.js'); -} diff --git a/node_modules/readable-stream/transform.js b/node_modules/readable-stream/transform.js deleted file mode 100644 index b1baba2..0000000 --- a/node_modules/readable-stream/transform.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./readable').Transform diff --git a/node_modules/readable-stream/writable-browser.js b/node_modules/readable-stream/writable-browser.js deleted file mode 100644 index ebdde6a..0000000 --- a/node_modules/readable-stream/writable-browser.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./lib/_stream_writable.js'); diff --git a/node_modules/readable-stream/writable.js b/node_modules/readable-stream/writable.js deleted file mode 100644 index 3211a6f..0000000 --- a/node_modules/readable-stream/writable.js +++ /dev/null @@ -1,8 +0,0 @@ -var Stream = require("stream") -var Writable = require("./lib/_stream_writable.js") - -if (process.env.READABLE_STREAM === 'disable') { - module.exports = Stream && Stream.Writable || Writable -} else { - module.exports = Writable -} diff --git a/node_modules/readdirp/LICENSE b/node_modules/readdirp/LICENSE deleted file mode 100644 index 8a63b80..0000000 --- a/node_modules/readdirp/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -This software is released under the MIT license: - -Copyright (c) 2012-2015 Thorsten Lorenz - -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/readdirp/README.md b/node_modules/readdirp/README.md deleted file mode 100644 index 431f402..0000000 --- a/node_modules/readdirp/README.md +++ /dev/null @@ -1,204 +0,0 @@ -# readdirp [![Build Status](https://secure.travis-ci.org/thlorenz/readdirp.svg)](http://travis-ci.org/thlorenz/readdirp) - -[![NPM](https://nodei.co/npm/readdirp.png?downloads=true&stars=true)](https://nodei.co/npm/readdirp/) - -Recursive version of [fs.readdir](http://nodejs.org/docs/latest/api/fs.html#fs_fs_readdir_path_callback). Exposes a **stream api**. - -```javascript -var readdirp = require('readdirp') - , path = require('path') - , es = require('event-stream'); - -// print out all JavaScript files along with their size - -var stream = readdirp({ root: path.join(__dirname), fileFilter: '*.js' }); -stream - .on('warn', function (err) { - console.error('non-fatal error', err); - // optionally call stream.destroy() here in order to abort and cause 'close' to be emitted - }) - .on('error', function (err) { console.error('fatal error', err); }) - .pipe(es.mapSync(function (entry) { - return { path: entry.path, size: entry.stat.size }; - })) - .pipe(es.stringify()) - .pipe(process.stdout); -``` - -Meant to be one of the recursive versions of [fs](http://nodejs.org/docs/latest/api/fs.html) functions, e.g., like [mkdirp](https://github.com/substack/node-mkdirp). - -**Table of Contents** *generated with [DocToc](http://doctoc.herokuapp.com/)* - -- [Installation](#installation) -- [API](#api) - - [entry stream](#entry-stream) - - [options](#options) - - [entry info](#entry-info) - - [Filters](#filters) - - [Callback API](#callback-api) - - [allProcessed ](#allprocessed) - - [fileProcessed](#fileprocessed) -- [More Examples](#more-examples) - - [stream api](#stream-api) - - [stream api pipe](#stream-api-pipe) - - [grep](#grep) - - [using callback api](#using-callback-api) - - [tests](#tests) - - -# Installation - - npm install readdirp - -# API - -***var entryStream = readdirp (options)*** - -Reads given root recursively and returns a `stream` of [entry info](#entry-info)s. - -## entry stream - -Behaves as follows: - -- `emit('data')` passes an [entry info](#entry-info) whenever one is found -- `emit('warn')` passes a non-fatal `Error` that prevents a file/directory from being processed (i.e., if it is - inaccessible to the user) -- `emit('error')` passes a fatal `Error` which also ends the stream (i.e., when illegal options where passed) -- `emit('end')` called when all entries were found and no more will be emitted (i.e., we are done) -- `emit('close')` called when the stream is destroyed via `stream.destroy()` (which could be useful if you want to - manually abort even on a non fatal error) - at that point the stream is no longer `readable` and no more entries, - warning or errors are emitted -- to learn more about streams, consult the very detailed - [nodejs streams documentation](http://nodejs.org/api/stream.html) or the - [stream-handbook](https://github.com/substack/stream-handbook) - - -## options - -- **root**: path in which to start reading and recursing into subdirectories - -- **fileFilter**: filter to include/exclude files found (see [Filters](#filters) for more) - -- **directoryFilter**: filter to include/exclude directories found and to recurse into (see [Filters](#filters) for more) - -- **depth**: depth at which to stop recursing even if more subdirectories are found - -- **entryType**: determines if data events on the stream should be emitted for `'files'`, `'directories'`, `'both'`, or `'all'`. Setting to `'all'` will also include entries for other types of file descriptors like character devices, unix sockets and named pipes. Defaults to `'files'`. - -- **lstat**: if `true`, readdirp uses `fs.lstat` instead of `fs.stat` in order to stat files and includes symlink entries in the stream along with files. - -## entry info - -Has the following properties: - -- **parentDir** : directory in which entry was found (relative to given root) -- **fullParentDir** : full path to parent directory -- **name** : name of the file/directory -- **path** : path to the file/directory (relative to given root) -- **fullPath** : full path to the file/directory found -- **stat** : built in [stat object](http://nodejs.org/docs/v0.4.9/api/fs.html#fs.Stats) -- **Example**: (assuming root was `/User/dev/readdirp`) - - parentDir : 'test/bed/root_dir1', - fullParentDir : '/User/dev/readdirp/test/bed/root_dir1', - name : 'root_dir1_subdir1', - path : 'test/bed/root_dir1/root_dir1_subdir1', - fullPath : '/User/dev/readdirp/test/bed/root_dir1/root_dir1_subdir1', - stat : [ ... ] - -## Filters - -There are three different ways to specify filters for files and directories respectively. - -- **function**: a function that takes an entry info as a parameter and returns true to include or false to exclude the entry - -- **glob string**: a string (e.g., `*.js`) which is matched using [minimatch](https://github.com/isaacs/minimatch), so go there for more - information. - - Globstars (`**`) are not supported since specifying a recursive pattern for an already recursive function doesn't make sense. - - Negated globs (as explained in the minimatch documentation) are allowed, e.g., `!*.txt` matches everything but text files. - -- **array of glob strings**: either need to be all inclusive or all exclusive (negated) patterns otherwise an error is thrown. - - `[ '*.json', '*.js' ]` includes all JavaScript and Json files. - - - `[ '!.git', '!node_modules' ]` includes all directories except the '.git' and 'node_modules'. - -Directories that do not pass a filter will not be recursed into. - -## Callback API - -Although the stream api is recommended, readdirp also exposes a callback based api. - -***readdirp (options, callback1 [, callback2])*** - -If callback2 is given, callback1 functions as the **fileProcessed** callback, and callback2 as the **allProcessed** callback. - -If only callback1 is given, it functions as the **allProcessed** callback. - -### allProcessed - -- function with err and res parameters, e.g., `function (err, res) { ... }` -- **err**: array of errors that occurred during the operation, **res may still be present, even if errors occurred** -- **res**: collection of file/directory [entry infos](#entry-info) - -### fileProcessed - -- function with [entry info](#entry-info) parameter e.g., `function (entryInfo) { ... }` - - -# More Examples - -`on('error', ..)`, `on('warn', ..)` and `on('end', ..)` handling omitted for brevity - -```javascript -var readdirp = require('readdirp'); - -// Glob file filter -readdirp({ root: './test/bed', fileFilter: '*.js' }) - .on('data', function (entry) { - // do something with each JavaScript file entry - }); - -// Combined glob file filters -readdirp({ root: './test/bed', fileFilter: [ '*.js', '*.json' ] }) - .on('data', function (entry) { - // do something with each JavaScript and Json file entry - }); - -// Combined negated directory filters -readdirp({ root: './test/bed', directoryFilter: [ '!.git', '!*modules' ] }) - .on('data', function (entry) { - // do something with each file entry found outside '.git' or any modules directory - }); - -// Function directory filter -readdirp({ root: './test/bed', directoryFilter: function (di) { return di.name.length === 9; } }) - .on('data', function (entry) { - // do something with each file entry found inside directories whose name has length 9 - }); - -// Limiting depth -readdirp({ root: './test/bed', depth: 1 }) - .on('data', function (entry) { - // do something with each file entry found up to 1 subdirectory deep - }); - -// callback api -readdirp({ root: '.' }, function(fileInfo) { - // do something with file entry here - }, function (err, res) { - // all done, move on or do final step for all file entries here -}); -``` - -Try more examples by following [instructions](https://github.com/paulmillr/readdirp/blob/master/examples/Readme.md) -on how to get going. - -## tests - -The [readdirp tests](https://github.com/paulmillr/readdirp/blob/master/test/readdirp.js) also will give you a good idea on -how things work. - diff --git a/node_modules/readdirp/package.json b/node_modules/readdirp/package.json deleted file mode 100644 index 39314a2..0000000 --- a/node_modules/readdirp/package.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "author": "Thorsten Lorenz (thlorenz.com)", - "name": "readdirp", - "description": "Recursive version of fs.readdir with streaming api.", - "version": "2.2.1", - "homepage": "https://github.com/paulmillr/readdirp", - "repository": { - "type": "git", - "url": "git://github.com/paulmillr/readdirp.git" - }, - "engines": { - "node": ">=0.10" - }, - "files": [ - "readdirp.js", - "stream-api.js" - ], - "keywords": [ - "recursive", - "fs", - "stream", - "streams", - "readdir", - "filesystem", - "find", - "filter" - ], - "main": "readdirp.js", - "scripts": { - "test-main": "(cd test && set -e; for t in ./*.js; do node $t; done)", - "test-0.10": "nave use 0.10 npm run test-main", - "test-0.12": "nave use 0.12 npm run test-main", - "test-4": "nave use 4.4 npm run test-main", - "test-6": "nave use 6.2 npm run test-main", - "test-all": "npm run test-main && npm run test-0.10 && npm run test-0.12 && npm run test-4 && npm run test-6", - "test": "npm run test-main" - }, - "dependencies": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "devDependencies": { - "nave": "^0.5.1", - "proxyquire": "^1.7.9", - "tap": "1.3.2", - "through2": "^2.0.0" - }, - "license": "MIT" -} diff --git a/node_modules/readdirp/readdirp.js b/node_modules/readdirp/readdirp.js deleted file mode 100644 index 863bd17..0000000 --- a/node_modules/readdirp/readdirp.js +++ /dev/null @@ -1,294 +0,0 @@ -'use strict'; - -var fs = require('graceful-fs') - , path = require('path') - , micromatch = require('micromatch').isMatch - , toString = Object.prototype.toString - ; - - -// Standard helpers -function isFunction (obj) { - return toString.call(obj) === '[object Function]'; -} - -function isString (obj) { - return toString.call(obj) === '[object String]'; -} - -function isUndefined (obj) { - return obj === void 0; -} - -/** - * Main function which ends up calling readdirRec and reads all files and directories in given root recursively. - * @param { Object } opts Options to specify root (start directory), filters and recursion depth - * @param { function } callback1 When callback2 is given calls back for each processed file - function (fileInfo) { ... }, - * when callback2 is not given, it behaves like explained in callback2 - * @param { function } callback2 Calls back once all files have been processed with an array of errors and file infos - * function (err, fileInfos) { ... } - */ -function readdir(opts, callback1, callback2) { - var stream - , handleError - , handleFatalError - , errors = [] - , readdirResult = { - directories: [] - , files: [] - } - , fileProcessed - , allProcessed - , realRoot - , aborted = false - , paused = false - ; - - // If no callbacks were given we will use a streaming interface - if (isUndefined(callback1)) { - var api = require('./stream-api')(); - stream = api.stream; - callback1 = api.processEntry; - callback2 = api.done; - handleError = api.handleError; - handleFatalError = api.handleFatalError; - - stream.on('close', function () { aborted = true; }); - stream.on('pause', function () { paused = true; }); - stream.on('resume', function () { paused = false; }); - } else { - handleError = function (err) { errors.push(err); }; - handleFatalError = function (err) { - handleError(err); - allProcessed(errors, null); - }; - } - - if (isUndefined(opts)){ - handleFatalError(new Error ( - 'Need to pass at least one argument: opts! \n' + - 'https://github.com/paulmillr/readdirp#options' - ) - ); - return stream; - } - - opts.root = opts.root || '.'; - opts.fileFilter = opts.fileFilter || function() { return true; }; - opts.directoryFilter = opts.directoryFilter || function() { return true; }; - opts.depth = typeof opts.depth === 'undefined' ? 999999999 : opts.depth; - opts.entryType = opts.entryType || 'files'; - - var statfn = opts.lstat === true ? fs.lstat.bind(fs) : fs.stat.bind(fs); - - if (isUndefined(callback2)) { - fileProcessed = function() { }; - allProcessed = callback1; - } else { - fileProcessed = callback1; - allProcessed = callback2; - } - - function normalizeFilter (filter) { - - if (isUndefined(filter)) return undefined; - - function isNegated (filters) { - - function negated(f) { - return f.indexOf('!') === 0; - } - - var some = filters.some(negated); - if (!some) { - return false; - } else { - if (filters.every(negated)) { - return true; - } else { - // if we detect illegal filters, bail out immediately - throw new Error( - 'Cannot mix negated with non negated glob filters: ' + filters + '\n' + - 'https://github.com/paulmillr/readdirp#filters' - ); - } - } - } - - // Turn all filters into a function - if (isFunction(filter)) { - - return filter; - - } else if (isString(filter)) { - - return function (entryInfo) { - return micromatch(entryInfo.name, filter.trim()); - }; - - } else if (filter && Array.isArray(filter)) { - - if (filter) filter = filter.map(function (f) { - return f.trim(); - }); - - return isNegated(filter) ? - // use AND to concat multiple negated filters - function (entryInfo) { - return filter.every(function (f) { - return micromatch(entryInfo.name, f); - }); - } - : - // use OR to concat multiple inclusive filters - function (entryInfo) { - return filter.some(function (f) { - return micromatch(entryInfo.name, f); - }); - }; - } - } - - function processDir(currentDir, entries, callProcessed) { - if (aborted) return; - var total = entries.length - , processed = 0 - , entryInfos = [] - ; - - fs.realpath(currentDir, function(err, realCurrentDir) { - if (aborted) return; - if (err) { - handleError(err); - callProcessed(entryInfos); - return; - } - - var relDir = path.relative(realRoot, realCurrentDir); - - if (entries.length === 0) { - callProcessed([]); - } else { - entries.forEach(function (entry) { - - var fullPath = path.join(realCurrentDir, entry) - , relPath = path.join(relDir, entry); - - statfn(fullPath, function (err, stat) { - if (err) { - handleError(err); - } else { - entryInfos.push({ - name : entry - , path : relPath // relative to root - , fullPath : fullPath - - , parentDir : relDir // relative to root - , fullParentDir : realCurrentDir - - , stat : stat - }); - } - processed++; - if (processed === total) callProcessed(entryInfos); - }); - }); - } - }); - } - - function readdirRec(currentDir, depth, callCurrentDirProcessed) { - var args = arguments; - if (aborted) return; - if (paused) { - setImmediate(function () { - readdirRec.apply(null, args); - }) - return; - } - - fs.readdir(currentDir, function (err, entries) { - if (err) { - handleError(err); - callCurrentDirProcessed(); - return; - } - - processDir(currentDir, entries, function(entryInfos) { - - var subdirs = entryInfos - .filter(function (ei) { return ei.stat.isDirectory() && opts.directoryFilter(ei); }); - - subdirs.forEach(function (di) { - if(opts.entryType === 'directories' || opts.entryType === 'both' || opts.entryType === 'all') { - fileProcessed(di); - } - readdirResult.directories.push(di); - }); - - entryInfos - .filter(function(ei) { - var isCorrectType = opts.entryType === 'all' ? - !ei.stat.isDirectory() : ei.stat.isFile() || ei.stat.isSymbolicLink(); - return isCorrectType && opts.fileFilter(ei); - }) - .forEach(function (fi) { - if(opts.entryType === 'files' || opts.entryType === 'both' || opts.entryType === 'all') { - fileProcessed(fi); - } - readdirResult.files.push(fi); - }); - - var pendingSubdirs = subdirs.length; - - // Be done if no more subfolders exist or we reached the maximum desired depth - if(pendingSubdirs === 0 || depth === opts.depth) { - callCurrentDirProcessed(); - } else { - // recurse into subdirs, keeping track of which ones are done - // and call back once all are processed - subdirs.forEach(function (subdir) { - readdirRec(subdir.fullPath, depth + 1, function () { - pendingSubdirs = pendingSubdirs - 1; - if(pendingSubdirs === 0) { - callCurrentDirProcessed(); - } - }); - }); - } - }); - }); - } - - // Validate and normalize filters - try { - opts.fileFilter = normalizeFilter(opts.fileFilter); - opts.directoryFilter = normalizeFilter(opts.directoryFilter); - } catch (err) { - // if we detect illegal filters, bail out immediately - handleFatalError(err); - return stream; - } - - // If filters were valid get on with the show - fs.realpath(opts.root, function(err, res) { - if (err) { - handleFatalError(err); - return stream; - } - - realRoot = res; - readdirRec(opts.root, 0, function () { - // All errors are collected into the errors array - if (errors.length > 0) { - allProcessed(errors, readdirResult); - } else { - allProcessed(null, readdirResult); - } - }); - }); - - return stream; -} - -module.exports = readdir; diff --git a/node_modules/readdirp/stream-api.js b/node_modules/readdirp/stream-api.js deleted file mode 100644 index bffd1a9..0000000 --- a/node_modules/readdirp/stream-api.js +++ /dev/null @@ -1,98 +0,0 @@ -'use strict'; - -var stream = require('readable-stream'); -var util = require('util'); - -var Readable = stream.Readable; - -module.exports = ReaddirpReadable; - -util.inherits(ReaddirpReadable, Readable); - -function ReaddirpReadable (opts) { - if (!(this instanceof ReaddirpReadable)) return new ReaddirpReadable(opts); - - opts = opts || {}; - - opts.objectMode = true; - Readable.call(this, opts); - - // backpressure not implemented at this point - this.highWaterMark = Infinity; - - this._destroyed = false; - this._paused = false; - this._warnings = []; - this._errors = []; - - this._pauseResumeErrors(); -} - -var proto = ReaddirpReadable.prototype; - -proto._pauseResumeErrors = function () { - var self = this; - self.on('pause', function () { self._paused = true }); - self.on('resume', function () { - if (self._destroyed) return; - self._paused = false; - - self._warnings.forEach(function (err) { self.emit('warn', err) }); - self._warnings.length = 0; - - self._errors.forEach(function (err) { self.emit('error', err) }); - self._errors.length = 0; - }) -} - -// called for each entry -proto._processEntry = function (entry) { - if (this._destroyed) return; - this.push(entry); -} - -proto._read = function () { } - -proto.destroy = function () { - // when stream is destroyed it will emit nothing further, not even errors or warnings - this.push(null); - this.readable = false; - this._destroyed = true; - this.emit('close'); -} - -proto._done = function () { - this.push(null); -} - -// we emit errors and warnings async since we may handle errors like invalid args -// within the initial event loop before any event listeners subscribed -proto._handleError = function (err) { - var self = this; - setImmediate(function () { - if (self._paused) return self._warnings.push(err); - if (!self._destroyed) self.emit('warn', err); - }); -} - -proto._handleFatalError = function (err) { - var self = this; - setImmediate(function () { - if (self._paused) return self._errors.push(err); - if (!self._destroyed) self.emit('error', err); - }); -} - -function createStreamAPI () { - var stream = new ReaddirpReadable(); - - return { - stream : stream - , processEntry : stream._processEntry.bind(stream) - , done : stream._done.bind(stream) - , handleError : stream._handleError.bind(stream) - , handleFatalError : stream._handleFatalError.bind(stream) - }; -} - -module.exports = createStreamAPI; diff --git a/node_modules/regex-not/LICENSE b/node_modules/regex-not/LICENSE deleted file mode 100644 index 8ee09d9..0000000 --- a/node_modules/regex-not/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016, 2018, 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/regex-not/README.md b/node_modules/regex-not/README.md deleted file mode 100644 index 24d00e7..0000000 --- a/node_modules/regex-not/README.md +++ /dev/null @@ -1,133 +0,0 @@ -# regex-not [![NPM version](https://img.shields.io/npm/v/regex-not.svg?style=flat)](https://www.npmjs.com/package/regex-not) [![NPM monthly downloads](https://img.shields.io/npm/dm/regex-not.svg?style=flat)](https://npmjs.org/package/regex-not) [![NPM total downloads](https://img.shields.io/npm/dt/regex-not.svg?style=flat)](https://npmjs.org/package/regex-not) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/regex-not.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/regex-not) - -> Create a javascript regular expression for matching everything except for the given string. - -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 regex-not -``` - -## Usage - -```js -var not = require('regex-not'); -``` - -The main export is a function that takes a string an options object. - -```js -not(string[, options]); -``` - -**Example** - -```js -var not = require('regex-not'); -console.log(not('foo')); -//=> /^(?:(?!^(?:foo)$).)+$/ -``` - -**Strict matching** - -By default, the returned regex is for strictly (not) matching the exact given pattern (in other words, "match this string if it does NOT _exactly equal_ `foo`"): - -```js -var re = not('foo'); -console.log(re.test('foo')); //=> false -console.log(re.test('bar')); //=> true -console.log(re.test('foobar')); //=> true -console.log(re.test('barfoo')); //=> true -``` - -### .create - -Returns a string to allow you to create your own regex: - -```js -console.log(not.create('foo')); -//=> '(?:(?!^(?:foo)$).)+' -``` - -### Options - -**options.contains** - -You can relax strict matching by setting `options.contains` to true (in other words, "match this string if it does NOT _contain_ `foo`"): - -```js -var re = not('foo'); -console.log(re.test('foo', {contains: true})); //=> false -console.log(re.test('bar', {contains: true})); //=> true -console.log(re.test('foobar', {contains: true})); //=> false -console.log(re.test('barfoo', {contains: true})); //=> 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: - -* [regex-cache](https://www.npmjs.com/package/regex-cache): Memoize the results of a call to the RegExp constructor, avoiding repetitious runtime compilation of… [more](https://github.com/jonschlinkert/regex-cache) | [homepage](https://github.com/jonschlinkert/regex-cache "Memoize the results of a call to the RegExp constructor, avoiding repetitious runtime compilation of the same string and options, resulting in surprising performance improvements.") -* [to-regex](https://www.npmjs.com/package/to-regex): Generate a regex from a string or array of strings. | [homepage](https://github.com/jonschlinkert/to-regex "Generate a regex from a string or array of strings.") - -### Contributors - -| **Commits** | **Contributor** | -| --- | --- | -| 9 | [jonschlinkert](https://github.com/jonschlinkert) | -| 1 | [doowb](https://github.com/doowb) | -| 1 | [EdwardBetts](https://github.com/EdwardBetts) | - -### Author - -**Jon Schlinkert** - -* [linkedin/in/jonschlinkert](https://linkedin.com/in/jonschlinkert) -* [github/jonschlinkert](https://github.com/jonschlinkert) -* [twitter/jonschlinkert](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 February 19, 2018._ \ No newline at end of file diff --git a/node_modules/regex-not/index.js b/node_modules/regex-not/index.js deleted file mode 100644 index 02bfed4..0000000 --- a/node_modules/regex-not/index.js +++ /dev/null @@ -1,72 +0,0 @@ -'use strict'; - -var extend = require('extend-shallow'); -var safe = require('safe-regex'); - -/** - * The main export is a function that takes a `pattern` string and an `options` object. - * - * ```js - & var not = require('regex-not'); - & console.log(not('foo')); - & //=> /^(?:(?!^(?:foo)$).)*$/ - * ``` - * - * @param {String} `pattern` - * @param {Object} `options` - * @return {RegExp} Converts the given `pattern` to a regex using the specified `options`. - * @api public - */ - -function toRegex(pattern, options) { - return new RegExp(toRegex.create(pattern, options)); -} - -/** - * Create a regex-compatible string from the given `pattern` and `options`. - * - * ```js - & var not = require('regex-not'); - & console.log(not.create('foo')); - & //=> '^(?:(?!^(?:foo)$).)*$' - * ``` - * @param {String} `pattern` - * @param {Object} `options` - * @return {String} - * @api public - */ - -toRegex.create = function(pattern, options) { - if (typeof pattern !== 'string') { - throw new TypeError('expected a string'); - } - - var opts = extend({}, options); - if (opts.contains === true) { - opts.strictNegate = false; - } - - var open = opts.strictOpen !== false ? '^' : ''; - var close = opts.strictClose !== false ? '$' : ''; - var endChar = opts.endChar ? opts.endChar : '+'; - var str = pattern; - - if (opts.strictNegate === false) { - str = '(?:(?!(?:' + pattern + ')).)' + endChar; - } else { - str = '(?:(?!^(?:' + pattern + ')$).)' + endChar; - } - - var res = open + str + close; - if (opts.safe === true && safe(res) === false) { - throw new Error('potentially unsafe regular expression: ' + res); - } - - return res; -}; - -/** - * Expose `toRegex` - */ - -module.exports = toRegex; diff --git a/node_modules/regex-not/node_modules/extend-shallow/LICENSE b/node_modules/regex-not/node_modules/extend-shallow/LICENSE deleted file mode 100644 index 99c9369..0000000 --- a/node_modules/regex-not/node_modules/extend-shallow/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014-2015, 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/regex-not/node_modules/extend-shallow/README.md b/node_modules/regex-not/node_modules/extend-shallow/README.md deleted file mode 100644 index dee226f..0000000 --- a/node_modules/regex-not/node_modules/extend-shallow/README.md +++ /dev/null @@ -1,97 +0,0 @@ -# extend-shallow [![NPM version](https://img.shields.io/npm/v/extend-shallow.svg?style=flat)](https://www.npmjs.com/package/extend-shallow) [![NPM monthly downloads](https://img.shields.io/npm/dm/extend-shallow.svg?style=flat)](https://npmjs.org/package/extend-shallow) [![NPM total downloads](https://img.shields.io/npm/dt/extend-shallow.svg?style=flat)](https://npmjs.org/package/extend-shallow) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/extend-shallow.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/extend-shallow) - -> Extend an object with the properties of additional objects. node.js/javascript util. - -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 extend-shallow -``` - -## Usage - -```js -var extend = require('extend-shallow'); - -extend({a: 'b'}, {c: 'd'}) -//=> {a: 'b', c: 'd'} -``` - -Pass an empty object to shallow clone: - -```js -var obj = {}; -extend(obj, {a: 'b'}, {c: 'd'}) -//=> {a: 'b', c: 'd'} -``` - -## 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: - -* [extend-shallow](https://www.npmjs.com/package/extend-shallow): Extend an object with the properties of additional objects. node.js/javascript util. | [homepage](https://github.com/jonschlinkert/extend-shallow "Extend an object with the properties of additional objects. node.js/javascript util.") -* [for-in](https://www.npmjs.com/package/for-in): Iterate over the own and inherited enumerable properties of an object, and return an object… [more](https://github.com/jonschlinkert/for-in) | [homepage](https://github.com/jonschlinkert/for-in "Iterate over the own and inherited enumerable properties of an object, and return an object with properties that evaluate to true from the callback. Exit early by returning `false`. JavaScript/Node.js") -* [for-own](https://www.npmjs.com/package/for-own): Iterate over the own enumerable properties of an object, and return an object with properties… [more](https://github.com/jonschlinkert/for-own) | [homepage](https://github.com/jonschlinkert/for-own "Iterate over the own enumerable properties of an object, and return an object with properties that evaluate to true from the callback. Exit early by returning `false`. JavaScript/Node.js.") -* [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.") -* [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** | -| --- | --- | -| 33 | [jonschlinkert](https://github.com/jonschlinkert) | -| 1 | [pdehaan](https://github.com/pdehaan) | - -### Author - -**Jon Schlinkert** - -* [github/jonschlinkert](https://github.com/jonschlinkert) -* [twitter/jonschlinkert](https://twitter.com/jonschlinkert) - -### License - -Copyright © 2017, [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 November 19, 2017._ \ No newline at end of file diff --git a/node_modules/regex-not/node_modules/extend-shallow/index.js b/node_modules/regex-not/node_modules/extend-shallow/index.js deleted file mode 100644 index c9582f8..0000000 --- a/node_modules/regex-not/node_modules/extend-shallow/index.js +++ /dev/null @@ -1,60 +0,0 @@ -'use strict'; - -var isExtendable = require('is-extendable'); -var assignSymbols = require('assign-symbols'); - -module.exports = Object.assign || function(obj/*, objects*/) { - if (obj === null || typeof obj === 'undefined') { - throw new TypeError('Cannot convert undefined or null to object'); - } - if (!isObject(obj)) { - obj = {}; - } - for (var i = 1; i < arguments.length; i++) { - var val = arguments[i]; - if (isString(val)) { - val = toObject(val); - } - if (isObject(val)) { - assign(obj, val); - assignSymbols(obj, val); - } - } - return obj; -}; - -function assign(a, b) { - for (var key in b) { - if (hasOwn(b, key)) { - a[key] = b[key]; - } - } -} - -function isString(val) { - return (val && typeof val === 'string'); -} - -function toObject(str) { - var obj = {}; - for (var i in str) { - obj[i] = str[i]; - } - return obj; -} - -function isObject(val) { - return (val && typeof val === 'object') || isExtendable(val); -} - -/** - * Returns true if the given `key` is an own property of `obj`. - */ - -function hasOwn(obj, key) { - return Object.prototype.hasOwnProperty.call(obj, key); -} - -function isEnum(obj, key) { - return Object.prototype.propertyIsEnumerable.call(obj, key); -} diff --git a/node_modules/regex-not/node_modules/extend-shallow/package.json b/node_modules/regex-not/node_modules/extend-shallow/package.json deleted file mode 100644 index e5e9105..0000000 --- a/node_modules/regex-not/node_modules/extend-shallow/package.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "name": "extend-shallow", - "description": "Extend an object with the properties of additional objects. node.js/javascript util.", - "version": "3.0.2", - "homepage": "https://github.com/jonschlinkert/extend-shallow", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "contributors": [ - "Jon Schlinkert (http://twitter.com/jonschlinkert)", - "Peter deHaan (http://about.me/peterdehaan)" - ], - "repository": "jonschlinkert/extend-shallow", - "bugs": { - "url": "https://github.com/jonschlinkert/extend-shallow/issues" - }, - "license": "MIT", - "files": [ - "index.js" - ], - "main": "index.js", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "devDependencies": { - "array-slice": "^1.0.0", - "benchmarked": "^2.0.0", - "for-own": "^1.0.0", - "gulp-format-md": "^1.0.0", - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.1", - "minimist": "^1.2.0", - "mocha": "^3.5.3", - "object-assign": "^4.1.1" - }, - "keywords": [ - "assign", - "clone", - "extend", - "merge", - "obj", - "object", - "object-assign", - "object.assign", - "prop", - "properties", - "property", - "props", - "shallow", - "util", - "utility", - "utils", - "value" - ], - "verb": { - "toc": false, - "layout": "default", - "tasks": [ - "readme" - ], - "related": { - "list": [ - "extend-shallow", - "for-in", - "for-own", - "is-plain-object", - "isobject", - "kind-of" - ] - }, - "plugins": [ - "gulp-format-md" - ], - "lint": { - "reflinks": true - } - } -} diff --git a/node_modules/regex-not/node_modules/is-extendable/LICENSE b/node_modules/regex-not/node_modules/is-extendable/LICENSE deleted file mode 100644 index c0d7f13..0000000 --- a/node_modules/regex-not/node_modules/is-extendable/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015-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. \ No newline at end of file diff --git a/node_modules/regex-not/node_modules/is-extendable/README.md b/node_modules/regex-not/node_modules/is-extendable/README.md deleted file mode 100644 index 875b56a..0000000 --- a/node_modules/regex-not/node_modules/is-extendable/README.md +++ /dev/null @@ -1,88 +0,0 @@ -# is-extendable [![NPM version](https://img.shields.io/npm/v/is-extendable.svg?style=flat)](https://www.npmjs.com/package/is-extendable) [![NPM monthly downloads](https://img.shields.io/npm/dm/is-extendable.svg?style=flat)](https://npmjs.org/package/is-extendable) [![NPM total downloads](https://img.shields.io/npm/dt/is-extendable.svg?style=flat)](https://npmjs.org/package/is-extendable) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/is-extendable.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/is-extendable) - -> Returns true if a value is a plain object, array or function. - -## Install - -Install with [npm](https://www.npmjs.com/): - -```sh -$ npm install --save is-extendable -``` - -## Usage - -```js -var isExtendable = require('is-extendable'); -``` - -Returns true if the value is any of the following: - -* array -* plain object -* function - -## Notes - -All objects in JavaScript can have keys, but it's a pain to check for this, since we ether need to verify that the value is not `null` or `undefined` and: - -* the value is not a primitive, or -* that the object is a plain object, function or array - -Also note that an `extendable` object is not the same as an [extensible object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isExtensible), which is one that (in es6) is not sealed, frozen, or marked as non-extensible using `preventExtensions`. - -## Release history - -### v1.0.0 - 2017/07/20 - -**Breaking changes** - -* No longer considers date, regex or error objects to be extendable - -## About - -### Related projects - -* [assign-deep](https://www.npmjs.com/package/assign-deep): Deeply assign the enumerable properties and/or es6 Symbol properies of source objects to the target… [more](https://github.com/jonschlinkert/assign-deep) | [homepage](https://github.com/jonschlinkert/assign-deep "Deeply assign the enumerable properties and/or es6 Symbol properies of source objects to the target (first) object.") -* [is-equal-shallow](https://www.npmjs.com/package/is-equal-shallow): Does a shallow comparison of two objects, returning false if the keys or values differ. | [homepage](https://github.com/jonschlinkert/is-equal-shallow "Does a shallow comparison of two objects, returning false if the keys or values differ.") -* [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.") -* [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.") - -### Contributing - -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). - -### 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 -``` - -### 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 -``` - -### Author - -**Jon Schlinkert** - -* [github/jonschlinkert](https://github.com/jonschlinkert) -* [twitter/jonschlinkert](https://twitter.com/jonschlinkert) - -### License - -Copyright © 2017, [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 July 20, 2017._ \ No newline at end of file diff --git a/node_modules/regex-not/node_modules/is-extendable/index.d.ts b/node_modules/regex-not/node_modules/is-extendable/index.d.ts deleted file mode 100644 index b96d507..0000000 --- a/node_modules/regex-not/node_modules/is-extendable/index.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export = isExtendable; - -declare function isExtendable(val: any): boolean; - -declare namespace isExtendable {} diff --git a/node_modules/regex-not/node_modules/is-extendable/index.js b/node_modules/regex-not/node_modules/is-extendable/index.js deleted file mode 100644 index a8b26ad..0000000 --- a/node_modules/regex-not/node_modules/is-extendable/index.js +++ /dev/null @@ -1,14 +0,0 @@ -/*! - * is-extendable - * - * Copyright (c) 2015-2017, Jon Schlinkert. - * Released under the MIT License. - */ - -'use strict'; - -var isPlainObject = require('is-plain-object'); - -module.exports = function isExtendable(val) { - return isPlainObject(val) || typeof val === 'function' || Array.isArray(val); -}; diff --git a/node_modules/regex-not/node_modules/is-extendable/package.json b/node_modules/regex-not/node_modules/is-extendable/package.json deleted file mode 100644 index 2aaab65..0000000 --- a/node_modules/regex-not/node_modules/is-extendable/package.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "name": "is-extendable", - "description": "Returns true if a value is a plain object, array or function.", - "version": "1.0.1", - "homepage": "https://github.com/jonschlinkert/is-extendable", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "repository": "jonschlinkert/is-extendable", - "bugs": { - "url": "https://github.com/jonschlinkert/is-extendable/issues" - }, - "license": "MIT", - "files": [ - "index.js", - "index.d.ts" - ], - "main": "index.js", - "types": "index.d.ts", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "devDependencies": { - "gulp-format-md": "^1.0.0", - "mocha": "^3.4.2" - }, - "keywords": [ - "array", - "assign", - "check", - "date", - "extend", - "extendable", - "extensible", - "function", - "is", - "object", - "regex", - "test" - ], - "verb": { - "related": { - "list": [ - "assign-deep", - "is-equal-shallow", - "is-plain-object", - "isobject", - "kind-of" - ] - }, - "toc": false, - "layout": "default", - "tasks": [ - "readme" - ], - "plugins": [ - "gulp-format-md" - ], - "lint": { - "reflinks": true - } - } -} diff --git a/node_modules/regex-not/package.json b/node_modules/regex-not/package.json deleted file mode 100644 index 0320d53..0000000 --- a/node_modules/regex-not/package.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "name": "regex-not", - "description": "Create a javascript regular expression for matching everything except for the given string.", - "version": "1.0.2", - "homepage": "https://github.com/jonschlinkert/regex-not", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "repository": "jonschlinkert/regex-not", - "bugs": { - "url": "https://github.com/jonschlinkert/regex-not/issues" - }, - "license": "MIT", - "files": [ - "index.js" - ], - "main": "index.js", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "devDependencies": { - "gulp-format-md": "^1.0.0", - "mocha": "^3.5.3" - }, - "keywords": [ - "exec", - "match", - "negate", - "negation", - "not", - "regex", - "regular expression", - "test" - ], - "verb": { - "toc": false, - "layout": "default", - "tasks": [ - "readme" - ], - "plugins": [ - "gulp-format-md" - ], - "related": { - "list": [ - "regex-cache", - "to-regex" - ] - }, - "reflinks": [ - "verb", - "verb-generate-readme" - ], - "lint": { - "reflinks": true - } - } -} diff --git a/node_modules/remove-trailing-separator/history.md b/node_modules/remove-trailing-separator/history.md deleted file mode 100644 index e15e8a4..0000000 --- a/node_modules/remove-trailing-separator/history.md +++ /dev/null @@ -1,17 +0,0 @@ -## History - -### 1.1.0 - 16th Aug 2017 - -- [f4576e3](https://github.com/darsain/remove-trailing-separator/commit/f4576e3638c39b794998b533fffb27854dcbee01) Implement faster slash slicing - -### 1.0.2 - 07th Jun 2017 - -- [8e13ecb](https://github.com/darsain/remove-trailing-separator/commit/8e13ecbfd7b9f5fdf97c5d5ff923e4718b874e31) ES5 compatibility - -### 1.0.1 - 25th Sep 2016 - -- [b78606d](https://github.com/darsain/remove-trailing-separator/commit/af90b4e153a4527894741af6c7005acaeb78606d) Remove backslash only on win32 systems - -### 1.0.0 - 24th Sep 2016 - -Initial release. diff --git a/node_modules/remove-trailing-separator/index.js b/node_modules/remove-trailing-separator/index.js deleted file mode 100644 index 512306b..0000000 --- a/node_modules/remove-trailing-separator/index.js +++ /dev/null @@ -1,17 +0,0 @@ -var isWin = process.platform === 'win32'; - -module.exports = function (str) { - var i = str.length - 1; - if (i < 2) { - return str; - } - while (isSeparator(str, i)) { - i--; - } - return str.substr(0, i + 1); -}; - -function isSeparator(str, i) { - var char = str[i]; - return i > 0 && (char === '/' || (isWin && char === '\\')); -} diff --git a/node_modules/remove-trailing-separator/license b/node_modules/remove-trailing-separator/license deleted file mode 100644 index a169aff..0000000 --- a/node_modules/remove-trailing-separator/license +++ /dev/null @@ -1,3 +0,0 @@ -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. \ No newline at end of file diff --git a/node_modules/remove-trailing-separator/package.json b/node_modules/remove-trailing-separator/package.json deleted file mode 100644 index 47ef27a..0000000 --- a/node_modules/remove-trailing-separator/package.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "remove-trailing-separator", - "version": "1.1.0", - "description": "Removes separators from the end of the string.", - "main": "index.js", - "files": [ - "index.js" - ], - "scripts": { - "lint": "xo", - "pretest": "npm run lint", - "test": "nyc ava", - "report": "nyc report --reporter=html" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/darsain/remove-trailing-separator.git" - }, - "keywords": [ - "remove", - "strip", - "trailing", - "separator" - ], - "author": "darsain", - "license": "ISC", - "bugs": { - "url": "https://github.com/darsain/remove-trailing-separator/issues" - }, - "homepage": "https://github.com/darsain/remove-trailing-separator#readme", - "devDependencies": { - "ava": "^0.16.0", - "coveralls": "^2.11.14", - "nyc": "^8.3.0", - "xo": "^0.16.0" - } -} diff --git a/node_modules/remove-trailing-separator/readme.md b/node_modules/remove-trailing-separator/readme.md deleted file mode 100644 index 747086a..0000000 --- a/node_modules/remove-trailing-separator/readme.md +++ /dev/null @@ -1,51 +0,0 @@ -# remove-trailing-separator - -[![NPM version][npm-img]][npm-url] [![Build Status: Linux][travis-img]][travis-url] [![Build Status: Windows][appveyor-img]][appveyor-url] [![Coverage Status][coveralls-img]][coveralls-url] - -Removes all separators from the end of a string. - -## Install - -``` -npm install remove-trailing-separator -``` - -## Examples - -```js -const removeTrailingSeparator = require('remove-trailing-separator'); - -removeTrailingSeparator('/foo/bar/') // '/foo/bar' -removeTrailingSeparator('/foo/bar///') // '/foo/bar' - -// leaves only/last separator -removeTrailingSeparator('/') // '/' -removeTrailingSeparator('///') // '/' - -// returns empty string -removeTrailingSeparator('') // '' -``` - -## Notable backslash, or win32 separator behavior - -`\` is considered a separator only on WIN32 systems. All POSIX compliant systems -see backslash as a valid file name character, so it would break POSIX compliance -to remove it there. - -In practice, this means that this code will return different things depending on -what system it runs on: - -```js -removeTrailingSeparator('\\foo\\') -// UNIX => '\\foo\\' -// WIN32 => '\\foo' -``` - -[npm-url]: https://npmjs.org/package/remove-trailing-separator -[npm-img]: https://badge.fury.io/js/remove-trailing-separator.svg -[travis-url]: https://travis-ci.org/darsain/remove-trailing-separator -[travis-img]: https://travis-ci.org/darsain/remove-trailing-separator.svg?branch=master -[appveyor-url]: https://ci.appveyor.com/project/darsain/remove-trailing-separator/branch/master -[appveyor-img]: https://ci.appveyor.com/api/projects/status/wvg9a93rrq95n2xl/branch/master?svg=true -[coveralls-url]: https://coveralls.io/github/darsain/remove-trailing-separator?branch=master -[coveralls-img]: https://coveralls.io/repos/github/darsain/remove-trailing-separator/badge.svg?branch=master diff --git a/node_modules/repeat-element/LICENSE b/node_modules/repeat-element/LICENSE deleted file mode 100644 index 7cccaf9..0000000 --- a/node_modules/repeat-element/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015-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/repeat-element/README.md b/node_modules/repeat-element/README.md deleted file mode 100644 index 6006418..0000000 --- a/node_modules/repeat-element/README.md +++ /dev/null @@ -1,99 +0,0 @@ -# repeat-element [![NPM version](https://img.shields.io/npm/v/repeat-element.svg?style=flat)](https://www.npmjs.com/package/repeat-element) [![NPM monthly downloads](https://img.shields.io/npm/dm/repeat-element.svg?style=flat)](https://npmjs.org/package/repeat-element) [![NPM total downloads](https://img.shields.io/npm/dt/repeat-element.svg?style=flat)](https://npmjs.org/package/repeat-element) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/repeat-element.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/repeat-element) - -> Create an array by repeating the given value n times. - -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 repeat-element -``` - -## Usage - -```js -const repeat = require('repeat-element'); - -repeat('a', 5); -//=> ['a', 'a', 'a', 'a', 'a'] - -repeat('a', 1); -//=> ['a'] - -repeat('a', 0); -//=> [] - -repeat(null, 5) -//» [ null, null, null, null, null ] - -repeat({some: 'object'}, 5) -//» [ { some: 'object' }, -// { some: 'object' }, -// { some: 'object' }, -// { some: 'object' }, -// { some: 'object' } ] - -repeat(5, 5) -//» [ 5, 5, 5, 5, 5 ] -``` - -## 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 -``` - -
    - -### Contributors - -| **Commits** | **Contributor** | -| --- | --- | -| 17 | [jonschlinkert](https://github.com/jonschlinkert) | -| 3 | [LinusU](https://github.com/LinusU) | -| 1 | [architectcodes](https://github.com/architectcodes) | - -### Author - -**Jon Schlinkert** - -* [GitHub Profile](https://github.com/jonschlinkert) -* [Twitter Profile](https://twitter.com/jonschlinkert) -* [LinkedIn Profile](https://linkedin.com/in/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 August 19, 2018._ \ No newline at end of file diff --git a/node_modules/repeat-element/index.js b/node_modules/repeat-element/index.js deleted file mode 100644 index dde8a27..0000000 --- a/node_modules/repeat-element/index.js +++ /dev/null @@ -1,22 +0,0 @@ -/*! - * repeat-element - * - * Copyright (c) 2015-present, Jon Schlinkert. - * Licensed under the MIT license. - */ - -'use strict'; - -module.exports = function repeat(ele, num) { - if (Array.prototype.fill) { - return new Array(num).fill(ele); - } - - var arr = new Array(num); - - for (var i = 0; i < num; i++) { - arr[i] = ele; - } - - return arr; -}; diff --git a/node_modules/repeat-element/package.json b/node_modules/repeat-element/package.json deleted file mode 100644 index 537055f..0000000 --- a/node_modules/repeat-element/package.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "name": "repeat-element", - "description": "Create an array by repeating the given value n times.", - "version": "1.1.4", - "homepage": "https://github.com/jonschlinkert/repeat-element", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "repository": "jonschlinkert/repeat-element", - "bugs": { - "url": "https://github.com/jonschlinkert/repeat-element/issues" - }, - "license": "MIT", - "files": [ - "index.js" - ], - "main": "index.js", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "devDependencies": { - "benchmarked": "^2.0.0", - "chalk": "^2.4.1", - "glob": "^7.1.2", - "gulp-format-md": "^1.0.0", - "minimist": "^1.2.0", - "mocha": "^3.5.3" - }, - "keywords": [ - "array", - "element", - "repeat", - "string" - ], - "verb": { - "toc": false, - "layout": "default", - "tasks": [ - "readme" - ], - "plugins": [ - "gulp-format-md" - ], - "lint": { - "reflinks": true - } - } -} diff --git a/node_modules/repeat-string/LICENSE b/node_modules/repeat-string/LICENSE deleted file mode 100644 index 39245ac..0000000 --- a/node_modules/repeat-string/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -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/repeat-string/README.md b/node_modules/repeat-string/README.md deleted file mode 100644 index aaa5e91..0000000 --- a/node_modules/repeat-string/README.md +++ /dev/null @@ -1,136 +0,0 @@ -# repeat-string [![NPM version](https://img.shields.io/npm/v/repeat-string.svg?style=flat)](https://www.npmjs.com/package/repeat-string) [![NPM monthly downloads](https://img.shields.io/npm/dm/repeat-string.svg?style=flat)](https://npmjs.org/package/repeat-string) [![NPM total downloads](https://img.shields.io/npm/dt/repeat-string.svg?style=flat)](https://npmjs.org/package/repeat-string) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/repeat-string.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/repeat-string) - -> Repeat the given string n times. Fastest implementation for repeating a string. - -## Install - -Install with [npm](https://www.npmjs.com/): - -```sh -$ npm install --save repeat-string -``` - -## Usage - -### [repeat](index.js#L41) - -Repeat the given `string` the specified `number` of times. - -**Example:** - -**Example** - -```js -var repeat = require('repeat-string'); -repeat('A', 5); -//=> AAAAA -``` - -**Params** - -* `string` **{String}**: The string to repeat -* `number` **{Number}**: The number of times to repeat the string -* `returns` **{String}**: Repeated string - -## Benchmarks - -Repeat string is significantly faster than the native method (which is itself faster than [repeating](https://github.com/sindresorhus/repeating)): - -```sh -# 2x -repeat-string █████████████████████████ (26,953,977 ops/sec) -repeating █████████ (9,855,695 ops/sec) -native ██████████████████ (19,453,895 ops/sec) - -# 3x -repeat-string █████████████████████████ (19,445,252 ops/sec) -repeating ███████████ (8,661,565 ops/sec) -native ████████████████████ (16,020,598 ops/sec) - -# 10x -repeat-string █████████████████████████ (23,792,521 ops/sec) -repeating █████████ (8,571,332 ops/sec) -native ███████████████ (14,582,955 ops/sec) - -# 50x -repeat-string █████████████████████████ (23,640,179 ops/sec) -repeating █████ (5,505,509 ops/sec) -native ██████████ (10,085,557 ops/sec) - -# 250x -repeat-string █████████████████████████ (23,489,618 ops/sec) -repeating ████ (3,962,937 ops/sec) -native ████████ (7,724,892 ops/sec) - -# 2000x -repeat-string █████████████████████████ (20,315,172 ops/sec) -repeating ████ (3,297,079 ops/sec) -native ███████ (6,203,331 ops/sec) - -# 20000x -repeat-string █████████████████████████ (23,382,915 ops/sec) -repeating ███ (2,980,058 ops/sec) -native █████ (5,578,808 ops/sec) -``` - -**Run the benchmarks** - -Install dev dependencies: - -```sh -npm i -d && node benchmark -``` - -## About - -### Related projects - -[repeat-element](https://www.npmjs.com/package/repeat-element): Create an array by repeating the given value n times. | [homepage](https://github.com/jonschlinkert/repeat-element "Create an array by repeating the given value n times.") - -### Contributing - -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). - -### Contributors - -| **Commits** | **Contributor**
    | -| --- | --- | -| 51 | [jonschlinkert](https://github.com/jonschlinkert) | -| 2 | [LinusU](https://github.com/LinusU) | -| 2 | [tbusser](https://github.com/tbusser) | -| 1 | [doowb](https://github.com/doowb) | -| 1 | [wooorm](https://github.com/wooorm) | - -### 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](http://github.com/jonschlinkert). -Released under the [MIT license](https://github.com/jonschlinkert/repeat-string/blob/master/LICENSE). - -*** - -_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.2.0, on October 23, 2016._ \ No newline at end of file diff --git a/node_modules/repeat-string/index.js b/node_modules/repeat-string/index.js deleted file mode 100644 index 4459afd..0000000 --- a/node_modules/repeat-string/index.js +++ /dev/null @@ -1,70 +0,0 @@ -/*! - * repeat-string - * - * Copyright (c) 2014-2015, Jon Schlinkert. - * Licensed under the MIT License. - */ - -'use strict'; - -/** - * Results cache - */ - -var res = ''; -var cache; - -/** - * Expose `repeat` - */ - -module.exports = repeat; - -/** - * Repeat the given `string` the specified `number` - * of times. - * - * **Example:** - * - * ```js - * var repeat = require('repeat-string'); - * repeat('A', 5); - * //=> AAAAA - * ``` - * - * @param {String} `string` The string to repeat - * @param {Number} `number` The number of times to repeat the string - * @return {String} Repeated string - * @api public - */ - -function repeat(str, num) { - if (typeof str !== 'string') { - throw new TypeError('expected a string'); - } - - // cover common, quick use cases - if (num === 1) return str; - if (num === 2) return str + str; - - var max = str.length * num; - if (cache !== str || typeof cache === 'undefined') { - cache = str; - res = ''; - } else if (res.length >= max) { - return res.substr(0, max); - } - - while (max > res.length && num > 1) { - if (num & 1) { - res += str; - } - - num >>= 1; - str += str; - } - - res += str; - res = res.substr(0, max); - return res; -} diff --git a/node_modules/repeat-string/package.json b/node_modules/repeat-string/package.json deleted file mode 100644 index 09f8892..0000000 --- a/node_modules/repeat-string/package.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "name": "repeat-string", - "description": "Repeat the given string n times. Fastest implementation for repeating a string.", - "version": "1.6.1", - "homepage": "https://github.com/jonschlinkert/repeat-string", - "author": "Jon Schlinkert (http://github.com/jonschlinkert)", - "contributors": [ - "Brian Woodward (https://github.com/doowb)", - "Jon Schlinkert (http://twitter.com/jonschlinkert)", - "Linus Unnebäck (http://linus.unnebäck.se)", - "Thijs Busser (http://tbusser.net)", - "Titus (wooorm.com)" - ], - "repository": "jonschlinkert/repeat-string", - "bugs": { - "url": "https://github.com/jonschlinkert/repeat-string/issues" - }, - "license": "MIT", - "files": [ - "index.js" - ], - "main": "index.js", - "engines": { - "node": ">=0.10" - }, - "scripts": { - "test": "mocha" - }, - "devDependencies": { - "ansi-cyan": "^0.1.1", - "benchmarked": "^0.2.5", - "gulp-format-md": "^0.1.11", - "isobject": "^2.1.0", - "mocha": "^3.1.2", - "repeating": "^3.0.0", - "text-table": "^0.2.0", - "yargs-parser": "^4.0.2" - }, - "keywords": [ - "fast", - "fastest", - "fill", - "left", - "left-pad", - "multiple", - "pad", - "padding", - "repeat", - "repeating", - "repetition", - "right", - "right-pad", - "string", - "times" - ], - "verb": { - "toc": false, - "layout": "default", - "tasks": [ - "readme" - ], - "plugins": [ - "gulp-format-md" - ], - "related": { - "list": [ - "repeat-element" - ] - }, - "helpers": [ - "./benchmark/helper.js" - ], - "reflinks": [ - "verb" - ] - } -} diff --git a/node_modules/resolve-url/.jshintrc b/node_modules/resolve-url/.jshintrc deleted file mode 100644 index aaf3358..0000000 --- a/node_modules/resolve-url/.jshintrc +++ /dev/null @@ -1,44 +0,0 @@ -{ - "bitwise": true, - "camelcase": true, - "curly": false, - "eqeqeq": true, - "es3": true, - "forin": true, - "immed": false, - "indent": false, - "latedef": "nofunc", - "newcap": false, - "noarg": true, - "noempty": true, - "nonew": false, - "plusplus": false, - "quotmark": false, - "undef": true, - "unused": "vars", - "strict": false, - "trailing": true, - "maxparams": 5, - "maxdepth": false, - "maxstatements": false, - "maxcomplexity": false, - "maxlen": 100, - - "asi": true, - "expr": true, - "globalstrict": true, - "smarttabs": true, - "sub": true, - - "node": true, - "browser": true, - "globals": { - "describe": false, - "it": false, - "before": false, - "beforeEach": false, - "after": false, - "afterEach": false, - "define": false - } -} diff --git a/node_modules/resolve-url/LICENSE b/node_modules/resolve-url/LICENSE deleted file mode 100644 index 0595be3..0000000 --- a/node_modules/resolve-url/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2013 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/resolve-url/bower.json b/node_modules/resolve-url/bower.json deleted file mode 100644 index 31aa6f4..0000000 --- a/node_modules/resolve-url/bower.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "resolve-url", - "version": "0.2.1", - "description": "Like Node.js’ `path.resolve`/`url.resolve` for the browser.", - "authors": ["Simon Lydell"], - "license": "MIT", - "main": "resolve-url.js", - "keywords": [ - "resolve", - "url" - ], - "ignore": [ - ".*" - ] -} diff --git a/node_modules/resolve-url/changelog.md b/node_modules/resolve-url/changelog.md deleted file mode 100644 index 2a4a630..0000000 --- a/node_modules/resolve-url/changelog.md +++ /dev/null @@ -1,15 +0,0 @@ -### Version 0.2.1 (2014-02-25) ### - -- Fix edge case when (accidentally) supplying only one argument, and that - argument happens to be a falsy value such as `undefined` or `null`. - - -### Version 0.2.0 (2014-02-24) ### - -- Disallow passing 0 arguments. It’s weird and inconsistent between browsers. - (Backwards incompatible change.) - - -### Version 0.1.0 (2014-02-23) ### - -- Initial release. diff --git a/node_modules/resolve-url/component.json b/node_modules/resolve-url/component.json deleted file mode 100644 index f37cf00..0000000 --- a/node_modules/resolve-url/component.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "resolve-url", - "version": "0.2.1", - "license": "MIT", - "description": "Like Node.js’ `path.resolve`/`url.resolve` for the browser.", - "main": "resolve-url.js", - "repo": "lydell/resolve-url", - "keywords": [ - "resolve", - "url" - ], - "scripts": [ - "resolve-url.js" - ] -} diff --git a/node_modules/resolve-url/package.json b/node_modules/resolve-url/package.json deleted file mode 100644 index 9442366..0000000 --- a/node_modules/resolve-url/package.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "resolve-url", - "version": "0.2.1", - "description": "Like Node.js’ `path.resolve`/`url.resolve` for the browser.", - "author": "Simon Lydell", - "license": "MIT", - "main": "resolve-url.js", - "repository": "lydell/resolve-url", - "keywords": [ - "resolve", - "url" - ], - "scripts": { - "test": "jshint resolve-url.js test/ && testling -u" - }, - "devDependencies": { - "testling": "~1.6.0", - "jshint": "~2.4.3", - "tape": "~2.5.0" - }, - "testling": { - "files": "test/*.js", - "browsers": [ - "ie/8..latest", - "chrome/latest", - "firefox/latest", - "opera/12", - "opera/latest", - "safari/5", - "iphone/6", - "android-browser/4" - ] - } -} diff --git a/node_modules/resolve-url/readme.md b/node_modules/resolve-url/readme.md deleted file mode 100644 index edfff73..0000000 --- a/node_modules/resolve-url/readme.md +++ /dev/null @@ -1,83 +0,0 @@ -Overview -======== - -[![browser support](https://ci.testling.com/lydell/resolve-url.png)](https://ci.testling.com/lydell/resolve-url) - -Like Node.js’ [`path.resolve`]/[`url.resolve`] for the browser. - -```js -var resolveUrl = require("resolve-url") - -window.location -// https://example.com/articles/resolving-urls/edit - -resolveUrl("remove") -// https://example.com/articles/resolving-urls/remove - -resolveUrl("/static/scripts/app.js") -// https://example.com/static/scripts/app.js - -// Imagine /static/scripts/app.js contains `//# sourceMappingURL=../source-maps/app.js.map` -resolveUrl("/static/scripts/app.js", "../source-maps/app.js.map") -// https://example.com/static/source-maps/app.js.map - -resolveUrl("/static/scripts/app.js", "../source-maps/app.js.map", "../coffee/app.coffee") -// https://example.com/static/coffee/app.coffee - -resolveUrl("//cdn.example.com/jquery.js") -// https://cdn.example.com/jquery.js - -resolveUrl("http://foo.org/") -// http://foo.org/ -``` - - -Installation -============ - -- `npm install resolve-url` -- `bower install resolve-url` -- `component install lydell/resolve-url` - -Works with CommonJS, AMD and browser globals, through UMD. - - -Usage -===== - -### `resolveUrl(...urls)` ### - -Pass one or more urls. Resolves the last one to an absolute url, using the -previous ones and `window.location`. - -It’s like starting out on `window.location`, and then clicking links with the -urls as `href` attributes in order, from left to right. - -Unlike Node.js’ [`path.resolve`], this function always goes through all of the -arguments, from left to right. `path.resolve` goes from right to left and only -in the worst case goes through them all. Should that matter. - -Actually, the function is _really_ like clicking a lot of links in series: An -actual `` gets its `href` attribute set for each url! This means that the -url resolution of the browser is used, which makes this module really -light-weight. - -Also note that this functions deals with urls, not paths, so in that respect it -has more in common with Node.js’ [`url.resolve`]. But the arguments are more -like [`path.resolve`]. - -[`path.resolve`]: http://nodejs.org/api/path.html#path_path_resolve_from_to -[`url.resolve`]: http://nodejs.org/api/url.html#url_url_resolve_from_to - - -Tests -===== - -Run `npm test`, which lints the code and then gives you a link to open in a -browser of choice (using `testling`). - - -License -======= - -[The X11 (“MIT”) License](LICENSE). diff --git a/node_modules/resolve-url/resolve-url.js b/node_modules/resolve-url/resolve-url.js deleted file mode 100644 index 19e8d04..0000000 --- a/node_modules/resolve-url/resolve-url.js +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2014 Simon Lydell -// X11 (“MIT”) Licensed. (See LICENSE.) - -void (function(root, factory) { - if (typeof define === "function" && define.amd) { - define(factory) - } else if (typeof exports === "object") { - module.exports = factory() - } else { - root.resolveUrl = factory() - } -}(this, function() { - - function resolveUrl(/* ...urls */) { - var numUrls = arguments.length - - if (numUrls === 0) { - throw new Error("resolveUrl requires at least one argument; got none.") - } - - var base = document.createElement("base") - base.href = arguments[0] - - if (numUrls === 1) { - return base.href - } - - var head = document.getElementsByTagName("head")[0] - head.insertBefore(base, head.firstChild) - - var a = document.createElement("a") - var resolved - - for (var index = 1; index < numUrls; index++) { - a.href = arguments[index] - resolved = a.href - base.href = resolved - } - - head.removeChild(base) - - return resolved - } - - return resolveUrl - -})); diff --git a/node_modules/resolve-url/test/resolve-url.js b/node_modules/resolve-url/test/resolve-url.js deleted file mode 100644 index 18532ed..0000000 --- a/node_modules/resolve-url/test/resolve-url.js +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2014 Simon Lydell -// X11 (“MIT”) Licensed. (See LICENSE.) - -var test = require("tape") - -var resolveUrl = require("../") - -"use strict" - -test("resolveUrl", function(t) { - - t.plan(7) - - t.equal(typeof resolveUrl, "function", "is a function") - - t.equal( - resolveUrl("https://example.com/"), - "https://example.com/" - ) - - var loc = "https://example.com/articles/resolving-urls/edit" - - t.equal( - resolveUrl(loc, "remove"), - "https://example.com/articles/resolving-urls/remove" - ) - - t.equal( - resolveUrl(loc, "/static/scripts/app.js"), - "https://example.com/static/scripts/app.js" - ) - - t.equal( - resolveUrl(loc, "/static/scripts/app.js", "../source-maps/app.js.map"), - "https://example.com/static/source-maps/app.js.map" - ) - - t.equal( - resolveUrl(loc, "/static/scripts/app.js", "../source-maps/app.js.map", "../coffee/app.coffee"), - "https://example.com/static/coffee/app.coffee" - ) - - t.equal( - resolveUrl(loc, "//cdn.example.com/jquery.js"), - "https://cdn.example.com/jquery.js" - ) - -}) - -test("edge cases", function(t) { - - t.plan(4) - - t["throws"](resolveUrl, /at least one argument/, "throws with no arguments") - - var accidentallyUndefined - var result - t.doesNotThrow( - function() { result = resolveUrl(accidentallyUndefined) }, - "undefined is still an argument" - ) - t.ok(result.match(/\/undefined$/), "undefined is stringified") - - t.equal( - resolveUrl("http://foo.org/test", undefined, {}, ["a/b"], null), - "http://foo.org/a/null", - "arguments are stringified" - ) - -}) diff --git a/node_modules/ret/LICENSE b/node_modules/ret/LICENSE deleted file mode 100644 index b351ee8..0000000 --- a/node_modules/ret/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (C) 2011 by Roly Fentanes - -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/ret/README.md b/node_modules/ret/README.md deleted file mode 100644 index 28563e1..0000000 --- a/node_modules/ret/README.md +++ /dev/null @@ -1,183 +0,0 @@ -# Regular Expression Tokenizer - -Tokenizes strings that represent a regular expressions. - -[![Build Status](https://secure.travis-ci.org/fent/ret.js.svg)](http://travis-ci.org/fent/ret.js) -[![Dependency Status](https://david-dm.org/fent/ret.js.svg)](https://david-dm.org/fent/ret.js) -[![codecov](https://codecov.io/gh/fent/ret.js/branch/master/graph/badge.svg)](https://codecov.io/gh/fent/ret.js) - -# Usage - -```js -var ret = require('ret'); - -var tokens = ret(/foo|bar/.source); -``` - -`tokens` will contain the following object - -```js -{ - "type": ret.types.ROOT - "options": [ - [ { "type": ret.types.CHAR, "value", 102 }, - { "type": ret.types.CHAR, "value", 111 }, - { "type": ret.types.CHAR, "value", 111 } ], - [ { "type": ret.types.CHAR, "value", 98 }, - { "type": ret.types.CHAR, "value", 97 }, - { "type": ret.types.CHAR, "value", 114 } ] - ] -} -``` - -# Token Types - -`ret.types` is a collection of the various token types exported by ret. - -### ROOT - -Only used in the root of the regexp. This is needed due to the posibility of the root containing a pipe `|` character. In that case, the token will have an `options` key that will be an array of arrays of tokens. If not, it will contain a `stack` key that is an array of tokens. - -```js -{ - "type": ret.types.ROOT, - "stack": [token1, token2...], -} -``` - -```js -{ - "type": ret.types.ROOT, - "options" [ - [token1, token2...], - [othertoken1, othertoken2...] - ... - ], -} -``` - -### GROUP - -Groups contain tokens that are inside of a parenthesis. If the group begins with `?` followed by another character, it's a special type of group. A ':' tells the group not to be remembered when `exec` is used. '=' means the previous token matches only if followed by this group, and '!' means the previous token matches only if NOT followed. - -Like root, it can contain an `options` key instead of `stack` if there is a pipe. - -```js -{ - "type": ret.types.GROUP, - "remember" true, - "followedBy": false, - "notFollowedBy": false, - "stack": [token1, token2...], -} -``` - -```js -{ - "type": ret.types.GROUP, - "remember" true, - "followedBy": false, - "notFollowedBy": false, - "options" [ - [token1, token2...], - [othertoken1, othertoken2...] - ... - ], -} -``` - -### POSITION - -`\b`, `\B`, `^`, and `$` specify positions in the regexp. - -```js -{ - "type": ret.types.POSITION, - "value": "^", -} -``` - -### SET - -Contains a key `set` specifying what tokens are allowed and a key `not` specifying if the set should be negated. A set can contain other sets, ranges, and characters. - -```js -{ - "type": ret.types.SET, - "set": [token1, token2...], - "not": false, -} -``` - -### RANGE - -Used in set tokens to specify a character range. `from` and `to` are character codes. - -```js -{ - "type": ret.types.RANGE, - "from": 97, - "to": 122, -} -``` - -### REPETITION - -```js -{ - "type": ret.types.REPETITION, - "min": 0, - "max": Infinity, - "value": token, -} -``` - -### REFERENCE - -References a group token. `value` is 1-9. - -```js -{ - "type": ret.types.REFERENCE, - "value": 1, -} -``` - -### CHAR - -Represents a single character token. `value` is the character code. This might seem a bit cluttering instead of concatenating characters together. But since repetition tokens only repeat the last token and not the last clause like the pipe, it's simpler to do it this way. - -```js -{ - "type": ret.types.CHAR, - "value": 123, -} -``` - -## Errors - -ret.js will throw errors if given a string with an invalid regular expression. All possible errors are - -* Invalid group. When a group with an immediate `?` character is followed by an invalid character. It can only be followed by `!`, `=`, or `:`. Example: `/(?_abc)/` -* Nothing to repeat. Thrown when a repetitional token is used as the first token in the current clause, as in right in the beginning of the regexp or group, or right after a pipe. Example: `/foo|?bar/`, `/{1,3}foo|bar/`, `/foo(+bar)/` -* Unmatched ). A group was not opened, but was closed. Example: `/hello)2u/` -* Unterminated group. A group was not closed. Example: `/(1(23)4/` -* Unterminated character class. A custom character set was not closed. Example: `/[abc/` - - -# Install - - npm install ret - - -# Tests - -Tests are written with [vows](http://vowsjs.org/) - -```bash -npm test -``` - -# License - -MIT diff --git a/node_modules/ret/lib/index.js b/node_modules/ret/lib/index.js deleted file mode 100644 index 0e151c3..0000000 --- a/node_modules/ret/lib/index.js +++ /dev/null @@ -1,282 +0,0 @@ -var util = require('./util'); -var types = require('./types'); -var sets = require('./sets'); -var positions = require('./positions'); - - -module.exports = function(regexpStr) { - var i = 0, l, c, - start = { type: types.ROOT, stack: []}, - - // Keep track of last clause/group and stack. - lastGroup = start, - last = start.stack, - groupStack = []; - - - var repeatErr = function(i) { - util.error(regexpStr, 'Nothing to repeat at column ' + (i - 1)); - }; - - // Decode a few escaped characters. - var str = util.strToChars(regexpStr); - l = str.length; - - // Iterate through each character in string. - while (i < l) { - c = str[i++]; - - switch (c) { - // Handle escaped characters, inclues a few sets. - case '\\': - c = str[i++]; - - switch (c) { - case 'b': - last.push(positions.wordBoundary()); - break; - - case 'B': - last.push(positions.nonWordBoundary()); - break; - - case 'w': - last.push(sets.words()); - break; - - case 'W': - last.push(sets.notWords()); - break; - - case 'd': - last.push(sets.ints()); - break; - - case 'D': - last.push(sets.notInts()); - break; - - case 's': - last.push(sets.whitespace()); - break; - - case 'S': - last.push(sets.notWhitespace()); - break; - - default: - // Check if c is integer. - // In which case it's a reference. - if (/\d/.test(c)) { - last.push({ type: types.REFERENCE, value: parseInt(c, 10) }); - - // Escaped character. - } else { - last.push({ type: types.CHAR, value: c.charCodeAt(0) }); - } - } - - break; - - - // Positionals. - case '^': - last.push(positions.begin()); - break; - - case '$': - last.push(positions.end()); - break; - - - // Handle custom sets. - case '[': - // Check if this class is 'anti' i.e. [^abc]. - var not; - if (str[i] === '^') { - not = true; - i++; - } else { - not = false; - } - - // Get all the characters in class. - var classTokens = util.tokenizeClass(str.slice(i), regexpStr); - - // Increase index by length of class. - i += classTokens[1]; - last.push({ - type: types.SET, - set: classTokens[0], - not: not, - }); - - break; - - - // Class of any character except \n. - case '.': - last.push(sets.anyChar()); - break; - - - // Push group onto stack. - case '(': - // Create group. - var group = { - type: types.GROUP, - stack: [], - remember: true, - }; - - c = str[i]; - - // If if this is a special kind of group. - if (c === '?') { - c = str[i + 1]; - i += 2; - - // Match if followed by. - if (c === '=') { - group.followedBy = true; - - // Match if not followed by. - } else if (c === '!') { - group.notFollowedBy = true; - - } else if (c !== ':') { - util.error(regexpStr, - 'Invalid group, character \'' + c + - '\' after \'?\' at column ' + (i - 1)); - } - - group.remember = false; - } - - // Insert subgroup into current group stack. - last.push(group); - - // Remember the current group for when the group closes. - groupStack.push(lastGroup); - - // Make this new group the current group. - lastGroup = group; - last = group.stack; - break; - - - // Pop group out of stack. - case ')': - if (groupStack.length === 0) { - util.error(regexpStr, 'Unmatched ) at column ' + (i - 1)); - } - lastGroup = groupStack.pop(); - - // Check if this group has a PIPE. - // To get back the correct last stack. - last = lastGroup.options ? - lastGroup.options[lastGroup.options.length - 1] : lastGroup.stack; - break; - - - // Use pipe character to give more choices. - case '|': - // Create array where options are if this is the first PIPE - // in this clause. - if (!lastGroup.options) { - lastGroup.options = [lastGroup.stack]; - delete lastGroup.stack; - } - - // Create a new stack and add to options for rest of clause. - var stack = []; - lastGroup.options.push(stack); - last = stack; - break; - - - // Repetition. - // For every repetition, remove last element from last stack - // then insert back a RANGE object. - // This design is chosen because there could be more than - // one repetition symbols in a regex i.e. `a?+{2,3}`. - case '{': - var rs = /^(\d+)(,(\d+)?)?\}/.exec(str.slice(i)), min, max; - if (rs !== null) { - if (last.length === 0) { - repeatErr(i); - } - min = parseInt(rs[1], 10); - max = rs[2] ? rs[3] ? parseInt(rs[3], 10) : Infinity : min; - i += rs[0].length; - - last.push({ - type: types.REPETITION, - min: min, - max: max, - value: last.pop(), - }); - } else { - last.push({ - type: types.CHAR, - value: 123, - }); - } - break; - - case '?': - if (last.length === 0) { - repeatErr(i); - } - last.push({ - type: types.REPETITION, - min: 0, - max: 1, - value: last.pop(), - }); - break; - - case '+': - if (last.length === 0) { - repeatErr(i); - } - last.push({ - type: types.REPETITION, - min: 1, - max: Infinity, - value: last.pop(), - }); - break; - - case '*': - if (last.length === 0) { - repeatErr(i); - } - last.push({ - type: types.REPETITION, - min: 0, - max: Infinity, - value: last.pop(), - }); - break; - - - // Default is a character that is not `\[](){}?+*^$`. - default: - last.push({ - type: types.CHAR, - value: c.charCodeAt(0), - }); - } - - } - - // Check if any groups have not been closed. - if (groupStack.length !== 0) { - util.error(regexpStr, 'Unterminated group'); - } - - return start; -}; - -module.exports.types = types; diff --git a/node_modules/ret/lib/positions.js b/node_modules/ret/lib/positions.js deleted file mode 100644 index 80677ee..0000000 --- a/node_modules/ret/lib/positions.js +++ /dev/null @@ -1,17 +0,0 @@ -var types = require('./types'); - -exports.wordBoundary = function() { - return { type: types.POSITION, value: 'b' }; -}; - -exports.nonWordBoundary = function() { - return { type: types.POSITION, value: 'B' }; -}; - -exports.begin = function() { - return { type: types.POSITION, value: '^' }; -}; - -exports.end = function() { - return { type: types.POSITION, value: '$' }; -}; diff --git a/node_modules/ret/lib/sets.js b/node_modules/ret/lib/sets.js deleted file mode 100644 index 5fb6be5..0000000 --- a/node_modules/ret/lib/sets.js +++ /dev/null @@ -1,82 +0,0 @@ -var types = require('./types'); - -var INTS = function() { - return [{ type: types.RANGE , from: 48, to: 57 }]; -}; - -var WORDS = function() { - return [ - { type: types.CHAR, value: 95 }, - { type: types.RANGE, from: 97, to: 122 }, - { type: types.RANGE, from: 65, to: 90 } - ].concat(INTS()); -}; - -var WHITESPACE = function() { - return [ - { type: types.CHAR, value: 9 }, - { type: types.CHAR, value: 10 }, - { type: types.CHAR, value: 11 }, - { type: types.CHAR, value: 12 }, - { type: types.CHAR, value: 13 }, - { type: types.CHAR, value: 32 }, - { type: types.CHAR, value: 160 }, - { type: types.CHAR, value: 5760 }, - { type: types.CHAR, value: 6158 }, - { type: types.CHAR, value: 8192 }, - { type: types.CHAR, value: 8193 }, - { type: types.CHAR, value: 8194 }, - { type: types.CHAR, value: 8195 }, - { type: types.CHAR, value: 8196 }, - { type: types.CHAR, value: 8197 }, - { type: types.CHAR, value: 8198 }, - { type: types.CHAR, value: 8199 }, - { type: types.CHAR, value: 8200 }, - { type: types.CHAR, value: 8201 }, - { type: types.CHAR, value: 8202 }, - { type: types.CHAR, value: 8232 }, - { type: types.CHAR, value: 8233 }, - { type: types.CHAR, value: 8239 }, - { type: types.CHAR, value: 8287 }, - { type: types.CHAR, value: 12288 }, - { type: types.CHAR, value: 65279 } - ]; -}; - -var NOTANYCHAR = function() { - return [ - { type: types.CHAR, value: 10 }, - { type: types.CHAR, value: 13 }, - { type: types.CHAR, value: 8232 }, - { type: types.CHAR, value: 8233 }, - ]; -}; - -// Predefined class objects. -exports.words = function() { - return { type: types.SET, set: WORDS(), not: false }; -}; - -exports.notWords = function() { - return { type: types.SET, set: WORDS(), not: true }; -}; - -exports.ints = function() { - return { type: types.SET, set: INTS(), not: false }; -}; - -exports.notInts = function() { - return { type: types.SET, set: INTS(), not: true }; -}; - -exports.whitespace = function() { - return { type: types.SET, set: WHITESPACE(), not: false }; -}; - -exports.notWhitespace = function() { - return { type: types.SET, set: WHITESPACE(), not: true }; -}; - -exports.anyChar = function() { - return { type: types.SET, set: NOTANYCHAR(), not: true }; -}; diff --git a/node_modules/ret/lib/types.js b/node_modules/ret/lib/types.js deleted file mode 100644 index 9484145..0000000 --- a/node_modules/ret/lib/types.js +++ /dev/null @@ -1,10 +0,0 @@ -module.exports = { - ROOT : 0, - GROUP : 1, - POSITION : 2, - SET : 3, - RANGE : 4, - REPETITION : 5, - REFERENCE : 6, - CHAR : 7, -}; diff --git a/node_modules/ret/lib/util.js b/node_modules/ret/lib/util.js deleted file mode 100644 index 97d8cf5..0000000 --- a/node_modules/ret/lib/util.js +++ /dev/null @@ -1,111 +0,0 @@ -var types = require('./types'); -var sets = require('./sets'); - - -// All of these are private and only used by randexp. -// It's assumed that they will always be called with the correct input. - -var CTRL = '@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^ ?'; -var SLSH = { '0': 0, 't': 9, 'n': 10, 'v': 11, 'f': 12, 'r': 13 }; - -/** - * Finds character representations in str and convert all to - * their respective characters - * - * @param {String} str - * @return {String} - */ -exports.strToChars = function(str) { - /* jshint maxlen: false */ - var chars_regex = /(\[\\b\])|(\\)?\\(?:u([A-F0-9]{4})|x([A-F0-9]{2})|(0?[0-7]{2})|c([@A-Z\[\\\]\^?])|([0tnvfr]))/g; - str = str.replace(chars_regex, function(s, b, lbs, a16, b16, c8, dctrl, eslsh) { - if (lbs) { - return s; - } - - var code = b ? 8 : - a16 ? parseInt(a16, 16) : - b16 ? parseInt(b16, 16) : - c8 ? parseInt(c8, 8) : - dctrl ? CTRL.indexOf(dctrl) : - SLSH[eslsh]; - - var c = String.fromCharCode(code); - - // Escape special regex characters. - if (/[\[\]{}\^$.|?*+()]/.test(c)) { - c = '\\' + c; - } - - return c; - }); - - return str; -}; - - -/** - * turns class into tokens - * reads str until it encounters a ] not preceeded by a \ - * - * @param {String} str - * @param {String} regexpStr - * @return {Array., Number>} - */ -exports.tokenizeClass = function(str, regexpStr) { - /* jshint maxlen: false */ - var tokens = []; - var regexp = /\\(?:(w)|(d)|(s)|(W)|(D)|(S))|((?:(?:\\)(.)|([^\]\\]))-(?:\\)?([^\]]))|(\])|(?:\\)?(.)/g; - var rs, c; - - - while ((rs = regexp.exec(str)) != null) { - if (rs[1]) { - tokens.push(sets.words()); - - } else if (rs[2]) { - tokens.push(sets.ints()); - - } else if (rs[3]) { - tokens.push(sets.whitespace()); - - } else if (rs[4]) { - tokens.push(sets.notWords()); - - } else if (rs[5]) { - tokens.push(sets.notInts()); - - } else if (rs[6]) { - tokens.push(sets.notWhitespace()); - - } else if (rs[7]) { - tokens.push({ - type: types.RANGE, - from: (rs[8] || rs[9]).charCodeAt(0), - to: rs[10].charCodeAt(0), - }); - - } else if (c = rs[12]) { - tokens.push({ - type: types.CHAR, - value: c.charCodeAt(0), - }); - - } else { - return [tokens, regexp.lastIndex]; - } - } - - exports.error(regexpStr, 'Unterminated character class'); -}; - - -/** - * Shortcut to throw errors. - * - * @param {String} regexp - * @param {String} msg - */ -exports.error = function(regexp, msg) { - throw new SyntaxError('Invalid regular expression: /' + regexp + '/: ' + msg); -}; diff --git a/node_modules/ret/package.json b/node_modules/ret/package.json deleted file mode 100644 index 2fde9a4..0000000 --- a/node_modules/ret/package.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "ret", - "description": "Tokenizes a string that represents a regular expression.", - "keywords": [ - "regex", - "regexp", - "regular expression", - "parser", - "tokenizer" - ], - "version": "0.1.15", - "repository": { - "type": "git", - "url": "git://github.com/fent/ret.js.git" - }, - "author": "Roly Fentanes (https://github.com/fent)", - "main": "./lib/index.js", - "files": [ - "lib" - ], - "scripts": { - "test": "istanbul cover vows -- --spec test/*-test.js" - }, - "directories": { - "lib": "./lib" - }, - "devDependencies": { - "istanbul": "*", - "vows": "*" - }, - "engines": { - "node": ">=0.12" - }, - "license": "MIT" -} diff --git a/node_modules/safe-buffer/LICENSE b/node_modules/safe-buffer/LICENSE deleted file mode 100644 index 0c068ce..0000000 --- a/node_modules/safe-buffer/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Feross Aboukhadijeh - -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/safe-buffer/README.md b/node_modules/safe-buffer/README.md deleted file mode 100644 index e9a81af..0000000 --- a/node_modules/safe-buffer/README.md +++ /dev/null @@ -1,584 +0,0 @@ -# safe-buffer [![travis][travis-image]][travis-url] [![npm][npm-image]][npm-url] [![downloads][downloads-image]][downloads-url] [![javascript style guide][standard-image]][standard-url] - -[travis-image]: https://img.shields.io/travis/feross/safe-buffer/master.svg -[travis-url]: https://travis-ci.org/feross/safe-buffer -[npm-image]: https://img.shields.io/npm/v/safe-buffer.svg -[npm-url]: https://npmjs.org/package/safe-buffer -[downloads-image]: https://img.shields.io/npm/dm/safe-buffer.svg -[downloads-url]: https://npmjs.org/package/safe-buffer -[standard-image]: https://img.shields.io/badge/code_style-standard-brightgreen.svg -[standard-url]: https://standardjs.com - -#### Safer Node.js Buffer API - -**Use the new Node.js Buffer APIs (`Buffer.from`, `Buffer.alloc`, -`Buffer.allocUnsafe`, `Buffer.allocUnsafeSlow`) in all versions of Node.js.** - -**Uses the built-in implementation when available.** - -## install - -``` -npm install safe-buffer -``` - -## usage - -The goal of this package is to provide a safe replacement for the node.js `Buffer`. - -It's a drop-in replacement for `Buffer`. You can use it by adding one `require` line to -the top of your node.js modules: - -```js -var Buffer = require('safe-buffer').Buffer - -// Existing buffer code will continue to work without issues: - -new Buffer('hey', 'utf8') -new Buffer([1, 2, 3], 'utf8') -new Buffer(obj) -new Buffer(16) // create an uninitialized buffer (potentially unsafe) - -// But you can use these new explicit APIs to make clear what you want: - -Buffer.from('hey', 'utf8') // convert from many types to a Buffer -Buffer.alloc(16) // create a zero-filled buffer (safe) -Buffer.allocUnsafe(16) // create an uninitialized buffer (potentially unsafe) -``` - -## api - -### Class Method: Buffer.from(array) - - -* `array` {Array} - -Allocates a new `Buffer` using an `array` of octets. - -```js -const buf = Buffer.from([0x62,0x75,0x66,0x66,0x65,0x72]); - // creates a new Buffer containing ASCII bytes - // ['b','u','f','f','e','r'] -``` - -A `TypeError` will be thrown if `array` is not an `Array`. - -### Class Method: Buffer.from(arrayBuffer[, byteOffset[, length]]) - - -* `arrayBuffer` {ArrayBuffer} The `.buffer` property of a `TypedArray` or - a `new ArrayBuffer()` -* `byteOffset` {Number} Default: `0` -* `length` {Number} Default: `arrayBuffer.length - byteOffset` - -When passed a reference to the `.buffer` property of a `TypedArray` instance, -the newly created `Buffer` will share the same allocated memory as the -TypedArray. - -```js -const arr = new Uint16Array(2); -arr[0] = 5000; -arr[1] = 4000; - -const buf = Buffer.from(arr.buffer); // shares the memory with arr; - -console.log(buf); - // Prints: - -// changing the TypedArray changes the Buffer also -arr[1] = 6000; - -console.log(buf); - // Prints: -``` - -The optional `byteOffset` and `length` arguments specify a memory range within -the `arrayBuffer` that will be shared by the `Buffer`. - -```js -const ab = new ArrayBuffer(10); -const buf = Buffer.from(ab, 0, 2); -console.log(buf.length); - // Prints: 2 -``` - -A `TypeError` will be thrown if `arrayBuffer` is not an `ArrayBuffer`. - -### Class Method: Buffer.from(buffer) - - -* `buffer` {Buffer} - -Copies the passed `buffer` data onto a new `Buffer` instance. - -```js -const buf1 = Buffer.from('buffer'); -const buf2 = Buffer.from(buf1); - -buf1[0] = 0x61; -console.log(buf1.toString()); - // 'auffer' -console.log(buf2.toString()); - // 'buffer' (copy is not changed) -``` - -A `TypeError` will be thrown if `buffer` is not a `Buffer`. - -### Class Method: Buffer.from(str[, encoding]) - - -* `str` {String} String to encode. -* `encoding` {String} Encoding to use, Default: `'utf8'` - -Creates a new `Buffer` containing the given JavaScript string `str`. If -provided, the `encoding` parameter identifies the character encoding. -If not provided, `encoding` defaults to `'utf8'`. - -```js -const buf1 = Buffer.from('this is a tést'); -console.log(buf1.toString()); - // prints: this is a tést -console.log(buf1.toString('ascii')); - // prints: this is a tC)st - -const buf2 = Buffer.from('7468697320697320612074c3a97374', 'hex'); -console.log(buf2.toString()); - // prints: this is a tést -``` - -A `TypeError` will be thrown if `str` is not a string. - -### Class Method: Buffer.alloc(size[, fill[, encoding]]) - - -* `size` {Number} -* `fill` {Value} Default: `undefined` -* `encoding` {String} Default: `utf8` - -Allocates a new `Buffer` of `size` bytes. If `fill` is `undefined`, the -`Buffer` will be *zero-filled*. - -```js -const buf = Buffer.alloc(5); -console.log(buf); - // -``` - -The `size` must be less than or equal to the value of -`require('buffer').kMaxLength` (on 64-bit architectures, `kMaxLength` is -`(2^31)-1`). Otherwise, a [`RangeError`][] is thrown. A zero-length Buffer will -be created if a `size` less than or equal to 0 is specified. - -If `fill` is specified, the allocated `Buffer` will be initialized by calling -`buf.fill(fill)`. See [`buf.fill()`][] for more information. - -```js -const buf = Buffer.alloc(5, 'a'); -console.log(buf); - // -``` - -If both `fill` and `encoding` are specified, the allocated `Buffer` will be -initialized by calling `buf.fill(fill, encoding)`. For example: - -```js -const buf = Buffer.alloc(11, 'aGVsbG8gd29ybGQ=', 'base64'); -console.log(buf); - // -``` - -Calling `Buffer.alloc(size)` can be significantly slower than the alternative -`Buffer.allocUnsafe(size)` but ensures that the newly created `Buffer` instance -contents will *never contain sensitive data*. - -A `TypeError` will be thrown if `size` is not a number. - -### Class Method: Buffer.allocUnsafe(size) - - -* `size` {Number} - -Allocates a new *non-zero-filled* `Buffer` of `size` bytes. The `size` must -be less than or equal to the value of `require('buffer').kMaxLength` (on 64-bit -architectures, `kMaxLength` is `(2^31)-1`). Otherwise, a [`RangeError`][] is -thrown. A zero-length Buffer will be created if a `size` less than or equal to -0 is specified. - -The underlying memory for `Buffer` instances created in this way is *not -initialized*. The contents of the newly created `Buffer` are unknown and -*may contain sensitive data*. Use [`buf.fill(0)`][] to initialize such -`Buffer` instances to zeroes. - -```js -const buf = Buffer.allocUnsafe(5); -console.log(buf); - // - // (octets will be different, every time) -buf.fill(0); -console.log(buf); - // -``` - -A `TypeError` will be thrown if `size` is not a number. - -Note that the `Buffer` module pre-allocates an internal `Buffer` instance of -size `Buffer.poolSize` that is used as a pool for the fast allocation of new -`Buffer` instances created using `Buffer.allocUnsafe(size)` (and the deprecated -`new Buffer(size)` constructor) only when `size` is less than or equal to -`Buffer.poolSize >> 1` (floor of `Buffer.poolSize` divided by two). The default -value of `Buffer.poolSize` is `8192` but can be modified. - -Use of this pre-allocated internal memory pool is a key difference between -calling `Buffer.alloc(size, fill)` vs. `Buffer.allocUnsafe(size).fill(fill)`. -Specifically, `Buffer.alloc(size, fill)` will *never* use the internal Buffer -pool, while `Buffer.allocUnsafe(size).fill(fill)` *will* use the internal -Buffer pool if `size` is less than or equal to half `Buffer.poolSize`. The -difference is subtle but can be important when an application requires the -additional performance that `Buffer.allocUnsafe(size)` provides. - -### Class Method: Buffer.allocUnsafeSlow(size) - - -* `size` {Number} - -Allocates a new *non-zero-filled* and non-pooled `Buffer` of `size` bytes. The -`size` must be less than or equal to the value of -`require('buffer').kMaxLength` (on 64-bit architectures, `kMaxLength` is -`(2^31)-1`). Otherwise, a [`RangeError`][] is thrown. A zero-length Buffer will -be created if a `size` less than or equal to 0 is specified. - -The underlying memory for `Buffer` instances created in this way is *not -initialized*. The contents of the newly created `Buffer` are unknown and -*may contain sensitive data*. Use [`buf.fill(0)`][] to initialize such -`Buffer` instances to zeroes. - -When using `Buffer.allocUnsafe()` to allocate new `Buffer` instances, -allocations under 4KB are, by default, sliced from a single pre-allocated -`Buffer`. This allows applications to avoid the garbage collection overhead of -creating many individually allocated Buffers. This approach improves both -performance and memory usage by eliminating the need to track and cleanup as -many `Persistent` objects. - -However, in the case where a developer may need to retain a small chunk of -memory from a pool for an indeterminate amount of time, it may be appropriate -to create an un-pooled Buffer instance using `Buffer.allocUnsafeSlow()` then -copy out the relevant bits. - -```js -// need to keep around a few small chunks of memory -const store = []; - -socket.on('readable', () => { - const data = socket.read(); - // allocate for retained data - const sb = Buffer.allocUnsafeSlow(10); - // copy the data into the new allocation - data.copy(sb, 0, 0, 10); - store.push(sb); -}); -``` - -Use of `Buffer.allocUnsafeSlow()` should be used only as a last resort *after* -a developer has observed undue memory retention in their applications. - -A `TypeError` will be thrown if `size` is not a number. - -### All the Rest - -The rest of the `Buffer` API is exactly the same as in node.js. -[See the docs](https://nodejs.org/api/buffer.html). - - -## Related links - -- [Node.js issue: Buffer(number) is unsafe](https://github.com/nodejs/node/issues/4660) -- [Node.js Enhancement Proposal: Buffer.from/Buffer.alloc/Buffer.zalloc/Buffer() soft-deprecate](https://github.com/nodejs/node-eps/pull/4) - -## Why is `Buffer` unsafe? - -Today, the node.js `Buffer` constructor is overloaded to handle many different argument -types like `String`, `Array`, `Object`, `TypedArrayView` (`Uint8Array`, etc.), -`ArrayBuffer`, and also `Number`. - -The API is optimized for convenience: you can throw any type at it, and it will try to do -what you want. - -Because the Buffer constructor is so powerful, you often see code like this: - -```js -// Convert UTF-8 strings to hex -function toHex (str) { - return new Buffer(str).toString('hex') -} -``` - -***But what happens if `toHex` is called with a `Number` argument?*** - -### Remote Memory Disclosure - -If an attacker can make your program call the `Buffer` constructor with a `Number` -argument, then they can make it allocate uninitialized memory from the node.js process. -This could potentially disclose TLS private keys, user data, or database passwords. - -When the `Buffer` constructor is passed a `Number` argument, it returns an -**UNINITIALIZED** block of memory of the specified `size`. When you create a `Buffer` like -this, you **MUST** overwrite the contents before returning it to the user. - -From the [node.js docs](https://nodejs.org/api/buffer.html#buffer_new_buffer_size): - -> `new Buffer(size)` -> -> - `size` Number -> -> The underlying memory for `Buffer` instances created in this way is not initialized. -> **The contents of a newly created `Buffer` are unknown and could contain sensitive -> data.** Use `buf.fill(0)` to initialize a Buffer to zeroes. - -(Emphasis our own.) - -Whenever the programmer intended to create an uninitialized `Buffer` you often see code -like this: - -```js -var buf = new Buffer(16) - -// Immediately overwrite the uninitialized buffer with data from another buffer -for (var i = 0; i < buf.length; i++) { - buf[i] = otherBuf[i] -} -``` - - -### Would this ever be a problem in real code? - -Yes. It's surprisingly common to forget to check the type of your variables in a -dynamically-typed language like JavaScript. - -Usually the consequences of assuming the wrong type is that your program crashes with an -uncaught exception. But the failure mode for forgetting to check the type of arguments to -the `Buffer` constructor is more catastrophic. - -Here's an example of a vulnerable service that takes a JSON payload and converts it to -hex: - -```js -// Take a JSON payload {str: "some string"} and convert it to hex -var server = http.createServer(function (req, res) { - var data = '' - req.setEncoding('utf8') - req.on('data', function (chunk) { - data += chunk - }) - req.on('end', function () { - var body = JSON.parse(data) - res.end(new Buffer(body.str).toString('hex')) - }) -}) - -server.listen(8080) -``` - -In this example, an http client just has to send: - -```json -{ - "str": 1000 -} -``` - -and it will get back 1,000 bytes of uninitialized memory from the server. - -This is a very serious bug. It's similar in severity to the -[the Heartbleed bug](http://heartbleed.com/) that allowed disclosure of OpenSSL process -memory by remote attackers. - - -### Which real-world packages were vulnerable? - -#### [`bittorrent-dht`](https://www.npmjs.com/package/bittorrent-dht) - -[Mathias Buus](https://github.com/mafintosh) and I -([Feross Aboukhadijeh](http://feross.org/)) found this issue in one of our own packages, -[`bittorrent-dht`](https://www.npmjs.com/package/bittorrent-dht). The bug would allow -anyone on the internet to send a series of messages to a user of `bittorrent-dht` and get -them to reveal 20 bytes at a time of uninitialized memory from the node.js process. - -Here's -[the commit](https://github.com/feross/bittorrent-dht/commit/6c7da04025d5633699800a99ec3fbadf70ad35b8) -that fixed it. We released a new fixed version, created a -[Node Security Project disclosure](https://nodesecurity.io/advisories/68), and deprecated all -vulnerable versions on npm so users will get a warning to upgrade to a newer version. - -#### [`ws`](https://www.npmjs.com/package/ws) - -That got us wondering if there were other vulnerable packages. Sure enough, within a short -period of time, we found the same issue in [`ws`](https://www.npmjs.com/package/ws), the -most popular WebSocket implementation in node.js. - -If certain APIs were called with `Number` parameters instead of `String` or `Buffer` as -expected, then uninitialized server memory would be disclosed to the remote peer. - -These were the vulnerable methods: - -```js -socket.send(number) -socket.ping(number) -socket.pong(number) -``` - -Here's a vulnerable socket server with some echo functionality: - -```js -server.on('connection', function (socket) { - socket.on('message', function (message) { - message = JSON.parse(message) - if (message.type === 'echo') { - socket.send(message.data) // send back the user's message - } - }) -}) -``` - -`socket.send(number)` called on the server, will disclose server memory. - -Here's [the release](https://github.com/websockets/ws/releases/tag/1.0.1) where the issue -was fixed, with a more detailed explanation. Props to -[Arnout Kazemier](https://github.com/3rd-Eden) for the quick fix. Here's the -[Node Security Project disclosure](https://nodesecurity.io/advisories/67). - - -### What's the solution? - -It's important that node.js offers a fast way to get memory otherwise performance-critical -applications would needlessly get a lot slower. - -But we need a better way to *signal our intent* as programmers. **When we want -uninitialized memory, we should request it explicitly.** - -Sensitive functionality should not be packed into a developer-friendly API that loosely -accepts many different types. This type of API encourages the lazy practice of passing -variables in without checking the type very carefully. - -#### A new API: `Buffer.allocUnsafe(number)` - -The functionality of creating buffers with uninitialized memory should be part of another -API. We propose `Buffer.allocUnsafe(number)`. This way, it's not part of an API that -frequently gets user input of all sorts of different types passed into it. - -```js -var buf = Buffer.allocUnsafe(16) // careful, uninitialized memory! - -// Immediately overwrite the uninitialized buffer with data from another buffer -for (var i = 0; i < buf.length; i++) { - buf[i] = otherBuf[i] -} -``` - - -### How do we fix node.js core? - -We sent [a PR to node.js core](https://github.com/nodejs/node/pull/4514) (merged as -`semver-major`) which defends against one case: - -```js -var str = 16 -new Buffer(str, 'utf8') -``` - -In this situation, it's implied that the programmer intended the first argument to be a -string, since they passed an encoding as a second argument. Today, node.js will allocate -uninitialized memory in the case of `new Buffer(number, encoding)`, which is probably not -what the programmer intended. - -But this is only a partial solution, since if the programmer does `new Buffer(variable)` -(without an `encoding` parameter) there's no way to know what they intended. If `variable` -is sometimes a number, then uninitialized memory will sometimes be returned. - -### What's the real long-term fix? - -We could deprecate and remove `new Buffer(number)` and use `Buffer.allocUnsafe(number)` when -we need uninitialized memory. But that would break 1000s of packages. - -~~We believe the best solution is to:~~ - -~~1. Change `new Buffer(number)` to return safe, zeroed-out memory~~ - -~~2. Create a new API for creating uninitialized Buffers. We propose: `Buffer.allocUnsafe(number)`~~ - -#### Update - -We now support adding three new APIs: - -- `Buffer.from(value)` - convert from any type to a buffer -- `Buffer.alloc(size)` - create a zero-filled buffer -- `Buffer.allocUnsafe(size)` - create an uninitialized buffer with given size - -This solves the core problem that affected `ws` and `bittorrent-dht` which is -`Buffer(variable)` getting tricked into taking a number argument. - -This way, existing code continues working and the impact on the npm ecosystem will be -minimal. Over time, npm maintainers can migrate performance-critical code to use -`Buffer.allocUnsafe(number)` instead of `new Buffer(number)`. - - -### Conclusion - -We think there's a serious design issue with the `Buffer` API as it exists today. It -promotes insecure software by putting high-risk functionality into a convenient API -with friendly "developer ergonomics". - -This wasn't merely a theoretical exercise because we found the issue in some of the -most popular npm packages. - -Fortunately, there's an easy fix that can be applied today. Use `safe-buffer` in place of -`buffer`. - -```js -var Buffer = require('safe-buffer').Buffer -``` - -Eventually, we hope that node.js core can switch to this new, safer behavior. We believe -the impact on the ecosystem would be minimal since it's not a breaking change. -Well-maintained, popular packages would be updated to use `Buffer.alloc` quickly, while -older, insecure packages would magically become safe from this attack vector. - - -## links - -- [Node.js PR: buffer: throw if both length and enc are passed](https://github.com/nodejs/node/pull/4514) -- [Node Security Project disclosure for `ws`](https://nodesecurity.io/advisories/67) -- [Node Security Project disclosure for`bittorrent-dht`](https://nodesecurity.io/advisories/68) - - -## credit - -The original issues in `bittorrent-dht` -([disclosure](https://nodesecurity.io/advisories/68)) and -`ws` ([disclosure](https://nodesecurity.io/advisories/67)) were discovered by -[Mathias Buus](https://github.com/mafintosh) and -[Feross Aboukhadijeh](http://feross.org/). - -Thanks to [Adam Baldwin](https://github.com/evilpacket) for helping disclose these issues -and for his work running the [Node Security Project](https://nodesecurity.io/). - -Thanks to [John Hiesey](https://github.com/jhiesey) for proofreading this README and -auditing the code. - - -## license - -MIT. Copyright (C) [Feross Aboukhadijeh](http://feross.org) diff --git a/node_modules/safe-buffer/index.d.ts b/node_modules/safe-buffer/index.d.ts deleted file mode 100644 index e9fed80..0000000 --- a/node_modules/safe-buffer/index.d.ts +++ /dev/null @@ -1,187 +0,0 @@ -declare module "safe-buffer" { - export class Buffer { - length: number - write(string: string, offset?: number, length?: number, encoding?: string): number; - toString(encoding?: string, start?: number, end?: number): string; - toJSON(): { type: 'Buffer', data: any[] }; - equals(otherBuffer: Buffer): boolean; - compare(otherBuffer: Buffer, targetStart?: number, targetEnd?: number, sourceStart?: number, sourceEnd?: number): number; - copy(targetBuffer: Buffer, targetStart?: number, sourceStart?: number, sourceEnd?: number): number; - slice(start?: number, end?: number): Buffer; - writeUIntLE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; - writeUIntBE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; - writeIntLE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; - writeIntBE(value: number, offset: number, byteLength: number, noAssert?: boolean): number; - readUIntLE(offset: number, byteLength: number, noAssert?: boolean): number; - readUIntBE(offset: number, byteLength: number, noAssert?: boolean): number; - readIntLE(offset: number, byteLength: number, noAssert?: boolean): number; - readIntBE(offset: number, byteLength: number, noAssert?: boolean): number; - readUInt8(offset: number, noAssert?: boolean): number; - readUInt16LE(offset: number, noAssert?: boolean): number; - readUInt16BE(offset: number, noAssert?: boolean): number; - readUInt32LE(offset: number, noAssert?: boolean): number; - readUInt32BE(offset: number, noAssert?: boolean): number; - readInt8(offset: number, noAssert?: boolean): number; - readInt16LE(offset: number, noAssert?: boolean): number; - readInt16BE(offset: number, noAssert?: boolean): number; - readInt32LE(offset: number, noAssert?: boolean): number; - readInt32BE(offset: number, noAssert?: boolean): number; - readFloatLE(offset: number, noAssert?: boolean): number; - readFloatBE(offset: number, noAssert?: boolean): number; - readDoubleLE(offset: number, noAssert?: boolean): number; - readDoubleBE(offset: number, noAssert?: boolean): number; - swap16(): Buffer; - swap32(): Buffer; - swap64(): Buffer; - writeUInt8(value: number, offset: number, noAssert?: boolean): number; - writeUInt16LE(value: number, offset: number, noAssert?: boolean): number; - writeUInt16BE(value: number, offset: number, noAssert?: boolean): number; - writeUInt32LE(value: number, offset: number, noAssert?: boolean): number; - writeUInt32BE(value: number, offset: number, noAssert?: boolean): number; - writeInt8(value: number, offset: number, noAssert?: boolean): number; - writeInt16LE(value: number, offset: number, noAssert?: boolean): number; - writeInt16BE(value: number, offset: number, noAssert?: boolean): number; - writeInt32LE(value: number, offset: number, noAssert?: boolean): number; - writeInt32BE(value: number, offset: number, noAssert?: boolean): number; - writeFloatLE(value: number, offset: number, noAssert?: boolean): number; - writeFloatBE(value: number, offset: number, noAssert?: boolean): number; - writeDoubleLE(value: number, offset: number, noAssert?: boolean): number; - writeDoubleBE(value: number, offset: number, noAssert?: boolean): number; - fill(value: any, offset?: number, end?: number): this; - indexOf(value: string | number | Buffer, byteOffset?: number, encoding?: string): number; - lastIndexOf(value: string | number | Buffer, byteOffset?: number, encoding?: string): number; - includes(value: string | number | Buffer, byteOffset?: number, encoding?: string): boolean; - - /** - * Allocates a new buffer containing the given {str}. - * - * @param str String to store in buffer. - * @param encoding encoding to use, optional. Default is 'utf8' - */ - constructor (str: string, encoding?: string); - /** - * Allocates a new buffer of {size} octets. - * - * @param size count of octets to allocate. - */ - constructor (size: number); - /** - * Allocates a new buffer containing the given {array} of octets. - * - * @param array The octets to store. - */ - constructor (array: Uint8Array); - /** - * Produces a Buffer backed by the same allocated memory as - * the given {ArrayBuffer}. - * - * - * @param arrayBuffer The ArrayBuffer with which to share memory. - */ - constructor (arrayBuffer: ArrayBuffer); - /** - * Allocates a new buffer containing the given {array} of octets. - * - * @param array The octets to store. - */ - constructor (array: any[]); - /** - * Copies the passed {buffer} data onto a new {Buffer} instance. - * - * @param buffer The buffer to copy. - */ - constructor (buffer: Buffer); - prototype: Buffer; - /** - * Allocates a new Buffer using an {array} of octets. - * - * @param array - */ - static from(array: any[]): Buffer; - /** - * When passed a reference to the .buffer property of a TypedArray instance, - * the newly created Buffer will share the same allocated memory as the TypedArray. - * The optional {byteOffset} and {length} arguments specify a memory range - * within the {arrayBuffer} that will be shared by the Buffer. - * - * @param arrayBuffer The .buffer property of a TypedArray or a new ArrayBuffer() - * @param byteOffset - * @param length - */ - static from(arrayBuffer: ArrayBuffer, byteOffset?: number, length?: number): Buffer; - /** - * Copies the passed {buffer} data onto a new Buffer instance. - * - * @param buffer - */ - static from(buffer: Buffer): Buffer; - /** - * Creates a new Buffer containing the given JavaScript string {str}. - * If provided, the {encoding} parameter identifies the character encoding. - * If not provided, {encoding} defaults to 'utf8'. - * - * @param str - */ - static from(str: string, encoding?: string): Buffer; - /** - * Returns true if {obj} is a Buffer - * - * @param obj object to test. - */ - static isBuffer(obj: any): obj is Buffer; - /** - * Returns true if {encoding} is a valid encoding argument. - * Valid string encodings in Node 0.12: 'ascii'|'utf8'|'utf16le'|'ucs2'(alias of 'utf16le')|'base64'|'binary'(deprecated)|'hex' - * - * @param encoding string to test. - */ - static isEncoding(encoding: string): boolean; - /** - * Gives the actual byte length of a string. encoding defaults to 'utf8'. - * This is not the same as String.prototype.length since that returns the number of characters in a string. - * - * @param string string to test. - * @param encoding encoding used to evaluate (defaults to 'utf8') - */ - static byteLength(string: string, encoding?: string): number; - /** - * Returns a buffer which is the result of concatenating all the buffers in the list together. - * - * If the list has no items, or if the totalLength is 0, then it returns a zero-length buffer. - * If the list has exactly one item, then the first item of the list is returned. - * If the list has more than one item, then a new Buffer is created. - * - * @param list An array of Buffer objects to concatenate - * @param totalLength Total length of the buffers when concatenated. - * If totalLength is not provided, it is read from the buffers in the list. However, this adds an additional loop to the function, so it is faster to provide the length explicitly. - */ - static concat(list: Buffer[], totalLength?: number): Buffer; - /** - * The same as buf1.compare(buf2). - */ - static compare(buf1: Buffer, buf2: Buffer): number; - /** - * Allocates a new buffer of {size} octets. - * - * @param size count of octets to allocate. - * @param fill if specified, buffer will be initialized by calling buf.fill(fill). - * If parameter is omitted, buffer will be filled with zeros. - * @param encoding encoding used for call to buf.fill while initalizing - */ - static alloc(size: number, fill?: string | Buffer | number, encoding?: string): Buffer; - /** - * Allocates a new buffer of {size} octets, leaving memory not initialized, so the contents - * of the newly created Buffer are unknown and may contain sensitive data. - * - * @param size count of octets to allocate - */ - static allocUnsafe(size: number): Buffer; - /** - * Allocates a new non-pooled buffer of {size} octets, leaving memory not initialized, so the contents - * of the newly created Buffer are unknown and may contain sensitive data. - * - * @param size count of octets to allocate - */ - static allocUnsafeSlow(size: number): Buffer; - } -} \ No newline at end of file diff --git a/node_modules/safe-buffer/index.js b/node_modules/safe-buffer/index.js deleted file mode 100644 index 22438da..0000000 --- a/node_modules/safe-buffer/index.js +++ /dev/null @@ -1,62 +0,0 @@ -/* eslint-disable node/no-deprecated-api */ -var buffer = require('buffer') -var Buffer = buffer.Buffer - -// alternative to using Object.keys for old browsers -function copyProps (src, dst) { - for (var key in src) { - dst[key] = src[key] - } -} -if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) { - module.exports = buffer -} else { - // Copy properties from require('buffer') - copyProps(buffer, exports) - exports.Buffer = SafeBuffer -} - -function SafeBuffer (arg, encodingOrOffset, length) { - return Buffer(arg, encodingOrOffset, length) -} - -// Copy static methods from Buffer -copyProps(Buffer, SafeBuffer) - -SafeBuffer.from = function (arg, encodingOrOffset, length) { - if (typeof arg === 'number') { - throw new TypeError('Argument must not be a number') - } - return Buffer(arg, encodingOrOffset, length) -} - -SafeBuffer.alloc = function (size, fill, encoding) { - if (typeof size !== 'number') { - throw new TypeError('Argument must be a number') - } - var buf = Buffer(size) - if (fill !== undefined) { - if (typeof encoding === 'string') { - buf.fill(fill, encoding) - } else { - buf.fill(fill) - } - } else { - buf.fill(0) - } - return buf -} - -SafeBuffer.allocUnsafe = function (size) { - if (typeof size !== 'number') { - throw new TypeError('Argument must be a number') - } - return Buffer(size) -} - -SafeBuffer.allocUnsafeSlow = function (size) { - if (typeof size !== 'number') { - throw new TypeError('Argument must be a number') - } - return buffer.SlowBuffer(size) -} diff --git a/node_modules/safe-buffer/package.json b/node_modules/safe-buffer/package.json deleted file mode 100644 index 623fbc3..0000000 --- a/node_modules/safe-buffer/package.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "safe-buffer", - "description": "Safer Node.js Buffer API", - "version": "5.1.2", - "author": { - "name": "Feross Aboukhadijeh", - "email": "feross@feross.org", - "url": "http://feross.org" - }, - "bugs": { - "url": "https://github.com/feross/safe-buffer/issues" - }, - "devDependencies": { - "standard": "*", - "tape": "^4.0.0" - }, - "homepage": "https://github.com/feross/safe-buffer", - "keywords": [ - "buffer", - "buffer allocate", - "node security", - "safe", - "safe-buffer", - "security", - "uninitialized" - ], - "license": "MIT", - "main": "index.js", - "types": "index.d.ts", - "repository": { - "type": "git", - "url": "git://github.com/feross/safe-buffer.git" - }, - "scripts": { - "test": "standard && tape test/*.js" - } -} diff --git a/node_modules/safe-regex/.travis.yml b/node_modules/safe-regex/.travis.yml deleted file mode 100644 index cc4dba2..0000000 --- a/node_modules/safe-regex/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - "0.8" - - "0.10" diff --git a/node_modules/safe-regex/LICENSE b/node_modules/safe-regex/LICENSE deleted file mode 100644 index ee27ba4..0000000 --- a/node_modules/safe-regex/LICENSE +++ /dev/null @@ -1,18 +0,0 @@ -This software is released under the MIT license: - -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/safe-regex/example/safe.js b/node_modules/safe-regex/example/safe.js deleted file mode 100644 index f486f59..0000000 --- a/node_modules/safe-regex/example/safe.js +++ /dev/null @@ -1,3 +0,0 @@ -var safe = require('../'); -var regex = process.argv.slice(2).join(' '); -console.log(safe(regex)); diff --git a/node_modules/safe-regex/index.js b/node_modules/safe-regex/index.js deleted file mode 100644 index 488f501..0000000 --- a/node_modules/safe-regex/index.js +++ /dev/null @@ -1,43 +0,0 @@ -var parse = require('ret'); -var types = parse.types; - -module.exports = function (re, opts) { - if (!opts) opts = {}; - var replimit = opts.limit === undefined ? 25 : opts.limit; - - if (isRegExp(re)) re = re.source; - else if (typeof re !== 'string') re = String(re); - - try { re = parse(re) } - catch (err) { return false } - - var reps = 0; - return (function walk (node, starHeight) { - if (node.type === types.REPETITION) { - starHeight ++; - reps ++; - if (starHeight > 1) return false; - if (reps > replimit) return false; - } - - if (node.options) { - for (var i = 0, len = node.options.length; i < len; i++) { - var ok = walk({ stack: node.options[i] }, starHeight); - if (!ok) return false; - } - } - var stack = node.stack || (node.value && node.value.stack); - if (!stack) return true; - - for (var i = 0; i < stack.length; i++) { - var ok = walk(stack[i], starHeight); - if (!ok) return false; - } - - return true; - })(re, 0); -}; - -function isRegExp (x) { - return {}.toString.call(x) === '[object RegExp]'; -} diff --git a/node_modules/safe-regex/package.json b/node_modules/safe-regex/package.json deleted file mode 100644 index 0dd631b..0000000 --- a/node_modules/safe-regex/package.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "name": "safe-regex", - "version": "1.1.0", - "description": "detect possibly catastrophic, exponential-time regular expressions", - "main": "index.js", - "dependencies": { - "ret": "~0.1.10" - }, - "devDependencies": { - "tape": "^3.5.0" - }, - "scripts": { - "test": "tape test/*.js" - }, - "testling": { - "files": "test/*.js", - "browsers": [ - "ie/8", "ie/9", "ie/10", - "firefox/latest", - "chrome/latest", - "opera/latest", - "safari/latest" - ] - }, - "repository": { - "type": "git", - "url": "git://github.com/substack/safe-regex.git" - }, - "homepage": "https://github.com/substack/safe-regex", - "keywords": [ - "catastrophic", - "exponential", - "regex", - "safe", - "sandbox" - ], - "author": { - "name": "James Halliday", - "email": "mail@substack.net", - "url": "http://substack.net" - }, - "license": "MIT" -} diff --git a/node_modules/safe-regex/readme.markdown b/node_modules/safe-regex/readme.markdown deleted file mode 100644 index 83673ac..0000000 --- a/node_modules/safe-regex/readme.markdown +++ /dev/null @@ -1,65 +0,0 @@ -# safe-regex - -detect potentially -[catastrophic](http://regular-expressions.mobi/catastrophic.html) -[exponential-time](http://perlgeek.de/blog-en/perl-tips/in-search-of-an-exponetial-regexp.html) -regular expressions by limiting the -[star height](https://en.wikipedia.org/wiki/Star_height) to 1 - -WARNING: This module merely *seems* to work given all the catastrophic regular -expressions I could find scouring the internet, but I don't have enough of a -background in automata to be absolutely sure that this module will catch all -exponential-time cases. - -[![browser support](https://ci.testling.com/substack/safe-regex.png)](https://ci.testling.com/substack/safe-regex) - -[![build status](https://secure.travis-ci.org/substack/safe-regex.png)](http://travis-ci.org/substack/safe-regex) - -# example - -``` js -var safe = require('safe-regex'); -var regex = process.argv.slice(2).join(' '); -console.log(safe(regex)); -``` - -``` -$ node safe.js '(x+x+)+y' -false -$ node safe.js '(beep|boop)*' -true -$ node safe.js '(a+){10}' -false -$ node safe.js '\blocation\s*:[^:\n]+\b(Oakland|San Francisco)\b' -true -``` - -# methods - -``` js -var safe = require('safe-regex') -``` - -## var ok = safe(re, opts={}) - -Return a boolean `ok` whether or not the regex `re` is safe and not possibly -catastrophic. - -`re` can be a `RegExp` object or just a string. - -If the `re` is a string and is an invalid regex, returns `false`. - -* `opts.limit` - maximum number of allowed repetitions in the entire regex. -Default: `25`. - -# install - -With [npm](https://npmjs.org) do: - -``` -npm install safe-regex -``` - -# license - -MIT diff --git a/node_modules/safe-regex/test/regex.js b/node_modules/safe-regex/test/regex.js deleted file mode 100644 index 0bda850..0000000 --- a/node_modules/safe-regex/test/regex.js +++ /dev/null @@ -1,50 +0,0 @@ -var safe = require('../'); -var test = require('tape'); - -var good = [ - /\bOakland\b/, - /\b(Oakland|San Francisco)\b/i, - /^\d+1337\d+$/i, - /^\d+(1337|404)\d+$/i, - /^\d+(1337|404)*\d+$/i, - RegExp(Array(26).join('a?') + Array(26).join('a')), -]; - -test('safe regex', function (t) { - t.plan(good.length); - good.forEach(function (re) { - t.equal(safe(re), true); - }); -}); - - -var bad = [ - /^(a?){25}(a){25}$/, - RegExp(Array(27).join('a?') + Array(27).join('a')), - /(x+x+)+y/, - /foo|(x+x+)+y/, - /(a+){10}y/, - /(a+){2}y/, - /(.*){1,32000}[bc]/ -]; - -test('unsafe regex', function (t) { - t.plan(bad.length); - bad.forEach(function (re) { - t.equal(safe(re), false); - }); -}); - -var invalid = [ - '*Oakland*', - 'hey(yoo))', - 'abcde(?>hellow)', - '[abc' -]; - -test('invalid regex', function (t) { - t.plan(invalid.length); - invalid.forEach(function (re) { - t.equal(safe(re), false); - }); -}); diff --git a/node_modules/send/HISTORY.md b/node_modules/send/HISTORY.md deleted file mode 100644 index a739774..0000000 --- a/node_modules/send/HISTORY.md +++ /dev/null @@ -1,521 +0,0 @@ -0.18.0 / 2022-03-23 -=================== - - * Fix emitted 416 error missing headers property - * Limit the headers removed for 304 response - * deps: depd@2.0.0 - - Replace internal `eval` usage with `Function` constructor - - Use instance methods on `process` to check for listeners - * deps: destroy@1.2.0 - * deps: http-errors@2.0.0 - - deps: depd@2.0.0 - - deps: statuses@2.0.1 - * deps: on-finished@2.4.1 - * deps: statuses@2.0.1 - -0.17.2 / 2021-12-11 -=================== - - * pref: ignore empty http tokens - * deps: http-errors@1.8.1 - - deps: inherits@2.0.4 - - deps: toidentifier@1.0.1 - - deps: setprototypeof@1.2.0 - * deps: ms@2.1.3 - -0.17.1 / 2019-05-10 -=================== - - * Set stricter CSP header in redirect & error responses - * deps: range-parser@~1.2.1 - -0.17.0 / 2019-05-03 -=================== - - * deps: http-errors@~1.7.2 - - Set constructor name when possible - - Use `toidentifier` module to make class names - - deps: depd@~1.1.2 - - deps: setprototypeof@1.1.1 - - deps: statuses@'>= 1.5.0 < 2' - * deps: mime@1.6.0 - - Add extensions for JPEG-2000 images - - Add new `font/*` types from IANA - - Add WASM mapping - - Update `.bdoc` to `application/bdoc` - - Update `.bmp` to `image/bmp` - - Update `.m4a` to `audio/mp4` - - Update `.rtf` to `application/rtf` - - Update `.wav` to `audio/wav` - - Update `.xml` to `application/xml` - - Update generic extensions to `application/octet-stream`: - `.deb`, `.dll`, `.dmg`, `.exe`, `.iso`, `.msi` - - Use mime-score module to resolve extension conflicts - * deps: ms@2.1.1 - - Add `week`/`w` support - - Fix negative number handling - * deps: statuses@~1.5.0 - * perf: remove redundant `path.normalize` call - -0.16.2 / 2018-02-07 -=================== - - * Fix incorrect end tag in default error & redirects - * deps: depd@~1.1.2 - - perf: remove argument reassignment - * deps: encodeurl@~1.0.2 - - Fix encoding `%` as last character - * deps: statuses@~1.4.0 - -0.16.1 / 2017-09-29 -=================== - - * Fix regression in edge-case behavior for empty `path` - -0.16.0 / 2017-09-27 -=================== - - * Add `immutable` option - * Fix missing `` in default error & redirects - * Use instance methods on steam to check for listeners - * deps: mime@1.4.1 - - Add 70 new types for file extensions - - Set charset as "UTF-8" for .js and .json - * perf: improve path validation speed - -0.15.6 / 2017-09-22 -=================== - - * deps: debug@2.6.9 - * perf: improve `If-Match` token parsing - -0.15.5 / 2017-09-20 -=================== - - * deps: etag@~1.8.1 - - perf: replace regular expression with substring - * deps: fresh@0.5.2 - - Fix handling of modified headers with invalid dates - - perf: improve ETag match loop - - perf: improve `If-None-Match` token parsing - -0.15.4 / 2017-08-05 -=================== - - * deps: debug@2.6.8 - * deps: depd@~1.1.1 - - Remove unnecessary `Buffer` loading - * deps: http-errors@~1.6.2 - - deps: depd@1.1.1 - -0.15.3 / 2017-05-16 -=================== - - * deps: debug@2.6.7 - - deps: ms@2.0.0 - * deps: ms@2.0.0 - -0.15.2 / 2017-04-26 -=================== - - * deps: debug@2.6.4 - - Fix `DEBUG_MAX_ARRAY_LENGTH` - - deps: ms@0.7.3 - * deps: ms@1.0.0 - -0.15.1 / 2017-03-04 -=================== - - * Fix issue when `Date.parse` does not return `NaN` on invalid date - * Fix strict violation in broken environments - -0.15.0 / 2017-02-25 -=================== - - * Support `If-Match` and `If-Unmodified-Since` headers - * Add `res` and `path` arguments to `directory` event - * Remove usage of `res._headers` private field - - Improves compatibility with Node.js 8 nightly - * Send complete HTML document in redirect & error responses - * Set default CSP header in redirect & error responses - * Use `res.getHeaderNames()` when available - * Use `res.headersSent` when available - * deps: debug@2.6.1 - - Allow colors in workers - - Deprecated `DEBUG_FD` environment variable set to `3` or higher - - Fix error when running under React Native - - Use same color for same namespace - - deps: ms@0.7.2 - * deps: etag@~1.8.0 - * deps: fresh@0.5.0 - - Fix false detection of `no-cache` request directive - - Fix incorrect result when `If-None-Match` has both `*` and ETags - - Fix weak `ETag` matching to match spec - - perf: delay reading header values until needed - - perf: enable strict mode - - perf: hoist regular expressions - - perf: remove duplicate conditional - - perf: remove unnecessary boolean coercions - - perf: skip checking modified time if ETag check failed - - perf: skip parsing `If-None-Match` when no `ETag` header - - perf: use `Date.parse` instead of `new Date` - * deps: http-errors@~1.6.1 - - Make `message` property enumerable for `HttpError`s - - deps: setprototypeof@1.0.3 - -0.14.2 / 2017-01-23 -=================== - - * deps: http-errors@~1.5.1 - - deps: inherits@2.0.3 - - deps: setprototypeof@1.0.2 - - deps: statuses@'>= 1.3.1 < 2' - * deps: ms@0.7.2 - * deps: statuses@~1.3.1 - -0.14.1 / 2016-06-09 -=================== - - * Fix redirect error when `path` contains raw non-URL characters - * Fix redirect when `path` starts with multiple forward slashes - -0.14.0 / 2016-06-06 -=================== - - * Add `acceptRanges` option - * Add `cacheControl` option - * Attempt to combine multiple ranges into single range - * Correctly inherit from `Stream` class - * Fix `Content-Range` header in 416 responses when using `start`/`end` options - * Fix `Content-Range` header missing from default 416 responses - * Ignore non-byte `Range` headers - * deps: http-errors@~1.5.0 - - Add `HttpError` export, for `err instanceof createError.HttpError` - - Support new code `421 Misdirected Request` - - Use `setprototypeof` module to replace `__proto__` setting - - deps: inherits@2.0.1 - - deps: statuses@'>= 1.3.0 < 2' - - perf: enable strict mode - * deps: range-parser@~1.2.0 - - Fix incorrectly returning -1 when there is at least one valid range - - perf: remove internal function - * deps: statuses@~1.3.0 - - Add `421 Misdirected Request` - - perf: enable strict mode - * perf: remove argument reassignment - -0.13.2 / 2016-03-05 -=================== - - * Fix invalid `Content-Type` header when `send.mime.default_type` unset - -0.13.1 / 2016-01-16 -=================== - - * deps: depd@~1.1.0 - - Support web browser loading - - perf: enable strict mode - * deps: destroy@~1.0.4 - - perf: enable strict mode - * deps: escape-html@~1.0.3 - - perf: enable strict mode - - perf: optimize string replacement - - perf: use faster string coercion - * deps: range-parser@~1.0.3 - - perf: enable strict mode - -0.13.0 / 2015-06-16 -=================== - - * Allow Node.js HTTP server to set `Date` response header - * Fix incorrectly removing `Content-Location` on 304 response - * Improve the default redirect response headers - * Send appropriate headers on default error response - * Use `http-errors` for standard emitted errors - * Use `statuses` instead of `http` module for status messages - * deps: escape-html@1.0.2 - * deps: etag@~1.7.0 - - Improve stat performance by removing hashing - * deps: fresh@0.3.0 - - Add weak `ETag` matching support - * deps: on-finished@~2.3.0 - - Add defined behavior for HTTP `CONNECT` requests - - Add defined behavior for HTTP `Upgrade` requests - - deps: ee-first@1.1.1 - * perf: enable strict mode - * perf: remove unnecessary array allocations - -0.12.3 / 2015-05-13 -=================== - - * deps: debug@~2.2.0 - - deps: ms@0.7.1 - * deps: depd@~1.0.1 - * deps: etag@~1.6.0 - - Improve support for JXcore - - Support "fake" stats objects in environments without `fs` - * deps: ms@0.7.1 - - Prevent extraordinarily long inputs - * deps: on-finished@~2.2.1 - -0.12.2 / 2015-03-13 -=================== - - * Throw errors early for invalid `extensions` or `index` options - * deps: debug@~2.1.3 - - Fix high intensity foreground color for bold - - deps: ms@0.7.0 - -0.12.1 / 2015-02-17 -=================== - - * Fix regression sending zero-length files - -0.12.0 / 2015-02-16 -=================== - - * Always read the stat size from the file - * Fix mutating passed-in `options` - * deps: mime@1.3.4 - -0.11.1 / 2015-01-20 -=================== - - * Fix `root` path disclosure - -0.11.0 / 2015-01-05 -=================== - - * deps: debug@~2.1.1 - * deps: etag@~1.5.1 - - deps: crc@3.2.1 - * deps: ms@0.7.0 - - Add `milliseconds` - - Add `msecs` - - Add `secs` - - Add `mins` - - Add `hrs` - - Add `yrs` - * deps: on-finished@~2.2.0 - -0.10.1 / 2014-10-22 -=================== - - * deps: on-finished@~2.1.1 - - Fix handling of pipelined requests - -0.10.0 / 2014-10-15 -=================== - - * deps: debug@~2.1.0 - - Implement `DEBUG_FD` env variable support - * deps: depd@~1.0.0 - * deps: etag@~1.5.0 - - Improve string performance - - Slightly improve speed for weak ETags over 1KB - -0.9.3 / 2014-09-24 -================== - - * deps: etag@~1.4.0 - - Support "fake" stats objects - -0.9.2 / 2014-09-15 -================== - - * deps: depd@0.4.5 - * deps: etag@~1.3.1 - * deps: range-parser@~1.0.2 - -0.9.1 / 2014-09-07 -================== - - * deps: fresh@0.2.4 - -0.9.0 / 2014-09-07 -================== - - * Add `lastModified` option - * Use `etag` to generate `ETag` header - * deps: debug@~2.0.0 - -0.8.5 / 2014-09-04 -================== - - * Fix malicious path detection for empty string path - -0.8.4 / 2014-09-04 -================== - - * Fix a path traversal issue when using `root` - -0.8.3 / 2014-08-16 -================== - - * deps: destroy@1.0.3 - - renamed from dethroy - * deps: on-finished@2.1.0 - -0.8.2 / 2014-08-14 -================== - - * Work around `fd` leak in Node.js 0.10 for `fs.ReadStream` - * deps: dethroy@1.0.2 - -0.8.1 / 2014-08-05 -================== - - * Fix `extensions` behavior when file already has extension - -0.8.0 / 2014-08-05 -================== - - * Add `extensions` option - -0.7.4 / 2014-08-04 -================== - - * Fix serving index files without root dir - -0.7.3 / 2014-07-29 -================== - - * Fix incorrect 403 on Windows and Node.js 0.11 - -0.7.2 / 2014-07-27 -================== - - * deps: depd@0.4.4 - - Work-around v8 generating empty stack traces - -0.7.1 / 2014-07-26 -================== - - * deps: depd@0.4.3 - - Fix exception when global `Error.stackTraceLimit` is too low - -0.7.0 / 2014-07-20 -================== - - * Deprecate `hidden` option; use `dotfiles` option - * Add `dotfiles` option - * deps: debug@1.0.4 - * deps: depd@0.4.2 - - Add `TRACE_DEPRECATION` environment variable - - Remove non-standard grey color from color output - - Support `--no-deprecation` argument - - Support `--trace-deprecation` argument - -0.6.0 / 2014-07-11 -================== - - * Deprecate `from` option; use `root` option - * Deprecate `send.etag()` -- use `etag` in `options` - * Deprecate `send.hidden()` -- use `hidden` in `options` - * Deprecate `send.index()` -- use `index` in `options` - * Deprecate `send.maxage()` -- use `maxAge` in `options` - * Deprecate `send.root()` -- use `root` in `options` - * Cap `maxAge` value to 1 year - * deps: debug@1.0.3 - - Add support for multiple wildcards in namespaces - -0.5.0 / 2014-06-28 -================== - - * Accept string for `maxAge` (converted by `ms`) - * Add `headers` event - * Include link in default redirect response - * Use `EventEmitter.listenerCount` to count listeners - -0.4.3 / 2014-06-11 -================== - - * Do not throw un-catchable error on file open race condition - * Use `escape-html` for HTML escaping - * deps: debug@1.0.2 - - fix some debugging output colors on node.js 0.8 - * deps: finished@1.2.2 - * deps: fresh@0.2.2 - -0.4.2 / 2014-06-09 -================== - - * fix "event emitter leak" warnings - * deps: debug@1.0.1 - * deps: finished@1.2.1 - -0.4.1 / 2014-06-02 -================== - - * Send `max-age` in `Cache-Control` in correct format - -0.4.0 / 2014-05-27 -================== - - * Calculate ETag with md5 for reduced collisions - * Fix wrong behavior when index file matches directory - * Ignore stream errors after request ends - - Goodbye `EBADF, read` - * Skip directories in index file search - * deps: debug@0.8.1 - -0.3.0 / 2014-04-24 -================== - - * Fix sending files with dots without root set - * Coerce option types - * Accept API options in options object - * Set etags to "weak" - * Include file path in etag - * Make "Can't set headers after they are sent." catchable - * Send full entity-body for multi range requests - * Default directory access to 403 when index disabled - * Support multiple index paths - * Support "If-Range" header - * Control whether to generate etags - * deps: mime@1.2.11 - -0.2.0 / 2014-01-29 -================== - - * update range-parser and fresh - -0.1.4 / 2013-08-11 -================== - - * update fresh - -0.1.3 / 2013-07-08 -================== - - * Revert "Fix fd leak" - -0.1.2 / 2013-07-03 -================== - - * Fix fd leak - -0.1.0 / 2012-08-25 -================== - - * add options parameter to send() that is passed to fs.createReadStream() [kanongil] - -0.0.4 / 2012-08-16 -================== - - * allow custom "Accept-Ranges" definition - -0.0.3 / 2012-07-16 -================== - - * fix normalization of the root directory. Closes #3 - -0.0.2 / 2012-07-09 -================== - - * add passing of req explicitly for now (YUCK) - -0.0.1 / 2010-01-03 -================== - - * Initial release diff --git a/node_modules/send/LICENSE b/node_modules/send/LICENSE deleted file mode 100644 index b6ea1c1..0000000 --- a/node_modules/send/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -(The MIT License) - -Copyright (c) 2012 TJ Holowaychuk -Copyright (c) 2014-2022 Douglas Christopher Wilson - -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/send/README.md b/node_modules/send/README.md deleted file mode 100644 index fadf838..0000000 --- a/node_modules/send/README.md +++ /dev/null @@ -1,327 +0,0 @@ -# send - -[![NPM Version][npm-version-image]][npm-url] -[![NPM Downloads][npm-downloads-image]][npm-url] -[![Linux Build][github-actions-ci-image]][github-actions-ci-url] -[![Windows Build][appveyor-image]][appveyor-url] -[![Test Coverage][coveralls-image]][coveralls-url] - -Send is a library for streaming files from the file system as a http response -supporting partial responses (Ranges), conditional-GET negotiation (If-Match, -If-Unmodified-Since, If-None-Match, If-Modified-Since), high test coverage, -and granular events which may be leveraged to take appropriate actions in your -application or framework. - -Looking to serve up entire folders mapped to URLs? Try [serve-static](https://www.npmjs.org/package/serve-static). - -## Installation - -This is a [Node.js](https://nodejs.org/en/) module available through the -[npm registry](https://www.npmjs.com/). Installation is done using the -[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): - -```bash -$ npm install send -``` - -## API - -```js -var send = require('send') -``` - -### send(req, path, [options]) - -Create a new `SendStream` for the given path to send to a `res`. The `req` is -the Node.js HTTP request and the `path` is a urlencoded path to send (urlencoded, -not the actual file-system path). - -#### Options - -##### acceptRanges - -Enable or disable accepting ranged requests, defaults to true. -Disabling this will not send `Accept-Ranges` and ignore the contents -of the `Range` request header. - -##### cacheControl - -Enable or disable setting `Cache-Control` response header, defaults to -true. Disabling this will ignore the `immutable` and `maxAge` options. - -##### dotfiles - -Set how "dotfiles" are treated when encountered. A dotfile is a file -or directory that begins with a dot ("."). Note this check is done on -the path itself without checking if the path actually exists on the -disk. If `root` is specified, only the dotfiles above the root are -checked (i.e. the root itself can be within a dotfile when when set -to "deny"). - - - `'allow'` No special treatment for dotfiles. - - `'deny'` Send a 403 for any request for a dotfile. - - `'ignore'` Pretend like the dotfile does not exist and 404. - -The default value is _similar_ to `'ignore'`, with the exception that -this default will not ignore the files within a directory that begins -with a dot, for backward-compatibility. - -##### end - -Byte offset at which the stream ends, defaults to the length of the file -minus 1. The end is inclusive in the stream, meaning `end: 3` will include -the 4th byte in the stream. - -##### etag - -Enable or disable etag generation, defaults to true. - -##### extensions - -If a given file doesn't exist, try appending one of the given extensions, -in the given order. By default, this is disabled (set to `false`). An -example value that will serve extension-less HTML files: `['html', 'htm']`. -This is skipped if the requested file already has an extension. - -##### immutable - -Enable or disable the `immutable` directive in the `Cache-Control` response -header, defaults to `false`. If set to `true`, the `maxAge` option should -also be specified to enable caching. The `immutable` directive will prevent -supported clients from making conditional requests during the life of the -`maxAge` option to check if the file has changed. - -##### index - -By default send supports "index.html" files, to disable this -set `false` or to supply a new index pass a string or an array -in preferred order. - -##### lastModified - -Enable or disable `Last-Modified` header, defaults to true. Uses the file -system's last modified value. - -##### maxAge - -Provide a max-age in milliseconds for http caching, defaults to 0. -This can also be a string accepted by the -[ms](https://www.npmjs.org/package/ms#readme) module. - -##### root - -Serve files relative to `path`. - -##### start - -Byte offset at which the stream starts, defaults to 0. The start is inclusive, -meaning `start: 2` will include the 3rd byte in the stream. - -#### Events - -The `SendStream` is an event emitter and will emit the following events: - - - `error` an error occurred `(err)` - - `directory` a directory was requested `(res, path)` - - `file` a file was requested `(path, stat)` - - `headers` the headers are about to be set on a file `(res, path, stat)` - - `stream` file streaming has started `(stream)` - - `end` streaming has completed - -#### .pipe - -The `pipe` method is used to pipe the response into the Node.js HTTP response -object, typically `send(req, path, options).pipe(res)`. - -### .mime - -The `mime` export is the global instance of of the -[`mime` npm module](https://www.npmjs.com/package/mime). - -This is used to configure the MIME types that are associated with file extensions -as well as other options for how to resolve the MIME type of a file (like the -default type to use for an unknown file extension). - -## Error-handling - -By default when no `error` listeners are present an automatic response will be -made, otherwise you have full control over the response, aka you may show a 5xx -page etc. - -## Caching - -It does _not_ perform internal caching, you should use a reverse proxy cache -such as Varnish for this, or those fancy things called CDNs. If your -application is small enough that it would benefit from single-node memory -caching, it's small enough that it does not need caching at all ;). - -## Debugging - -To enable `debug()` instrumentation output export __DEBUG__: - -``` -$ DEBUG=send node app -``` - -## Running tests - -``` -$ npm install -$ npm test -``` - -## Examples - -### Serve a specific file - -This simple example will send a specific file to all requests. - -```js -var http = require('http') -var send = require('send') - -var server = http.createServer(function onRequest (req, res) { - send(req, '/path/to/index.html') - .pipe(res) -}) - -server.listen(3000) -``` - -### Serve all files from a directory - -This simple example will just serve up all the files in a -given directory as the top-level. For example, a request -`GET /foo.txt` will send back `/www/public/foo.txt`. - -```js -var http = require('http') -var parseUrl = require('parseurl') -var send = require('send') - -var server = http.createServer(function onRequest (req, res) { - send(req, parseUrl(req).pathname, { root: '/www/public' }) - .pipe(res) -}) - -server.listen(3000) -``` - -### Custom file types - -```js -var http = require('http') -var parseUrl = require('parseurl') -var send = require('send') - -// Default unknown types to text/plain -send.mime.default_type = 'text/plain' - -// Add a custom type -send.mime.define({ - 'application/x-my-type': ['x-mt', 'x-mtt'] -}) - -var server = http.createServer(function onRequest (req, res) { - send(req, parseUrl(req).pathname, { root: '/www/public' }) - .pipe(res) -}) - -server.listen(3000) -``` - -### Custom directory index view - -This is a example of serving up a structure of directories with a -custom function to render a listing of a directory. - -```js -var http = require('http') -var fs = require('fs') -var parseUrl = require('parseurl') -var send = require('send') - -// Transfer arbitrary files from within /www/example.com/public/* -// with a custom handler for directory listing -var server = http.createServer(function onRequest (req, res) { - send(req, parseUrl(req).pathname, { index: false, root: '/www/public' }) - .once('directory', directory) - .pipe(res) -}) - -server.listen(3000) - -// Custom directory handler -function directory (res, path) { - var stream = this - - // redirect to trailing slash for consistent url - if (!stream.hasTrailingSlash()) { - return stream.redirect(path) - } - - // get directory list - fs.readdir(path, function onReaddir (err, list) { - if (err) return stream.error(err) - - // render an index for the directory - res.setHeader('Content-Type', 'text/plain; charset=UTF-8') - res.end(list.join('\n') + '\n') - }) -} -``` - -### Serving from a root directory with custom error-handling - -```js -var http = require('http') -var parseUrl = require('parseurl') -var send = require('send') - -var server = http.createServer(function onRequest (req, res) { - // your custom error-handling logic: - function error (err) { - res.statusCode = err.status || 500 - res.end(err.message) - } - - // your custom headers - function headers (res, path, stat) { - // serve all files for download - res.setHeader('Content-Disposition', 'attachment') - } - - // your custom directory handling logic: - function redirect () { - res.statusCode = 301 - res.setHeader('Location', req.url + '/') - res.end('Redirecting to ' + req.url + '/') - } - - // transfer arbitrary files from within - // /www/example.com/public/* - send(req, parseUrl(req).pathname, { root: '/www/public' }) - .on('error', error) - .on('directory', redirect) - .on('headers', headers) - .pipe(res) -}) - -server.listen(3000) -``` - -## License - -[MIT](LICENSE) - -[appveyor-image]: https://badgen.net/appveyor/ci/dougwilson/send/master?label=windows -[appveyor-url]: https://ci.appveyor.com/project/dougwilson/send -[coveralls-image]: https://badgen.net/coveralls/c/github/pillarjs/send/master -[coveralls-url]: https://coveralls.io/r/pillarjs/send?branch=master -[github-actions-ci-image]: https://badgen.net/github/checks/pillarjs/send/master?label=linux -[github-actions-ci-url]: https://github.com/pillarjs/send/actions/workflows/ci.yml -[node-image]: https://badgen.net/npm/node/send -[node-url]: https://nodejs.org/en/download/ -[npm-downloads-image]: https://badgen.net/npm/dm/send -[npm-url]: https://npmjs.org/package/send -[npm-version-image]: https://badgen.net/npm/v/send diff --git a/node_modules/send/SECURITY.md b/node_modules/send/SECURITY.md deleted file mode 100644 index 46b48f7..0000000 --- a/node_modules/send/SECURITY.md +++ /dev/null @@ -1,24 +0,0 @@ -# Security Policies and Procedures - -## Reporting a Bug - -The `send` team and community take all security bugs seriously. Thank you -for improving the security of Express. We appreciate your efforts and -responsible disclosure and will make every effort to acknowledge your -contributions. - -Report security bugs by emailing the current owner(s) of `send`. This information -can be found in the npm registry using the command `npm owner ls send`. -If unsure or unable to get the information from the above, open an issue -in the [project issue tracker](https://github.com/pillarjs/send/issues) -asking for the current contact information. - -To ensure the timely response to your report, please ensure that the entirety -of the report is contained within the email body and not solely behind a web -link or an attachment. - -At least one owner will acknowledge your email within 48 hours, and will send a -more detailed response within 48 hours indicating the next steps in handling -your report. After the initial reply to your report, the owners will -endeavor to keep you informed of the progress towards a fix and full -announcement, and may ask for additional information or guidance. diff --git a/node_modules/send/index.js b/node_modules/send/index.js deleted file mode 100644 index 89afd7e..0000000 --- a/node_modules/send/index.js +++ /dev/null @@ -1,1143 +0,0 @@ -/*! - * send - * Copyright(c) 2012 TJ Holowaychuk - * Copyright(c) 2014-2022 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict' - -/** - * Module dependencies. - * @private - */ - -var createError = require('http-errors') -var debug = require('debug')('send') -var deprecate = require('depd')('send') -var destroy = require('destroy') -var encodeUrl = require('encodeurl') -var escapeHtml = require('escape-html') -var etag = require('etag') -var fresh = require('fresh') -var fs = require('fs') -var mime = require('mime') -var ms = require('ms') -var onFinished = require('on-finished') -var parseRange = require('range-parser') -var path = require('path') -var statuses = require('statuses') -var Stream = require('stream') -var util = require('util') - -/** - * Path function references. - * @private - */ - -var extname = path.extname -var join = path.join -var normalize = path.normalize -var resolve = path.resolve -var sep = path.sep - -/** - * Regular expression for identifying a bytes Range header. - * @private - */ - -var BYTES_RANGE_REGEXP = /^ *bytes=/ - -/** - * Maximum value allowed for the max age. - * @private - */ - -var MAX_MAXAGE = 60 * 60 * 24 * 365 * 1000 // 1 year - -/** - * Regular expression to match a path with a directory up component. - * @private - */ - -var UP_PATH_REGEXP = /(?:^|[\\/])\.\.(?:[\\/]|$)/ - -/** - * Module exports. - * @public - */ - -module.exports = send -module.exports.mime = mime - -/** - * Return a `SendStream` for `req` and `path`. - * - * @param {object} req - * @param {string} path - * @param {object} [options] - * @return {SendStream} - * @public - */ - -function send (req, path, options) { - return new SendStream(req, path, options) -} - -/** - * Initialize a `SendStream` with the given `path`. - * - * @param {Request} req - * @param {String} path - * @param {object} [options] - * @private - */ - -function SendStream (req, path, options) { - Stream.call(this) - - var opts = options || {} - - this.options = opts - this.path = path - this.req = req - - this._acceptRanges = opts.acceptRanges !== undefined - ? Boolean(opts.acceptRanges) - : true - - this._cacheControl = opts.cacheControl !== undefined - ? Boolean(opts.cacheControl) - : true - - this._etag = opts.etag !== undefined - ? Boolean(opts.etag) - : true - - this._dotfiles = opts.dotfiles !== undefined - ? opts.dotfiles - : 'ignore' - - if (this._dotfiles !== 'ignore' && this._dotfiles !== 'allow' && this._dotfiles !== 'deny') { - throw new TypeError('dotfiles option must be "allow", "deny", or "ignore"') - } - - this._hidden = Boolean(opts.hidden) - - if (opts.hidden !== undefined) { - deprecate('hidden: use dotfiles: \'' + (this._hidden ? 'allow' : 'ignore') + '\' instead') - } - - // legacy support - if (opts.dotfiles === undefined) { - this._dotfiles = undefined - } - - this._extensions = opts.extensions !== undefined - ? normalizeList(opts.extensions, 'extensions option') - : [] - - this._immutable = opts.immutable !== undefined - ? Boolean(opts.immutable) - : false - - this._index = opts.index !== undefined - ? normalizeList(opts.index, 'index option') - : ['index.html'] - - this._lastModified = opts.lastModified !== undefined - ? Boolean(opts.lastModified) - : true - - this._maxage = opts.maxAge || opts.maxage - this._maxage = typeof this._maxage === 'string' - ? ms(this._maxage) - : Number(this._maxage) - this._maxage = !isNaN(this._maxage) - ? Math.min(Math.max(0, this._maxage), MAX_MAXAGE) - : 0 - - this._root = opts.root - ? resolve(opts.root) - : null - - if (!this._root && opts.from) { - this.from(opts.from) - } -} - -/** - * Inherits from `Stream`. - */ - -util.inherits(SendStream, Stream) - -/** - * Enable or disable etag generation. - * - * @param {Boolean} val - * @return {SendStream} - * @api public - */ - -SendStream.prototype.etag = deprecate.function(function etag (val) { - this._etag = Boolean(val) - debug('etag %s', this._etag) - return this -}, 'send.etag: pass etag as option') - -/** - * Enable or disable "hidden" (dot) files. - * - * @param {Boolean} path - * @return {SendStream} - * @api public - */ - -SendStream.prototype.hidden = deprecate.function(function hidden (val) { - this._hidden = Boolean(val) - this._dotfiles = undefined - debug('hidden %s', this._hidden) - return this -}, 'send.hidden: use dotfiles option') - -/** - * Set index `paths`, set to a falsy - * value to disable index support. - * - * @param {String|Boolean|Array} paths - * @return {SendStream} - * @api public - */ - -SendStream.prototype.index = deprecate.function(function index (paths) { - var index = !paths ? [] : normalizeList(paths, 'paths argument') - debug('index %o', paths) - this._index = index - return this -}, 'send.index: pass index as option') - -/** - * Set root `path`. - * - * @param {String} path - * @return {SendStream} - * @api public - */ - -SendStream.prototype.root = function root (path) { - this._root = resolve(String(path)) - debug('root %s', this._root) - return this -} - -SendStream.prototype.from = deprecate.function(SendStream.prototype.root, - 'send.from: pass root as option') - -SendStream.prototype.root = deprecate.function(SendStream.prototype.root, - 'send.root: pass root as option') - -/** - * Set max-age to `maxAge`. - * - * @param {Number} maxAge - * @return {SendStream} - * @api public - */ - -SendStream.prototype.maxage = deprecate.function(function maxage (maxAge) { - this._maxage = typeof maxAge === 'string' - ? ms(maxAge) - : Number(maxAge) - this._maxage = !isNaN(this._maxage) - ? Math.min(Math.max(0, this._maxage), MAX_MAXAGE) - : 0 - debug('max-age %d', this._maxage) - return this -}, 'send.maxage: pass maxAge as option') - -/** - * Emit error with `status`. - * - * @param {number} status - * @param {Error} [err] - * @private - */ - -SendStream.prototype.error = function error (status, err) { - // emit if listeners instead of responding - if (hasListeners(this, 'error')) { - return this.emit('error', createHttpError(status, err)) - } - - var res = this.res - var msg = statuses.message[status] || String(status) - var doc = createHtmlDocument('Error', escapeHtml(msg)) - - // clear existing headers - clearHeaders(res) - - // add error headers - if (err && err.headers) { - setHeaders(res, err.headers) - } - - // send basic response - res.statusCode = status - res.setHeader('Content-Type', 'text/html; charset=UTF-8') - res.setHeader('Content-Length', Buffer.byteLength(doc)) - res.setHeader('Content-Security-Policy', "default-src 'none'") - res.setHeader('X-Content-Type-Options', 'nosniff') - res.end(doc) -} - -/** - * Check if the pathname ends with "/". - * - * @return {boolean} - * @private - */ - -SendStream.prototype.hasTrailingSlash = function hasTrailingSlash () { - return this.path[this.path.length - 1] === '/' -} - -/** - * Check if this is a conditional GET request. - * - * @return {Boolean} - * @api private - */ - -SendStream.prototype.isConditionalGET = function isConditionalGET () { - return this.req.headers['if-match'] || - this.req.headers['if-unmodified-since'] || - this.req.headers['if-none-match'] || - this.req.headers['if-modified-since'] -} - -/** - * Check if the request preconditions failed. - * - * @return {boolean} - * @private - */ - -SendStream.prototype.isPreconditionFailure = function isPreconditionFailure () { - var req = this.req - var res = this.res - - // if-match - var match = req.headers['if-match'] - if (match) { - var etag = res.getHeader('ETag') - return !etag || (match !== '*' && parseTokenList(match).every(function (match) { - return match !== etag && match !== 'W/' + etag && 'W/' + match !== etag - })) - } - - // if-unmodified-since - var unmodifiedSince = parseHttpDate(req.headers['if-unmodified-since']) - if (!isNaN(unmodifiedSince)) { - var lastModified = parseHttpDate(res.getHeader('Last-Modified')) - return isNaN(lastModified) || lastModified > unmodifiedSince - } - - return false -} - -/** - * Strip various content header fields for a change in entity. - * - * @private - */ - -SendStream.prototype.removeContentHeaderFields = function removeContentHeaderFields () { - var res = this.res - - res.removeHeader('Content-Encoding') - res.removeHeader('Content-Language') - res.removeHeader('Content-Length') - res.removeHeader('Content-Range') - res.removeHeader('Content-Type') -} - -/** - * Respond with 304 not modified. - * - * @api private - */ - -SendStream.prototype.notModified = function notModified () { - var res = this.res - debug('not modified') - this.removeContentHeaderFields() - res.statusCode = 304 - res.end() -} - -/** - * Raise error that headers already sent. - * - * @api private - */ - -SendStream.prototype.headersAlreadySent = function headersAlreadySent () { - var err = new Error('Can\'t set headers after they are sent.') - debug('headers already sent') - this.error(500, err) -} - -/** - * Check if the request is cacheable, aka - * responded with 2xx or 304 (see RFC 2616 section 14.2{5,6}). - * - * @return {Boolean} - * @api private - */ - -SendStream.prototype.isCachable = function isCachable () { - var statusCode = this.res.statusCode - return (statusCode >= 200 && statusCode < 300) || - statusCode === 304 -} - -/** - * Handle stat() error. - * - * @param {Error} error - * @private - */ - -SendStream.prototype.onStatError = function onStatError (error) { - switch (error.code) { - case 'ENAMETOOLONG': - case 'ENOENT': - case 'ENOTDIR': - this.error(404, error) - break - default: - this.error(500, error) - break - } -} - -/** - * Check if the cache is fresh. - * - * @return {Boolean} - * @api private - */ - -SendStream.prototype.isFresh = function isFresh () { - return fresh(this.req.headers, { - etag: this.res.getHeader('ETag'), - 'last-modified': this.res.getHeader('Last-Modified') - }) -} - -/** - * Check if the range is fresh. - * - * @return {Boolean} - * @api private - */ - -SendStream.prototype.isRangeFresh = function isRangeFresh () { - var ifRange = this.req.headers['if-range'] - - if (!ifRange) { - return true - } - - // if-range as etag - if (ifRange.indexOf('"') !== -1) { - var etag = this.res.getHeader('ETag') - return Boolean(etag && ifRange.indexOf(etag) !== -1) - } - - // if-range as modified date - var lastModified = this.res.getHeader('Last-Modified') - return parseHttpDate(lastModified) <= parseHttpDate(ifRange) -} - -/** - * Redirect to path. - * - * @param {string} path - * @private - */ - -SendStream.prototype.redirect = function redirect (path) { - var res = this.res - - if (hasListeners(this, 'directory')) { - this.emit('directory', res, path) - return - } - - if (this.hasTrailingSlash()) { - this.error(403) - return - } - - var loc = encodeUrl(collapseLeadingSlashes(this.path + '/')) - var doc = createHtmlDocument('Redirecting', 'Redirecting to ' + - escapeHtml(loc) + '') - - // redirect - res.statusCode = 301 - res.setHeader('Content-Type', 'text/html; charset=UTF-8') - res.setHeader('Content-Length', Buffer.byteLength(doc)) - res.setHeader('Content-Security-Policy', "default-src 'none'") - res.setHeader('X-Content-Type-Options', 'nosniff') - res.setHeader('Location', loc) - res.end(doc) -} - -/** - * Pipe to `res. - * - * @param {Stream} res - * @return {Stream} res - * @api public - */ - -SendStream.prototype.pipe = function pipe (res) { - // root path - var root = this._root - - // references - this.res = res - - // decode the path - var path = decode(this.path) - if (path === -1) { - this.error(400) - return res - } - - // null byte(s) - if (~path.indexOf('\0')) { - this.error(400) - return res - } - - var parts - if (root !== null) { - // normalize - if (path) { - path = normalize('.' + sep + path) - } - - // malicious path - if (UP_PATH_REGEXP.test(path)) { - debug('malicious path "%s"', path) - this.error(403) - return res - } - - // explode path parts - parts = path.split(sep) - - // join / normalize from optional root dir - path = normalize(join(root, path)) - } else { - // ".." is malicious without "root" - if (UP_PATH_REGEXP.test(path)) { - debug('malicious path "%s"', path) - this.error(403) - return res - } - - // explode path parts - parts = normalize(path).split(sep) - - // resolve the path - path = resolve(path) - } - - // dotfile handling - if (containsDotFile(parts)) { - var access = this._dotfiles - - // legacy support - if (access === undefined) { - access = parts[parts.length - 1][0] === '.' - ? (this._hidden ? 'allow' : 'ignore') - : 'allow' - } - - debug('%s dotfile "%s"', access, path) - switch (access) { - case 'allow': - break - case 'deny': - this.error(403) - return res - case 'ignore': - default: - this.error(404) - return res - } - } - - // index file support - if (this._index.length && this.hasTrailingSlash()) { - this.sendIndex(path) - return res - } - - this.sendFile(path) - return res -} - -/** - * Transfer `path`. - * - * @param {String} path - * @api public - */ - -SendStream.prototype.send = function send (path, stat) { - var len = stat.size - var options = this.options - var opts = {} - var res = this.res - var req = this.req - var ranges = req.headers.range - var offset = options.start || 0 - - if (headersSent(res)) { - // impossible to send now - this.headersAlreadySent() - return - } - - debug('pipe "%s"', path) - - // set header fields - this.setHeader(path, stat) - - // set content-type - this.type(path) - - // conditional GET support - if (this.isConditionalGET()) { - if (this.isPreconditionFailure()) { - this.error(412) - return - } - - if (this.isCachable() && this.isFresh()) { - this.notModified() - return - } - } - - // adjust len to start/end options - len = Math.max(0, len - offset) - if (options.end !== undefined) { - var bytes = options.end - offset + 1 - if (len > bytes) len = bytes - } - - // Range support - if (this._acceptRanges && BYTES_RANGE_REGEXP.test(ranges)) { - // parse - ranges = parseRange(len, ranges, { - combine: true - }) - - // If-Range support - if (!this.isRangeFresh()) { - debug('range stale') - ranges = -2 - } - - // unsatisfiable - if (ranges === -1) { - debug('range unsatisfiable') - - // Content-Range - res.setHeader('Content-Range', contentRange('bytes', len)) - - // 416 Requested Range Not Satisfiable - return this.error(416, { - headers: { 'Content-Range': res.getHeader('Content-Range') } - }) - } - - // valid (syntactically invalid/multiple ranges are treated as a regular response) - if (ranges !== -2 && ranges.length === 1) { - debug('range %j', ranges) - - // Content-Range - res.statusCode = 206 - res.setHeader('Content-Range', contentRange('bytes', len, ranges[0])) - - // adjust for requested range - offset += ranges[0].start - len = ranges[0].end - ranges[0].start + 1 - } - } - - // clone options - for (var prop in options) { - opts[prop] = options[prop] - } - - // set read options - opts.start = offset - opts.end = Math.max(offset, offset + len - 1) - - // content-length - res.setHeader('Content-Length', len) - - // HEAD support - if (req.method === 'HEAD') { - res.end() - return - } - - this.stream(path, opts) -} - -/** - * Transfer file for `path`. - * - * @param {String} path - * @api private - */ -SendStream.prototype.sendFile = function sendFile (path) { - var i = 0 - var self = this - - debug('stat "%s"', path) - fs.stat(path, function onstat (err, stat) { - if (err && err.code === 'ENOENT' && !extname(path) && path[path.length - 1] !== sep) { - // not found, check extensions - return next(err) - } - if (err) return self.onStatError(err) - if (stat.isDirectory()) return self.redirect(path) - self.emit('file', path, stat) - self.send(path, stat) - }) - - function next (err) { - if (self._extensions.length <= i) { - return err - ? self.onStatError(err) - : self.error(404) - } - - var p = path + '.' + self._extensions[i++] - - debug('stat "%s"', p) - fs.stat(p, function (err, stat) { - if (err) return next(err) - if (stat.isDirectory()) return next() - self.emit('file', p, stat) - self.send(p, stat) - }) - } -} - -/** - * Transfer index for `path`. - * - * @param {String} path - * @api private - */ -SendStream.prototype.sendIndex = function sendIndex (path) { - var i = -1 - var self = this - - function next (err) { - if (++i >= self._index.length) { - if (err) return self.onStatError(err) - return self.error(404) - } - - var p = join(path, self._index[i]) - - debug('stat "%s"', p) - fs.stat(p, function (err, stat) { - if (err) return next(err) - if (stat.isDirectory()) return next() - self.emit('file', p, stat) - self.send(p, stat) - }) - } - - next() -} - -/** - * Stream `path` to the response. - * - * @param {String} path - * @param {Object} options - * @api private - */ - -SendStream.prototype.stream = function stream (path, options) { - var self = this - var res = this.res - - // pipe - var stream = fs.createReadStream(path, options) - this.emit('stream', stream) - stream.pipe(res) - - // cleanup - function cleanup () { - destroy(stream, true) - } - - // response finished, cleanup - onFinished(res, cleanup) - - // error handling - stream.on('error', function onerror (err) { - // clean up stream early - cleanup() - - // error - self.onStatError(err) - }) - - // end - stream.on('end', function onend () { - self.emit('end') - }) -} - -/** - * Set content-type based on `path` - * if it hasn't been explicitly set. - * - * @param {String} path - * @api private - */ - -SendStream.prototype.type = function type (path) { - var res = this.res - - if (res.getHeader('Content-Type')) return - - var type = mime.lookup(path) - - if (!type) { - debug('no content-type') - return - } - - var charset = mime.charsets.lookup(type) - - debug('content-type %s', type) - res.setHeader('Content-Type', type + (charset ? '; charset=' + charset : '')) -} - -/** - * Set response header fields, most - * fields may be pre-defined. - * - * @param {String} path - * @param {Object} stat - * @api private - */ - -SendStream.prototype.setHeader = function setHeader (path, stat) { - var res = this.res - - this.emit('headers', res, path, stat) - - if (this._acceptRanges && !res.getHeader('Accept-Ranges')) { - debug('accept ranges') - res.setHeader('Accept-Ranges', 'bytes') - } - - if (this._cacheControl && !res.getHeader('Cache-Control')) { - var cacheControl = 'public, max-age=' + Math.floor(this._maxage / 1000) - - if (this._immutable) { - cacheControl += ', immutable' - } - - debug('cache-control %s', cacheControl) - res.setHeader('Cache-Control', cacheControl) - } - - if (this._lastModified && !res.getHeader('Last-Modified')) { - var modified = stat.mtime.toUTCString() - debug('modified %s', modified) - res.setHeader('Last-Modified', modified) - } - - if (this._etag && !res.getHeader('ETag')) { - var val = etag(stat) - debug('etag %s', val) - res.setHeader('ETag', val) - } -} - -/** - * Clear all headers from a response. - * - * @param {object} res - * @private - */ - -function clearHeaders (res) { - var headers = getHeaderNames(res) - - for (var i = 0; i < headers.length; i++) { - res.removeHeader(headers[i]) - } -} - -/** - * Collapse all leading slashes into a single slash - * - * @param {string} str - * @private - */ -function collapseLeadingSlashes (str) { - for (var i = 0; i < str.length; i++) { - if (str[i] !== '/') { - break - } - } - - return i > 1 - ? '/' + str.substr(i) - : str -} - -/** - * Determine if path parts contain a dotfile. - * - * @api private - */ - -function containsDotFile (parts) { - for (var i = 0; i < parts.length; i++) { - var part = parts[i] - if (part.length > 1 && part[0] === '.') { - return true - } - } - - return false -} - -/** - * Create a Content-Range header. - * - * @param {string} type - * @param {number} size - * @param {array} [range] - */ - -function contentRange (type, size, range) { - return type + ' ' + (range ? range.start + '-' + range.end : '*') + '/' + size -} - -/** - * Create a minimal HTML document. - * - * @param {string} title - * @param {string} body - * @private - */ - -function createHtmlDocument (title, body) { - return '\n' + - '\n' + - '\n' + - '\n' + - '' + title + '\n' + - '\n' + - '\n' + - '
    ' + body + '
    \n' + - '\n' + - '\n' -} - -/** - * Create a HttpError object from simple arguments. - * - * @param {number} status - * @param {Error|object} err - * @private - */ - -function createHttpError (status, err) { - if (!err) { - return createError(status) - } - - return err instanceof Error - ? createError(status, err, { expose: false }) - : createError(status, err) -} - -/** - * decodeURIComponent. - * - * Allows V8 to only deoptimize this fn instead of all - * of send(). - * - * @param {String} path - * @api private - */ - -function decode (path) { - try { - return decodeURIComponent(path) - } catch (err) { - return -1 - } -} - -/** - * Get the header names on a respnse. - * - * @param {object} res - * @returns {array[string]} - * @private - */ - -function getHeaderNames (res) { - return typeof res.getHeaderNames !== 'function' - ? Object.keys(res._headers || {}) - : res.getHeaderNames() -} - -/** - * Determine if emitter has listeners of a given type. - * - * The way to do this check is done three different ways in Node.js >= 0.8 - * so this consolidates them into a minimal set using instance methods. - * - * @param {EventEmitter} emitter - * @param {string} type - * @returns {boolean} - * @private - */ - -function hasListeners (emitter, type) { - var count = typeof emitter.listenerCount !== 'function' - ? emitter.listeners(type).length - : emitter.listenerCount(type) - - return count > 0 -} - -/** - * Determine if the response headers have been sent. - * - * @param {object} res - * @returns {boolean} - * @private - */ - -function headersSent (res) { - return typeof res.headersSent !== 'boolean' - ? Boolean(res._header) - : res.headersSent -} - -/** - * Normalize the index option into an array. - * - * @param {boolean|string|array} val - * @param {string} name - * @private - */ - -function normalizeList (val, name) { - var list = [].concat(val || []) - - for (var i = 0; i < list.length; i++) { - if (typeof list[i] !== 'string') { - throw new TypeError(name + ' must be array of strings or false') - } - } - - return list -} - -/** - * Parse an HTTP Date into a number. - * - * @param {string} date - * @private - */ - -function parseHttpDate (date) { - var timestamp = date && Date.parse(date) - - return typeof timestamp === 'number' - ? timestamp - : NaN -} - -/** - * Parse a HTTP token list. - * - * @param {string} str - * @private - */ - -function 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: /* , */ - if (start !== end) { - list.push(str.substring(start, end)) - } - start = end = i + 1 - break - default: - end = i + 1 - break - } - } - - // final token - if (start !== end) { - list.push(str.substring(start, end)) - } - - return list -} - -/** - * Set an object of headers on a response. - * - * @param {object} res - * @param {object} headers - * @private - */ - -function setHeaders (res, headers) { - var keys = Object.keys(headers) - - for (var i = 0; i < keys.length; i++) { - var key = keys[i] - res.setHeader(key, headers[key]) - } -} diff --git a/node_modules/send/node_modules/ms/index.js b/node_modules/send/node_modules/ms/index.js deleted file mode 100644 index ea734fb..0000000 --- a/node_modules/send/node_modules/ms/index.js +++ /dev/null @@ -1,162 +0,0 @@ -/** - * Helpers. - */ - -var s = 1000; -var m = s * 60; -var h = m * 60; -var d = h * 24; -var w = d * 7; -var y = d * 365.25; - -/** - * Parse or format the given `val`. - * - * Options: - * - * - `long` verbose formatting [false] - * - * @param {String|Number} val - * @param {Object} [options] - * @throws {Error} throw an error if val is not a non-empty string or a number - * @return {String|Number} - * @api public - */ - -module.exports = function (val, options) { - options = options || {}; - var type = typeof val; - if (type === 'string' && val.length > 0) { - return parse(val); - } else if (type === 'number' && isFinite(val)) { - return options.long ? fmtLong(val) : fmtShort(val); - } - throw new Error( - 'val is not a non-empty string or a valid number. val=' + - JSON.stringify(val) - ); -}; - -/** - * Parse the given `str` and return milliseconds. - * - * @param {String} str - * @return {Number} - * @api private - */ - -function parse(str) { - str = String(str); - if (str.length > 100) { - return; - } - 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( - str - ); - if (!match) { - return; - } - var n = parseFloat(match[1]); - var type = (match[2] || 'ms').toLowerCase(); - switch (type) { - case 'years': - case 'year': - case 'yrs': - case 'yr': - case 'y': - return n * y; - case 'weeks': - case 'week': - case 'w': - return n * w; - case 'days': - case 'day': - case 'd': - return n * d; - case 'hours': - case 'hour': - case 'hrs': - case 'hr': - case 'h': - return n * h; - case 'minutes': - case 'minute': - case 'mins': - case 'min': - case 'm': - return n * m; - case 'seconds': - case 'second': - case 'secs': - case 'sec': - case 's': - return n * s; - case 'milliseconds': - case 'millisecond': - case 'msecs': - case 'msec': - case 'ms': - return n; - default: - return undefined; - } -} - -/** - * Short format for `ms`. - * - * @param {Number} ms - * @return {String} - * @api private - */ - -function fmtShort(ms) { - var msAbs = Math.abs(ms); - if (msAbs >= d) { - return Math.round(ms / d) + 'd'; - } - if (msAbs >= h) { - return Math.round(ms / h) + 'h'; - } - if (msAbs >= m) { - return Math.round(ms / m) + 'm'; - } - if (msAbs >= s) { - return Math.round(ms / s) + 's'; - } - return ms + 'ms'; -} - -/** - * Long format for `ms`. - * - * @param {Number} ms - * @return {String} - * @api private - */ - -function fmtLong(ms) { - var msAbs = Math.abs(ms); - if (msAbs >= d) { - return plural(ms, msAbs, d, 'day'); - } - if (msAbs >= h) { - return plural(ms, msAbs, h, 'hour'); - } - if (msAbs >= m) { - return plural(ms, msAbs, m, 'minute'); - } - if (msAbs >= s) { - return plural(ms, msAbs, s, 'second'); - } - return ms + ' ms'; -} - -/** - * Pluralization helper. - */ - -function plural(ms, msAbs, n, name) { - var isPlural = msAbs >= n * 1.5; - return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : ''); -} diff --git a/node_modules/send/node_modules/ms/license.md b/node_modules/send/node_modules/ms/license.md deleted file mode 100644 index fa5d39b..0000000 --- a/node_modules/send/node_modules/ms/license.md +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2020 Vercel, 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. diff --git a/node_modules/send/node_modules/ms/package.json b/node_modules/send/node_modules/ms/package.json deleted file mode 100644 index 4997189..0000000 --- a/node_modules/send/node_modules/ms/package.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "ms", - "version": "2.1.3", - "description": "Tiny millisecond conversion utility", - "repository": "vercel/ms", - "main": "./index", - "files": [ - "index.js" - ], - "scripts": { - "precommit": "lint-staged", - "lint": "eslint lib/* bin/*", - "test": "mocha tests.js" - }, - "eslintConfig": { - "extends": "eslint:recommended", - "env": { - "node": true, - "es6": true - } - }, - "lint-staged": { - "*.js": [ - "npm run lint", - "prettier --single-quote --write", - "git add" - ] - }, - "license": "MIT", - "devDependencies": { - "eslint": "4.18.2", - "expect.js": "0.3.1", - "husky": "0.14.3", - "lint-staged": "5.0.0", - "mocha": "4.0.1", - "prettier": "2.0.5" - } -} diff --git a/node_modules/send/node_modules/ms/readme.md b/node_modules/send/node_modules/ms/readme.md deleted file mode 100644 index 0fc1abb..0000000 --- a/node_modules/send/node_modules/ms/readme.md +++ /dev/null @@ -1,59 +0,0 @@ -# ms - -![CI](https://github.com/vercel/ms/workflows/CI/badge.svg) - -Use this package to easily convert various time formats to milliseconds. - -## Examples - -```js -ms('2 days') // 172800000 -ms('1d') // 86400000 -ms('10h') // 36000000 -ms('2.5 hrs') // 9000000 -ms('2h') // 7200000 -ms('1m') // 60000 -ms('5s') // 5000 -ms('1y') // 31557600000 -ms('100') // 100 -ms('-3 days') // -259200000 -ms('-1h') // -3600000 -ms('-200') // -200 -``` - -### Convert from Milliseconds - -```js -ms(60000) // "1m" -ms(2 * 60000) // "2m" -ms(-3 * 60000) // "-3m" -ms(ms('10 hours')) // "10h" -``` - -### Time Format Written-Out - -```js -ms(60000, { long: true }) // "1 minute" -ms(2 * 60000, { long: true }) // "2 minutes" -ms(-3 * 60000, { long: true }) // "-3 minutes" -ms(ms('10 hours'), { long: true }) // "10 hours" -``` - -## Features - -- Works both in [Node.js](https://nodejs.org) and in the browser -- If a number is supplied to `ms`, a string with a unit is returned -- If a string that contains the number is supplied, it returns it as a number (e.g.: it returns `100` for `'100'`) -- If you pass a string with a number and a valid unit, the number of equivalent milliseconds is returned - -## Related Packages - -- [ms.macro](https://github.com/knpwrs/ms.macro) - Run `ms` as a macro at build-time. - -## Caught a Bug? - -1. [Fork](https://help.github.com/articles/fork-a-repo/) this repository to your own GitHub account and then [clone](https://help.github.com/articles/cloning-a-repository/) it to your local device -2. Link the package to the global module directory: `npm link` -3. Within the module you want to test your local development instance of ms, just link it to the dependencies: `npm link ms`. Instead of the default one from npm, Node.js will now use your clone of ms! - -As always, you can run the tests using: `npm test` diff --git a/node_modules/send/node_modules/on-finished/HISTORY.md b/node_modules/send/node_modules/on-finished/HISTORY.md deleted file mode 100644 index 1917595..0000000 --- a/node_modules/send/node_modules/on-finished/HISTORY.md +++ /dev/null @@ -1,98 +0,0 @@ -2.4.1 / 2022-02-22 -================== - - * Fix error on early async hooks implementations - -2.4.0 / 2022-02-21 -================== - - * Prevent loss of async hooks context - -2.3.0 / 2015-05-26 -================== - - * Add defined behavior for HTTP `CONNECT` requests - * Add defined behavior for HTTP `Upgrade` requests - * deps: ee-first@1.1.1 - -2.2.1 / 2015-04-22 -================== - - * Fix `isFinished(req)` when data buffered - -2.2.0 / 2014-12-22 -================== - - * Add message object to callback arguments - -2.1.1 / 2014-10-22 -================== - - * Fix handling of pipelined requests - -2.1.0 / 2014-08-16 -================== - - * Check if `socket` is detached - * Return `undefined` for `isFinished` if state unknown - -2.0.0 / 2014-08-16 -================== - - * Add `isFinished` function - * Move to `jshttp` organization - * Remove support for plain socket argument - * Rename to `on-finished` - * Support both `req` and `res` as arguments - * deps: ee-first@1.0.5 - -1.2.2 / 2014-06-10 -================== - - * Reduce listeners added to emitters - - avoids "event emitter leak" warnings when used multiple times on same request - -1.2.1 / 2014-06-08 -================== - - * Fix returned value when already finished - -1.2.0 / 2014-06-05 -================== - - * Call callback when called on already-finished socket - -1.1.4 / 2014-05-27 -================== - - * Support node.js 0.8 - -1.1.3 / 2014-04-30 -================== - - * Make sure errors passed as instanceof `Error` - -1.1.2 / 2014-04-18 -================== - - * Default the `socket` to passed-in object - -1.1.1 / 2014-01-16 -================== - - * Rename module to `finished` - -1.1.0 / 2013-12-25 -================== - - * Call callback when called on already-errored socket - -1.0.1 / 2013-12-20 -================== - - * Actually pass the error to the callback - -1.0.0 / 2013-12-20 -================== - - * Initial release diff --git a/node_modules/send/node_modules/on-finished/LICENSE b/node_modules/send/node_modules/on-finished/LICENSE deleted file mode 100644 index 5931fd2..0000000 --- a/node_modules/send/node_modules/on-finished/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -(The MIT License) - -Copyright (c) 2013 Jonathan Ong -Copyright (c) 2014 Douglas Christopher Wilson - -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/send/node_modules/on-finished/README.md b/node_modules/send/node_modules/on-finished/README.md deleted file mode 100644 index 8973cde..0000000 --- a/node_modules/send/node_modules/on-finished/README.md +++ /dev/null @@ -1,162 +0,0 @@ -# on-finished - -[![NPM Version][npm-version-image]][npm-url] -[![NPM Downloads][npm-downloads-image]][npm-url] -[![Node.js Version][node-image]][node-url] -[![Build Status][ci-image]][ci-url] -[![Coverage Status][coveralls-image]][coveralls-url] - -Execute a callback when a HTTP request closes, finishes, or errors. - -## Install - -This is a [Node.js](https://nodejs.org/en/) module available through the -[npm registry](https://www.npmjs.com/). Installation is done using the -[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): - -```sh -$ npm install on-finished -``` - -## API - -```js -var onFinished = require('on-finished') -``` - -### onFinished(res, listener) - -Attach a listener to listen for the response to finish. The listener will -be invoked only once when the response finished. If the response finished -to an error, the first argument will contain the error. If the response -has already finished, the listener will be invoked. - -Listening to the end of a response would be used to close things associated -with the response, like open files. - -Listener is invoked as `listener(err, res)`. - - - -```js -onFinished(res, function (err, res) { - // clean up open fds, etc. - // err contains the error if request error'd -}) -``` - -### onFinished(req, listener) - -Attach a listener to listen for the request to finish. The listener will -be invoked only once when the request finished. If the request finished -to an error, the first argument will contain the error. If the request -has already finished, the listener will be invoked. - -Listening to the end of a request would be used to know when to continue -after reading the data. - -Listener is invoked as `listener(err, req)`. - - - -```js -var data = '' - -req.setEncoding('utf8') -req.on('data', function (str) { - data += str -}) - -onFinished(req, function (err, req) { - // data is read unless there is err -}) -``` - -### onFinished.isFinished(res) - -Determine if `res` is already finished. This would be useful to check and -not even start certain operations if the response has already finished. - -### onFinished.isFinished(req) - -Determine if `req` is already finished. This would be useful to check and -not even start certain operations if the request has already finished. - -## Special Node.js requests - -### HTTP CONNECT method - -The meaning of the `CONNECT` method from RFC 7231, section 4.3.6: - -> The CONNECT method requests that the recipient establish a tunnel to -> the destination origin server identified by the request-target and, -> if successful, thereafter restrict its behavior to blind forwarding -> of packets, in both directions, until the tunnel is closed. Tunnels -> are commonly used to create an end-to-end virtual connection, through -> one or more proxies, which can then be secured using TLS (Transport -> Layer Security, [RFC5246]). - -In Node.js, these request objects come from the `'connect'` event on -the HTTP server. - -When this module is used on a HTTP `CONNECT` request, the request is -considered "finished" immediately, **due to limitations in the Node.js -interface**. This means if the `CONNECT` request contains a request entity, -the request will be considered "finished" even before it has been read. - -There is no such thing as a response object to a `CONNECT` request in -Node.js, so there is no support for one. - -### HTTP Upgrade request - -The meaning of the `Upgrade` header from RFC 7230, section 6.1: - -> The "Upgrade" header field is intended to provide a simple mechanism -> for transitioning from HTTP/1.1 to some other protocol on the same -> connection. - -In Node.js, these request objects come from the `'upgrade'` event on -the HTTP server. - -When this module is used on a HTTP request with an `Upgrade` header, the -request is considered "finished" immediately, **due to limitations in the -Node.js interface**. This means if the `Upgrade` request contains a request -entity, the request will be considered "finished" even before it has been -read. - -There is no such thing as a response object to a `Upgrade` request in -Node.js, so there is no support for one. - -## Example - -The following code ensures that file descriptors are always closed -once the response finishes. - -```js -var destroy = require('destroy') -var fs = require('fs') -var http = require('http') -var onFinished = require('on-finished') - -http.createServer(function onRequest (req, res) { - var stream = fs.createReadStream('package.json') - stream.pipe(res) - onFinished(res, function () { - destroy(stream) - }) -}) -``` - -## License - -[MIT](LICENSE) - -[ci-image]: https://badgen.net/github/checks/jshttp/on-finished/master?label=ci -[ci-url]: https://github.com/jshttp/on-finished/actions/workflows/ci.yml -[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/on-finished/master -[coveralls-url]: https://coveralls.io/r/jshttp/on-finished?branch=master -[node-image]: https://badgen.net/npm/node/on-finished -[node-url]: https://nodejs.org/en/download -[npm-downloads-image]: https://badgen.net/npm/dm/on-finished -[npm-url]: https://npmjs.org/package/on-finished -[npm-version-image]: https://badgen.net/npm/v/on-finished diff --git a/node_modules/send/node_modules/on-finished/index.js b/node_modules/send/node_modules/on-finished/index.js deleted file mode 100644 index e68df7b..0000000 --- a/node_modules/send/node_modules/on-finished/index.js +++ /dev/null @@ -1,234 +0,0 @@ -/*! - * on-finished - * Copyright(c) 2013 Jonathan Ong - * Copyright(c) 2014 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict' - -/** - * Module exports. - * @public - */ - -module.exports = onFinished -module.exports.isFinished = isFinished - -/** - * Module dependencies. - * @private - */ - -var asyncHooks = tryRequireAsyncHooks() -var first = require('ee-first') - -/** - * Variables. - * @private - */ - -/* istanbul ignore next */ -var defer = typeof setImmediate === 'function' - ? setImmediate - : function (fn) { process.nextTick(fn.bind.apply(fn, arguments)) } - -/** - * Invoke callback when the response has finished, useful for - * cleaning up resources afterwards. - * - * @param {object} msg - * @param {function} listener - * @return {object} - * @public - */ - -function onFinished (msg, listener) { - if (isFinished(msg) !== false) { - defer(listener, null, msg) - return msg - } - - // attach the listener to the message - attachListener(msg, wrap(listener)) - - return msg -} - -/** - * Determine if message is already finished. - * - * @param {object} msg - * @return {boolean} - * @public - */ - -function isFinished (msg) { - var socket = msg.socket - - if (typeof msg.finished === 'boolean') { - // OutgoingMessage - return Boolean(msg.finished || (socket && !socket.writable)) - } - - if (typeof msg.complete === 'boolean') { - // IncomingMessage - return Boolean(msg.upgrade || !socket || !socket.readable || (msg.complete && !msg.readable)) - } - - // don't know - return undefined -} - -/** - * Attach a finished listener to the message. - * - * @param {object} msg - * @param {function} callback - * @private - */ - -function attachFinishedListener (msg, callback) { - var eeMsg - var eeSocket - var finished = false - - function onFinish (error) { - eeMsg.cancel() - eeSocket.cancel() - - finished = true - callback(error) - } - - // finished on first message event - eeMsg = eeSocket = first([[msg, 'end', 'finish']], onFinish) - - function onSocket (socket) { - // remove listener - msg.removeListener('socket', onSocket) - - if (finished) return - if (eeMsg !== eeSocket) return - - // finished on first socket event - eeSocket = first([[socket, 'error', 'close']], onFinish) - } - - if (msg.socket) { - // socket already assigned - onSocket(msg.socket) - return - } - - // wait for socket to be assigned - msg.on('socket', onSocket) - - if (msg.socket === undefined) { - // istanbul ignore next: node.js 0.8 patch - patchAssignSocket(msg, onSocket) - } -} - -/** - * Attach the listener to the message. - * - * @param {object} msg - * @return {function} - * @private - */ - -function attachListener (msg, listener) { - var attached = msg.__onFinished - - // create a private single listener with queue - if (!attached || !attached.queue) { - attached = msg.__onFinished = createListener(msg) - attachFinishedListener(msg, attached) - } - - attached.queue.push(listener) -} - -/** - * Create listener on message. - * - * @param {object} msg - * @return {function} - * @private - */ - -function createListener (msg) { - function listener (err) { - if (msg.__onFinished === listener) msg.__onFinished = null - if (!listener.queue) return - - var queue = listener.queue - listener.queue = null - - for (var i = 0; i < queue.length; i++) { - queue[i](err, msg) - } - } - - listener.queue = [] - - return listener -} - -/** - * Patch ServerResponse.prototype.assignSocket for node.js 0.8. - * - * @param {ServerResponse} res - * @param {function} callback - * @private - */ - -// istanbul ignore next: node.js 0.8 patch -function patchAssignSocket (res, callback) { - var assignSocket = res.assignSocket - - if (typeof assignSocket !== 'function') return - - // res.on('socket', callback) is broken in 0.8 - res.assignSocket = function _assignSocket (socket) { - assignSocket.call(this, socket) - callback(socket) - } -} - -/** - * Try to require async_hooks - * @private - */ - -function tryRequireAsyncHooks () { - try { - return require('async_hooks') - } catch (e) { - return {} - } -} - -/** - * Wrap function with async resource, if possible. - * AsyncResource.bind static method backported. - * @private - */ - -function wrap (fn) { - var res - - // create anonymous resource - if (asyncHooks.AsyncResource) { - res = new asyncHooks.AsyncResource(fn.name || 'bound-anonymous-fn') - } - - // incompatible node.js - if (!res || !res.runInAsyncScope) { - return fn - } - - // return bound function - return res.runInAsyncScope.bind(res, fn, null) -} diff --git a/node_modules/send/node_modules/on-finished/package.json b/node_modules/send/node_modules/on-finished/package.json deleted file mode 100644 index 644cd81..0000000 --- a/node_modules/send/node_modules/on-finished/package.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "on-finished", - "description": "Execute a callback when a request closes, finishes, or errors", - "version": "2.4.1", - "contributors": [ - "Douglas Christopher Wilson ", - "Jonathan Ong (http://jongleberry.com)" - ], - "license": "MIT", - "repository": "jshttp/on-finished", - "dependencies": { - "ee-first": "1.1.1" - }, - "devDependencies": { - "eslint": "7.32.0", - "eslint-config-standard": "14.1.1", - "eslint-plugin-import": "2.25.4", - "eslint-plugin-markdown": "2.2.1", - "eslint-plugin-node": "11.1.0", - "eslint-plugin-promise": "5.2.0", - "eslint-plugin-standard": "4.1.0", - "mocha": "9.2.1", - "nyc": "15.1.0" - }, - "engines": { - "node": ">= 0.8" - }, - "files": [ - "HISTORY.md", - "LICENSE", - "index.js" - ], - "scripts": { - "lint": "eslint .", - "test": "mocha --reporter spec --bail --check-leaks test/", - "test-ci": "nyc --reporter=lcovonly --reporter=text npm test", - "test-cov": "nyc --reporter=html --reporter=text npm test" - } -} diff --git a/node_modules/send/node_modules/statuses/HISTORY.md b/node_modules/send/node_modules/statuses/HISTORY.md deleted file mode 100644 index fa4556e..0000000 --- a/node_modules/send/node_modules/statuses/HISTORY.md +++ /dev/null @@ -1,82 +0,0 @@ -2.0.1 / 2021-01-03 -================== - - * Fix returning values from `Object.prototype` - -2.0.0 / 2020-04-19 -================== - - * Drop support for Node.js 0.6 - * Fix messaging casing of `418 I'm a Teapot` - * Remove code 306 - * Remove `status[code]` exports; use `status.message[code]` - * Remove `status[msg]` exports; use `status.code[msg]` - * Rename `425 Unordered Collection` to standard `425 Too Early` - * Rename `STATUS_CODES` export to `message` - * Return status message for `statuses(code)` when given code - -1.5.0 / 2018-03-27 -================== - - * Add `103 Early Hints` - -1.4.0 / 2017-10-20 -================== - - * Add `STATUS_CODES` export - -1.3.1 / 2016-11-11 -================== - - * Fix return type in JSDoc - -1.3.0 / 2016-05-17 -================== - - * Add `421 Misdirected Request` - * perf: enable strict mode - -1.2.1 / 2015-02-01 -================== - - * Fix message for status 451 - - `451 Unavailable For Legal Reasons` - -1.2.0 / 2014-09-28 -================== - - * Add `208 Already Repored` - * Add `226 IM Used` - * Add `306 (Unused)` - * Add `415 Unable For Legal Reasons` - * Add `508 Loop Detected` - -1.1.1 / 2014-09-24 -================== - - * Add missing 308 to `codes.json` - -1.1.0 / 2014-09-21 -================== - - * Add `codes.json` for universal support - -1.0.4 / 2014-08-20 -================== - - * Package cleanup - -1.0.3 / 2014-06-08 -================== - - * Add 308 to `.redirect` category - -1.0.2 / 2014-03-13 -================== - - * Add `.retry` category - -1.0.1 / 2014-03-12 -================== - - * Initial release diff --git a/node_modules/send/node_modules/statuses/LICENSE b/node_modules/send/node_modules/statuses/LICENSE deleted file mode 100644 index 28a3161..0000000 --- a/node_modules/send/node_modules/statuses/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ - -The MIT License (MIT) - -Copyright (c) 2014 Jonathan Ong -Copyright (c) 2016 Douglas Christopher Wilson - -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/send/node_modules/statuses/README.md b/node_modules/send/node_modules/statuses/README.md deleted file mode 100644 index 57967e6..0000000 --- a/node_modules/send/node_modules/statuses/README.md +++ /dev/null @@ -1,136 +0,0 @@ -# statuses - -[![NPM Version][npm-version-image]][npm-url] -[![NPM Downloads][npm-downloads-image]][npm-url] -[![Node.js Version][node-version-image]][node-version-url] -[![Build Status][ci-image]][ci-url] -[![Test Coverage][coveralls-image]][coveralls-url] - -HTTP status utility for node. - -This module provides a list of status codes and messages sourced from -a few different projects: - - * The [IANA Status Code Registry](https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml) - * The [Node.js project](https://nodejs.org/) - * The [NGINX project](https://www.nginx.com/) - * The [Apache HTTP Server project](https://httpd.apache.org/) - -## Installation - -This is a [Node.js](https://nodejs.org/en/) module available through the -[npm registry](https://www.npmjs.com/). Installation is done using the -[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): - -```sh -$ npm install statuses -``` - -## API - - - -```js -var status = require('statuses') -``` - -### status(code) - -Returns the status message string for a known HTTP status code. The code -may be a number or a string. An error is thrown for an unknown status code. - - - -```js -status(403) // => 'Forbidden' -status('403') // => 'Forbidden' -status(306) // throws -``` - -### status(msg) - -Returns the numeric status code for a known HTTP status message. The message -is case-insensitive. An error is thrown for an unknown status message. - - - -```js -status('forbidden') // => 403 -status('Forbidden') // => 403 -status('foo') // throws -``` - -### status.codes - -Returns an array of all the status codes as `Integer`s. - -### status.code[msg] - -Returns the numeric status code for a known status message (in lower-case), -otherwise `undefined`. - - - -```js -status['not found'] // => 404 -``` - -### status.empty[code] - -Returns `true` if a status code expects an empty body. - - - -```js -status.empty[200] // => undefined -status.empty[204] // => true -status.empty[304] // => true -``` - -### status.message[code] - -Returns the string message for a known numeric status code, otherwise -`undefined`. This object is the same format as the -[Node.js http module `http.STATUS_CODES`](https://nodejs.org/dist/latest/docs/api/http.html#http_http_status_codes). - - - -```js -status.message[404] // => 'Not Found' -``` - -### status.redirect[code] - -Returns `true` if a status code is a valid redirect status. - - - -```js -status.redirect[200] // => undefined -status.redirect[301] // => true -``` - -### status.retry[code] - -Returns `true` if you should retry the rest. - - - -```js -status.retry[501] // => undefined -status.retry[503] // => true -``` - -## License - -[MIT](LICENSE) - -[ci-image]: https://badgen.net/github/checks/jshttp/statuses/master?label=ci -[ci-url]: https://github.com/jshttp/statuses/actions?query=workflow%3Aci -[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/statuses/master -[coveralls-url]: https://coveralls.io/r/jshttp/statuses?branch=master -[node-version-image]: https://badgen.net/npm/node/statuses -[node-version-url]: https://nodejs.org/en/download -[npm-downloads-image]: https://badgen.net/npm/dm/statuses -[npm-url]: https://npmjs.org/package/statuses -[npm-version-image]: https://badgen.net/npm/v/statuses diff --git a/node_modules/send/node_modules/statuses/codes.json b/node_modules/send/node_modules/statuses/codes.json deleted file mode 100644 index 1333ed1..0000000 --- a/node_modules/send/node_modules/statuses/codes.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "100": "Continue", - "101": "Switching Protocols", - "102": "Processing", - "103": "Early Hints", - "200": "OK", - "201": "Created", - "202": "Accepted", - "203": "Non-Authoritative Information", - "204": "No Content", - "205": "Reset Content", - "206": "Partial Content", - "207": "Multi-Status", - "208": "Already Reported", - "226": "IM Used", - "300": "Multiple Choices", - "301": "Moved Permanently", - "302": "Found", - "303": "See Other", - "304": "Not Modified", - "305": "Use Proxy", - "307": "Temporary Redirect", - "308": "Permanent Redirect", - "400": "Bad Request", - "401": "Unauthorized", - "402": "Payment Required", - "403": "Forbidden", - "404": "Not Found", - "405": "Method Not Allowed", - "406": "Not Acceptable", - "407": "Proxy Authentication Required", - "408": "Request Timeout", - "409": "Conflict", - "410": "Gone", - "411": "Length Required", - "412": "Precondition Failed", - "413": "Payload Too Large", - "414": "URI Too Long", - "415": "Unsupported Media Type", - "416": "Range Not Satisfiable", - "417": "Expectation Failed", - "418": "I'm a Teapot", - "421": "Misdirected Request", - "422": "Unprocessable Entity", - "423": "Locked", - "424": "Failed Dependency", - "425": "Too Early", - "426": "Upgrade Required", - "428": "Precondition Required", - "429": "Too Many Requests", - "431": "Request Header Fields Too Large", - "451": "Unavailable For Legal Reasons", - "500": "Internal Server Error", - "501": "Not Implemented", - "502": "Bad Gateway", - "503": "Service Unavailable", - "504": "Gateway Timeout", - "505": "HTTP Version Not Supported", - "506": "Variant Also Negotiates", - "507": "Insufficient Storage", - "508": "Loop Detected", - "509": "Bandwidth Limit Exceeded", - "510": "Not Extended", - "511": "Network Authentication Required" -} diff --git a/node_modules/send/node_modules/statuses/index.js b/node_modules/send/node_modules/statuses/index.js deleted file mode 100644 index ea351c5..0000000 --- a/node_modules/send/node_modules/statuses/index.js +++ /dev/null @@ -1,146 +0,0 @@ -/*! - * statuses - * Copyright(c) 2014 Jonathan Ong - * Copyright(c) 2016 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict' - -/** - * Module dependencies. - * @private - */ - -var codes = require('./codes.json') - -/** - * Module exports. - * @public - */ - -module.exports = status - -// status code to message map -status.message = codes - -// status message (lower-case) to code map -status.code = createMessageToStatusCodeMap(codes) - -// array of status codes -status.codes = createStatusCodeList(codes) - -// status codes for redirects -status.redirect = { - 300: true, - 301: true, - 302: true, - 303: true, - 305: true, - 307: true, - 308: true -} - -// status codes for empty bodies -status.empty = { - 204: true, - 205: true, - 304: true -} - -// status codes for when you should retry the request -status.retry = { - 502: true, - 503: true, - 504: true -} - -/** - * Create a map of message to status code. - * @private - */ - -function createMessageToStatusCodeMap (codes) { - var map = {} - - Object.keys(codes).forEach(function forEachCode (code) { - var message = codes[code] - var status = Number(code) - - // populate map - map[message.toLowerCase()] = status - }) - - return map -} - -/** - * Create a list of all status codes. - * @private - */ - -function createStatusCodeList (codes) { - return Object.keys(codes).map(function mapCode (code) { - return Number(code) - }) -} - -/** - * Get the status code for given message. - * @private - */ - -function getStatusCode (message) { - var msg = message.toLowerCase() - - if (!Object.prototype.hasOwnProperty.call(status.code, msg)) { - throw new Error('invalid status message: "' + message + '"') - } - - return status.code[msg] -} - -/** - * Get the status message for given code. - * @private - */ - -function getStatusMessage (code) { - if (!Object.prototype.hasOwnProperty.call(status.message, code)) { - throw new Error('invalid status code: ' + code) - } - - return status.message[code] -} - -/** - * Get the status code. - * - * Given a number, this will throw if it is not a known status - * code, otherwise the code will be returned. Given a string, - * the string will be parsed for a number and return the code - * if valid, otherwise will lookup the code assuming this is - * the status message. - * - * @param {string|number} code - * @returns {number} - * @public - */ - -function status (code) { - if (typeof code === 'number') { - return getStatusMessage(code) - } - - if (typeof code !== 'string') { - throw new TypeError('code must be a number or string') - } - - // '403' - var n = parseInt(code, 10) - if (!isNaN(n)) { - return getStatusMessage(n) - } - - return getStatusCode(code) -} diff --git a/node_modules/send/node_modules/statuses/package.json b/node_modules/send/node_modules/statuses/package.json deleted file mode 100644 index 8c3e719..0000000 --- a/node_modules/send/node_modules/statuses/package.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "name": "statuses", - "description": "HTTP status utility", - "version": "2.0.1", - "contributors": [ - "Douglas Christopher Wilson ", - "Jonathan Ong (http://jongleberry.com)" - ], - "repository": "jshttp/statuses", - "license": "MIT", - "keywords": [ - "http", - "status", - "code" - ], - "files": [ - "HISTORY.md", - "index.js", - "codes.json", - "LICENSE" - ], - "devDependencies": { - "csv-parse": "4.14.2", - "eslint": "7.17.0", - "eslint-config-standard": "14.1.1", - "eslint-plugin-import": "2.22.1", - "eslint-plugin-markdown": "1.0.2", - "eslint-plugin-node": "11.1.0", - "eslint-plugin-promise": "4.2.1", - "eslint-plugin-standard": "4.1.0", - "mocha": "8.2.1", - "nyc": "15.1.0", - "raw-body": "2.4.1", - "stream-to-array": "2.3.0" - }, - "engines": { - "node": ">= 0.8" - }, - "scripts": { - "build": "node scripts/build.js", - "fetch": "node scripts/fetch-apache.js && node scripts/fetch-iana.js && node scripts/fetch-nginx.js && node scripts/fetch-node.js", - "lint": "eslint --plugin markdown --ext js,md .", - "test": "mocha --reporter spec --check-leaks --bail test/", - "test-ci": "nyc --reporter=lcov --reporter=text npm test", - "test-cov": "nyc --reporter=html --reporter=text npm test", - "update": "npm run fetch && npm run build", - "version": "node scripts/version-history.js && git add HISTORY.md" - } -} diff --git a/node_modules/send/package.json b/node_modules/send/package.json deleted file mode 100644 index 7f269d5..0000000 --- a/node_modules/send/package.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "name": "send", - "description": "Better streaming static file server with Range and conditional-GET support", - "version": "0.18.0", - "author": "TJ Holowaychuk ", - "contributors": [ - "Douglas Christopher Wilson ", - "James Wyatt Cready ", - "Jesús Leganés Combarro " - ], - "license": "MIT", - "repository": "pillarjs/send", - "keywords": [ - "static", - "file", - "server" - ], - "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" - }, - "devDependencies": { - "after": "0.8.2", - "eslint": "7.32.0", - "eslint-config-standard": "14.1.1", - "eslint-plugin-import": "2.25.4", - "eslint-plugin-markdown": "2.2.1", - "eslint-plugin-node": "11.1.0", - "eslint-plugin-promise": "5.2.0", - "eslint-plugin-standard": "4.1.0", - "mocha": "9.2.2", - "nyc": "15.1.0", - "supertest": "6.2.2" - }, - "files": [ - "HISTORY.md", - "LICENSE", - "README.md", - "SECURITY.md", - "index.js" - ], - "engines": { - "node": ">= 0.8.0" - }, - "scripts": { - "lint": "eslint .", - "test": "mocha --check-leaks --reporter spec --bail", - "test-ci": "nyc --reporter=lcov --reporter=text npm test", - "test-cov": "nyc --reporter=html --reporter=text npm test" - } -} diff --git a/node_modules/serve-index/HISTORY.md b/node_modules/serve-index/HISTORY.md deleted file mode 100644 index 4bc7d1a..0000000 --- a/node_modules/serve-index/HISTORY.md +++ /dev/null @@ -1,305 +0,0 @@ -1.9.1 / 2017-09-28 -================== - - * deps: accepts@~1.3.4 - - deps: mime-types@~2.1.16 - * deps: debug@2.6.9 - * deps: http-errors@~1.6.2 - - deps: depd@1.1.1 - * deps: mime-types@~2.1.17 - - Add new mime types - - deps: mime-db@~1.30.0 - * deps: parseurl@~1.3.2 - - perf: reduce overhead for full URLs - - perf: unroll the "fast-path" `RegExp` - -1.9.0 / 2017-05-25 -================== - - * Set `X-Content-Type-Options: nosniff` header - * deps: batch@0.6.1 - * deps: debug@2.6.8 - - Allow colors in workers - - Deprecated `DEBUG_FD` environment variable set to `3` or higher - - Fix `DEBUG_MAX_ARRAY_LENGTH` - - Fix error when running under React Native - - Use same color for same namespace - - deps: ms@2.0.0 - * deps: http-errors@~1.6.1 - - Make `message` property enumerable for `HttpError`s - - deps: inherits@2.0.3 - - deps: setprototypeof@1.0.3 - - deps: statuses@'>= 1.3.1 < 2' - * deps: mime-types@~2.1.15 - - Add new mime types - - Add `audio/mp3` - -1.8.0 / 2016-06-17 -================== - - * Make inline file search case-insensitive - * deps: accepts@~1.3.3 - - deps: mime-types@~2.1.11 - - deps: negotiator@0.6.1 - - perf: improve header parsing speed - * deps: http-errors@~1.5.0 - - Use `setprototypeof` module to replace `__proto__` setting - - deps: inherits@2.0.1 - - deps: statuses@'>= 1.3.0 < 2' - - perf: enable strict mode - * deps: mime-types@~2.1.11 - - Add new mime types - - Update primary extension for `audio/mp4` - - deps: mime-db@~1.23.0 - -1.7.3 / 2016-01-24 -================== - - * deps: accepts@~1.2.13 - - deps: mime-types@~2.1.6 - * deps: batch@0.5.3 - - Fix invalid dependency for browserify - * deps: escape-html@~1.0.3 - - perf: enable strict mode - - perf: optimize string replacement - - perf: use faster string coercion - * deps: mime-types@~2.1.9 - - Add new mime types - * deps: parseurl@~1.3.1 - - perf: enable strict mode - -1.7.2 / 2015-07-30 -================== - - * deps: accepts@~1.2.12 - - deps: mime-types@~2.1.4 - * deps: mime-types@~2.1.4 - - Add new mime types - -1.7.1 / 2015-07-05 -================== - - * deps: accepts@~1.2.10 - - deps: mime-types@~2.1.2 - * deps: mime-types@~2.1.2 - - Add new mime types - -1.7.0 / 2015-06-15 -================== - - * Accept `function` value for `template` option - * Send non-chunked response for `OPTIONS` - * Stat parent directory when necessary - * Use `Date.prototype.toLocaleDateString` to format date - * deps: accepts@~1.2.9 - - deps: mime-types@~2.1.1 - - deps: negotiator@0.5.3 - - perf: avoid argument reassignment & argument slice - - perf: avoid negotiator recursive construction - - perf: enable strict mode - - perf: remove unnecessary bitwise operator - * deps: escape-html@1.0.2 - * deps: mime-types@~2.1.1 - - Add new mime types - * perf: enable strict mode - * perf: remove argument reassignment - -1.6.4 / 2015-05-12 -================== - - * deps: accepts@~1.2.7 - - deps: mime-types@~2.0.11 - - deps: negotiator@0.5.3 - * deps: debug@~2.2.0 - - deps: ms@0.7.1 - * deps: mime-types@~2.0.11 - - Add new mime types - -1.6.3 / 2015-03-13 -================== - - * Properly escape file names in HTML - * deps: accepts@~1.2.5 - - deps: mime-types@~2.0.10 - * deps: debug@~2.1.3 - - Fix high intensity foreground color for bold - - deps: ms@0.7.0 - * deps: escape-html@1.0.1 - * deps: mime-types@~2.0.10 - - Add new mime types - -1.6.2 / 2015-02-16 -================== - - * deps: accepts@~1.2.4 - - deps: mime-types@~2.0.9 - - deps: negotiator@0.5.1 - * deps: http-errors@~1.3.1 - - Construct errors using defined constructors from `createError` - - Fix error names that are not identifiers - - Set a meaningful `name` property on constructed errors - * deps: mime-types@~2.0.9 - - Add new mime types - - deps: mime-db@~1.7.0 - -1.6.1 / 2015-01-31 -================== - - * deps: accepts@~1.2.3 - - deps: mime-types@~2.0.8 - * deps: mime-types@~2.0.8 - - Add new mime types - - deps: mime-db@~1.6.0 - -1.6.0 / 2015-01-01 -================== - - * Add link to root directory - * deps: accepts@~1.2.2 - - deps: mime-types@~2.0.7 - - deps: negotiator@0.5.0 - * deps: batch@0.5.2 - * deps: debug@~2.1.1 - * deps: mime-types@~2.0.7 - - Add new mime types - - Fix missing extensions - - Fix various invalid MIME type entries - - Remove example template MIME types - - deps: mime-db@~1.5.0 - -1.5.3 / 2014-12-10 -================== - - * deps: accepts@~1.1.4 - - deps: mime-types@~2.0.4 - * deps: http-errors@~1.2.8 - - Fix stack trace from exported function - * deps: mime-types@~2.0.4 - - Add new mime types - - deps: mime-db@~1.3.0 - -1.5.2 / 2014-12-03 -================== - - * Fix icon name background alignment on mobile view - -1.5.1 / 2014-11-22 -================== - - * deps: accepts@~1.1.3 - - deps: mime-types@~2.0.3 - * deps: mime-types@~2.0.3 - - Add new mime types - - deps: mime-db@~1.2.0 - -1.5.0 / 2014-10-16 -================== - - * Create errors with `http-errors` - * deps: debug@~2.1.0 - - Implement `DEBUG_FD` env variable support - * deps: mime-types@~2.0.2 - - deps: mime-db@~1.1.0 - -1.4.1 / 2014-10-15 -================== - - * deps: accepts@~1.1.2 - - Fix error when media type has invalid parameter - - deps: negotiator@0.4.9 - -1.4.0 / 2014-10-03 -================== - - * Add `dir` argument to `filter` function - * Support using tokens multiple times - -1.3.1 / 2014-10-01 -================== - - * Fix incorrect 403 on Windows and Node.js 0.11 - * deps: accepts@~1.1.1 - - deps: mime-types@~2.0.2 - - deps: negotiator@0.4.8 - -1.3.0 / 2014-09-20 -================== - - * Add icon for mkv files - * Lookup icon by mime type for greater icon support - -1.2.1 / 2014-09-05 -================== - - * deps: accepts@~1.1.0 - * deps: debug@~2.0.0 - -1.2.0 / 2014-08-25 -================== - - * Add `debug` messages - * Resolve relative paths at middleware setup - -1.1.6 / 2014-08-10 -================== - - * Fix URL parsing - * deps: parseurl@~1.3.0 - -1.1.5 / 2014-07-27 -================== - - * Fix Content-Length calculation for multi-byte file names - * deps: accepts@~1.0.7 - - deps: negotiator@0.4.7 - -1.1.4 / 2014-06-20 -================== - - * deps: accepts@~1.0.5 - -1.1.3 / 2014-06-20 -================== - - * deps: accepts@~1.0.4 - - use `mime-types` - -1.1.2 / 2014-06-19 -================== - - * deps: batch@0.5.1 - -1.1.1 / 2014-06-11 -================== - - * deps: accepts@1.0.3 - -1.1.0 / 2014-05-29 -================== - - * Fix content negotiation when no `Accept` header - * Properly support all HTTP methods - * Support vanilla node.js http servers - * Treat `ENAMETOOLONG` as code 414 - * Use accepts for negotiation - -1.0.3 / 2014-05-20 -================== - - * Fix error from non-statable files in HTML view - -1.0.2 / 2014-04-28 -================== - - * Add `stylesheet` option - * deps: negotiator@0.4.3 - -1.0.1 / 2014-03-05 -================== - - * deps: negotiator@0.4.2 - -1.0.0 / 2014-03-05 -================== - - * Genesis from connect diff --git a/node_modules/serve-index/LICENSE b/node_modules/serve-index/LICENSE deleted file mode 100644 index d8cce67..0000000 --- a/node_modules/serve-index/LICENSE +++ /dev/null @@ -1,25 +0,0 @@ -(The MIT License) - -Copyright (c) 2010 Sencha Inc. -Copyright (c) 2011 LearnBoost -Copyright (c) 2011 TJ Holowaychuk -Copyright (c) 2014-2015 Douglas Christopher Wilson - -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/serve-index/README.md b/node_modules/serve-index/README.md deleted file mode 100644 index c21db28..0000000 --- a/node_modules/serve-index/README.md +++ /dev/null @@ -1,154 +0,0 @@ -# serve-index - -[![NPM Version][npm-image]][npm-url] -[![NPM Downloads][downloads-image]][downloads-url] -[![Linux Build][travis-image]][travis-url] -[![Windows Build][appveyor-image]][appveyor-url] -[![Test Coverage][coveralls-image]][coveralls-url] -[![Gratipay][gratipay-image]][gratipay-url] - - Serves pages that contain directory listings for a given path. - -## Install - -This is a [Node.js](https://nodejs.org/en/) module available through the -[npm registry](https://www.npmjs.com/). Installation is done using the -[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): - -```sh -$ npm install serve-index -``` - -## API - -```js -var serveIndex = require('serve-index') -``` - -### serveIndex(path, options) - -Returns middlware that serves an index of the directory in the given `path`. - -The `path` is based off the `req.url` value, so a `req.url` of `'/some/dir` -with a `path` of `'public'` will look at `'public/some/dir'`. If you are using -something like `express`, you can change the URL "base" with `app.use` (see -the express example). - -#### Options - -Serve index accepts these properties in the options object. - -##### filter - -Apply this filter function to files. Defaults to `false`. The `filter` function -is called for each file, with the signature `filter(filename, index, files, dir)` -where `filename` is the name of the file, `index` is the array index, `files` is -the array of files and `dir` is the absolute path the file is located (and thus, -the directory the listing is for). - -##### hidden - -Display hidden (dot) files. Defaults to `false`. - -##### icons - -Display icons. Defaults to `false`. - -##### stylesheet - -Optional path to a CSS stylesheet. Defaults to a built-in stylesheet. - -##### template - -Optional path to an HTML template or a function that will render a HTML -string. Defaults to a built-in template. - -When given a string, the string is used as a file path to load and then the -following tokens are replaced in templates: - - * `{directory}` with the name of the directory. - * `{files}` with the HTML of an unordered list of file links. - * `{linked-path}` with the HTML of a link to the directory. - * `{style}` with the specified stylesheet and embedded images. - -When given as a function, the function is called as `template(locals, callback)` -and it needs to invoke `callback(error, htmlString)`. The following are the -provided locals: - - * `directory` is the directory being displayed (where `/` is the root). - * `displayIcons` is a Boolean for if icons should be rendered or not. - * `fileList` is a sorted array of files in the directory. The array contains - objects with the following properties: - - `name` is the relative name for the file. - - `stat` is a `fs.Stats` object for the file. - * `path` is the full filesystem path to `directory`. - * `style` is the default stylesheet or the contents of the `stylesheet` option. - * `viewName` is the view name provided by the `view` option. - -##### view - -Display mode. `tiles` and `details` are available. Defaults to `tiles`. - -## Examples - -### Serve directory indexes with vanilla node.js http server - -```js -var finalhandler = require('finalhandler') -var http = require('http') -var serveIndex = require('serve-index') -var serveStatic = require('serve-static') - -// Serve directory indexes for public/ftp folder (with icons) -var index = serveIndex('public/ftp', {'icons': true}) - -// Serve up public/ftp folder files -var serve = serveStatic('public/ftp') - -// Create server -var server = http.createServer(function onRequest(req, res){ - var done = finalhandler(req, res) - serve(req, res, function onNext(err) { - if (err) return done(err) - index(req, res, done) - }) -}) - -// Listen -server.listen(3000) -``` - -### Serve directory indexes with express - -```js -var express = require('express') -var serveIndex = require('serve-index') - -var app = express() - -// Serve URLs like /ftp/thing as public/ftp/thing -// The express.static serves the file contents -// The serveIndex is this module serving the directory -app.use('/ftp', express.static('public/ftp'), serveIndex('public/ftp', {'icons': true})) - -// Listen -app.listen(3000) -``` - -## License - -[MIT](LICENSE). The [Silk](http://www.famfamfam.com/lab/icons/silk/) icons -are created by/copyright of [FAMFAMFAM](http://www.famfamfam.com/). - -[npm-image]: https://img.shields.io/npm/v/serve-index.svg -[npm-url]: https://npmjs.org/package/serve-index -[travis-image]: https://img.shields.io/travis/expressjs/serve-index/master.svg?label=linux -[travis-url]: https://travis-ci.org/expressjs/serve-index -[appveyor-image]: https://img.shields.io/appveyor/ci/dougwilson/serve-index/master.svg?label=windows -[appveyor-url]: https://ci.appveyor.com/project/dougwilson/serve-index -[coveralls-image]: https://img.shields.io/coveralls/expressjs/serve-index/master.svg -[coveralls-url]: https://coveralls.io/r/expressjs/serve-index?branch=master -[downloads-image]: https://img.shields.io/npm/dm/serve-index.svg -[downloads-url]: https://npmjs.org/package/serve-index -[gratipay-image]: https://img.shields.io/gratipay/dougwilson.svg -[gratipay-url]: https://www.gratipay.com/dougwilson/ diff --git a/node_modules/serve-index/index.js b/node_modules/serve-index/index.js deleted file mode 100644 index e3a619f..0000000 --- a/node_modules/serve-index/index.js +++ /dev/null @@ -1,646 +0,0 @@ -/*! - * serve-index - * Copyright(c) 2011 Sencha Inc. - * Copyright(c) 2011 TJ Holowaychuk - * Copyright(c) 2014-2015 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict'; - -/** - * Module dependencies. - * @private - */ - -var accepts = require('accepts'); -var createError = require('http-errors'); -var debug = require('debug')('serve-index'); -var escapeHtml = require('escape-html'); -var fs = require('fs') - , path = require('path') - , normalize = path.normalize - , sep = path.sep - , extname = path.extname - , join = path.join; -var Batch = require('batch'); -var mime = require('mime-types'); -var parseUrl = require('parseurl'); -var resolve = require('path').resolve; - -/** - * Module exports. - * @public - */ - -module.exports = serveIndex; - -/*! - * Icon cache. - */ - -var cache = {}; - -/*! - * Default template. - */ - -var defaultTemplate = join(__dirname, 'public', 'directory.html'); - -/*! - * Stylesheet. - */ - -var defaultStylesheet = join(__dirname, 'public', 'style.css'); - -/** - * Media types and the map for content negotiation. - */ - -var mediaTypes = [ - 'text/html', - 'text/plain', - 'application/json' -]; - -var mediaType = { - 'text/html': 'html', - 'text/plain': 'plain', - 'application/json': 'json' -}; - -/** - * Serve directory listings with the given `root` path. - * - * See Readme.md for documentation of options. - * - * @param {String} root - * @param {Object} options - * @return {Function} middleware - * @public - */ - -function serveIndex(root, options) { - var opts = options || {}; - - // root required - if (!root) { - throw new TypeError('serveIndex() root path required'); - } - - // resolve root to absolute and normalize - var rootPath = normalize(resolve(root) + sep); - - var filter = opts.filter; - var hidden = opts.hidden; - var icons = opts.icons; - var stylesheet = opts.stylesheet || defaultStylesheet; - var template = opts.template || defaultTemplate; - var view = opts.view || 'tiles'; - - return function (req, res, next) { - if (req.method !== 'GET' && req.method !== 'HEAD') { - res.statusCode = 'OPTIONS' === req.method ? 200 : 405; - res.setHeader('Allow', 'GET, HEAD, OPTIONS'); - res.setHeader('Content-Length', '0'); - res.end(); - return; - } - - // parse URLs - var url = parseUrl(req); - var originalUrl = parseUrl.original(req); - var dir = decodeURIComponent(url.pathname); - var originalDir = decodeURIComponent(originalUrl.pathname); - - // join / normalize from root dir - var path = normalize(join(rootPath, dir)); - - // null byte(s), bad request - if (~path.indexOf('\0')) return next(createError(400)); - - // malicious path - if ((path + sep).substr(0, rootPath.length) !== rootPath) { - debug('malicious path "%s"', path); - return next(createError(403)); - } - - // determine ".." display - var showUp = normalize(resolve(path) + sep) !== rootPath; - - // check if we have a directory - debug('stat "%s"', path); - fs.stat(path, function(err, stat){ - if (err && err.code === 'ENOENT') { - return next(); - } - - if (err) { - err.status = err.code === 'ENAMETOOLONG' - ? 414 - : 500; - return next(err); - } - - if (!stat.isDirectory()) return next(); - - // fetch files - debug('readdir "%s"', path); - fs.readdir(path, function(err, files){ - if (err) return next(err); - if (!hidden) files = removeHidden(files); - if (filter) files = files.filter(function(filename, index, list) { - return filter(filename, index, list, path); - }); - files.sort(); - - // content-negotiation - var accept = accepts(req); - var type = accept.type(mediaTypes); - - // not acceptable - if (!type) return next(createError(406)); - serveIndex[mediaType[type]](req, res, files, next, originalDir, showUp, icons, path, view, template, stylesheet); - }); - }); - }; -}; - -/** - * Respond with text/html. - */ - -serveIndex.html = function _html(req, res, files, next, dir, showUp, icons, path, view, template, stylesheet) { - var render = typeof template !== 'function' - ? createHtmlRender(template) - : template - - if (showUp) { - files.unshift('..'); - } - - // stat all files - stat(path, files, function (err, stats) { - if (err) return next(err); - - // combine the stats into the file list - var fileList = files.map(function (file, i) { - return { name: file, stat: stats[i] }; - }); - - // sort file list - fileList.sort(fileSort); - - // read stylesheet - fs.readFile(stylesheet, 'utf8', function (err, style) { - if (err) return next(err); - - // create locals for rendering - var locals = { - directory: dir, - displayIcons: Boolean(icons), - fileList: fileList, - path: path, - style: style, - viewName: view - }; - - // render html - render(locals, function (err, body) { - if (err) return next(err); - send(res, 'text/html', body) - }); - }); - }); -}; - -/** - * Respond with application/json. - */ - -serveIndex.json = function _json(req, res, files) { - send(res, 'application/json', JSON.stringify(files)) -}; - -/** - * Respond with text/plain. - */ - -serveIndex.plain = function _plain(req, res, files) { - send(res, 'text/plain', (files.join('\n') + '\n')) -}; - -/** - * Map html `files`, returning an html unordered list. - * @private - */ - -function createHtmlFileList(files, dir, useIcons, view) { - var html = '
      ' - + (view == 'details' ? ( - '
    • ' - + 'Name' - + 'Size' - + 'Modified' - + '
    • ') : ''); - - html += files.map(function (file) { - var classes = []; - var isDir = file.stat && file.stat.isDirectory(); - var path = dir.split('/').map(function (c) { return encodeURIComponent(c); }); - - if (useIcons) { - classes.push('icon'); - - if (isDir) { - classes.push('icon-directory'); - } else { - var ext = extname(file.name); - var icon = iconLookup(file.name); - - classes.push('icon'); - classes.push('icon-' + ext.substring(1)); - - if (classes.indexOf(icon.className) === -1) { - classes.push(icon.className); - } - } - } - - path.push(encodeURIComponent(file.name)); - - var date = file.stat && file.name !== '..' - ? file.stat.mtime.toLocaleDateString() + ' ' + file.stat.mtime.toLocaleTimeString() - : ''; - var size = file.stat && !isDir - ? file.stat.size - : ''; - - return '
    • ' - + '' + escapeHtml(file.name) + '' - + '' + escapeHtml(size) + '' - + '' + escapeHtml(date) + '' - + '
    • '; - }).join('\n'); - - html += '
    '; - - return html; -} - -/** - * Create function to render html. - */ - -function createHtmlRender(template) { - return function render(locals, callback) { - // read template - fs.readFile(template, 'utf8', function (err, str) { - if (err) return callback(err); - - var body = str - .replace(/\{style\}/g, locals.style.concat(iconStyle(locals.fileList, locals.displayIcons))) - .replace(/\{files\}/g, createHtmlFileList(locals.fileList, locals.directory, locals.displayIcons, locals.viewName)) - .replace(/\{directory\}/g, escapeHtml(locals.directory)) - .replace(/\{linked-path\}/g, htmlPath(locals.directory)); - - callback(null, body); - }); - }; -} - -/** - * Sort function for with directories first. - */ - -function fileSort(a, b) { - // sort ".." to the top - if (a.name === '..' || b.name === '..') { - return a.name === b.name ? 0 - : a.name === '..' ? -1 : 1; - } - - return Number(b.stat && b.stat.isDirectory()) - Number(a.stat && a.stat.isDirectory()) || - String(a.name).toLocaleLowerCase().localeCompare(String(b.name).toLocaleLowerCase()); -} - -/** - * Map html `dir`, returning a linked path. - */ - -function htmlPath(dir) { - var parts = dir.split('/'); - var crumb = new Array(parts.length); - - for (var i = 0; i < parts.length; i++) { - var part = parts[i]; - - if (part) { - parts[i] = encodeURIComponent(part); - crumb[i] = '' + escapeHtml(part) + ''; - } - } - - return crumb.join(' / '); -} - -/** - * Get the icon data for the file name. - */ - -function iconLookup(filename) { - var ext = extname(filename); - - // try by extension - if (icons[ext]) { - return { - className: 'icon-' + ext.substring(1), - fileName: icons[ext] - }; - } - - var mimetype = mime.lookup(ext); - - // default if no mime type - if (mimetype === false) { - return { - className: 'icon-default', - fileName: icons.default - }; - } - - // try by mime type - if (icons[mimetype]) { - return { - className: 'icon-' + mimetype.replace('/', '-'), - fileName: icons[mimetype] - }; - } - - var suffix = mimetype.split('+')[1]; - - if (suffix && icons['+' + suffix]) { - return { - className: 'icon-' + suffix, - fileName: icons['+' + suffix] - }; - } - - var type = mimetype.split('/')[0]; - - // try by type only - if (icons[type]) { - return { - className: 'icon-' + type, - fileName: icons[type] - }; - } - - return { - className: 'icon-default', - fileName: icons.default - }; -} - -/** - * Load icon images, return css string. - */ - -function iconStyle(files, useIcons) { - if (!useIcons) return ''; - var i; - var list = []; - var rules = {}; - var selector; - var selectors = {}; - var style = ''; - - for (i = 0; i < files.length; i++) { - var file = files[i]; - - var isDir = file.stat && file.stat.isDirectory(); - var icon = isDir - ? { className: 'icon-directory', fileName: icons.folder } - : iconLookup(file.name); - var iconName = icon.fileName; - - selector = '#files .' + icon.className + ' .name'; - - if (!rules[iconName]) { - rules[iconName] = 'background-image: url(data:image/png;base64,' + load(iconName) + ');' - selectors[iconName] = []; - list.push(iconName); - } - - if (selectors[iconName].indexOf(selector) === -1) { - selectors[iconName].push(selector); - } - } - - for (i = 0; i < list.length; i++) { - iconName = list[i]; - style += selectors[iconName].join(',\n') + ' {\n ' + rules[iconName] + '\n}\n'; - } - - return style; -} - -/** - * Load and cache the given `icon`. - * - * @param {String} icon - * @return {String} - * @api private - */ - -function load(icon) { - if (cache[icon]) return cache[icon]; - return cache[icon] = fs.readFileSync(__dirname + '/public/icons/' + icon, 'base64'); -} - -/** - * Normalizes the path separator from system separator - * to URL separator, aka `/`. - * - * @param {String} path - * @return {String} - * @api private - */ - -function normalizeSlashes(path) { - return path.split(sep).join('/'); -}; - -/** - * Filter "hidden" `files`, aka files - * beginning with a `.`. - * - * @param {Array} files - * @return {Array} - * @api private - */ - -function removeHidden(files) { - return files.filter(function(file){ - return '.' != file[0]; - }); -} - -/** - * Send a response. - * @private - */ - -function send (res, type, body) { - // security header for content sniffing - res.setHeader('X-Content-Type-Options', 'nosniff') - - // standard headers - res.setHeader('Content-Type', type + '; charset=utf-8') - res.setHeader('Content-Length', Buffer.byteLength(body, 'utf8')) - - // body - res.end(body, 'utf8') -} - -/** - * Stat all files and return array of stat - * in same order. - */ - -function stat(dir, files, cb) { - var batch = new Batch(); - - batch.concurrency(10); - - files.forEach(function(file){ - batch.push(function(done){ - fs.stat(join(dir, file), function(err, stat){ - if (err && err.code !== 'ENOENT') return done(err); - - // pass ENOENT as null stat, not error - done(null, stat || null); - }); - }); - }); - - batch.end(cb); -} - -/** - * Icon map. - */ - -var icons = { - // base icons - 'default': 'page_white.png', - 'folder': 'folder.png', - - // generic mime type icons - 'image': 'image.png', - 'text': 'page_white_text.png', - 'video': 'film.png', - - // generic mime suffix icons - '+json': 'page_white_code.png', - '+xml': 'page_white_code.png', - '+zip': 'box.png', - - // specific mime type icons - 'application/font-woff': 'font.png', - 'application/javascript': 'page_white_code_red.png', - 'application/json': 'page_white_code.png', - 'application/msword': 'page_white_word.png', - 'application/pdf': 'page_white_acrobat.png', - 'application/postscript': 'page_white_vector.png', - 'application/rtf': 'page_white_word.png', - 'application/vnd.ms-excel': 'page_white_excel.png', - 'application/vnd.ms-powerpoint': 'page_white_powerpoint.png', - 'application/vnd.oasis.opendocument.presentation': 'page_white_powerpoint.png', - 'application/vnd.oasis.opendocument.spreadsheet': 'page_white_excel.png', - 'application/vnd.oasis.opendocument.text': 'page_white_word.png', - 'application/x-7z-compressed': 'box.png', - 'application/x-sh': 'application_xp_terminal.png', - 'application/x-font-ttf': 'font.png', - 'application/x-msaccess': 'page_white_database.png', - 'application/x-shockwave-flash': 'page_white_flash.png', - 'application/x-sql': 'page_white_database.png', - 'application/x-tar': 'box.png', - 'application/x-xz': 'box.png', - 'application/xml': 'page_white_code.png', - 'application/zip': 'box.png', - 'image/svg+xml': 'page_white_vector.png', - 'text/css': 'page_white_code.png', - 'text/html': 'page_white_code.png', - 'text/less': 'page_white_code.png', - - // other, extension-specific icons - '.accdb': 'page_white_database.png', - '.apk': 'box.png', - '.app': 'application_xp.png', - '.as': 'page_white_actionscript.png', - '.asp': 'page_white_code.png', - '.aspx': 'page_white_code.png', - '.bat': 'application_xp_terminal.png', - '.bz2': 'box.png', - '.c': 'page_white_c.png', - '.cab': 'box.png', - '.cfm': 'page_white_coldfusion.png', - '.clj': 'page_white_code.png', - '.cc': 'page_white_cplusplus.png', - '.cgi': 'application_xp_terminal.png', - '.cpp': 'page_white_cplusplus.png', - '.cs': 'page_white_csharp.png', - '.db': 'page_white_database.png', - '.dbf': 'page_white_database.png', - '.deb': 'box.png', - '.dll': 'page_white_gear.png', - '.dmg': 'drive.png', - '.docx': 'page_white_word.png', - '.erb': 'page_white_ruby.png', - '.exe': 'application_xp.png', - '.fnt': 'font.png', - '.gam': 'controller.png', - '.gz': 'box.png', - '.h': 'page_white_h.png', - '.ini': 'page_white_gear.png', - '.iso': 'cd.png', - '.jar': 'box.png', - '.java': 'page_white_cup.png', - '.jsp': 'page_white_cup.png', - '.lua': 'page_white_code.png', - '.lz': 'box.png', - '.lzma': 'box.png', - '.m': 'page_white_code.png', - '.map': 'map.png', - '.msi': 'box.png', - '.mv4': 'film.png', - '.otf': 'font.png', - '.pdb': 'page_white_database.png', - '.php': 'page_white_php.png', - '.pl': 'page_white_code.png', - '.pkg': 'box.png', - '.pptx': 'page_white_powerpoint.png', - '.psd': 'page_white_picture.png', - '.py': 'page_white_code.png', - '.rar': 'box.png', - '.rb': 'page_white_ruby.png', - '.rm': 'film.png', - '.rom': 'controller.png', - '.rpm': 'box.png', - '.sass': 'page_white_code.png', - '.sav': 'controller.png', - '.scss': 'page_white_code.png', - '.srt': 'page_white_text.png', - '.tbz2': 'box.png', - '.tgz': 'box.png', - '.tlz': 'box.png', - '.vb': 'page_white_code.png', - '.vbs': 'page_white_code.png', - '.xcf': 'page_white_picture.png', - '.xlsx': 'page_white_excel.png', - '.yaws': 'page_white_code.png' -}; diff --git a/node_modules/serve-index/node_modules/depd/History.md b/node_modules/serve-index/node_modules/depd/History.md deleted file mode 100644 index 507ecb8..0000000 --- a/node_modules/serve-index/node_modules/depd/History.md +++ /dev/null @@ -1,96 +0,0 @@ -1.1.2 / 2018-01-11 -================== - - * perf: remove argument reassignment - * Support Node.js 0.6 to 9.x - -1.1.1 / 2017-07-27 -================== - - * Remove unnecessary `Buffer` loading - * Support Node.js 0.6 to 8.x - -1.1.0 / 2015-09-14 -================== - - * Enable strict mode in more places - * Support io.js 3.x - * Support io.js 2.x - * Support web browser loading - - Requires bundler like Browserify or webpack - -1.0.1 / 2015-04-07 -================== - - * Fix `TypeError`s when under `'use strict'` code - * Fix useless type name on auto-generated messages - * Support io.js 1.x - * Support Node.js 0.12 - -1.0.0 / 2014-09-17 -================== - - * No changes - -0.4.5 / 2014-09-09 -================== - - * Improve call speed to functions using the function wrapper - * Support Node.js 0.6 - -0.4.4 / 2014-07-27 -================== - - * Work-around v8 generating empty stack traces - -0.4.3 / 2014-07-26 -================== - - * Fix exception when global `Error.stackTraceLimit` is too low - -0.4.2 / 2014-07-19 -================== - - * Correct call site for wrapped functions and properties - -0.4.1 / 2014-07-19 -================== - - * Improve automatic message generation for function properties - -0.4.0 / 2014-07-19 -================== - - * Add `TRACE_DEPRECATION` environment variable - * Remove non-standard grey color from color output - * Support `--no-deprecation` argument - * Support `--trace-deprecation` argument - * Support `deprecate.property(fn, prop, message)` - -0.3.0 / 2014-06-16 -================== - - * Add `NO_DEPRECATION` environment variable - -0.2.0 / 2014-06-15 -================== - - * Add `deprecate.property(obj, prop, message)` - * Remove `supports-color` dependency for node.js 0.8 - -0.1.0 / 2014-06-15 -================== - - * Add `deprecate.function(fn, message)` - * Add `process.on('deprecation', fn)` emitter - * Automatically generate message when omitted from `deprecate()` - -0.0.1 / 2014-06-15 -================== - - * Fix warning for dynamic calls at singe call site - -0.0.0 / 2014-06-15 -================== - - * Initial implementation diff --git a/node_modules/serve-index/node_modules/depd/LICENSE b/node_modules/serve-index/node_modules/depd/LICENSE deleted file mode 100644 index 84441fb..0000000 --- a/node_modules/serve-index/node_modules/depd/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) 2014-2017 Douglas Christopher Wilson - -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/serve-index/node_modules/depd/Readme.md b/node_modules/serve-index/node_modules/depd/Readme.md deleted file mode 100644 index 7790670..0000000 --- a/node_modules/serve-index/node_modules/depd/Readme.md +++ /dev/null @@ -1,280 +0,0 @@ -# depd - -[![NPM Version][npm-version-image]][npm-url] -[![NPM Downloads][npm-downloads-image]][npm-url] -[![Node.js Version][node-image]][node-url] -[![Linux Build][travis-image]][travis-url] -[![Windows Build][appveyor-image]][appveyor-url] -[![Coverage Status][coveralls-image]][coveralls-url] - -Deprecate all the things - -> With great modules comes great responsibility; mark things deprecated! - -## Install - -This module is installed directly using `npm`: - -```sh -$ npm install depd -``` - -This module can also be bundled with systems like -[Browserify](http://browserify.org/) or [webpack](https://webpack.github.io/), -though by default this module will alter it's API to no longer display or -track deprecations. - -## API - - - -```js -var deprecate = require('depd')('my-module') -``` - -This library allows you to display deprecation messages to your users. -This library goes above and beyond with deprecation warnings by -introspection of the call stack (but only the bits that it is interested -in). - -Instead of just warning on the first invocation of a deprecated -function and never again, this module will warn on the first invocation -of a deprecated function per unique call site, making it ideal to alert -users of all deprecated uses across the code base, rather than just -whatever happens to execute first. - -The deprecation warnings from this module also include the file and line -information for the call into the module that the deprecated function was -in. - -**NOTE** this library has a similar interface to the `debug` module, and -this module uses the calling file to get the boundary for the call stacks, -so you should always create a new `deprecate` object in each file and not -within some central file. - -### depd(namespace) - -Create a new deprecate function that uses the given namespace name in the -messages and will display the call site prior to the stack entering the -file this function was called from. It is highly suggested you use the -name of your module as the namespace. - -### deprecate(message) - -Call this function from deprecated code to display a deprecation message. -This message will appear once per unique caller site. Caller site is the -first call site in the stack in a different file from the caller of this -function. - -If the message is omitted, a message is generated for you based on the site -of the `deprecate()` call and will display the name of the function called, -similar to the name displayed in a stack trace. - -### deprecate.function(fn, message) - -Call this function to wrap a given function in a deprecation message on any -call to the function. An optional message can be supplied to provide a custom -message. - -### deprecate.property(obj, prop, message) - -Call this function to wrap a given property on object in a deprecation message -on any accessing or setting of the property. An optional message can be supplied -to provide a custom message. - -The method must be called on the object where the property belongs (not -inherited from the prototype). - -If the property is a data descriptor, it will be converted to an accessor -descriptor in order to display the deprecation message. - -### process.on('deprecation', fn) - -This module will allow easy capturing of deprecation errors by emitting the -errors as the type "deprecation" on the global `process`. If there are no -listeners for this type, the errors are written to STDERR as normal, but if -there are any listeners, nothing will be written to STDERR and instead only -emitted. From there, you can write the errors in a different format or to a -logging source. - -The error represents the deprecation and is emitted only once with the same -rules as writing to STDERR. The error has the following properties: - - - `message` - This is the message given by the library - - `name` - This is always `'DeprecationError'` - - `namespace` - This is the namespace the deprecation came from - - `stack` - This is the stack of the call to the deprecated thing - -Example `error.stack` output: - -``` -DeprecationError: my-cool-module deprecated oldfunction - at Object. ([eval]-wrapper:6:22) - at Module._compile (module.js:456:26) - at evalScript (node.js:532:25) - at startup (node.js:80:7) - at node.js:902:3 -``` - -### process.env.NO_DEPRECATION - -As a user of modules that are deprecated, the environment variable `NO_DEPRECATION` -is provided as a quick solution to silencing deprecation warnings from being -output. The format of this is similar to that of `DEBUG`: - -```sh -$ NO_DEPRECATION=my-module,othermod node app.js -``` - -This will suppress deprecations from being output for "my-module" and "othermod". -The value is a list of comma-separated namespaces. To suppress every warning -across all namespaces, use the value `*` for a namespace. - -Providing the argument `--no-deprecation` to the `node` executable will suppress -all deprecations (only available in Node.js 0.8 or higher). - -**NOTE** This will not suppress the deperecations given to any "deprecation" -event listeners, just the output to STDERR. - -### process.env.TRACE_DEPRECATION - -As a user of modules that are deprecated, the environment variable `TRACE_DEPRECATION` -is provided as a solution to getting more detailed location information in deprecation -warnings by including the entire stack trace. The format of this is the same as -`NO_DEPRECATION`: - -```sh -$ TRACE_DEPRECATION=my-module,othermod node app.js -``` - -This will include stack traces for deprecations being output for "my-module" and -"othermod". The value is a list of comma-separated namespaces. To trace every -warning across all namespaces, use the value `*` for a namespace. - -Providing the argument `--trace-deprecation` to the `node` executable will trace -all deprecations (only available in Node.js 0.8 or higher). - -**NOTE** This will not trace the deperecations silenced by `NO_DEPRECATION`. - -## Display - -![message](files/message.png) - -When a user calls a function in your library that you mark deprecated, they -will see the following written to STDERR (in the given colors, similar colors -and layout to the `debug` module): - -``` -bright cyan bright yellow -| | reset cyan -| | | | -▼ ▼ ▼ ▼ -my-cool-module deprecated oldfunction [eval]-wrapper:6:22 -▲ ▲ ▲ ▲ -| | | | -namespace | | location of mycoolmod.oldfunction() call - | deprecation message - the word "deprecated" -``` - -If the user redirects their STDERR to a file or somewhere that does not support -colors, they see (similar layout to the `debug` module): - -``` -Sun, 15 Jun 2014 05:21:37 GMT my-cool-module deprecated oldfunction at [eval]-wrapper:6:22 -▲ ▲ ▲ ▲ ▲ -| | | | | -timestamp of message namespace | | location of mycoolmod.oldfunction() call - | deprecation message - the word "deprecated" -``` - -## Examples - -### Deprecating all calls to a function - -This will display a deprecated message about "oldfunction" being deprecated -from "my-module" on STDERR. - -```js -var deprecate = require('depd')('my-cool-module') - -// message automatically derived from function name -// Object.oldfunction -exports.oldfunction = deprecate.function(function oldfunction () { - // all calls to function are deprecated -}) - -// specific message -exports.oldfunction = deprecate.function(function () { - // all calls to function are deprecated -}, 'oldfunction') -``` - -### Conditionally deprecating a function call - -This will display a deprecated message about "weirdfunction" being deprecated -from "my-module" on STDERR when called with less than 2 arguments. - -```js -var deprecate = require('depd')('my-cool-module') - -exports.weirdfunction = function () { - if (arguments.length < 2) { - // calls with 0 or 1 args are deprecated - deprecate('weirdfunction args < 2') - } -} -``` - -When calling `deprecate` as a function, the warning is counted per call site -within your own module, so you can display different deprecations depending -on different situations and the users will still get all the warnings: - -```js -var deprecate = require('depd')('my-cool-module') - -exports.weirdfunction = function () { - if (arguments.length < 2) { - // calls with 0 or 1 args are deprecated - deprecate('weirdfunction args < 2') - } else if (typeof arguments[0] !== 'string') { - // calls with non-string first argument are deprecated - deprecate('weirdfunction non-string first arg') - } -} -``` - -### Deprecating property access - -This will display a deprecated message about "oldprop" being deprecated -from "my-module" on STDERR when accessed. A deprecation will be displayed -when setting the value and when getting the value. - -```js -var deprecate = require('depd')('my-cool-module') - -exports.oldprop = 'something' - -// message automatically derives from property name -deprecate.property(exports, 'oldprop') - -// explicit message -deprecate.property(exports, 'oldprop', 'oldprop >= 0.10') -``` - -## License - -[MIT](LICENSE) - -[npm-version-image]: https://img.shields.io/npm/v/depd.svg -[npm-downloads-image]: https://img.shields.io/npm/dm/depd.svg -[npm-url]: https://npmjs.org/package/depd -[travis-image]: https://img.shields.io/travis/dougwilson/nodejs-depd/master.svg?label=linux -[travis-url]: https://travis-ci.org/dougwilson/nodejs-depd -[appveyor-image]: https://img.shields.io/appveyor/ci/dougwilson/nodejs-depd/master.svg?label=windows -[appveyor-url]: https://ci.appveyor.com/project/dougwilson/nodejs-depd -[coveralls-image]: https://img.shields.io/coveralls/dougwilson/nodejs-depd/master.svg -[coveralls-url]: https://coveralls.io/r/dougwilson/nodejs-depd?branch=master -[node-image]: https://img.shields.io/node/v/depd.svg -[node-url]: https://nodejs.org/en/download/ diff --git a/node_modules/serve-index/node_modules/depd/index.js b/node_modules/serve-index/node_modules/depd/index.js deleted file mode 100644 index d758d3c..0000000 --- a/node_modules/serve-index/node_modules/depd/index.js +++ /dev/null @@ -1,522 +0,0 @@ -/*! - * depd - * Copyright(c) 2014-2017 Douglas Christopher Wilson - * MIT Licensed - */ - -/** - * Module dependencies. - */ - -var callSiteToString = require('./lib/compat').callSiteToString -var eventListenerCount = require('./lib/compat').eventListenerCount -var relative = require('path').relative - -/** - * Module exports. - */ - -module.exports = depd - -/** - * Get the path to base files on. - */ - -var basePath = process.cwd() - -/** - * Determine if namespace is contained in the string. - */ - -function containsNamespace (str, namespace) { - var vals = str.split(/[ ,]+/) - var ns = String(namespace).toLowerCase() - - for (var i = 0; i < vals.length; i++) { - var val = vals[i] - - // namespace contained - if (val && (val === '*' || val.toLowerCase() === ns)) { - return true - } - } - - return false -} - -/** - * Convert a data descriptor to accessor descriptor. - */ - -function convertDataDescriptorToAccessor (obj, prop, message) { - var descriptor = Object.getOwnPropertyDescriptor(obj, prop) - var value = descriptor.value - - descriptor.get = function getter () { return value } - - if (descriptor.writable) { - descriptor.set = function setter (val) { return (value = val) } - } - - delete descriptor.value - delete descriptor.writable - - Object.defineProperty(obj, prop, descriptor) - - return descriptor -} - -/** - * Create arguments string to keep arity. - */ - -function createArgumentsString (arity) { - var str = '' - - for (var i = 0; i < arity; i++) { - str += ', arg' + i - } - - return str.substr(2) -} - -/** - * Create stack string from stack. - */ - -function createStackString (stack) { - var str = this.name + ': ' + this.namespace - - if (this.message) { - str += ' deprecated ' + this.message - } - - for (var i = 0; i < stack.length; i++) { - str += '\n at ' + callSiteToString(stack[i]) - } - - return str -} - -/** - * Create deprecate for namespace in caller. - */ - -function depd (namespace) { - if (!namespace) { - throw new TypeError('argument namespace is required') - } - - var stack = getStack() - var site = callSiteLocation(stack[1]) - var file = site[0] - - function deprecate (message) { - // call to self as log - log.call(deprecate, message) - } - - deprecate._file = file - deprecate._ignored = isignored(namespace) - deprecate._namespace = namespace - deprecate._traced = istraced(namespace) - deprecate._warned = Object.create(null) - - deprecate.function = wrapfunction - deprecate.property = wrapproperty - - return deprecate -} - -/** - * Determine if namespace is ignored. - */ - -function isignored (namespace) { - /* istanbul ignore next: tested in a child processs */ - if (process.noDeprecation) { - // --no-deprecation support - return true - } - - var str = process.env.NO_DEPRECATION || '' - - // namespace ignored - return containsNamespace(str, namespace) -} - -/** - * Determine if namespace is traced. - */ - -function istraced (namespace) { - /* istanbul ignore next: tested in a child processs */ - if (process.traceDeprecation) { - // --trace-deprecation support - return true - } - - var str = process.env.TRACE_DEPRECATION || '' - - // namespace traced - return containsNamespace(str, namespace) -} - -/** - * Display deprecation message. - */ - -function log (message, site) { - var haslisteners = eventListenerCount(process, 'deprecation') !== 0 - - // abort early if no destination - if (!haslisteners && this._ignored) { - return - } - - var caller - var callFile - var callSite - var depSite - var i = 0 - var seen = false - var stack = getStack() - var file = this._file - - if (site) { - // provided site - depSite = site - callSite = callSiteLocation(stack[1]) - callSite.name = depSite.name - file = callSite[0] - } else { - // get call site - i = 2 - depSite = callSiteLocation(stack[i]) - callSite = depSite - } - - // get caller of deprecated thing in relation to file - for (; i < stack.length; i++) { - caller = callSiteLocation(stack[i]) - callFile = caller[0] - - if (callFile === file) { - seen = true - } else if (callFile === this._file) { - file = this._file - } else if (seen) { - break - } - } - - var key = caller - ? depSite.join(':') + '__' + caller.join(':') - : undefined - - if (key !== undefined && key in this._warned) { - // already warned - return - } - - this._warned[key] = true - - // generate automatic message from call site - var msg = message - if (!msg) { - msg = callSite === depSite || !callSite.name - ? defaultMessage(depSite) - : defaultMessage(callSite) - } - - // emit deprecation if listeners exist - if (haslisteners) { - var err = DeprecationError(this._namespace, msg, stack.slice(i)) - process.emit('deprecation', err) - return - } - - // format and write message - var format = process.stderr.isTTY - ? formatColor - : formatPlain - var output = format.call(this, msg, caller, stack.slice(i)) - process.stderr.write(output + '\n', 'utf8') -} - -/** - * Get call site location as array. - */ - -function callSiteLocation (callSite) { - var file = callSite.getFileName() || '' - var line = callSite.getLineNumber() - var colm = callSite.getColumnNumber() - - if (callSite.isEval()) { - file = callSite.getEvalOrigin() + ', ' + file - } - - var site = [file, line, colm] - - site.callSite = callSite - site.name = callSite.getFunctionName() - - return site -} - -/** - * Generate a default message from the site. - */ - -function defaultMessage (site) { - var callSite = site.callSite - var funcName = site.name - - // make useful anonymous name - if (!funcName) { - funcName = '' - } - - var context = callSite.getThis() - var typeName = context && callSite.getTypeName() - - // ignore useless type name - if (typeName === 'Object') { - typeName = undefined - } - - // make useful type name - if (typeName === 'Function') { - typeName = context.name || typeName - } - - return typeName && callSite.getMethodName() - ? typeName + '.' + funcName - : funcName -} - -/** - * Format deprecation message without color. - */ - -function formatPlain (msg, caller, stack) { - var timestamp = new Date().toUTCString() - - var formatted = timestamp + - ' ' + this._namespace + - ' deprecated ' + msg - - // add stack trace - if (this._traced) { - for (var i = 0; i < stack.length; i++) { - formatted += '\n at ' + callSiteToString(stack[i]) - } - - return formatted - } - - if (caller) { - formatted += ' at ' + formatLocation(caller) - } - - return formatted -} - -/** - * Format deprecation message with color. - */ - -function formatColor (msg, caller, stack) { - var formatted = '\x1b[36;1m' + this._namespace + '\x1b[22;39m' + // bold cyan - ' \x1b[33;1mdeprecated\x1b[22;39m' + // bold yellow - ' \x1b[0m' + msg + '\x1b[39m' // reset - - // add stack trace - if (this._traced) { - for (var i = 0; i < stack.length; i++) { - formatted += '\n \x1b[36mat ' + callSiteToString(stack[i]) + '\x1b[39m' // cyan - } - - return formatted - } - - if (caller) { - formatted += ' \x1b[36m' + formatLocation(caller) + '\x1b[39m' // cyan - } - - return formatted -} - -/** - * Format call site location. - */ - -function formatLocation (callSite) { - return relative(basePath, callSite[0]) + - ':' + callSite[1] + - ':' + callSite[2] -} - -/** - * Get the stack as array of call sites. - */ - -function getStack () { - var limit = Error.stackTraceLimit - var obj = {} - var prep = Error.prepareStackTrace - - Error.prepareStackTrace = prepareObjectStackTrace - Error.stackTraceLimit = Math.max(10, limit) - - // capture the stack - Error.captureStackTrace(obj) - - // slice this function off the top - var stack = obj.stack.slice(1) - - Error.prepareStackTrace = prep - Error.stackTraceLimit = limit - - return stack -} - -/** - * Capture call site stack from v8. - */ - -function prepareObjectStackTrace (obj, stack) { - return stack -} - -/** - * Return a wrapped function in a deprecation message. - */ - -function wrapfunction (fn, message) { - if (typeof fn !== 'function') { - throw new TypeError('argument fn must be a function') - } - - var args = createArgumentsString(fn.length) - var deprecate = this // eslint-disable-line no-unused-vars - var stack = getStack() - var site = callSiteLocation(stack[1]) - - site.name = fn.name - - // eslint-disable-next-line no-eval - var deprecatedfn = eval('(function (' + args + ') {\n' + - '"use strict"\n' + - 'log.call(deprecate, message, site)\n' + - 'return fn.apply(this, arguments)\n' + - '})') - - return deprecatedfn -} - -/** - * Wrap property in a deprecation message. - */ - -function wrapproperty (obj, prop, message) { - if (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) { - throw new TypeError('argument obj must be object') - } - - var descriptor = Object.getOwnPropertyDescriptor(obj, prop) - - if (!descriptor) { - throw new TypeError('must call property on owner object') - } - - if (!descriptor.configurable) { - throw new TypeError('property must be configurable') - } - - var deprecate = this - var stack = getStack() - var site = callSiteLocation(stack[1]) - - // set site name - site.name = prop - - // convert data descriptor - if ('value' in descriptor) { - descriptor = convertDataDescriptorToAccessor(obj, prop, message) - } - - var get = descriptor.get - var set = descriptor.set - - // wrap getter - if (typeof get === 'function') { - descriptor.get = function getter () { - log.call(deprecate, message, site) - return get.apply(this, arguments) - } - } - - // wrap setter - if (typeof set === 'function') { - descriptor.set = function setter () { - log.call(deprecate, message, site) - return set.apply(this, arguments) - } - } - - Object.defineProperty(obj, prop, descriptor) -} - -/** - * Create DeprecationError for deprecation - */ - -function DeprecationError (namespace, message, stack) { - var error = new Error() - var stackString - - Object.defineProperty(error, 'constructor', { - value: DeprecationError - }) - - Object.defineProperty(error, 'message', { - configurable: true, - enumerable: false, - value: message, - writable: true - }) - - Object.defineProperty(error, 'name', { - enumerable: false, - configurable: true, - value: 'DeprecationError', - writable: true - }) - - Object.defineProperty(error, 'namespace', { - configurable: true, - enumerable: false, - value: namespace, - writable: true - }) - - Object.defineProperty(error, 'stack', { - configurable: true, - enumerable: false, - get: function () { - if (stackString !== undefined) { - return stackString - } - - // prepare stack trace - return (stackString = createStackString.call(this, stack)) - }, - set: function setter (val) { - stackString = val - } - }) - - return error -} diff --git a/node_modules/serve-index/node_modules/depd/lib/browser/index.js b/node_modules/serve-index/node_modules/depd/lib/browser/index.js deleted file mode 100644 index 6be45cc..0000000 --- a/node_modules/serve-index/node_modules/depd/lib/browser/index.js +++ /dev/null @@ -1,77 +0,0 @@ -/*! - * depd - * Copyright(c) 2015 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict' - -/** - * Module exports. - * @public - */ - -module.exports = depd - -/** - * Create deprecate for namespace in caller. - */ - -function depd (namespace) { - if (!namespace) { - throw new TypeError('argument namespace is required') - } - - function deprecate (message) { - // no-op in browser - } - - deprecate._file = undefined - deprecate._ignored = true - deprecate._namespace = namespace - deprecate._traced = false - deprecate._warned = Object.create(null) - - deprecate.function = wrapfunction - deprecate.property = wrapproperty - - return deprecate -} - -/** - * Return a wrapped function in a deprecation message. - * - * This is a no-op version of the wrapper, which does nothing but call - * validation. - */ - -function wrapfunction (fn, message) { - if (typeof fn !== 'function') { - throw new TypeError('argument fn must be a function') - } - - return fn -} - -/** - * Wrap property in a deprecation message. - * - * This is a no-op version of the wrapper, which does nothing but call - * validation. - */ - -function wrapproperty (obj, prop, message) { - if (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) { - throw new TypeError('argument obj must be object') - } - - var descriptor = Object.getOwnPropertyDescriptor(obj, prop) - - if (!descriptor) { - throw new TypeError('must call property on owner object') - } - - if (!descriptor.configurable) { - throw new TypeError('property must be configurable') - } -} diff --git a/node_modules/serve-index/node_modules/depd/lib/compat/callsite-tostring.js b/node_modules/serve-index/node_modules/depd/lib/compat/callsite-tostring.js deleted file mode 100644 index 73186dc..0000000 --- a/node_modules/serve-index/node_modules/depd/lib/compat/callsite-tostring.js +++ /dev/null @@ -1,103 +0,0 @@ -/*! - * depd - * Copyright(c) 2014 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict' - -/** - * Module exports. - */ - -module.exports = callSiteToString - -/** - * Format a CallSite file location to a string. - */ - -function callSiteFileLocation (callSite) { - var fileName - var fileLocation = '' - - if (callSite.isNative()) { - fileLocation = 'native' - } else if (callSite.isEval()) { - fileName = callSite.getScriptNameOrSourceURL() - if (!fileName) { - fileLocation = callSite.getEvalOrigin() - } - } else { - fileName = callSite.getFileName() - } - - if (fileName) { - fileLocation += fileName - - var lineNumber = callSite.getLineNumber() - if (lineNumber != null) { - fileLocation += ':' + lineNumber - - var columnNumber = callSite.getColumnNumber() - if (columnNumber) { - fileLocation += ':' + columnNumber - } - } - } - - return fileLocation || 'unknown source' -} - -/** - * Format a CallSite to a string. - */ - -function callSiteToString (callSite) { - var addSuffix = true - var fileLocation = callSiteFileLocation(callSite) - var functionName = callSite.getFunctionName() - var isConstructor = callSite.isConstructor() - var isMethodCall = !(callSite.isToplevel() || isConstructor) - var line = '' - - if (isMethodCall) { - var methodName = callSite.getMethodName() - var typeName = getConstructorName(callSite) - - if (functionName) { - if (typeName && functionName.indexOf(typeName) !== 0) { - line += typeName + '.' - } - - line += functionName - - if (methodName && functionName.lastIndexOf('.' + methodName) !== functionName.length - methodName.length - 1) { - line += ' [as ' + methodName + ']' - } - } else { - line += typeName + '.' + (methodName || '') - } - } else if (isConstructor) { - line += 'new ' + (functionName || '') - } else if (functionName) { - line += functionName - } else { - addSuffix = false - line += fileLocation - } - - if (addSuffix) { - line += ' (' + fileLocation + ')' - } - - return line -} - -/** - * Get constructor name of reviver. - */ - -function getConstructorName (obj) { - var receiver = obj.receiver - return (receiver.constructor && receiver.constructor.name) || null -} diff --git a/node_modules/serve-index/node_modules/depd/lib/compat/event-listener-count.js b/node_modules/serve-index/node_modules/depd/lib/compat/event-listener-count.js deleted file mode 100644 index 3a8925d..0000000 --- a/node_modules/serve-index/node_modules/depd/lib/compat/event-listener-count.js +++ /dev/null @@ -1,22 +0,0 @@ -/*! - * depd - * Copyright(c) 2015 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict' - -/** - * Module exports. - * @public - */ - -module.exports = eventListenerCount - -/** - * Get the count of listeners on an event emitter of a specific type. - */ - -function eventListenerCount (emitter, type) { - return emitter.listeners(type).length -} diff --git a/node_modules/serve-index/node_modules/depd/lib/compat/index.js b/node_modules/serve-index/node_modules/depd/lib/compat/index.js deleted file mode 100644 index 955b333..0000000 --- a/node_modules/serve-index/node_modules/depd/lib/compat/index.js +++ /dev/null @@ -1,79 +0,0 @@ -/*! - * depd - * Copyright(c) 2014-2015 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict' - -/** - * Module dependencies. - * @private - */ - -var EventEmitter = require('events').EventEmitter - -/** - * Module exports. - * @public - */ - -lazyProperty(module.exports, 'callSiteToString', function callSiteToString () { - var limit = Error.stackTraceLimit - var obj = {} - var prep = Error.prepareStackTrace - - function prepareObjectStackTrace (obj, stack) { - return stack - } - - Error.prepareStackTrace = prepareObjectStackTrace - Error.stackTraceLimit = 2 - - // capture the stack - Error.captureStackTrace(obj) - - // slice the stack - var stack = obj.stack.slice() - - Error.prepareStackTrace = prep - Error.stackTraceLimit = limit - - return stack[0].toString ? toString : require('./callsite-tostring') -}) - -lazyProperty(module.exports, 'eventListenerCount', function eventListenerCount () { - return EventEmitter.listenerCount || require('./event-listener-count') -}) - -/** - * Define a lazy property. - */ - -function lazyProperty (obj, prop, getter) { - function get () { - var val = getter() - - Object.defineProperty(obj, prop, { - configurable: true, - enumerable: true, - value: val - }) - - return val - } - - Object.defineProperty(obj, prop, { - configurable: true, - enumerable: true, - get: get - }) -} - -/** - * Call toString() on the obj - */ - -function toString (obj) { - return obj.toString() -} diff --git a/node_modules/serve-index/node_modules/depd/package.json b/node_modules/serve-index/node_modules/depd/package.json deleted file mode 100644 index 5e3c863..0000000 --- a/node_modules/serve-index/node_modules/depd/package.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "depd", - "description": "Deprecate all the things", - "version": "1.1.2", - "author": "Douglas Christopher Wilson ", - "license": "MIT", - "keywords": [ - "deprecate", - "deprecated" - ], - "repository": "dougwilson/nodejs-depd", - "browser": "lib/browser/index.js", - "devDependencies": { - "benchmark": "2.1.4", - "beautify-benchmark": "0.2.4", - "eslint": "3.19.0", - "eslint-config-standard": "7.1.0", - "eslint-plugin-markdown": "1.0.0-beta.7", - "eslint-plugin-promise": "3.6.0", - "eslint-plugin-standard": "3.0.1", - "istanbul": "0.4.5", - "mocha": "~1.21.5" - }, - "files": [ - "lib/", - "History.md", - "LICENSE", - "index.js", - "Readme.md" - ], - "engines": { - "node": ">= 0.6" - }, - "scripts": { - "bench": "node benchmark/index.js", - "lint": "eslint --plugin markdown --ext js,md .", - "test": "mocha --reporter spec --bail test/", - "test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --no-exit test/", - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot test/" - } -} diff --git a/node_modules/serve-index/node_modules/http-errors/HISTORY.md b/node_modules/serve-index/node_modules/http-errors/HISTORY.md deleted file mode 100644 index cba86e2..0000000 --- a/node_modules/serve-index/node_modules/http-errors/HISTORY.md +++ /dev/null @@ -1,132 +0,0 @@ -2018-03-29 / 1.6.3 -================== - - * deps: depd@~1.1.2 - - perf: remove argument reassignment - * deps: setprototypeof@1.1.0 - * deps: statuses@'>= 1.3.1 < 2' - -2017-08-04 / 1.6.2 -================== - - * deps: depd@1.1.1 - - Remove unnecessary `Buffer` loading - -2017-02-20 / 1.6.1 -================== - - * deps: setprototypeof@1.0.3 - - Fix shim for old browsers - -2017-02-14 / 1.6.0 -================== - - * Accept custom 4xx and 5xx status codes in factory - * Add deprecation message to `"I'mateapot"` export - * Deprecate passing status code as anything except first argument in factory - * Deprecate using non-error status codes - * Make `message` property enumerable for `HttpError`s - -2016-11-16 / 1.5.1 -================== - - * deps: inherits@2.0.3 - - Fix issue loading in browser - * deps: setprototypeof@1.0.2 - * deps: statuses@'>= 1.3.1 < 2' - -2016-05-18 / 1.5.0 -================== - - * Support new code `421 Misdirected Request` - * Use `setprototypeof` module to replace `__proto__` setting - * deps: statuses@'>= 1.3.0 < 2' - - Add `421 Misdirected Request` - - perf: enable strict mode - * perf: enable strict mode - -2016-01-28 / 1.4.0 -================== - - * Add `HttpError` export, for `err instanceof createError.HttpError` - * deps: inherits@2.0.1 - * deps: statuses@'>= 1.2.1 < 2' - - Fix message for status 451 - - Remove incorrect nginx status code - -2015-02-02 / 1.3.1 -================== - - * Fix regression where status can be overwritten in `createError` `props` - -2015-02-01 / 1.3.0 -================== - - * Construct errors using defined constructors from `createError` - * Fix error names that are not identifiers - - `createError["I'mateapot"]` is now `createError.ImATeapot` - * Set a meaningful `name` property on constructed errors - -2014-12-09 / 1.2.8 -================== - - * Fix stack trace from exported function - * Remove `arguments.callee` usage - -2014-10-14 / 1.2.7 -================== - - * Remove duplicate line - -2014-10-02 / 1.2.6 -================== - - * Fix `expose` to be `true` for `ClientError` constructor - -2014-09-28 / 1.2.5 -================== - - * deps: statuses@1 - -2014-09-21 / 1.2.4 -================== - - * Fix dependency version to work with old `npm`s - -2014-09-21 / 1.2.3 -================== - - * deps: statuses@~1.1.0 - -2014-09-21 / 1.2.2 -================== - - * Fix publish error - -2014-09-21 / 1.2.1 -================== - - * Support Node.js 0.6 - * Use `inherits` instead of `util` - -2014-09-09 / 1.2.0 -================== - - * Fix the way inheriting functions - * Support `expose` being provided in properties argument - -2014-09-08 / 1.1.0 -================== - - * Default status to 500 - * Support provided `error` to extend - -2014-09-08 / 1.0.1 -================== - - * Fix accepting string message - -2014-09-08 / 1.0.0 -================== - - * Initial release diff --git a/node_modules/serve-index/node_modules/http-errors/LICENSE b/node_modules/serve-index/node_modules/http-errors/LICENSE deleted file mode 100644 index 82af4df..0000000 --- a/node_modules/serve-index/node_modules/http-errors/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ - -The MIT License (MIT) - -Copyright (c) 2014 Jonathan Ong me@jongleberry.com -Copyright (c) 2016 Douglas Christopher Wilson doug@somethingdoug.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/serve-index/node_modules/http-errors/README.md b/node_modules/serve-index/node_modules/http-errors/README.md deleted file mode 100644 index 79663d8..0000000 --- a/node_modules/serve-index/node_modules/http-errors/README.md +++ /dev/null @@ -1,135 +0,0 @@ -# http-errors - -[![NPM Version][npm-image]][npm-url] -[![NPM Downloads][downloads-image]][downloads-url] -[![Node.js Version][node-version-image]][node-version-url] -[![Build Status][travis-image]][travis-url] -[![Test Coverage][coveralls-image]][coveralls-url] - -Create HTTP errors for Express, Koa, Connect, etc. with ease. - -## Install - -This is a [Node.js](https://nodejs.org/en/) module available through the -[npm registry](https://www.npmjs.com/). Installation is done using the -[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): - -```bash -$ npm install http-errors -``` - -## Example - -```js -var createError = require('http-errors') -var express = require('express') -var app = express() - -app.use(function (req, res, next) { - if (!req.user) return next(createError(401, 'Please login to view this page.')) - next() -}) -``` - -## API - -This is the current API, currently extracted from Koa and subject to change. - -All errors inherit from JavaScript `Error` and the exported `createError.HttpError`. - -### Error Properties - -- `expose` - can be used to signal if `message` should be sent to the client, - defaulting to `false` when `status` >= 500 -- `headers` - can be an object of header names to values to be sent to the - client, defaulting to `undefined`. When defined, the key names should all - be lower-cased -- `message` - the traditional error message, which should be kept short and all - single line -- `status` - the status code of the error, mirroring `statusCode` for general - compatibility -- `statusCode` - the status code of the error, defaulting to `500` - -### createError([status], [message], [properties]) - - - -```js -var err = createError(404, 'This video does not exist!') -``` - -- `status: 500` - the status code as a number -- `message` - the message of the error, defaulting to node's text for that status code. -- `properties` - custom properties to attach to the object - -### new createError\[code || name\](\[msg]\)) - - - -```js -var err = new createError.NotFound() -``` - -- `code` - the status code as a number -- `name` - the name of the error as a "bumpy case", i.e. `NotFound` or `InternalServerError`. - -#### List of all constructors - -|Status Code|Constructor Name | -|-----------|-----------------------------| -|400 |BadRequest | -|401 |Unauthorized | -|402 |PaymentRequired | -|403 |Forbidden | -|404 |NotFound | -|405 |MethodNotAllowed | -|406 |NotAcceptable | -|407 |ProxyAuthenticationRequired | -|408 |RequestTimeout | -|409 |Conflict | -|410 |Gone | -|411 |LengthRequired | -|412 |PreconditionFailed | -|413 |PayloadTooLarge | -|414 |URITooLong | -|415 |UnsupportedMediaType | -|416 |RangeNotSatisfiable | -|417 |ExpectationFailed | -|418 |ImATeapot | -|421 |MisdirectedRequest | -|422 |UnprocessableEntity | -|423 |Locked | -|424 |FailedDependency | -|425 |UnorderedCollection | -|426 |UpgradeRequired | -|428 |PreconditionRequired | -|429 |TooManyRequests | -|431 |RequestHeaderFieldsTooLarge | -|451 |UnavailableForLegalReasons | -|500 |InternalServerError | -|501 |NotImplemented | -|502 |BadGateway | -|503 |ServiceUnavailable | -|504 |GatewayTimeout | -|505 |HTTPVersionNotSupported | -|506 |VariantAlsoNegotiates | -|507 |InsufficientStorage | -|508 |LoopDetected | -|509 |BandwidthLimitExceeded | -|510 |NotExtended | -|511 |NetworkAuthenticationRequired| - -## License - -[MIT](LICENSE) - -[npm-image]: https://img.shields.io/npm/v/http-errors.svg -[npm-url]: https://npmjs.org/package/http-errors -[node-version-image]: https://img.shields.io/node/v/http-errors.svg -[node-version-url]: https://nodejs.org/en/download/ -[travis-image]: https://img.shields.io/travis/jshttp/http-errors.svg -[travis-url]: https://travis-ci.org/jshttp/http-errors -[coveralls-image]: https://img.shields.io/coveralls/jshttp/http-errors.svg -[coveralls-url]: https://coveralls.io/r/jshttp/http-errors -[downloads-image]: https://img.shields.io/npm/dm/http-errors.svg -[downloads-url]: https://npmjs.org/package/http-errors diff --git a/node_modules/serve-index/node_modules/http-errors/index.js b/node_modules/serve-index/node_modules/http-errors/index.js deleted file mode 100644 index 9509303..0000000 --- a/node_modules/serve-index/node_modules/http-errors/index.js +++ /dev/null @@ -1,260 +0,0 @@ -/*! - * http-errors - * Copyright(c) 2014 Jonathan Ong - * Copyright(c) 2016 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict' - -/** - * Module dependencies. - * @private - */ - -var deprecate = require('depd')('http-errors') -var setPrototypeOf = require('setprototypeof') -var statuses = require('statuses') -var inherits = require('inherits') - -/** - * Module exports. - * @public - */ - -module.exports = createError -module.exports.HttpError = createHttpErrorConstructor() - -// Populate exports for all constructors -populateConstructorExports(module.exports, statuses.codes, module.exports.HttpError) - -/** - * Get the code class of a status code. - * @private - */ - -function codeClass (status) { - return Number(String(status).charAt(0) + '00') -} - -/** - * Create a new HTTP Error. - * - * @returns {Error} - * @public - */ - -function createError () { - // so much arity going on ~_~ - var err - var msg - var status = 500 - var props = {} - for (var i = 0; i < arguments.length; i++) { - var arg = arguments[i] - if (arg instanceof Error) { - err = arg - status = err.status || err.statusCode || status - continue - } - switch (typeof arg) { - case 'string': - msg = arg - break - case 'number': - status = arg - if (i !== 0) { - deprecate('non-first-argument status code; replace with createError(' + arg + ', ...)') - } - break - case 'object': - props = arg - break - } - } - - if (typeof status === 'number' && (status < 400 || status >= 600)) { - deprecate('non-error status code; use only 4xx or 5xx status codes') - } - - if (typeof status !== 'number' || - (!statuses[status] && (status < 400 || status >= 600))) { - status = 500 - } - - // constructor - var HttpError = createError[status] || createError[codeClass(status)] - - if (!err) { - // create error - err = HttpError - ? new HttpError(msg) - : new Error(msg || statuses[status]) - Error.captureStackTrace(err, createError) - } - - if (!HttpError || !(err instanceof HttpError) || err.status !== status) { - // add properties to generic error - err.expose = status < 500 - err.status = err.statusCode = status - } - - for (var key in props) { - if (key !== 'status' && key !== 'statusCode') { - err[key] = props[key] - } - } - - return err -} - -/** - * Create HTTP error abstract base class. - * @private - */ - -function createHttpErrorConstructor () { - function HttpError () { - throw new TypeError('cannot construct abstract class') - } - - inherits(HttpError, Error) - - return HttpError -} - -/** - * Create a constructor for a client error. - * @private - */ - -function createClientErrorConstructor (HttpError, name, code) { - var className = name.match(/Error$/) ? name : name + 'Error' - - function ClientError (message) { - // create the error object - var msg = message != null ? message : statuses[code] - var err = new Error(msg) - - // capture a stack trace to the construction point - Error.captureStackTrace(err, ClientError) - - // adjust the [[Prototype]] - setPrototypeOf(err, ClientError.prototype) - - // redefine the error message - Object.defineProperty(err, 'message', { - enumerable: true, - configurable: true, - value: msg, - writable: true - }) - - // redefine the error name - Object.defineProperty(err, 'name', { - enumerable: false, - configurable: true, - value: className, - writable: true - }) - - return err - } - - inherits(ClientError, HttpError) - - ClientError.prototype.status = code - ClientError.prototype.statusCode = code - ClientError.prototype.expose = true - - return ClientError -} - -/** - * Create a constructor for a server error. - * @private - */ - -function createServerErrorConstructor (HttpError, name, code) { - var className = name.match(/Error$/) ? name : name + 'Error' - - function ServerError (message) { - // create the error object - var msg = message != null ? message : statuses[code] - var err = new Error(msg) - - // capture a stack trace to the construction point - Error.captureStackTrace(err, ServerError) - - // adjust the [[Prototype]] - setPrototypeOf(err, ServerError.prototype) - - // redefine the error message - Object.defineProperty(err, 'message', { - enumerable: true, - configurable: true, - value: msg, - writable: true - }) - - // redefine the error name - Object.defineProperty(err, 'name', { - enumerable: false, - configurable: true, - value: className, - writable: true - }) - - return err - } - - inherits(ServerError, HttpError) - - ServerError.prototype.status = code - ServerError.prototype.statusCode = code - ServerError.prototype.expose = false - - return ServerError -} - -/** - * Populate the exports object with constructors for every error class. - * @private - */ - -function populateConstructorExports (exports, codes, HttpError) { - codes.forEach(function forEachCode (code) { - var CodeError - var name = toIdentifier(statuses[code]) - - switch (codeClass(code)) { - case 400: - CodeError = createClientErrorConstructor(HttpError, name, code) - break - case 500: - CodeError = createServerErrorConstructor(HttpError, name, code) - break - } - - if (CodeError) { - // export the constructor - exports[code] = CodeError - exports[name] = CodeError - } - }) - - // backwards-compatibility - exports["I'mateapot"] = deprecate.function(exports.ImATeapot, - '"I\'mateapot"; use "ImATeapot" instead') -} - -/** - * Convert a string of words to a JavaScript identifier. - * @private - */ - -function toIdentifier (str) { - return str.split(' ').map(function (token) { - return token.slice(0, 1).toUpperCase() + token.slice(1) - }).join('').replace(/[^ _0-9a-z]/gi, '') -} diff --git a/node_modules/serve-index/node_modules/http-errors/package.json b/node_modules/serve-index/node_modules/http-errors/package.json deleted file mode 100644 index a8d28e4..0000000 --- a/node_modules/serve-index/node_modules/http-errors/package.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "name": "http-errors", - "description": "Create HTTP error objects", - "version": "1.6.3", - "author": "Jonathan Ong (http://jongleberry.com)", - "contributors": [ - "Alan Plum ", - "Douglas Christopher Wilson " - ], - "license": "MIT", - "repository": "jshttp/http-errors", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "devDependencies": { - "eslint": "4.18.1", - "eslint-config-standard": "11.0.0", - "eslint-plugin-import": "2.9.0", - "eslint-plugin-markdown": "1.0.0-beta.6", - "eslint-plugin-node": "6.0.1", - "eslint-plugin-promise": "3.6.0", - "eslint-plugin-standard": "3.0.1", - "istanbul": "0.4.5", - "mocha": "1.21.5" - }, - "engines": { - "node": ">= 0.6" - }, - "scripts": { - "lint": "eslint --plugin markdown --ext js,md .", - "test": "mocha --reporter spec --bail", - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot", - "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter dot" - }, - "keywords": [ - "http", - "error" - ], - "files": [ - "index.js", - "HISTORY.md", - "LICENSE", - "README.md" - ] -} diff --git a/node_modules/serve-index/node_modules/inherits/LICENSE b/node_modules/serve-index/node_modules/inherits/LICENSE deleted file mode 100644 index dea3013..0000000 --- a/node_modules/serve-index/node_modules/inherits/LICENSE +++ /dev/null @@ -1,16 +0,0 @@ -The ISC License - -Copyright (c) Isaac Z. Schlueter - -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/serve-index/node_modules/inherits/README.md b/node_modules/serve-index/node_modules/inherits/README.md deleted file mode 100644 index b1c5665..0000000 --- a/node_modules/serve-index/node_modules/inherits/README.md +++ /dev/null @@ -1,42 +0,0 @@ -Browser-friendly inheritance fully compatible with standard node.js -[inherits](http://nodejs.org/api/util.html#util_util_inherits_constructor_superconstructor). - -This package exports standard `inherits` from node.js `util` module in -node environment, but also provides alternative browser-friendly -implementation through [browser -field](https://gist.github.com/shtylman/4339901). Alternative -implementation is a literal copy of standard one located in standalone -module to avoid requiring of `util`. It also has a shim for old -browsers with no `Object.create` support. - -While keeping you sure you are using standard `inherits` -implementation in node.js environment, it allows bundlers such as -[browserify](https://github.com/substack/node-browserify) to not -include full `util` package to your client code if all you need is -just `inherits` function. It worth, because browser shim for `util` -package is large and `inherits` is often the single function you need -from it. - -It's recommended to use this package instead of -`require('util').inherits` for any code that has chances to be used -not only in node.js but in browser too. - -## usage - -```js -var inherits = require('inherits'); -// then use exactly as the standard one -``` - -## note on version ~1.0 - -Version ~1.0 had completely different motivation and is not compatible -neither with 2.0 nor with standard node.js `inherits`. - -If you are using version ~1.0 and planning to switch to ~2.0, be -careful: - -* new version uses `super_` instead of `super` for referencing - superclass -* new version overwrites current prototype while old one preserves any - existing fields on it diff --git a/node_modules/serve-index/node_modules/inherits/inherits.js b/node_modules/serve-index/node_modules/inherits/inherits.js deleted file mode 100644 index 3b94763..0000000 --- a/node_modules/serve-index/node_modules/inherits/inherits.js +++ /dev/null @@ -1,7 +0,0 @@ -try { - var util = require('util'); - if (typeof util.inherits !== 'function') throw ''; - module.exports = util.inherits; -} catch (e) { - module.exports = require('./inherits_browser.js'); -} diff --git a/node_modules/serve-index/node_modules/inherits/inherits_browser.js b/node_modules/serve-index/node_modules/inherits/inherits_browser.js deleted file mode 100644 index c1e78a7..0000000 --- a/node_modules/serve-index/node_modules/inherits/inherits_browser.js +++ /dev/null @@ -1,23 +0,0 @@ -if (typeof Object.create === 'function') { - // implementation from standard node.js 'util' module - module.exports = function inherits(ctor, superCtor) { - ctor.super_ = superCtor - ctor.prototype = Object.create(superCtor.prototype, { - constructor: { - value: ctor, - enumerable: false, - writable: true, - configurable: true - } - }); - }; -} else { - // old school shim for old browsers - module.exports = function inherits(ctor, superCtor) { - ctor.super_ = superCtor - var TempCtor = function () {} - TempCtor.prototype = superCtor.prototype - ctor.prototype = new TempCtor() - ctor.prototype.constructor = ctor - } -} diff --git a/node_modules/serve-index/node_modules/inherits/package.json b/node_modules/serve-index/node_modules/inherits/package.json deleted file mode 100644 index 7cf62b9..0000000 --- a/node_modules/serve-index/node_modules/inherits/package.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "name": "inherits", - "description": "Browser-friendly inheritance fully compatible with standard node.js inherits()", - "version": "2.0.3", - "keywords": [ - "inheritance", - "class", - "klass", - "oop", - "object-oriented", - "inherits", - "browser", - "browserify" - ], - "main": "./inherits.js", - "browser": "./inherits_browser.js", - "repository": "git://github.com/isaacs/inherits", - "license": "ISC", - "scripts": { - "test": "node test" - }, - "devDependencies": { - "tap": "^7.1.0" - }, - "files": [ - "inherits.js", - "inherits_browser.js" - ] -} diff --git a/node_modules/serve-index/node_modules/setprototypeof/LICENSE b/node_modules/serve-index/node_modules/setprototypeof/LICENSE deleted file mode 100644 index 61afa2f..0000000 --- a/node_modules/serve-index/node_modules/setprototypeof/LICENSE +++ /dev/null @@ -1,13 +0,0 @@ -Copyright (c) 2015, Wes Todd - -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/serve-index/node_modules/setprototypeof/README.md b/node_modules/serve-index/node_modules/setprototypeof/README.md deleted file mode 100644 index 826bf02..0000000 --- a/node_modules/serve-index/node_modules/setprototypeof/README.md +++ /dev/null @@ -1,26 +0,0 @@ -# Polyfill for `Object.setPrototypeOf` - -A simple cross platform implementation to set the prototype of an instianted object. Supports all modern browsers and at least back to IE8. - -## Usage: - -``` -$ npm install --save setprototypeof -``` - -```javascript -var setPrototypeOf = require('setprototypeof'); - -var obj = {}; -setPrototypeOf(obj, { - foo: function() { - return 'bar'; - } -}); -obj.foo(); // bar -``` - -TypeScript is also supported: -```typescript -import setPrototypeOf = require('setprototypeof'); -``` \ No newline at end of file diff --git a/node_modules/serve-index/node_modules/setprototypeof/index.d.ts b/node_modules/serve-index/node_modules/setprototypeof/index.d.ts deleted file mode 100644 index f108ecd..0000000 --- a/node_modules/serve-index/node_modules/setprototypeof/index.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -declare function setPrototypeOf(o: any, proto: object | null): any; -export = setPrototypeOf; diff --git a/node_modules/serve-index/node_modules/setprototypeof/index.js b/node_modules/serve-index/node_modules/setprototypeof/index.js deleted file mode 100644 index 93ea417..0000000 --- a/node_modules/serve-index/node_modules/setprototypeof/index.js +++ /dev/null @@ -1,15 +0,0 @@ -module.exports = Object.setPrototypeOf || ({__proto__:[]} instanceof Array ? setProtoOf : mixinProperties); - -function setProtoOf(obj, proto) { - obj.__proto__ = proto; - return obj; -} - -function mixinProperties(obj, proto) { - for (var prop in proto) { - if (!obj.hasOwnProperty(prop)) { - obj[prop] = proto[prop]; - } - } - return obj; -} diff --git a/node_modules/serve-index/node_modules/setprototypeof/package.json b/node_modules/serve-index/node_modules/setprototypeof/package.json deleted file mode 100644 index 793c504..0000000 --- a/node_modules/serve-index/node_modules/setprototypeof/package.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "setprototypeof", - "version": "1.1.0", - "description": "A small polyfill for Object.setprototypeof", - "main": "index.js", - "typings": "index.d.ts", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "repository": { - "type": "git", - "url": "https://github.com/wesleytodd/setprototypeof.git" - }, - "keywords": [ - "polyfill", - "object", - "setprototypeof" - ], - "author": "Wes Todd", - "license": "ISC", - "bugs": { - "url": "https://github.com/wesleytodd/setprototypeof/issues" - }, - "homepage": "https://github.com/wesleytodd/setprototypeof" -} diff --git a/node_modules/serve-index/package.json b/node_modules/serve-index/package.json deleted file mode 100644 index ba69e7c..0000000 --- a/node_modules/serve-index/package.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "serve-index", - "description": "Serve directory listings", - "version": "1.9.1", - "author": "Douglas Christopher Wilson ", - "license": "MIT", - "repository": "expressjs/serve-index", - "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" - }, - "devDependencies": { - "after": "0.8.2", - "istanbul": "0.4.5", - "mocha": "2.5.3", - "supertest": "1.1.0" - }, - "files": [ - "public/", - "LICENSE", - "HISTORY.md", - "index.js" - ], - "engines": { - "node": ">= 0.8.0" - }, - "scripts": { - "test": "mocha --reporter spec --bail --check-leaks test/", - "test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/", - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/" - } -} diff --git a/node_modules/serve-index/public/directory.html b/node_modules/serve-index/public/directory.html deleted file mode 100644 index 6f7e7b6..0000000 --- a/node_modules/serve-index/public/directory.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - listing directory {directory} - - - - - -
    -

    ~{linked-path}

    - {files} -
    - - \ No newline at end of file diff --git a/node_modules/serve-index/public/icons/application_xp.png b/node_modules/serve-index/public/icons/application_xp.png deleted file mode 100644 index d22860a3166820b8fdad71c6505a40580af14b2f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 426 zcmV;b0agBqP)wtp^MwsrC67-bFzu!t;6Q^%|k2MJ$kfh*aj@vhNOIJ zWFxBVQIH79u!vw98!Ll~y$OKnm}QK5wtxPNU<+B6{mDR{T_7M%l&baHE>bEbHX04+ zn+OzZ0e^b{APT{9E#RmJ5)l*`)B%#z1i)YIM#v1#3=Jvuyn6YS$$CoGDq?9U@APAh~ZOF>jp#TVKsZ^rDVDQJO z=z(unDix`Pp@6(DbUGbswOaq~fE^0}P{J^D(r7fOTCGyOUUzmBMUy*UwAN0eHX3ch z0VGKh>h*fm?RK3*p0=MB(nc}0O&K6sv)ObGuro)jd=1C!>krB`s44?r3Yg)uiG7!8OBL$a-Fo@&0(0LjNH2#KGJZi@q2YVKu xMc5!EfO4vTMwnf`nA&W_@!!aPwbiWO`5Vn?>V~$MffN7$002ovPDHLkV1l0g-PQmA diff --git a/node_modules/serve-index/public/icons/box.png b/node_modules/serve-index/public/icons/box.png deleted file mode 100644 index 8443c23eb944cf8ef49c9d13cd496502f46f1885..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 555 zcmV+`0@VG9P)i3lOYrtSl@<#7b-w zf}j{s!5HvocfT|9z82@(O@vrwU^wRt=bd>tXQpGD!`Kvuv@XEI8~tgUP2L`{+*)U@I@ zrVtr5X14??iAF(=0+k>q)v`Scm$9&=i`*knBsnaUVL1>ti*O1xfzmiD$%Md-h*6M( z@*iB)icu3eU424Ok{kp%Y!1dvp%f0`ac9vcupx^$vU0xuKpJcBvej0UYk%)EV>mIx2hV}QRf#LX^Uh(%`7hZ~|KEf#uQ31s002ovPDHLkV1hgQ{`mj^ diff --git a/node_modules/serve-index/public/icons/cd.png b/node_modules/serve-index/public/icons/cd.png deleted file mode 100644 index ef4322357cbc34e0b5eeed34f9fdf553a1de2ee7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 673 zcmV;S0$%-zP)fk+XBT$+GFLor|=G~7Z=&Bd_^zJLLP z{dbOmhNM(Q`mp7h`OloWYysF>=iU40Tf#?V356IC6~fPKul?5pw+W80zw#nVEgemD zincj})E^?AZGqXAKHDz@mch}3iwfqB3rPo#(gwa141DiTF(xO6U^eE%d{-hX0gf3o z8{W?(@4ZV6pRS)EXbxQZMi1!D!oC#YJOO&yAsn%9V=twmsxF*P_%ZxvD(XXc8T9DS zr0103x=g@fvEJ!1y5C7b$Hz+ryB7+I5>V>_sj5lWnV>%bWD?LRmBAb^h}fbg923Y3 zqK41OM-q_X|0W}n)p3}pGlwoCoNU0Ppf+VweFB8`9D=Abd!7lXx6+7Cma$90A4ue; zVKQTfc(bHa=}i!!qJ}b>M^UnvkNQWze=dVN?ZJ22Mf(14f#NRkt=PP(cyuKepkb#y3Gz>xmDvuMC zIuoRtGlX&@?9*%nGA0rvwq8W9jW)GLrXJl50KN-ci9ozQ$MNkH;k<IV|^+8goU4jB6C^%Mg5h>3Q7RCr>7r_DEKw7k44$|vUmJAm;${=2wBT`(Pek9N? z+*$Z3+nYyu(=ufrbdbTWW%|!LE6aD^rgi=em@XcV9q^{200000NkvXX Hu0mjf|3D;c diff --git a/node_modules/serve-index/public/icons/controller.png b/node_modules/serve-index/public/icons/controller.png deleted file mode 100644 index 5cf76ed029a4468cfcd05c1a50089a98e718418f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 666 zcmV;L0%iS)P) zlg*1#VHC#iD%uAHty;DTg0}q?ty;8bDFzCDreJ80{BB+R< zJENR4PZMQi-K$n$6{M+e{`y zCzHvi{{^55g~BV5NOa+FIKC8%#WFEpk_S+;0uA4flMsu=wvk9g@eiQYYGoUZ#;;nf zwk?;-FdB`3VHmiWEa5y`gl|tCa~huHAQ%j?r0MVf0GiFFt=sK#C%yTk;Ec=V5(eW1 zy!^<*iw^+Bx5qH>dSE^ra{Kc6JlJfuBMv}5)@Yi~=Nw?K*=zV6|Ft zLOAX<8jU;B^k)=l4vT=l&3kn^9UxVL)9GYU)9I9}vfXZjQmOn(B@&4pQul^EU^1CN zHk*ZXIt^qGkTG9cEEbJkuV?WZo6QC!5(!Z8c%13?`&?OQ#B#^uF;uHnNTpKPc_2n0 zqyCI{R;g4puH&IXp%AEOGKB zFaZe_Htgq(0OW7HPl9o7Hk+@=e6O@xZTY%@-!Rz$1Rlkwh5!Hn07*qoM6N<$f($t; AN&o-= diff --git a/node_modules/serve-index/public/icons/drive.png b/node_modules/serve-index/public/icons/drive.png deleted file mode 100644 index 37b7c9b27d39acaaecf06951b024ac08afbfd4d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 346 zcmV-g0j2(lP)`6pHR4C7- zkv&QTK@f$%UVGNSAB4p~7X&kJu`rW(3s2w)1kd9QoMeZ&fx$)tn+OJimk zjCT$JD?{UrQ?3~v=-g&C?-zWP;E3TkpyGrhTDFaQSzpwKU?tq9Uh&CO=Y?-R7%>t` z!bl_(!*h(_r3OLS;FuM!k+?!xBDEihL=?r53TBrP2>202N!*Y~*dL6MvS5Ku!P&n9 sT@vv>?encL=G!4ixo5^&>-PTUFAyGx1U4B=kpKVy07*qoM6N<$g0$g{=l}o! diff --git a/node_modules/serve-index/public/icons/film.png b/node_modules/serve-index/public/icons/film.png deleted file mode 100644 index b0ce7bb198a3b268bd634d2b26e9b710f3797d37..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 653 zcmV;80&@L{P)WO3(`_cf+b25@DJ#zdQm}8GzWtq2-QnZ8W6mB^kfeK5f%S{ zUW%tGMCwrwic~ZrQcG=4f?5bkV+3dRk8hw6bk~y$KX#b!y*J4EJ~>;dRASqrSu;ZpM>?P}K~6AT zWv6Dmq?v&9LdXC(m%WCO6ma_di$R(v$@ad_>@R41N3N5lSJq9@6CGhX84-$%Xrd_6 z;){?{E|Ytt5$S-&Au>t4wDlIxdkfe-a22LMj``McG};r8@{GsRPm*+8fFey6C)@ifDBXVyTw(N@Xd41b45OFg6x_QA zpwLiigyy~cVoPxW^r~C7ZQpr%>1$*HKmv~AY-qJw4;gUecS--wnqslISSS=^KA&Ic n@BK|Onfz#3R%n{$a)0j^sqv5F(1NTL00000NkvXXu0mjf3S}fX diff --git a/node_modules/serve-index/public/icons/folder.png b/node_modules/serve-index/public/icons/folder.png deleted file mode 100644 index 698f3d303687ec4157b411e663408d6c78944269..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 634 zcmV-=0)_pFP)ph+MhN1^33zoMD^Qf+OIbI z_vzZRHrl2)_1={G_UPKGHvRhX{`~jauQl4MHQJ#z@6?p>&M@@WPy6!9|NZ*z&vNe1 zcIC=+{`~Ov-**4~_}ZE_{`~gl&3W(8didmy*|aqN{{8galk(9!_1RtU%O?2h!v6g6 z@6v$ShAi&Ri1pr);lf_`?X&*+@B8=a>A`dH&}{P1Iqk}7_~w-M;jG)XJpcav^w(GX_Sp8| zeD>+d|NQmh!(aL7q50{g`taQP?5y|Wi}BKO^V3K9=$!J?dHCj)_~nuG-KX{2W%k~7 z_u_^3;eqtqp7hsL^3;F!-g5KWmi5|W^Vp8_*M|Q4?%I?!*^V>*{PNg`E&luOc;lI#g?V|#d$J3Kmj3P0WE89Ckq2LIayw2pn#a5gpo&Z zVQHa4ab7tqP=LQ&$tt8Y(8pAfn~9ADC?Kw4<`Nkj738QR#l^@06i_yI4UbPrP71Km zmgHmy3go+mC8TC%r^k5N=}PAV1qvb()3S1MGvcB>ZS@L34yh=rfP$h5Ln6Ee02${e U&JJnEtpET307*qoM6N<$g314QZvX%Q diff --git a/node_modules/serve-index/public/icons/font.png b/node_modules/serve-index/public/icons/font.png deleted file mode 100644 index b7960db9dae7d1da77ef3acc46d0a6a9da584267..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 567 zcmV-70?7S|P)(R5;6H z`2YVu10|S&W(GL4-*9m5zR~L0cWa7s=goeHmKzfsTW-vJJns=rXO>fi=YdvYp=OyIuL^83ysEIf(LtP34vHf@P1syLa4L>s)tjLDRY?|E+S*&m<}gEDA3wCC|S1 zC~n%F`=*)aLx8xUX62**Ryh}!5;VXx>jJY=!}V2J^Y4E*NjsaSAA6F^IPpwJ<+6wW zU8=5LQujKb`Z+F#fckUgU8t^YpU|s(=Orx83-p>b9R3rvXOE zXGG&B-+ooO{Lz1}<{Ou-vd(X^%s98zwd(4P#ubnMhqc}OsqDB<8mj>Yv8NgBOD@j_ z`PDq_3`$^`C!g6^zTp1k={a?|3Z-|`5HYOAUEHcimi|xPlFJZ#%{{hX{-)aXO=~Z^xE1+b* zM@!rH@FJ(e3$Fs}uKo9|x%%HQ^w?fm%Wa0V&kJ-j001RVucl)dd}jav002ovPDHLk FV1mw881w)D diff --git a/node_modules/serve-index/public/icons/image.png b/node_modules/serve-index/public/icons/image.png deleted file mode 100644 index fc3c393caa3bc4371d12d0c67ffd6d333ecf1d8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 516 zcmV+f0{i`mP)0oSgT$J*kO*Aq9I~CW*s{G*(t$KS{OS+#aO%?udUme<*TTEO`Fr@r_QT zk=#}u-n~>Vm!+9S1PE{@3<)G~CPb<$Za;W?3+O}|+q)?*Pn355=}S(XIZmEANjZci zf5 zj<%@MX^bD1^BwlS^+AD|$dm-1wial0hwPI;CDM?Y9SXW#@w-UF0SQ8OgplRTleOB2 zUjkDS|0U9pI|lSN*EvXUa~*UIclJdZ#)Npbwh9>YT?Z;=B8|l&^t~P~om?<5Lre$+ z;%`P>SL7`djY#8Y9$wv9dv|3p)mbpQb1@7I~O+ue5CWtZi#AZox@gcwb{Xkx^Rf;Ty8yn6DWhJV4kC*wg94<7Vt zlteKm5+jKLV^qM1yt2HO4YZw^&a^Wfzb_m+@y40e_0^+M6ajz$03Zl}fU=sqfA9W} z@#^~O(a%3QB{YI^J_A4y)M^1_vjjn1H`Mc5t@6>y50A!C6seTL>`UqQ7p$DgY@K|> zQm^as;HM{#Qwj<3}(>R-AM4&+cd0t49%y2X`UaCBJg8YmB)K#uA{Z>9n zOp8>WCg#&r06`o8oz6gaIn`fY2FR)ssCr@3rc|5f%`bIJO$zbt__PK3gH51Sff`H}0ZWac9&q~*( zO@qNscV0VSU%X#sYO9)Qx4M=(eR(m}UFhondELHSnO2hr&mMO3 zv6gmw!P2y#u0c!?LPO88NyxOTj>XWm>*77F&55fo9Z?)iynObdfA;SdwVRl$W~G3* zEGt!2+1T-%ja32&!XdoMS_mM#IQK#{6D_nvjYu`GlvO3XdE)qYJJ;70)+jEP);68^d)m`eN0o>(5%D`Q(1;j>g@G;xlf`0VBQ`PFY?6)!N&f?*K}$p; zB!U=NBn{eB8${1}&-2_L*HuZp@ZP1@clS@cHp)4iM1ewzw59vko7eMM{e9z|%NNdX z0V;`?KKSzTCvTm5bc{L^CIKLUxc2X{i{ISz$8Sgf{q)1nXTP{`{s?9mQ$4&hPiKC- zY8q7(Y1Xu5iCf33=O4Vy(+|zQ?rW#gkKB0f%}?+6{G*qT22|DQB-73`YzA{N4W^=s zq0kQYcbtFfz zLz)H<&|z(Y4kBG67=JY6c|L1R-#TR>fC$3^Y%QEnYO1xHsf)+GU`3F<{J0kR(;pbF3)zyg$H+idfnl-wl5Wkh!vUH z4Z32YP=l_}1rZd1W_D&^$A($A+&a0e&P?xx0!ctY2}*<#p+qPVN*B(YzvAWXa*%bzq z7Fz41LKILT(GWohi9|LgIzSZBhb*Zf6R6O}WYQ4GOi&71s9lmll0x6;8&ILOl$j(c z0Z1T(6Tg09{?wd{moFHNN6PS?$|e>1MxSJ(0Z7o2)J-Zv|>acY@f`(Y@g7GwsEj5NLQo+q|HsxQ5}XSX_d@*^A9ZT9=A{W~j+$GyI1 zc4oqTHx@1FlRjw4XWyPN5i2~l_F3@aBk!0yu^aoRDvXy}8@HCjUVQUsuSH4$T5|r< zzZOn^?Wfa6y|Q($Hx4{ws+)wX6-HP4zo!S?4KJ@7PG@G3G{CjXs(p*kIrj6rHs7_y z+=<-=Q62s9FuWa^X~WKgJIAAZJR&XBB002ovPDHLkV1jCMPILeO diff --git a/node_modules/serve-index/public/icons/page_attach.png b/node_modules/serve-index/public/icons/page_attach.png deleted file mode 100644 index 89ee2da0753040d1ba0a3487473a715a8fe89322..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 794 zcmV+#1LgdQP)i_t#ewV_0K6;=bl;e_Jt7$~$sQ)q$+ia<4Ec+jeaGt9oWH@O|2`W6&O0t!k{B9sUvLWxkCaPsd9W(`fa z;j-|^ZI^2XnzhgZWYRW-kP&J>DWPo`%;JaBX}or79k=+Jo@h%4Eo72tqev+cB?PjP zO<|ByL#>Tehyq$jR74O$B9WDW1`tK`LzYyL3A9iAcRxLkJ`I)n}v%Od-3H>j$OTBtk>(k-9o?8PqI=0 zB&f-+KOXVnjyKJlf4iHOtnuiE_4+ZVJ$dHjU<^o^YCjQ-wt^!;rPpBv(@pFO{9rdw98 z_s@3+yta93oyfL>7AD5}r=|`zS3Gm$_|(iSl8XBd9k%=91J0j2=ivT5cJ18ZmDjh{ z$-RMd{jQ#X79#Sc diff --git a/node_modules/serve-index/public/icons/page_code.png b/node_modules/serve-index/public/icons/page_code.png deleted file mode 100644 index f7ea90419d950f9e69d977a1f5847456d96a5f0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 818 zcmV-21I_%2P)@LCln44|RX7Ti z0HI3&7jPq){odH{?_{%nYVq_;n_c4WbUpvU(&Cvnj!vq|kVC-vpF6vp^;;e0mm6HW z+WPzA`AZ|;pPp$&dNjzrc??4rt`k%Q1l*u-BPD0MQ}Fbm8jnsyezNt7+u{23>t7Em zJtETY?ja9KrVs^!LJ$xEMF3-bAZO;-IQJavE60KA7fO$VY_%N)R6s>g5mW>fL4&aR z*EVgKKTBXm!=L?S0?xM zYqL@C$|EDF2q*3zWW7;PDZ}SK*IE8;i!3U62=qn80C&*I1Le7WwNP5EcX;_oh2dJn zf#HgBe4@r$GcjHjmj2vAfT%(YN?}kK=(*+1*DkNNc1H5R++vfBMhACi<5uFUU+N4+ z<&U*CPmWi}REa7C6-t>2im1CWv5Jkefxa6>)dEj-CAW wWa{_}BJ!}~75?MkfaCnj>Dn=~vkLS70Pk`;z)@TQj{pDw07*qoM6N<$f@imYHUIzs diff --git a/node_modules/serve-index/public/icons/page_copy.png b/node_modules/serve-index/public/icons/page_copy.png deleted file mode 100644 index 195dc6d6c365d298e466026b37c1959d96119ea7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 663 zcmV;I0%-k-P)^@R5;6Z z(>-WZK@^7J_sq=QY_e{46@P+~LNG}sRzZsxQHvCsN*h5ir6^j7pq-$xu$N#V1gx}9 zClV7;5)7zih-s3DB)G=7|99>ji@So7-P24n=VQ(@GctDX!^_@$bj%oviY6e4Dh;od zooe%Wvs8LEKQ&&bL&@bwi=STIAI@!-gB2jC5+?y?VR~VkrNxam-`6*8&po|RZ5LpS zNKdJ%c4bTX`XjKsnecf%W>1%6WT?pKNdLLq{=(f(Col?P1+oq@R>)W(n=x!|*BIIh z6DJGw_w`)u6yN|vAhMteYK5#b%r5^v+VCFl1IGssaclZZMS{vs-LJ2$)n7DAr6==K z<29#%AXsBsDoO}SBaXR#_Ap!JKx)(1)3O2pj0_dYWz5By*X74fRT01$Fk%P_RzOMDtV?GU{nsYq#K8iy zb6qzLYDj`_f5$BwC*WE(t0m#xYJ*=jC2|HQYHh=pf#QG7oowi`h!L!{DB$8|qY{~X zu8@sU1tWq;n$XThR0%;45mdqXM892|{CJ@0DS*}>?ami06Q_^tvM~Y3K(_-`#m!8f z8f!QIrH4y#61;0Ym0cCoLl8{IPombPHtnn7%SbTdI&G-d>ZQo!_wBMF9nzX!g8HVY xYTJPGciz9XMh3w2fmZ(7v{)r*QZD48?mrio{~IaoqP z|1Ep}yDQG09bP~E^Dk?@JiKQJ z6-pO(3~IOP)IYisL6D6;oAEd;E%zR}{U$rMRNuD6nQV7nesKS>)yLo7JuDCrD>Abi zbj3uW23?^GA}9jQ{M^8v?ejL?HaT7AX5WPZNkBmfN`w-jL?{tT7ykZt$%Yln?p_m~ z-?>&d(LD(jAd}h=LPltPQbO$*Wbyl@G-_k5jXbb#qffHY03>M1jfEqoPJQ6Mr=Byp=^jfzePZV1 zLjCmNi31hdIJHa%e;5g=1(`u3BRzfeExY%=VCu{loOr{`%2hUR*x>tL^W_TTaj);0 zpPR6CUD1+0>4TQ6zVfH3TQ;%l6#(_%yspK@3gcmG#Q4!WCPyLU93nMKk7E2pcA=l45({2jNho>sdF*A~bA zxX?-cp~y_z_kFf+yqu3m#QiB}03?Z&9vvR5TNgj<)($Vm)xq5G>|o2sFMag&6aNF+ WAT1?sQBYt20000iHtsh1EzPArg^Q zIZrOk#rNsfjaSbMAL;<4h;Z=jvu8dzyz8N&Nb7=z03ZUw?9z%8KQEa6yM5=kUnka& z3?FJk2}L7q>na=T#;<7U*P91xfF`;`6%pVgWgRy0?1ZryL@%z52=-!fGXWGEn4M351L4<+7eDgwo|moqXT+s1&Kmn>-uQQ8mL7XY)w5Zk*(g+<3Y3tmkR!bL zOUKaUtj_pX26sH+=Iorwu}MGd`_%O-_sS}8VpG#fJA)Fcs#ezwtZf?q?Ac70mDv`rVs{$od?VPKeqf<-kUjNtS6ecB*mq<&M97K^6IVsDO zt2$Ru!b+>2S<}_H>$RcInusU_8PMNdf(W{sNlJ3FkrwMJPeBPO#d}Y^a{9TH(#{Y) l0D?dWAV4eUJX#h`!2gmISk&ZKd4B)^002ovPDHLkV1g&sd|Lnj diff --git a/node_modules/serve-index/public/icons/page_error.png b/node_modules/serve-index/public/icons/page_error.png deleted file mode 100644 index f07f449a44ff2761bfc7b752db3d08d0e1238b02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 793 zcmV+!1LpjRP)lHwhvrAu0-@MQwt}+5~MQTtu}C0%;W( z1<{R?aHBz*g;pk%AyQVBR_Zu5m~;ES_vxI-O!vIF|H*|T{l`n#garr?$RMk>)?Y48 z(ZF2yTneKb};DNWF+jK)IF`6_IfJ{i|F3o%Q+l&4_HGBD|ACE8na_6>L z=s{^>-C(a7J$6=8A_%h5W!1K6dcL!D?XX+Ndk)oei?UundDpX_E&1Y&`)3P8#Ny0s z2Ag7_&ZPhyGj%)g&S6V2LNun1;iBQm#Fwlfv zgyESZR$X}2P;=RW!2zid1r$hBL{K7>2qi*f7>pT1=RdT3@-anEoH{ z={KFOO;Dh#bV*jaN>}M>RZqQd`S=6O9C3KpI~I>l%QFYfo;jqQYe5fcn`)+)zMm6P z4X&L(>gnN0!%J4^rhX->?$S5bY<=GEU%jc!KLL8sww-Eg;h z`H-yBHa)yfojYT}&G*GFc$<(Yja_q=lZvj66DC^O5%$B)|Z(CeD=n`|eM04SP; z>-=-l+xdJjA~vR6^xB#o{ehf~tSM`iwaQv$O<8NIHA}W_WOw*~ XD^gE}t;YAo00000NkvXXu0mjfl6ZQ> diff --git a/node_modules/serve-index/public/icons/page_excel.png b/node_modules/serve-index/public/icons/page_excel.png deleted file mode 100644 index eb6158eb5ca9c4b64c81e70e0fd894dbc8e2bed9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 817 zcmV-11J3-3P)hdKqhFO_H1|Vn1E?(=|cjAh_&P}y{{^`u< zcYD@PK?$)4i~7o9*6F_$F$4lR(d4AAvrez^(88Hk+)+B7E)M3jc=Ewl4$S^`_qwSF zA%qz@=c2EOsz@0qB1IqsqJU)HaG&+}%`-OM8YqW{K85hqj@4&V9vz!Cm_n0-W#f;# zeEpJde%vdgRn5?(+PY=W*z~|lT2-mtown({ll8&3S5+lWz5K}LTRW{k{eJn3Qz!SU zQ`@qI_n2;K?RG~pYJ9=dj-RWgG;P&wEuoAxL~Q)<>x0b=dED^Outj&xQ^rA;u3pw| zca_ClTh_d9cxXg_U!lLRl0`xU@$=UXO|_dRdtXfKwPawmnf(LC7u}-U>8k6}3u|{8 zs9LHr>MIJZGD^r9h|q2yF24Wuh+PM^yMN9GP1$khlDkdyCY}D{kg}jEf-(kW5jBY> z0rB29ZhG-r=i_R{;+1k0?A-sBM;AP6(k1i9ZuixR4?MqXOvphQgCYj~RnXKKL~J9Q zIDNz~XMfO{ZhUg&BTtMyXJqDVqc<x643?SvKHx004lTvR=0a5$dUw z>Xb470000$S;ka1sfH4I-R8njUol7M4dtApOahDylptpYswf1hD#CwFoz6oEA>(SIECU&IQ%a}GXdnC!9$70`0uH1B00000NkvXXu0mjf!8w72 diff --git a/node_modules/serve-index/public/icons/page_find.png b/node_modules/serve-index/public/icons/page_find.png deleted file mode 100644 index 2f193889f7ea091c292acdd684c595dcb206b5c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 879 zcmV-#1CacQP)@+1&aazfGU7ezSm^v zpACwO+tu0su66!(dT=`e05DeeCnCFJW(8|RKtKa{4LGONnx2V85A4m%PEQ?MEtR-esdM$pB-`H542D0)N2zSC6Imf)4L8?>%ZrW+H>xCKi$unm zvGZq-*Q%Aahx;C*=l+K%-?>XB)6TB$-L$r*`RUvlA`xP1NG2?)ge8@TQ4EN|Jks0u zcDg;oFC#-#R`YbWB`D?Q`1#y7l$LXhjSLf8AvQuB84}i#j0^!#g{VE#(K7h@5pFHy zSenl=@XBEdxp`h2Ji>CR%=qXJ7!e|?paKet-~;#ok#jETyeB(5&Bkhp;!+;51~G=) zH?L7xmDUu_h+a$+xuWom;AWW!mS$%%+436Rjc@}y?l1134kgD0AOf$OmjOR zstUlshZk$ZC!bAyIg{Y29z#&@3SJ;6D4+_eFume9^#TmMccC5u0J!ZCTnO6m$lnD| z5JeFHf`Xs~1vP>RLKI1GKDY<~pjr2&bi(fX;6Nj-ss@Ds0CcoO0H{JsEQkm{q03skAA);_bv3q{k31qwVo&s-q`Z?_e+j^w(WL? zl+uETs5+~xBU2};OqEE9ETLGwsMGe1%iTRNue)9}|0~E4B*@5#oRXZ9oRXZ9TqRep zPrGZuoOON4n@=uPbyP1y4G=+HktC6l(gZoFD>@_lXDrN?wo+zozGt3P=Qh+3L7+}q z2!WK7geXLnO3Vw;o12Skp%_E#+N#9;DDWP?Q-VS3B$v~Ha)dDzWn0zG~O(^_1!n0HYp-( z+;wPIdoFgQlpYV!10V>5@a)1LyGBMvoa}miyp(bxbMTM-FYNyx;V@TfYddyT00000 LNkvXXu0mjf90!wr diff --git a/node_modules/serve-index/public/icons/page_go.png b/node_modules/serve-index/public/icons/page_go.png deleted file mode 100644 index 80fe1ed0cc75fbb67e9398ae686641f8fb287238..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 779 zcmV+m1N8ifP)JNR2Ufr z!Apo%Wf%b9=l#x^8AolrB&K9H?Pg_|78WA8(M3toqE%3B#7*srcF`i*xhupr27%Nr ziguah1+mN)U5GNmyEfQ3-e%_i&-vb-Co#(>FJ+EhQEwjRYVQ(&UYy{U@%vbY||>@4x=B^vIqabI?L* z;-S&DS^V3-ni4^fl|HMkOEbgX)(390>A}|VIypb5Xee4g;7ck zwKh^A3Mi1Mh@eC$5lV!}Fw%sP623U`g3pd_Hr5sunLvTskx4}&Gm%Q6L}(l4x}jCe z*81q1_4-O*ffi~_nMslo?EQ8t*&Ec(pzEw$vc}pKn_Qp0>D7Jr>ATNC3w@9f|Y+U&+)#!t7l&wKp+nP{PQsb+fb=Yf!Fu&5j8vpRj{FT>jD z>d>$sx;A&+`n$HcF}&sYKSyR;=(=9tvvOj@hUG;~4qTYk^_@E=?$*^_pVh_bGnOt~ z;pEw)j{SK$XVc;qy181rT655gW9NG{(yeablViIL>cDI_ux8m>Pp{tY$J0lgo4#ax za?j0EA3s0S!f>{~ykN9h_RhM&g3K(E`q(dE(Rd49+%xMeR9{qlWnmd{s#(SQ>PmFtSQqUjAtB;_Vvt6}AS_5YgM`Uqu`yva+H8^=4U$e4gHb}u zAQ2N{V3A%pO|?Pv?tb6z=jC}SiRa$G^v3q?*6XcYz$p|cq{uLj@#~Fi`J(>5{@&&N zy%T^+;>8cXx%|o77anP?&W1?1A(>-T49z9pyeCl@7YI+Si zKti7=B~``}TImz(G{0PnlQA3P#MAd}sorMjkP!50B7$nAkU^%#nl{Q9lW0@}9fE-> zN(q7tRuiC_T1r|BBtVBTlQ2+70$Rf;eF`Z;lx46Cpu-rEgb)EBKq(b^W8l<^We(`D z43?0=01z<3G6+UUv6`CsWCk6^93!#+<;ws7007{zS3k2k9-zZKFO~(k`>s0y006+1 zgF_jyIhsL-`FMf~JL~C=cV75(CrJ|q;MVO961G=O zm9d)YpJg5g(4i_HKL75eSE}mq$Y}r}hyVdcV~p>6a}oXr80q`oj%+s700000NkvXX Hu0mjfPs|!l diff --git a/node_modules/serve-index/public/icons/page_key.png b/node_modules/serve-index/public/icons/page_key.png deleted file mode 100644 index d6626cb09eb11a298b90a8a27b0d8eab41f49a82..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 801 zcmV++1K#|JP)$lC4gU2-`f*>nhR-;k6IP7e>YO!0^w)WK%3$w02v-#>5Ep64PCP| zJihT#O|N+nT7XR2h7dAB?UEAOhJF^mol1i`QtQB`HSY}RE7=r! z)zaVIHr5?>v2Gz&fdYw&2ug$!p+txby(aWZ7(4QT)l2`jX7eMQ{>)lG6ev(fWKxmH zOr%mM5$6B%u~qGtCf40#`mbGj3s!n+^%wnJ&#rl>g<4Z)lB5J6f!?|AP275)Zswr* z%T}4~{;_(?waU!#?JabbF3Cy-kf0{R{z}6$e=5yMQKt3BPcl2>zoTPMqMwF;3!_n|>sT?~bK_-2O_m+o>GJ6h zt=+g$4n7y%1qVJI7*5Yw(hqM=JusY{d}*?U(Oj*gT655eZ>Ksn(qrd7v3}DX1}C>` z+X+8@+4-pVq_fxG zlU}~Ye!0+%>J+pPk+0wV{GM$QaYM?5ux)w2z59=S&H2+K?;gH$bZGzL&g5>G ft+noNiyiPkP9r@8gT|RZ00000NkvXXu0mjfuqTIu diff --git a/node_modules/serve-index/public/icons/page_lightning.png b/node_modules/serve-index/public/icons/page_lightning.png deleted file mode 100644 index 7e568703d6432c530224e443771a04fc1e2e59c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 839 zcmV-N1GxN&P)73{`^;G#xwAtHz%LU)4b zqTRU=ve1RNa3QT=ZM7C`iJ~QFQ*9t7<~pX$d^7W%^M8FFCkcQj-~0ZRTBCB(J0^iD z-~e!d9LR`f3#|=(>$bPvx_D-~2jC%pJ=n_e_OK zeJ_2b-KdDDh@@UlzBSMC;EPygH_MwjWBnPGQegihBV73D?-x9PlHL9A=(Vg=8^d<4 z<9r=UkxuIm)*CO=9e###7PztDxUv}e?$0)rQicmYhV`pQ%S!g@;K(?TVfhM#E?bM| z=B0gfb6h@a8bf5FVT-SV~6}?X}9lK@@Yynoty&1zdZP@?RfODsl=2XzzU% zS8gIN43How+9%bK2S@Xbc`O>`z5`%^;pXGy8^4f>9^3!Sp@|O&)m;dOa3q6d;4P-l zca|=H_{G&m?D_+&-}r{u-J$5T=(X4R&)q|O^gN8cgv;s#@5sEPT5_Z)oFo9Ac>l+I zc4ng5zHpps|9)<_Rw>5bKzE(M1j)dFWI_%OH$BJSz0?T+02W0)_a>#vFqb!*d|5wB zzBUN|M&ty51O@=i?kiDrjQ{{}e|^rU?OS|RdxxP1p5mAw36cX72#`R6UsoeCQFI~! z0ATITp!vfeYyQ?Dr=^5BAshfEa0nB~JG?nUa2Aur006MC*<9`)86SPS(W^`H2n+xi ztOWohsFfVfVWrI7PSKW}BmkyPoj(-|J?ES|BGd-}fIxr{00@ANnO*ZR`#)pee4I5T Rmm>fG002ovPDHLkV1i|Hc$okI diff --git a/node_modules/serve-index/public/icons/page_link.png b/node_modules/serve-index/public/icons/page_link.png deleted file mode 100644 index 312eab0914ab59271384686255d1be913a6b3add..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 830 zcmV-E1Ht@>P)VWgGzD=Y79#JI$lhEn`|2MpRa?Bt#-nSD~P0P(mbVe{KrOBoKnSsk>m|ML{6l zBosu@om4j#WzNLRAk+{k1JRvL(MfE&vvbb->v>W{*z*1_uMP}0cIRX*?mz+wk%*#O z%0D-+$B*g1nRkvI+_3E8Pr1NC6@5M&4vWaLCnNlr;lNlr4i91z&)eBGqL{L{GNu;Fof}GS9{gM5BJuH;2QWk8yuOZdB3pGR#s8bd~ zAmt<>3Q=YH$t5YJ5;7@+8Uh6=ktBgY6#6Pa%2F?h910?U8cLT43KAj$Z1*==ra&gILO{WkHfs(--F=bly9l~${z@AT>V$oat!YAD@M zBE0v_F{`g#^wOSP-u~!wvlmXdd*uqFqoZ0^{&nEMDU+=!>({S0wrQhFmoB}Yq1)~0 z^{A)L8Xjzdr(W4_exYO6u3a{4*kIeXZMJUR>Q=ksjW_p!rAwDKYUs90>6Q|C>56o@ zbrSq^Xk7Gq#>dAsn@un`Hz$?w$;Ss`%jV7L%9ShgHFV~C)6M>B`Tp%|nqPc&G*A3| z)Qe+}vT4-x^t1~XE@(6wR;^lPWMo9n*~E!cy~)YRsT2{`?fqeIw-e7N@mOA%UcCIq z_kH(_EK7|>pM*1Wt2^DaDAp|cvp*@(ZZDKpYkKC^?97(`0sb&XTXy7N#sB~S07*qo IM6N<$f;YmCWB>pF diff --git a/node_modules/serve-index/public/icons/page_paintbrush.png b/node_modules/serve-index/public/icons/page_paintbrush.png deleted file mode 100644 index 246a2f0b426faa0c7f5ba009e32b1deaf88d1288..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 813 zcmV+|1JeA7P)otxGRZMDZ!_a~nK|b_-`n%VosaL{KDuPV10`(1LIen8kX2Xff$3BE zah#djvFGJ&eE^89Pk*-O^+&d>FC~^GjRYVQ(uuPJyS|-v?9lxA-+tM5>1Qu*n+Ir1 z6KhA>X4$XDH6?-|E5oe1E?pQ5-M;2xw_ex!x}I2+b=}mPFW$U%^;o(Zg*LP!K^1kP%8ynsD^= z1y^6xD1#GLjO{VLdh@0GKY7;d$+NGukV)GRLPn^=q=dF%B#XaJrNP`0E6=}e&Gj3d zKJbQre*WXt!60_DnIzgMQc6S#fvjXxsE1v7;T;njHkdy2miIqAS(nX~o%cO+q+b#h z5tIleLWvL=dQE8OC#{%y*Tnku&K`Tuub&_ELI0t_ea{@3f>Jv&sYqld(%}3_GY3Dm z;O{3*Y?v^A`a|D;^qrM=ykI)U6QHd%WhO~VF!SGjGn0GOZrc3mGZudNl9{Q#X5&-F zuGwVReFLBjE5jr!!^-5*L%!I%PkYH#Hs5rMrEBl^)9)9XTD;xjHFxVZMc3~Dw6#k$ z(-S}RE$bgMHv6Z`mS5|u$$78sp4G-8b@lVkl`HtEv+MGn!F&bKcHPi$$oP_;=BrPf z$(~b3&p3CsuQxhoV$%jIR;`lB-s7FDX)xCTXuJ7ZyIQk96uIR=HBt%-P?N*bp`)EF zq14c}QM+O70NTOa@V~_)&GMZ$^cQDlkyOCa(H3Mf+6xhCuZh`VSN{cQBl5Ys9{cp( rh`2H3A^=GuC6HjQ*7|*0>;m{7QlnX3z3MSD00000NkvXXu0mjfR5FYo diff --git a/node_modules/serve-index/public/icons/page_paste.png b/node_modules/serve-index/public/icons/page_paste.png deleted file mode 100644 index 968f073fdddc1cc0f0800b1ac4001cd9a55f053d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 703 zcmV;w0zmzVP)AVs!l4K}n~L(tL`6d4Up4iSWnZ3Qg~4n+_J zDGk-qQdogO5JUtO-d5pRp7Nd7_r1^a|M&Zq%mn9Oe((|e0sw%Ur!K7T1pojj=U#f? zQM`qbQrM^DPkwa?DK_be^~z<~RgSMIa<`xP_4P7gg2jCwJ{9^k!fsU=#Ti|%I3p;>90Qd+7|~0h&mIklA#nb>ATL2+v$&u)OBgB z;nsHb)I&QRKeX40H~~cIZxCd}5C} z=79lXoXK%6YlyLtsV$~bSm?Upq|DJh#{|*a7XMm`4QJWZ>s6nL2R1|&J z0VPEwJ9?!n`o5PKAjc->P1Gi8BY*%!5&FVp=#)$mMJYul1Jton}gujiUf??eOy!x&!tsjxy;=Q3_DdcXx=a^OBhW0N~`A@4xB0a*%F? l+@c^sQA%W+?pa#c`9H5UNfS6T{e=Jk002ovPDHLkV1grvM=byV diff --git a/node_modules/serve-index/public/icons/page_red.png b/node_modules/serve-index/public/icons/page_red.png deleted file mode 100644 index 0b18247da5850f3c2486373a3e179acd2772e8aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 641 zcmV-{0)G98P);68^@7JE5sw#jpE*579S@TLkU(6yap1yN*Zuy>-hV%Q_v4Ar&!63c8OBr(ZRhFu z_kWs36-AmgZCT>x!RqM;Zu9tqvoHI~k@UmYo_g(*J3c%2{N8}7I+|qKPQzv}7t>%W zsu&9G)UmCzkDYSw{fBnuW4j;1fKV_nicw`$8C6D=F_qu`zUiK$2Oc?5UVY+D(`I@R zW`KlwqLftWHH3Z2_XVNfKn>VgT~k=@- z+N>c>0|@A_HbI9Jn`v0~7cfIF(TS69zaomDS1QtgvaBBfGEPLHccO2~3jc>n^6}^HAEh-2#VxC7YYcDXv!L9X= z-R*SOUvIs;n`8(LxP4~^2|JsiN^hq6cU}5dn4v1~Kl{eT7pm&f$PoY`hyVe%y8G*S bxB&kH@RuR86sIAS00000NkvXXu0mjfZBi!% diff --git a/node_modules/serve-index/public/icons/page_refresh.png b/node_modules/serve-index/public/icons/page_refresh.png deleted file mode 100644 index cf347c7d4685128a4a447abb9fb8e939417644f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 858 zcmV-g1Eu_lP)`6pHR2Ufr z!EI=jWf;Km|8+n2IrHqe<9xxFVk)&(Nh?w$Xk`TAyvb=#e=0aySC z00NkRDM597_LiNIJ2M^qhuTvB004REvvU8@of{r?P8tmo3;+Pk0F0@*jAMhdOkS&1 zhJPPfQa;pP0|4+Yk%#j>X}o-s#EF1_DMV93FsfPP`G*>Ks>L&)Q}w2g%slu0kBfW1 z+*$*0BC^oTl6>OGIq(9BgG4|C90Dk-N_mPazGrQ7uHZ|>BLD!-KmZ)z1e^#?1Sf(M z!6m}K(^b|i%$TcA5bC}r$tAA?0C)g1@CgWliJ;NAk&ZF+-w#}$`-3nZ32C6IVKrHp zr+(!L2hRfF&AsTw>_@ z1y23;E%Oz}?q^Q2d($ayO;-sON2t7$w(Z|o0Pw1YnSp^}0PI+I5HnDNsFCA?oorkG z5sUIGIq=FSyxcj+xlhkm0en=52Bx3@02o12gdAU$_i?v6iyFMuc7P9#zQ-Hf; zVuV$t9P5`m)F2w1?t6{<8%wk{w-PP#Sj#%1MbsjrSI6n;D_@8q9`~W98dNQf$j=iI z6~hpgww&be%X_HI50Hhx@W==u4TLPB;ei-J-1}G8wH}|{i#Lk-WZAyfv}k4y0|fvU zZTy^$u6L>2nWo(NDSV2@MRD}JQ4(c%G%=dG@_vxH?>gcH#*Ue2HC}9sapf8X?R$Z;XEnm&g zW99mh)5jNw008mK8)r^`_{yH0rNn%u1|SpC(tjf#om=+r#lh+?Kb>DVb9`|C0Bvbv zN3U(>f4-tAC1hosRoA7p(b(hL*V}(j>ug<`&U)|l$6o$)!>PBQ9RQSwn9asj2p*|xhU*R^vq?*Twb0t!lm5}`yW5lRy-U0ZYK?8to!;o!r!XeOE$ z0HB3T+6EEoI4PlR=wonwqJ+TvCoWh&$?CAPVYcU= zD{DS0?AkOtb@-hh^ZLq~FMjxYf19X?pa_YqtgZGvv2TaxcF#KT?O%=_*a-kW_;N|D zakkWsOe!)HsT5WRBiC+p;N-c>0Qwy(1D2MDBC595oXSiR07)sKNk-%9*rDBOO^HUD zZW#;)R&EZpqha<(HK$(tZYU#V29<@0qCXgU{gXeGpc_|pTqQD-WO|}%yKZbeX7k*H z2W~CK$v8NBAq~czrc5A(v51g0Wma7`G8}f=ZcuAiYYxZan@gP(;Ku66M6?bquGiHe z3Q0ya)%Lvk@kLixZfZyU@#UFbv+>pYhcj8TRKSr_sWG8i^X~UA**LvbD3(_Lba3xm ziYcpup*A9qJ$?AA=Og05lndxfwr`!C+O~h|B~4 z01q8H`StcY);%&mId7_+)76ovRpeNWRp&4M?#jx@|E-)x%P*A6t^fc407*qoM6N<$ Ef@ddc(f|Me diff --git a/node_modules/serve-index/public/icons/page_white.png b/node_modules/serve-index/public/icons/page_white.png deleted file mode 100644 index 8b8b1ca0000bc8fa8d0379926736029f8fabe364..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 294 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6SkfJR9T^zbpD<_bdI{u9mbgZg z1m~xflqVLYGB~E>C#5QQ<|d}62BjvZR2H60wE-&H;pyTSqH(@-Vl>|&1p(LP>kg~E zYiz5X^`c$+%8#zC{u)yfe-5 zmgid={Z3k(ERKCKrE7DF;=x4^O+ pzO8rLO8p|Ip=x)jHOtWj`bJBmKdh_V<`47(gQu&X%Q~loCIFbEay|e6 diff --git a/node_modules/serve-index/public/icons/page_white_acrobat.png b/node_modules/serve-index/public/icons/page_white_acrobat.png deleted file mode 100644 index 8f8095e46fa4965700afe1f9d065d8a37b101676..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 591 zcmV-V0~O9lw>B8WRlD)Gm}Jrz31u-X&&gn2lvjs=i{7nIaL6v2==uw+8Lcs(8j27 z;|c`rmSv@Lx!heopGP^^Ieb3f=R!%Lpp$}iMS-&P3EJ)s48wrJ_Ni0~k|c47D2nj= z{jS6bt|kFpFf|p5cM`_&0Zh|`rfEp0(}=}lT#(6RpzAsUfxv^LSYX>WlAaN$>)*J5 z0#sE+JRUD8iT9*fz{)_^7@6P&!sEjTcD+I9Z4YjT1`wH@fV{cEvneYGFU%maIEU2s55&K(LixD|{p-uiS@?KNj zk-Go8G$hH6g002ovPDHLkV1hVj1#|!a diff --git a/node_modules/serve-index/public/icons/page_white_actionscript.png b/node_modules/serve-index/public/icons/page_white_actionscript.png deleted file mode 100644 index 159b24075191fc259cfd80c797a1b0d74c168422..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 664 zcmV;J0%!e+P)7Z7t2}reCh0o`+ zAlt$F2tW%oO@m<=(B8a-_VgLl#~yUMUDWG!0qFPppd^03e+x1WpkO1NhIaKD2A)-@ z=Py8(Wi%R%JtYZG#sTKH@6Z+&!S3Edf8jFJJNKuva#KJQD3X^7;H^fd2di znEN&c58aUG>`>P{Vqq$kLb+TP{?I!d4(|o59X_%|nVEZq2Rk60n7072SWJ{64CV?3 zgS!EB=eYxwQ>P2&$}(iT6UMvuFgHHIEdNA29!EBtg=v~X!DxxEH~}L2zn|52%xalaq@DTdhh{EVwv0IaQ=!?daer zTKp4I`l8SDt;d{8Q`5Ko;BXUi&oAG1l4}59P-{|^S(Rmord5s6qsh<&m@Ab^wqCD) zHyRD}lKLDzpYN&@q5&*47mGzGiqcXpmqR9#K|CH8kXS4RNs`(iEF%HjP%f8ItyaZK z6$%Apvsok(2>~dTO5jTZfq;N?0ch4l01f$k9?4{~Youl-#x{UDMr#AFIkz@SDwPtQ z$gQ^$2|*(Ps9LQiav_8o8Ne<=Zx1*M*syo80sEO1tB%>5 zfdHB`1z+!R@?ghPRKmL)hWEvZE$=*54ose*0JiUNTM_)cMDXhxEKg(?-pD=y<)L4J zT0dSyD0&NhJ$^_8Ko9uom%-ZM4BTM{Tw$9qyPj=-9W;N(Wi@3*-Q4pq`Gcp}^vvNr zyd&PsmG>fpCSZz?K}UIEd;HGgG%0MG>ymxKPwy{>wy(m*Atq7)0000~7 zMNw2LQirBVQoa8G3P(rY+l;L4iy+JwSqmy$9JlSkk z&*$^Eg+c)@!R|v4gdc8+TTn&eWHO0VD&>$!B%o;;WLf4CNs=Inq9d`xA4otCWHK38 zmc{pkX`0Y=9g3oGK{}lVy~OYL|C5lQ&U^l;wrg|7w=BcA9L4-r411?K7f`@348&rw zXD#uW)DK;H`hxO}u%=@Cj{;#u#_;bb1_KgUOT2Hp6;)MvC6P$vQP3=g1O5#aU%I!K zZ1dc@f}YvG&*Spnplm2rIp^VdA^HydZ0X1axdms2!RKi5x-SFA4p@ zC@N|PI$ryHL@t-(!zBsf2-+sYAukhDHU7Lxm88-p zDk^c;sHj}OKUc4lGZU}6umlGVNAJx0%sKDOFwQx|V2pVvxhYKe|L9TNk!~md3BVrm zYPDL8Hk*yU-ER3~LGwJ7N`0ZV&nOhBI{~~A;@ND*=kxg?#^W&`4u`zk?Mg_e)8XlK z`T#M+OaR1!<#Nf_>$S`xrqd}OjYhoJ>q)?3vEX8pY&I()ERjfjrXM$k7e+-Qs3Ihj zNyOuEQ2EGYG7ro!o6VOBQEwuV2z)*tR8>WxP{616FY)p1Pn1d}#9}cxolZC$4n(6- z35hJq0;FlHC{ zp*iF(lgUK(E`($(s9pJ8Kn?(M734H_63WHtf}6SQQ_MXEP!#0|&@>J8dL5TfG&tBw z#tYn{TCGZvAr>cca%YYn^!t73tg8OOJ2FvJ(`YpCyVZi*?Ur+1uUA$hAg8-aK)c;e zQ<)!XwHh|n&ND=$@^)>aF-`~n}#*WMkD*M|f8r$i*z7+W! qF|A!t*4fE(R`<_YIkN&?Jng?3oQ|aAqClPi0000t>5xmo{nArfL4CJwMMm+N`pQ3p^Le$?rMud6Rbxz!-yG7bz2z$^USP5(;udf(gfQ zG~f68y^)EvcNWp#bUoDt2=h+^%o-?-|mo~iieWqLNP<0m@2PTB7ftyb= z@H`K$>v9Pr5X`L|rw&CEN2(9SB7A2SE;d|j9@*F}sd(@*2l|P*fWfK>1drZUrtUA7 zNXO~pKn1cjf~~TLbje1g>EPPzN2GH#UIBxJ{}S9=E`{zs-w#hO?vcH+hJxroI5v?j zD!4lP0WXq8zUx3RAP@|Gq$}6wXCjFLZY^YSWBxN9#&g)ro$%5}aYn#y=tJ_aIT%4d z5d4u`rlp!};XGmbZkJE*kYJoi&N0pd*yxY{0${xD;;Q1h^8f$<07*qoM6N<$f(}t7 Ae*gdg diff --git a/node_modules/serve-index/public/icons/page_white_code.png b/node_modules/serve-index/public/icons/page_white_code.png deleted file mode 100644 index 0c76bd1297751b66230f74719504b2adb02b1615..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 603 zcmV-h0;K(kP)^~*-1fljz_B$LUvK}k?BNXe#Y!m=zM!!V#}8bncK5m;8VP zw86G*RI63?Cd%b9bX|ueNlZ|wR6rj|r_)VIP@r2imh3?SN+^{|kY%~8B{maJ@F*OK z&VH9LwOeGt#DRjj0~v~8`>iO7!Ybi;zE$va`A^T#yW`y44;k^#O~K5*jD=qcUhPSc zvyy~q;5H_1WT1l~cqje9yfa+l!hu6xjdOJ8s;8E^+=QQ$tw p?%p!Hy#YapB=@+^9(46X{{RQg%9y;OKjr`c002ovPDHLkV1g7l326WT diff --git a/node_modules/serve-index/public/icons/page_white_code_red.png b/node_modules/serve-index/public/icons/page_white_code_red.png deleted file mode 100644 index 87a69145075afd8f8fd8b391c5da1249ec8b2889..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 587 zcmV-R0<`^!P)LWh{^|hy<@Q*xw+qo|KpY<+vaXbbW{L4q( zTsjXEJvb}e%bgb=o%W0h?4u1;^bWTqH8}5Th002ovPDHLkV1nrS0P+9; diff --git a/node_modules/serve-index/public/icons/page_white_coldfusion.png b/node_modules/serve-index/public/icons/page_white_coldfusion.png deleted file mode 100644 index c66011fb0fbdcbf210483d676b7131542a0e282b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 592 zcmV-W0k7R5;6x zlV4BMP#DI+Z{WQcKZBTk0lfkj5F$ztWhP#lcuyb@0@rA^#Kpu5KLA&Rgc}o#aSmis zrZC__xY^&#cI&!!{c|4Q_tcec*#b>|Y15wPcY2=o3;-Bl=(t4;6Ok*pL)-{*A;GX^ zS(@WGp6j~k1wBVR9)BB_gar`}HyRBXh7nM!)u5^>N~MyN6bc0-5{W?44iB<`2biXb zR;wk?jIQg@G!5l)SqhrXCU}x$GU-dY1sra}0uCq@153FUULT=jNwSk}0WBjKz}Jdu z<5gB*<^XtpAmp3m^ZEXQZWd1krhft}CoYaF4cSMvTJ01}X3X37KYdx-D0$c{doUe8 ztY{vlGr-e*;N!WAV%_hgUawyYrhegW>^F)pv%uUTFslHn; zvJ)l{%w(~{!O4`KTmK{Q{zCYltLfs&4?nz|6IdlqHCvX;|HGv~!QW?8P~_d#e0$v$ z)5XHEz{3>qMiH`1+qNYf?huS+@L`J9_$cjJF)Hf?@pu;)`9}BXwGUM{2!{y-4|Z{L zG>z?O%Cp8P5T#j1DID7u_*(Jg?7iss8AZQ+&;u_J{FmILf((9eoiL5nGUe>Fgq*U$z0000 zJ3A|*qoWOonz+4ZQ0KNhDB07SX1?#FrNy8%K)_l}y&kh`*KYdy`Y99&tgNgMLSSrc z?B?+B@HO@P-jS~z2Rgc6yy~Y~%>oJpBxsb$5<&nRLqiuR7K=@0SZj~jTs|sv_jWVX zGe?WflejOaq|Vec=s9+ahmXbyJ|T)Sl*?s82sr2H?Ce~HD5WI+Sz&tmWrN()wI2}+ zKqg92t*l^-#ae~;9%KFlWkmwnY=-UK`_|%ICZ#P1gdjK<2n38VXsuC7{WiU!fZFmm zW~Sda9(Qi@pxO}$ARY+;t##Ao27usOqNt7Hwq6K7G1il@xitj=LIM&{N&#SuX;x4x zmG6FhCg-$PI;hQ=;1iZ>F>^~@)IPi;l}fX?SZ!QiO=X<|pSVkNpJuLHzW(FT_~W-v z?vFpkyE>8ee4d=7wKauH5~dd_M7d2Aa=ICC{Nj7Blqv&DQEP#j_VeWV&WXL>c=LLK zsmYg^_JiDb;%U!UxO%qjFAvsDFj-kzT2$GbV(ZopPM$i$z`!7jvEk07BcC=6FMt4` z*0u3Sy`0b~%#(0000K diff --git a/node_modules/serve-index/public/icons/page_white_copy.png b/node_modules/serve-index/public/icons/page_white_copy.png deleted file mode 100644 index a9f31a278e17993d8d4e13beac2f9d5f7b42d08f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 309 zcmV-50m}Y~P)sF~CC`eaI+m%Y8jfzomMvZQaNUIT3LIrJ$h)_W{ zwF|LDNlB-g`Hb_G$;>3F$9JF3WYR|3fy2C+_wH}*xp!_4fF2UN4lt#d26oXwru}hT z0+0%Vz-l&|Tdh_L-Ng1G2*RBtBncRx;99K)&+}s0whhxXp{go}$g&Jk6k|vfypI5M z!1sNGVaV?!*L7i87Bo%cfO@?S`bajL{R<($@$|PtgBRcCGIJ_2a|&kO>G-s2aR3E4 zjssoScUa;zIdOeGHBnH13G)W-zt$kUQgNfG;96b=v&4NzRt&@7nN%v3HsG`<<+F$cumMs448N!W3r&2Z*b~D5^$^d6Jxn@SFK5Q8*uKSR7x{I|H-_N1f+AD zSYC5@2K4OKL$==F9U@CH;ONNL(W}oZICHn;d?~pw?GRIsH*x-68Oy6SuK`)`{E)46 z9^3(-HXa#X89SBv?u_YP)WjsQrp;}0X?Bxrvf12IKW8>3t`e~W9|JS<{btTNbNT@EQIWBSNJTX8AMGXD z-SsH|s#>j9Xf~VMtyT-YMD}5^SWHTY5->o`k|d#AE_YQd79j`%GMS7FNvG3b7^Vy9 zn0HYCJy5MyQLoqKnW|JOp-?D*<2V^msZ>BOv0ANd2n7t@{=V;sZrQ>3c})5_%ms4z z7!qXwHHe~!QFj8aR~&*-3F?O|;#(ESIXP~Os%|~y^7c15*q5`gz2-5ol!fU92NIGT z_ves+>+Tf3gfcL?!nimYmR}cw*|BGULzI^7!;k#3K^YO#;!+vM@N~(99+<;fdqr zYPJm+pXYFYk;neQyXXEcTQDNQx57i`Okp9A#n?<7!{#tnKJdsF>utb@JH7dU01gfL zEK2hoPZAnO5+je3&^i*hWM`qCW^vLK!O*?U-#IvXV?#6koWqrwnD{j&K`7N>^tR3G z8zr1(qVOzcF#nF1&0MZ5C$l8*E^Uth0000zE0Ay_3@1Z_7#f-XWL#E{8Al7>L$ z0Rx7lnddoqAyfT%&#`$;v0@*5YdW3w z7mLNoa=FAshK% zDiy@zakyMAxr-H?iQDZi^!t5;Eno2A=?>mMx`Vg(Z!?<53LHLvfTPa`$mjDcX*Qdv zR;ylN4OH+m)fVX&Z#yZpUae;ss@a$K&})gHovkhr@w#xyPVlfVgXti1_357y%I-UHDvRWYvPEX+#g+j4Q9ayba zh7uQN1j%HQgA=Fp9DfODAU^*3*FCs^6IpO7xg`RUXyP)(;=d!ly=#I^l3e0Cub`{H Z`5PU3+D2e&<<>s`J(VpX#y^kqzQ;#=2x({YMw9Q&ndHT&`BD$#%Ql?{+)-OuSA`r}MWJ zVg+2Gc(GW}a=BERPNy^;kEz$|38dTYlFQ{%5S!g@|8f8D_!Nu9_Ni2glF1}xG8xi! zorc39&F6EPOeWOt_XS`W2H_Bo$MXugy}SEctJQj=(TLXTHL(jRXfzs>NF=0SHk;94 zF!&HjdZNX(3U3;LY64IMX__Xv%_wjLC!J2`0Jw?X=zPK$C$`&dYPDKaC={e16bcE@ zgun^<0k;ak*=xLE)@(Lqu~MmsFoMCLY&0Qog`NO(h@kyxaA%EbwJLy8sU*Vi`~52K zX0wrqW;_LmMq@evX4iAM9Od(Q0eHP$1%L|xAh@vrqB`HPQLon}f3aAka=9!3hr=O- z5F9`#J_7Jhah=U(4RjaRhkS4Xkk98kDz-`i!r|~~AQ1TFcDw(@<8g{aBE)l)PNxNE zI(RPyc>9e{@WGSMU%i7*v{!&P$WLz25)0oc=Dl-yy%xYZAm4b-rttL7UjR#%`#j_F R;_m(?iiXTHIMmcoLoO94I8;j@ zv^2DJ5#orqydFJX|Gm$_Bi_vyew+j6{r}$Qc@D1%fQqeAhJj)1!z4pP83k2MV2~s! zSt^w(<#HLFVBg_#xz1W8ioi(WY&Hu~6zil?DI^jJgu`K35(hkP)H%@Imesbg#5!Ps_$Ni*SiR8&sKb9?M`0-mH)gtg&YgRX#*TXz@Z+| z;|2H@xzE0TfuORhuO2k6#K8#sW^J`mQ0+E@$K`QkFV+DTlI$w{GJ;zid{*v9xeIe_ z$|Bp`@iKkgoFK3{4Z)#DWKV~W4K@5WZN+Ql_7%YxNqSx7%cWud&cX>)_PvD*UzxZg a%Kia9Rjz_59@~-t0000)l$0ECbfb-0$}>7z|u>IvuoHEmW&j4lzv=KA+EpIObc7e7{sGA)QVmnM@*^ z%|h38^m;wC+ilpk%>l#V5LCqP_y2_Cayd^XlX;j*r54R*lW!zbqtSpQNyz8(JVmWm zyV4S$2{Uhyc{Cb0QQbf{ZGT{Kr zvJi{K_&f+q^Pv4MK$hhS4TgFj_FD*rLOePdE-E^T7ZzTFCRUB`*?9&h(a#C!-v8lWG#k3AOJQaUey6Oasked^kDPe=Khg@7s584 zg`XfS1)&u*_c;I76#%`kkBfiZgKKo@0)9d6vZw=ExQUtV?eW{Y1Xv}=4X(2zy85d> Y0C^(qLv?Ui{{R3007*qoM6N<$f-gW7od5s; diff --git a/node_modules/serve-index/public/icons/page_white_edit.png b/node_modules/serve-index/public/icons/page_white_edit.png deleted file mode 100644 index b93e77600def75c9a144d3d0a5088a62c02cbb0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 618 zcmV-w0+s!VP)$>5Y&axjp2O=VLu>*f>1L;s0)kkvKC!*u?s6CVL=HJ6oP~pNfZc; zsKr=bq;7MITw8NXw{SZm%59TId2x_9BQ zV86`NuvGI!>o^V!Na!=$7GJE{Cq`b+XwknM{UcGHFTTfmuS+ zm-zYC!P3+zmY;SG$?!fYkOih`QYaLxyF}A86h$GGN}kFj)_o*0e zjPMP%zTG7FYMAfO2Nn1D`D0Cj?Wl>5q%@CE10nX)KxpNmwk+!IWkzywiYD( zqUXiYYIq3qcRyMGJ;IY`(Gz~E$J$zu2+R{)xGlE*88b3WK6V*J>}2iPY1HH|tER0W z_+^^FdppY?o)Gt5M2`%xwRDH@R3G}^i1l4|6uchm0X0f!@&YdVLB5K&dd7Rv{)DXX zt^&vP;}kqj3f>94j+4xd93>s|Q!Ezi>?r8(Il$P}PFxSqu{d*!Y%*#cX(R0f|Juz# z3o0_xI14Al->1uky@W-rCI_%l&>PK^TXNSN{byMk2AI5vbwp!K-%-@!-vPR3iikL1L7HA!^!~ChCFU#lnGzp88=I z67V8PHBo4(l$u?-AKmT8?#_0rKW9dUNRbpLc`}piywAM9$xZ-3fR1C75T(BjCn-l* zjUcci2oXXo-}iqun@#)+`W@kL_-U&|2>MxZy~3IdmRm&8b)9!2%ksg3R)nNnT*TJOC=6{2hG86Dz+<^p6qfG5$i^UNUh+u)CD7O2 zK>Ioazn;U|+X0x$=feveYZL1W*Fm%e5P1sajd#eW#^5(ddx76*pt$^)b}$Q4oPabL zLc^HF>Z{8za;f$LtN0P$6C?1{X*jtXkRJ8IEeyiSzencvH3Ux_y>y^}wfJrRCQN#9 z?&e+C>sSAfrE%mZD5RfZ`gSndD)=P?+nG5Oq$zmY&-v+gc7R6c0u8^Ke#|XOq?gF@othF3zFpM8Il<8BJrWqBtF>b#_ye4{0)Xbu6j&@UIhRE002ov JPDHLkV1nWI9dZBw diff --git a/node_modules/serve-index/public/icons/page_white_excel.png b/node_modules/serve-index/public/icons/page_white_excel.png deleted file mode 100644 index b977d7e52e2446ea01201c5c7209ac3a05f12c9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 663 zcmV;I0%-k-P)^@R5;6x zlTS!gQ5431_q{u#M2 zg&W%y6a}>qj1Z|7Vu&-DW6d~k-n;jnHsjb-q#u0C^W!_5^C=MlKq<8oNCQ6qS00!X z5eI;XP=g!^f}j{hku}E1zZ?XCjE;`p19k(Rh%^AQQ54xysU+ocx$c#f61Z4HnT#3u~FR(3>BnZniMIF4DouI8Hi4u>cAK%EN)5PO(ip3(% zIgBx+QYirR){Z8QwV$9Z(Mpt=L-Or3#bf-G@66}txq0yc*T(zNTBDT0T8rO^JeNbSI-Tzf5!pBioy4NwAN^?iN#{;fH1Jke4Xa`^fR8m z%h6dq%xX)S?7`zae))(Xst^Scp6B8FejQW?RLTM8@0=vnnntuRGBM2dpo>gbCnTD= z^<;=JuqdSf@O>Z8^XdR?s+KEfhDdB_#ahFj^giCtzT(s8kA$AViyTqaAR;KGaLzUU z<=GqA4bRwpX|IG~*x>pZ!@zLr`XQ`od>m(`;jz|M_*1GDO#$7;n74ppb8=eiqh760 x0yt}J1#p`gw$`o!R{d7zU9~!Un@nJV{4bstt4Au+Up@c;002ovPDHLkV1kWhGjjj{ diff --git a/node_modules/serve-index/public/icons/page_white_find.png b/node_modules/serve-index/public/icons/page_white_find.png deleted file mode 100644 index 581843637079359a6a58fcdccf0763690c67b063..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 676 zcmV;V0$crwP)_k3`4d{s8lK_6bi^@vq&To98fNoK}7)fx$e2^Y&@<^jR_Ee+8}KG;X`@ z@bCyiolqX>bb1ZIs%QGnjzFU~L8H~d?e;*XP(h(S262}XyZ3a0h07r{KV?E70l+e- zE`%3x|M5#q+;HOC(h@A^M)7Rn13dm0&>K$j%k_F4wOWlsNCIH+!c_#{eS&TL8v4yc zcpnPEY`cQzZ$ILq{U-MA6Z6Z|1p!FZjQ}tXSb25J@HphEqX-6Hqo?-_Zn@{d#>2Ml zJGhxTAd&emK$lV-QK&VM&ix0Xy{GyS3Wp(+E1^8BhD3T0a)m-Lw@Lu4zQRrP)9(3F z^>$hh@N>OAXrmPYunLi|fJ$_*5i`46;M>~*5D{bp>-OL3{+!MJa`3kv~Q#QfQ%c z)1s}QE<_XaYBG;IuRF=td#+}fi4h(6HgoUyJLi0t(*dA^B)%@8kkG&bdM5P5^Z5WF z%d%>m^SbN0XeV)wbUOXn5Ag#A$gJx+7-OCkMM1S%MWIlTkbFLmOeW(&n&wUd&;`>p zVcRy$Z{K0=?SpNnP^;BYEEXleFbq(UY&LrXX$6qkJ~)8+b{=jj3HEXds;Z(?D%}}L zX3`39&dy=Zyar!ehA}e>w)(*vrCct{PI9^2Jpj&OZS8<3-@{0(gNv%1{)zAiLY+_^ zl}e>Ofd4&#Irj#7>=o=Uhv5IJ@?sN0^J|(WL2Uun$4}si6}TG-s3T#p&6GE<<2W)O zf{^Y2HlO#*QDvTp3v&d@;8*}aUC4lisG9(w7@d5Y8y)}U#FwCkqp*Mcgme4{&gGRf zlBfd`nF9cQBKB2_L{F8G2)7pAf$i)Ds`|}-c>pc^LRW{w4SQ)3N^BbZx)6BlCZts! zKph%`(m#xg-q3I7=(us;9<)*2%iuQ1J`oV3gU6V~T}^JU5714JN33&GwEEru0d}Uo U{MPL+lmGw#07*qoM6N<$f^vibe*gdg diff --git a/node_modules/serve-index/public/icons/page_white_freehand.png b/node_modules/serve-index/public/icons/page_white_freehand.png deleted file mode 100644 index 8d719df5205f7415ce657e5c277db4533c82f346..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 639 zcmV-_0)YLAP)p{{sC7)XB-g4w*W1a1)XtvxrMYa1o?wn&v~3 zHnC|#(>B_M1d`_7gfzLiHy=0c<2kQQdXu*33(xYN_xYW39(cz9jEVT%VokB8|DoF~ z8u%Q5sdl@4VB7X#uh+v_;yOGY&pRi?378ghv)P1cngiAAb<}D#l*?rWDV0j_dc6Zk z-|P~AJZQCA=yWcQjG8fYnimzj*3KqTfN0Cy!G^$7)+bQ$+mHVd1J zvwOR^5Lm<|R+uyB1Nu4vL?d4qa3tn?9H7SZH@~u=fFHEDfSH|bHU6kh0O3%cLdyny z{`9S2Sw~WMy0MPy!64i`jdk4Z3>^+KIL_fN2V_d&ywBt`^IJpxUI$=YAph~5`;xCe Z{s%Y0vkUXDnO6V+002ovPDHLkV1loX8z=w( diff --git a/node_modules/serve-index/public/icons/page_white_gear.png b/node_modules/serve-index/public/icons/page_white_gear.png deleted file mode 100644 index 106f5aa3611a4807ec8c21701c631730275089a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 402 zcmV;D0d4+?P)<@FR}JvtGRKa0_WfK^c7uXaFH3q@Y!Hnl8VySc`OtkPN3;#l*y*l23+99h*9JzA00}rAC!#M1dZ#v9YOBH|eC*${MmzzYjBu!!-< zK8tujf&(6i)1biy*F>4{f*Kd(IU-JsG&#b_@NgTnx@40)2@2%c;*=?-2Za=}O}7&( w%_K#(S>e1j&gfY?mR})n>>0+8p`iTe2d1K2h8#$+)&Kwi07*qoM6N<$f(2cptN;K2 diff --git a/node_modules/serve-index/public/icons/page_white_get.png b/node_modules/serve-index/public/icons/page_white_get.png deleted file mode 100644 index e4a1ecba1b60e54f3777717ed105cdde745b7184..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 516 zcmV+f0{i`mP)o)wchR-92qq~y6`XqbKmElbB3z{pkZs0VPF`CFvS?7jDn^mFo>d9Y&06* z&1MsS!M-CH3ee+h_sy)Ms%B*ec3R0RpVi9?*mU84yoq(Bw8 z<4(999dJJE!V%pWT~HGRIAb;(#O%2K3?uRpz}AfgE8e9q&OSdr^e^}lC$QXZz;S2A z)w>^oHy>?v)q--`!pmuBe96PxP0u*inQvyFW(llfv9 zXV1s*Jh`y2H%B3ZTA(AzpsQ?hb6_PyZ=c1?_B4fbl>G%!@ubJln=!)x0000#DY{xaiib^#X=YT4@yE_&2#eBulEdzjE`u&@G%2(&u{J-<}d(^uY4W_kMfEX z@!X)AR9F&FL?RJyJRUzvBoeqN{5kY`z3wcM0+du73~_0|*lac! z42Dw(Eg1o{Ash}P8jXrqN+1w`*XxDD;ShmPCZC7#4;wWbHoMvBl$=zF-`?*9j*Nbjd=v@OWt_BgKxP-3wd zy37?ATx&$b+&zRM!K;BD%Okw`Sb@&Pak8$KRX19jWZmC0&n*Ggv%j8nvSPDFw zEkV65AGOoBQ8kf`R|}Px*&INNS%osq9b{Fq2I(x6@xM>tg=vRLF?I`0rWzHyRc>}g~)F_Qn`A>)C_iwK%Z zrIJ;xR)UI1Y4Ozts|-Nho;q zVk9-bX)%F~!;63iu$Fk=VJn3~fmb5S@@)ZqjBT2{f`vT`b2}zxb0$o;EF@G3&BHK^ zc)`1kUzo^Qkk$?KFKHNBD?nP-MJ3b@&4fg;g5l2wMi^g?9qj+~@b;62o_U1_S1J`g z7m^UMg25FX1MJ5AQxAJ5F5WDt=$=-@JV-!LHA2vuxl9kN>PS8x??^AINH6LjF*#nbk4}=n3gfWp$kEX5IpHS zYiQ{@d7Nl&d$#+7-TckP&Q}N91e-C#5QQ<|d}62BjvZR2H60wE-&H<>}%WqH(_V;zPbB1rgSSSC(0? zWlQ#?N3UgnJ9m2C29w!SwoOo5_2Iq!<8vCyEoDoj@#oV($oJEg6Bj@;nD|2g8 s%L|>IZ381yx9RvPhV4J)*SeoEV4lyr#k*`nfWBbxboFyt=akR{0DpOPi2wiq diff --git a/node_modules/serve-index/public/icons/page_white_key.png b/node_modules/serve-index/public/icons/page_white_key.png deleted file mode 100644 index d61648452284da1bc28b10385f95b5d2bf027901..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 616 zcmV-u0+;=XP)-tZUVHjYHp;RjQ0M0pRlXN=mLv{hk9Ebp9&~+Wj-T9IkpzWPWd#fZ)d=zV^~S`;LE*!&u-?g42^wwN&Xr1~#d5ifl_2*B1OoS}CDno^8a50ArfE8;stQF>AP54J@H~%T zFz84s;dO!QJKD36(~!QOg!t_^gfFcSKDU4yK0+Ypg$NT^mIYcQ6bk*3P(lBLh7Df_ zTu=2xC#+-_%)|{Cv8zz0t|0y4D5M`xAc{gwOKc`ou<*&VjUREFHs1qd<_xSkKeTBt zgyCi=@jj;&Ns^GsWWaIUl0Y2azcDlF@u{(P*!+EH;lnU~b|Lv{4|4Hdkh!qoQHiE$ zY#y>KFA0QEw=4Z|uV{0A^`Y=D}hB$GP&<$bi8q(u;p^0(my3Rz7fP}|# zGZ&#uor4@c3q9r|f?H6-UZmfgKx(iV(MQ`MPWB>iC~SxnN5H*zb*A3#zWwgu&c|}3 zn^g87H{pdeasl%Lhmab&jC?lES}7C?4BFDNA<}20hoY@w_IU%i*T;}}wh!589}7~7 z#Ug`-R~4j&+K_y4kW@X7qLr-)S5qVKU)tO;+kXJ++{vPI@{hVK|PhMVVx_`)vx~zUs}c9O-Ok{00000NkvXXu0mjf DS5_-g diff --git a/node_modules/serve-index/public/icons/page_white_link.png b/node_modules/serve-index/public/icons/page_white_link.png deleted file mode 100644 index bf7bd1c9bfd78d689c73ba67cf914182933ee68c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 614 zcmV-s0-61ZP)OOAS;jTeL{ZSdz-%)SMH9tDF;N4B6%j=d15J&5qy`F#vB?Ar zqS1nH@%ny_XSI*Y>) z1f5QYdmzT>YciP<3WehS<{GovEaLGv27>{*-7f0&I$yJ^L%ZGPv1YT$V|u;*+ZCWz ztHI~CDVsuy($SfR6-`N~K?9GTB#l%%0h7 z-q`K-y~E)+s8lMyTrPL8^_pUo)9G|SluG5pPqw6!LJB_PzyJUM07*qoM6N<$f^=yZ AYybcN diff --git a/node_modules/serve-index/public/icons/page_white_magnify.png b/node_modules/serve-index/public/icons/page_white_magnify.png deleted file mode 100644 index f6b74cc40f82fc83e4dfa6e9647ccc1b34e6ed7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 554 zcmV+_0@eMAP)Vb2f>2}Fa82O3m(Ob=t*sniin`NpInLyMJgI`saru@YOPfh zy4g0#G*cV!#N%;Gq9_VH9?v%kjS3Rb1j8^;C={$Gp=lbj z*(?%?geA!5^Pok%UauwjA)v4g2`HedDw4_Mk4hhBQt?e7YJ5(hcj|3dNu^TOPGnjB zTTsqd3GIZ=Bb`n=7no)dflv&K(lsWw?lH6T1Yht0F9qgIuzh}ym0%n<3d3EBWB*pg z+G!I0lbAEXyd>k|QNuwr4=KX1D+tLPv)j@C1=N4sA4NF9A>HcO3G47*Y6!+SrUH-7 z1hb;^#S=r|`aMh>J#dWruAEf}gcR(DRUC`ZUev&$Sbh0SgLiTXeeHEU<$_YV;9281 zym`igIE%Sm8DpDw7@71Tv^EB5xSdUR*0$Mqp+Wq8OoaZtOg52&)zZ;;M=7#C1Yd6x svjx>8ad4e2x|*xHHwRjcjs6zA0XLDUqKT6dS^xk507*qoM6N<$f*wetruo^Ag2=LamM1T#~4RmC^m`_ zs}H7d&XJ}mg+hU?tu0noRvyjI&o2SRAeYZFesYkts79I^jJ7!A7%6nJwq8O?iT55M z1OQ` zbL{!Cp5o*IRmE9PInMCSPjTwfT~J+EYkz}tjxY=fg5Yf6EQ@DG$0kMJ9h^&$W}9BU zP1oj2;?MWVkKIEl)r=Y;L^Cx2q|>!)qJJ8zE7-V*-Cf7V8_2#1c0N975t~+&QUpQJ z5(uo(-O_`%Rj@U@t>JYAgd!>L?0Idxtd#oW2gc!jinsAEva8|kF4#Ic**mmml_{d^$s}Q5Q)KCys4sfck5bP1SyeHwh2`A<@N&t2j0^lgHC_^(pAAPCNjwl+>AN%C4Ll>_8Hjda%9 oS~i=#*e)>KsPlg0=2)Qg6BCqJ=F8HdGXMYp07*qoM6N<$f@i)wr~m)} diff --git a/node_modules/serve-index/public/icons/page_white_office.png b/node_modules/serve-index/public/icons/page_white_office.png deleted file mode 100644 index a65bcb3e1e9613cd9e4950850db43d7025a5fdf9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 779 zcmV+m1N8ifP)JNR5;6x zll@CmQ5eTZ^k*a#RQf}fVOdd`5NJh6S(>6Cf$wEW#f&JyAR#GAn9>Gml;nOf3WCDa z5({5&UB$(IF?G#$x4X@Ickg!Y-HU!Z_rzX=qAq-XI_LS^=lOCT0|0{#{kBkYDS7{3 zD`iu%E=`cDX_^#^#n$5SIQ|4Zhsk8>N|zXHXG@*41$i-7`Jr{8`3S_OEcmY|RF48wXkk?WpdVM4OePBSbfh z#4_=eXJg@3epx~gi>QbUmO}Bm(ENN3+@c?jWiKvSrm(o|W}Ud*?vy~fn1!V~Cl4kB zI-;c!8f~-v)jX82%EG($>?;KSD$64f2&4qQ#=Yyrcpy$57RAVuV#vKMP)0hT$r6m# zc^F^XaJ8R9Q|}x^NoJYIvYZkq-z}Tnj@UJK2l2H zG}p+VvtjP2Z%bsb$~7QLJ9#pC0dKi`ppOd^_V;ME6tdzC0PtV|r=@e@37O`%0k^=5^`%cf$eu00N17Ro!{^30krz>a%3j34C?*{Mt2^a4~ zK=P+Qq%|f;Tc&+9ps;@Mw`EE%rgs&#y=j6BUGg96oIqdwj9-fiy*N(|@o)eD002ov JPDHLkV1j#pUPb@_ diff --git a/node_modules/serve-index/public/icons/page_white_paint.png b/node_modules/serve-index/public/icons/page_white_paint.png deleted file mode 100644 index 23a37b891c2f5faa3b8128d45373ceab794ca609..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 688 zcmV;h0#E&kP)PK^TXt2QS_@2qt2T|9~baC-vaPn=ziepcfAwB$0!O2Q)E}1e8!q+9)KT5JVKU z7HNY}h##OS-BxWHWjD0wrPDeEfUClHs%Q6&2u@FTOJkKMQN|_Rlw6rQz$gPzqGNtj z#ruSeFeh835JJFiM6vp@6M5bXj%k7CMt%SIwfbF_fD-3*Os`9Ly_Q3WQ_SX33E{pX z9_WIeeTCGQ3wYALpBcK+P-iuw;3i&7xCua37k5# z`>c`M@sGeC7cdsdz`aE9lOz!hPholbyz%T85LYf6O*@SA+9&+^7k>+4M8$A8iNQq{ zQvn8k?-+dU`Z@gK0z$EtPV#+`^OH`R@cE-cuE&_!D)SZGxmQxeobP_Zwq zMEgi6ePN45N`|V1so0uE8^}1xw8s;VM%Ai@7} z2-&Cyvez_-O4?6uv{zTaj|YeYEk34i~K@`8YW2g{x* zc;7z3lItpVy_et{Z-ZZ)<@*%{l7Ao8mu@V7*gz<_1##mwW*%LEwCdzNsVLYx2*T-J z#HeQ*_a=R~KDdVNk$EVgAIRl$oQi_(`_IrdJciDpH|Xe{K-YsMtc!cRnFi$qzsr4z z5*$;ecov%3->1{YNy6-Gf(Ecy&_I$CjI#laeuE+S120^|Vjsf)W&i*H07*qoM6N<$ Ef)^4A_ab^avY?n0hpS-#mn_4{O$e%cm-@NH=3`90Wq+3`~HKArSdfX`&Z12 z(CY$VW-MNtXX4xy%yUeE?}*~0-|iByA@ZrwXgph4S*bhcc5{HB!DFVm_v}P*g7+Q~K}7K0lcp(^N@X>U zV`{ZpeIf${R6Hgg4FL^`X$Eu75k(PE6ycl$AW0Ic)#@rR7Z(7;V?i-dR1K935Jgcx zPfkwK>2wGokf!Nih^ARp6-6arYFG#(9Ta!x93nFEjoA==z(g?#sDg?Owk?Mg7K+>l zWYsf(<`#+$h9Sp6gFOg_dd+80SkUpk&xM7h0`Sov9W73spU;GP073|VfZ&Gd$J$*0<~TV5aPS|qWH57|VJz+d0000vYep8SaFV10Q$h+;hIUPX_=v5b}%>Tm<(&j1&5;I!55C)oN0s(P%ZB zP3Q#ahfpXKWF@S?jm4U#fv)QovMhrriclyNs6-G12#3R##4PSZ0VY(dRWJ;Lwuq{# zAW0Gwi$yA^R4RZ!;W+L`f&%x{=D^VK#BBWL4Ys{;*!A7Q;!=dN<&D8*GzGaF4`hV4 zDbY0{NrMX>ZqF=0((gR5-zL$kC*b)!fwu{Euru|XrG<$^n#@)7i_>rCmRxnDq>$Y%gJaCkRd|tE*a2x05Pe!I^e13o69#&RQZ36s0 zB=O|K2Yi(jsMqThn}9t?f5E-)L^naZ+db$&%M$!bCdm=jv7?t_lB?3&%Ltq(>ESw? c;MI421LCcoDG!2@;{X5v07*qoM6N<$f`UZt7XSbN diff --git a/node_modules/serve-index/public/icons/page_white_picture.png b/node_modules/serve-index/public/icons/page_white_picture.png deleted file mode 100644 index 134b6693687b2fa5fe36d48a9c0b8001f937c741..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 650 zcmV;50(Jd~P)VHAd+bMNh~)LLRqN>D)-jd9UvB%+hyKX5U|&4t0)fzgD-MPpQ$nHU%yoz=vI zMGb>1Xu!6Hw$NT~@Au<4P-+{9;Uw?&oj31uzH>xX0T7Xkz!(tn|Ed9-s_FqyReC13 z(ll)vW1O{Ck5ihay12Ob2ABc@RUI;zHpaMiyRDs0r>|D4rHw{ItJSJnYjt~jTbGuW z`X(~}?!&86q40R8<4zYw;$qi0^3ec=c&<&H;r`8W%H=Xymf^i;Wo6~<+}zx2UMzpC z*6MZN?(FMv`n|KO3(KFiUaucP0;Z!@LcUNa%8#vGK5aZ>wDgB0Gi=t*argWJcdlMQ z2#MpEX0wU+9&0U?N(F#OgpviU_Y{jYMsj65U3|PjwUOY}lUYj?MTiK_Il}NCVx-Eh zDx-TzMk7se+M#W_>?A1-x}ZXw3kkyz5kW)_hkjsi@RhKadN#H$Hq)$07*qoM6N<$f}lhwPXGV_ diff --git a/node_modules/serve-index/public/icons/page_white_powerpoint.png b/node_modules/serve-index/public/icons/page_white_powerpoint.png deleted file mode 100644 index c4eff0387d5888c638ba09473ba6d2369f7b56f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 588 zcmV-S0<-;zP)HU2HvUSp%6 z*n}iP63IK?dpo;h@sj9~pcxo;VVTc-XLiP@DgefqE#NE=@oyUd-&HjLpsLIuSFXV-EMck)oQ(A`s%*^&wf0(rNiNHsU%=0Rw;WC z(kbc37l6fo`-0uR!pYkYv8U^3?nsh^@pw!K0TH3uYyx1_2>|JbXPmfskJ|1YAw9w! z9`N)1^Aesr;y5Nr5-ODn)oOL|CGi}f9!&iVwpK$khlIX10X$H6^A_stBJqvLhU$?V`QXqKme*s~gVDJ4A;LTs_e15jhc1;By a82kqHEPVYFAD2!50000JNR5;6( zlS@kiVHAe7MZY2;Xi-5)WxDDgv@tCUl*&p14T@Z~3ThM5LP4tuQfLu@EnG;nXc<8S z6&3BN?fx-cv-Kp6>HRiNTHE>$X( zD&=w+?GWC>?RLAGC6Yix;an~UmSt)tSf}1VS6N1N2ONORdD? zaj}w6DAZZdOud9Ep?M?{iQWbE5^9HLLZZF|1kdy0Tu4InEuboP9@nvbZ-P0n4AZTy zyMRIxRDmUE#LdqYuD=-Qz4N^bC`_#S7vcLn1M}{J(Wl3#c4VWczu&)AjUlh(11>gp>f`wv{KnjF%!aA*Jk N002ovPDHLkV1kkt*XsZP diff --git a/node_modules/serve-index/public/icons/page_white_ruby.png b/node_modules/serve-index/public/icons/page_white_ruby.png deleted file mode 100644 index f59b7c4365fa1720af1aa04eb47167ddaa6eeed4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 626 zcmV-&0*(ENP)ZS(e|#C2>JN4>y}l*tQ*E7zP@R2CCJnkW?xa6bgk%(hgtZ z0=~d?U3i`+Mvi4!&~+WPT1^NX#{u6&QIx+DE(oR{&T5&-ovF?@wGw)P&AtpHZa|G%V*GUUqL@@!d4V$`8=##4)ytY959JG zdc&Kho)&AL70^i z!PEmeeDWCB-UbK(*4JST44^tV2z_J(dn~+vBMJT97_7rzFio=~XczIv?PQ5$v%u~y zu(bteXb5I1h2zCV{Jc2~V{{yzZipgsP6;k264$*#5q?GzCm|CPa9CKqm4b116h3Pu z?+%Cm52plC8|5P0@igf2GV1KkCfk{Zecu=G@VNrf>s%g9c5D%@cfxVb6$nY`1IW=4 zt10QqSps_2JLp0f3I0j0u>#qA;v!+T))KEbCg|mo3q0pG{OR}p0fPds8+K~d>Hq)$ M07*qoM6N<$g1S2e3jhEB diff --git a/node_modules/serve-index/public/icons/page_white_stack.png b/node_modules/serve-index/public/icons/page_white_stack.png deleted file mode 100644 index 44084add79b9a0fc3354d16bbd4b4b5ff8095da7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 317 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6SkfJR9T^zbpD<_bdI{u9mbgZg z1m~xflqVLYGB~E>C#5QQ<|d}62BjvZR2H60wE-$R@9E+gqH(@-qA%AW0|7U8+xDRI z0k`B18}ImRw2g{jTGP$Pmx3yI6F_2s&$|`cJ!i0UN zB3H;=r{#{FwLaNVJ&hZl9+MTHGx1T^-A=Q0?hRb#8a~x50X%;`b6ik3cw=#XdxWy= zgrpBoDjpwP&g9<9h3x!k_B!?vuTJVkmIJ-U N;OXk;vd$@?2>|rNdMN+^ diff --git a/node_modules/serve-index/public/icons/page_white_star.png b/node_modules/serve-index/public/icons/page_white_star.png deleted file mode 100644 index 3a1441c9a12062a4bb3d706000d3ca14399aebca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 565 zcmV-50?Pe~P)SCZIX8XZzY2l?gCw6LlgWJ5Avz#QX4|&mI8LN)w~J1vgL=KLAhlWz*=#m~gyvxa z&;iC6gb?aZvMdXxX`<0+D1hs_pqJ!wxqlEH;CJ)je~uL(gpi@v>!I0f_Kl=E(E+Tq z26na*9gribxx-Oft(HnstyXUUy!39&E-cI%J5Rsy;(PGZH{g{ty!HVC&yGPT3H8x# zw{^gBPW)O0FMoh{k%l<`1a|To_Wl&u&-GXm8izU|&<&utILc4wc6s@u1bmTz6x{qg zTw@7=FQRcg&r`h+gcR$*Jbv+*DPk7v)B@e0o2 z6IlBXW&8xh@9)YKiV~2>+z&XKd24JT55YWz&JtfvCg4r^~bLP79-yS@n$OW00000NkvXXu0mjf DStt2z diff --git a/node_modules/serve-index/public/icons/page_white_swoosh.png b/node_modules/serve-index/public/icons/page_white_swoosh.png deleted file mode 100644 index e7708292adabf4821612bfca032cbd019c63180b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 634 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 diff --git a/node_modules/serve-index/public/icons/page_white_width.png b/node_modules/serve-index/public/icons/page_white_width.png deleted file mode 100644 index 1eb880947ddf3e745c29e8d9dc90f09c7e6e323c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 309 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6SkfJR9T^zbpD<_bdI{u9mbgZg z1m~xflqVLYGB~E>C#5QQ<|d}62BjvZR2H60wE-$R?&;zfqH(@;q9b3Efq-lM(nr^( z=EYR73-9e)UYMWsXy%?aZsD68Yyv^2$~6QgEcljw%kx>O(f-gQ?@fOOx3A-0+Qw?O zRx~W)kn~Qe2d6f9nMG#g9Q04Mk==M~N!Dglvxk!fgVh#w@ZV$IY1+Xc`d{d2UcaP~ zfWp)_Ivqj}l2SPy^9ZWy6rG9Yx4v67_uA&&9|XA~5-#3)W3%em1peD8RWH^#O%XoM zxMPud%}GTj#~*+7JMxTd!`{^Q+>(D3*|@KV`*G2;{QnANOxu1$r2xIe;OXk;vd$@? F2>@zac~<}c diff --git a/node_modules/serve-index/public/icons/page_white_word.png b/node_modules/serve-index/public/icons/page_white_word.png deleted file mode 100644 index ae8ecbf47672a874c0958d0d113a56162c2bd364..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 651 zcmV;60(AX}P)hkjP zNW|QGv-YFNLN^qH@tJycPNG5ti6B7;r4mEr#lr@*T8*M85D`{ZR^BWwF23T<%MYIh zdC)S*p=|xk^!~H=+HSZ183~y8v4|mYmZxt&)5{{~>J`>E223Q5>T$=~mtA71q-jdG z+eJhOAyBW^0k9Gk1+rX8)zFx((CG^&tDY>6XaS~Fy!WJON|Gdujg5^~Vzt@o%BcYLiNiTQSD`zL^ociBz_>bDlpw3kriQ@Z`bVsGz-_6N>$&gTDiKDTKR^ z-hB*tHa^>!oD~5TK^0UK5rZ}RBm50Bv}S-yA%s=Ha5RYb{)!z2N&$&64gfhybBu8p lh~_|?8^bu;BRYt{<}Yrwd83Y=s?Goa002ovPDHLkV1l%3CP4rI diff --git a/node_modules/serve-index/public/icons/page_white_world.png b/node_modules/serve-index/public/icons/page_white_world.png deleted file mode 100644 index 6ed2490ed1432d5d667a76235360824a1088e928..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 734 zcmV<40wMj0P)JT{hN;C#tgf#9krG=I>5!<*aE1_(spcgF}<`n4i zJi-}^6UUeU4jUFwdCiVPDm%`Zx^UBa8J(mnR6wEgz^}o8;)M*Y(@l_!Kfv)}4+NuM zaPXE50z)r)9=D=SR|RIqfQ^j}Hu!fzMeQBo+@PZk1G8hOw|vBTvkx`HM)Xe9q3xao z@`p0`NO!2904FHSLA6E@Y-O6zH$DQzvq@aHsz}}<(!v(Z_+EodX%R&NZW75g+nENo zV0020rxE^;7d!067AN>6*+&YLp$9uH6F-=In`XC{Cn%+o|5)b&boEPr02w@|P*oGm QmjD0&07*qoM6N<$g78X0Q~&?~ diff --git a/node_modules/serve-index/public/icons/page_white_wrench.png b/node_modules/serve-index/public/icons/page_white_wrench.png deleted file mode 100644 index fecadd08afed92536be91ab12d8e37b6bf410d5d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 613 zcmV-r0-F7aP)wK%m(L+9IV|s|#(WRl-O^4GvaQsnHq|OstfO zIJ3}3<01}YGARE4m!7=)QisvlHUo!Qymx-@-t*p_129Ko-#pVI)6#!*kLj-AGXWNR zyA_{wKii_amK7^YT-v z6#plaNm#8`-kz@OvjIt^4%IN{@J3bR zRI}ME1Mv85p|%;RK>ViR>APPLB4;;BpCtqE@P+*7!G>I4UjNx~e>r3HA^tWCQ@S)l z{BslcSwL-CxQ&_ZZSv_g0Tu{yi*X){Mt|W7)lbE`SQxFP00000NkvXXu0mjf;)M*S diff --git a/node_modules/serve-index/public/icons/page_white_zip.png b/node_modules/serve-index/public/icons/page_white_zip.png deleted file mode 100644 index fd4bbccdf1643f4ff5022fbc59b82546e259317e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 386 zcmV-|0e$|7P)_QM!1S$Bhw4w+iRuFWf;tfR6D%SMJrb+tx zC9R6{2>Ou6#juIy6u(I?|;&Owi$sRB4^20apB5xE2 z#B9XekY66S6lzfCL!eEQRgo0LokTA55@Y#%_wN!TXPw^Q4IIXsG~v#u_4t;x_HM16EQ@QRY+rut&97&UefsPmLrQ5P zBC2kcbux9L%2bJz$P$XV$*zSxb2e@6_3O#;&!FD<&hLjGn%~%en;7)djE^d6!t$lW7GyIOKlQ46hr`Z zjLNuRDP_53dNoN?wd&HMgL^m1DXFU<5dQsrceN>fSz00000)O9XRTN^$%%`*Fg>ryDtc(lF@?b>dE!20r+y z#Q*>(wbV5H`-E4Do={CJp7=ERhw15hgZi)?jRG88 zzVz(5;g?Td1izJyO33bhjg2Qc7FVY@f9!o)Gu?DII~vm-Dc?}3M!fsgjP?F(7`rgg z+xOk8XD)e?Zl=5+un`5!7kr?F=eq)K-5uqr%yU$1hLv){Vlm=)*5~`lwMciiXFu*g z)*Jkz6AF>#zb(Vx`Iv{bdGZHtlW)v(y5k^|xgSUc9%0}S20nrYrO}78ofk?bV!5)4 z=Ngz@+$9N1>>mA%IWx`Fqa240bWkiW;2TZgd8CZS0U}@mknC;!2;wi$eI@`h0y2JS`Eae0CW}q(2(%!m8 zWq$`PDU>LT1_y*bBv#P5<@q0@ttz$hIH}YMDvAigCc=y*)jY-VOpTd;A8@3t7Xh4r z0KTWOk;N2Ox4!&&^4B*no$WtTX!BXB)rg!y8dvGgKBQKLJNXRRp0}Bsjd1|LNQX~c zbC~fjrk2iL@4dYF*vt;}dFn(%h)n_-vzEIHMOKRkdF%3Lq|zBgKm_h>TEq!))nWjq zzn;B!?!(dQcHu$#=JF`cS&W~C`WHFW^B!~MI#k)>1Vk&eQy8P1O`J6V04{D@|7d6^ zyBABnh-d^H0FX&L07M||E0n_dp4v&Q%PSE9p#R#Hq)`5I_(B5CE#q dxjPz0{s-<+c#AC!i7@~G002ovPDHLkV1iPlpuqqD diff --git a/node_modules/serve-index/public/style.css b/node_modules/serve-index/public/style.css deleted file mode 100644 index eb99dc9..0000000 --- a/node_modules/serve-index/public/style.css +++ /dev/null @@ -1,257 +0,0 @@ -* { - margin: 0; - padding: 0; - outline: 0; -} - -body { - padding: 80px 100px; - font: 13px "Helvetica Neue", "Lucida Grande", "Arial"; - background: #ECE9E9 -webkit-gradient(linear, 0% 0%, 0% 100%, from(#fff), to(#ECE9E9)); - background: #ECE9E9 -moz-linear-gradient(top, #fff, #ECE9E9); - background-repeat: no-repeat; - color: #555; - -webkit-font-smoothing: antialiased; -} -h1, h2, h3 { - font-size: 22px; - color: #343434; -} -h1 em, h2 em { - padding: 0 5px; - font-weight: normal; -} -h1 { - font-size: 60px; -} -h2 { - margin-top: 10px; -} -h3 { - margin: 5px 0 10px 0; - padding-bottom: 5px; - border-bottom: 1px solid #eee; - font-size: 18px; -} -ul li { - list-style: none; -} -ul li:hover { - cursor: pointer; - color: #2e2e2e; -} -ul li .path { - padding-left: 5px; - font-weight: bold; -} -ul li .line { - padding-right: 5px; - font-style: italic; -} -ul li:first-child .path { - padding-left: 0; -} -p { - line-height: 1.5; -} -a { - color: #555; - text-decoration: none; -} -a:hover { - color: #303030; -} -#stacktrace { - margin-top: 15px; -} -.directory h1 { - margin-bottom: 15px; - font-size: 18px; -} -ul#files { - width: 100%; - height: 100%; - overflow: hidden; -} -ul#files li { - float: left; - width: 30%; - line-height: 25px; - margin: 1px; -} -ul#files li a { - display: block; - height: 25px; - border: 1px solid transparent; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; - border-radius: 5px; - overflow: hidden; - white-space: nowrap; -} -ul#files li a:focus, -ul#files li a:hover { - background: rgba(255,255,255,0.65); - border: 1px solid #ececec; -} -ul#files li a.highlight { - -webkit-transition: background .4s ease-in-out; - background: #ffff4f; - border-color: #E9DC51; -} -#search { - display: block; - position: fixed; - top: 20px; - right: 20px; - width: 90px; - -webkit-transition: width ease 0.2s, opacity ease 0.4s; - -moz-transition: width ease 0.2s, opacity ease 0.4s; - -webkit-border-radius: 32px; - -moz-border-radius: 32px; - -webkit-box-shadow: inset 0px 0px 3px rgba(0, 0, 0, 0.25), inset 0px 1px 3px rgba(0, 0, 0, 0.7), 0px 1px 0px rgba(255, 255, 255, 0.03); - -moz-box-shadow: inset 0px 0px 3px rgba(0, 0, 0, 0.25), inset 0px 1px 3px rgba(0, 0, 0, 0.7), 0px 1px 0px rgba(255, 255, 255, 0.03); - -webkit-font-smoothing: antialiased; - text-align: left; - font: 13px "Helvetica Neue", Arial, sans-serif; - padding: 4px 10px; - border: none; - background: transparent; - margin-bottom: 0; - outline: none; - opacity: 0.7; - color: #888; -} -#search:focus { - width: 120px; - opacity: 1.0; -} - -/*views*/ -#files span { - display: inline-block; - overflow: hidden; - text-overflow: ellipsis; - text-indent: 10px; -} -#files .name { - background-repeat: no-repeat; -} -#files .icon .name { - text-indent: 28px; -} - -/*tiles*/ -.view-tiles .name { - width: 100%; - background-position: 8px 5px; -} -.view-tiles .size, -.view-tiles .date { - display: none; -} - -/*details*/ -ul#files.view-details li { - float: none; - display: block; - width: 90%; -} -ul#files.view-details li.header { - height: 25px; - background: #000; - color: #fff; - font-weight: bold; -} -.view-details .header { - border-radius: 5px; -} -.view-details .name { - width: 60%; - background-position: 8px 5px; -} -.view-details .size { - width: 10%; -} -.view-details .date { - width: 30%; -} -.view-details .size, -.view-details .date { - text-align: right; - direction: rtl; -} - -/*mobile*/ -@media (max-width: 768px) { - body { - font-size: 13px; - line-height: 16px; - padding: 0; - } - #search { - position: static; - width: 100%; - font-size: 2em; - line-height: 1.8em; - text-indent: 10px; - border: 0; - border-radius: 0; - padding: 10px 0; - margin: 0; - } - #search:focus { - width: 100%; - border: 0; - opacity: 1; - } - .directory h1 { - font-size: 2em; - line-height: 1.5em; - color: #fff; - background: #000; - padding: 15px 10px; - margin: 0; - } - ul#files { - border-top: 1px solid #cacaca; - } - ul#files li { - float: none; - width: auto !important; - display: block; - border-bottom: 1px solid #cacaca; - font-size: 2em; - line-height: 1.2em; - text-indent: 0; - margin: 0; - } - ul#files li:nth-child(odd) { - background: #e0e0e0; - } - ul#files li a { - height: auto; - border: 0; - border-radius: 0; - padding: 15px 10px; - } - ul#files li a:focus, - ul#files li a:hover { - border: 0; - } - #files .header, - #files .size, - #files .date { - display: none !important; - } - #files .name { - float: none; - display: inline-block; - width: 100%; - text-indent: 0; - background-position: 0 50%; - } - #files .icon .name { - text-indent: 41px; - } -} diff --git a/node_modules/set-value/LICENSE b/node_modules/set-value/LICENSE deleted file mode 100644 index d734237..0000000 --- a/node_modules/set-value/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -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/set-value/README.md b/node_modules/set-value/README.md deleted file mode 100644 index e336d74..0000000 --- a/node_modules/set-value/README.md +++ /dev/null @@ -1,150 +0,0 @@ -# set-value [![NPM version](https://img.shields.io/npm/v/set-value.svg?style=flat)](https://www.npmjs.com/package/set-value) [![NPM monthly downloads](https://img.shields.io/npm/dm/set-value.svg?style=flat)](https://npmjs.org/package/set-value) [![NPM total downloads](https://img.shields.io/npm/dt/set-value.svg?style=flat)](https://npmjs.org/package/set-value) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/set-value.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/set-value) - -> Create nested values and any intermediaries using dot notation (`'a.b.c'`) paths. - -## Install - -Install with [npm](https://www.npmjs.com/): - -```sh -$ npm install --save set-value -``` - -## Usage - -```js -var set = require('set-value'); -set(object, prop, value); -``` - -### Params - -* `object` **{object}**: The object to set `value` on -* `prop` **{string}**: The property to set. Dot-notation may be used. -* `value` **{any}**: The value to set on `object[prop]` - -## Examples - -Updates and returns the given object: - -```js -var obj = {}; -set(obj, 'a.b.c', 'd'); -console.log(obj); -//=> { a: { b: { c: 'd' } } } -``` - -### Escaping - -**Escaping with backslashes** - -Prevent set-value from splitting on a dot by prefixing it with backslashes: - -```js -console.log(set({}, 'a\\.b.c', 'd')); -//=> { 'a.b': { c: 'd' } } - -console.log(set({}, 'a\\.b\\.c', 'd')); -//=> { 'a.b.c': 'd' } -``` - -**Escaping with double-quotes or single-quotes** - -Wrap double or single quotes around the string, or part of the string, that should not be split by set-value: - -```js -console.log(set({}, '"a.b".c', 'd')); -//=> { 'a.b': { c: 'd' } } - -console.log(set({}, "'a.b'.c", "d")); -//=> { 'a.b': { c: 'd' } } - -console.log(set({}, '"this/is/a/.file.path"', 'd')); -//=> { 'this/is/a/file.path': 'd' } -``` - -### Bracket support - -set-value does not split inside brackets or braces: - -```js -console.log(set({}, '[a.b].c', 'd')); -//=> { '[a.b]': { c: 'd' } } - -console.log(set({}, "(a.b).c", "d")); -//=> { '(a.b)': { c: 'd' } } - -console.log(set({}, ".c", "d")); -//=> { '': { c: 'd' } } - -console.log(set({}, "{a..b}.c", "d")); -//=> { '{a..b}': { c: 'd' } } -``` - -## History - -### v2.0.0 - -* Adds support for escaping with double or single quotes. See [escaping](#escaping) for examples. -* Will no longer split inside brackets or braces. See [bracket support](#bracket-support) for examples. - -If there are any regressions please create a [bug report](../../issues/new). Thanks! - -## About - -### Related projects - -* [assign-value](https://www.npmjs.com/package/assign-value): Assign a value or extend a deeply nested property of an object using object path… [more](https://github.com/jonschlinkert/assign-value) | [homepage](https://github.com/jonschlinkert/assign-value "Assign a value or extend a deeply nested property of an object using object path notation.") -* [get-value](https://www.npmjs.com/package/get-value): Use property paths (`a.b.c`) to get a nested value from an object. | [homepage](https://github.com/jonschlinkert/get-value "Use property paths (`a.b.c`) to get a nested value from an object.") -* [has-value](https://www.npmjs.com/package/has-value): Returns true if a value exists, false if empty. Works with deeply nested values using… [more](https://github.com/jonschlinkert/has-value) | [homepage](https://github.com/jonschlinkert/has-value "Returns true if a value exists, false if empty. Works with deeply nested values using object paths.") -* [merge-value](https://www.npmjs.com/package/merge-value): Similar to assign-value but deeply merges object values or nested values using object path/dot notation. | [homepage](https://github.com/jonschlinkert/merge-value "Similar to assign-value but deeply merges object values or nested values using object path/dot notation.") -* [omit-value](https://www.npmjs.com/package/omit-value): Omit properties from an object or deeply nested property of an object using object path… [more](https://github.com/jonschlinkert/omit-value) | [homepage](https://github.com/jonschlinkert/omit-value "Omit properties from an object or deeply nested property of an object using object path notation.") -* [set-value](https://www.npmjs.com/package/set-value): Create nested values and any intermediaries using dot notation (`'a.b.c'`) paths. | [homepage](https://github.com/jonschlinkert/set-value "Create nested values and any intermediaries using dot notation (`'a.b.c'`) paths.") -* [union-value](https://www.npmjs.com/package/union-value): Set an array of unique values as the property of an object. Supports setting deeply… [more](https://github.com/jonschlinkert/union-value) | [homepage](https://github.com/jonschlinkert/union-value "Set an array of unique values as the property of an object. Supports setting deeply nested properties using using object-paths/dot notation.") -* [unset-value](https://www.npmjs.com/package/unset-value): Delete nested properties from an object using dot notation. | [homepage](https://github.com/jonschlinkert/unset-value "Delete nested properties from an object using dot notation.") - -### Contributing - -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). - -### Contributors - -| **Commits** | **Contributor** | -| --- | --- | -| 59 | [jonschlinkert](https://github.com/jonschlinkert) | -| 1 | [vadimdemedes](https://github.com/vadimdemedes) | -| 1 | [wtgtybhertgeghgtwtg](https://github.com/wtgtybhertgeghgtwtg) | - -### 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 -``` - -### 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 -``` - -### Author - -**Jon Schlinkert** - -* [github/jonschlinkert](https://github.com/jonschlinkert) -* [twitter/jonschlinkert](https://twitter.com/jonschlinkert) - -### License - -Copyright © 2017, [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 21, 2017._ \ No newline at end of file diff --git a/node_modules/set-value/index.js b/node_modules/set-value/index.js deleted file mode 100644 index 0b32e8f..0000000 --- a/node_modules/set-value/index.js +++ /dev/null @@ -1,55 +0,0 @@ -/*! - * set-value - * - * Copyright (c) 2014-2015, 2017, Jon Schlinkert. - * Released under the MIT License. - */ - -'use strict'; - -var split = require('split-string'); -var extend = require('extend-shallow'); -var isPlainObject = require('is-plain-object'); -var isObject = require('is-extendable'); - -module.exports = function(obj, prop, val) { - if (!isObject(obj)) { - return obj; - } - - if (Array.isArray(prop)) { - prop = [].concat.apply([], prop).join('.'); - } - - if (typeof prop !== 'string') { - return obj; - } - - var keys = split(prop, {sep: '.', brackets: true}).filter(isValidKey); - var len = keys.length; - var idx = -1; - var current = obj; - - while (++idx < len) { - var key = keys[idx]; - if (idx !== len - 1) { - if (!isObject(current[key])) { - current[key] = {}; - } - current = current[key]; - continue; - } - - if (isPlainObject(current[key]) && isPlainObject(val)) { - current[key] = extend({}, current[key], val); - } else { - current[key] = val; - } - } - - return obj; -}; - -function isValidKey(key) { - return key !== '__proto__' && key !== 'constructor' && key !== 'prototype'; -} diff --git a/node_modules/set-value/package.json b/node_modules/set-value/package.json deleted file mode 100644 index 736db34..0000000 --- a/node_modules/set-value/package.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "name": "set-value", - "description": "Create nested values and any intermediaries using dot notation (`'a.b.c'`) paths.", - "version": "2.0.1", - "homepage": "https://github.com/jonschlinkert/set-value", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "contributors": [ - "Jon Schlinkert (http://twitter.com/jonschlinkert)", - "(https://github.com/wtgtybhertgeghgtwtg)", - "Vadim Demedes (https://vadimdemedes.com)" - ], - "repository": "jonschlinkert/set-value", - "bugs": { - "url": "https://github.com/jonschlinkert/set-value/issues" - }, - "license": "MIT", - "files": [ - "index.js" - ], - "main": "index.js", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "devDependencies": { - "gulp-format-md": "^0.1.12", - "mocha": "^3.4.2" - }, - "keywords": [ - "get", - "has", - "hasown", - "key", - "keys", - "nested", - "notation", - "object", - "prop", - "properties", - "property", - "props", - "set", - "value", - "values" - ], - "verb": { - "toc": false, - "layout": "default", - "tasks": [ - "readme" - ], - "plugins": [ - "gulp-format-md" - ], - "related": { - "list": [ - "assign-value", - "get-value", - "has-value", - "merge-value", - "omit-value", - "set-value", - "union-value", - "unset-value" - ] - }, - "lint": { - "reflinks": true - } - } -} diff --git a/node_modules/setprototypeof/LICENSE b/node_modules/setprototypeof/LICENSE deleted file mode 100644 index 61afa2f..0000000 --- a/node_modules/setprototypeof/LICENSE +++ /dev/null @@ -1,13 +0,0 @@ -Copyright (c) 2015, Wes Todd - -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/setprototypeof/README.md b/node_modules/setprototypeof/README.md deleted file mode 100644 index 791eeff..0000000 --- a/node_modules/setprototypeof/README.md +++ /dev/null @@ -1,31 +0,0 @@ -# Polyfill for `Object.setPrototypeOf` - -[![NPM Version](https://img.shields.io/npm/v/setprototypeof.svg)](https://npmjs.org/package/setprototypeof) -[![NPM Downloads](https://img.shields.io/npm/dm/setprototypeof.svg)](https://npmjs.org/package/setprototypeof) -[![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg)](https://github.com/standard/standard) - -A simple cross platform implementation to set the prototype of an instianted object. Supports all modern browsers and at least back to IE8. - -## Usage: - -``` -$ npm install --save setprototypeof -``` - -```javascript -var setPrototypeOf = require('setprototypeof') - -var obj = {} -setPrototypeOf(obj, { - foo: function () { - return 'bar' - } -}) -obj.foo() // bar -``` - -TypeScript is also supported: - -```typescript -import setPrototypeOf from 'setprototypeof' -``` diff --git a/node_modules/setprototypeof/index.d.ts b/node_modules/setprototypeof/index.d.ts deleted file mode 100644 index f108ecd..0000000 --- a/node_modules/setprototypeof/index.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -declare function setPrototypeOf(o: any, proto: object | null): any; -export = setPrototypeOf; diff --git a/node_modules/setprototypeof/index.js b/node_modules/setprototypeof/index.js deleted file mode 100644 index c527055..0000000 --- a/node_modules/setprototypeof/index.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict' -/* eslint no-proto: 0 */ -module.exports = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array ? setProtoOf : mixinProperties) - -function setProtoOf (obj, proto) { - obj.__proto__ = proto - return obj -} - -function mixinProperties (obj, proto) { - for (var prop in proto) { - if (!Object.prototype.hasOwnProperty.call(obj, prop)) { - obj[prop] = proto[prop] - } - } - return obj -} diff --git a/node_modules/setprototypeof/package.json b/node_modules/setprototypeof/package.json deleted file mode 100644 index f20915b..0000000 --- a/node_modules/setprototypeof/package.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "setprototypeof", - "version": "1.2.0", - "description": "A small polyfill for Object.setprototypeof", - "main": "index.js", - "typings": "index.d.ts", - "scripts": { - "test": "standard && mocha", - "testallversions": "npm run node010 && npm run node4 && npm run node6 && npm run node9 && npm run node11", - "testversion": "docker run -it --rm -v $(PWD):/usr/src/app -w /usr/src/app node:${NODE_VER} npm install mocha@${MOCHA_VER:-latest} && npm t", - "node010": "NODE_VER=0.10 MOCHA_VER=3 npm run testversion", - "node4": "NODE_VER=4 npm run testversion", - "node6": "NODE_VER=6 npm run testversion", - "node9": "NODE_VER=9 npm run testversion", - "node11": "NODE_VER=11 npm run testversion", - "prepublishOnly": "npm t", - "postpublish": "git push origin && git push origin --tags" - }, - "repository": { - "type": "git", - "url": "https://github.com/wesleytodd/setprototypeof.git" - }, - "keywords": [ - "polyfill", - "object", - "setprototypeof" - ], - "author": "Wes Todd", - "license": "ISC", - "bugs": { - "url": "https://github.com/wesleytodd/setprototypeof/issues" - }, - "homepage": "https://github.com/wesleytodd/setprototypeof", - "devDependencies": { - "mocha": "^6.1.4", - "standard": "^13.0.2" - } -} diff --git a/node_modules/setprototypeof/test/index.js b/node_modules/setprototypeof/test/index.js deleted file mode 100644 index afeb4dd..0000000 --- a/node_modules/setprototypeof/test/index.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict' -/* eslint-env mocha */ -/* eslint no-proto: 0 */ -var assert = require('assert') -var setPrototypeOf = require('..') - -describe('setProtoOf(obj, proto)', function () { - it('should merge objects', function () { - var obj = { a: 1, b: 2 } - var proto = { b: 3, c: 4 } - var mergeObj = setPrototypeOf(obj, proto) - - if (Object.getPrototypeOf) { - assert.strictEqual(Object.getPrototypeOf(obj), proto) - } else if ({ __proto__: [] } instanceof Array) { - assert.strictEqual(obj.__proto__, proto) - } else { - assert.strictEqual(obj.a, 1) - assert.strictEqual(obj.b, 2) - assert.strictEqual(obj.c, 4) - } - assert.strictEqual(mergeObj, obj) - }) -}) diff --git a/node_modules/snapdragon-node/LICENSE b/node_modules/snapdragon-node/LICENSE deleted file mode 100644 index 9a1c856..0000000 --- a/node_modules/snapdragon-node/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 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/snapdragon-node/README.md b/node_modules/snapdragon-node/README.md deleted file mode 100644 index 2300a3c..0000000 --- a/node_modules/snapdragon-node/README.md +++ /dev/null @@ -1,453 +0,0 @@ -# snapdragon-node [![NPM version](https://img.shields.io/npm/v/snapdragon-node.svg?style=flat)](https://www.npmjs.com/package/snapdragon-node) [![NPM monthly downloads](https://img.shields.io/npm/dm/snapdragon-node.svg?style=flat)](https://npmjs.org/package/snapdragon-node) [![NPM total downloads](https://img.shields.io/npm/dt/snapdragon-node.svg?style=flat)](https://npmjs.org/package/snapdragon-node) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/snapdragon-node.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/snapdragon-node) - -> Snapdragon utility for creating a new AST node in custom code, such as plugins. - -## Install - -Install with [npm](https://www.npmjs.com/): - -```sh -$ npm install --save snapdragon-node -``` - -## Usage - -With [snapdragon](https://github.com/jonschlinkert/snapdragon) v0.9.0 and higher you can use `this.node()` to create a new `Node`, whenever it makes sense. - -```js -var Node = require('snapdragon-node'); -var Snapdragon = require('snapdragon'); -var snapdragon = new Snapdragon(); - -// example usage inside a parser visitor function -snapdragon.parser.set('foo', function() { - // get the current "start" position - var pos = this.position(); - - // returns the match if regex matches the substring - // at the current position on `parser.input` - var match = this.match(/foo/); - if (match) { - // call "pos" on the node, to set the start and end - // positions, and return the node to push it onto the AST - // (snapdragon will push the node onto the correct - // nodes array, based on the stack) - return pos(new Node({type: 'bar', val: match[0]})); - } -}); -``` - -## API - -### [Node](index.js#L22) - -Create a new AST `Node` with the given `val` and `type`. - -**Params** - -* `val` **{String|Object}**: Pass a matched substring, or an object to merge onto the node. -* `type` **{String}**: The node type to use when `val` is a string. -* `returns` **{Object}**: node instance - -**Example** - -```js -var node = new Node('*', 'Star'); -var node = new Node({type: 'star', val: '*'}); -``` - -### [.isNode](index.js#L61) - -Returns true if the given value is a node. - -**Params** - -* `node` **{Object}** -* `returns` **{Boolean}** - -**Example** - -```js -var Node = require('snapdragon-node'); -var node = new Node({type: 'foo'}); -console.log(Node.isNode(node)); //=> true -console.log(Node.isNode({})); //=> false -``` - -### [.define](index.js#L80) - -Define a non-enumberable property on the node instance. Useful for adding properties that shouldn't be extended or visible during debugging. - -**Params** - -* `name` **{String}** -* `val` **{any}** -* `returns` **{Object}**: returns the node instance - -**Example** - -```js -var node = new Node(); -node.define('foo', 'something non-enumerable'); -``` - -### [.isEmpty](index.js#L100) - -Returns true if `node.val` is an empty string, or `node.nodes` does not contain any non-empty text nodes. - -**Params** - -* `fn` **{Function}**: (optional) Filter function that is called on `node` and/or child nodes. `isEmpty` will return false immediately when the filter function returns false on any nodes. -* `returns` **{Boolean}** - -**Example** - -```js -var node = new Node({type: 'text'}); -node.isEmpty(); //=> true -node.val = 'foo'; -node.isEmpty(); //=> false -``` - -### [.push](index.js#L118) - -Given node `foo` and node `bar`, push node `bar` onto `foo.nodes`, and set `foo` as `bar.parent`. - -**Params** - -* `node` **{Object}** -* `returns` **{Number}**: Returns the length of `node.nodes` - -**Example** - -```js -var foo = new Node({type: 'foo'}); -var bar = new Node({type: 'bar'}); -foo.push(bar); -``` - -### [.unshift](index.js#L140) - -Given node `foo` and node `bar`, unshift node `bar` onto `foo.nodes`, and set `foo` as `bar.parent`. - -**Params** - -* `node` **{Object}** -* `returns` **{Number}**: Returns the length of `node.nodes` - -**Example** - -```js -var foo = new Node({type: 'foo'}); -var bar = new Node({type: 'bar'}); -foo.unshift(bar); -``` - -### [.pop](index.js#L167) - -Pop a node from `node.nodes`. - -* `returns` **{Number}**: Returns the popped `node` - -**Example** - -```js -var node = new Node({type: 'foo'}); -node.push(new Node({type: 'a'})); -node.push(new Node({type: 'b'})); -node.push(new Node({type: 'c'})); -node.push(new Node({type: 'd'})); -console.log(node.nodes.length); -//=> 4 -node.pop(); -console.log(node.nodes.length); -//=> 3 -``` - -### [.shift](index.js#L190) - -Shift a node from `node.nodes`. - -* `returns` **{Object}**: Returns the shifted `node` - -**Example** - -```js -var node = new Node({type: 'foo'}); -node.push(new Node({type: 'a'})); -node.push(new Node({type: 'b'})); -node.push(new Node({type: 'c'})); -node.push(new Node({type: 'd'})); -console.log(node.nodes.length); -//=> 4 -node.shift(); -console.log(node.nodes.length); -//=> 3 -``` - -### [.remove](index.js#L205) - -Remove `node` from `node.nodes`. - -**Params** - -* `node` **{Object}** -* `returns` **{Object}**: Returns the removed node. - -**Example** - -```js -node.remove(childNode); -``` - -### [.find](index.js#L231) - -Get the first child node from `node.nodes` that matches the given `type`. If `type` is a number, the child node at that index is returned. - -**Params** - -* `type` **{String}** -* `returns` **{Object}**: Returns a child node or undefined. - -**Example** - -```js -var child = node.find(1); //<= index of the node to get -var child = node.find('foo'); //<= node.type of a child node -var child = node.find(/^(foo|bar)$/); //<= regex to match node.type -var child = node.find(['foo', 'bar']); //<= array of node.type(s) -``` - -### [.isType](index.js#L249) - -Return true if the node is the given `type`. - -**Params** - -* `type` **{String}** -* `returns` **{Boolean}** - -**Example** - -```js -var node = new Node({type: 'bar'}); -cosole.log(node.isType('foo')); // false -cosole.log(node.isType(/^(foo|bar)$/)); // true -cosole.log(node.isType(['foo', 'bar'])); // true -``` - -### [.hasType](index.js#L270) - -Return true if the `node.nodes` has the given `type`. - -**Params** - -* `type` **{String}** -* `returns` **{Boolean}** - -**Example** - -```js -var foo = new Node({type: 'foo'}); -var bar = new Node({type: 'bar'}); -foo.push(bar); - -cosole.log(foo.hasType('qux')); // false -cosole.log(foo.hasType(/^(qux|bar)$/)); // true -cosole.log(foo.hasType(['qux', 'bar'])); // true -``` - -* `returns` **{Array}** - -**Example** - -```js -var foo = new Node({type: 'foo'}); -var bar = new Node({type: 'bar'}); -var baz = new Node({type: 'baz'}); -foo.push(bar); -foo.push(baz); - -console.log(bar.siblings.length) // 2 -console.log(baz.siblings.length) // 2 -``` - -* `returns` **{Number}** - -**Example** - -```js -var foo = new Node({type: 'foo'}); -var bar = new Node({type: 'bar'}); -var baz = new Node({type: 'baz'}); -var qux = new Node({type: 'qux'}); -foo.push(bar); -foo.push(baz); -foo.unshift(qux); - -console.log(bar.index) // 1 -console.log(baz.index) // 2 -console.log(qux.index) // 0 -``` - -* `returns` **{Object}** - -**Example** - -```js -var foo = new Node({type: 'foo'}); -var bar = new Node({type: 'bar'}); -var baz = new Node({type: 'baz'}); -foo.push(bar); -foo.push(baz); - -console.log(baz.prev.type) // 'bar' -``` - -* `returns` **{Object}** - -**Example** - -```js -var foo = new Node({type: 'foo'}); -var bar = new Node({type: 'bar'}); -var baz = new Node({type: 'baz'}); -foo.push(bar); -foo.push(baz); - -console.log(bar.siblings.length) // 2 -console.log(baz.siblings.length) // 2 -``` - -* `returns` **{Object}**: The first node, or undefiend - -**Example** - -```js -var foo = new Node({type: 'foo'}); -var bar = new Node({type: 'bar'}); -var baz = new Node({type: 'baz'}); -var qux = new Node({type: 'qux'}); -foo.push(bar); -foo.push(baz); -foo.push(qux); - -console.log(foo.first.type) // 'bar' -``` - -* `returns` **{Object}**: The last node, or undefiend - -**Example** - -```js -var foo = new Node({type: 'foo'}); -var bar = new Node({type: 'bar'}); -var baz = new Node({type: 'baz'}); -var qux = new Node({type: 'qux'}); -foo.push(bar); -foo.push(baz); -foo.push(qux); - -console.log(foo.last.type) // 'qux' -``` - -* `returns` **{Object}**: The last node, or undefiend - -**Example** - -```js -var foo = new Node({type: 'foo'}); -var bar = new Node({type: 'bar'}); -var baz = new Node({type: 'baz'}); -var qux = new Node({type: 'qux'}); -foo.push(bar); -foo.push(baz); -foo.push(qux); - -console.log(foo.last.type) // 'qux' -``` - -## Release history - -Changelog entries are classified using the following labels from [keep-a-changelog](https://github.com/olivierlacan/keep-a-changelog): - -* `added`: for new features -* `changed`: for changes in existing functionality -* `deprecated`: for once-stable features removed in upcoming releases -* `removed`: for deprecated features removed in this release -* `fixed`: for any bug fixes - -Custom labels used in this changelog: - -* `dependencies`: bumps dependencies -* `housekeeping`: code re-organization, minor edits, or other changes that don't fit in one of the other categories. - -### [2.0.0] - 2017-05-01 - -**Changed** - -* `.unshiftNode` was renamed to [.unshift](#unshift) -* `.pushNode` was renamed to [.push](#push) -* `.getNode` was renamed to [.find](#find) - -**Added** - -* [.isNode](#isNode) -* [.isEmpty](#isEmpty) -* [.pop](#pop) -* [.shift](#shift) -* [.remove](#remove) - -### [0.1.0] - -First release. - -## About - -### Related projects - -* [breakdance](https://www.npmjs.com/package/breakdance): Breakdance is a node.js library for converting HTML to markdown. Highly pluggable, flexible and easy… [more](http://breakdance.io) | [homepage](http://breakdance.io "Breakdance is a node.js library for converting HTML to markdown. Highly pluggable, flexible and easy to use. It's time for your markup to get down.") -* [snapdragon-capture](https://www.npmjs.com/package/snapdragon-capture): Snapdragon plugin that adds a capture method to the parser instance. | [homepage](https://github.com/jonschlinkert/snapdragon-capture "Snapdragon plugin that adds a capture method to the parser instance.") -* [snapdragon-cheerio](https://www.npmjs.com/package/snapdragon-cheerio): Snapdragon plugin for converting a cheerio AST to a snapdragon AST. | [homepage](https://github.com/jonschlinkert/snapdragon-cheerio "Snapdragon plugin for converting a cheerio AST to a snapdragon AST.") -* [snapdragon-util](https://www.npmjs.com/package/snapdragon-util): Utilities for the snapdragon parser/compiler. | [homepage](https://github.com/jonschlinkert/snapdragon-util "Utilities for the snapdragon parser/compiler.") -* [snapdragon](https://www.npmjs.com/package/snapdragon): Easy-to-use plugin system for creating powerful, fast and versatile parsers and compilers, with built-in source-map… [more](https://github.com/jonschlinkert/snapdragon) | [homepage](https://github.com/jonschlinkert/snapdragon "Easy-to-use plugin system for creating powerful, fast and versatile parsers and compilers, with built-in source-map support.") - -### Contributing - -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). - -Please read the [contributing guide](.github/contributing.md) for advice on opening issues, pull requests, and coding standards. - -### 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 -``` - -### 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 -``` - -### Author - -**Jon Schlinkert** - -* [github/jonschlinkert](https://github.com/jonschlinkert) -* [twitter/jonschlinkert](https://twitter.com/jonschlinkert) - -### License - -Copyright © 2017, [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 25, 2017._ \ No newline at end of file diff --git a/node_modules/snapdragon-node/index.js b/node_modules/snapdragon-node/index.js deleted file mode 100644 index 0f66ff5..0000000 --- a/node_modules/snapdragon-node/index.js +++ /dev/null @@ -1,492 +0,0 @@ -'use strict'; - -var isObject = require('isobject'); -var define = require('define-property'); -var utils = require('snapdragon-util'); -var ownNames; - -/** - * Create a new AST `Node` with the given `val` and `type`. - * - * ```js - * var node = new Node('*', 'Star'); - * var node = new Node({type: 'star', val: '*'}); - * ``` - * @name Node - * @param {String|Object} `val` Pass a matched substring, or an object to merge onto the node. - * @param {String} `type` The node type to use when `val` is a string. - * @return {Object} node instance - * @api public - */ - -function Node(val, type, parent) { - if (typeof type !== 'string') { - parent = type; - type = null; - } - - define(this, 'parent', parent); - define(this, 'isNode', true); - define(this, 'expect', null); - - if (typeof type !== 'string' && isObject(val)) { - lazyKeys(); - var keys = Object.keys(val); - for (var i = 0; i < keys.length; i++) { - var key = keys[i]; - if (ownNames.indexOf(key) === -1) { - this[key] = val[key]; - } - } - } else { - this.type = type; - this.val = val; - } -} - -/** - * Returns true if the given value is a node. - * - * ```js - * var Node = require('snapdragon-node'); - * var node = new Node({type: 'foo'}); - * console.log(Node.isNode(node)); //=> true - * console.log(Node.isNode({})); //=> false - * ``` - * @param {Object} `node` - * @returns {Boolean} - * @api public - */ - -Node.isNode = function(node) { - return utils.isNode(node); -}; - -/** - * Define a non-enumberable property on the node instance. - * Useful for adding properties that shouldn't be extended - * or visible during debugging. - * - * ```js - * var node = new Node(); - * node.define('foo', 'something non-enumerable'); - * ``` - * @param {String} `name` - * @param {any} `val` - * @return {Object} returns the node instance - * @api public - */ - -Node.prototype.define = function(name, val) { - define(this, name, val); - return this; -}; - -/** - * Returns true if `node.val` is an empty string, or `node.nodes` does - * not contain any non-empty text nodes. - * - * ```js - * var node = new Node({type: 'text'}); - * node.isEmpty(); //=> true - * node.val = 'foo'; - * node.isEmpty(); //=> false - * ``` - * @param {Function} `fn` (optional) Filter function that is called on `node` and/or child nodes. `isEmpty` will return false immediately when the filter function returns false on any nodes. - * @return {Boolean} - * @api public - */ - -Node.prototype.isEmpty = function(fn) { - return utils.isEmpty(this, fn); -}; - -/** - * Given node `foo` and node `bar`, push node `bar` onto `foo.nodes`, and - * set `foo` as `bar.parent`. - * - * ```js - * var foo = new Node({type: 'foo'}); - * var bar = new Node({type: 'bar'}); - * foo.push(bar); - * ``` - * @param {Object} `node` - * @return {Number} Returns the length of `node.nodes` - * @api public - */ - -Node.prototype.push = function(node) { - assert(Node.isNode(node), 'expected node to be an instance of Node'); - define(node, 'parent', this); - - this.nodes = this.nodes || []; - return this.nodes.push(node); -}; - -/** - * Given node `foo` and node `bar`, unshift node `bar` onto `foo.nodes`, and - * set `foo` as `bar.parent`. - * - * ```js - * var foo = new Node({type: 'foo'}); - * var bar = new Node({type: 'bar'}); - * foo.unshift(bar); - * ``` - * @param {Object} `node` - * @return {Number} Returns the length of `node.nodes` - * @api public - */ - -Node.prototype.unshift = function(node) { - assert(Node.isNode(node), 'expected node to be an instance of Node'); - define(node, 'parent', this); - - this.nodes = this.nodes || []; - return this.nodes.unshift(node); -}; - -/** - * Pop a node from `node.nodes`. - * - * ```js - * var node = new Node({type: 'foo'}); - * node.push(new Node({type: 'a'})); - * node.push(new Node({type: 'b'})); - * node.push(new Node({type: 'c'})); - * node.push(new Node({type: 'd'})); - * console.log(node.nodes.length); - * //=> 4 - * node.pop(); - * console.log(node.nodes.length); - * //=> 3 - * ``` - * @return {Number} Returns the popped `node` - * @api public - */ - -Node.prototype.pop = function() { - return this.nodes && this.nodes.pop(); -}; - -/** - * Shift a node from `node.nodes`. - * - * ```js - * var node = new Node({type: 'foo'}); - * node.push(new Node({type: 'a'})); - * node.push(new Node({type: 'b'})); - * node.push(new Node({type: 'c'})); - * node.push(new Node({type: 'd'})); - * console.log(node.nodes.length); - * //=> 4 - * node.shift(); - * console.log(node.nodes.length); - * //=> 3 - * ``` - * @return {Object} Returns the shifted `node` - * @api public - */ - -Node.prototype.shift = function() { - return this.nodes && this.nodes.shift(); -}; - -/** - * Remove `node` from `node.nodes`. - * - * ```js - * node.remove(childNode); - * ``` - * @param {Object} `node` - * @return {Object} Returns the removed node. - * @api public - */ - -Node.prototype.remove = function(node) { - assert(Node.isNode(node), 'expected node to be an instance of Node'); - this.nodes = this.nodes || []; - var idx = node.index; - if (idx !== -1) { - node.index = -1; - return this.nodes.splice(idx, 1); - } - return null; -}; - -/** - * Get the first child node from `node.nodes` that matches the given `type`. - * If `type` is a number, the child node at that index is returned. - * - * ```js - * var child = node.find(1); //<= index of the node to get - * var child = node.find('foo'); //<= node.type of a child node - * var child = node.find(/^(foo|bar)$/); //<= regex to match node.type - * var child = node.find(['foo', 'bar']); //<= array of node.type(s) - * ``` - * @param {String} `type` - * @return {Object} Returns a child node or undefined. - * @api public - */ - -Node.prototype.find = function(type) { - return utils.findNode(this.nodes, type); -}; - -/** - * Return true if the node is the given `type`. - * - * ```js - * var node = new Node({type: 'bar'}); - * cosole.log(node.isType('foo')); // false - * cosole.log(node.isType(/^(foo|bar)$/)); // true - * cosole.log(node.isType(['foo', 'bar'])); // true - * ``` - * @param {String} `type` - * @return {Boolean} - * @api public - */ - -Node.prototype.isType = function(type) { - return utils.isType(this, type); -}; - -/** - * Return true if the `node.nodes` has the given `type`. - * - * ```js - * var foo = new Node({type: 'foo'}); - * var bar = new Node({type: 'bar'}); - * foo.push(bar); - * - * cosole.log(foo.hasType('qux')); // false - * cosole.log(foo.hasType(/^(qux|bar)$/)); // true - * cosole.log(foo.hasType(['qux', 'bar'])); // true - * ``` - * @param {String} `type` - * @return {Boolean} - * @api public - */ - -Node.prototype.hasType = function(type) { - return utils.hasType(this, type); -}; - -/** - * Get the siblings array, or `null` if it doesn't exist. - * - * ```js - * var foo = new Node({type: 'foo'}); - * var bar = new Node({type: 'bar'}); - * var baz = new Node({type: 'baz'}); - * foo.push(bar); - * foo.push(baz); - * - * console.log(bar.siblings.length) // 2 - * console.log(baz.siblings.length) // 2 - * ``` - * @return {Array} - * @api public - */ - -Object.defineProperty(Node.prototype, 'siblings', { - set: function() { - throw new Error('node.siblings is a getter and cannot be defined'); - }, - get: function() { - return this.parent ? this.parent.nodes : null; - } -}); - -/** - * Get the node's current index from `node.parent.nodes`. - * This should always be correct, even when the parent adds nodes. - * - * ```js - * var foo = new Node({type: 'foo'}); - * var bar = new Node({type: 'bar'}); - * var baz = new Node({type: 'baz'}); - * var qux = new Node({type: 'qux'}); - * foo.push(bar); - * foo.push(baz); - * foo.unshift(qux); - * - * console.log(bar.index) // 1 - * console.log(baz.index) // 2 - * console.log(qux.index) // 0 - * ``` - * @return {Number} - * @api public - */ - -Object.defineProperty(Node.prototype, 'index', { - set: function(index) { - define(this, 'idx', index); - }, - get: function() { - if (!Array.isArray(this.siblings)) { - return -1; - } - var tok = this.idx !== -1 ? this.siblings[this.idx] : null; - if (tok !== this) { - this.idx = this.siblings.indexOf(this); - } - return this.idx; - } -}); - -/** - * Get the previous node from the siblings array or `null`. - * - * ```js - * var foo = new Node({type: 'foo'}); - * var bar = new Node({type: 'bar'}); - * var baz = new Node({type: 'baz'}); - * foo.push(bar); - * foo.push(baz); - * - * console.log(baz.prev.type) // 'bar' - * ``` - * @return {Object} - * @api public - */ - -Object.defineProperty(Node.prototype, 'prev', { - set: function() { - throw new Error('node.prev is a getter and cannot be defined'); - }, - get: function() { - if (Array.isArray(this.siblings)) { - return this.siblings[this.index - 1] || this.parent.prev; - } - return null; - } -}); - -/** - * Get the siblings array, or `null` if it doesn't exist. - * - * ```js - * var foo = new Node({type: 'foo'}); - * var bar = new Node({type: 'bar'}); - * var baz = new Node({type: 'baz'}); - * foo.push(bar); - * foo.push(baz); - * - * console.log(bar.siblings.length) // 2 - * console.log(baz.siblings.length) // 2 - * ``` - * @return {Object} - * @api public - */ - -Object.defineProperty(Node.prototype, 'next', { - set: function() { - throw new Error('node.next is a getter and cannot be defined'); - }, - get: function() { - if (Array.isArray(this.siblings)) { - return this.siblings[this.index + 1] || this.parent.next; - } - return null; - } -}); - -/** - * Get the first node from `node.nodes`. - * - * ```js - * var foo = new Node({type: 'foo'}); - * var bar = new Node({type: 'bar'}); - * var baz = new Node({type: 'baz'}); - * var qux = new Node({type: 'qux'}); - * foo.push(bar); - * foo.push(baz); - * foo.push(qux); - * - * console.log(foo.first.type) // 'bar' - * ``` - * @return {Object} The first node, or undefiend - * @api public - */ - -Object.defineProperty(Node.prototype, 'first', { - get: function() { - return this.nodes ? this.nodes[0] : null; - } -}); - -/** - * Get the last node from `node.nodes`. - * - * ```js - * var foo = new Node({type: 'foo'}); - * var bar = new Node({type: 'bar'}); - * var baz = new Node({type: 'baz'}); - * var qux = new Node({type: 'qux'}); - * foo.push(bar); - * foo.push(baz); - * foo.push(qux); - * - * console.log(foo.last.type) // 'qux' - * ``` - * @return {Object} The last node, or undefiend - * @api public - */ - -Object.defineProperty(Node.prototype, 'last', { - get: function() { - return this.nodes ? utils.last(this.nodes) : null; - } -}); - -/** - * Get the last node from `node.nodes`. - * - * ```js - * var foo = new Node({type: 'foo'}); - * var bar = new Node({type: 'bar'}); - * var baz = new Node({type: 'baz'}); - * var qux = new Node({type: 'qux'}); - * foo.push(bar); - * foo.push(baz); - * foo.push(qux); - * - * console.log(foo.last.type) // 'qux' - * ``` - * @return {Object} The last node, or undefiend - * @api public - */ - -Object.defineProperty(Node.prototype, 'scope', { - get: function() { - if (this.isScope !== true) { - return this.parent ? this.parent.scope : this; - } - return this; - } -}); - -/** - * Get own property names from Node prototype, but only the - * first time `Node` is instantiated - */ - -function lazyKeys() { - if (!ownNames) { - ownNames = Object.getOwnPropertyNames(Node.prototype); - } -} - -/** - * Simplified assertion. Throws an error is `val` is falsey. - */ - -function assert(val, message) { - if (!val) throw new Error(message); -} - -/** - * Expose `Node` - */ - -exports = module.exports = Node; diff --git a/node_modules/snapdragon-node/node_modules/define-property/LICENSE b/node_modules/snapdragon-node/node_modules/define-property/LICENSE deleted file mode 100644 index ec85897..0000000 --- a/node_modules/snapdragon-node/node_modules/define-property/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015, 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/snapdragon-node/node_modules/define-property/README.md b/node_modules/snapdragon-node/node_modules/define-property/README.md deleted file mode 100644 index 2f1af05..0000000 --- a/node_modules/snapdragon-node/node_modules/define-property/README.md +++ /dev/null @@ -1,95 +0,0 @@ -# define-property [![NPM version](https://img.shields.io/npm/v/define-property.svg?style=flat)](https://www.npmjs.com/package/define-property) [![NPM monthly downloads](https://img.shields.io/npm/dm/define-property.svg?style=flat)](https://npmjs.org/package/define-property) [![NPM total downloads](https://img.shields.io/npm/dt/define-property.svg?style=flat)](https://npmjs.org/package/define-property) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/define-property.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/define-property) - -> Define a non-enumerable property on an object. - -## Install - -Install with [npm](https://www.npmjs.com/): - -```sh -$ npm install --save define-property -``` - -Install with [yarn](https://yarnpkg.com): - -```sh -$ yarn add define-property -``` - -## Usage - -**Params** - -* `obj`: The object on which to define the property. -* `prop`: The name of the property to be defined or modified. -* `descriptor`: The descriptor for the property being defined or modified. - -```js -var define = require('define-property'); -var obj = {}; -define(obj, 'foo', function(val) { - return val.toUpperCase(); -}); - -console.log(obj); -//=> {} - -console.log(obj.foo('bar')); -//=> 'BAR' -``` - -**get/set** - -```js -define(obj, 'foo', { - get: function() {}, - set: function() {} -}); -``` - -## About - -### Related projects - -* [assign-deep](https://www.npmjs.com/package/assign-deep): Deeply assign the enumerable properties and/or es6 Symbol properies of source objects to the target… [more](https://github.com/jonschlinkert/assign-deep) | [homepage](https://github.com/jonschlinkert/assign-deep "Deeply assign the enumerable properties and/or es6 Symbol properies of source objects to the target (first) object.") -* [extend-shallow](https://www.npmjs.com/package/extend-shallow): Extend an object with the properties of additional objects. node.js/javascript util. | [homepage](https://github.com/jonschlinkert/extend-shallow "Extend an object with the properties of additional objects. node.js/javascript util.") -* [merge-deep](https://www.npmjs.com/package/merge-deep): Recursively merge values in a javascript object. | [homepage](https://github.com/jonschlinkert/merge-deep "Recursively merge values in a javascript object.") -* [mixin-deep](https://www.npmjs.com/package/mixin-deep): Deeply mix the properties of objects into the first object. Like merge-deep, but doesn't clone. | [homepage](https://github.com/jonschlinkert/mixin-deep "Deeply mix the properties of objects into the first object. Like merge-deep, but doesn't clone.") - -### Contributing - -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). - -### 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 -``` - -### 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 -``` - -### Author - -**Jon Schlinkert** - -* [github/jonschlinkert](https://github.com/jonschlinkert) -* [twitter/jonschlinkert](https://twitter.com/jonschlinkert) - -### License - -Copyright © 2017, [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.5.0, on April 20, 2017._ \ No newline at end of file diff --git a/node_modules/snapdragon-node/node_modules/define-property/index.js b/node_modules/snapdragon-node/node_modules/define-property/index.js deleted file mode 100644 index 27c19eb..0000000 --- a/node_modules/snapdragon-node/node_modules/define-property/index.js +++ /dev/null @@ -1,31 +0,0 @@ -/*! - * define-property - * - * Copyright (c) 2015, 2017, Jon Schlinkert. - * Released under the MIT License. - */ - -'use strict'; - -var isDescriptor = require('is-descriptor'); - -module.exports = function defineProperty(obj, prop, val) { - if (typeof obj !== 'object' && typeof obj !== 'function') { - throw new TypeError('expected an object or function.'); - } - - if (typeof prop !== 'string') { - throw new TypeError('expected `prop` to be a string.'); - } - - if (isDescriptor(val) && ('set' in val || 'get' in val)) { - return Object.defineProperty(obj, prop, val); - } - - return Object.defineProperty(obj, prop, { - configurable: true, - enumerable: false, - writable: true, - value: val - }); -}; diff --git a/node_modules/snapdragon-node/node_modules/define-property/package.json b/node_modules/snapdragon-node/node_modules/define-property/package.json deleted file mode 100644 index e0ab1ca..0000000 --- a/node_modules/snapdragon-node/node_modules/define-property/package.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "name": "define-property", - "description": "Define a non-enumerable property on an object.", - "version": "1.0.0", - "homepage": "https://github.com/jonschlinkert/define-property", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "repository": "jonschlinkert/define-property", - "bugs": { - "url": "https://github.com/jonschlinkert/define-property/issues" - }, - "license": "MIT", - "files": [ - "index.js" - ], - "main": "index.js", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "devDependencies": { - "gulp-format-md": "^0.1.12", - "mocha": "^3.2.0" - }, - "keywords": [ - "define", - "define-property", - "enumerable", - "key", - "non", - "non-enumerable", - "object", - "prop", - "property", - "value" - ], - "verb": { - "related": { - "list": [ - "extend-shallow", - "merge-deep", - "assign-deep", - "mixin-deep" - ] - }, - "toc": false, - "layout": "default", - "tasks": [ - "readme" - ], - "plugins": [ - "gulp-format-md" - ], - "lint": { - "reflinks": true - } - } -} diff --git a/node_modules/snapdragon-node/package.json b/node_modules/snapdragon-node/package.json deleted file mode 100644 index 2ca8023..0000000 --- a/node_modules/snapdragon-node/package.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "name": "snapdragon-node", - "description": "Snapdragon utility for creating a new AST node in custom code, such as plugins.", - "version": "2.1.1", - "homepage": "https://github.com/jonschlinkert/snapdragon-node", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "repository": "jonschlinkert/snapdragon-node", - "bugs": { - "url": "https://github.com/jonschlinkert/snapdragon-node/issues" - }, - "license": "MIT", - "files": [ - "index.js" - ], - "main": "index.js", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "devDependencies": { - "gulp": "^3.9.1", - "gulp-eslint": "^4.0.0", - "gulp-format-md": "^0.1.12", - "gulp-istanbul": "^1.1.2", - "gulp-mocha": "^3.0.1", - "mocha": "^3.4.2", - "snapdragon": "^0.11.0" - }, - "keywords": [ - "ast", - "compile", - "compiler", - "convert", - "node", - "parse", - "parser", - "plugin", - "render", - "snapdragon", - "snapdragonplugin", - "token", - "transform" - ], - "verb": { - "layout": "default", - "tasks": [ - "readme" - ], - "plugins": [ - "gulp-format-md" - ], - "related": { - "list": [ - "breakdance", - "snapdragon", - "snapdragon-capture", - "snapdragon-cheerio", - "snapdragon-util" - ] - }, - "reflinks": [ - "verb", - "verb-generate-readme" - ], - "lint": { - "reflinks": true - } - } -} diff --git a/node_modules/snapdragon-util/LICENSE b/node_modules/snapdragon-util/LICENSE deleted file mode 100644 index 9a1c856..0000000 --- a/node_modules/snapdragon-util/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 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/snapdragon-util/README.md b/node_modules/snapdragon-util/README.md deleted file mode 100644 index b654e02..0000000 --- a/node_modules/snapdragon-util/README.md +++ /dev/null @@ -1,807 +0,0 @@ -# snapdragon-util [![NPM version](https://img.shields.io/npm/v/snapdragon-util.svg?style=flat)](https://www.npmjs.com/package/snapdragon-util) [![NPM monthly downloads](https://img.shields.io/npm/dm/snapdragon-util.svg?style=flat)](https://npmjs.org/package/snapdragon-util) [![NPM total downloads](https://img.shields.io/npm/dt/snapdragon-util.svg?style=flat)](https://npmjs.org/package/snapdragon-util) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/snapdragon-util.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/snapdragon-util) - -> Utilities for the snapdragon parser/compiler. - -
    -Table of Contents - -- [Install](#install) -- [Usage](#usage) -- [API](#api) -- [Release history](#release-history) - * [[3.0.0] - 2017-05-01](#300---2017-05-01) - * [[0.1.0]](#010) -- [About](#about) - -
    - -## Install - -Install with [npm](https://www.npmjs.com/): - -```sh -$ npm install --save snapdragon-util -``` - -Install with [yarn](https://yarnpkg.com): - -```sh -$ yarn add snapdragon-util -``` - -## Usage - -```js -var util = require('snapdragon-util'); -``` - -## API - -### [.isNode](index.js#L21) - -Returns true if the given value is a node. - -**Params** - -* `node` **{Object}**: Instance of [snapdragon-node](https://github.com/jonschlinkert/snapdragon-node) -* `returns` **{Boolean}** - -**Example** - -```js -var Node = require('snapdragon-node'); -var node = new Node({type: 'foo'}); -console.log(utils.isNode(node)); //=> true -console.log(utils.isNode({})); //=> false -``` - -### [.noop](index.js#L37) - -Emit an empty string for the given `node`. - -**Params** - -* `node` **{Object}**: Instance of [snapdragon-node](https://github.com/jonschlinkert/snapdragon-node) -* `returns` **{undefined}** - -**Example** - -```js -// do nothing for beginning-of-string -snapdragon.compiler.set('bos', utils.noop); -``` - -### [.identity](index.js#L53) - -Appdend `node.val` to `compiler.output`, exactly as it was created by the parser. - -**Params** - -* `node` **{Object}**: Instance of [snapdragon-node](https://github.com/jonschlinkert/snapdragon-node) -* `returns` **{undefined}** - -**Example** - -```js -snapdragon.compiler.set('text', utils.identity); -``` - -### [.append](index.js#L76) - -Previously named `.emit`, this method appends the given `val` to `compiler.output` for the given node. Useful when you know what value should be appended advance, regardless of the actual value of `node.val`. - -**Params** - -* `node` **{Object}**: Instance of [snapdragon-node](https://github.com/jonschlinkert/snapdragon-node) -* `returns` **{Function}**: Returns a compiler middleware function. - -**Example** - -```js -snapdragon.compiler - .set('i', function(node) { - this.mapVisit(node); - }) - .set('i.open', utils.append('')) - .set('i.close', utils.append('')) -``` - -### [.toNoop](index.js#L99) - -Used in compiler middleware, this onverts an AST node into an empty `text` node and deletes `node.nodes` if it exists. The advantage of this method is that, as opposed to completely removing the node, indices will not need to be re-calculated in sibling nodes, and nothing is appended to the output. - -**Params** - -* `node` **{Object}**: Instance of [snapdragon-node](https://github.com/jonschlinkert/snapdragon-node) -* `nodes` **{Array}**: Optionally pass a new `nodes` value, to replace the existing `node.nodes` array. - -**Example** - -```js -utils.toNoop(node); -// convert `node.nodes` to the given value instead of deleting it -utils.toNoop(node, []); -``` - -### [.visit](index.js#L128) - -Visit `node` with the given `fn`. The built-in `.visit` method in snapdragon automatically calls registered compilers, this allows you to pass a visitor function. - -**Params** - -* `node` **{Object}**: Instance of [snapdragon-node](https://github.com/jonschlinkert/snapdragon-node) -* `fn` **{Function}** -* `returns` **{Object}**: returns the node after recursively visiting all child nodes. - -**Example** - -```js -snapdragon.compiler.set('i', function(node) { - utils.visit(node, function(childNode) { - // do stuff with "childNode" - return childNode; - }); -}); -``` - -### [.mapVisit](index.js#L155) - -Map [visit](#visit) the given `fn` over `node.nodes`. This is called by [visit](#visit), use this method if you do not want `fn` to be called on the first node. - -**Params** - -* `node` **{Object}**: Instance of [snapdragon-node](https://github.com/jonschlinkert/snapdragon-node) -* `options` **{Object}** -* `fn` **{Function}** -* `returns` **{Object}**: returns the node - -**Example** - -```js -snapdragon.compiler.set('i', function(node) { - utils.mapVisit(node, function(childNode) { - // do stuff with "childNode" - return childNode; - }); -}); -``` - -### [.addOpen](index.js#L194) - -Unshift an `*.open` node onto `node.nodes`. - -**Params** - -* `node` **{Object}**: Instance of [snapdragon-node](https://github.com/jonschlinkert/snapdragon-node) -* `Node` **{Function}**: (required) Node constructor function from [snapdragon-node](https://github.com/jonschlinkert/snapdragon-node). -* `filter` **{Function}**: Optionaly specify a filter function to exclude the node. -* `returns` **{Object}**: Returns the created opening node. - -**Example** - -```js -var Node = require('snapdragon-node'); -snapdragon.parser.set('brace', function(node) { - var match = this.match(/^{/); - if (match) { - var parent = new Node({type: 'brace'}); - utils.addOpen(parent, Node); - console.log(parent.nodes[0]): - // { type: 'brace.open', val: '' }; - - // push the parent "brace" node onto the stack - this.push(parent); - - // return the parent node, so it's also added to the AST - return brace; - } -}); -``` - -### [.addClose](index.js#L244) - -Push a `*.close` node onto `node.nodes`. - -**Params** - -* `node` **{Object}**: Instance of [snapdragon-node](https://github.com/jonschlinkert/snapdragon-node) -* `Node` **{Function}**: (required) Node constructor function from [snapdragon-node](https://github.com/jonschlinkert/snapdragon-node). -* `filter` **{Function}**: Optionaly specify a filter function to exclude the node. -* `returns` **{Object}**: Returns the created closing node. - -**Example** - -```js -var Node = require('snapdragon-node'); -snapdragon.parser.set('brace', function(node) { - var match = this.match(/^}/); - if (match) { - var parent = this.parent(); - if (parent.type !== 'brace') { - throw new Error('missing opening: ' + '}'); - } - - utils.addClose(parent, Node); - console.log(parent.nodes[parent.nodes.length - 1]): - // { type: 'brace.close', val: '' }; - - // no need to return a node, since the parent - // was already added to the AST - return; - } -}); -``` - -### [.wrapNodes](index.js#L274) - -Wraps the given `node` with `*.open` and `*.close` nodes. - -**Params** - -* `node` **{Object}**: Instance of [snapdragon-node](https://github.com/jonschlinkert/snapdragon-node) -* `Node` **{Function}**: (required) Node constructor function from [snapdragon-node](https://github.com/jonschlinkert/snapdragon-node). -* `filter` **{Function}**: Optionaly specify a filter function to exclude the node. -* `returns` **{Object}**: Returns the node - -### [.pushNode](index.js#L299) - -Push the given `node` onto `parent.nodes`, and set `parent` as `node.parent. - -**Params** - -* `parent` **{Object}** -* `node` **{Object}**: Instance of [snapdragon-node](https://github.com/jonschlinkert/snapdragon-node) -* `returns` **{Object}**: Returns the child node - -**Example** - -```js -var parent = new Node({type: 'foo'}); -var node = new Node({type: 'bar'}); -utils.pushNode(parent, node); -console.log(parent.nodes[0].type) // 'bar' -console.log(node.parent.type) // 'foo' -``` - -### [.unshiftNode](index.js#L325) - -Unshift `node` onto `parent.nodes`, and set `parent` as `node.parent. - -**Params** - -* `parent` **{Object}** -* `node` **{Object}**: Instance of [snapdragon-node](https://github.com/jonschlinkert/snapdragon-node) -* `returns` **{undefined}** - -**Example** - -```js -var parent = new Node({type: 'foo'}); -var node = new Node({type: 'bar'}); -utils.unshiftNode(parent, node); -console.log(parent.nodes[0].type) // 'bar' -console.log(node.parent.type) // 'foo' -``` - -### [.popNode](index.js#L354) - -Pop the last `node` off of `parent.nodes`. The advantage of using this method is that it checks for `node.nodes` and works with any version of `snapdragon-node`. - -**Params** - -* `parent` **{Object}** -* `node` **{Object}**: Instance of [snapdragon-node](https://github.com/jonschlinkert/snapdragon-node) -* `returns` **{Number|Undefined}**: Returns the length of `node.nodes` or undefined. - -**Example** - -```js -var parent = new Node({type: 'foo'}); -utils.pushNode(parent, new Node({type: 'foo'})); -utils.pushNode(parent, new Node({type: 'bar'})); -utils.pushNode(parent, new Node({type: 'baz'})); -console.log(parent.nodes.length); //=> 3 -utils.popNode(parent); -console.log(parent.nodes.length); //=> 2 -``` - -### [.shiftNode](index.js#L382) - -Shift the first `node` off of `parent.nodes`. The advantage of using this method is that it checks for `node.nodes` and works with any version of `snapdragon-node`. - -**Params** - -* `parent` **{Object}** -* `node` **{Object}**: Instance of [snapdragon-node](https://github.com/jonschlinkert/snapdragon-node) -* `returns` **{Number|Undefined}**: Returns the length of `node.nodes` or undefined. - -**Example** - -```js -var parent = new Node({type: 'foo'}); -utils.pushNode(parent, new Node({type: 'foo'})); -utils.pushNode(parent, new Node({type: 'bar'})); -utils.pushNode(parent, new Node({type: 'baz'})); -console.log(parent.nodes.length); //=> 3 -utils.shiftNode(parent); -console.log(parent.nodes.length); //=> 2 -``` - -### [.removeNode](index.js#L409) - -Remove the specified `node` from `parent.nodes`. - -**Params** - -* `parent` **{Object}** -* `node` **{Object}**: Instance of [snapdragon-node](https://github.com/jonschlinkert/snapdragon-node) -* `returns` **{Object|undefined}**: Returns the removed node, if successful, or undefined if it does not exist on `parent.nodes`. - -**Example** - -```js -var parent = new Node({type: 'abc'}); -var foo = new Node({type: 'foo'}); -utils.pushNode(parent, foo); -utils.pushNode(parent, new Node({type: 'bar'})); -utils.pushNode(parent, new Node({type: 'baz'})); -console.log(parent.nodes.length); //=> 3 -utils.removeNode(parent, foo); -console.log(parent.nodes.length); //=> 2 -``` - -### [.isType](index.js#L443) - -Returns true if `node.type` matches the given `type`. Throws a `TypeError` if `node` is not an instance of `Node`. - -**Params** - -* `node` **{Object}**: Instance of [snapdragon-node](https://github.com/jonschlinkert/snapdragon-node) -* `type` **{String}** -* `returns` **{Boolean}** - -**Example** - -```js -var Node = require('snapdragon-node'); -var node = new Node({type: 'foo'}); -console.log(utils.isType(node, 'foo')); // false -console.log(utils.isType(node, 'bar')); // true -``` - -### [.hasType](index.js#L486) - -Returns true if the given `node` has the given `type` in `node.nodes`. Throws a `TypeError` if `node` is not an instance of `Node`. - -**Params** - -* `node` **{Object}**: Instance of [snapdragon-node](https://github.com/jonschlinkert/snapdragon-node) -* `type` **{String}** -* `returns` **{Boolean}** - -**Example** - -```js -var Node = require('snapdragon-node'); -var node = new Node({ - type: 'foo', - nodes: [ - new Node({type: 'bar'}), - new Node({type: 'baz'}) - ] -}); -console.log(utils.hasType(node, 'xyz')); // false -console.log(utils.hasType(node, 'baz')); // true -``` - -### [.firstOfType](index.js#L519) - -Returns the first node from `node.nodes` of the given `type` - -**Params** - -* `nodes` **{Array}** -* `type` **{String}** -* `returns` **{Object|undefined}**: Returns the first matching node or undefined. - -**Example** - -```js -var node = new Node({ - type: 'foo', - nodes: [ - new Node({type: 'text', val: 'abc'}), - new Node({type: 'text', val: 'xyz'}) - ] -}); - -var textNode = utils.firstOfType(node.nodes, 'text'); -console.log(textNode.val); -//=> 'abc' -``` - -### [.findNode](index.js#L556) - -Returns the node at the specified index, or the first node of the given `type` from `node.nodes`. - -**Params** - -* `nodes` **{Array}** -* `type` **{String|Number}**: Node type or index. -* `returns` **{Object}**: Returns a node or undefined. - -**Example** - -```js -var node = new Node({ - type: 'foo', - nodes: [ - new Node({type: 'text', val: 'abc'}), - new Node({type: 'text', val: 'xyz'}) - ] -}); - -var nodeOne = utils.findNode(node.nodes, 'text'); -console.log(nodeOne.val); -//=> 'abc' - -var nodeTwo = utils.findNode(node.nodes, 1); -console.log(nodeTwo.val); -//=> 'xyz' -``` - -### [.isOpen](index.js#L584) - -Returns true if the given node is an "*.open" node. - -**Params** - -* `node` **{Object}**: Instance of [snapdragon-node](https://github.com/jonschlinkert/snapdragon-node) -* `returns` **{Boolean}** - -**Example** - -```js -var Node = require('snapdragon-node'); -var brace = new Node({type: 'brace'}); -var open = new Node({type: 'brace.open'}); -var close = new Node({type: 'brace.close'}); - -console.log(utils.isOpen(brace)); // false -console.log(utils.isOpen(open)); // true -console.log(utils.isOpen(close)); // false -``` - -### [.isClose](index.js#L607) - -Returns true if the given node is a "*.close" node. - -**Params** - -* `node` **{Object}**: Instance of [snapdragon-node](https://github.com/jonschlinkert/snapdragon-node) -* `returns` **{Boolean}** - -**Example** - -```js -var Node = require('snapdragon-node'); -var brace = new Node({type: 'brace'}); -var open = new Node({type: 'brace.open'}); -var close = new Node({type: 'brace.close'}); - -console.log(utils.isClose(brace)); // false -console.log(utils.isClose(open)); // false -console.log(utils.isClose(close)); // true -``` - -### [.hasOpen](index.js#L633) - -Returns true if `node.nodes` **has** an `.open` node - -**Params** - -* `node` **{Object}**: Instance of [snapdragon-node](https://github.com/jonschlinkert/snapdragon-node) -* `returns` **{Boolean}** - -**Example** - -```js -var Node = require('snapdragon-node'); -var brace = new Node({ - type: 'brace', - nodes: [] -}); - -var open = new Node({type: 'brace.open'}); -console.log(utils.hasOpen(brace)); // false - -brace.pushNode(open); -console.log(utils.hasOpen(brace)); // true -``` - -### [.hasClose](index.js#L663) - -Returns true if `node.nodes` **has** a `.close` node - -**Params** - -* `node` **{Object}**: Instance of [snapdragon-node](https://github.com/jonschlinkert/snapdragon-node) -* `returns` **{Boolean}** - -**Example** - -```js -var Node = require('snapdragon-node'); -var brace = new Node({ - type: 'brace', - nodes: [] -}); - -var close = new Node({type: 'brace.close'}); -console.log(utils.hasClose(brace)); // false - -brace.pushNode(close); -console.log(utils.hasClose(brace)); // true -``` - -### [.hasOpenAndClose](index.js#L697) - -Returns true if `node.nodes` has both `.open` and `.close` nodes - -**Params** - -* `node` **{Object}**: Instance of [snapdragon-node](https://github.com/jonschlinkert/snapdragon-node) -* `returns` **{Boolean}** - -**Example** - -```js -var Node = require('snapdragon-node'); -var brace = new Node({ - type: 'brace', - nodes: [] -}); - -var open = new Node({type: 'brace.open'}); -var close = new Node({type: 'brace.close'}); -console.log(utils.hasOpen(brace)); // false -console.log(utils.hasClose(brace)); // false - -brace.pushNode(open); -brace.pushNode(close); -console.log(utils.hasOpen(brace)); // true -console.log(utils.hasClose(brace)); // true -``` - -### [.addType](index.js#L719) - -Push the given `node` onto the `state.inside` array for the given type. This array is used as a specialized "stack" for only the given `node.type`. - -**Params** - -* `state` **{Object}**: The `compiler.state` object or custom state object. -* `node` **{Object}**: Instance of [snapdragon-node](https://github.com/jonschlinkert/snapdragon-node) -* `returns` **{Array}**: Returns the `state.inside` stack for the given type. - -**Example** - -```js -var state = { inside: {}}; -var node = new Node({type: 'brace'}); -utils.addType(state, node); -console.log(state.inside); -//=> { brace: [{type: 'brace'}] } -``` - -### [.removeType](index.js#L759) - -Remove the given `node` from the `state.inside` array for the given type. This array is used as a specialized "stack" for only the given `node.type`. - -**Params** - -* `state` **{Object}**: The `compiler.state` object or custom state object. -* `node` **{Object}**: Instance of [snapdragon-node](https://github.com/jonschlinkert/snapdragon-node) -* `returns` **{Array}**: Returns the `state.inside` stack for the given type. - -**Example** - -```js -var state = { inside: {}}; -var node = new Node({type: 'brace'}); -utils.addType(state, node); -console.log(state.inside); -//=> { brace: [{type: 'brace'}] } -utils.removeType(state, node); -//=> { brace: [] } -``` - -### [.isEmpty](index.js#L788) - -Returns true if `node.val` is an empty string, or `node.nodes` does not contain any non-empty text nodes. - -**Params** - -* `node` **{Object}**: Instance of [snapdragon-node](https://github.com/jonschlinkert/snapdragon-node) -* `fn` **{Function}** -* `returns` **{Boolean}** - -**Example** - -```js -var node = new Node({type: 'text'}); -utils.isEmpty(node); //=> true -node.val = 'foo'; -utils.isEmpty(node); //=> false -``` - -### [.isInsideType](index.js#L833) - -Returns true if the `state.inside` stack for the given type exists and has one or more nodes on it. - -**Params** - -* `state` **{Object}** -* `type` **{String}** -* `returns` **{Boolean}** - -**Example** - -```js -var state = { inside: {}}; -var node = new Node({type: 'brace'}); -console.log(utils.isInsideType(state, 'brace')); //=> false -utils.addType(state, node); -console.log(utils.isInsideType(state, 'brace')); //=> true -utils.removeType(state, node); -console.log(utils.isInsideType(state, 'brace')); //=> false -``` - -### [.isInside](index.js#L867) - -Returns true if `node` is either a child or grand-child of the given `type`, or `state.inside[type]` is a non-empty array. - -**Params** - -* `state` **{Object}**: Either the `compiler.state` object, if it exists, or a user-supplied state object. -* `node` **{Object}**: Instance of [snapdragon-node](https://github.com/jonschlinkert/snapdragon-node) -* `type` **{String}**: The `node.type` to check for. -* `returns` **{Boolean}** - -**Example** - -```js -var state = { inside: {}}; -var node = new Node({type: 'brace'}); -var open = new Node({type: 'brace.open'}); -console.log(utils.isInside(state, open, 'brace')); //=> false -utils.pushNode(node, open); -console.log(utils.isInside(state, open, 'brace')); //=> true -``` - -### [.last](index.js#L915) - -Get the last `n` element from the given `array`. Used for getting -a node from `node.nodes.` - -**Params** - -* `array` **{Array}** -* `n` **{Number}** -* `returns` **{undefined}** - -### [.arrayify](index.js#L935) - -Cast the given `val` to an array. - -**Params** - -* `val` **{any}** -* `returns` **{Array}** - -**Example** - -```js -console.log(utils.arraify('')); -//=> [] -console.log(utils.arraify('foo')); -//=> ['foo'] -console.log(utils.arraify(['foo'])); -//=> ['foo'] -``` - -### [.stringify](index.js#L948) - -Convert the given `val` to a string by joining with `,`. Useful -for creating a cheerio/CSS/DOM-style selector from a list of strings. - -**Params** - -* `val` **{any}** -* `returns` **{Array}** - -### [.trim](index.js#L961) - -Ensure that the given value is a string and call `.trim()` on it, -or return an empty string. - -**Params** - -* `str` **{String}** -* `returns` **{String}** - -## Release history - -Changelog entries are classified using the following labels from [keep-a-changelog](https://github.com/olivierlacan/keep-a-changelog): - -* `added`: for new features -* `changed`: for changes in existing functionality -* `deprecated`: for once-stable features removed in upcoming releases -* `removed`: for deprecated features removed in this release -* `fixed`: for any bug fixes - -Custom labels used in this changelog: - -* `dependencies`: bumps dependencies -* `housekeeping`: code re-organization, minor edits, or other changes that don't fit in one of the other categories. - -### [3.0.0] - 2017-05-01 - -**Changed** - -* `.emit` was renamed to [.append](#append) -* `.addNode` was renamed to [.pushNode](#pushNode) -* `.getNode` was renamed to [.findNode](#findNode) -* `.isEmptyNodes` was renamed to [.isEmpty](#isEmpty): also now works with `node.nodes` and/or `node.val` - -**Added** - -* [.identity](#identity) -* [.removeNode](#removeNode) -* [.shiftNode](#shiftNode) -* [.popNode](#popNode) - -### [0.1.0] - -First release. - -## About - -### Contributing - -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). - -Please read the [contributing guide](.github/contributing.md) for advice on opening issues, pull requests, and coding standards. - -### 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 -``` - -### 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 -``` - -### Author - -**Jon Schlinkert** - -* [github/jonschlinkert](https://github.com/jonschlinkert) -* [twitter/jonschlinkert](https://twitter.com/jonschlinkert) - -### License - -Copyright © 2017, [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 May 01, 2017._ \ No newline at end of file diff --git a/node_modules/snapdragon-util/index.js b/node_modules/snapdragon-util/index.js deleted file mode 100644 index 68a030e..0000000 --- a/node_modules/snapdragon-util/index.js +++ /dev/null @@ -1,1019 +0,0 @@ -'use strict'; - -var typeOf = require('kind-of'); -var utils = module.exports; - -/** - * Returns true if the given value is a node. - * - * ```js - * var Node = require('snapdragon-node'); - * var node = new Node({type: 'foo'}); - * console.log(utils.isNode(node)); //=> true - * console.log(utils.isNode({})); //=> false - * ``` - * @param {Object} `node` Instance of [snapdragon-node][] - * @returns {Boolean} - * @api public - */ - -utils.isNode = function(node) { - return typeOf(node) === 'object' && node.isNode === true; -}; - -/** - * Emit an empty string for the given `node`. - * - * ```js - * // do nothing for beginning-of-string - * snapdragon.compiler.set('bos', utils.noop); - * ``` - * @param {Object} `node` Instance of [snapdragon-node][] - * @returns {undefined} - * @api public - */ - -utils.noop = function(node) { - append(this, '', node); -}; - -/** - * Appdend `node.val` to `compiler.output`, exactly as it was created - * by the parser. - * - * ```js - * snapdragon.compiler.set('text', utils.identity); - * ``` - * @param {Object} `node` Instance of [snapdragon-node][] - * @returns {undefined} - * @api public - */ - -utils.identity = function(node) { - append(this, node.val, node); -}; - -/** - * Previously named `.emit`, this method appends the given `val` - * to `compiler.output` for the given node. Useful when you know - * what value should be appended advance, regardless of the actual - * value of `node.val`. - * - * ```js - * snapdragon.compiler - * .set('i', function(node) { - * this.mapVisit(node); - * }) - * .set('i.open', utils.append('')) - * .set('i.close', utils.append('')) - * ``` - * @param {Object} `node` Instance of [snapdragon-node][] - * @returns {Function} Returns a compiler middleware function. - * @api public - */ - -utils.append = function(val) { - return function(node) { - append(this, val, node); - }; -}; - -/** - * Used in compiler middleware, this onverts an AST node into - * an empty `text` node and deletes `node.nodes` if it exists. - * The advantage of this method is that, as opposed to completely - * removing the node, indices will not need to be re-calculated - * in sibling nodes, and nothing is appended to the output. - * - * ```js - * utils.toNoop(node); - * // convert `node.nodes` to the given value instead of deleting it - * utils.toNoop(node, []); - * ``` - * @param {Object} `node` Instance of [snapdragon-node][] - * @param {Array} `nodes` Optionally pass a new `nodes` value, to replace the existing `node.nodes` array. - * @api public - */ - -utils.toNoop = function(node, nodes) { - if (nodes) { - node.nodes = nodes; - } else { - delete node.nodes; - node.type = 'text'; - node.val = ''; - } -}; - -/** - * Visit `node` with the given `fn`. The built-in `.visit` method in snapdragon - * automatically calls registered compilers, this allows you to pass a visitor - * function. - * - * ```js - * snapdragon.compiler.set('i', function(node) { - * utils.visit(node, function(childNode) { - * // do stuff with "childNode" - * return childNode; - * }); - * }); - * ``` - * @param {Object} `node` Instance of [snapdragon-node][] - * @param {Function} `fn` - * @return {Object} returns the node after recursively visiting all child nodes. - * @api public - */ - -utils.visit = function(node, fn) { - assert(utils.isNode(node), 'expected node to be an instance of Node'); - assert(isFunction(fn), 'expected a visitor function'); - fn(node); - return node.nodes ? utils.mapVisit(node, fn) : node; -}; - -/** - * Map [visit](#visit) the given `fn` over `node.nodes`. This is called by - * [visit](#visit), use this method if you do not want `fn` to be called on - * the first node. - * - * ```js - * snapdragon.compiler.set('i', function(node) { - * utils.mapVisit(node, function(childNode) { - * // do stuff with "childNode" - * return childNode; - * }); - * }); - * ``` - * @param {Object} `node` Instance of [snapdragon-node][] - * @param {Object} `options` - * @param {Function} `fn` - * @return {Object} returns the node - * @api public - */ - -utils.mapVisit = function(node, fn) { - assert(utils.isNode(node), 'expected node to be an instance of Node'); - assert(isArray(node.nodes), 'expected node.nodes to be an array'); - assert(isFunction(fn), 'expected a visitor function'); - - for (var i = 0; i < node.nodes.length; i++) { - utils.visit(node.nodes[i], fn); - } - return node; -}; - -/** - * Unshift an `*.open` node onto `node.nodes`. - * - * ```js - * var Node = require('snapdragon-node'); - * snapdragon.parser.set('brace', function(node) { - * var match = this.match(/^{/); - * if (match) { - * var parent = new Node({type: 'brace'}); - * utils.addOpen(parent, Node); - * console.log(parent.nodes[0]): - * // { type: 'brace.open', val: '' }; - * - * // push the parent "brace" node onto the stack - * this.push(parent); - * - * // return the parent node, so it's also added to the AST - * return brace; - * } - * }); - * ``` - * @param {Object} `node` Instance of [snapdragon-node][] - * @param {Function} `Node` (required) Node constructor function from [snapdragon-node][]. - * @param {Function} `filter` Optionaly specify a filter function to exclude the node. - * @return {Object} Returns the created opening node. - * @api public - */ - -utils.addOpen = function(node, Node, val, filter) { - assert(utils.isNode(node), 'expected node to be an instance of Node'); - assert(isFunction(Node), 'expected Node to be a constructor function'); - - if (typeof val === 'function') { - filter = val; - val = ''; - } - - if (typeof filter === 'function' && !filter(node)) return; - var open = new Node({ type: node.type + '.open', val: val}); - var unshift = node.unshift || node.unshiftNode; - if (typeof unshift === 'function') { - unshift.call(node, open); - } else { - utils.unshiftNode(node, open); - } - return open; -}; - -/** - * Push a `*.close` node onto `node.nodes`. - * - * ```js - * var Node = require('snapdragon-node'); - * snapdragon.parser.set('brace', function(node) { - * var match = this.match(/^}/); - * if (match) { - * var parent = this.parent(); - * if (parent.type !== 'brace') { - * throw new Error('missing opening: ' + '}'); - * } - * - * utils.addClose(parent, Node); - * console.log(parent.nodes[parent.nodes.length - 1]): - * // { type: 'brace.close', val: '' }; - * - * // no need to return a node, since the parent - * // was already added to the AST - * return; - * } - * }); - * ``` - * @param {Object} `node` Instance of [snapdragon-node][] - * @param {Function} `Node` (required) Node constructor function from [snapdragon-node][]. - * @param {Function} `filter` Optionaly specify a filter function to exclude the node. - * @return {Object} Returns the created closing node. - * @api public - */ - -utils.addClose = function(node, Node, val, filter) { - assert(utils.isNode(node), 'expected node to be an instance of Node'); - assert(isFunction(Node), 'expected Node to be a constructor function'); - - if (typeof val === 'function') { - filter = val; - val = ''; - } - - if (typeof filter === 'function' && !filter(node)) return; - var close = new Node({ type: node.type + '.close', val: val}); - var push = node.push || node.pushNode; - if (typeof push === 'function') { - push.call(node, close); - } else { - utils.pushNode(node, close); - } - return close; -}; - -/** - * Wraps the given `node` with `*.open` and `*.close` nodes. - * - * @param {Object} `node` Instance of [snapdragon-node][] - * @param {Function} `Node` (required) Node constructor function from [snapdragon-node][]. - * @param {Function} `filter` Optionaly specify a filter function to exclude the node. - * @return {Object} Returns the node - * @api public - */ - -utils.wrapNodes = function(node, Node, filter) { - assert(utils.isNode(node), 'expected node to be an instance of Node'); - assert(isFunction(Node), 'expected Node to be a constructor function'); - - utils.addOpen(node, Node, filter); - utils.addClose(node, Node, filter); - return node; -}; - -/** - * Push the given `node` onto `parent.nodes`, and set `parent` as `node.parent. - * - * ```js - * var parent = new Node({type: 'foo'}); - * var node = new Node({type: 'bar'}); - * utils.pushNode(parent, node); - * console.log(parent.nodes[0].type) // 'bar' - * console.log(node.parent.type) // 'foo' - * ``` - * @param {Object} `parent` - * @param {Object} `node` Instance of [snapdragon-node][] - * @return {Object} Returns the child node - * @api public - */ - -utils.pushNode = function(parent, node) { - assert(utils.isNode(parent), 'expected parent node to be an instance of Node'); - assert(utils.isNode(node), 'expected node to be an instance of Node'); - - node.define('parent', parent); - parent.nodes = parent.nodes || []; - parent.nodes.push(node); - return node; -}; - -/** - * Unshift `node` onto `parent.nodes`, and set `parent` as `node.parent. - * - * ```js - * var parent = new Node({type: 'foo'}); - * var node = new Node({type: 'bar'}); - * utils.unshiftNode(parent, node); - * console.log(parent.nodes[0].type) // 'bar' - * console.log(node.parent.type) // 'foo' - * ``` - * @param {Object} `parent` - * @param {Object} `node` Instance of [snapdragon-node][] - * @return {undefined} - * @api public - */ - -utils.unshiftNode = function(parent, node) { - assert(utils.isNode(parent), 'expected parent node to be an instance of Node'); - assert(utils.isNode(node), 'expected node to be an instance of Node'); - - node.define('parent', parent); - parent.nodes = parent.nodes || []; - parent.nodes.unshift(node); -}; - -/** - * Pop the last `node` off of `parent.nodes`. The advantage of - * using this method is that it checks for `node.nodes` and works - * with any version of `snapdragon-node`. - * - * ```js - * var parent = new Node({type: 'foo'}); - * utils.pushNode(parent, new Node({type: 'foo'})); - * utils.pushNode(parent, new Node({type: 'bar'})); - * utils.pushNode(parent, new Node({type: 'baz'})); - * console.log(parent.nodes.length); //=> 3 - * utils.popNode(parent); - * console.log(parent.nodes.length); //=> 2 - * ``` - * @param {Object} `parent` - * @param {Object} `node` Instance of [snapdragon-node][] - * @return {Number|Undefined} Returns the length of `node.nodes` or undefined. - * @api public - */ - -utils.popNode = function(node) { - assert(utils.isNode(node), 'expected node to be an instance of Node'); - if (typeof node.pop === 'function') { - return node.pop(); - } - return node.nodes && node.nodes.pop(); -}; - -/** - * Shift the first `node` off of `parent.nodes`. The advantage of - * using this method is that it checks for `node.nodes` and works - * with any version of `snapdragon-node`. - * - * ```js - * var parent = new Node({type: 'foo'}); - * utils.pushNode(parent, new Node({type: 'foo'})); - * utils.pushNode(parent, new Node({type: 'bar'})); - * utils.pushNode(parent, new Node({type: 'baz'})); - * console.log(parent.nodes.length); //=> 3 - * utils.shiftNode(parent); - * console.log(parent.nodes.length); //=> 2 - * ``` - * @param {Object} `parent` - * @param {Object} `node` Instance of [snapdragon-node][] - * @return {Number|Undefined} Returns the length of `node.nodes` or undefined. - * @api public - */ - -utils.shiftNode = function(node) { - assert(utils.isNode(node), 'expected node to be an instance of Node'); - if (typeof node.shift === 'function') { - return node.shift(); - } - return node.nodes && node.nodes.shift(); -}; - -/** - * Remove the specified `node` from `parent.nodes`. - * - * ```js - * var parent = new Node({type: 'abc'}); - * var foo = new Node({type: 'foo'}); - * utils.pushNode(parent, foo); - * utils.pushNode(parent, new Node({type: 'bar'})); - * utils.pushNode(parent, new Node({type: 'baz'})); - * console.log(parent.nodes.length); //=> 3 - * utils.removeNode(parent, foo); - * console.log(parent.nodes.length); //=> 2 - * ``` - * @param {Object} `parent` - * @param {Object} `node` Instance of [snapdragon-node][] - * @return {Object|undefined} Returns the removed node, if successful, or undefined if it does not exist on `parent.nodes`. - * @api public - */ - -utils.removeNode = function(parent, node) { - assert(utils.isNode(parent), 'expected parent.node to be an instance of Node'); - assert(utils.isNode(node), 'expected node to be an instance of Node'); - - if (!parent.nodes) { - return null; - } - - if (typeof parent.remove === 'function') { - return parent.remove(node); - } - - var idx = parent.nodes.indexOf(node); - if (idx !== -1) { - return parent.nodes.splice(idx, 1); - } -}; - -/** - * Returns true if `node.type` matches the given `type`. Throws a - * `TypeError` if `node` is not an instance of `Node`. - * - * ```js - * var Node = require('snapdragon-node'); - * var node = new Node({type: 'foo'}); - * console.log(utils.isType(node, 'foo')); // false - * console.log(utils.isType(node, 'bar')); // true - * ``` - * @param {Object} `node` Instance of [snapdragon-node][] - * @param {String} `type` - * @return {Boolean} - * @api public - */ - -utils.isType = function(node, type) { - assert(utils.isNode(node), 'expected node to be an instance of Node'); - switch (typeOf(type)) { - case 'array': - var types = type.slice(); - for (var i = 0; i < types.length; i++) { - if (utils.isType(node, types[i])) { - return true; - } - } - return false; - case 'string': - return node.type === type; - case 'regexp': - return type.test(node.type); - default: { - throw new TypeError('expected "type" to be an array, string or regexp'); - } - } -}; - -/** - * Returns true if the given `node` has the given `type` in `node.nodes`. - * Throws a `TypeError` if `node` is not an instance of `Node`. - * - * ```js - * var Node = require('snapdragon-node'); - * var node = new Node({ - * type: 'foo', - * nodes: [ - * new Node({type: 'bar'}), - * new Node({type: 'baz'}) - * ] - * }); - * console.log(utils.hasType(node, 'xyz')); // false - * console.log(utils.hasType(node, 'baz')); // true - * ``` - * @param {Object} `node` Instance of [snapdragon-node][] - * @param {String} `type` - * @return {Boolean} - * @api public - */ - -utils.hasType = function(node, type) { - assert(utils.isNode(node), 'expected node to be an instance of Node'); - if (!Array.isArray(node.nodes)) return false; - for (var i = 0; i < node.nodes.length; i++) { - if (utils.isType(node.nodes[i], type)) { - return true; - } - } - return false; -}; - -/** - * Returns the first node from `node.nodes` of the given `type` - * - * ```js - * var node = new Node({ - * type: 'foo', - * nodes: [ - * new Node({type: 'text', val: 'abc'}), - * new Node({type: 'text', val: 'xyz'}) - * ] - * }); - * - * var textNode = utils.firstOfType(node.nodes, 'text'); - * console.log(textNode.val); - * //=> 'abc' - * ``` - * @param {Array} `nodes` - * @param {String} `type` - * @return {Object|undefined} Returns the first matching node or undefined. - * @api public - */ - -utils.firstOfType = function(nodes, type) { - for (var i = 0; i < nodes.length; i++) { - var node = nodes[i]; - if (utils.isType(node, type)) { - return node; - } - } -}; - -/** - * Returns the node at the specified index, or the first node of the - * given `type` from `node.nodes`. - * - * ```js - * var node = new Node({ - * type: 'foo', - * nodes: [ - * new Node({type: 'text', val: 'abc'}), - * new Node({type: 'text', val: 'xyz'}) - * ] - * }); - * - * var nodeOne = utils.findNode(node.nodes, 'text'); - * console.log(nodeOne.val); - * //=> 'abc' - * - * var nodeTwo = utils.findNode(node.nodes, 1); - * console.log(nodeTwo.val); - * //=> 'xyz' - * ``` - * - * @param {Array} `nodes` - * @param {String|Number} `type` Node type or index. - * @return {Object} Returns a node or undefined. - * @api public - */ - -utils.findNode = function(nodes, type) { - if (!Array.isArray(nodes)) { - return null; - } - if (typeof type === 'number') { - return nodes[type]; - } - return utils.firstOfType(nodes, type); -}; - -/** - * Returns true if the given node is an "*.open" node. - * - * ```js - * var Node = require('snapdragon-node'); - * var brace = new Node({type: 'brace'}); - * var open = new Node({type: 'brace.open'}); - * var close = new Node({type: 'brace.close'}); - * - * console.log(utils.isOpen(brace)); // false - * console.log(utils.isOpen(open)); // true - * console.log(utils.isOpen(close)); // false - * ``` - * @param {Object} `node` Instance of [snapdragon-node][] - * @return {Boolean} - * @api public - */ - -utils.isOpen = function(node) { - assert(utils.isNode(node), 'expected node to be an instance of Node'); - return node.type.slice(-5) === '.open'; -}; - -/** - * Returns true if the given node is a "*.close" node. - * - * ```js - * var Node = require('snapdragon-node'); - * var brace = new Node({type: 'brace'}); - * var open = new Node({type: 'brace.open'}); - * var close = new Node({type: 'brace.close'}); - * - * console.log(utils.isClose(brace)); // false - * console.log(utils.isClose(open)); // false - * console.log(utils.isClose(close)); // true - * ``` - * @param {Object} `node` Instance of [snapdragon-node][] - * @return {Boolean} - * @api public - */ - -utils.isClose = function(node) { - assert(utils.isNode(node), 'expected node to be an instance of Node'); - return node.type.slice(-6) === '.close'; -}; - -/** - * Returns true if `node.nodes` **has** an `.open` node - * - * ```js - * var Node = require('snapdragon-node'); - * var brace = new Node({ - * type: 'brace', - * nodes: [] - * }); - * - * var open = new Node({type: 'brace.open'}); - * console.log(utils.hasOpen(brace)); // false - * - * brace.pushNode(open); - * console.log(utils.hasOpen(brace)); // true - * ``` - * @param {Object} `node` Instance of [snapdragon-node][] - * @return {Boolean} - * @api public - */ - -utils.hasOpen = function(node) { - assert(utils.isNode(node), 'expected node to be an instance of Node'); - var first = node.first || node.nodes ? node.nodes[0] : null; - if (utils.isNode(first)) { - return first.type === node.type + '.open'; - } - return false; -}; - -/** - * Returns true if `node.nodes` **has** a `.close` node - * - * ```js - * var Node = require('snapdragon-node'); - * var brace = new Node({ - * type: 'brace', - * nodes: [] - * }); - * - * var close = new Node({type: 'brace.close'}); - * console.log(utils.hasClose(brace)); // false - * - * brace.pushNode(close); - * console.log(utils.hasClose(brace)); // true - * ``` - * @param {Object} `node` Instance of [snapdragon-node][] - * @return {Boolean} - * @api public - */ - -utils.hasClose = function(node) { - assert(utils.isNode(node), 'expected node to be an instance of Node'); - var last = node.last || node.nodes ? node.nodes[node.nodes.length - 1] : null; - if (utils.isNode(last)) { - return last.type === node.type + '.close'; - } - return false; -}; - -/** - * Returns true if `node.nodes` has both `.open` and `.close` nodes - * - * ```js - * var Node = require('snapdragon-node'); - * var brace = new Node({ - * type: 'brace', - * nodes: [] - * }); - * - * var open = new Node({type: 'brace.open'}); - * var close = new Node({type: 'brace.close'}); - * console.log(utils.hasOpen(brace)); // false - * console.log(utils.hasClose(brace)); // false - * - * brace.pushNode(open); - * brace.pushNode(close); - * console.log(utils.hasOpen(brace)); // true - * console.log(utils.hasClose(brace)); // true - * ``` - * @param {Object} `node` Instance of [snapdragon-node][] - * @return {Boolean} - * @api public - */ - -utils.hasOpenAndClose = function(node) { - return utils.hasOpen(node) && utils.hasClose(node); -}; - -/** - * Push the given `node` onto the `state.inside` array for the - * given type. This array is used as a specialized "stack" for - * only the given `node.type`. - * - * ```js - * var state = { inside: {}}; - * var node = new Node({type: 'brace'}); - * utils.addType(state, node); - * console.log(state.inside); - * //=> { brace: [{type: 'brace'}] } - * ``` - * @param {Object} `state` The `compiler.state` object or custom state object. - * @param {Object} `node` Instance of [snapdragon-node][] - * @return {Array} Returns the `state.inside` stack for the given type. - * @api public - */ - -utils.addType = function(state, node) { - assert(utils.isNode(node), 'expected node to be an instance of Node'); - assert(isObject(state), 'expected state to be an object'); - - var type = node.parent - ? node.parent.type - : node.type.replace(/\.open$/, ''); - - if (!state.hasOwnProperty('inside')) { - state.inside = {}; - } - if (!state.inside.hasOwnProperty(type)) { - state.inside[type] = []; - } - - var arr = state.inside[type]; - arr.push(node); - return arr; -}; - -/** - * Remove the given `node` from the `state.inside` array for the - * given type. This array is used as a specialized "stack" for - * only the given `node.type`. - * - * ```js - * var state = { inside: {}}; - * var node = new Node({type: 'brace'}); - * utils.addType(state, node); - * console.log(state.inside); - * //=> { brace: [{type: 'brace'}] } - * utils.removeType(state, node); - * //=> { brace: [] } - * ``` - * @param {Object} `state` The `compiler.state` object or custom state object. - * @param {Object} `node` Instance of [snapdragon-node][] - * @return {Array} Returns the `state.inside` stack for the given type. - * @api public - */ - -utils.removeType = function(state, node) { - assert(utils.isNode(node), 'expected node to be an instance of Node'); - assert(isObject(state), 'expected state to be an object'); - - var type = node.parent - ? node.parent.type - : node.type.replace(/\.close$/, ''); - - if (state.inside.hasOwnProperty(type)) { - return state.inside[type].pop(); - } -}; - -/** - * Returns true if `node.val` is an empty string, or `node.nodes` does - * not contain any non-empty text nodes. - * - * ```js - * var node = new Node({type: 'text'}); - * utils.isEmpty(node); //=> true - * node.val = 'foo'; - * utils.isEmpty(node); //=> false - * ``` - * @param {Object} `node` Instance of [snapdragon-node][] - * @param {Function} `fn` - * @return {Boolean} - * @api public - */ - -utils.isEmpty = function(node, fn) { - assert(utils.isNode(node), 'expected node to be an instance of Node'); - - if (!Array.isArray(node.nodes)) { - if (node.type !== 'text') { - return true; - } - if (typeof fn === 'function') { - return fn(node, node.parent); - } - return !utils.trim(node.val); - } - - for (var i = 0; i < node.nodes.length; i++) { - var child = node.nodes[i]; - if (utils.isOpen(child) || utils.isClose(child)) { - continue; - } - if (!utils.isEmpty(child, fn)) { - return false; - } - } - - return true; -}; - -/** - * Returns true if the `state.inside` stack for the given type exists - * and has one or more nodes on it. - * - * ```js - * var state = { inside: {}}; - * var node = new Node({type: 'brace'}); - * console.log(utils.isInsideType(state, 'brace')); //=> false - * utils.addType(state, node); - * console.log(utils.isInsideType(state, 'brace')); //=> true - * utils.removeType(state, node); - * console.log(utils.isInsideType(state, 'brace')); //=> false - * ``` - * @param {Object} `state` - * @param {String} `type` - * @return {Boolean} - * @api public - */ - -utils.isInsideType = function(state, type) { - assert(isObject(state), 'expected state to be an object'); - assert(isString(type), 'expected type to be a string'); - - if (!state.hasOwnProperty('inside')) { - return false; - } - - if (!state.inside.hasOwnProperty(type)) { - return false; - } - - return state.inside[type].length > 0; -}; - -/** - * Returns true if `node` is either a child or grand-child of the given `type`, - * or `state.inside[type]` is a non-empty array. - * - * ```js - * var state = { inside: {}}; - * var node = new Node({type: 'brace'}); - * var open = new Node({type: 'brace.open'}); - * console.log(utils.isInside(state, open, 'brace')); //=> false - * utils.pushNode(node, open); - * console.log(utils.isInside(state, open, 'brace')); //=> true - * ``` - * @param {Object} `state` Either the `compiler.state` object, if it exists, or a user-supplied state object. - * @param {Object} `node` Instance of [snapdragon-node][] - * @param {String} `type` The `node.type` to check for. - * @return {Boolean} - * @api public - */ - -utils.isInside = function(state, node, type) { - assert(utils.isNode(node), 'expected node to be an instance of Node'); - assert(isObject(state), 'expected state to be an object'); - - if (Array.isArray(type)) { - for (var i = 0; i < type.length; i++) { - if (utils.isInside(state, node, type[i])) { - return true; - } - } - return false; - } - - var parent = node.parent; - if (typeof type === 'string') { - return (parent && parent.type === type) || utils.isInsideType(state, type); - } - - if (typeOf(type) === 'regexp') { - if (parent && parent.type && type.test(parent.type)) { - return true; - } - - var keys = Object.keys(state.inside); - var len = keys.length; - var idx = -1; - while (++idx < len) { - var key = keys[idx]; - var val = state.inside[key]; - - if (Array.isArray(val) && val.length !== 0 && type.test(key)) { - return true; - } - } - } - return false; -}; - -/** - * Get the last `n` element from the given `array`. Used for getting - * a node from `node.nodes.` - * - * @param {Array} `array` - * @param {Number} `n` - * @return {undefined} - * @api public - */ - -utils.last = function(arr, n) { - return arr[arr.length - (n || 1)]; -}; - -/** - * Cast the given `val` to an array. - * - * ```js - * console.log(utils.arrayify('')); - * //=> [] - * console.log(utils.arrayify('foo')); - * //=> ['foo'] - * console.log(utils.arrayify(['foo'])); - * //=> ['foo'] - * ``` - * @param {any} `val` - * @return {Array} - * @api public - */ - -utils.arrayify = function(val) { - if (typeof val === 'string' && val !== '') { - return [val]; - } - if (!Array.isArray(val)) { - return []; - } - return val; -}; - -/** - * Convert the given `val` to a string by joining with `,`. Useful - * for creating a cheerio/CSS/DOM-style selector from a list of strings. - * - * @param {any} `val` - * @return {Array} - * @api public - */ - -utils.stringify = function(val) { - return utils.arrayify(val).join(','); -}; - -/** - * Ensure that the given value is a string and call `.trim()` on it, - * or return an empty string. - * - * @param {String} `str` - * @return {String} - * @api public - */ - -utils.trim = function(str) { - return typeof str === 'string' ? str.trim() : ''; -}; - -/** - * Return true if val is an object - */ - -function isObject(val) { - return typeOf(val) === 'object'; -} - -/** - * Return true if val is a string - */ - -function isString(val) { - return typeof val === 'string'; -} - -/** - * Return true if val is a function - */ - -function isFunction(val) { - return typeof val === 'function'; -} - -/** - * Return true if val is an array - */ - -function isArray(val) { - return Array.isArray(val); -} - -/** - * Shim to ensure the `.append` methods work with any version of snapdragon - */ - -function append(compiler, val, node) { - if (typeof compiler.append !== 'function') { - return compiler.emit(val, node); - } - return compiler.append(val, node); -} - -/** - * Simplified assertion. Throws an error is `val` is falsey. - */ - -function assert(val, message) { - if (!val) throw new Error(message); -} diff --git a/node_modules/snapdragon-util/package.json b/node_modules/snapdragon-util/package.json deleted file mode 100644 index 434c4f5..0000000 --- a/node_modules/snapdragon-util/package.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "name": "snapdragon-util", - "description": "Utilities for the snapdragon parser/compiler.", - "version": "3.0.1", - "homepage": "https://github.com/jonschlinkert/snapdragon-util", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "repository": "jonschlinkert/snapdragon-util", - "bugs": { - "url": "https://github.com/jonschlinkert/snapdragon-util/issues" - }, - "license": "MIT", - "files": [ - "index.js" - ], - "main": "index.js", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "dependencies": { - "kind-of": "^3.2.0" - }, - "devDependencies": { - "define-property": "^1.0.0", - "gulp": "^3.9.1", - "gulp-eslint": "^3.0.1", - "gulp-format-md": "^0.1.12", - "gulp-istanbul": "^1.1.1", - "gulp-mocha": "^3.0.0", - "isobject": "^3.0.0", - "mocha": "^3.3.0", - "snapdragon": "^0.11.0", - "snapdragon-node": "^1.0.6" - }, - "keywords": [ - "capture", - "compile", - "compiler", - "convert", - "match", - "parse", - "parser", - "plugin", - "render", - "snapdragon", - "snapdragonplugin", - "transform", - "util" - ], - "verb": { - "toc": "collapsible", - "layout": "default", - "tasks": [ - "readme" - ], - "plugins": [ - "gulp-format-md" - ], - "lint": { - "reflinks": true - } - } -} diff --git a/node_modules/snapdragon/LICENSE b/node_modules/snapdragon/LICENSE deleted file mode 100644 index 1e49edf..0000000 --- a/node_modules/snapdragon/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015-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/snapdragon/README.md b/node_modules/snapdragon/README.md deleted file mode 100644 index 4006e10..0000000 --- a/node_modules/snapdragon/README.md +++ /dev/null @@ -1,321 +0,0 @@ -# snapdragon [![NPM version](https://img.shields.io/npm/v/snapdragon.svg?style=flat)](https://www.npmjs.com/package/snapdragon) [![NPM downloads](https://img.shields.io/npm/dm/snapdragon.svg?style=flat)](https://npmjs.org/package/snapdragon) [![Build Status](https://img.shields.io/travis/jonschlinkert/snapdragon.svg?style=flat)](https://travis-ci.org/jonschlinkert/snapdragon) - -> Fast, pluggable and easy-to-use parser-renderer factory. - -## Install - -Install with [npm](https://www.npmjs.com/): - -```sh -$ npm install --save snapdragon -``` - -Created by [jonschlinkert](https://github.com/jonschlinkert) and [doowb](https://github.com/doowb). - -**Features** - -* Bootstrap your own parser, get sourcemap support for free -* All parsing and compiling is handled by simple, reusable middleware functions -* Inspired by the parsers in [pug](http://jade-lang.com) and [css](https://github.com/reworkcss/css). - -## History - -### v0.5.0 - -**Breaking changes** - -Substantial breaking changes were made in v0.5.0! Most of these changes are part of a larger refactor that will be finished in 0.6.0, including the introduction of a `Lexer` class. - -* Renderer was renamed to `Compiler` -* the `.render` method was renamed to `.compile` -* Many other smaller changes. A more detailed overview will be provided in 0.6.0. If you don't have to time review code, I recommend you wait for the 0.6.0 release. - -## Usage examples - -```js -var Snapdragon = require('snapdragon'); -var snapdragon = new Snapdragon(); -``` - -**Parse** - -```js -var ast = snapdragon.parser('some string', options) - // parser middleware that can be called by other middleware - .set('foo', function () {}) - // parser middleware, runs immediately in the order defined - .use(bar()) - .use(baz()) -``` - -**Render** - -```js -// pass the `ast` from the parse method -var res = snapdragon.compiler(ast) - // compiler middleware, called when the name of the middleware - // matches the `node.type` (defined in a parser middleware) - .set('bar', function () {}) - .set('baz', function () {}) - .compile() -``` - -See the [examples](./examples/). - -## Getting started - -**Parsers** - -Parsers are middleware functions used for parsing a string into an ast node. - -```js -var ast = snapdragon.parser(str, options) - .use(function() { - var pos = this.position(); - var m = this.match(/^\./); - if (!m) return; - return pos({ - // `type` specifies the compiler to use - type: 'dot', - val: m[0] - }); - }) -``` - -**AST node** - -When the parser finds a match, `pos()` is called, pushing a token for that node onto the ast that looks something like: - -```js -{ type: 'dot', - val: '.', - position: - { start: { lineno: 1, column: 1 }, - end: { lineno: 1, column: 2 } }} -``` - -**Renderers** - -Renderers are _named_ middleware functions that visit over an array of ast nodes to compile a string. - -```js -var res = snapdragon.compiler(ast) - .set('dot', function (node) { - console.log(node.val) - //=> '.' - return this.emit(node.val); - }) -``` - -**Source maps** - -If you want source map support, make sure to emit the position as well. - -```js -var res = snapdragon.compiler(ast) - .set('dot', function (node) { - return this.emit(node.val, node.position); - }) -``` - -## Docs - -### Parser middleware - -A parser middleware is a function that returns an abject called a `token`. This token is pushed onto the AST as a node. - -**Example token** - -```js -{ type: 'dot', - val: '.', - position: - { start: { lineno: 1, column: 1 }, - end: { lineno: 1, column: 2 } }} -``` - -**Example parser middleware** - -Match a single `.` in a string: - -1. Get the starting position by calling `this.position()` -2. pass a regex for matching a single dot to the `.match` method -3. if **no match** is found, return `undefined` -4. if a **match** is found, `pos()` is called, which returns a token with: - - `type`: the name of the [compiler] to use - - `val`: The actual value captured by the regex. In this case, a `.`. Note that you can capture and return whatever will be needed by the corresponding [compiler]. - - The ending position: automatically calculated by adding the length of the first capture group to the starting position. - -## Renderer middleware - -Renderers are run when the name of the compiler middleware matches the `type` defined on an ast `node` (which is defined in a parser). - -**Example** - -Exercise: Parse a dot, then compile it as an escaped dot. - -```js -var ast = snapdragon.parser('.') - .use(function () { - var pos = this.position(); - var m = this.match(/^\./); - if (!m) return; - return pos({ - // define the `type` of compiler to use - type: 'dot', - val: m[0] - }) - }) - -var result = snapdragon.compiler(ast) - .set('dot', function (node) { - return this.emit('\\' + node.val); - }) - .compile() - -console.log(result.output); -//=> '\.' -``` - -## API - -### [Parser](lib/parser.js#L19) - -Create a new `Parser` with the given `input` and `options`. - -**Params** - -* `input` **{String}** -* `options` **{Object}** - -### [.define](lib/parser.js#L103) - -Define a non-enumberable property on the `Parser` instance. - -**Example** - -```js -parser.define('foo', 'bar'); -``` - -**Params** - -* `key` **{String}**: propery name -* `val` **{any}**: property value -* `returns` **{Object}**: Returns the Parser instance for chaining. - -Set parser `name` with the given `fn` - -**Params** - -* `name` **{String}** -* `fn` **{Function}** - -Get parser `name` - -**Params** - -* `name` **{String}** - -Push a `token` onto the `type` stack. - -**Params** - -* `type` **{String}** -* `returns` **{Object}** `token` - -Pop a token off of the `type` stack - -**Params** - -* `type` **{String}** -* `returns` **{Object}**: Returns a token - -Return true if inside a `stack` node. Types are `braces`, `parens` or `brackets`. - -**Params** - -* `type` **{String}** -* `returns` **{Boolean}** - -**Example** - -```js -parser.isType(node, 'brace'); -``` - -**Params** - -* `node` **{Object}** -* `type` **{String}** -* `returns` **{Boolean}** - -### [.define](lib/compiler.js#L71) - -Define a non-enumberable property on the `Compiler` instance. - -**Example** - -```js -compiler.define('foo', 'bar'); -``` - -**Params** - -* `key` **{String}**: propery name -* `val` **{any}**: property value -* `returns` **{Object}**: Returns the Compiler instance for chaining. - -## About - -### Related projects - -* [braces](https://www.npmjs.com/package/braces): Fastest brace expansion for node.js, with the most complete support for the Bash 4.3 braces… [more](https://github.com/jonschlinkert/braces) | [homepage](https://github.com/jonschlinkert/braces "Fastest brace expansion for node.js, with the most complete support for the Bash 4.3 braces specification.") -* [expand-brackets](https://www.npmjs.com/package/expand-brackets): Expand POSIX bracket expressions (character classes) in glob patterns. | [homepage](https://github.com/jonschlinkert/expand-brackets "Expand POSIX bracket expressions (character classes) in glob patterns.") -* [extglob](https://www.npmjs.com/package/extglob): Convert extended globs to regex-compatible strings. Add (almost) the expressive power of regular expressions to… [more](https://github.com/jonschlinkert/extglob) | [homepage](https://github.com/jonschlinkert/extglob "Convert extended globs to regex-compatible strings. Add (almost) the expressive power of regular expressions to glob patterns.") -* [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). - -### Contributors - -| **Commits** | **Contributor**
    | -| --- | --- | -| 106 | [jonschlinkert](https://github.com/jonschlinkert) | -| 2 | [doowb](https://github.com/doowb) | - -### 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/snapdragon/blob/master/LICENSE). - -*** - -_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.1.31, on October 10, 2016._ \ No newline at end of file diff --git a/node_modules/snapdragon/index.js b/node_modules/snapdragon/index.js deleted file mode 100644 index 235b464..0000000 --- a/node_modules/snapdragon/index.js +++ /dev/null @@ -1,174 +0,0 @@ -'use strict'; - -var Base = require('base'); -var define = require('define-property'); -var Compiler = require('./lib/compiler'); -var Parser = require('./lib/parser'); -var utils = require('./lib/utils'); -var regexCache = {}; -var cache = {}; - -/** - * Create a new instance of `Snapdragon` with the given `options`. - * - * ```js - * var snapdragon = new Snapdragon(); - * ``` - * - * @param {Object} `options` - * @api public - */ - -function Snapdragon(options) { - Base.call(this, null, options); - this.options = utils.extend({source: 'string'}, this.options); - this.compiler = new Compiler(this.options); - this.parser = new Parser(this.options); - - Object.defineProperty(this, 'compilers', { - get: function() { - return this.compiler.compilers; - } - }); - - Object.defineProperty(this, 'parsers', { - get: function() { - return this.parser.parsers; - } - }); - - Object.defineProperty(this, 'regex', { - get: function() { - return this.parser.regex; - } - }); -} - -/** - * Inherit Base - */ - -Base.extend(Snapdragon); - -/** - * Add a parser to `snapdragon.parsers` for capturing the given `type` using - * the specified regex or parser function. A function is useful if you need - * to customize how the token is created and/or have access to the parser - * instance to check options, etc. - * - * ```js - * snapdragon - * .capture('slash', /^\//) - * .capture('dot', function() { - * var pos = this.position(); - * var m = this.match(/^\./); - * if (!m) return; - * return pos({ - * type: 'dot', - * val: m[0] - * }); - * }); - * ``` - * @param {String} `type` - * @param {RegExp|Function} `regex` - * @return {Object} Returns the parser instance for chaining - * @api public - */ - -Snapdragon.prototype.capture = function() { - return this.parser.capture.apply(this.parser, arguments); -}; - -/** - * Register a plugin `fn`. - * - * ```js - * var snapdragon = new Snapdgragon([options]); - * snapdragon.use(function() { - * console.log(this); //<= snapdragon instance - * console.log(this.parser); //<= parser instance - * console.log(this.compiler); //<= compiler instance - * }); - * ``` - * @param {Object} `fn` - * @api public - */ - -Snapdragon.prototype.use = function(fn) { - fn.call(this, this); - return this; -}; - -/** - * Parse the given `str`. - * - * ```js - * var snapdragon = new Snapdgragon([options]); - * // register parsers - * snapdragon.parser.use(function() {}); - * - * // parse - * var ast = snapdragon.parse('foo/bar'); - * console.log(ast); - * ``` - * @param {String} `str` - * @param {Object} `options` Set `options.sourcemap` to true to enable source maps. - * @return {Object} Returns an AST. - * @api public - */ - -Snapdragon.prototype.parse = function(str, options) { - this.options = utils.extend({}, this.options, options); - var parsed = this.parser.parse(str, this.options); - - // add non-enumerable parser reference - define(parsed, 'parser', this.parser); - return parsed; -}; - -/** - * Compile the given `AST`. - * - * ```js - * var snapdragon = new Snapdgragon([options]); - * // register plugins - * snapdragon.use(function() {}); - * // register parser plugins - * snapdragon.parser.use(function() {}); - * // register compiler plugins - * snapdragon.compiler.use(function() {}); - * - * // parse - * var ast = snapdragon.parse('foo/bar'); - * - * // compile - * var res = snapdragon.compile(ast); - * console.log(res.output); - * ``` - * @param {Object} `ast` - * @param {Object} `options` - * @return {Object} Returns an object with an `output` property with the rendered string. - * @api public - */ - -Snapdragon.prototype.compile = function(ast, options) { - this.options = utils.extend({}, this.options, options); - var compiled = this.compiler.compile(ast, this.options); - - // add non-enumerable compiler reference - define(compiled, 'compiler', this.compiler); - return compiled; -}; - -/** - * Expose `Snapdragon` - */ - -module.exports = Snapdragon; - -/** - * Expose `Parser` and `Compiler` - */ - -module.exports.Compiler = Compiler; -module.exports.Parser = Parser; diff --git a/node_modules/snapdragon/lib/compiler.js b/node_modules/snapdragon/lib/compiler.js deleted file mode 100644 index 0ce9d21..0000000 --- a/node_modules/snapdragon/lib/compiler.js +++ /dev/null @@ -1,177 +0,0 @@ -'use strict'; - -var use = require('use'); -var define = require('define-property'); -var debug = require('debug')('snapdragon:compiler'); -var utils = require('./utils'); - -/** - * Create a new `Compiler` with the given `options`. - * @param {Object} `options` - */ - -function Compiler(options, state) { - debug('initializing', __filename); - this.options = utils.extend({source: 'string'}, options); - this.state = state || {}; - this.compilers = {}; - this.output = ''; - this.set('eos', function(node) { - return this.emit(node.val, node); - }); - this.set('noop', function(node) { - return this.emit(node.val, node); - }); - this.set('bos', function(node) { - return this.emit(node.val, node); - }); - use(this); -} - -/** - * Prototype methods - */ - -Compiler.prototype = { - - /** - * Throw an error message with details including the cursor position. - * @param {String} `msg` Message to use in the Error. - */ - - error: function(msg, node) { - var pos = node.position || {start: {column: 0}}; - var message = this.options.source + ' column:' + pos.start.column + ': ' + msg; - - var err = new Error(message); - err.reason = msg; - err.column = pos.start.column; - err.source = this.pattern; - - if (this.options.silent) { - this.errors.push(err); - } else { - throw err; - } - }, - - /** - * Define a non-enumberable property on the `Compiler` instance. - * - * ```js - * compiler.define('foo', 'bar'); - * ``` - * @name .define - * @param {String} `key` propery name - * @param {any} `val` property value - * @return {Object} Returns the Compiler instance for chaining. - * @api public - */ - - define: function(key, val) { - define(this, key, val); - return this; - }, - - /** - * Emit `node.val` - */ - - emit: function(str, node) { - this.output += str; - return str; - }, - - /** - * Add a compiler `fn` with the given `name` - */ - - set: function(name, fn) { - this.compilers[name] = fn; - return this; - }, - - /** - * Get compiler `name`. - */ - - get: function(name) { - return this.compilers[name]; - }, - - /** - * Get the previous AST node. - */ - - prev: function(n) { - return this.ast.nodes[this.idx - (n || 1)] || { type: 'bos', val: '' }; - }, - - /** - * Get the next AST node. - */ - - next: function(n) { - return this.ast.nodes[this.idx + (n || 1)] || { type: 'eos', val: '' }; - }, - - /** - * Visit `node`. - */ - - visit: function(node, nodes, i) { - var fn = this.compilers[node.type]; - this.idx = i; - - if (typeof fn !== 'function') { - throw this.error('compiler "' + node.type + '" is not registered', node); - } - return fn.call(this, node, nodes, i); - }, - - /** - * Map visit over array of `nodes`. - */ - - mapVisit: function(nodes) { - if (!Array.isArray(nodes)) { - throw new TypeError('expected an array'); - } - var len = nodes.length; - var idx = -1; - while (++idx < len) { - this.visit(nodes[idx], nodes, idx); - } - return this; - }, - - /** - * Compile `ast`. - */ - - compile: function(ast, options) { - var opts = utils.extend({}, this.options, options); - this.ast = ast; - this.parsingErrors = this.ast.errors; - this.output = ''; - - // source map support - if (opts.sourcemap) { - var sourcemaps = require('./source-maps'); - sourcemaps(this); - this.mapVisit(this.ast.nodes); - this.applySourceMaps(); - this.map = opts.sourcemap === 'generator' ? this.map : this.map.toJSON(); - return this; - } - - this.mapVisit(this.ast.nodes); - return this; - } -}; - -/** - * Expose `Compiler` - */ - -module.exports = Compiler; diff --git a/node_modules/snapdragon/lib/parser.js b/node_modules/snapdragon/lib/parser.js deleted file mode 100644 index a5a9b31..0000000 --- a/node_modules/snapdragon/lib/parser.js +++ /dev/null @@ -1,533 +0,0 @@ -'use strict'; - -var use = require('use'); -var util = require('util'); -var Cache = require('map-cache'); -var define = require('define-property'); -var debug = require('debug')('snapdragon:parser'); -var Position = require('./position'); -var utils = require('./utils'); - -/** - * Create a new `Parser` with the given `input` and `options`. - * @param {String} `input` - * @param {Object} `options` - * @api public - */ - -function Parser(options) { - debug('initializing', __filename); - this.options = utils.extend({source: 'string'}, options); - this.init(this.options); - use(this); -} - -/** - * Prototype methods - */ - -Parser.prototype = { - constructor: Parser, - - init: function(options) { - this.orig = ''; - this.input = ''; - this.parsed = ''; - - this.column = 1; - this.line = 1; - - this.regex = new Cache(); - this.errors = this.errors || []; - this.parsers = this.parsers || {}; - this.types = this.types || []; - this.sets = this.sets || {}; - this.fns = this.fns || []; - this.currentType = 'root'; - - var pos = this.position(); - this.bos = pos({type: 'bos', val: ''}); - - this.ast = { - type: 'root', - errors: this.errors, - nodes: [this.bos] - }; - - define(this.bos, 'parent', this.ast); - this.nodes = [this.ast]; - - this.count = 0; - this.setCount = 0; - this.stack = []; - }, - - /** - * Throw a formatted error with the cursor column and `msg`. - * @param {String} `msg` Message to use in the Error. - */ - - error: function(msg, node) { - var pos = node.position || {start: {column: 0, line: 0}}; - var line = pos.start.line; - var column = pos.start.column; - var source = this.options.source; - - var message = source + ' : ' + msg; - var err = new Error(message); - err.source = source; - err.reason = msg; - err.pos = pos; - - if (this.options.silent) { - this.errors.push(err); - } else { - throw err; - } - }, - - /** - * Define a non-enumberable property on the `Parser` instance. - * - * ```js - * parser.define('foo', 'bar'); - * ``` - * @name .define - * @param {String} `key` propery name - * @param {any} `val` property value - * @return {Object} Returns the Parser instance for chaining. - * @api public - */ - - define: function(key, val) { - define(this, key, val); - return this; - }, - - /** - * Mark position and patch `node.position`. - */ - - position: function() { - var start = { line: this.line, column: this.column }; - var self = this; - - return function(node) { - define(node, 'position', new Position(start, self)); - return node; - }; - }, - - /** - * Set parser `name` with the given `fn` - * @param {String} `name` - * @param {Function} `fn` - * @api public - */ - - set: function(type, fn) { - if (this.types.indexOf(type) === -1) { - this.types.push(type); - } - this.parsers[type] = fn.bind(this); - return this; - }, - - /** - * Get parser `name` - * @param {String} `name` - * @api public - */ - - get: function(name) { - return this.parsers[name]; - }, - - /** - * Push a `token` onto the `type` stack. - * - * @param {String} `type` - * @return {Object} `token` - * @api public - */ - - push: function(type, token) { - this.sets[type] = this.sets[type] || []; - this.count++; - this.stack.push(token); - return this.sets[type].push(token); - }, - - /** - * Pop a token off of the `type` stack - * @param {String} `type` - * @returns {Object} Returns a token - * @api public - */ - - pop: function(type) { - this.sets[type] = this.sets[type] || []; - this.count--; - this.stack.pop(); - return this.sets[type].pop(); - }, - - /** - * Return true if inside a `stack` node. Types are `braces`, `parens` or `brackets`. - * - * @param {String} `type` - * @return {Boolean} - * @api public - */ - - isInside: function(type) { - this.sets[type] = this.sets[type] || []; - return this.sets[type].length > 0; - }, - - /** - * Return true if `node` is the given `type`. - * - * ```js - * parser.isType(node, 'brace'); - * ``` - * @param {Object} `node` - * @param {String} `type` - * @return {Boolean} - * @api public - */ - - isType: function(node, type) { - return node && node.type === type; - }, - - /** - * Get the previous AST node - * @return {Object} - */ - - prev: function(n) { - return this.stack.length > 0 - ? utils.last(this.stack, n) - : utils.last(this.nodes, n); - }, - - /** - * Update line and column based on `str`. - */ - - consume: function(len) { - this.input = this.input.substr(len); - }, - - /** - * Update column based on `str`. - */ - - updatePosition: function(str, len) { - var lines = str.match(/\n/g); - if (lines) this.line += lines.length; - var i = str.lastIndexOf('\n'); - this.column = ~i ? len - i : this.column + len; - this.parsed += str; - this.consume(len); - }, - - /** - * Match `regex`, return captures, and update the cursor position by `match[0]` length. - * @param {RegExp} `regex` - * @return {Object} - */ - - match: function(regex) { - var m = regex.exec(this.input); - if (m) { - this.updatePosition(m[0], m[0].length); - return m; - } - }, - - /** - * Capture `type` with the given regex. - * @param {String} `type` - * @param {RegExp} `regex` - * @return {Function} - */ - - capture: function(type, regex) { - if (typeof regex === 'function') { - return this.set.apply(this, arguments); - } - - this.regex.set(type, regex); - this.set(type, function() { - var parsed = this.parsed; - var pos = this.position(); - var m = this.match(regex); - if (!m || !m[0]) return; - - var prev = this.prev(); - var node = pos({ - type: type, - val: m[0], - parsed: parsed, - rest: this.input - }); - - if (m[1]) { - node.inner = m[1]; - } - - define(node, 'inside', this.stack.length > 0); - define(node, 'parent', prev); - prev.nodes.push(node); - }.bind(this)); - return this; - }, - - /** - * Create a parser with open and close for parens, - * brackets or braces - */ - - capturePair: function(type, openRegex, closeRegex, fn) { - this.sets[type] = this.sets[type] || []; - - /** - * Open - */ - - this.set(type + '.open', function() { - var parsed = this.parsed; - var pos = this.position(); - var m = this.match(openRegex); - if (!m || !m[0]) return; - - var val = m[0]; - this.setCount++; - this.specialChars = true; - var open = pos({ - type: type + '.open', - val: val, - rest: this.input - }); - - if (typeof m[1] !== 'undefined') { - open.inner = m[1]; - } - - var prev = this.prev(); - var node = pos({ - type: type, - nodes: [open] - }); - - define(node, 'rest', this.input); - define(node, 'parsed', parsed); - define(node, 'prefix', m[1]); - define(node, 'parent', prev); - define(open, 'parent', node); - - if (typeof fn === 'function') { - fn.call(this, open, node); - } - - this.push(type, node); - prev.nodes.push(node); - }); - - /** - * Close - */ - - this.set(type + '.close', function() { - var pos = this.position(); - var m = this.match(closeRegex); - if (!m || !m[0]) return; - - var parent = this.pop(type); - var node = pos({ - type: type + '.close', - rest: this.input, - suffix: m[1], - val: m[0] - }); - - if (!this.isType(parent, type)) { - if (this.options.strict) { - throw new Error('missing opening "' + type + '"'); - } - - this.setCount--; - node.escaped = true; - return node; - } - - if (node.suffix === '\\') { - parent.escaped = true; - node.escaped = true; - } - - parent.nodes.push(node); - define(node, 'parent', parent); - }); - - return this; - }, - - /** - * Capture end-of-string - */ - - eos: function() { - var pos = this.position(); - if (this.input) return; - var prev = this.prev(); - - while (prev.type !== 'root' && !prev.visited) { - if (this.options.strict === true) { - throw new SyntaxError('invalid syntax:' + util.inspect(prev, null, 2)); - } - - if (!hasDelims(prev)) { - prev.parent.escaped = true; - prev.escaped = true; - } - - visit(prev, function(node) { - if (!hasDelims(node.parent)) { - node.parent.escaped = true; - node.escaped = true; - } - }); - - prev = prev.parent; - } - - var tok = pos({ - type: 'eos', - val: this.append || '' - }); - - define(tok, 'parent', this.ast); - return tok; - }, - - /** - * Run parsers to advance the cursor position - */ - - next: function() { - var parsed = this.parsed; - var len = this.types.length; - var idx = -1; - var tok; - - while (++idx < len) { - if ((tok = this.parsers[this.types[idx]].call(this))) { - define(tok, 'rest', this.input); - define(tok, 'parsed', parsed); - this.last = tok; - return tok; - } - } - }, - - /** - * Parse the given string. - * @return {Array} - */ - - parse: function(input) { - if (typeof input !== 'string') { - throw new TypeError('expected a string'); - } - - this.init(this.options); - this.orig = input; - this.input = input; - var self = this; - - function parse() { - // check input before calling `.next()` - input = self.input; - - // get the next AST ndoe - var node = self.next(); - if (node) { - var prev = self.prev(); - if (prev) { - define(node, 'parent', prev); - if (prev.nodes) { - prev.nodes.push(node); - } - } - - if (self.sets.hasOwnProperty(prev.type)) { - self.currentType = prev.type; - } - } - - // if we got here but input is not changed, throw an error - if (self.input && input === self.input) { - throw new Error('no parsers registered for: "' + self.input.slice(0, 5) + '"'); - } - } - - while (this.input) parse(); - if (this.stack.length && this.options.strict) { - var node = this.stack.pop(); - throw this.error('missing opening ' + node.type + ': "' + this.orig + '"'); - } - - var eos = this.eos(); - var tok = this.prev(); - if (tok.type !== 'eos') { - this.ast.nodes.push(eos); - } - - return this.ast; - } -}; - -/** - * Visit `node` with the given `fn` - */ - -function visit(node, fn) { - if (!node.visited) { - define(node, 'visited', true); - return node.nodes ? mapVisit(node.nodes, fn) : fn(node); - } - return node; -} - -/** - * Map visit over array of `nodes`. - */ - -function mapVisit(nodes, fn) { - var len = nodes.length; - var idx = -1; - while (++idx < len) { - visit(nodes[idx], fn); - } -} - -function hasOpen(node) { - return node.nodes && node.nodes[0].type === (node.type + '.open'); -} - -function hasClose(node) { - return node.nodes && utils.last(node.nodes).type === (node.type + '.close'); -} - -function hasDelims(node) { - return hasOpen(node) && hasClose(node); -} - -/** - * Expose `Parser` - */ - -module.exports = Parser; diff --git a/node_modules/snapdragon/lib/position.js b/node_modules/snapdragon/lib/position.js deleted file mode 100644 index c859696..0000000 --- a/node_modules/snapdragon/lib/position.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -var define = require('define-property'); - -/** - * Store position for a node - */ - -module.exports = function Position(start, parser) { - this.start = start; - this.end = { line: parser.line, column: parser.column }; - define(this, 'content', parser.orig); - define(this, 'source', parser.options.source); -}; diff --git a/node_modules/snapdragon/lib/source-maps.js b/node_modules/snapdragon/lib/source-maps.js deleted file mode 100644 index d8e638b..0000000 --- a/node_modules/snapdragon/lib/source-maps.js +++ /dev/null @@ -1,145 +0,0 @@ -'use strict'; - -var fs = require('fs'); -var path = require('path'); -var define = require('define-property'); -var utils = require('./utils'); - -/** - * Expose `mixin()`. - * This code is based on `source-maps-support.js` in reworkcss/css - * https://github.com/reworkcss/css/blob/master/lib/stringify/source-map-support.js - * Copyright (c) 2012 TJ Holowaychuk - */ - -module.exports = mixin; - -/** - * Mixin source map support into `compiler`. - * - * @param {Object} `compiler` - * @api public - */ - -function mixin(compiler) { - define(compiler, '_comment', compiler.comment); - compiler.map = new utils.SourceMap.SourceMapGenerator(); - compiler.position = { line: 1, column: 1 }; - compiler.content = {}; - compiler.files = {}; - - for (var key in exports) { - define(compiler, key, exports[key]); - } -} - -/** - * Update position. - * - * @param {String} str - */ - -exports.updatePosition = function(str) { - var lines = str.match(/\n/g); - if (lines) this.position.line += lines.length; - var i = str.lastIndexOf('\n'); - this.position.column = ~i ? str.length - i : this.position.column + str.length; -}; - -/** - * Emit `str` with `position`. - * - * @param {String} str - * @param {Object} [pos] - * @return {String} - */ - -exports.emit = function(str, node) { - var position = node.position || {}; - var source = position.source; - if (source) { - if (position.filepath) { - source = utils.unixify(position.filepath); - } - - this.map.addMapping({ - source: source, - generated: { - line: this.position.line, - column: Math.max(this.position.column - 1, 0) - }, - original: { - line: position.start.line, - column: position.start.column - 1 - } - }); - - if (position.content) { - this.addContent(source, position); - } - if (position.filepath) { - this.addFile(source, position); - } - - this.updatePosition(str); - this.output += str; - } - return str; -}; - -/** - * Adds a file to the source map output if it has not already been added - * @param {String} `file` - * @param {Object} `pos` - */ - -exports.addFile = function(file, position) { - if (typeof position.content !== 'string') return; - if (Object.prototype.hasOwnProperty.call(this.files, file)) return; - this.files[file] = position.content; -}; - -/** - * Adds a content source to the source map output if it has not already been added - * @param {String} `source` - * @param {Object} `position` - */ - -exports.addContent = function(source, position) { - if (typeof position.content !== 'string') return; - if (Object.prototype.hasOwnProperty.call(this.content, source)) return; - this.map.setSourceContent(source, position.content); -}; - -/** - * Applies any original source maps to the output and embeds the source file - * contents in the source map. - */ - -exports.applySourceMaps = function() { - Object.keys(this.files).forEach(function(file) { - var content = this.files[file]; - this.map.setSourceContent(file, content); - - if (this.options.inputSourcemaps === true) { - var originalMap = utils.sourceMapResolve.resolveSync(content, file, fs.readFileSync); - if (originalMap) { - var map = new utils.SourceMap.SourceMapConsumer(originalMap.map); - var relativeTo = originalMap.sourcesRelativeTo; - this.map.applySourceMap(map, file, utils.unixify(path.dirname(relativeTo))); - } - } - }, this); -}; - -/** - * Process comments, drops sourceMap comments. - * @param {Object} node - */ - -exports.comment = function(node) { - if (/^# sourceMappingURL=/.test(node.comment)) { - return this.emit('', node.position); - } - return this._comment(node); -}; diff --git a/node_modules/snapdragon/lib/utils.js b/node_modules/snapdragon/lib/utils.js deleted file mode 100644 index 33f07e1..0000000 --- a/node_modules/snapdragon/lib/utils.js +++ /dev/null @@ -1,48 +0,0 @@ -'use strict'; - -/** - * Module dependencies - */ - -exports.extend = require('extend-shallow'); -exports.SourceMap = require('source-map'); -exports.sourceMapResolve = require('source-map-resolve'); - -/** - * Convert backslash in the given string to forward slashes - */ - -exports.unixify = function(fp) { - return fp.split(/\\+/).join('/'); -}; - -/** - * Return true if `val` is a non-empty string - * - * @param {String} `str` - * @return {Boolean} - */ - -exports.isString = function(str) { - return str && typeof str === 'string'; -}; - -/** - * Cast `val` to an array - * @return {Array} - */ - -exports.arrayify = function(val) { - if (typeof val === 'string') return [val]; - return val ? (Array.isArray(val) ? val : [val]) : []; -}; - -/** - * Get the last `n` element from the given `array` - * @param {Array} `array` - * @return {*} - */ - -exports.last = function(arr, n) { - return arr[arr.length - (n || 1)]; -}; diff --git a/node_modules/snapdragon/node_modules/define-property/LICENSE b/node_modules/snapdragon/node_modules/define-property/LICENSE deleted file mode 100644 index 65f90ac..0000000 --- a/node_modules/snapdragon/node_modules/define-property/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015, 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/snapdragon/node_modules/define-property/README.md b/node_modules/snapdragon/node_modules/define-property/README.md deleted file mode 100644 index 8cac698..0000000 --- a/node_modules/snapdragon/node_modules/define-property/README.md +++ /dev/null @@ -1,77 +0,0 @@ -# define-property [![NPM version](https://badge.fury.io/js/define-property.svg)](http://badge.fury.io/js/define-property) - -> Define a non-enumerable property on an object. - -## Install - -Install with [npm](https://www.npmjs.com/) - -```sh -$ npm i define-property --save -``` - -## Usage - -**Params** - -* `obj`: The object on which to define the property. -* `prop`: The name of the property to be defined or modified. -* `descriptor`: The descriptor for the property being defined or modified. - -```js -var define = require('define-property'); -var obj = {}; -define(obj, 'foo', function(val) { - return val.toUpperCase(); -}); - -console.log(obj); -//=> {} - -console.log(obj.foo('bar')); -//=> 'BAR' -``` - -**get/set** - -```js -define(obj, 'foo', { - get: function() {}, - set: function() {} -}); -``` - -## Related projects - -* [delegate-object](https://www.npmjs.com/package/delegate-object): Copy properties from an object to another object, where properties with function values will be… [more](https://www.npmjs.com/package/delegate-object) | [homepage](https://github.com/doowb/delegate-object) -* [forward-object](https://www.npmjs.com/package/forward-object): Copy properties from an object to another object, where properties with function values will be… [more](https://www.npmjs.com/package/forward-object) | [homepage](https://github.com/doowb/forward-object) -* [mixin-deep](https://www.npmjs.com/package/mixin-deep): Deeply mix the properties of objects into the first object. Like merge-deep, but doesn't clone. | [homepage](https://github.com/jonschlinkert/mixin-deep) -* [mixin-object](https://www.npmjs.com/package/mixin-object): Mixin the own and inherited properties of other objects onto the first object. Pass an… [more](https://www.npmjs.com/package/mixin-object) | [homepage](https://github.com/jonschlinkert/mixin-object) - -## Running tests - -Install dev dependencies: - -```sh -$ npm i -d && npm test -``` - -## Contributing - -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/define-property/issues/new). - -## Author - -**Jon Schlinkert** - -+ [github/jonschlinkert](https://github.com/jonschlinkert) -+ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) - -## License - -Copyright © 2015 Jon Schlinkert -Released under the MIT license. - -*** - -_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on August 31, 2015._ diff --git a/node_modules/snapdragon/node_modules/define-property/index.js b/node_modules/snapdragon/node_modules/define-property/index.js deleted file mode 100644 index 3e0e5e1..0000000 --- a/node_modules/snapdragon/node_modules/define-property/index.js +++ /dev/null @@ -1,31 +0,0 @@ -/*! - * define-property - * - * Copyright (c) 2015, Jon Schlinkert. - * Licensed under the MIT License. - */ - -'use strict'; - -var isDescriptor = require('is-descriptor'); - -module.exports = function defineProperty(obj, prop, val) { - if (typeof obj !== 'object' && typeof obj !== 'function') { - throw new TypeError('expected an object or function.'); - } - - if (typeof prop !== 'string') { - throw new TypeError('expected `prop` to be a string.'); - } - - if (isDescriptor(val) && ('set' in val || 'get' in val)) { - return Object.defineProperty(obj, prop, val); - } - - return Object.defineProperty(obj, prop, { - configurable: true, - enumerable: false, - writable: true, - value: val - }); -}; diff --git a/node_modules/snapdragon/node_modules/define-property/package.json b/node_modules/snapdragon/node_modules/define-property/package.json deleted file mode 100644 index 43561bf..0000000 --- a/node_modules/snapdragon/node_modules/define-property/package.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "name": "define-property", - "description": "Define a non-enumerable property on an object.", - "version": "0.2.5", - "homepage": "https://github.com/jonschlinkert/define-property", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "repository": "jonschlinkert/define-property", - "bugs": { - "url": "https://github.com/jonschlinkert/define-property/issues" - }, - "license": "MIT", - "files": [ - "index.js" - ], - "main": "index.js", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "devDependencies": { - "mocha": "*", - "should": "^7.0.4" - }, - "keywords": [ - "define", - "define-property", - "enumerable", - "key", - "non", - "non-enumerable", - "object", - "prop", - "property", - "value" - ], - "verb": { - "related": { - "list": [ - "mixin-deep", - "mixin-object", - "delegate-object", - "forward-object" - ] - } - }, - "dependencies": { - "is-descriptor": "^0.1.0" - } -} diff --git a/node_modules/snapdragon/node_modules/is-accessor-descriptor/LICENSE b/node_modules/snapdragon/node_modules/is-accessor-descriptor/LICENSE deleted file mode 100644 index 65f90ac..0000000 --- a/node_modules/snapdragon/node_modules/is-accessor-descriptor/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015, 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/snapdragon/node_modules/is-accessor-descriptor/README.md b/node_modules/snapdragon/node_modules/is-accessor-descriptor/README.md deleted file mode 100644 index 3743fe6..0000000 --- a/node_modules/snapdragon/node_modules/is-accessor-descriptor/README.md +++ /dev/null @@ -1,123 +0,0 @@ -# is-accessor-descriptor [![NPM version](https://img.shields.io/npm/v/is-accessor-descriptor.svg)](https://www.npmjs.com/package/is-accessor-descriptor) [![Build Status](https://img.shields.io/travis/jonschlinkert/is-accessor-descriptor.svg)](https://travis-ci.org/jonschlinkert/is-accessor-descriptor) - -> Returns true if a value has the characteristics of a valid JavaScript accessor descriptor. - -- [Install](#install) -- [Usage](#usage) -- [Examples](#examples) -- [API](#api) -- [Related projects](#related-projects) -- [Running tests](#running-tests) -- [Contributing](#contributing) -- [Author](#author) -- [License](#license) - -_(TOC generated by [verb](https://github.com/verbose/verb) using [markdown-toc](https://github.com/jonschlinkert/markdown-toc))_ - -## Install - -Install with [npm](https://www.npmjs.com/): - -```sh -$ npm i is-accessor-descriptor --save -``` - -## Usage - -```js -var isAccessor = require('is-accessor-descriptor'); - -isAccessor({get: function() {}}); -//=> true -``` - -You may also pass an object and property name to check if the property is an accessor: - -```js -isAccessor(foo, 'bar'); -``` - -## Examples - -`false` when not an object - -```js -isAccessor('a') -isAccessor(null) -isAccessor([]) -//=> false -``` - -`true` when the object has valid properties - -and the properties all have the correct JavaScript types: - -```js -isAccessor({get: noop, set: noop}) -isAccessor({get: noop}) -isAccessor({set: noop}) -//=> true -``` - -`false` when the object has invalid properties - -```js -isAccessor({get: noop, set: noop, bar: 'baz'}) -isAccessor({get: noop, writable: true}) -isAccessor({get: noop, value: true}) -//=> false -``` - -`false` when an accessor is not a function - -```js -isAccessor({get: noop, set: 'baz'}) -isAccessor({get: 'foo', set: noop}) -isAccessor({get: 'foo', bar: 'baz'}) -isAccessor({get: 'foo', set: 'baz'}) -//=> false -``` - -`false` when a value is not the correct type - -```js -isAccessor({get: noop, set: noop, enumerable: 'foo'}) -isAccessor({set: noop, configurable: 'foo'}) -isAccessor({get: noop, configurable: 'foo'}) -//=> false -``` - -## Related projects - -* [is-accessor-descriptor](https://www.npmjs.com/package/is-accessor-descriptor): Returns true if a value has the characteristics of a valid JavaScript accessor descriptor. | [homepage](https://github.com/jonschlinkert/is-accessor-descriptor) -* [is-data-descriptor](https://www.npmjs.com/package/is-data-descriptor): Returns true if a value has the characteristics of a valid JavaScript data descriptor. | [homepage](https://github.com/jonschlinkert/is-data-descriptor) -* [is-descriptor](https://www.npmjs.com/package/is-descriptor): Returns true if a value has the characteristics of a valid JavaScript descriptor. Works for… [more](https://www.npmjs.com/package/is-descriptor) | [homepage](https://github.com/jonschlinkert/is-descriptor) -* [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) - -## Running tests - -Install dev dependencies: - -```sh -$ npm i -d && npm test -``` - -## Contributing - -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/is-accessor-descriptor/issues/new). - -## Author - -**Jon Schlinkert** - -* [github/jonschlinkert](https://github.com/jonschlinkert) -* [twitter/jonschlinkert](http://twitter.com/jonschlinkert) - -## License - -Copyright © 2015 [Jon Schlinkert](https://github.com/jonschlinkert) -Released under the MIT license. - -*** - -_This file was generated by [verb](https://github.com/verbose/verb) on December 28, 2015._ \ No newline at end of file diff --git a/node_modules/snapdragon/node_modules/is-accessor-descriptor/index.js b/node_modules/snapdragon/node_modules/is-accessor-descriptor/index.js deleted file mode 100644 index 2ca4af8..0000000 --- a/node_modules/snapdragon/node_modules/is-accessor-descriptor/index.js +++ /dev/null @@ -1,69 +0,0 @@ -/*! - * is-accessor-descriptor - * - * Copyright (c) 2015, Jon Schlinkert. - * Licensed under the MIT License. - */ - -'use strict'; - -var typeOf = require('kind-of'); - -// accessor descriptor properties -var accessor = { - get: 'function', - set: 'function', - configurable: 'boolean', - enumerable: 'boolean' -}; - -function isAccessorDescriptor(obj, prop) { - if (typeof prop === 'string') { - var val = Object.getOwnPropertyDescriptor(obj, prop); - return typeof val !== 'undefined'; - } - - if (typeOf(obj) !== 'object') { - return false; - } - - if (has(obj, 'value') || has(obj, 'writable')) { - return false; - } - - if (!has(obj, 'get') || typeof obj.get !== 'function') { - return false; - } - - // tldr: it's valid to have "set" be undefined - // "set" might be undefined if `Object.getOwnPropertyDescriptor` - // was used to get the value, and only `get` was defined by the user - if (has(obj, 'set') && typeof obj[key] !== 'function' && typeof obj[key] !== 'undefined') { - return false; - } - - for (var key in obj) { - if (!accessor.hasOwnProperty(key)) { - continue; - } - - if (typeOf(obj[key]) === accessor[key]) { - continue; - } - - if (typeof obj[key] !== 'undefined') { - return false; - } - } - return true; -} - -function has(obj, key) { - return {}.hasOwnProperty.call(obj, key); -} - -/** - * Expose `isAccessorDescriptor` - */ - -module.exports = isAccessorDescriptor; diff --git a/node_modules/snapdragon/node_modules/is-accessor-descriptor/package.json b/node_modules/snapdragon/node_modules/is-accessor-descriptor/package.json deleted file mode 100644 index 0f39c64..0000000 --- a/node_modules/snapdragon/node_modules/is-accessor-descriptor/package.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "name": "is-accessor-descriptor", - "description": "Returns true if a value has the characteristics of a valid JavaScript accessor descriptor.", - "version": "0.1.6", - "homepage": "https://github.com/jonschlinkert/is-accessor-descriptor", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "repository": "jonschlinkert/is-accessor-descriptor", - "bugs": { - "url": "https://github.com/jonschlinkert/is-accessor-descriptor/issues" - }, - "license": "MIT", - "files": [ - "index.js" - ], - "main": "index.js", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "dependencies": { - "kind-of": "^3.0.2" - }, - "devDependencies": { - "mocha": "*", - "should": "*" - }, - "keywords": [ - "accessor", - "check", - "data", - "descriptor", - "get", - "getter", - "is", - "keys", - "object", - "properties", - "property", - "set", - "setter", - "type", - "valid", - "value" - ], - "verb": { - "related": { - "list": [ - "is-accessor-descriptor", - "is-data-descriptor", - "is-descriptor", - "isobject" - ] - }, - "plugins": [ - "gulp-format-md" - ], - "layout": "default" - } -} diff --git a/node_modules/snapdragon/node_modules/is-data-descriptor/LICENSE b/node_modules/snapdragon/node_modules/is-data-descriptor/LICENSE deleted file mode 100644 index 65f90ac..0000000 --- a/node_modules/snapdragon/node_modules/is-data-descriptor/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015, 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/snapdragon/node_modules/is-data-descriptor/README.md b/node_modules/snapdragon/node_modules/is-data-descriptor/README.md deleted file mode 100644 index 41e1643..0000000 --- a/node_modules/snapdragon/node_modules/is-data-descriptor/README.md +++ /dev/null @@ -1,128 +0,0 @@ -# is-data-descriptor [![NPM version](https://img.shields.io/npm/v/is-data-descriptor.svg)](https://www.npmjs.com/package/is-data-descriptor) [![Build Status](https://img.shields.io/travis/jonschlinkert/is-data-descriptor.svg)](https://travis-ci.org/jonschlinkert/is-data-descriptor) - -> Returns true if a value has the characteristics of a valid JavaScript data descriptor. - -## Install - -Install with [npm](https://www.npmjs.com/): - -```sh -$ npm i is-data-descriptor --save -``` - -## Usage - -```js -var isDataDesc = require('is-data-descriptor'); -``` - -## Examples - -`true` when the descriptor has valid properties with valid values. - -```js -// `value` can be anything -isDataDesc({value: 'foo'}) -isDataDesc({value: function() {}}) -isDataDesc({value: true}) -//=> true -``` - -`false` when not an object - -```js -isDataDesc('a') -//=> false -isDataDesc(null) -//=> false -isDataDesc([]) -//=> false -``` - -`false` when the object has invalid properties - -```js -isDataDesc({value: 'foo', bar: 'baz'}) -//=> false -isDataDesc({value: 'foo', bar: 'baz'}) -//=> false -isDataDesc({value: 'foo', get: function(){}}) -//=> false -isDataDesc({get: function(){}, value: 'foo'}) -//=> false -``` - -`false` when a value is not the correct type - -```js -isDataDesc({value: 'foo', enumerable: 'foo'}) -//=> false -isDataDesc({value: 'foo', configurable: 'foo'}) -//=> false -isDataDesc({value: 'foo', writable: 'foo'}) -//=> false -``` - -## Valid properties - -The only valid data descriptor properties are the following: - -* `configurable` (required) -* `enumerable` (required) -* `value` (optional) -* `writable` (optional) - -To be a valid data descriptor, either `value` or `writable` must be defined. - -**Invalid properties** - -A descriptor may have additional _invalid_ properties (an error will **not** be thrown). - -```js -var foo = {}; - -Object.defineProperty(foo, 'bar', { - enumerable: true, - whatever: 'blah', // invalid, but doesn't cause an error - get: function() { - return 'baz'; - } -}); - -console.log(foo.bar); -//=> 'baz' -``` - -## Related projects - -* [is-accessor-descriptor](https://www.npmjs.com/package/is-accessor-descriptor): Returns true if a value has the characteristics of a valid JavaScript accessor descriptor. | [homepage](https://github.com/jonschlinkert/is-accessor-descriptor) -* [is-descriptor](https://www.npmjs.com/package/is-descriptor): Returns true if a value has the characteristics of a valid JavaScript descriptor. Works for… [more](https://www.npmjs.com/package/is-descriptor) | [homepage](https://github.com/jonschlinkert/is-descriptor) -* [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) - -## Running tests - -Install dev dependencies: - -```sh -$ npm i -d && npm test -``` - -## Contributing - -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/is-data-descriptor/issues/new). - -## Author - -**Jon Schlinkert** - -* [github/jonschlinkert](https://github.com/jonschlinkert) -* [twitter/jonschlinkert](http://twitter.com/jonschlinkert) - -## License - -Copyright © 2015 [Jon Schlinkert](https://github.com/jonschlinkert) -Released under the MIT license. - -*** - -_This file was generated by [verb](https://github.com/verbose/verb) on December 28, 2015._ \ No newline at end of file diff --git a/node_modules/snapdragon/node_modules/is-data-descriptor/index.js b/node_modules/snapdragon/node_modules/is-data-descriptor/index.js deleted file mode 100644 index d4d09c9..0000000 --- a/node_modules/snapdragon/node_modules/is-data-descriptor/index.js +++ /dev/null @@ -1,55 +0,0 @@ -/*! - * is-data-descriptor - * - * Copyright (c) 2015, Jon Schlinkert. - * Licensed under the MIT License. - */ - -'use strict'; - -var typeOf = require('kind-of'); - -// data descriptor properties -var data = { - configurable: 'boolean', - enumerable: 'boolean', - writable: 'boolean' -}; - -function isDataDescriptor(obj, prop) { - if (typeOf(obj) !== 'object') { - return false; - } - - if (typeof prop === 'string') { - var val = Object.getOwnPropertyDescriptor(obj, prop); - return typeof val !== 'undefined'; - } - - if (!('value' in obj) && !('writable' in obj)) { - return false; - } - - for (var key in obj) { - if (key === 'value') continue; - - if (!data.hasOwnProperty(key)) { - continue; - } - - if (typeOf(obj[key]) === data[key]) { - continue; - } - - if (typeof obj[key] !== 'undefined') { - return false; - } - } - return true; -} - -/** - * Expose `isDataDescriptor` - */ - -module.exports = isDataDescriptor; diff --git a/node_modules/snapdragon/node_modules/is-data-descriptor/package.json b/node_modules/snapdragon/node_modules/is-data-descriptor/package.json deleted file mode 100644 index 5fb294b..0000000 --- a/node_modules/snapdragon/node_modules/is-data-descriptor/package.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "name": "is-data-descriptor", - "description": "Returns true if a value has the characteristics of a valid JavaScript data descriptor.", - "version": "0.1.4", - "homepage": "https://github.com/jonschlinkert/is-data-descriptor", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "repository": "jonschlinkert/is-data-descriptor", - "bugs": { - "url": "https://github.com/jonschlinkert/is-data-descriptor/issues" - }, - "license": "MIT", - "files": [ - "index.js" - ], - "main": "index.js", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "dependencies": { - "kind-of": "^3.0.2" - }, - "devDependencies": { - "mocha": "*", - "should": "*" - }, - "keywords": [ - "accessor", - "check", - "data", - "descriptor", - "get", - "getter", - "is", - "keys", - "object", - "properties", - "property", - "set", - "setter", - "type", - "valid", - "value" - ], - "verb": { - "related": { - "list": [ - "is-accessor-descriptor", - "is-data-descriptor", - "is-descriptor", - "isobject" - ] - }, - "plugins": [ - "gulp-format-md" - ] - } -} diff --git a/node_modules/snapdragon/node_modules/is-descriptor/LICENSE b/node_modules/snapdragon/node_modules/is-descriptor/LICENSE deleted file mode 100644 index c0d7f13..0000000 --- a/node_modules/snapdragon/node_modules/is-descriptor/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015-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. \ No newline at end of file diff --git a/node_modules/snapdragon/node_modules/is-descriptor/README.md b/node_modules/snapdragon/node_modules/is-descriptor/README.md deleted file mode 100644 index 658e533..0000000 --- a/node_modules/snapdragon/node_modules/is-descriptor/README.md +++ /dev/null @@ -1,193 +0,0 @@ -# is-descriptor [![NPM version](https://img.shields.io/npm/v/is-descriptor.svg?style=flat)](https://www.npmjs.com/package/is-descriptor) [![NPM monthly downloads](https://img.shields.io/npm/dm/is-descriptor.svg?style=flat)](https://npmjs.org/package/is-descriptor) [![NPM total downloads](https://img.shields.io/npm/dt/is-descriptor.svg?style=flat)](https://npmjs.org/package/is-descriptor) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/is-descriptor.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/is-descriptor) - -> Returns true if a value has the characteristics of a valid JavaScript descriptor. Works for data descriptors and accessor descriptors. - -## Install - -Install with [npm](https://www.npmjs.com/): - -```sh -$ npm install --save is-descriptor -``` - -## Usage - -```js -var isDescriptor = require('is-descriptor'); - -isDescriptor({value: 'foo'}) -//=> true -isDescriptor({get: function(){}, set: function(){}}) -//=> true -isDescriptor({get: 'foo', set: function(){}}) -//=> false -``` - -You may also check for a descriptor by passing an object as the first argument and property name (`string`) as the second argument. - -```js -var obj = {}; -obj.foo = 'abc'; - -Object.defineProperty(obj, 'bar', { - value: 'xyz' -}); - -isDescriptor(obj, 'foo'); -//=> true -isDescriptor(obj, 'bar'); -//=> true -``` - -## Examples - -### value type - -`false` when not an object - -```js -isDescriptor('a'); -//=> false -isDescriptor(null); -//=> false -isDescriptor([]); -//=> false -``` - -### data descriptor - -`true` when the object has valid properties with valid values. - -```js -isDescriptor({value: 'foo'}); -//=> true -isDescriptor({value: noop}); -//=> true -``` - -`false` when the object has invalid properties - -```js -isDescriptor({value: 'foo', bar: 'baz'}); -//=> false -isDescriptor({value: 'foo', bar: 'baz'}); -//=> false -isDescriptor({value: 'foo', get: noop}); -//=> false -isDescriptor({get: noop, value: noop}); -//=> false -``` - -`false` when a value is not the correct type - -```js -isDescriptor({value: 'foo', enumerable: 'foo'}); -//=> false -isDescriptor({value: 'foo', configurable: 'foo'}); -//=> false -isDescriptor({value: 'foo', writable: 'foo'}); -//=> false -``` - -### accessor descriptor - -`true` when the object has valid properties with valid values. - -```js -isDescriptor({get: noop, set: noop}); -//=> true -isDescriptor({get: noop}); -//=> true -isDescriptor({set: noop}); -//=> true -``` - -`false` when the object has invalid properties - -```js -isDescriptor({get: noop, set: noop, bar: 'baz'}); -//=> false -isDescriptor({get: noop, writable: true}); -//=> false -isDescriptor({get: noop, value: true}); -//=> false -``` - -`false` when an accessor is not a function - -```js -isDescriptor({get: noop, set: 'baz'}); -//=> false -isDescriptor({get: 'foo', set: noop}); -//=> false -isDescriptor({get: 'foo', bar: 'baz'}); -//=> false -isDescriptor({get: 'foo', set: 'baz'}); -//=> false -``` - -`false` when a value is not the correct type - -```js -isDescriptor({get: noop, set: noop, enumerable: 'foo'}); -//=> false -isDescriptor({set: noop, configurable: 'foo'}); -//=> false -isDescriptor({get: noop, configurable: 'foo'}); -//=> false -``` - -## About - -### Related projects - -* [is-accessor-descriptor](https://www.npmjs.com/package/is-accessor-descriptor): Returns true if a value has the characteristics of a valid JavaScript accessor descriptor. | [homepage](https://github.com/jonschlinkert/is-accessor-descriptor "Returns true if a value has the characteristics of a valid JavaScript accessor descriptor.") -* [is-data-descriptor](https://www.npmjs.com/package/is-data-descriptor): Returns true if a value has the characteristics of a valid JavaScript data descriptor. | [homepage](https://github.com/jonschlinkert/is-data-descriptor "Returns true if a value has the characteristics of a valid JavaScript data descriptor.") -* [is-descriptor](https://www.npmjs.com/package/is-descriptor): Returns true if a value has the characteristics of a valid JavaScript descriptor. Works for… [more](https://github.com/jonschlinkert/is-descriptor) | [homepage](https://github.com/jonschlinkert/is-descriptor "Returns true if a value has the characteristics of a valid JavaScript descriptor. Works for data descriptors and accessor descriptors.") -* [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.") - -### Contributing - -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). - -### Contributors - -| **Commits** | **Contributor** | -| --- | --- | -| 24 | [jonschlinkert](https://github.com/jonschlinkert) | -| 1 | [doowb](https://github.com/doowb) | -| 1 | [wtgtybhertgeghgtwtg](https://github.com/wtgtybhertgeghgtwtg) | - -### 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 -``` - -### 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 -``` - -### Author - -**Jon Schlinkert** - -* [github/jonschlinkert](https://github.com/jonschlinkert) -* [twitter/jonschlinkert](https://twitter.com/jonschlinkert) - -### License - -Copyright © 2017, [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 July 22, 2017._ \ No newline at end of file diff --git a/node_modules/snapdragon/node_modules/is-descriptor/index.js b/node_modules/snapdragon/node_modules/is-descriptor/index.js deleted file mode 100644 index c9b91d7..0000000 --- a/node_modules/snapdragon/node_modules/is-descriptor/index.js +++ /dev/null @@ -1,22 +0,0 @@ -/*! - * is-descriptor - * - * Copyright (c) 2015-2017, Jon Schlinkert. - * Released under the MIT License. - */ - -'use strict'; - -var typeOf = require('kind-of'); -var isAccessor = require('is-accessor-descriptor'); -var isData = require('is-data-descriptor'); - -module.exports = function isDescriptor(obj, key) { - if (typeOf(obj) !== 'object') { - return false; - } - if ('get' in obj) { - return isAccessor(obj, key); - } - return isData(obj, key); -}; diff --git a/node_modules/snapdragon/node_modules/is-descriptor/node_modules/kind-of/LICENSE b/node_modules/snapdragon/node_modules/is-descriptor/node_modules/kind-of/LICENSE deleted file mode 100644 index 3f2eca1..0000000 --- a/node_modules/snapdragon/node_modules/is-descriptor/node_modules/kind-of/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -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/snapdragon/node_modules/is-descriptor/node_modules/kind-of/README.md b/node_modules/snapdragon/node_modules/is-descriptor/node_modules/kind-of/README.md deleted file mode 100644 index 170bf30..0000000 --- a/node_modules/snapdragon/node_modules/is-descriptor/node_modules/kind-of/README.md +++ /dev/null @@ -1,342 +0,0 @@ -# kind-of [![NPM version](https://img.shields.io/npm/v/kind-of.svg?style=flat)](https://www.npmjs.com/package/kind-of) [![NPM monthly downloads](https://img.shields.io/npm/dm/kind-of.svg?style=flat)](https://npmjs.org/package/kind-of) [![NPM total downloads](https://img.shields.io/npm/dt/kind-of.svg?style=flat)](https://npmjs.org/package/kind-of) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/kind-of.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/kind-of) - -> Get the native type of a value. - -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 kind-of -``` - -Install with [bower](https://bower.io/) - -```sh -$ bower install kind-of --save -``` - -## Why use this? - -1. [it's fast](#benchmarks) | [optimizations](#optimizations) -2. [better type checking](#better-type-checking) - -## Usage - -> es5, browser and es6 ready - -```js -var kindOf = require('kind-of'); - -kindOf(undefined); -//=> 'undefined' - -kindOf(null); -//=> 'null' - -kindOf(true); -//=> 'boolean' - -kindOf(false); -//=> 'boolean' - -kindOf(new Boolean(true)); -//=> 'boolean' - -kindOf(new Buffer('')); -//=> 'buffer' - -kindOf(42); -//=> 'number' - -kindOf(new Number(42)); -//=> 'number' - -kindOf('str'); -//=> 'string' - -kindOf(new String('str')); -//=> 'string' - -kindOf(arguments); -//=> 'arguments' - -kindOf({}); -//=> 'object' - -kindOf(Object.create(null)); -//=> 'object' - -kindOf(new Test()); -//=> 'object' - -kindOf(new Date()); -//=> 'date' - -kindOf([]); -//=> 'array' - -kindOf([1, 2, 3]); -//=> 'array' - -kindOf(new Array()); -//=> 'array' - -kindOf(/foo/); -//=> 'regexp' - -kindOf(new RegExp('foo')); -//=> 'regexp' - -kindOf(function () {}); -//=> 'function' - -kindOf(function * () {}); -//=> 'function' - -kindOf(new Function()); -//=> 'function' - -kindOf(new Map()); -//=> 'map' - -kindOf(new WeakMap()); -//=> 'weakmap' - -kindOf(new Set()); -//=> 'set' - -kindOf(new WeakSet()); -//=> 'weakset' - -kindOf(Symbol('str')); -//=> 'symbol' - -kindOf(new Int8Array()); -//=> 'int8array' - -kindOf(new Uint8Array()); -//=> 'uint8array' - -kindOf(new Uint8ClampedArray()); -//=> 'uint8clampedarray' - -kindOf(new Int16Array()); -//=> 'int16array' - -kindOf(new Uint16Array()); -//=> 'uint16array' - -kindOf(new Int32Array()); -//=> 'int32array' - -kindOf(new Uint32Array()); -//=> 'uint32array' - -kindOf(new Float32Array()); -//=> 'float32array' - -kindOf(new Float64Array()); -//=> 'float64array' -``` - -## Release history - -### v4.0.0 - -**Added** - -* `promise` support - -### v5.0.0 - -**Added** - -* `Set Iterator` and `Map Iterator` support - -**Fixed** - -* Now returns `generatorfunction` for generator functions - -## Benchmarks - -Benchmarked against [typeof](http://github.com/CodingFu/typeof) and [type-of](https://github.com/ForbesLindesay/type-of). -Note that performaces is slower for es6 features `Map`, `WeakMap`, `Set` and `WeakSet`. - -```bash -#1: array - current x 23,329,397 ops/sec ±0.82% (94 runs sampled) - lib-type-of x 4,170,273 ops/sec ±0.55% (94 runs sampled) - lib-typeof x 9,686,935 ops/sec ±0.59% (98 runs sampled) - -#2: boolean - current x 27,197,115 ops/sec ±0.85% (94 runs sampled) - lib-type-of x 3,145,791 ops/sec ±0.73% (97 runs sampled) - lib-typeof x 9,199,562 ops/sec ±0.44% (99 runs sampled) - -#3: date - current x 20,190,117 ops/sec ±0.86% (92 runs sampled) - lib-type-of x 5,166,970 ops/sec ±0.74% (94 runs sampled) - lib-typeof x 9,610,821 ops/sec ±0.50% (96 runs sampled) - -#4: function - current x 23,855,460 ops/sec ±0.60% (97 runs sampled) - lib-type-of x 5,667,740 ops/sec ±0.54% (100 runs sampled) - lib-typeof x 10,010,644 ops/sec ±0.44% (100 runs sampled) - -#5: null - current x 27,061,047 ops/sec ±0.97% (96 runs sampled) - lib-type-of x 13,965,573 ops/sec ±0.62% (97 runs sampled) - lib-typeof x 8,460,194 ops/sec ±0.61% (97 runs sampled) - -#6: number - current x 25,075,682 ops/sec ±0.53% (99 runs sampled) - lib-type-of x 2,266,405 ops/sec ±0.41% (98 runs sampled) - lib-typeof x 9,821,481 ops/sec ±0.45% (99 runs sampled) - -#7: object - current x 3,348,980 ops/sec ±0.49% (99 runs sampled) - lib-type-of x 3,245,138 ops/sec ±0.60% (94 runs sampled) - lib-typeof x 9,262,952 ops/sec ±0.59% (99 runs sampled) - -#8: regex - current x 21,284,827 ops/sec ±0.72% (96 runs sampled) - lib-type-of x 4,689,241 ops/sec ±0.43% (100 runs sampled) - lib-typeof x 8,957,593 ops/sec ±0.62% (98 runs sampled) - -#9: string - current x 25,379,234 ops/sec ±0.58% (96 runs sampled) - lib-type-of x 3,635,148 ops/sec ±0.76% (93 runs sampled) - lib-typeof x 9,494,134 ops/sec ±0.49% (98 runs sampled) - -#10: undef - current x 27,459,221 ops/sec ±1.01% (93 runs sampled) - lib-type-of x 14,360,433 ops/sec ±0.52% (99 runs sampled) - lib-typeof x 23,202,868 ops/sec ±0.59% (94 runs sampled) - -``` - -## Optimizations - -In 7 out of 8 cases, this library is 2x-10x faster than other top libraries included in the benchmarks. There are a few things that lead to this performance advantage, none of them hard and fast rules, but all of them simple and repeatable in almost any code library: - -1. Optimize around the fastest and most common use cases first. Of course, this will change from project-to-project, but I took some time to understand how and why `typeof` checks were being used in my own libraries and other libraries I use a lot. -2. Optimize around bottlenecks - In other words, the order in which conditionals are implemented is significant, because each check is only as fast as the failing checks that came before it. Here, the biggest bottleneck by far is checking for plain objects (an object that was created by the `Object` constructor). I opted to make this check happen by process of elimination rather than brute force up front (e.g. by using something like `val.constructor.name`), so that every other type check would not be penalized it. -3. Don't do uneccessary processing - why do `.slice(8, -1).toLowerCase();` just to get the word `regex`? It's much faster to do `if (type === '[object RegExp]') return 'regex'` -4. There is no reason to make the code in a microlib as terse as possible, just to win points for making it shorter. It's always better to favor performant code over terse code. You will always only be using a single `require()` statement to use the library anyway, regardless of how the code is written. - -## Better type checking - -kind-of is more correct than other type checking libs I've looked at. For example, here are some differing results from other popular libs: - -### [typeof](https://github.com/CodingFu/typeof) lib - -Incorrectly tests instances of custom constructors (pretty common): - -```js -var typeOf = require('typeof'); -function Test() {} -console.log(typeOf(new Test())); -//=> 'test' -``` - -Returns `object` instead of `arguments`: - -```js -function foo() { - console.log(typeOf(arguments)) //=> 'object' -} -foo(); -``` - -### [type-of](https://github.com/ForbesLindesay/type-of) lib - -Incorrectly returns `object` for generator functions, buffers, `Map`, `Set`, `WeakMap` and `WeakSet`: - -```js -function * foo() {} -console.log(typeOf(foo)); -//=> 'object' -console.log(typeOf(new Buffer(''))); -//=> 'object' -console.log(typeOf(new Map())); -//=> 'object' -console.log(typeOf(new Set())); -//=> 'object' -console.log(typeOf(new WeakMap())); -//=> 'object' -console.log(typeOf(new WeakSet())); -//=> 'object' -``` - -## 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-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") -* [is-number](https://www.npmjs.com/package/is-number): Returns true if the value is a number. comprehensive tests. | [homepage](https://github.com/jonschlinkert/is-number "Returns true if the value is a number. comprehensive tests.") -* [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. ") - -### Contributors - -| **Commits** | **Contributor** | -| --- | --- | -| 82 | [jonschlinkert](https://github.com/jonschlinkert) | -| 3 | [aretecode](https://github.com/aretecode) | -| 2 | [miguelmota](https://github.com/miguelmota) | -| 1 | [dtothefp](https://github.com/dtothefp) | -| 1 | [ksheedlo](https://github.com/ksheedlo) | -| 1 | [pdehaan](https://github.com/pdehaan) | -| 1 | [laggingreflex](https://github.com/laggingreflex) | -| 1 | [charlike](https://github.com/charlike) | - -### Author - -**Jon Schlinkert** - -* [github/jonschlinkert](https://github.com/jonschlinkert) -* [twitter/jonschlinkert](https://twitter.com/jonschlinkert) - -### License - -Copyright © 2017, [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 October 13, 2017._ \ No newline at end of file diff --git a/node_modules/snapdragon/node_modules/is-descriptor/node_modules/kind-of/index.js b/node_modules/snapdragon/node_modules/is-descriptor/node_modules/kind-of/index.js deleted file mode 100644 index fc5cde9..0000000 --- a/node_modules/snapdragon/node_modules/is-descriptor/node_modules/kind-of/index.js +++ /dev/null @@ -1,147 +0,0 @@ -var toString = Object.prototype.toString; - -/** - * Get the native `typeof` a value. - * - * @param {*} `val` - * @return {*} Native javascript type - */ - -module.exports = function kindOf(val) { - var type = typeof val; - - // primitivies - if (type === 'undefined') { - return 'undefined'; - } - if (val === null) { - return 'null'; - } - if (val === true || val === false || val instanceof Boolean) { - return 'boolean'; - } - if (type === 'string' || val instanceof String) { - return 'string'; - } - if (type === 'number' || val instanceof Number) { - return 'number'; - } - - // functions - if (type === 'function' || val instanceof Function) { - if (typeof val.constructor.name !== 'undefined' && val.constructor.name.slice(0, 9) === 'Generator') { - return 'generatorfunction'; - } - return 'function'; - } - - // array - if (typeof Array.isArray !== 'undefined' && Array.isArray(val)) { - return 'array'; - } - - // check for instances of RegExp and Date before calling `toString` - if (val instanceof RegExp) { - return 'regexp'; - } - if (val instanceof Date) { - return 'date'; - } - - // other objects - type = toString.call(val); - - if (type === '[object RegExp]') { - return 'regexp'; - } - if (type === '[object Date]') { - return 'date'; - } - if (type === '[object Arguments]') { - return 'arguments'; - } - if (type === '[object Error]') { - return 'error'; - } - if (type === '[object Promise]') { - return 'promise'; - } - - // buffer - if (isBuffer(val)) { - return 'buffer'; - } - - // es6: Map, WeakMap, Set, WeakSet - if (type === '[object Set]') { - return 'set'; - } - if (type === '[object WeakSet]') { - return 'weakset'; - } - if (type === '[object Map]') { - return 'map'; - } - if (type === '[object WeakMap]') { - return 'weakmap'; - } - if (type === '[object Symbol]') { - return 'symbol'; - } - - if (type === '[object Map Iterator]') { - return 'mapiterator'; - } - if (type === '[object Set Iterator]') { - return 'setiterator'; - } - if (type === '[object String Iterator]') { - return 'stringiterator'; - } - if (type === '[object Array Iterator]') { - return 'arrayiterator'; - } - - // typed arrays - if (type === '[object Int8Array]') { - return 'int8array'; - } - if (type === '[object Uint8Array]') { - return 'uint8array'; - } - if (type === '[object Uint8ClampedArray]') { - return 'uint8clampedarray'; - } - if (type === '[object Int16Array]') { - return 'int16array'; - } - if (type === '[object Uint16Array]') { - return 'uint16array'; - } - if (type === '[object Int32Array]') { - return 'int32array'; - } - if (type === '[object Uint32Array]') { - return 'uint32array'; - } - if (type === '[object Float32Array]') { - return 'float32array'; - } - if (type === '[object Float64Array]') { - return 'float64array'; - } - - // must be a plain object - return 'object'; -}; - -/** - * If you need to support Safari 5-7 (8-10 yr-old browser), - * take a look at https://github.com/feross/is-buffer - */ - -function isBuffer(val) { - return val.constructor - && typeof val.constructor.isBuffer === 'function' - && val.constructor.isBuffer(val); -} diff --git a/node_modules/snapdragon/node_modules/is-descriptor/node_modules/kind-of/package.json b/node_modules/snapdragon/node_modules/is-descriptor/node_modules/kind-of/package.json deleted file mode 100644 index 334235f..0000000 --- a/node_modules/snapdragon/node_modules/is-descriptor/node_modules/kind-of/package.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "name": "kind-of", - "description": "Get the native type of a value.", - "version": "5.1.0", - "homepage": "https://github.com/jonschlinkert/kind-of", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "contributors": [ - "David Fox-Powell (https://dtothefp.github.io/me)", - "James (https://twitter.com/aretecode)", - "Jon Schlinkert (http://twitter.com/jonschlinkert)", - "Ken Sheedlo (kensheedlo.com)", - "laggingreflex (https://github.com/laggingreflex)", - "Miguel Mota (https://miguelmota.com)", - "Peter deHaan (http://about.me/peterdehaan)", - "tunnckoCore (https://i.am.charlike.online)" - ], - "repository": "jonschlinkert/kind-of", - "bugs": { - "url": "https://github.com/jonschlinkert/kind-of/issues" - }, - "license": "MIT", - "files": [ - "index.js" - ], - "main": "index.js", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha", - "prepublish": "browserify -o browser.js -e index.js -s index --bare" - }, - "devDependencies": { - "ansi-bold": "^0.1.1", - "benchmarked": "^1.1.1", - "browserify": "^14.4.0", - "gulp-format-md": "^0.1.12", - "matched": "^0.4.4", - "mocha": "^3.4.2", - "type-of": "^2.0.1", - "typeof": "^1.0.0" - }, - "keywords": [ - "arguments", - "array", - "boolean", - "check", - "date", - "function", - "is", - "is-type", - "is-type-of", - "kind", - "kind-of", - "number", - "object", - "of", - "regexp", - "string", - "test", - "type", - "type-of", - "typeof", - "types" - ], - "verb": { - "related": { - "list": [ - "is-glob", - "is-number", - "is-primitive" - ] - }, - "toc": false, - "layout": "default", - "tasks": [ - "readme" - ], - "plugins": [ - "gulp-format-md" - ], - "lint": { - "reflinks": true - }, - "reflinks": [ - "type-of", - "typeof", - "verb" - ] - } -} diff --git a/node_modules/snapdragon/node_modules/is-descriptor/package.json b/node_modules/snapdragon/node_modules/is-descriptor/package.json deleted file mode 100644 index a561bfe..0000000 --- a/node_modules/snapdragon/node_modules/is-descriptor/package.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "name": "is-descriptor", - "description": "Returns true if a value has the characteristics of a valid JavaScript descriptor. Works for data descriptors and accessor descriptors.", - "version": "0.1.6", - "homepage": "https://github.com/jonschlinkert/is-descriptor", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "contributors": [ - "Brian Woodward (https://twitter.com/doowb)", - "Jon Schlinkert (http://twitter.com/jonschlinkert)", - "(https://github.com/wtgtybhertgeghgtwtg)" - ], - "repository": "jonschlinkert/is-descriptor", - "bugs": { - "url": "https://github.com/jonschlinkert/is-descriptor/issues" - }, - "license": "MIT", - "files": [ - "index.js" - ], - "main": "index.js", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "devDependencies": { - "gulp-format-md": "^1.0.0", - "mocha": "^3.4.2" - }, - "keywords": [ - "accessor", - "check", - "data", - "descriptor", - "get", - "getter", - "is", - "keys", - "object", - "properties", - "property", - "set", - "setter", - "type", - "valid", - "value" - ], - "verb": { - "related": { - "list": [ - "is-accessor-descriptor", - "is-data-descriptor", - "is-descriptor", - "isobject" - ] - }, - "plugins": [ - "gulp-format-md" - ], - "toc": false, - "layout": "default", - "tasks": [ - "readme" - ], - "lint": { - "reflinks": true - } - } -} diff --git a/node_modules/snapdragon/package.json b/node_modules/snapdragon/package.json deleted file mode 100644 index e4c4e73..0000000 --- a/node_modules/snapdragon/package.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "name": "snapdragon", - "description": "Fast, pluggable and easy-to-use parser-renderer factory.", - "version": "0.8.2", - "homepage": "https://github.com/jonschlinkert/snapdragon", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "contributors": [ - "Brian Woodward (https://twitter.com/doowb)", - "Edward Betts (http://edwardbetts.com)", - "Jon Schlinkert (http://twitter.com/jonschlinkert)" - ], - "repository": "jonschlinkert/snapdragon", - "bugs": { - "url": "https://github.com/jonschlinkert/snapdragon/issues" - }, - "license": "MIT", - "files": [ - "index.js", - "lib" - ], - "main": "index.js", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "devDependencies": { - "gulp": "^3.9.1", - "gulp-eslint": "^3.0.1", - "gulp-format-md": "^0.1.10", - "gulp-istanbul": "^1.1.1", - "gulp-mocha": "^3.0.1", - "gulp-unused": "^0.2.0", - "mocha": "^3.0.2" - }, - "keywords": [ - "lexer", - "snapdragon" - ], - "verb": { - "toc": false, - "layout": "default", - "tasks": [ - "readme" - ], - "plugins": [ - "gulp-format-md" - ], - "related": { - "description": "These libraries use snapdragon:", - "list": [ - "braces", - "expand-brackets", - "extglob", - "micromatch" - ] - }, - "reflinks": [ - "css", - "pug", - "verb", - "verb-generate-readme" - ], - "lint": { - "reflinks": true - } - } -} diff --git a/node_modules/source-map-resolve/LICENSE b/node_modules/source-map-resolve/LICENSE deleted file mode 100644 index 2ae9757..0000000 --- a/node_modules/source-map-resolve/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014, 2015, 2016, 2017, 2018, 2019 Simon Lydell -Copyright (c) 2019 ZHAO Jinxiang - -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/source-map-resolve/changelog.md b/node_modules/source-map-resolve/changelog.md deleted file mode 100644 index 7b3f94b..0000000 --- a/node_modules/source-map-resolve/changelog.md +++ /dev/null @@ -1,108 +0,0 @@ -### Version 0.5.3 (2019-12-28) ### - -- Fixed: base64 encoded source maps now correctly decodes as utf-8. Previously, - non-ASCII characters could end up garbled. Thanks to ZHAO Jinxiang - (@xiaoxiangmoe)! (Note: This fix does not work in old evironments not - supporting both `TextDecoder` and `Uint8Array`.) -- Improved: Reduced size of the npm package. - -### Version 0.5.2 (2018-05-10) ### - -- Improved: Updated the version range of `atob` to disallow depending on `2.0.3` - which as a [security - vulnerability](https://snyk.io/test/npm/atob/2.0.3?severity=high&severity=medium&severity=low). - -### Version 0.5.1 (2017-10-21) ### - -- Fixed: URLs are now decoded before being passed to `read` in Node.js. This - allows reading files with spaces, for example. -- Fixed: Missing or empty `sources` fields (such as `sources: []`) in source - maps are now handled. Previously, such source maps would cause crashes or - callbacks never bing called. Now, an empty result is produced: - - ```js - sourcesResolved: [], - sourcesContent: [] - ``` - -### Version 0.5.0 (2016-02-28) ### - -- Improved: Errors now have a `sourceMapData` property that contain as much as - possible of the intended result of the function up until the error occurred. -- Changed: `resolveSources` and `resolve`, as well as their `*Sync` - alternatives, no longer fail when one single source fails to be fetched. - Instead, the `sourcesContent` array in the result object will contain error - objects for all failed sources, and strings otherwise. (Backwards-incompatible - change.) - -### Version 0.4.0 (2015-08-29) ### - -- Removed: The `ignoreSourceRoot` option of `resolveSources`. It has been - replaced with `sourceRoot: false`. (Backwards-incompatible change.) -- Added: The `sourceRoot` option of `resolveSources`. It not only allows to - ignore the source root, it also lets you replace it. -- Added: The `parseMapToJSON` method. -- Added: The `resolve` method now accepts `null, mapUrl, ...` as arguments, in - addition to the existing signature, which will read `mapUrl` instead of - looking for a sourceMappingURL in the code. - -### Version 0.3.1 (2014-08-16) ### - -- Improved: Updated the source-map-url dependency to 0.3.0. - - -### Version 0.3.0 (2014-07-02) ### - -- Removed: Argument checking. It’s not worth it. (Possibly - backwards-incompatible change.) -- Added: The `sourceRoot` property of source maps may now be ignored, which can - be useful when resolving sources outside of the browser. -- Added: It is now possible to resolve only the URLs of sources, without - reading them. - - -### Version 0.2.0 (2014-06-22) ### - -- Changed: The result of `resolveSources` is now an object, not an array. The - old result array is available in the `sourcesContent` property. - (Backwards-incompatible change.) -- Changed: `sources` has been renamed to `sourcesContent` in the result object - of `resolve`. (Backwards-incompatible change.) -- Added: `resolveSources` now also returns all sources fully resolved, in the - `sourcesResolved` property. -- Added: The result object of `resolve` now contains the `sourcesResolved` - property from `resolveSources`. - - -### Version 0.1.4 (2014-06-16) ### - -- Fixed: `sourcesContent` was mis-typed as `sourceContents`, which meant that - the `sourcesContent` property of source maps never was used when resolving - sources. - - -### Version 0.1.3 (2014-05-06) ### - -- Only documentation and meta-data changes. - - -### Version 0.1.2 (2014-03-23) ### - -- Improved: Source maps starting with `)]}'` are now parsed correctly. The spec - allows source maps to start with that character sequence to prevent XSSI - attacks. - - -### Version 0.1.1 (2014-03-06) ### - -- Improved: Make sourceRoot resolving more sensible. - - A source root such as `/scripts/subdir` is now treated as `/scripts/subdir/` - — that is, as a directory called “subdir”, not a file called “subdir”. - Pointing to a file as source root does not makes sense. - - - -### Version 0.1.0 (2014-03-03) ### - -- Initial release. diff --git a/node_modules/source-map-resolve/lib/decode-uri-component.js b/node_modules/source-map-resolve/lib/decode-uri-component.js deleted file mode 100644 index 0739c20..0000000 --- a/node_modules/source-map-resolve/lib/decode-uri-component.js +++ /dev/null @@ -1,8 +0,0 @@ -var decodeUriComponent = require("decode-uri-component") - -function customDecodeUriComponent(string) { - // `decodeUriComponent` turns `+` into ` `, but that's not wanted. - return decodeUriComponent(string.replace(/\+/g, "%2B")) -} - -module.exports = customDecodeUriComponent diff --git a/node_modules/source-map-resolve/lib/resolve-url.js b/node_modules/source-map-resolve/lib/resolve-url.js deleted file mode 100644 index e3a86c4..0000000 --- a/node_modules/source-map-resolve/lib/resolve-url.js +++ /dev/null @@ -1,9 +0,0 @@ -var url = require("url") - -function resolveUrl(/* ...urls */) { - return Array.prototype.reduce.call(arguments, function(resolved, nextUrl) { - return url.resolve(resolved, nextUrl) - }) -} - -module.exports = resolveUrl diff --git a/node_modules/source-map-resolve/lib/source-map-resolve-node.js b/node_modules/source-map-resolve/lib/source-map-resolve-node.js deleted file mode 100644 index 31ec3b2..0000000 --- a/node_modules/source-map-resolve/lib/source-map-resolve-node.js +++ /dev/null @@ -1,342 +0,0 @@ -var sourceMappingURL = require("source-map-url") - -var resolveUrl = require("./resolve-url") -var decodeUriComponent = require("./decode-uri-component") -var urix = require("urix") -var atob = require("atob") - - - -function callbackAsync(callback, error, result) { - setImmediate(function() { callback(error, result) }) -} - -function parseMapToJSON(string, data) { - try { - return JSON.parse(string.replace(/^\)\]\}'/, "")) - } catch (error) { - error.sourceMapData = data - throw error - } -} - -function readSync(read, url, data) { - var readUrl = decodeUriComponent(url) - try { - return String(read(readUrl)) - } catch (error) { - error.sourceMapData = data - throw error - } -} - - - -function resolveSourceMap(code, codeUrl, read, callback) { - var mapData - try { - mapData = resolveSourceMapHelper(code, codeUrl) - } catch (error) { - return callbackAsync(callback, error) - } - if (!mapData || mapData.map) { - return callbackAsync(callback, null, mapData) - } - var readUrl = decodeUriComponent(mapData.url) - read(readUrl, function(error, result) { - if (error) { - error.sourceMapData = mapData - return callback(error) - } - mapData.map = String(result) - try { - mapData.map = parseMapToJSON(mapData.map, mapData) - } catch (error) { - return callback(error) - } - callback(null, mapData) - }) -} - -function resolveSourceMapSync(code, codeUrl, read) { - var mapData = resolveSourceMapHelper(code, codeUrl) - if (!mapData || mapData.map) { - return mapData - } - mapData.map = readSync(read, mapData.url, mapData) - mapData.map = parseMapToJSON(mapData.map, mapData) - return mapData -} - -var dataUriRegex = /^data:([^,;]*)(;[^,;]*)*(?:,(.*))?$/ - -/** - * The media type for JSON text is application/json. - * - * {@link https://tools.ietf.org/html/rfc8259#section-11 | IANA Considerations } - * - * `text/json` is non-standard media type - */ -var jsonMimeTypeRegex = /^(?:application|text)\/json$/ - -/** - * JSON text exchanged between systems that are not part of a closed ecosystem - * MUST be encoded using UTF-8. - * - * {@link https://tools.ietf.org/html/rfc8259#section-8.1 | Character Encoding} - */ -var jsonCharacterEncoding = "utf-8" - -function base64ToBuf(b64) { - var binStr = atob(b64) - var len = binStr.length - var arr = new Uint8Array(len) - for (var i = 0; i < len; i++) { - arr[i] = binStr.charCodeAt(i) - } - return arr -} - -function decodeBase64String(b64) { - if (typeof TextDecoder === "undefined" || typeof Uint8Array === "undefined") { - return atob(b64) - } - var buf = base64ToBuf(b64); - // Note: `decoder.decode` method will throw a `DOMException` with the - // `"EncodingError"` value when an coding error is found. - var decoder = new TextDecoder(jsonCharacterEncoding, {fatal: true}) - return decoder.decode(buf); -} - -function resolveSourceMapHelper(code, codeUrl) { - codeUrl = urix(codeUrl) - - var url = sourceMappingURL.getFrom(code) - if (!url) { - return null - } - - var dataUri = url.match(dataUriRegex) - if (dataUri) { - var mimeType = dataUri[1] || "text/plain" - var lastParameter = dataUri[2] || "" - var encoded = dataUri[3] || "" - var data = { - sourceMappingURL: url, - url: null, - sourcesRelativeTo: codeUrl, - map: encoded - } - if (!jsonMimeTypeRegex.test(mimeType)) { - var error = new Error("Unuseful data uri mime type: " + mimeType) - error.sourceMapData = data - throw error - } - try { - data.map = parseMapToJSON( - lastParameter === ";base64" ? decodeBase64String(encoded) : decodeURIComponent(encoded), - data - ) - } catch (error) { - error.sourceMapData = data - throw error - } - return data - } - - var mapUrl = resolveUrl(codeUrl, url) - return { - sourceMappingURL: url, - url: mapUrl, - sourcesRelativeTo: mapUrl, - map: null - } -} - - - -function resolveSources(map, mapUrl, read, options, callback) { - if (typeof options === "function") { - callback = options - options = {} - } - var pending = map.sources ? map.sources.length : 0 - var result = { - sourcesResolved: [], - sourcesContent: [] - } - - if (pending === 0) { - callbackAsync(callback, null, result) - return - } - - var done = function() { - pending-- - if (pending === 0) { - callback(null, result) - } - } - - resolveSourcesHelper(map, mapUrl, options, function(fullUrl, sourceContent, index) { - result.sourcesResolved[index] = fullUrl - if (typeof sourceContent === "string") { - result.sourcesContent[index] = sourceContent - callbackAsync(done, null) - } else { - var readUrl = decodeUriComponent(fullUrl) - read(readUrl, function(error, source) { - result.sourcesContent[index] = error ? error : String(source) - done() - }) - } - }) -} - -function resolveSourcesSync(map, mapUrl, read, options) { - var result = { - sourcesResolved: [], - sourcesContent: [] - } - - if (!map.sources || map.sources.length === 0) { - return result - } - - resolveSourcesHelper(map, mapUrl, options, function(fullUrl, sourceContent, index) { - result.sourcesResolved[index] = fullUrl - if (read !== null) { - if (typeof sourceContent === "string") { - result.sourcesContent[index] = sourceContent - } else { - var readUrl = decodeUriComponent(fullUrl) - try { - result.sourcesContent[index] = String(read(readUrl)) - } catch (error) { - result.sourcesContent[index] = error - } - } - } - }) - - return result -} - -var endingSlash = /\/?$/ - -function resolveSourcesHelper(map, mapUrl, options, fn) { - options = options || {} - mapUrl = urix(mapUrl) - var fullUrl - var sourceContent - var sourceRoot - for (var index = 0, len = map.sources.length; index < len; index++) { - sourceRoot = null - if (typeof options.sourceRoot === "string") { - sourceRoot = options.sourceRoot - } else if (typeof map.sourceRoot === "string" && options.sourceRoot !== false) { - sourceRoot = map.sourceRoot - } - // If the sourceRoot is the empty string, it is equivalent to not setting - // the property at all. - if (sourceRoot === null || sourceRoot === '') { - fullUrl = resolveUrl(mapUrl, map.sources[index]) - } else { - // Make sure that the sourceRoot ends with a slash, so that `/scripts/subdir` becomes - // `/scripts/subdir/`, not `/scripts/`. Pointing to a file as source root - // does not make sense. - fullUrl = resolveUrl(mapUrl, sourceRoot.replace(endingSlash, "/"), map.sources[index]) - } - sourceContent = (map.sourcesContent || [])[index] - fn(fullUrl, sourceContent, index) - } -} - - - -function resolve(code, codeUrl, read, options, callback) { - if (typeof options === "function") { - callback = options - options = {} - } - if (code === null) { - var mapUrl = codeUrl - var data = { - sourceMappingURL: null, - url: mapUrl, - sourcesRelativeTo: mapUrl, - map: null - } - var readUrl = decodeUriComponent(mapUrl) - read(readUrl, function(error, result) { - if (error) { - error.sourceMapData = data - return callback(error) - } - data.map = String(result) - try { - data.map = parseMapToJSON(data.map, data) - } catch (error) { - return callback(error) - } - _resolveSources(data) - }) - } else { - resolveSourceMap(code, codeUrl, read, function(error, mapData) { - if (error) { - return callback(error) - } - if (!mapData) { - return callback(null, null) - } - _resolveSources(mapData) - }) - } - - function _resolveSources(mapData) { - resolveSources(mapData.map, mapData.sourcesRelativeTo, read, options, function(error, result) { - if (error) { - return callback(error) - } - mapData.sourcesResolved = result.sourcesResolved - mapData.sourcesContent = result.sourcesContent - callback(null, mapData) - }) - } -} - -function resolveSync(code, codeUrl, read, options) { - var mapData - if (code === null) { - var mapUrl = codeUrl - mapData = { - sourceMappingURL: null, - url: mapUrl, - sourcesRelativeTo: mapUrl, - map: null - } - mapData.map = readSync(read, mapUrl, mapData) - mapData.map = parseMapToJSON(mapData.map, mapData) - } else { - mapData = resolveSourceMapSync(code, codeUrl, read) - if (!mapData) { - return null - } - } - var result = resolveSourcesSync(mapData.map, mapData.sourcesRelativeTo, read, options) - mapData.sourcesResolved = result.sourcesResolved - mapData.sourcesContent = result.sourcesContent - return mapData -} - - - -module.exports = { - resolveSourceMap: resolveSourceMap, - resolveSourceMapSync: resolveSourceMapSync, - resolveSources: resolveSources, - resolveSourcesSync: resolveSourcesSync, - resolve: resolve, - resolveSync: resolveSync, - parseMapToJSON: parseMapToJSON -} diff --git a/node_modules/source-map-resolve/package.json b/node_modules/source-map-resolve/package.json deleted file mode 100644 index 78b6398..0000000 --- a/node_modules/source-map-resolve/package.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "source-map-resolve", - "version": "0.5.3", - "author": "Simon Lydell", - "license": "MIT", - "description": "Resolve the source map and/or sources for a generated file.", - "keywords": [ - "source map", - "sourcemap", - "source", - "map", - "sourceMappingURL", - "resolve", - "resolver", - "locate", - "locator", - "find", - "finder" - ], - "repository": "lydell/source-map-resolve", - "main": "lib/source-map-resolve-node.js", - "browser": "source-map-resolve.js", - "files": [ - "lib", - "source-map-resolve.js" - ], - "scripts": { - "lint": "jshint lib/ test/", - "unit": "node test/source-map-resolve.js && node test/windows.js", - "test": "npm run lint && npm run unit", - "build": "node generate-source-map-resolve.js" - }, - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - }, - "devDependencies": { - "Base64": "1.1.0", - "jshint": "2.10.3", - "setimmediate": "1.0.5", - "simple-asyncify": "1.0.0", - "tape": "4.12.1" - } -} \ No newline at end of file diff --git a/node_modules/source-map-resolve/readme.md b/node_modules/source-map-resolve/readme.md deleted file mode 100644 index 5796ba1..0000000 --- a/node_modules/source-map-resolve/readme.md +++ /dev/null @@ -1,231 +0,0 @@ -Overview [![Build Status](https://travis-ci.org/lydell/source-map-resolve.svg?branch=master)](https://travis-ci.org/lydell/source-map-resolve) -======== - -Resolve the source map and/or sources for a generated file. - -```js -var sourceMapResolve = require("source-map-resolve") -var sourceMap = require("source-map") - -var code = [ - "!function(){...}();", - "/*# sourceMappingURL=foo.js.map */" -].join("\n") - -sourceMapResolve.resolveSourceMap(code, "/js/foo.js", fs.readFile, function(error, result) { - if (error) { - return notifyFailure(error) - } - result - // { - // map: {file: "foo.js", mappings: "...", sources: ["/coffee/foo.coffee"], names: []}, - // url: "/js/foo.js.map", - // sourcesRelativeTo: "/js/foo.js.map", - // sourceMappingURL: "foo.js.map" - // } - - sourceMapResolve.resolveSources(result.map, result.sourcesRelativeTo, fs.readFile, function(error, result) { - if (error) { - return notifyFailure(error) - } - result - // { - // sourcesResolved: ["/coffee/foo.coffee"], - // sourcesContent: [""] - // } - }) -}) - -sourceMapResolve.resolve(code, "/js/foo.js", fs.readFile, function(error, result) { - if (error) { - return notifyFailure(error) - } - result - // { - // map: {file: "foo.js", mappings: "...", sources: ["/coffee/foo.coffee"], names: []}, - // url: "/js/foo.js.map", - // sourcesRelativeTo: "/js/foo.js.map", - // sourceMappingURL: "foo.js.map", - // sourcesResolved: ["/coffee/foo.coffee"], - // sourcesContent: [""] - // } - result.map.sourcesContent = result.sourcesContent - var map = new sourceMap.sourceMapConsumer(result.map) - map.sourceContentFor("/coffee/foo.coffee") - // "" -}) -``` - - -Installation -============ - -- `npm install source-map-resolve` -- `bower install source-map-resolve` -- `component install lydell/source-map-resolve` - -Works with CommonJS, AMD and browser globals, through UMD. - -Note: This module requires `setImmediate` and `atob`. -Use polyfills if needed, such as: - -- -- - - -Usage -===== - -### `sourceMapResolve.resolveSourceMap(code, codeUrl, read, callback)` ### - -- `code` is a string of code that may or may not contain a sourceMappingURL - comment. Such a comment is used to resolve the source map. -- `codeUrl` is the url to the file containing `code`. If the sourceMappingURL - is relative, it is resolved against `codeUrl`. -- `read(url, callback)` is a function that reads `url` and responds using - `callback(error, content)`. In Node.js you might want to use `fs.readFile`, - while in the browser you might want to use an asynchronus `XMLHttpRequest`. -- `callback(error, result)` is a function that is invoked with either an error - or `null` and the result. - -The result is an object with the following properties: - -- `map`: The source map for `code`, as an object (not a string). -- `url`: The url to the source map. If the source map came from a data uri, - this property is `null`, since then there is no url to it. -- `sourcesRelativeTo`: The url that the sources of the source map are relative - to. Since the sources are relative to the source map, and the url to the - source map is provided as the `url` property, this property might seem - superfluos. However, remember that the `url` property can be `null` if the - source map came from a data uri. If so, the sources are relative to the file - containing the data uri—`codeUrl`. This property will be identical to the - `url` property or `codeUrl`, whichever is appropriate. This way you can - conveniently resolve the sources without having to think about where the - source map came from. -- `sourceMappingURL`: The url of the sourceMappingURL comment in `code`. - -If `code` contains no sourceMappingURL, the result is `null`. - -### `sourceMapResolve.resolveSources(map, mapUrl, read, [options], callback)` ### - -- `map` is a source map, as an object (not a string). -- `mapUrl` is the url to the file containing `map`. Relative sources in the - source map, if any, are resolved against `mapUrl`. -- `read(url, callback)` is a function that reads `url` and responds using - `callback(error, content)`. In Node.js you might want to use `fs.readFile`, - while in the browser you might want to use an asynchronus `XMLHttpRequest`. -- `options` is an optional object with any of the following properties: - - `sourceRoot`: Override the `sourceRoot` property of the source map, which - might only be relevant when resolving sources in the browser. This lets you - bypass it when using the module outside of a browser, if needed. Pass a - string to replace the `sourceRoot` property with, or `false` to ignore it. - Defaults to `undefined`. -- `callback(error, result)` is a function that is invoked with either an error - or `null` and the result. - -The result is an object with the following properties: - -- `sourcesResolved`: The same as `map.sources`, except all the sources are - fully resolved. -- `sourcesContent`: An array with the contents of all sources in `map.sources`, - in the same order as `map.sources`. If getting the contents of a source fails, - an error object is put into the array instead. - -### `sourceMapResolve.resolve(code, codeUrl, read, [options], callback)` ### - -The arguments are identical to `sourceMapResolve.resolveSourceMap`, except that -you may also provide the same `options` as in `sourceMapResolve.resolveSources`. - -This is a convenience method that first resolves the source map and then its -sources. You could also do this by first calling -`sourceMapResolve.resolveSourceMap` and then `sourceMapResolve.resolveSources`. - -The result is identical to `sourceMapResolve.resolveSourceMap`, with the -properties from `sourceMapResolve.resolveSources` merged into it. - -There is one extra feature available, though. If `code` is `null`, `codeUrl` is -treated as a url to the source map instead of to `code`, and will be read. This -is handy if you _sometimes_ get the source map url from the `SourceMap: ` -header (see the [Notes] section). In this case, the `sourceMappingURL` property -of the result is `null`. - - -[Notes]: #notes - -### `sourceMapResolve.*Sync()` ### - -There are also sync versions of the three previous functions. They are identical -to the async versions, except: - -- They expect a sync reading function. In Node.js you might want to use - `fs.readFileSync`, while in the browser you might want to use a synchronus - `XMLHttpRequest`. -- They throw errors and return the result instead of using a callback. - -`sourceMapResolve.resolveSourcesSync` also accepts `null` as the `read` -parameter. The result is the same as when passing a function as the `read -parameter`, except that the `sourcesContent` property of the result will be an -empty array. In other words, the sources aren’t read. You only get the -`sourcesResolved` property. (This only supported in the synchronus version, since -there is no point doing it asynchronusly.) - -### `sourceMapResolve.parseMapToJSON(string, [data])` ### - -The spec says that if a source map (as a string) starts with `)]}'`, it should -be stripped off. This is to prevent XSSI attacks. This function does that and -returns the result of `JSON.parse`ing what’s left. - -If this function throws `error`, `error.sourceMapData === data`. - -### Errors - -All errors passed to callbacks or thrown by this module have a `sourceMapData` -property that contain as much as possible of the intended result of the function -up until the error occurred. - -Note that while the `map` property of result objects always is an object, -`error.sourceMapData.map` will be a string if parsing that string fails. - - -Note -==== - -This module resolves the source map for a given generated file by looking for a -sourceMappingURL comment. The spec defines yet a way to provide the URL to the -source map: By sending the `SourceMap: ` header along with the generated -file. Since this module doesn’t retrive the generated code for you (instead -_you_ give the generated code to the module), it’s up to you to look for such a -header when you retrieve the file (should the need arise). - - -Development -=========== - -Tests ------ - -First off, run `npm install` to install testing modules and browser polyfills. - -`npm test` lints the code and runs the test suite in Node.js. - -x-package.json5 ---------------- - -package.json, component.json and bower.json are all generated from -x-package.json5 by using [`xpkg`]. Only edit x-package.json5, and remember to -run `xpkg` before commiting! - -[`xpkg`]: https://github.com/kof/node-xpkg - -Generating the browser version ------------------------------- - -source-map-resolve.js is generated from source-map-resolve-node.js and -source-map-resolve-template.js. Only edit the two latter files, _not_ -source-map-resolve.js! To generate it, run `npm run build`. - - -License -======= - -[MIT](LICENSE). diff --git a/node_modules/source-map-resolve/source-map-resolve.js b/node_modules/source-map-resolve/source-map-resolve.js deleted file mode 100644 index 282b126..0000000 --- a/node_modules/source-map-resolve/source-map-resolve.js +++ /dev/null @@ -1,348 +0,0 @@ -// Note: source-map-resolve.js is generated from source-map-resolve-node.js and -// source-map-resolve-template.js. Only edit the two latter files, _not_ -// source-map-resolve.js! - -void (function(root, factory) { - if (typeof define === "function" && define.amd) { - define(["source-map-url", "resolve-url"], factory) - } else if (typeof exports === "object") { - var sourceMappingURL = require("source-map-url") - var resolveUrl = require("resolve-url") - module.exports = factory(sourceMappingURL, resolveUrl) - } else { - root.sourceMapResolve = factory(root.sourceMappingURL, root.resolveUrl) - } -}(this, function(sourceMappingURL, resolveUrl) { - - function callbackAsync(callback, error, result) { - setImmediate(function() { callback(error, result) }) - } - - function parseMapToJSON(string, data) { - try { - return JSON.parse(string.replace(/^\)\]\}'/, "")) - } catch (error) { - error.sourceMapData = data - throw error - } - } - - function readSync(read, url, data) { - var readUrl = url - try { - return String(read(readUrl)) - } catch (error) { - error.sourceMapData = data - throw error - } - } - - - - function resolveSourceMap(code, codeUrl, read, callback) { - var mapData - try { - mapData = resolveSourceMapHelper(code, codeUrl) - } catch (error) { - return callbackAsync(callback, error) - } - if (!mapData || mapData.map) { - return callbackAsync(callback, null, mapData) - } - var readUrl = mapData.url - read(readUrl, function(error, result) { - if (error) { - error.sourceMapData = mapData - return callback(error) - } - mapData.map = String(result) - try { - mapData.map = parseMapToJSON(mapData.map, mapData) - } catch (error) { - return callback(error) - } - callback(null, mapData) - }) - } - - function resolveSourceMapSync(code, codeUrl, read) { - var mapData = resolveSourceMapHelper(code, codeUrl) - if (!mapData || mapData.map) { - return mapData - } - mapData.map = readSync(read, mapData.url, mapData) - mapData.map = parseMapToJSON(mapData.map, mapData) - return mapData - } - - var dataUriRegex = /^data:([^,;]*)(;[^,;]*)*(?:,(.*))?$/ - - /** - * The media type for JSON text is application/json. - * - * {@link https://tools.ietf.org/html/rfc8259#section-11 | IANA Considerations } - * - * `text/json` is non-standard media type - */ - var jsonMimeTypeRegex = /^(?:application|text)\/json$/ - - /** - * JSON text exchanged between systems that are not part of a closed ecosystem - * MUST be encoded using UTF-8. - * - * {@link https://tools.ietf.org/html/rfc8259#section-8.1 | Character Encoding} - */ - var jsonCharacterEncoding = "utf-8" - - function base64ToBuf(b64) { - var binStr = atob(b64) - var len = binStr.length - var arr = new Uint8Array(len) - for (var i = 0; i < len; i++) { - arr[i] = binStr.charCodeAt(i) - } - return arr - } - - function decodeBase64String(b64) { - if (typeof TextDecoder === "undefined" || typeof Uint8Array === "undefined") { - return atob(b64) - } - var buf = base64ToBuf(b64); - // Note: `decoder.decode` method will throw a `DOMException` with the - // `"EncodingError"` value when an coding error is found. - var decoder = new TextDecoder(jsonCharacterEncoding, {fatal: true}) - return decoder.decode(buf); - } - - function resolveSourceMapHelper(code, codeUrl) { - var url = sourceMappingURL.getFrom(code) - if (!url) { - return null - } - - var dataUri = url.match(dataUriRegex) - if (dataUri) { - var mimeType = dataUri[1] || "text/plain" - var lastParameter = dataUri[2] || "" - var encoded = dataUri[3] || "" - var data = { - sourceMappingURL: url, - url: null, - sourcesRelativeTo: codeUrl, - map: encoded - } - if (!jsonMimeTypeRegex.test(mimeType)) { - var error = new Error("Unuseful data uri mime type: " + mimeType) - error.sourceMapData = data - throw error - } - try { - data.map = parseMapToJSON( - lastParameter === ";base64" ? decodeBase64String(encoded) : decodeURIComponent(encoded), - data - ) - } catch (error) { - error.sourceMapData = data - throw error - } - return data - } - - var mapUrl = resolveUrl(codeUrl, url) - return { - sourceMappingURL: url, - url: mapUrl, - sourcesRelativeTo: mapUrl, - map: null - } - } - - - - function resolveSources(map, mapUrl, read, options, callback) { - if (typeof options === "function") { - callback = options - options = {} - } - var pending = map.sources ? map.sources.length : 0 - var result = { - sourcesResolved: [], - sourcesContent: [] - } - - if (pending === 0) { - callbackAsync(callback, null, result) - return - } - - var done = function() { - pending-- - if (pending === 0) { - callback(null, result) - } - } - - resolveSourcesHelper(map, mapUrl, options, function(fullUrl, sourceContent, index) { - result.sourcesResolved[index] = fullUrl - if (typeof sourceContent === "string") { - result.sourcesContent[index] = sourceContent - callbackAsync(done, null) - } else { - var readUrl = fullUrl - read(readUrl, function(error, source) { - result.sourcesContent[index] = error ? error : String(source) - done() - }) - } - }) - } - - function resolveSourcesSync(map, mapUrl, read, options) { - var result = { - sourcesResolved: [], - sourcesContent: [] - } - - if (!map.sources || map.sources.length === 0) { - return result - } - - resolveSourcesHelper(map, mapUrl, options, function(fullUrl, sourceContent, index) { - result.sourcesResolved[index] = fullUrl - if (read !== null) { - if (typeof sourceContent === "string") { - result.sourcesContent[index] = sourceContent - } else { - var readUrl = fullUrl - try { - result.sourcesContent[index] = String(read(readUrl)) - } catch (error) { - result.sourcesContent[index] = error - } - } - } - }) - - return result - } - - var endingSlash = /\/?$/ - - function resolveSourcesHelper(map, mapUrl, options, fn) { - options = options || {} - var fullUrl - var sourceContent - var sourceRoot - for (var index = 0, len = map.sources.length; index < len; index++) { - sourceRoot = null - if (typeof options.sourceRoot === "string") { - sourceRoot = options.sourceRoot - } else if (typeof map.sourceRoot === "string" && options.sourceRoot !== false) { - sourceRoot = map.sourceRoot - } - // If the sourceRoot is the empty string, it is equivalent to not setting - // the property at all. - if (sourceRoot === null || sourceRoot === '') { - fullUrl = resolveUrl(mapUrl, map.sources[index]) - } else { - // Make sure that the sourceRoot ends with a slash, so that `/scripts/subdir` becomes - // `/scripts/subdir/`, not `/scripts/`. Pointing to a file as source root - // does not make sense. - fullUrl = resolveUrl(mapUrl, sourceRoot.replace(endingSlash, "/"), map.sources[index]) - } - sourceContent = (map.sourcesContent || [])[index] - fn(fullUrl, sourceContent, index) - } - } - - - - function resolve(code, codeUrl, read, options, callback) { - if (typeof options === "function") { - callback = options - options = {} - } - if (code === null) { - var mapUrl = codeUrl - var data = { - sourceMappingURL: null, - url: mapUrl, - sourcesRelativeTo: mapUrl, - map: null - } - var readUrl = mapUrl - read(readUrl, function(error, result) { - if (error) { - error.sourceMapData = data - return callback(error) - } - data.map = String(result) - try { - data.map = parseMapToJSON(data.map, data) - } catch (error) { - return callback(error) - } - _resolveSources(data) - }) - } else { - resolveSourceMap(code, codeUrl, read, function(error, mapData) { - if (error) { - return callback(error) - } - if (!mapData) { - return callback(null, null) - } - _resolveSources(mapData) - }) - } - - function _resolveSources(mapData) { - resolveSources(mapData.map, mapData.sourcesRelativeTo, read, options, function(error, result) { - if (error) { - return callback(error) - } - mapData.sourcesResolved = result.sourcesResolved - mapData.sourcesContent = result.sourcesContent - callback(null, mapData) - }) - } - } - - function resolveSync(code, codeUrl, read, options) { - var mapData - if (code === null) { - var mapUrl = codeUrl - mapData = { - sourceMappingURL: null, - url: mapUrl, - sourcesRelativeTo: mapUrl, - map: null - } - mapData.map = readSync(read, mapUrl, mapData) - mapData.map = parseMapToJSON(mapData.map, mapData) - } else { - mapData = resolveSourceMapSync(code, codeUrl, read) - if (!mapData) { - return null - } - } - var result = resolveSourcesSync(mapData.map, mapData.sourcesRelativeTo, read, options) - mapData.sourcesResolved = result.sourcesResolved - mapData.sourcesContent = result.sourcesContent - return mapData - } - - - - return { - resolveSourceMap: resolveSourceMap, - resolveSourceMapSync: resolveSourceMapSync, - resolveSources: resolveSources, - resolveSourcesSync: resolveSourcesSync, - resolve: resolve, - resolveSync: resolveSync, - parseMapToJSON: parseMapToJSON - } - -})); diff --git a/node_modules/source-map-url/LICENSE b/node_modules/source-map-url/LICENSE deleted file mode 100644 index 10052a9..0000000 --- a/node_modules/source-map-url/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 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/source-map-url/changelog.md b/node_modules/source-map-url/changelog.md deleted file mode 100644 index 61f1c7b..0000000 --- a/node_modules/source-map-url/changelog.md +++ /dev/null @@ -1,57 +0,0 @@ -### Version 0.4.1 (2021-02-01) ### - -- Improved: The package is now about 50% smaller, by excluding unnecessary - files. Thanks to Piotr Kuczynski (@pkuczynski)! - -### Version 0.4.0 (2015-11-12) ### - -- Changed: sourceMappingURL comments used to be matched only when placed at - the end of the script. However, since several commonly used JavaScript - libraries do not follow this convention and all popular web browsers accept - non-trailing comments, this has been revised. - - So now non-trailing SourceMappingURL comments are matched as well. - - -### Version 0.3.0 (2014-08-16) ### - -- Changed: sourceMappingURL comments used to be matched only if they appeared - on their own line. However, the spec only says: - - > The generated code may include a line at the end of the source, with the following form: - > - > //# sourceMappingURL= - - So now they are matched also when they appear on the same line as code. - -- Removed: The `.set()` method. I couldn’t decide how it should work - considering the above change. Moreover, it was unnecessarily complex (and - would have gotten worse) for very little gain. It is much easier to run - `.remove()` if needed, and then simply `code += "\n//# sourceMappingURL=" + - url` (using the appropriate comment syntax and newline). KISS. - -- Changed: The `.insertBefore()` method now always inserts the string exactly - before the sourceMappingURL comment; not before the newline before the - comment (if any). Moreover, it does not ensure that the comment will be on a - new line anymore. This is up to the caller. KISS. - -- Changed: The `.remove()` method no longer removes the newline before the - sourceMappingURL (if any). - -- Changed: Renamed `.get()` to `.getFrom()`. -- Changed: Renamed `.remove()` to `.removeFrom()`. - -- Added: The `.existsIn()` method. - - -### Version 0.2.0 (2014-02-23) ### - -- Changed: A space is no longer inserted before the closing comment syntax. If - such a space is desired, it needs to be put in the closing comment syntax - itself (such as `["/*", " */"]` instead of `["/*", "*/"]`). (Backwards - incompatible change.) - - -### Version 0.1.0 (2014-02-22) ### - -- Initial release. diff --git a/node_modules/source-map-url/package.json b/node_modules/source-map-url/package.json deleted file mode 100644 index 6fd96d3..0000000 --- a/node_modules/source-map-url/package.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "source-map-url", - "version": "0.4.1", - "author": "Simon Lydell", - "license": "MIT", - "description": "Tools for working with sourceMappingURL comments.", - "keywords": [ - "source map", - "sourceMappingURL", - "comment", - "annotation" - ], - "main": "source-map-url.js", - "repository": "lydell/source-map-url", - "scripts": { - "lint": "jshint source-map-url.js test/ ", - "unit": "mocha", - "test": "npm run lint && npm run unit" - }, - "devDependencies": { - "mocha": "~1.17.1", - "expect.js": "~0.3.1", - "jshint": "~2.4.3" - }, - "testling": { - "harness": "mocha", - "files": "test/*.js", - "browsers": [ - "ie/8..latest", - "chrome/latest", - "firefox/latest", - "opera/12", - "opera/latest", - "safari/5", - "iphone/6", - "android-browser/4" - ] - } -} diff --git a/node_modules/source-map-url/readme.md b/node_modules/source-map-url/readme.md deleted file mode 100644 index 216de5e..0000000 --- a/node_modules/source-map-url/readme.md +++ /dev/null @@ -1,97 +0,0 @@ -Overview [![Build Status](https://travis-ci.org/lydell/source-map-url.png?branch=master)](https://travis-ci.org/lydell/source-map-url) -======== - -[![browser support](https://ci.testling.com/lydell/source-map-url.png)](https://ci.testling.com/lydell/source-map-url) - -Tools for working with sourceMappingURL comments. - -```js -var sourceMappingURL = require("source-map-url") - -var code = [ - "!function(){...}();", - "/*# sourceMappingURL=foo.js.map */" -].join("\n") - -sourceMappingURL.existsIn(code) -// true - -sourceMappingURL.getFrom(code) -// foo.js.map - -code = sourceMappingURL.insertBefore(code, "// License: MIT\n") -// !function(){...}(); -// // License: MIT -// /*# sourceMappingURL=foo.js.map */ - -code = sourceMappingURL.removeFrom(code) -// !function(){...}(); -// // License: MIT - -sourceMappingURL.existsIn(code) -// false - -sourceMappingURL.getFrom(code) -// null - -code += "//# sourceMappingURL=/other/file.js.map" -// !function(){...}(); -// // License: MIT -// //# sourceMappingURL=/other/file.js.map -``` - - -Installation -============ - -- `npm install source-map-url` -- `bower install source-map-url` -- `component install lydell/source-map-url` - -Works with CommonJS, AMD and browser globals, through UMD. - - -Usage -===== - -### `sourceMappingURL.getFrom(code)` ### - -Returns the url of the sourceMappingURL comment in `code`. Returns `null` if -there is no such comment. - -### `sourceMappingURL.existsIn(code)` ### - -Returns `true` if there is a sourceMappingURL comment in `code`, or `false` -otherwise. - -### `sourceMappingURL.removeFrom(code)` ### - -Removes the sourceMappingURL comment in `code`. Does nothing if there is no -such comment. Returns the updated `code`. - -### `sourceMappingURL.insertBefore(code, string)` ### - -Inserts `string` before the sourceMappingURL comment in `code`. Appends -`string` to `code` if there is no such comment. - -Lets you append something to a file without worrying about burying the -sourceMappingURL comment (by keeping it at the end of the file). - -### `sourceMappingURL.regex` ### - -The regex that is used to match sourceMappingURL comments. It matches both `//` -and `/**/` comments, thus supporting both JavaScript and CSS. - - -Tests -===== - -Start by running `npm test`, which lints the code and runs the test suite in Node.js. - -To run the tests in a browser, run `testling` (`npm install -g testling`) or `testling -u`. - - -License -======= - -[The X11 (“MIT”) License](LICENSE). diff --git a/node_modules/source-map-url/source-map-url.js b/node_modules/source-map-url/source-map-url.js deleted file mode 100644 index 1724cb7..0000000 --- a/node_modules/source-map-url/source-map-url.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2014 Simon Lydell -// X11 (“MIT”) Licensed. (See LICENSE.) - -void (function(root, factory) { - if (typeof define === "function" && define.amd) { - define(factory) - } else if (typeof exports === "object") { - module.exports = factory() - } else { - root.sourceMappingURL = factory() - } -}(this, function() { - - var innerRegex = /[#@] sourceMappingURL=([^\s'"]*)/ - - var regex = RegExp( - "(?:" + - "/\\*" + - "(?:\\s*\r?\n(?://)?)?" + - "(?:" + innerRegex.source + ")" + - "\\s*" + - "\\*/" + - "|" + - "//(?:" + innerRegex.source + ")" + - ")" + - "\\s*" - ) - - return { - - regex: regex, - _innerRegex: innerRegex, - - getFrom: function(code) { - var match = code.match(regex) - return (match ? match[1] || match[2] || "" : null) - }, - - existsIn: function(code) { - return regex.test(code) - }, - - removeFrom: function(code) { - return code.replace(regex, "") - }, - - insertBefore: function(code, string) { - var match = code.match(regex) - if (match) { - return code.slice(0, match.index) + string + code.slice(match.index) - } else { - return code + string - } - } - } - -})); diff --git a/node_modules/source-map/CHANGELOG.md b/node_modules/source-map/CHANGELOG.md deleted file mode 100644 index 3a8c066..0000000 --- a/node_modules/source-map/CHANGELOG.md +++ /dev/null @@ -1,301 +0,0 @@ -# Change Log - -## 0.5.6 - -* Fix for regression when people were using numbers as names in source maps. See - #236. - -## 0.5.5 - -* Fix "regression" of unsupported, implementation behavior that half the world - happens to have come to depend on. See #235. - -* Fix regression involving function hoisting in SpiderMonkey. See #233. - -## 0.5.4 - -* Large performance improvements to source-map serialization. See #228 and #229. - -## 0.5.3 - -* Do not include unnecessary distribution files. See - commit ef7006f8d1647e0a83fdc60f04f5a7ca54886f86. - -## 0.5.2 - -* Include browser distributions of the library in package.json's `files`. See - issue #212. - -## 0.5.1 - -* Fix latent bugs in IndexedSourceMapConsumer.prototype._parseMappings. See - ff05274becc9e6e1295ed60f3ea090d31d843379. - -## 0.5.0 - -* Node 0.8 is no longer supported. - -* Use webpack instead of dryice for bundling. - -* Big speedups serializing source maps. See pull request #203. - -* Fix a bug with `SourceMapConsumer.prototype.sourceContentFor` and sources that - explicitly start with the source root. See issue #199. - -## 0.4.4 - -* Fix an issue where using a `SourceMapGenerator` after having created a - `SourceMapConsumer` from it via `SourceMapConsumer.fromSourceMap` failed. See - issue #191. - -* Fix an issue with where `SourceMapGenerator` would mistakenly consider - different mappings as duplicates of each other and avoid generating them. See - issue #192. - -## 0.4.3 - -* A very large number of performance improvements, particularly when parsing - source maps. Collectively about 75% of time shaved off of the source map - parsing benchmark! - -* Fix a bug in `SourceMapConsumer.prototype.allGeneratedPositionsFor` and fuzzy - searching in the presence of a column option. See issue #177. - -* Fix a bug with joining a source and its source root when the source is above - the root. See issue #182. - -* Add the `SourceMapConsumer.prototype.hasContentsOfAllSources` method to - determine when all sources' contents are inlined into the source map. See - issue #190. - -## 0.4.2 - -* Add an `.npmignore` file so that the benchmarks aren't pulled down by - dependent projects. Issue #169. - -* Add an optional `column` argument to - `SourceMapConsumer.prototype.allGeneratedPositionsFor` and better handle lines - with no mappings. Issues #172 and #173. - -## 0.4.1 - -* Fix accidentally defining a global variable. #170. - -## 0.4.0 - -* The default direction for fuzzy searching was changed back to its original - direction. See #164. - -* There is now a `bias` option you can supply to `SourceMapConsumer` to control - the fuzzy searching direction. See #167. - -* About an 8% speed up in parsing source maps. See #159. - -* Added a benchmark for parsing and generating source maps. - -## 0.3.0 - -* Change the default direction that searching for positions fuzzes when there is - not an exact match. See #154. - -* Support for environments using json2.js for JSON serialization. See #156. - -## 0.2.0 - -* Support for consuming "indexed" source maps which do not have any remote - sections. See pull request #127. This introduces a minor backwards - incompatibility if you are monkey patching `SourceMapConsumer.prototype` - methods. - -## 0.1.43 - -* Performance improvements for `SourceMapGenerator` and `SourceNode`. See issue - #148 for some discussion and issues #150, #151, and #152 for implementations. - -## 0.1.42 - -* Fix an issue where `SourceNode`s from different versions of the source-map - library couldn't be used in conjunction with each other. See issue #142. - -## 0.1.41 - -* Fix a bug with getting the source content of relative sources with a "./" - prefix. See issue #145 and [Bug 1090768](bugzil.la/1090768). - -* Add the `SourceMapConsumer.prototype.computeColumnSpans` method to compute the - column span of each mapping. - -* Add the `SourceMapConsumer.prototype.allGeneratedPositionsFor` method to find - all generated positions associated with a given original source and line. - -## 0.1.40 - -* Performance improvements for parsing source maps in SourceMapConsumer. - -## 0.1.39 - -* Fix a bug where setting a source's contents to null before any source content - had been set before threw a TypeError. See issue #131. - -## 0.1.38 - -* Fix a bug where finding relative paths from an empty path were creating - absolute paths. See issue #129. - -## 0.1.37 - -* Fix a bug where if the source root was an empty string, relative source paths - would turn into absolute source paths. Issue #124. - -## 0.1.36 - -* Allow the `names` mapping property to be an empty string. Issue #121. - -## 0.1.35 - -* A third optional parameter was added to `SourceNode.fromStringWithSourceMap` - to specify a path that relative sources in the second parameter should be - relative to. Issue #105. - -* If no file property is given to a `SourceMapGenerator`, then the resulting - source map will no longer have a `null` file property. The property will - simply not exist. Issue #104. - -* Fixed a bug where consecutive newlines were ignored in `SourceNode`s. - Issue #116. - -## 0.1.34 - -* Make `SourceNode` work with windows style ("\r\n") newlines. Issue #103. - -* Fix bug involving source contents and the - `SourceMapGenerator.prototype.applySourceMap`. Issue #100. - -## 0.1.33 - -* Fix some edge cases surrounding path joining and URL resolution. - -* Add a third parameter for relative path to - `SourceMapGenerator.prototype.applySourceMap`. - -* Fix issues with mappings and EOLs. - -## 0.1.32 - -* Fixed a bug where SourceMapConsumer couldn't handle negative relative columns - (issue 92). - -* Fixed test runner to actually report number of failed tests as its process - exit code. - -* Fixed a typo when reporting bad mappings (issue 87). - -## 0.1.31 - -* Delay parsing the mappings in SourceMapConsumer until queried for a source - location. - -* Support Sass source maps (which at the time of writing deviate from the spec - in small ways) in SourceMapConsumer. - -## 0.1.30 - -* Do not join source root with a source, when the source is a data URI. - -* Extend the test runner to allow running single specific test files at a time. - -* Performance improvements in `SourceNode.prototype.walk` and - `SourceMapConsumer.prototype.eachMapping`. - -* Source map browser builds will now work inside Workers. - -* Better error messages when attempting to add an invalid mapping to a - `SourceMapGenerator`. - -## 0.1.29 - -* Allow duplicate entries in the `names` and `sources` arrays of source maps - (usually from TypeScript) we are parsing. Fixes github issue 72. - -## 0.1.28 - -* Skip duplicate mappings when creating source maps from SourceNode; github - issue 75. - -## 0.1.27 - -* Don't throw an error when the `file` property is missing in SourceMapConsumer, - we don't use it anyway. - -## 0.1.26 - -* Fix SourceNode.fromStringWithSourceMap for empty maps. Fixes github issue 70. - -## 0.1.25 - -* Make compatible with browserify - -## 0.1.24 - -* Fix issue with absolute paths and `file://` URIs. See - https://bugzilla.mozilla.org/show_bug.cgi?id=885597 - -## 0.1.23 - -* Fix issue with absolute paths and sourcesContent, github issue 64. - -## 0.1.22 - -* Ignore duplicate mappings in SourceMapGenerator. Fixes github issue 21. - -## 0.1.21 - -* Fixed handling of sources that start with a slash so that they are relative to - the source root's host. - -## 0.1.20 - -* Fixed github issue #43: absolute URLs aren't joined with the source root - anymore. - -## 0.1.19 - -* Using Travis CI to run tests. - -## 0.1.18 - -* Fixed a bug in the handling of sourceRoot. - -## 0.1.17 - -* Added SourceNode.fromStringWithSourceMap. - -## 0.1.16 - -* Added missing documentation. - -* Fixed the generating of empty mappings in SourceNode. - -## 0.1.15 - -* Added SourceMapGenerator.applySourceMap. - -## 0.1.14 - -* The sourceRoot is now handled consistently. - -## 0.1.13 - -* Added SourceMapGenerator.fromSourceMap. - -## 0.1.12 - -* SourceNode now generates empty mappings too. - -## 0.1.11 - -* Added name support to SourceNode. - -## 0.1.10 - -* Added sourcesContent support to the customer and generator. diff --git a/node_modules/source-map/LICENSE b/node_modules/source-map/LICENSE deleted file mode 100644 index ed1b7cf..0000000 --- a/node_modules/source-map/LICENSE +++ /dev/null @@ -1,28 +0,0 @@ - -Copyright (c) 2009-2011, Mozilla Foundation and contributors -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the names of the Mozilla Foundation nor the names of project - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/node_modules/source-map/README.md b/node_modules/source-map/README.md deleted file mode 100644 index 3281339..0000000 --- a/node_modules/source-map/README.md +++ /dev/null @@ -1,729 +0,0 @@ -# Source Map - -[![Build Status](https://travis-ci.org/mozilla/source-map.png?branch=master)](https://travis-ci.org/mozilla/source-map) - -[![NPM](https://nodei.co/npm/source-map.png?downloads=true&downloadRank=true)](https://www.npmjs.com/package/source-map) - -This is a library to generate and consume the source map format -[described here][format]. - -[format]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit - -## Use with Node - - $ npm install source-map - -## Use on the Web - - - --------------------------------------------------------------------------------- - - - - - -## Table of Contents - -- [Examples](#examples) - - [Consuming a source map](#consuming-a-source-map) - - [Generating a source map](#generating-a-source-map) - - [With SourceNode (high level API)](#with-sourcenode-high-level-api) - - [With SourceMapGenerator (low level API)](#with-sourcemapgenerator-low-level-api) -- [API](#api) - - [SourceMapConsumer](#sourcemapconsumer) - - [new SourceMapConsumer(rawSourceMap)](#new-sourcemapconsumerrawsourcemap) - - [SourceMapConsumer.prototype.computeColumnSpans()](#sourcemapconsumerprototypecomputecolumnspans) - - [SourceMapConsumer.prototype.originalPositionFor(generatedPosition)](#sourcemapconsumerprototypeoriginalpositionforgeneratedposition) - - [SourceMapConsumer.prototype.generatedPositionFor(originalPosition)](#sourcemapconsumerprototypegeneratedpositionfororiginalposition) - - [SourceMapConsumer.prototype.allGeneratedPositionsFor(originalPosition)](#sourcemapconsumerprototypeallgeneratedpositionsfororiginalposition) - - [SourceMapConsumer.prototype.hasContentsOfAllSources()](#sourcemapconsumerprototypehascontentsofallsources) - - [SourceMapConsumer.prototype.sourceContentFor(source[, returnNullOnMissing])](#sourcemapconsumerprototypesourcecontentforsource-returnnullonmissing) - - [SourceMapConsumer.prototype.eachMapping(callback, context, order)](#sourcemapconsumerprototypeeachmappingcallback-context-order) - - [SourceMapGenerator](#sourcemapgenerator) - - [new SourceMapGenerator([startOfSourceMap])](#new-sourcemapgeneratorstartofsourcemap) - - [SourceMapGenerator.fromSourceMap(sourceMapConsumer)](#sourcemapgeneratorfromsourcemapsourcemapconsumer) - - [SourceMapGenerator.prototype.addMapping(mapping)](#sourcemapgeneratorprototypeaddmappingmapping) - - [SourceMapGenerator.prototype.setSourceContent(sourceFile, sourceContent)](#sourcemapgeneratorprototypesetsourcecontentsourcefile-sourcecontent) - - [SourceMapGenerator.prototype.applySourceMap(sourceMapConsumer[, sourceFile[, sourceMapPath]])](#sourcemapgeneratorprototypeapplysourcemapsourcemapconsumer-sourcefile-sourcemappath) - - [SourceMapGenerator.prototype.toString()](#sourcemapgeneratorprototypetostring) - - [SourceNode](#sourcenode) - - [new SourceNode([line, column, source[, chunk[, name]]])](#new-sourcenodeline-column-source-chunk-name) - - [SourceNode.fromStringWithSourceMap(code, sourceMapConsumer[, relativePath])](#sourcenodefromstringwithsourcemapcode-sourcemapconsumer-relativepath) - - [SourceNode.prototype.add(chunk)](#sourcenodeprototypeaddchunk) - - [SourceNode.prototype.prepend(chunk)](#sourcenodeprototypeprependchunk) - - [SourceNode.prototype.setSourceContent(sourceFile, sourceContent)](#sourcenodeprototypesetsourcecontentsourcefile-sourcecontent) - - [SourceNode.prototype.walk(fn)](#sourcenodeprototypewalkfn) - - [SourceNode.prototype.walkSourceContents(fn)](#sourcenodeprototypewalksourcecontentsfn) - - [SourceNode.prototype.join(sep)](#sourcenodeprototypejoinsep) - - [SourceNode.prototype.replaceRight(pattern, replacement)](#sourcenodeprototypereplacerightpattern-replacement) - - [SourceNode.prototype.toString()](#sourcenodeprototypetostring) - - [SourceNode.prototype.toStringWithSourceMap([startOfSourceMap])](#sourcenodeprototypetostringwithsourcemapstartofsourcemap) - - - -## Examples - -### Consuming a source map - -```js -var rawSourceMap = { - version: 3, - file: 'min.js', - names: ['bar', 'baz', 'n'], - sources: ['one.js', 'two.js'], - sourceRoot: 'http://example.com/www/js/', - mappings: 'CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOC,IAAID;CCDb,IAAI,IAAM,SAAUE,GAClB,OAAOA' -}; - -var smc = new SourceMapConsumer(rawSourceMap); - -console.log(smc.sources); -// [ 'http://example.com/www/js/one.js', -// 'http://example.com/www/js/two.js' ] - -console.log(smc.originalPositionFor({ - line: 2, - column: 28 -})); -// { source: 'http://example.com/www/js/two.js', -// line: 2, -// column: 10, -// name: 'n' } - -console.log(smc.generatedPositionFor({ - source: 'http://example.com/www/js/two.js', - line: 2, - column: 10 -})); -// { line: 2, column: 28 } - -smc.eachMapping(function (m) { - // ... -}); -``` - -### Generating a source map - -In depth guide: -[**Compiling to JavaScript, and Debugging with Source Maps**](https://hacks.mozilla.org/2013/05/compiling-to-javascript-and-debugging-with-source-maps/) - -#### With SourceNode (high level API) - -```js -function compile(ast) { - switch (ast.type) { - case 'BinaryExpression': - return new SourceNode( - ast.location.line, - ast.location.column, - ast.location.source, - [compile(ast.left), " + ", compile(ast.right)] - ); - case 'Literal': - return new SourceNode( - ast.location.line, - ast.location.column, - ast.location.source, - String(ast.value) - ); - // ... - default: - throw new Error("Bad AST"); - } -} - -var ast = parse("40 + 2", "add.js"); -console.log(compile(ast).toStringWithSourceMap({ - file: 'add.js' -})); -// { code: '40 + 2', -// map: [object SourceMapGenerator] } -``` - -#### With SourceMapGenerator (low level API) - -```js -var map = new SourceMapGenerator({ - file: "source-mapped.js" -}); - -map.addMapping({ - generated: { - line: 10, - column: 35 - }, - source: "foo.js", - original: { - line: 33, - column: 2 - }, - name: "christopher" -}); - -console.log(map.toString()); -// '{"version":3,"file":"source-mapped.js","sources":["foo.js"],"names":["christopher"],"mappings":";;;;;;;;;mCAgCEA"}' -``` - -## API - -Get a reference to the module: - -```js -// Node.js -var sourceMap = require('source-map'); - -// Browser builds -var sourceMap = window.sourceMap; - -// Inside Firefox -const sourceMap = require("devtools/toolkit/sourcemap/source-map.js"); -``` - -### SourceMapConsumer - -A SourceMapConsumer instance represents a parsed source map which we can query -for information about the original file positions by giving it a file position -in the generated source. - -#### new SourceMapConsumer(rawSourceMap) - -The only parameter is the raw source map (either as a string which can be -`JSON.parse`'d, or an object). According to the spec, source maps have the -following attributes: - -* `version`: Which version of the source map spec this map is following. - -* `sources`: An array of URLs to the original source files. - -* `names`: An array of identifiers which can be referenced by individual - mappings. - -* `sourceRoot`: Optional. The URL root from which all sources are relative. - -* `sourcesContent`: Optional. An array of contents of the original source files. - -* `mappings`: A string of base64 VLQs which contain the actual mappings. - -* `file`: Optional. The generated filename this source map is associated with. - -```js -var consumer = new sourceMap.SourceMapConsumer(rawSourceMapJsonData); -``` - -#### SourceMapConsumer.prototype.computeColumnSpans() - -Compute the last column for each generated mapping. The last column is -inclusive. - -```js -// Before: -consumer.allGeneratedPositionsFor({ line: 2, source: "foo.coffee" }) -// [ { line: 2, -// column: 1 }, -// { line: 2, -// column: 10 }, -// { line: 2, -// column: 20 } ] - -consumer.computeColumnSpans(); - -// After: -consumer.allGeneratedPositionsFor({ line: 2, source: "foo.coffee" }) -// [ { line: 2, -// column: 1, -// lastColumn: 9 }, -// { line: 2, -// column: 10, -// lastColumn: 19 }, -// { line: 2, -// column: 20, -// lastColumn: Infinity } ] - -``` - -#### SourceMapConsumer.prototype.originalPositionFor(generatedPosition) - -Returns the original source, line, and column information for the generated -source's line and column positions provided. The only argument is an object with -the following properties: - -* `line`: The line number in the generated source. - -* `column`: The column number in the generated source. - -* `bias`: Either `SourceMapConsumer.GREATEST_LOWER_BOUND` or - `SourceMapConsumer.LEAST_UPPER_BOUND`. Specifies whether to return the closest - element that is smaller than or greater than the one we are searching for, - respectively, if the exact element cannot be found. Defaults to - `SourceMapConsumer.GREATEST_LOWER_BOUND`. - -and an object is returned with the following properties: - -* `source`: The original source file, or null if this information is not - available. - -* `line`: The line number in the original source, or null if this information is - not available. - -* `column`: The column number in the original source, or null if this - information is not available. - -* `name`: The original identifier, or null if this information is not available. - -```js -consumer.originalPositionFor({ line: 2, column: 10 }) -// { source: 'foo.coffee', -// line: 2, -// column: 2, -// name: null } - -consumer.originalPositionFor({ line: 99999999999999999, column: 999999999999999 }) -// { source: null, -// line: null, -// column: null, -// name: null } -``` - -#### SourceMapConsumer.prototype.generatedPositionFor(originalPosition) - -Returns the generated line and column information for the original source, -line, and column positions provided. The only argument is an object with -the following properties: - -* `source`: The filename of the original source. - -* `line`: The line number in the original source. - -* `column`: The column number in the original source. - -and an object is returned with the following properties: - -* `line`: The line number in the generated source, or null. - -* `column`: The column number in the generated source, or null. - -```js -consumer.generatedPositionFor({ source: "example.js", line: 2, column: 10 }) -// { line: 1, -// column: 56 } -``` - -#### SourceMapConsumer.prototype.allGeneratedPositionsFor(originalPosition) - -Returns all generated line and column information for the original source, line, -and column provided. If no column is provided, returns all mappings -corresponding to a either the line we are searching for or the next closest line -that has any mappings. Otherwise, returns all mappings corresponding to the -given line and either the column we are searching for or the next closest column -that has any offsets. - -The only argument is an object with the following properties: - -* `source`: The filename of the original source. - -* `line`: The line number in the original source. - -* `column`: Optional. The column number in the original source. - -and an array of objects is returned, each with the following properties: - -* `line`: The line number in the generated source, or null. - -* `column`: The column number in the generated source, or null. - -```js -consumer.allGeneratedpositionsfor({ line: 2, source: "foo.coffee" }) -// [ { line: 2, -// column: 1 }, -// { line: 2, -// column: 10 }, -// { line: 2, -// column: 20 } ] -``` - -#### SourceMapConsumer.prototype.hasContentsOfAllSources() - -Return true if we have the embedded source content for every source listed in -the source map, false otherwise. - -In other words, if this method returns `true`, then -`consumer.sourceContentFor(s)` will succeed for every source `s` in -`consumer.sources`. - -```js -// ... -if (consumer.hasContentsOfAllSources()) { - consumerReadyCallback(consumer); -} else { - fetchSources(consumer, consumerReadyCallback); -} -// ... -``` - -#### SourceMapConsumer.prototype.sourceContentFor(source[, returnNullOnMissing]) - -Returns the original source content for the source provided. The only -argument is the URL of the original source file. - -If the source content for the given source is not found, then an error is -thrown. Optionally, pass `true` as the second param to have `null` returned -instead. - -```js -consumer.sources -// [ "my-cool-lib.clj" ] - -consumer.sourceContentFor("my-cool-lib.clj") -// "..." - -consumer.sourceContentFor("this is not in the source map"); -// Error: "this is not in the source map" is not in the source map - -consumer.sourceContentFor("this is not in the source map", true); -// null -``` - -#### SourceMapConsumer.prototype.eachMapping(callback, context, order) - -Iterate over each mapping between an original source/line/column and a -generated line/column in this source map. - -* `callback`: The function that is called with each mapping. Mappings have the - form `{ source, generatedLine, generatedColumn, originalLine, originalColumn, - name }` - -* `context`: Optional. If specified, this object will be the value of `this` - every time that `callback` is called. - -* `order`: Either `SourceMapConsumer.GENERATED_ORDER` or - `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to iterate over - the mappings sorted by the generated file's line/column order or the - original's source/line/column order, respectively. Defaults to - `SourceMapConsumer.GENERATED_ORDER`. - -```js -consumer.eachMapping(function (m) { console.log(m); }) -// ... -// { source: 'illmatic.js', -// generatedLine: 1, -// generatedColumn: 0, -// originalLine: 1, -// originalColumn: 0, -// name: null } -// { source: 'illmatic.js', -// generatedLine: 2, -// generatedColumn: 0, -// originalLine: 2, -// originalColumn: 0, -// name: null } -// ... -``` -### SourceMapGenerator - -An instance of the SourceMapGenerator represents a source map which is being -built incrementally. - -#### new SourceMapGenerator([startOfSourceMap]) - -You may pass an object with the following properties: - -* `file`: The filename of the generated source that this source map is - associated with. - -* `sourceRoot`: A root for all relative URLs in this source map. - -* `skipValidation`: Optional. When `true`, disables validation of mappings as - they are added. This can improve performance but should be used with - discretion, as a last resort. Even then, one should avoid using this flag when - running tests, if possible. - -```js -var generator = new sourceMap.SourceMapGenerator({ - file: "my-generated-javascript-file.js", - sourceRoot: "http://example.com/app/js/" -}); -``` - -#### SourceMapGenerator.fromSourceMap(sourceMapConsumer) - -Creates a new `SourceMapGenerator` from an existing `SourceMapConsumer` instance. - -* `sourceMapConsumer` The SourceMap. - -```js -var generator = sourceMap.SourceMapGenerator.fromSourceMap(consumer); -``` - -#### SourceMapGenerator.prototype.addMapping(mapping) - -Add a single mapping from original source line and column to the generated -source's line and column for this source map being created. The mapping object -should have the following properties: - -* `generated`: An object with the generated line and column positions. - -* `original`: An object with the original line and column positions. - -* `source`: The original source file (relative to the sourceRoot). - -* `name`: An optional original token name for this mapping. - -```js -generator.addMapping({ - source: "module-one.scm", - original: { line: 128, column: 0 }, - generated: { line: 3, column: 456 } -}) -``` - -#### SourceMapGenerator.prototype.setSourceContent(sourceFile, sourceContent) - -Set the source content for an original source file. - -* `sourceFile` the URL of the original source file. - -* `sourceContent` the content of the source file. - -```js -generator.setSourceContent("module-one.scm", - fs.readFileSync("path/to/module-one.scm")) -``` - -#### SourceMapGenerator.prototype.applySourceMap(sourceMapConsumer[, sourceFile[, sourceMapPath]]) - -Applies a SourceMap for a source file to the SourceMap. -Each mapping to the supplied source file is rewritten using the -supplied SourceMap. Note: The resolution for the resulting mappings -is the minimum of this map and the supplied map. - -* `sourceMapConsumer`: The SourceMap to be applied. - -* `sourceFile`: Optional. The filename of the source file. - If omitted, sourceMapConsumer.file will be used, if it exists. - Otherwise an error will be thrown. - -* `sourceMapPath`: Optional. The dirname of the path to the SourceMap - to be applied. If relative, it is relative to the SourceMap. - - This parameter is needed when the two SourceMaps aren't in the same - directory, and the SourceMap to be applied contains relative source - paths. If so, those relative source paths need to be rewritten - relative to the SourceMap. - - If omitted, it is assumed that both SourceMaps are in the same directory, - thus not needing any rewriting. (Supplying `'.'` has the same effect.) - -#### SourceMapGenerator.prototype.toString() - -Renders the source map being generated to a string. - -```js -generator.toString() -// '{"version":3,"sources":["module-one.scm"],"names":[],"mappings":"...snip...","file":"my-generated-javascript-file.js","sourceRoot":"http://example.com/app/js/"}' -``` - -### SourceNode - -SourceNodes provide a way to abstract over interpolating and/or concatenating -snippets of generated JavaScript source code, while maintaining the line and -column information associated between those snippets and the original source -code. This is useful as the final intermediate representation a compiler might -use before outputting the generated JS and source map. - -#### new SourceNode([line, column, source[, chunk[, name]]]) - -* `line`: The original line number associated with this source node, or null if - it isn't associated with an original line. - -* `column`: The original column number associated with this source node, or null - if it isn't associated with an original column. - -* `source`: The original source's filename; null if no filename is provided. - -* `chunk`: Optional. Is immediately passed to `SourceNode.prototype.add`, see - below. - -* `name`: Optional. The original identifier. - -```js -var node = new SourceNode(1, 2, "a.cpp", [ - new SourceNode(3, 4, "b.cpp", "extern int status;\n"), - new SourceNode(5, 6, "c.cpp", "std::string* make_string(size_t n);\n"), - new SourceNode(7, 8, "d.cpp", "int main(int argc, char** argv) {}\n"), -]); -``` - -#### SourceNode.fromStringWithSourceMap(code, sourceMapConsumer[, relativePath]) - -Creates a SourceNode from generated code and a SourceMapConsumer. - -* `code`: The generated code - -* `sourceMapConsumer` The SourceMap for the generated code - -* `relativePath` The optional path that relative sources in `sourceMapConsumer` - should be relative to. - -```js -var consumer = new SourceMapConsumer(fs.readFileSync("path/to/my-file.js.map", "utf8")); -var node = SourceNode.fromStringWithSourceMap(fs.readFileSync("path/to/my-file.js"), - consumer); -``` - -#### SourceNode.prototype.add(chunk) - -Add a chunk of generated JS to this source node. - -* `chunk`: A string snippet of generated JS code, another instance of - `SourceNode`, or an array where each member is one of those things. - -```js -node.add(" + "); -node.add(otherNode); -node.add([leftHandOperandNode, " + ", rightHandOperandNode]); -``` - -#### SourceNode.prototype.prepend(chunk) - -Prepend a chunk of generated JS to this source node. - -* `chunk`: A string snippet of generated JS code, another instance of - `SourceNode`, or an array where each member is one of those things. - -```js -node.prepend("/** Build Id: f783haef86324gf **/\n\n"); -``` - -#### SourceNode.prototype.setSourceContent(sourceFile, sourceContent) - -Set the source content for a source file. This will be added to the -`SourceMap` in the `sourcesContent` field. - -* `sourceFile`: The filename of the source file - -* `sourceContent`: The content of the source file - -```js -node.setSourceContent("module-one.scm", - fs.readFileSync("path/to/module-one.scm")) -``` - -#### SourceNode.prototype.walk(fn) - -Walk over the tree of JS snippets in this node and its children. The walking -function is called once for each snippet of JS and is passed that snippet and -the its original associated source's line/column location. - -* `fn`: The traversal function. - -```js -var node = new SourceNode(1, 2, "a.js", [ - new SourceNode(3, 4, "b.js", "uno"), - "dos", - [ - "tres", - new SourceNode(5, 6, "c.js", "quatro") - ] -]); - -node.walk(function (code, loc) { console.log("WALK:", code, loc); }) -// WALK: uno { source: 'b.js', line: 3, column: 4, name: null } -// WALK: dos { source: 'a.js', line: 1, column: 2, name: null } -// WALK: tres { source: 'a.js', line: 1, column: 2, name: null } -// WALK: quatro { source: 'c.js', line: 5, column: 6, name: null } -``` - -#### SourceNode.prototype.walkSourceContents(fn) - -Walk over the tree of SourceNodes. The walking function is called for each -source file content and is passed the filename and source content. - -* `fn`: The traversal function. - -```js -var a = new SourceNode(1, 2, "a.js", "generated from a"); -a.setSourceContent("a.js", "original a"); -var b = new SourceNode(1, 2, "b.js", "generated from b"); -b.setSourceContent("b.js", "original b"); -var c = new SourceNode(1, 2, "c.js", "generated from c"); -c.setSourceContent("c.js", "original c"); - -var node = new SourceNode(null, null, null, [a, b, c]); -node.walkSourceContents(function (source, contents) { console.log("WALK:", source, ":", contents); }) -// WALK: a.js : original a -// WALK: b.js : original b -// WALK: c.js : original c -``` - -#### SourceNode.prototype.join(sep) - -Like `Array.prototype.join` except for SourceNodes. Inserts the separator -between each of this source node's children. - -* `sep`: The separator. - -```js -var lhs = new SourceNode(1, 2, "a.rs", "my_copy"); -var operand = new SourceNode(3, 4, "a.rs", "="); -var rhs = new SourceNode(5, 6, "a.rs", "orig.clone()"); - -var node = new SourceNode(null, null, null, [ lhs, operand, rhs ]); -var joinedNode = node.join(" "); -``` - -#### SourceNode.prototype.replaceRight(pattern, replacement) - -Call `String.prototype.replace` on the very right-most source snippet. Useful -for trimming white space from the end of a source node, etc. - -* `pattern`: The pattern to replace. - -* `replacement`: The thing to replace the pattern with. - -```js -// Trim trailing white space. -node.replaceRight(/\s*$/, ""); -``` - -#### SourceNode.prototype.toString() - -Return the string representation of this source node. Walks over the tree and -concatenates all the various snippets together to one string. - -```js -var node = new SourceNode(1, 2, "a.js", [ - new SourceNode(3, 4, "b.js", "uno"), - "dos", - [ - "tres", - new SourceNode(5, 6, "c.js", "quatro") - ] -]); - -node.toString() -// 'unodostresquatro' -``` - -#### SourceNode.prototype.toStringWithSourceMap([startOfSourceMap]) - -Returns the string representation of this tree of source nodes, plus a -SourceMapGenerator which contains all the mappings between the generated and -original sources. - -The arguments are the same as those to `new SourceMapGenerator`. - -```js -var node = new SourceNode(1, 2, "a.js", [ - new SourceNode(3, 4, "b.js", "uno"), - "dos", - [ - "tres", - new SourceNode(5, 6, "c.js", "quatro") - ] -]); - -node.toStringWithSourceMap({ file: "my-output-file.js" }) -// { code: 'unodostresquatro', -// map: [object SourceMapGenerator] } -``` diff --git a/node_modules/source-map/dist/source-map.debug.js b/node_modules/source-map/dist/source-map.debug.js deleted file mode 100644 index b5ab638..0000000 --- a/node_modules/source-map/dist/source-map.debug.js +++ /dev/null @@ -1,3091 +0,0 @@ -(function webpackUniversalModuleDefinition(root, factory) { - if(typeof exports === 'object' && typeof module === 'object') - module.exports = factory(); - else if(typeof define === 'function' && define.amd) - define([], factory); - else if(typeof exports === 'object') - exports["sourceMap"] = factory(); - else - root["sourceMap"] = factory(); -})(this, function() { -return /******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) -/******/ return installedModules[moduleId].exports; -/******/ -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ exports: {}, -/******/ id: moduleId, -/******/ loaded: false -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.loaded = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = ""; -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(0); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */ -/***/ (function(module, exports, __webpack_require__) { - - /* - * Copyright 2009-2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE.txt or: - * http://opensource.org/licenses/BSD-3-Clause - */ - exports.SourceMapGenerator = __webpack_require__(1).SourceMapGenerator; - exports.SourceMapConsumer = __webpack_require__(7).SourceMapConsumer; - exports.SourceNode = __webpack_require__(10).SourceNode; - - -/***/ }), -/* 1 */ -/***/ (function(module, exports, __webpack_require__) { - - /* -*- Mode: js; js-indent-level: 2; -*- */ - /* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - - var base64VLQ = __webpack_require__(2); - var util = __webpack_require__(4); - var ArraySet = __webpack_require__(5).ArraySet; - var MappingList = __webpack_require__(6).MappingList; - - /** - * An instance of the SourceMapGenerator represents a source map which is - * being built incrementally. You may pass an object with the following - * properties: - * - * - file: The filename of the generated source. - * - sourceRoot: A root for all relative URLs in this source map. - */ - function SourceMapGenerator(aArgs) { - if (!aArgs) { - aArgs = {}; - } - this._file = util.getArg(aArgs, 'file', null); - this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null); - this._skipValidation = util.getArg(aArgs, 'skipValidation', false); - this._sources = new ArraySet(); - this._names = new ArraySet(); - this._mappings = new MappingList(); - this._sourcesContents = null; - } - - SourceMapGenerator.prototype._version = 3; - - /** - * Creates a new SourceMapGenerator based on a SourceMapConsumer - * - * @param aSourceMapConsumer The SourceMap. - */ - SourceMapGenerator.fromSourceMap = - function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) { - var sourceRoot = aSourceMapConsumer.sourceRoot; - var generator = new SourceMapGenerator({ - file: aSourceMapConsumer.file, - sourceRoot: sourceRoot - }); - aSourceMapConsumer.eachMapping(function (mapping) { - var newMapping = { - generated: { - line: mapping.generatedLine, - column: mapping.generatedColumn - } - }; - - if (mapping.source != null) { - newMapping.source = mapping.source; - if (sourceRoot != null) { - newMapping.source = util.relative(sourceRoot, newMapping.source); - } - - newMapping.original = { - line: mapping.originalLine, - column: mapping.originalColumn - }; - - if (mapping.name != null) { - newMapping.name = mapping.name; - } - } - - generator.addMapping(newMapping); - }); - aSourceMapConsumer.sources.forEach(function (sourceFile) { - var content = aSourceMapConsumer.sourceContentFor(sourceFile); - if (content != null) { - generator.setSourceContent(sourceFile, content); - } - }); - return generator; - }; - - /** - * Add a single mapping from original source line and column to the generated - * source's line and column for this source map being created. The mapping - * object should have the following properties: - * - * - generated: An object with the generated line and column positions. - * - original: An object with the original line and column positions. - * - source: The original source file (relative to the sourceRoot). - * - name: An optional original token name for this mapping. - */ - SourceMapGenerator.prototype.addMapping = - function SourceMapGenerator_addMapping(aArgs) { - var generated = util.getArg(aArgs, 'generated'); - var original = util.getArg(aArgs, 'original', null); - var source = util.getArg(aArgs, 'source', null); - var name = util.getArg(aArgs, 'name', null); - - if (!this._skipValidation) { - this._validateMapping(generated, original, source, name); - } - - if (source != null) { - source = String(source); - if (!this._sources.has(source)) { - this._sources.add(source); - } - } - - if (name != null) { - name = String(name); - if (!this._names.has(name)) { - this._names.add(name); - } - } - - this._mappings.add({ - generatedLine: generated.line, - generatedColumn: generated.column, - originalLine: original != null && original.line, - originalColumn: original != null && original.column, - source: source, - name: name - }); - }; - - /** - * Set the source content for a source file. - */ - SourceMapGenerator.prototype.setSourceContent = - function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) { - var source = aSourceFile; - if (this._sourceRoot != null) { - source = util.relative(this._sourceRoot, source); - } - - if (aSourceContent != null) { - // Add the source content to the _sourcesContents map. - // Create a new _sourcesContents map if the property is null. - if (!this._sourcesContents) { - this._sourcesContents = Object.create(null); - } - this._sourcesContents[util.toSetString(source)] = aSourceContent; - } else if (this._sourcesContents) { - // Remove the source file from the _sourcesContents map. - // If the _sourcesContents map is empty, set the property to null. - delete this._sourcesContents[util.toSetString(source)]; - if (Object.keys(this._sourcesContents).length === 0) { - this._sourcesContents = null; - } - } - }; - - /** - * Applies the mappings of a sub-source-map for a specific source file to the - * source map being generated. Each mapping to the supplied source file is - * rewritten using the supplied source map. Note: The resolution for the - * resulting mappings is the minimium of this map and the supplied map. - * - * @param aSourceMapConsumer The source map to be applied. - * @param aSourceFile Optional. The filename of the source file. - * If omitted, SourceMapConsumer's file property will be used. - * @param aSourceMapPath Optional. The dirname of the path to the source map - * to be applied. If relative, it is relative to the SourceMapConsumer. - * This parameter is needed when the two source maps aren't in the same - * directory, and the source map to be applied contains relative source - * paths. If so, those relative source paths need to be rewritten - * relative to the SourceMapGenerator. - */ - SourceMapGenerator.prototype.applySourceMap = - function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) { - var sourceFile = aSourceFile; - // If aSourceFile is omitted, we will use the file property of the SourceMap - if (aSourceFile == null) { - if (aSourceMapConsumer.file == null) { - throw new Error( - 'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' + - 'or the source map\'s "file" property. Both were omitted.' - ); - } - sourceFile = aSourceMapConsumer.file; - } - var sourceRoot = this._sourceRoot; - // Make "sourceFile" relative if an absolute Url is passed. - if (sourceRoot != null) { - sourceFile = util.relative(sourceRoot, sourceFile); - } - // Applying the SourceMap can add and remove items from the sources and - // the names array. - var newSources = new ArraySet(); - var newNames = new ArraySet(); - - // Find mappings for the "sourceFile" - this._mappings.unsortedForEach(function (mapping) { - if (mapping.source === sourceFile && mapping.originalLine != null) { - // Check if it can be mapped by the source map, then update the mapping. - var original = aSourceMapConsumer.originalPositionFor({ - line: mapping.originalLine, - column: mapping.originalColumn - }); - if (original.source != null) { - // Copy mapping - mapping.source = original.source; - if (aSourceMapPath != null) { - mapping.source = util.join(aSourceMapPath, mapping.source) - } - if (sourceRoot != null) { - mapping.source = util.relative(sourceRoot, mapping.source); - } - mapping.originalLine = original.line; - mapping.originalColumn = original.column; - if (original.name != null) { - mapping.name = original.name; - } - } - } - - var source = mapping.source; - if (source != null && !newSources.has(source)) { - newSources.add(source); - } - - var name = mapping.name; - if (name != null && !newNames.has(name)) { - newNames.add(name); - } - - }, this); - this._sources = newSources; - this._names = newNames; - - // Copy sourcesContents of applied map. - aSourceMapConsumer.sources.forEach(function (sourceFile) { - var content = aSourceMapConsumer.sourceContentFor(sourceFile); - if (content != null) { - if (aSourceMapPath != null) { - sourceFile = util.join(aSourceMapPath, sourceFile); - } - if (sourceRoot != null) { - sourceFile = util.relative(sourceRoot, sourceFile); - } - this.setSourceContent(sourceFile, content); - } - }, this); - }; - - /** - * A mapping can have one of the three levels of data: - * - * 1. Just the generated position. - * 2. The Generated position, original position, and original source. - * 3. Generated and original position, original source, as well as a name - * token. - * - * To maintain consistency, we validate that any new mapping being added falls - * in to one of these categories. - */ - SourceMapGenerator.prototype._validateMapping = - function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource, - aName) { - // When aOriginal is truthy but has empty values for .line and .column, - // it is most likely a programmer error. In this case we throw a very - // specific error message to try to guide them the right way. - // For example: https://github.com/Polymer/polymer-bundler/pull/519 - if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') { - throw new Error( - 'original.line and original.column are not numbers -- you probably meant to omit ' + - 'the original mapping entirely and only map the generated position. If so, pass ' + - 'null for the original mapping instead of an object with empty or null values.' - ); - } - - if (aGenerated && 'line' in aGenerated && 'column' in aGenerated - && aGenerated.line > 0 && aGenerated.column >= 0 - && !aOriginal && !aSource && !aName) { - // Case 1. - return; - } - else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated - && aOriginal && 'line' in aOriginal && 'column' in aOriginal - && aGenerated.line > 0 && aGenerated.column >= 0 - && aOriginal.line > 0 && aOriginal.column >= 0 - && aSource) { - // Cases 2 and 3. - return; - } - else { - throw new Error('Invalid mapping: ' + JSON.stringify({ - generated: aGenerated, - source: aSource, - original: aOriginal, - name: aName - })); - } - }; - - /** - * Serialize the accumulated mappings in to the stream of base 64 VLQs - * specified by the source map format. - */ - SourceMapGenerator.prototype._serializeMappings = - function SourceMapGenerator_serializeMappings() { - var previousGeneratedColumn = 0; - var previousGeneratedLine = 1; - var previousOriginalColumn = 0; - var previousOriginalLine = 0; - var previousName = 0; - var previousSource = 0; - var result = ''; - var next; - var mapping; - var nameIdx; - var sourceIdx; - - var mappings = this._mappings.toArray(); - for (var i = 0, len = mappings.length; i < len; i++) { - mapping = mappings[i]; - next = '' - - if (mapping.generatedLine !== previousGeneratedLine) { - previousGeneratedColumn = 0; - while (mapping.generatedLine !== previousGeneratedLine) { - next += ';'; - previousGeneratedLine++; - } - } - else { - if (i > 0) { - if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) { - continue; - } - next += ','; - } - } - - next += base64VLQ.encode(mapping.generatedColumn - - previousGeneratedColumn); - previousGeneratedColumn = mapping.generatedColumn; - - if (mapping.source != null) { - sourceIdx = this._sources.indexOf(mapping.source); - next += base64VLQ.encode(sourceIdx - previousSource); - previousSource = sourceIdx; - - // lines are stored 0-based in SourceMap spec version 3 - next += base64VLQ.encode(mapping.originalLine - 1 - - previousOriginalLine); - previousOriginalLine = mapping.originalLine - 1; - - next += base64VLQ.encode(mapping.originalColumn - - previousOriginalColumn); - previousOriginalColumn = mapping.originalColumn; - - if (mapping.name != null) { - nameIdx = this._names.indexOf(mapping.name); - next += base64VLQ.encode(nameIdx - previousName); - previousName = nameIdx; - } - } - - result += next; - } - - return result; - }; - - SourceMapGenerator.prototype._generateSourcesContent = - function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) { - return aSources.map(function (source) { - if (!this._sourcesContents) { - return null; - } - if (aSourceRoot != null) { - source = util.relative(aSourceRoot, source); - } - var key = util.toSetString(source); - return Object.prototype.hasOwnProperty.call(this._sourcesContents, key) - ? this._sourcesContents[key] - : null; - }, this); - }; - - /** - * Externalize the source map. - */ - SourceMapGenerator.prototype.toJSON = - function SourceMapGenerator_toJSON() { - var map = { - version: this._version, - sources: this._sources.toArray(), - names: this._names.toArray(), - mappings: this._serializeMappings() - }; - if (this._file != null) { - map.file = this._file; - } - if (this._sourceRoot != null) { - map.sourceRoot = this._sourceRoot; - } - if (this._sourcesContents) { - map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot); - } - - return map; - }; - - /** - * Render the source map being generated to a string. - */ - SourceMapGenerator.prototype.toString = - function SourceMapGenerator_toString() { - return JSON.stringify(this.toJSON()); - }; - - exports.SourceMapGenerator = SourceMapGenerator; - - -/***/ }), -/* 2 */ -/***/ (function(module, exports, __webpack_require__) { - - /* -*- Mode: js; js-indent-level: 2; -*- */ - /* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - * - * Based on the Base 64 VLQ implementation in Closure Compiler: - * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java - * - * Copyright 2011 The Closure Compiler Authors. All rights reserved. - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - - var base64 = __webpack_require__(3); - - // A single base 64 digit can contain 6 bits of data. For the base 64 variable - // length quantities we use in the source map spec, the first bit is the sign, - // the next four bits are the actual value, and the 6th bit is the - // continuation bit. The continuation bit tells us whether there are more - // digits in this value following this digit. - // - // Continuation - // | Sign - // | | - // V V - // 101011 - - var VLQ_BASE_SHIFT = 5; - - // binary: 100000 - var VLQ_BASE = 1 << VLQ_BASE_SHIFT; - - // binary: 011111 - var VLQ_BASE_MASK = VLQ_BASE - 1; - - // binary: 100000 - var VLQ_CONTINUATION_BIT = VLQ_BASE; - - /** - * Converts from a two-complement value to a value where the sign bit is - * placed in the least significant bit. For example, as decimals: - * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary) - * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary) - */ - function toVLQSigned(aValue) { - return aValue < 0 - ? ((-aValue) << 1) + 1 - : (aValue << 1) + 0; - } - - /** - * Converts to a two-complement value from a value where the sign bit is - * placed in the least significant bit. For example, as decimals: - * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1 - * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2 - */ - function fromVLQSigned(aValue) { - var isNegative = (aValue & 1) === 1; - var shifted = aValue >> 1; - return isNegative - ? -shifted - : shifted; - } - - /** - * Returns the base 64 VLQ encoded value. - */ - exports.encode = function base64VLQ_encode(aValue) { - var encoded = ""; - var digit; - - var vlq = toVLQSigned(aValue); - - do { - digit = vlq & VLQ_BASE_MASK; - vlq >>>= VLQ_BASE_SHIFT; - if (vlq > 0) { - // There are still more digits in this value, so we must make sure the - // continuation bit is marked. - digit |= VLQ_CONTINUATION_BIT; - } - encoded += base64.encode(digit); - } while (vlq > 0); - - return encoded; - }; - - /** - * Decodes the next base 64 VLQ value from the given string and returns the - * value and the rest of the string via the out parameter. - */ - exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) { - var strLen = aStr.length; - var result = 0; - var shift = 0; - var continuation, digit; - - do { - if (aIndex >= strLen) { - throw new Error("Expected more digits in base 64 VLQ value."); - } - - digit = base64.decode(aStr.charCodeAt(aIndex++)); - if (digit === -1) { - throw new Error("Invalid base64 digit: " + aStr.charAt(aIndex - 1)); - } - - continuation = !!(digit & VLQ_CONTINUATION_BIT); - digit &= VLQ_BASE_MASK; - result = result + (digit << shift); - shift += VLQ_BASE_SHIFT; - } while (continuation); - - aOutParam.value = fromVLQSigned(result); - aOutParam.rest = aIndex; - }; - - -/***/ }), -/* 3 */ -/***/ (function(module, exports) { - - /* -*- Mode: js; js-indent-level: 2; -*- */ - /* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - - var intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split(''); - - /** - * Encode an integer in the range of 0 to 63 to a single base 64 digit. - */ - exports.encode = function (number) { - if (0 <= number && number < intToCharMap.length) { - return intToCharMap[number]; - } - throw new TypeError("Must be between 0 and 63: " + number); - }; - - /** - * Decode a single base 64 character code digit to an integer. Returns -1 on - * failure. - */ - exports.decode = function (charCode) { - var bigA = 65; // 'A' - var bigZ = 90; // 'Z' - - var littleA = 97; // 'a' - var littleZ = 122; // 'z' - - var zero = 48; // '0' - var nine = 57; // '9' - - var plus = 43; // '+' - var slash = 47; // '/' - - var littleOffset = 26; - var numberOffset = 52; - - // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ - if (bigA <= charCode && charCode <= bigZ) { - return (charCode - bigA); - } - - // 26 - 51: abcdefghijklmnopqrstuvwxyz - if (littleA <= charCode && charCode <= littleZ) { - return (charCode - littleA + littleOffset); - } - - // 52 - 61: 0123456789 - if (zero <= charCode && charCode <= nine) { - return (charCode - zero + numberOffset); - } - - // 62: + - if (charCode == plus) { - return 62; - } - - // 63: / - if (charCode == slash) { - return 63; - } - - // Invalid base64 digit. - return -1; - }; - - -/***/ }), -/* 4 */ -/***/ (function(module, exports) { - - /* -*- Mode: js; js-indent-level: 2; -*- */ - /* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - - /** - * This is a helper function for getting values from parameter/options - * objects. - * - * @param args The object we are extracting values from - * @param name The name of the property we are getting. - * @param defaultValue An optional value to return if the property is missing - * from the object. If this is not specified and the property is missing, an - * error will be thrown. - */ - function getArg(aArgs, aName, aDefaultValue) { - if (aName in aArgs) { - return aArgs[aName]; - } else if (arguments.length === 3) { - return aDefaultValue; - } else { - throw new Error('"' + aName + '" is a required argument.'); - } - } - exports.getArg = getArg; - - var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/; - var dataUrlRegexp = /^data:.+\,.+$/; - - function urlParse(aUrl) { - var match = aUrl.match(urlRegexp); - if (!match) { - return null; - } - return { - scheme: match[1], - auth: match[2], - host: match[3], - port: match[4], - path: match[5] - }; - } - exports.urlParse = urlParse; - - function urlGenerate(aParsedUrl) { - var url = ''; - if (aParsedUrl.scheme) { - url += aParsedUrl.scheme + ':'; - } - url += '//'; - if (aParsedUrl.auth) { - url += aParsedUrl.auth + '@'; - } - if (aParsedUrl.host) { - url += aParsedUrl.host; - } - if (aParsedUrl.port) { - url += ":" + aParsedUrl.port - } - if (aParsedUrl.path) { - url += aParsedUrl.path; - } - return url; - } - exports.urlGenerate = urlGenerate; - - /** - * Normalizes a path, or the path portion of a URL: - * - * - Replaces consecutive slashes with one slash. - * - Removes unnecessary '.' parts. - * - Removes unnecessary '/..' parts. - * - * Based on code in the Node.js 'path' core module. - * - * @param aPath The path or url to normalize. - */ - function normalize(aPath) { - var path = aPath; - var url = urlParse(aPath); - if (url) { - if (!url.path) { - return aPath; - } - path = url.path; - } - var isAbsolute = exports.isAbsolute(path); - - var parts = path.split(/\/+/); - for (var part, up = 0, i = parts.length - 1; i >= 0; i--) { - part = parts[i]; - if (part === '.') { - parts.splice(i, 1); - } else if (part === '..') { - up++; - } else if (up > 0) { - if (part === '') { - // The first part is blank if the path is absolute. Trying to go - // above the root is a no-op. Therefore we can remove all '..' parts - // directly after the root. - parts.splice(i + 1, up); - up = 0; - } else { - parts.splice(i, 2); - up--; - } - } - } - path = parts.join('/'); - - if (path === '') { - path = isAbsolute ? '/' : '.'; - } - - if (url) { - url.path = path; - return urlGenerate(url); - } - return path; - } - exports.normalize = normalize; - - /** - * Joins two paths/URLs. - * - * @param aRoot The root path or URL. - * @param aPath The path or URL to be joined with the root. - * - * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a - * scheme-relative URL: Then the scheme of aRoot, if any, is prepended - * first. - * - Otherwise aPath is a path. If aRoot is a URL, then its path portion - * is updated with the result and aRoot is returned. Otherwise the result - * is returned. - * - If aPath is absolute, the result is aPath. - * - Otherwise the two paths are joined with a slash. - * - Joining for example 'http://' and 'www.example.com' is also supported. - */ - function join(aRoot, aPath) { - if (aRoot === "") { - aRoot = "."; - } - if (aPath === "") { - aPath = "."; - } - var aPathUrl = urlParse(aPath); - var aRootUrl = urlParse(aRoot); - if (aRootUrl) { - aRoot = aRootUrl.path || '/'; - } - - // `join(foo, '//www.example.org')` - if (aPathUrl && !aPathUrl.scheme) { - if (aRootUrl) { - aPathUrl.scheme = aRootUrl.scheme; - } - return urlGenerate(aPathUrl); - } - - if (aPathUrl || aPath.match(dataUrlRegexp)) { - return aPath; - } - - // `join('http://', 'www.example.com')` - if (aRootUrl && !aRootUrl.host && !aRootUrl.path) { - aRootUrl.host = aPath; - return urlGenerate(aRootUrl); - } - - var joined = aPath.charAt(0) === '/' - ? aPath - : normalize(aRoot.replace(/\/+$/, '') + '/' + aPath); - - if (aRootUrl) { - aRootUrl.path = joined; - return urlGenerate(aRootUrl); - } - return joined; - } - exports.join = join; - - exports.isAbsolute = function (aPath) { - return aPath.charAt(0) === '/' || !!aPath.match(urlRegexp); - }; - - /** - * Make a path relative to a URL or another path. - * - * @param aRoot The root path or URL. - * @param aPath The path or URL to be made relative to aRoot. - */ - function relative(aRoot, aPath) { - if (aRoot === "") { - aRoot = "."; - } - - aRoot = aRoot.replace(/\/$/, ''); - - // It is possible for the path to be above the root. In this case, simply - // checking whether the root is a prefix of the path won't work. Instead, we - // need to remove components from the root one by one, until either we find - // a prefix that fits, or we run out of components to remove. - var level = 0; - while (aPath.indexOf(aRoot + '/') !== 0) { - var index = aRoot.lastIndexOf("/"); - if (index < 0) { - return aPath; - } - - // If the only part of the root that is left is the scheme (i.e. http://, - // file:///, etc.), one or more slashes (/), or simply nothing at all, we - // have exhausted all components, so the path is not relative to the root. - aRoot = aRoot.slice(0, index); - if (aRoot.match(/^([^\/]+:\/)?\/*$/)) { - return aPath; - } - - ++level; - } - - // Make sure we add a "../" for each component we removed from the root. - return Array(level + 1).join("../") + aPath.substr(aRoot.length + 1); - } - exports.relative = relative; - - var supportsNullProto = (function () { - var obj = Object.create(null); - return !('__proto__' in obj); - }()); - - function identity (s) { - return s; - } - - /** - * Because behavior goes wacky when you set `__proto__` on objects, we - * have to prefix all the strings in our set with an arbitrary character. - * - * See https://github.com/mozilla/source-map/pull/31 and - * https://github.com/mozilla/source-map/issues/30 - * - * @param String aStr - */ - function toSetString(aStr) { - if (isProtoString(aStr)) { - return '$' + aStr; - } - - return aStr; - } - exports.toSetString = supportsNullProto ? identity : toSetString; - - function fromSetString(aStr) { - if (isProtoString(aStr)) { - return aStr.slice(1); - } - - return aStr; - } - exports.fromSetString = supportsNullProto ? identity : fromSetString; - - function isProtoString(s) { - if (!s) { - return false; - } - - var length = s.length; - - if (length < 9 /* "__proto__".length */) { - return false; - } - - if (s.charCodeAt(length - 1) !== 95 /* '_' */ || - s.charCodeAt(length - 2) !== 95 /* '_' */ || - s.charCodeAt(length - 3) !== 111 /* 'o' */ || - s.charCodeAt(length - 4) !== 116 /* 't' */ || - s.charCodeAt(length - 5) !== 111 /* 'o' */ || - s.charCodeAt(length - 6) !== 114 /* 'r' */ || - s.charCodeAt(length - 7) !== 112 /* 'p' */ || - s.charCodeAt(length - 8) !== 95 /* '_' */ || - s.charCodeAt(length - 9) !== 95 /* '_' */) { - return false; - } - - for (var i = length - 10; i >= 0; i--) { - if (s.charCodeAt(i) !== 36 /* '$' */) { - return false; - } - } - - return true; - } - - /** - * Comparator between two mappings where the original positions are compared. - * - * Optionally pass in `true` as `onlyCompareGenerated` to consider two - * mappings with the same original source/line/column, but different generated - * line and column the same. Useful when searching for a mapping with a - * stubbed out mapping. - */ - function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) { - var cmp = mappingA.source - mappingB.source; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.originalLine - mappingB.originalLine; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.originalColumn - mappingB.originalColumn; - if (cmp !== 0 || onlyCompareOriginal) { - return cmp; - } - - cmp = mappingA.generatedColumn - mappingB.generatedColumn; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.generatedLine - mappingB.generatedLine; - if (cmp !== 0) { - return cmp; - } - - return mappingA.name - mappingB.name; - } - exports.compareByOriginalPositions = compareByOriginalPositions; - - /** - * Comparator between two mappings with deflated source and name indices where - * the generated positions are compared. - * - * Optionally pass in `true` as `onlyCompareGenerated` to consider two - * mappings with the same generated line and column, but different - * source/name/original line and column the same. Useful when searching for a - * mapping with a stubbed out mapping. - */ - function compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) { - var cmp = mappingA.generatedLine - mappingB.generatedLine; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.generatedColumn - mappingB.generatedColumn; - if (cmp !== 0 || onlyCompareGenerated) { - return cmp; - } - - cmp = mappingA.source - mappingB.source; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.originalLine - mappingB.originalLine; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.originalColumn - mappingB.originalColumn; - if (cmp !== 0) { - return cmp; - } - - return mappingA.name - mappingB.name; - } - exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated; - - function strcmp(aStr1, aStr2) { - if (aStr1 === aStr2) { - return 0; - } - - if (aStr1 > aStr2) { - return 1; - } - - return -1; - } - - /** - * Comparator between two mappings with inflated source and name strings where - * the generated positions are compared. - */ - function compareByGeneratedPositionsInflated(mappingA, mappingB) { - var cmp = mappingA.generatedLine - mappingB.generatedLine; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.generatedColumn - mappingB.generatedColumn; - if (cmp !== 0) { - return cmp; - } - - cmp = strcmp(mappingA.source, mappingB.source); - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.originalLine - mappingB.originalLine; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.originalColumn - mappingB.originalColumn; - if (cmp !== 0) { - return cmp; - } - - return strcmp(mappingA.name, mappingB.name); - } - exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated; - - -/***/ }), -/* 5 */ -/***/ (function(module, exports, __webpack_require__) { - - /* -*- Mode: js; js-indent-level: 2; -*- */ - /* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - - var util = __webpack_require__(4); - var has = Object.prototype.hasOwnProperty; - var hasNativeMap = typeof Map !== "undefined"; - - /** - * A data structure which is a combination of an array and a set. Adding a new - * member is O(1), testing for membership is O(1), and finding the index of an - * element is O(1). Removing elements from the set is not supported. Only - * strings are supported for membership. - */ - function ArraySet() { - this._array = []; - this._set = hasNativeMap ? new Map() : Object.create(null); - } - - /** - * Static method for creating ArraySet instances from an existing array. - */ - ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) { - var set = new ArraySet(); - for (var i = 0, len = aArray.length; i < len; i++) { - set.add(aArray[i], aAllowDuplicates); - } - return set; - }; - - /** - * Return how many unique items are in this ArraySet. If duplicates have been - * added, than those do not count towards the size. - * - * @returns Number - */ - ArraySet.prototype.size = function ArraySet_size() { - return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length; - }; - - /** - * Add the given string to this set. - * - * @param String aStr - */ - ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) { - var sStr = hasNativeMap ? aStr : util.toSetString(aStr); - var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr); - var idx = this._array.length; - if (!isDuplicate || aAllowDuplicates) { - this._array.push(aStr); - } - if (!isDuplicate) { - if (hasNativeMap) { - this._set.set(aStr, idx); - } else { - this._set[sStr] = idx; - } - } - }; - - /** - * Is the given string a member of this set? - * - * @param String aStr - */ - ArraySet.prototype.has = function ArraySet_has(aStr) { - if (hasNativeMap) { - return this._set.has(aStr); - } else { - var sStr = util.toSetString(aStr); - return has.call(this._set, sStr); - } - }; - - /** - * What is the index of the given string in the array? - * - * @param String aStr - */ - ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) { - if (hasNativeMap) { - var idx = this._set.get(aStr); - if (idx >= 0) { - return idx; - } - } else { - var sStr = util.toSetString(aStr); - if (has.call(this._set, sStr)) { - return this._set[sStr]; - } - } - - throw new Error('"' + aStr + '" is not in the set.'); - }; - - /** - * What is the element at the given index? - * - * @param Number aIdx - */ - ArraySet.prototype.at = function ArraySet_at(aIdx) { - if (aIdx >= 0 && aIdx < this._array.length) { - return this._array[aIdx]; - } - throw new Error('No element indexed by ' + aIdx); - }; - - /** - * Returns the array representation of this set (which has the proper indices - * indicated by indexOf). Note that this is a copy of the internal array used - * for storing the members so that no one can mess with internal state. - */ - ArraySet.prototype.toArray = function ArraySet_toArray() { - return this._array.slice(); - }; - - exports.ArraySet = ArraySet; - - -/***/ }), -/* 6 */ -/***/ (function(module, exports, __webpack_require__) { - - /* -*- Mode: js; js-indent-level: 2; -*- */ - /* - * Copyright 2014 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - - var util = __webpack_require__(4); - - /** - * Determine whether mappingB is after mappingA with respect to generated - * position. - */ - function generatedPositionAfter(mappingA, mappingB) { - // Optimized for most common case - var lineA = mappingA.generatedLine; - var lineB = mappingB.generatedLine; - var columnA = mappingA.generatedColumn; - var columnB = mappingB.generatedColumn; - return lineB > lineA || lineB == lineA && columnB >= columnA || - util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0; - } - - /** - * A data structure to provide a sorted view of accumulated mappings in a - * performance conscious manner. It trades a neglibable overhead in general - * case for a large speedup in case of mappings being added in order. - */ - function MappingList() { - this._array = []; - this._sorted = true; - // Serves as infimum - this._last = {generatedLine: -1, generatedColumn: 0}; - } - - /** - * Iterate through internal items. This method takes the same arguments that - * `Array.prototype.forEach` takes. - * - * NOTE: The order of the mappings is NOT guaranteed. - */ - MappingList.prototype.unsortedForEach = - function MappingList_forEach(aCallback, aThisArg) { - this._array.forEach(aCallback, aThisArg); - }; - - /** - * Add the given source mapping. - * - * @param Object aMapping - */ - MappingList.prototype.add = function MappingList_add(aMapping) { - if (generatedPositionAfter(this._last, aMapping)) { - this._last = aMapping; - this._array.push(aMapping); - } else { - this._sorted = false; - this._array.push(aMapping); - } - }; - - /** - * Returns the flat, sorted array of mappings. The mappings are sorted by - * generated position. - * - * WARNING: This method returns internal data without copying, for - * performance. The return value must NOT be mutated, and should be treated as - * an immutable borrow. If you want to take ownership, you must make your own - * copy. - */ - MappingList.prototype.toArray = function MappingList_toArray() { - if (!this._sorted) { - this._array.sort(util.compareByGeneratedPositionsInflated); - this._sorted = true; - } - return this._array; - }; - - exports.MappingList = MappingList; - - -/***/ }), -/* 7 */ -/***/ (function(module, exports, __webpack_require__) { - - /* -*- Mode: js; js-indent-level: 2; -*- */ - /* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - - var util = __webpack_require__(4); - var binarySearch = __webpack_require__(8); - var ArraySet = __webpack_require__(5).ArraySet; - var base64VLQ = __webpack_require__(2); - var quickSort = __webpack_require__(9).quickSort; - - function SourceMapConsumer(aSourceMap) { - var sourceMap = aSourceMap; - if (typeof aSourceMap === 'string') { - sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, '')); - } - - return sourceMap.sections != null - ? new IndexedSourceMapConsumer(sourceMap) - : new BasicSourceMapConsumer(sourceMap); - } - - SourceMapConsumer.fromSourceMap = function(aSourceMap) { - return BasicSourceMapConsumer.fromSourceMap(aSourceMap); - } - - /** - * The version of the source mapping spec that we are consuming. - */ - SourceMapConsumer.prototype._version = 3; - - // `__generatedMappings` and `__originalMappings` are arrays that hold the - // parsed mapping coordinates from the source map's "mappings" attribute. They - // are lazily instantiated, accessed via the `_generatedMappings` and - // `_originalMappings` getters respectively, and we only parse the mappings - // and create these arrays once queried for a source location. We jump through - // these hoops because there can be many thousands of mappings, and parsing - // them is expensive, so we only want to do it if we must. - // - // Each object in the arrays is of the form: - // - // { - // generatedLine: The line number in the generated code, - // generatedColumn: The column number in the generated code, - // source: The path to the original source file that generated this - // chunk of code, - // originalLine: The line number in the original source that - // corresponds to this chunk of generated code, - // originalColumn: The column number in the original source that - // corresponds to this chunk of generated code, - // name: The name of the original symbol which generated this chunk of - // code. - // } - // - // All properties except for `generatedLine` and `generatedColumn` can be - // `null`. - // - // `_generatedMappings` is ordered by the generated positions. - // - // `_originalMappings` is ordered by the original positions. - - SourceMapConsumer.prototype.__generatedMappings = null; - Object.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', { - get: function () { - if (!this.__generatedMappings) { - this._parseMappings(this._mappings, this.sourceRoot); - } - - return this.__generatedMappings; - } - }); - - SourceMapConsumer.prototype.__originalMappings = null; - Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', { - get: function () { - if (!this.__originalMappings) { - this._parseMappings(this._mappings, this.sourceRoot); - } - - return this.__originalMappings; - } - }); - - SourceMapConsumer.prototype._charIsMappingSeparator = - function SourceMapConsumer_charIsMappingSeparator(aStr, index) { - var c = aStr.charAt(index); - return c === ";" || c === ","; - }; - - /** - * Parse the mappings in a string in to a data structure which we can easily - * query (the ordered arrays in the `this.__generatedMappings` and - * `this.__originalMappings` properties). - */ - SourceMapConsumer.prototype._parseMappings = - function SourceMapConsumer_parseMappings(aStr, aSourceRoot) { - throw new Error("Subclasses must implement _parseMappings"); - }; - - SourceMapConsumer.GENERATED_ORDER = 1; - SourceMapConsumer.ORIGINAL_ORDER = 2; - - SourceMapConsumer.GREATEST_LOWER_BOUND = 1; - SourceMapConsumer.LEAST_UPPER_BOUND = 2; - - /** - * Iterate over each mapping between an original source/line/column and a - * generated line/column in this source map. - * - * @param Function aCallback - * The function that is called with each mapping. - * @param Object aContext - * Optional. If specified, this object will be the value of `this` every - * time that `aCallback` is called. - * @param aOrder - * Either `SourceMapConsumer.GENERATED_ORDER` or - * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to - * iterate over the mappings sorted by the generated file's line/column - * order or the original's source/line/column order, respectively. Defaults to - * `SourceMapConsumer.GENERATED_ORDER`. - */ - SourceMapConsumer.prototype.eachMapping = - function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) { - var context = aContext || null; - var order = aOrder || SourceMapConsumer.GENERATED_ORDER; - - var mappings; - switch (order) { - case SourceMapConsumer.GENERATED_ORDER: - mappings = this._generatedMappings; - break; - case SourceMapConsumer.ORIGINAL_ORDER: - mappings = this._originalMappings; - break; - default: - throw new Error("Unknown order of iteration."); - } - - var sourceRoot = this.sourceRoot; - mappings.map(function (mapping) { - var source = mapping.source === null ? null : this._sources.at(mapping.source); - if (source != null && sourceRoot != null) { - source = util.join(sourceRoot, source); - } - return { - source: source, - generatedLine: mapping.generatedLine, - generatedColumn: mapping.generatedColumn, - originalLine: mapping.originalLine, - originalColumn: mapping.originalColumn, - name: mapping.name === null ? null : this._names.at(mapping.name) - }; - }, this).forEach(aCallback, context); - }; - - /** - * Returns all generated line and column information for the original source, - * line, and column provided. If no column is provided, returns all mappings - * corresponding to a either the line we are searching for or the next - * closest line that has any mappings. Otherwise, returns all mappings - * corresponding to the given line and either the column we are searching for - * or the next closest column that has any offsets. - * - * The only argument is an object with the following properties: - * - * - source: The filename of the original source. - * - line: The line number in the original source. - * - column: Optional. the column number in the original source. - * - * and an array of objects is returned, each with the following properties: - * - * - line: The line number in the generated source, or null. - * - column: The column number in the generated source, or null. - */ - SourceMapConsumer.prototype.allGeneratedPositionsFor = - function SourceMapConsumer_allGeneratedPositionsFor(aArgs) { - var line = util.getArg(aArgs, 'line'); - - // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping - // returns the index of the closest mapping less than the needle. By - // setting needle.originalColumn to 0, we thus find the last mapping for - // the given line, provided such a mapping exists. - var needle = { - source: util.getArg(aArgs, 'source'), - originalLine: line, - originalColumn: util.getArg(aArgs, 'column', 0) - }; - - if (this.sourceRoot != null) { - needle.source = util.relative(this.sourceRoot, needle.source); - } - if (!this._sources.has(needle.source)) { - return []; - } - needle.source = this._sources.indexOf(needle.source); - - var mappings = []; - - var index = this._findMapping(needle, - this._originalMappings, - "originalLine", - "originalColumn", - util.compareByOriginalPositions, - binarySearch.LEAST_UPPER_BOUND); - if (index >= 0) { - var mapping = this._originalMappings[index]; - - if (aArgs.column === undefined) { - var originalLine = mapping.originalLine; - - // Iterate until either we run out of mappings, or we run into - // a mapping for a different line than the one we found. Since - // mappings are sorted, this is guaranteed to find all mappings for - // the line we found. - while (mapping && mapping.originalLine === originalLine) { - mappings.push({ - line: util.getArg(mapping, 'generatedLine', null), - column: util.getArg(mapping, 'generatedColumn', null), - lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) - }); - - mapping = this._originalMappings[++index]; - } - } else { - var originalColumn = mapping.originalColumn; - - // Iterate until either we run out of mappings, or we run into - // a mapping for a different line than the one we were searching for. - // Since mappings are sorted, this is guaranteed to find all mappings for - // the line we are searching for. - while (mapping && - mapping.originalLine === line && - mapping.originalColumn == originalColumn) { - mappings.push({ - line: util.getArg(mapping, 'generatedLine', null), - column: util.getArg(mapping, 'generatedColumn', null), - lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) - }); - - mapping = this._originalMappings[++index]; - } - } - } - - return mappings; - }; - - exports.SourceMapConsumer = SourceMapConsumer; - - /** - * A BasicSourceMapConsumer instance represents a parsed source map which we can - * query for information about the original file positions by giving it a file - * position in the generated source. - * - * The only parameter is the raw source map (either as a JSON string, or - * already parsed to an object). According to the spec, source maps have the - * following attributes: - * - * - version: Which version of the source map spec this map is following. - * - sources: An array of URLs to the original source files. - * - names: An array of identifiers which can be referrenced by individual mappings. - * - sourceRoot: Optional. The URL root from which all sources are relative. - * - sourcesContent: Optional. An array of contents of the original source files. - * - mappings: A string of base64 VLQs which contain the actual mappings. - * - file: Optional. The generated file this source map is associated with. - * - * Here is an example source map, taken from the source map spec[0]: - * - * { - * version : 3, - * file: "out.js", - * sourceRoot : "", - * sources: ["foo.js", "bar.js"], - * names: ["src", "maps", "are", "fun"], - * mappings: "AA,AB;;ABCDE;" - * } - * - * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1# - */ - function BasicSourceMapConsumer(aSourceMap) { - var sourceMap = aSourceMap; - if (typeof aSourceMap === 'string') { - sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, '')); - } - - var version = util.getArg(sourceMap, 'version'); - var sources = util.getArg(sourceMap, 'sources'); - // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which - // requires the array) to play nice here. - var names = util.getArg(sourceMap, 'names', []); - var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null); - var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null); - var mappings = util.getArg(sourceMap, 'mappings'); - var file = util.getArg(sourceMap, 'file', null); - - // Once again, Sass deviates from the spec and supplies the version as a - // string rather than a number, so we use loose equality checking here. - if (version != this._version) { - throw new Error('Unsupported version: ' + version); - } - - sources = sources - .map(String) - // Some source maps produce relative source paths like "./foo.js" instead of - // "foo.js". Normalize these first so that future comparisons will succeed. - // See bugzil.la/1090768. - .map(util.normalize) - // Always ensure that absolute sources are internally stored relative to - // the source root, if the source root is absolute. Not doing this would - // be particularly problematic when the source root is a prefix of the - // source (valid, but why??). See github issue #199 and bugzil.la/1188982. - .map(function (source) { - return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source) - ? util.relative(sourceRoot, source) - : source; - }); - - // Pass `true` below to allow duplicate names and sources. While source maps - // are intended to be compressed and deduplicated, the TypeScript compiler - // sometimes generates source maps with duplicates in them. See Github issue - // #72 and bugzil.la/889492. - this._names = ArraySet.fromArray(names.map(String), true); - this._sources = ArraySet.fromArray(sources, true); - - this.sourceRoot = sourceRoot; - this.sourcesContent = sourcesContent; - this._mappings = mappings; - this.file = file; - } - - BasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype); - BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer; - - /** - * Create a BasicSourceMapConsumer from a SourceMapGenerator. - * - * @param SourceMapGenerator aSourceMap - * The source map that will be consumed. - * @returns BasicSourceMapConsumer - */ - BasicSourceMapConsumer.fromSourceMap = - function SourceMapConsumer_fromSourceMap(aSourceMap) { - var smc = Object.create(BasicSourceMapConsumer.prototype); - - var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true); - var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true); - smc.sourceRoot = aSourceMap._sourceRoot; - smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(), - smc.sourceRoot); - smc.file = aSourceMap._file; - - // Because we are modifying the entries (by converting string sources and - // names to indices into the sources and names ArraySets), we have to make - // a copy of the entry or else bad things happen. Shared mutable state - // strikes again! See github issue #191. - - var generatedMappings = aSourceMap._mappings.toArray().slice(); - var destGeneratedMappings = smc.__generatedMappings = []; - var destOriginalMappings = smc.__originalMappings = []; - - for (var i = 0, length = generatedMappings.length; i < length; i++) { - var srcMapping = generatedMappings[i]; - var destMapping = new Mapping; - destMapping.generatedLine = srcMapping.generatedLine; - destMapping.generatedColumn = srcMapping.generatedColumn; - - if (srcMapping.source) { - destMapping.source = sources.indexOf(srcMapping.source); - destMapping.originalLine = srcMapping.originalLine; - destMapping.originalColumn = srcMapping.originalColumn; - - if (srcMapping.name) { - destMapping.name = names.indexOf(srcMapping.name); - } - - destOriginalMappings.push(destMapping); - } - - destGeneratedMappings.push(destMapping); - } - - quickSort(smc.__originalMappings, util.compareByOriginalPositions); - - return smc; - }; - - /** - * The version of the source mapping spec that we are consuming. - */ - BasicSourceMapConsumer.prototype._version = 3; - - /** - * The list of original sources. - */ - Object.defineProperty(BasicSourceMapConsumer.prototype, 'sources', { - get: function () { - return this._sources.toArray().map(function (s) { - return this.sourceRoot != null ? util.join(this.sourceRoot, s) : s; - }, this); - } - }); - - /** - * Provide the JIT with a nice shape / hidden class. - */ - function Mapping() { - this.generatedLine = 0; - this.generatedColumn = 0; - this.source = null; - this.originalLine = null; - this.originalColumn = null; - this.name = null; - } - - /** - * Parse the mappings in a string in to a data structure which we can easily - * query (the ordered arrays in the `this.__generatedMappings` and - * `this.__originalMappings` properties). - */ - BasicSourceMapConsumer.prototype._parseMappings = - function SourceMapConsumer_parseMappings(aStr, aSourceRoot) { - var generatedLine = 1; - var previousGeneratedColumn = 0; - var previousOriginalLine = 0; - var previousOriginalColumn = 0; - var previousSource = 0; - var previousName = 0; - var length = aStr.length; - var index = 0; - var cachedSegments = {}; - var temp = {}; - var originalMappings = []; - var generatedMappings = []; - var mapping, str, segment, end, value; - - while (index < length) { - if (aStr.charAt(index) === ';') { - generatedLine++; - index++; - previousGeneratedColumn = 0; - } - else if (aStr.charAt(index) === ',') { - index++; - } - else { - mapping = new Mapping(); - mapping.generatedLine = generatedLine; - - // Because each offset is encoded relative to the previous one, - // many segments often have the same encoding. We can exploit this - // fact by caching the parsed variable length fields of each segment, - // allowing us to avoid a second parse if we encounter the same - // segment again. - for (end = index; end < length; end++) { - if (this._charIsMappingSeparator(aStr, end)) { - break; - } - } - str = aStr.slice(index, end); - - segment = cachedSegments[str]; - if (segment) { - index += str.length; - } else { - segment = []; - while (index < end) { - base64VLQ.decode(aStr, index, temp); - value = temp.value; - index = temp.rest; - segment.push(value); - } - - if (segment.length === 2) { - throw new Error('Found a source, but no line and column'); - } - - if (segment.length === 3) { - throw new Error('Found a source and line, but no column'); - } - - cachedSegments[str] = segment; - } - - // Generated column. - mapping.generatedColumn = previousGeneratedColumn + segment[0]; - previousGeneratedColumn = mapping.generatedColumn; - - if (segment.length > 1) { - // Original source. - mapping.source = previousSource + segment[1]; - previousSource += segment[1]; - - // Original line. - mapping.originalLine = previousOriginalLine + segment[2]; - previousOriginalLine = mapping.originalLine; - // Lines are stored 0-based - mapping.originalLine += 1; - - // Original column. - mapping.originalColumn = previousOriginalColumn + segment[3]; - previousOriginalColumn = mapping.originalColumn; - - if (segment.length > 4) { - // Original name. - mapping.name = previousName + segment[4]; - previousName += segment[4]; - } - } - - generatedMappings.push(mapping); - if (typeof mapping.originalLine === 'number') { - originalMappings.push(mapping); - } - } - } - - quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated); - this.__generatedMappings = generatedMappings; - - quickSort(originalMappings, util.compareByOriginalPositions); - this.__originalMappings = originalMappings; - }; - - /** - * Find the mapping that best matches the hypothetical "needle" mapping that - * we are searching for in the given "haystack" of mappings. - */ - BasicSourceMapConsumer.prototype._findMapping = - function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName, - aColumnName, aComparator, aBias) { - // To return the position we are searching for, we must first find the - // mapping for the given position and then return the opposite position it - // points to. Because the mappings are sorted, we can use binary search to - // find the best mapping. - - if (aNeedle[aLineName] <= 0) { - throw new TypeError('Line must be greater than or equal to 1, got ' - + aNeedle[aLineName]); - } - if (aNeedle[aColumnName] < 0) { - throw new TypeError('Column must be greater than or equal to 0, got ' - + aNeedle[aColumnName]); - } - - return binarySearch.search(aNeedle, aMappings, aComparator, aBias); - }; - - /** - * Compute the last column for each generated mapping. The last column is - * inclusive. - */ - BasicSourceMapConsumer.prototype.computeColumnSpans = - function SourceMapConsumer_computeColumnSpans() { - for (var index = 0; index < this._generatedMappings.length; ++index) { - var mapping = this._generatedMappings[index]; - - // Mappings do not contain a field for the last generated columnt. We - // can come up with an optimistic estimate, however, by assuming that - // mappings are contiguous (i.e. given two consecutive mappings, the - // first mapping ends where the second one starts). - if (index + 1 < this._generatedMappings.length) { - var nextMapping = this._generatedMappings[index + 1]; - - if (mapping.generatedLine === nextMapping.generatedLine) { - mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1; - continue; - } - } - - // The last mapping for each line spans the entire line. - mapping.lastGeneratedColumn = Infinity; - } - }; - - /** - * Returns the original source, line, and column information for the generated - * source's line and column positions provided. The only argument is an object - * with the following properties: - * - * - line: The line number in the generated source. - * - column: The column number in the generated source. - * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or - * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the - * closest element that is smaller than or greater than the one we are - * searching for, respectively, if the exact element cannot be found. - * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'. - * - * and an object is returned with the following properties: - * - * - source: The original source file, or null. - * - line: The line number in the original source, or null. - * - column: The column number in the original source, or null. - * - name: The original identifier, or null. - */ - BasicSourceMapConsumer.prototype.originalPositionFor = - function SourceMapConsumer_originalPositionFor(aArgs) { - var needle = { - generatedLine: util.getArg(aArgs, 'line'), - generatedColumn: util.getArg(aArgs, 'column') - }; - - var index = this._findMapping( - needle, - this._generatedMappings, - "generatedLine", - "generatedColumn", - util.compareByGeneratedPositionsDeflated, - util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND) - ); - - if (index >= 0) { - var mapping = this._generatedMappings[index]; - - if (mapping.generatedLine === needle.generatedLine) { - var source = util.getArg(mapping, 'source', null); - if (source !== null) { - source = this._sources.at(source); - if (this.sourceRoot != null) { - source = util.join(this.sourceRoot, source); - } - } - var name = util.getArg(mapping, 'name', null); - if (name !== null) { - name = this._names.at(name); - } - return { - source: source, - line: util.getArg(mapping, 'originalLine', null), - column: util.getArg(mapping, 'originalColumn', null), - name: name - }; - } - } - - return { - source: null, - line: null, - column: null, - name: null - }; - }; - - /** - * Return true if we have the source content for every source in the source - * map, false otherwise. - */ - BasicSourceMapConsumer.prototype.hasContentsOfAllSources = - function BasicSourceMapConsumer_hasContentsOfAllSources() { - if (!this.sourcesContent) { - return false; - } - return this.sourcesContent.length >= this._sources.size() && - !this.sourcesContent.some(function (sc) { return sc == null; }); - }; - - /** - * Returns the original source content. The only argument is the url of the - * original source file. Returns null if no original source content is - * available. - */ - BasicSourceMapConsumer.prototype.sourceContentFor = - function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) { - if (!this.sourcesContent) { - return null; - } - - if (this.sourceRoot != null) { - aSource = util.relative(this.sourceRoot, aSource); - } - - if (this._sources.has(aSource)) { - return this.sourcesContent[this._sources.indexOf(aSource)]; - } - - var url; - if (this.sourceRoot != null - && (url = util.urlParse(this.sourceRoot))) { - // XXX: file:// URIs and absolute paths lead to unexpected behavior for - // many users. We can help them out when they expect file:// URIs to - // behave like it would if they were running a local HTTP server. See - // https://bugzilla.mozilla.org/show_bug.cgi?id=885597. - var fileUriAbsPath = aSource.replace(/^file:\/\//, ""); - if (url.scheme == "file" - && this._sources.has(fileUriAbsPath)) { - return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)] - } - - if ((!url.path || url.path == "/") - && this._sources.has("/" + aSource)) { - return this.sourcesContent[this._sources.indexOf("/" + aSource)]; - } - } - - // This function is used recursively from - // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we - // don't want to throw if we can't find the source - we just want to - // return null, so we provide a flag to exit gracefully. - if (nullOnMissing) { - return null; - } - else { - throw new Error('"' + aSource + '" is not in the SourceMap.'); - } - }; - - /** - * Returns the generated line and column information for the original source, - * line, and column positions provided. The only argument is an object with - * the following properties: - * - * - source: The filename of the original source. - * - line: The line number in the original source. - * - column: The column number in the original source. - * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or - * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the - * closest element that is smaller than or greater than the one we are - * searching for, respectively, if the exact element cannot be found. - * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'. - * - * and an object is returned with the following properties: - * - * - line: The line number in the generated source, or null. - * - column: The column number in the generated source, or null. - */ - BasicSourceMapConsumer.prototype.generatedPositionFor = - function SourceMapConsumer_generatedPositionFor(aArgs) { - var source = util.getArg(aArgs, 'source'); - if (this.sourceRoot != null) { - source = util.relative(this.sourceRoot, source); - } - if (!this._sources.has(source)) { - return { - line: null, - column: null, - lastColumn: null - }; - } - source = this._sources.indexOf(source); - - var needle = { - source: source, - originalLine: util.getArg(aArgs, 'line'), - originalColumn: util.getArg(aArgs, 'column') - }; - - var index = this._findMapping( - needle, - this._originalMappings, - "originalLine", - "originalColumn", - util.compareByOriginalPositions, - util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND) - ); - - if (index >= 0) { - var mapping = this._originalMappings[index]; - - if (mapping.source === needle.source) { - return { - line: util.getArg(mapping, 'generatedLine', null), - column: util.getArg(mapping, 'generatedColumn', null), - lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) - }; - } - } - - return { - line: null, - column: null, - lastColumn: null - }; - }; - - exports.BasicSourceMapConsumer = BasicSourceMapConsumer; - - /** - * An IndexedSourceMapConsumer instance represents a parsed source map which - * we can query for information. It differs from BasicSourceMapConsumer in - * that it takes "indexed" source maps (i.e. ones with a "sections" field) as - * input. - * - * The only parameter is a raw source map (either as a JSON string, or already - * parsed to an object). According to the spec for indexed source maps, they - * have the following attributes: - * - * - version: Which version of the source map spec this map is following. - * - file: Optional. The generated file this source map is associated with. - * - sections: A list of section definitions. - * - * Each value under the "sections" field has two fields: - * - offset: The offset into the original specified at which this section - * begins to apply, defined as an object with a "line" and "column" - * field. - * - map: A source map definition. This source map could also be indexed, - * but doesn't have to be. - * - * Instead of the "map" field, it's also possible to have a "url" field - * specifying a URL to retrieve a source map from, but that's currently - * unsupported. - * - * Here's an example source map, taken from the source map spec[0], but - * modified to omit a section which uses the "url" field. - * - * { - * version : 3, - * file: "app.js", - * sections: [{ - * offset: {line:100, column:10}, - * map: { - * version : 3, - * file: "section.js", - * sources: ["foo.js", "bar.js"], - * names: ["src", "maps", "are", "fun"], - * mappings: "AAAA,E;;ABCDE;" - * } - * }], - * } - * - * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt - */ - function IndexedSourceMapConsumer(aSourceMap) { - var sourceMap = aSourceMap; - if (typeof aSourceMap === 'string') { - sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, '')); - } - - var version = util.getArg(sourceMap, 'version'); - var sections = util.getArg(sourceMap, 'sections'); - - if (version != this._version) { - throw new Error('Unsupported version: ' + version); - } - - this._sources = new ArraySet(); - this._names = new ArraySet(); - - var lastOffset = { - line: -1, - column: 0 - }; - this._sections = sections.map(function (s) { - if (s.url) { - // The url field will require support for asynchronicity. - // See https://github.com/mozilla/source-map/issues/16 - throw new Error('Support for url field in sections not implemented.'); - } - var offset = util.getArg(s, 'offset'); - var offsetLine = util.getArg(offset, 'line'); - var offsetColumn = util.getArg(offset, 'column'); - - if (offsetLine < lastOffset.line || - (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) { - throw new Error('Section offsets must be ordered and non-overlapping.'); - } - lastOffset = offset; - - return { - generatedOffset: { - // The offset fields are 0-based, but we use 1-based indices when - // encoding/decoding from VLQ. - generatedLine: offsetLine + 1, - generatedColumn: offsetColumn + 1 - }, - consumer: new SourceMapConsumer(util.getArg(s, 'map')) - } - }); - } - - IndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype); - IndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer; - - /** - * The version of the source mapping spec that we are consuming. - */ - IndexedSourceMapConsumer.prototype._version = 3; - - /** - * The list of original sources. - */ - Object.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', { - get: function () { - var sources = []; - for (var i = 0; i < this._sections.length; i++) { - for (var j = 0; j < this._sections[i].consumer.sources.length; j++) { - sources.push(this._sections[i].consumer.sources[j]); - } - } - return sources; - } - }); - - /** - * Returns the original source, line, and column information for the generated - * source's line and column positions provided. The only argument is an object - * with the following properties: - * - * - line: The line number in the generated source. - * - column: The column number in the generated source. - * - * and an object is returned with the following properties: - * - * - source: The original source file, or null. - * - line: The line number in the original source, or null. - * - column: The column number in the original source, or null. - * - name: The original identifier, or null. - */ - IndexedSourceMapConsumer.prototype.originalPositionFor = - function IndexedSourceMapConsumer_originalPositionFor(aArgs) { - var needle = { - generatedLine: util.getArg(aArgs, 'line'), - generatedColumn: util.getArg(aArgs, 'column') - }; - - // Find the section containing the generated position we're trying to map - // to an original position. - var sectionIndex = binarySearch.search(needle, this._sections, - function(needle, section) { - var cmp = needle.generatedLine - section.generatedOffset.generatedLine; - if (cmp) { - return cmp; - } - - return (needle.generatedColumn - - section.generatedOffset.generatedColumn); - }); - var section = this._sections[sectionIndex]; - - if (!section) { - return { - source: null, - line: null, - column: null, - name: null - }; - } - - return section.consumer.originalPositionFor({ - line: needle.generatedLine - - (section.generatedOffset.generatedLine - 1), - column: needle.generatedColumn - - (section.generatedOffset.generatedLine === needle.generatedLine - ? section.generatedOffset.generatedColumn - 1 - : 0), - bias: aArgs.bias - }); - }; - - /** - * Return true if we have the source content for every source in the source - * map, false otherwise. - */ - IndexedSourceMapConsumer.prototype.hasContentsOfAllSources = - function IndexedSourceMapConsumer_hasContentsOfAllSources() { - return this._sections.every(function (s) { - return s.consumer.hasContentsOfAllSources(); - }); - }; - - /** - * Returns the original source content. The only argument is the url of the - * original source file. Returns null if no original source content is - * available. - */ - IndexedSourceMapConsumer.prototype.sourceContentFor = - function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) { - for (var i = 0; i < this._sections.length; i++) { - var section = this._sections[i]; - - var content = section.consumer.sourceContentFor(aSource, true); - if (content) { - return content; - } - } - if (nullOnMissing) { - return null; - } - else { - throw new Error('"' + aSource + '" is not in the SourceMap.'); - } - }; - - /** - * Returns the generated line and column information for the original source, - * line, and column positions provided. The only argument is an object with - * the following properties: - * - * - source: The filename of the original source. - * - line: The line number in the original source. - * - column: The column number in the original source. - * - * and an object is returned with the following properties: - * - * - line: The line number in the generated source, or null. - * - column: The column number in the generated source, or null. - */ - IndexedSourceMapConsumer.prototype.generatedPositionFor = - function IndexedSourceMapConsumer_generatedPositionFor(aArgs) { - for (var i = 0; i < this._sections.length; i++) { - var section = this._sections[i]; - - // Only consider this section if the requested source is in the list of - // sources of the consumer. - if (section.consumer.sources.indexOf(util.getArg(aArgs, 'source')) === -1) { - continue; - } - var generatedPosition = section.consumer.generatedPositionFor(aArgs); - if (generatedPosition) { - var ret = { - line: generatedPosition.line + - (section.generatedOffset.generatedLine - 1), - column: generatedPosition.column + - (section.generatedOffset.generatedLine === generatedPosition.line - ? section.generatedOffset.generatedColumn - 1 - : 0) - }; - return ret; - } - } - - return { - line: null, - column: null - }; - }; - - /** - * Parse the mappings in a string in to a data structure which we can easily - * query (the ordered arrays in the `this.__generatedMappings` and - * `this.__originalMappings` properties). - */ - IndexedSourceMapConsumer.prototype._parseMappings = - function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) { - this.__generatedMappings = []; - this.__originalMappings = []; - for (var i = 0; i < this._sections.length; i++) { - var section = this._sections[i]; - var sectionMappings = section.consumer._generatedMappings; - for (var j = 0; j < sectionMappings.length; j++) { - var mapping = sectionMappings[j]; - - var source = section.consumer._sources.at(mapping.source); - if (section.consumer.sourceRoot !== null) { - source = util.join(section.consumer.sourceRoot, source); - } - this._sources.add(source); - source = this._sources.indexOf(source); - - var name = section.consumer._names.at(mapping.name); - this._names.add(name); - name = this._names.indexOf(name); - - // The mappings coming from the consumer for the section have - // generated positions relative to the start of the section, so we - // need to offset them to be relative to the start of the concatenated - // generated file. - var adjustedMapping = { - source: source, - generatedLine: mapping.generatedLine + - (section.generatedOffset.generatedLine - 1), - generatedColumn: mapping.generatedColumn + - (section.generatedOffset.generatedLine === mapping.generatedLine - ? section.generatedOffset.generatedColumn - 1 - : 0), - originalLine: mapping.originalLine, - originalColumn: mapping.originalColumn, - name: name - }; - - this.__generatedMappings.push(adjustedMapping); - if (typeof adjustedMapping.originalLine === 'number') { - this.__originalMappings.push(adjustedMapping); - } - } - } - - quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated); - quickSort(this.__originalMappings, util.compareByOriginalPositions); - }; - - exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer; - - -/***/ }), -/* 8 */ -/***/ (function(module, exports) { - - /* -*- Mode: js; js-indent-level: 2; -*- */ - /* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - - exports.GREATEST_LOWER_BOUND = 1; - exports.LEAST_UPPER_BOUND = 2; - - /** - * Recursive implementation of binary search. - * - * @param aLow Indices here and lower do not contain the needle. - * @param aHigh Indices here and higher do not contain the needle. - * @param aNeedle The element being searched for. - * @param aHaystack The non-empty array being searched. - * @param aCompare Function which takes two elements and returns -1, 0, or 1. - * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or - * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the - * closest element that is smaller than or greater than the one we are - * searching for, respectively, if the exact element cannot be found. - */ - function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) { - // This function terminates when one of the following is true: - // - // 1. We find the exact element we are looking for. - // - // 2. We did not find the exact element, but we can return the index of - // the next-closest element. - // - // 3. We did not find the exact element, and there is no next-closest - // element than the one we are searching for, so we return -1. - var mid = Math.floor((aHigh - aLow) / 2) + aLow; - var cmp = aCompare(aNeedle, aHaystack[mid], true); - if (cmp === 0) { - // Found the element we are looking for. - return mid; - } - else if (cmp > 0) { - // Our needle is greater than aHaystack[mid]. - if (aHigh - mid > 1) { - // The element is in the upper half. - return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias); - } - - // The exact needle element was not found in this haystack. Determine if - // we are in termination case (3) or (2) and return the appropriate thing. - if (aBias == exports.LEAST_UPPER_BOUND) { - return aHigh < aHaystack.length ? aHigh : -1; - } else { - return mid; - } - } - else { - // Our needle is less than aHaystack[mid]. - if (mid - aLow > 1) { - // The element is in the lower half. - return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias); - } - - // we are in termination case (3) or (2) and return the appropriate thing. - if (aBias == exports.LEAST_UPPER_BOUND) { - return mid; - } else { - return aLow < 0 ? -1 : aLow; - } - } - } - - /** - * This is an implementation of binary search which will always try and return - * the index of the closest element if there is no exact hit. This is because - * mappings between original and generated line/col pairs are single points, - * and there is an implicit region between each of them, so a miss just means - * that you aren't on the very start of a region. - * - * @param aNeedle The element you are looking for. - * @param aHaystack The array that is being searched. - * @param aCompare A function which takes the needle and an element in the - * array and returns -1, 0, or 1 depending on whether the needle is less - * than, equal to, or greater than the element, respectively. - * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or - * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the - * closest element that is smaller than or greater than the one we are - * searching for, respectively, if the exact element cannot be found. - * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'. - */ - exports.search = function search(aNeedle, aHaystack, aCompare, aBias) { - if (aHaystack.length === 0) { - return -1; - } - - var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack, - aCompare, aBias || exports.GREATEST_LOWER_BOUND); - if (index < 0) { - return -1; - } - - // We have found either the exact element, or the next-closest element than - // the one we are searching for. However, there may be more than one such - // element. Make sure we always return the smallest of these. - while (index - 1 >= 0) { - if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) { - break; - } - --index; - } - - return index; - }; - - -/***/ }), -/* 9 */ -/***/ (function(module, exports) { - - /* -*- Mode: js; js-indent-level: 2; -*- */ - /* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - - // It turns out that some (most?) JavaScript engines don't self-host - // `Array.prototype.sort`. This makes sense because C++ will likely remain - // faster than JS when doing raw CPU-intensive sorting. However, when using a - // custom comparator function, calling back and forth between the VM's C++ and - // JIT'd JS is rather slow *and* loses JIT type information, resulting in - // worse generated code for the comparator function than would be optimal. In - // fact, when sorting with a comparator, these costs outweigh the benefits of - // sorting in C++. By using our own JS-implemented Quick Sort (below), we get - // a ~3500ms mean speed-up in `bench/bench.html`. - - /** - * Swap the elements indexed by `x` and `y` in the array `ary`. - * - * @param {Array} ary - * The array. - * @param {Number} x - * The index of the first item. - * @param {Number} y - * The index of the second item. - */ - function swap(ary, x, y) { - var temp = ary[x]; - ary[x] = ary[y]; - ary[y] = temp; - } - - /** - * Returns a random integer within the range `low .. high` inclusive. - * - * @param {Number} low - * The lower bound on the range. - * @param {Number} high - * The upper bound on the range. - */ - function randomIntInRange(low, high) { - return Math.round(low + (Math.random() * (high - low))); - } - - /** - * The Quick Sort algorithm. - * - * @param {Array} ary - * An array to sort. - * @param {function} comparator - * Function to use to compare two items. - * @param {Number} p - * Start index of the array - * @param {Number} r - * End index of the array - */ - function doQuickSort(ary, comparator, p, r) { - // If our lower bound is less than our upper bound, we (1) partition the - // array into two pieces and (2) recurse on each half. If it is not, this is - // the empty array and our base case. - - if (p < r) { - // (1) Partitioning. - // - // The partitioning chooses a pivot between `p` and `r` and moves all - // elements that are less than or equal to the pivot to the before it, and - // all the elements that are greater than it after it. The effect is that - // once partition is done, the pivot is in the exact place it will be when - // the array is put in sorted order, and it will not need to be moved - // again. This runs in O(n) time. - - // Always choose a random pivot so that an input array which is reverse - // sorted does not cause O(n^2) running time. - var pivotIndex = randomIntInRange(p, r); - var i = p - 1; - - swap(ary, pivotIndex, r); - var pivot = ary[r]; - - // Immediately after `j` is incremented in this loop, the following hold - // true: - // - // * Every element in `ary[p .. i]` is less than or equal to the pivot. - // - // * Every element in `ary[i+1 .. j-1]` is greater than the pivot. - for (var j = p; j < r; j++) { - if (comparator(ary[j], pivot) <= 0) { - i += 1; - swap(ary, i, j); - } - } - - swap(ary, i + 1, j); - var q = i + 1; - - // (2) Recurse on each half. - - doQuickSort(ary, comparator, p, q - 1); - doQuickSort(ary, comparator, q + 1, r); - } - } - - /** - * Sort the given array in-place with the given comparator function. - * - * @param {Array} ary - * An array to sort. - * @param {function} comparator - * Function to use to compare two items. - */ - exports.quickSort = function (ary, comparator) { - doQuickSort(ary, comparator, 0, ary.length - 1); - }; - - -/***/ }), -/* 10 */ -/***/ (function(module, exports, __webpack_require__) { - - /* -*- Mode: js; js-indent-level: 2; -*- */ - /* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - - var SourceMapGenerator = __webpack_require__(1).SourceMapGenerator; - var util = __webpack_require__(4); - - // Matches a Windows-style `\r\n` newline or a `\n` newline used by all other - // operating systems these days (capturing the result). - var REGEX_NEWLINE = /(\r?\n)/; - - // Newline character code for charCodeAt() comparisons - var NEWLINE_CODE = 10; - - // Private symbol for identifying `SourceNode`s when multiple versions of - // the source-map library are loaded. This MUST NOT CHANGE across - // versions! - var isSourceNode = "$$$isSourceNode$$$"; - - /** - * SourceNodes provide a way to abstract over interpolating/concatenating - * snippets of generated JavaScript source code while maintaining the line and - * column information associated with the original source code. - * - * @param aLine The original line number. - * @param aColumn The original column number. - * @param aSource The original source's filename. - * @param aChunks Optional. An array of strings which are snippets of - * generated JS, or other SourceNodes. - * @param aName The original identifier. - */ - function SourceNode(aLine, aColumn, aSource, aChunks, aName) { - this.children = []; - this.sourceContents = {}; - this.line = aLine == null ? null : aLine; - this.column = aColumn == null ? null : aColumn; - this.source = aSource == null ? null : aSource; - this.name = aName == null ? null : aName; - this[isSourceNode] = true; - if (aChunks != null) this.add(aChunks); - } - - /** - * Creates a SourceNode from generated code and a SourceMapConsumer. - * - * @param aGeneratedCode The generated code - * @param aSourceMapConsumer The SourceMap for the generated code - * @param aRelativePath Optional. The path that relative sources in the - * SourceMapConsumer should be relative to. - */ - SourceNode.fromStringWithSourceMap = - function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) { - // The SourceNode we want to fill with the generated code - // and the SourceMap - var node = new SourceNode(); - - // All even indices of this array are one line of the generated code, - // while all odd indices are the newlines between two adjacent lines - // (since `REGEX_NEWLINE` captures its match). - // Processed fragments are accessed by calling `shiftNextLine`. - var remainingLines = aGeneratedCode.split(REGEX_NEWLINE); - var remainingLinesIndex = 0; - var shiftNextLine = function() { - var lineContents = getNextLine(); - // The last line of a file might not have a newline. - var newLine = getNextLine() || ""; - return lineContents + newLine; - - function getNextLine() { - return remainingLinesIndex < remainingLines.length ? - remainingLines[remainingLinesIndex++] : undefined; - } - }; - - // We need to remember the position of "remainingLines" - var lastGeneratedLine = 1, lastGeneratedColumn = 0; - - // The generate SourceNodes we need a code range. - // To extract it current and last mapping is used. - // Here we store the last mapping. - var lastMapping = null; - - aSourceMapConsumer.eachMapping(function (mapping) { - if (lastMapping !== null) { - // We add the code from "lastMapping" to "mapping": - // First check if there is a new line in between. - if (lastGeneratedLine < mapping.generatedLine) { - // Associate first line with "lastMapping" - addMappingWithCode(lastMapping, shiftNextLine()); - lastGeneratedLine++; - lastGeneratedColumn = 0; - // The remaining code is added without mapping - } else { - // There is no new line in between. - // Associate the code between "lastGeneratedColumn" and - // "mapping.generatedColumn" with "lastMapping" - var nextLine = remainingLines[remainingLinesIndex]; - var code = nextLine.substr(0, mapping.generatedColumn - - lastGeneratedColumn); - remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn - - lastGeneratedColumn); - lastGeneratedColumn = mapping.generatedColumn; - addMappingWithCode(lastMapping, code); - // No more remaining code, continue - lastMapping = mapping; - return; - } - } - // We add the generated code until the first mapping - // to the SourceNode without any mapping. - // Each line is added as separate string. - while (lastGeneratedLine < mapping.generatedLine) { - node.add(shiftNextLine()); - lastGeneratedLine++; - } - if (lastGeneratedColumn < mapping.generatedColumn) { - var nextLine = remainingLines[remainingLinesIndex]; - node.add(nextLine.substr(0, mapping.generatedColumn)); - remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn); - lastGeneratedColumn = mapping.generatedColumn; - } - lastMapping = mapping; - }, this); - // We have processed all mappings. - if (remainingLinesIndex < remainingLines.length) { - if (lastMapping) { - // Associate the remaining code in the current line with "lastMapping" - addMappingWithCode(lastMapping, shiftNextLine()); - } - // and add the remaining lines without any mapping - node.add(remainingLines.splice(remainingLinesIndex).join("")); - } - - // Copy sourcesContent into SourceNode - aSourceMapConsumer.sources.forEach(function (sourceFile) { - var content = aSourceMapConsumer.sourceContentFor(sourceFile); - if (content != null) { - if (aRelativePath != null) { - sourceFile = util.join(aRelativePath, sourceFile); - } - node.setSourceContent(sourceFile, content); - } - }); - - return node; - - function addMappingWithCode(mapping, code) { - if (mapping === null || mapping.source === undefined) { - node.add(code); - } else { - var source = aRelativePath - ? util.join(aRelativePath, mapping.source) - : mapping.source; - node.add(new SourceNode(mapping.originalLine, - mapping.originalColumn, - source, - code, - mapping.name)); - } - } - }; - - /** - * Add a chunk of generated JS to this source node. - * - * @param aChunk A string snippet of generated JS code, another instance of - * SourceNode, or an array where each member is one of those things. - */ - SourceNode.prototype.add = function SourceNode_add(aChunk) { - if (Array.isArray(aChunk)) { - aChunk.forEach(function (chunk) { - this.add(chunk); - }, this); - } - else if (aChunk[isSourceNode] || typeof aChunk === "string") { - if (aChunk) { - this.children.push(aChunk); - } - } - else { - throw new TypeError( - "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk - ); - } - return this; - }; - - /** - * Add a chunk of generated JS to the beginning of this source node. - * - * @param aChunk A string snippet of generated JS code, another instance of - * SourceNode, or an array where each member is one of those things. - */ - SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) { - if (Array.isArray(aChunk)) { - for (var i = aChunk.length-1; i >= 0; i--) { - this.prepend(aChunk[i]); - } - } - else if (aChunk[isSourceNode] || typeof aChunk === "string") { - this.children.unshift(aChunk); - } - else { - throw new TypeError( - "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk - ); - } - return this; - }; - - /** - * Walk over the tree of JS snippets in this node and its children. The - * walking function is called once for each snippet of JS and is passed that - * snippet and the its original associated source's line/column location. - * - * @param aFn The traversal function. - */ - SourceNode.prototype.walk = function SourceNode_walk(aFn) { - var chunk; - for (var i = 0, len = this.children.length; i < len; i++) { - chunk = this.children[i]; - if (chunk[isSourceNode]) { - chunk.walk(aFn); - } - else { - if (chunk !== '') { - aFn(chunk, { source: this.source, - line: this.line, - column: this.column, - name: this.name }); - } - } - } - }; - - /** - * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between - * each of `this.children`. - * - * @param aSep The separator. - */ - SourceNode.prototype.join = function SourceNode_join(aSep) { - var newChildren; - var i; - var len = this.children.length; - if (len > 0) { - newChildren = []; - for (i = 0; i < len-1; i++) { - newChildren.push(this.children[i]); - newChildren.push(aSep); - } - newChildren.push(this.children[i]); - this.children = newChildren; - } - return this; - }; - - /** - * Call String.prototype.replace on the very right-most source snippet. Useful - * for trimming whitespace from the end of a source node, etc. - * - * @param aPattern The pattern to replace. - * @param aReplacement The thing to replace the pattern with. - */ - SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) { - var lastChild = this.children[this.children.length - 1]; - if (lastChild[isSourceNode]) { - lastChild.replaceRight(aPattern, aReplacement); - } - else if (typeof lastChild === 'string') { - this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement); - } - else { - this.children.push(''.replace(aPattern, aReplacement)); - } - return this; - }; - - /** - * Set the source content for a source file. This will be added to the SourceMapGenerator - * in the sourcesContent field. - * - * @param aSourceFile The filename of the source file - * @param aSourceContent The content of the source file - */ - SourceNode.prototype.setSourceContent = - function SourceNode_setSourceContent(aSourceFile, aSourceContent) { - this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent; - }; - - /** - * Walk over the tree of SourceNodes. The walking function is called for each - * source file content and is passed the filename and source content. - * - * @param aFn The traversal function. - */ - SourceNode.prototype.walkSourceContents = - function SourceNode_walkSourceContents(aFn) { - for (var i = 0, len = this.children.length; i < len; i++) { - if (this.children[i][isSourceNode]) { - this.children[i].walkSourceContents(aFn); - } - } - - var sources = Object.keys(this.sourceContents); - for (var i = 0, len = sources.length; i < len; i++) { - aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]); - } - }; - - /** - * Return the string representation of this source node. Walks over the tree - * and concatenates all the various snippets together to one string. - */ - SourceNode.prototype.toString = function SourceNode_toString() { - var str = ""; - this.walk(function (chunk) { - str += chunk; - }); - return str; - }; - - /** - * Returns the string representation of this source node along with a source - * map. - */ - SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) { - var generated = { - code: "", - line: 1, - column: 0 - }; - var map = new SourceMapGenerator(aArgs); - var sourceMappingActive = false; - var lastOriginalSource = null; - var lastOriginalLine = null; - var lastOriginalColumn = null; - var lastOriginalName = null; - this.walk(function (chunk, original) { - generated.code += chunk; - if (original.source !== null - && original.line !== null - && original.column !== null) { - if(lastOriginalSource !== original.source - || lastOriginalLine !== original.line - || lastOriginalColumn !== original.column - || lastOriginalName !== original.name) { - map.addMapping({ - source: original.source, - original: { - line: original.line, - column: original.column - }, - generated: { - line: generated.line, - column: generated.column - }, - name: original.name - }); - } - lastOriginalSource = original.source; - lastOriginalLine = original.line; - lastOriginalColumn = original.column; - lastOriginalName = original.name; - sourceMappingActive = true; - } else if (sourceMappingActive) { - map.addMapping({ - generated: { - line: generated.line, - column: generated.column - } - }); - lastOriginalSource = null; - sourceMappingActive = false; - } - for (var idx = 0, length = chunk.length; idx < length; idx++) { - if (chunk.charCodeAt(idx) === NEWLINE_CODE) { - generated.line++; - generated.column = 0; - // Mappings end at eol - if (idx + 1 === length) { - lastOriginalSource = null; - sourceMappingActive = false; - } else if (sourceMappingActive) { - map.addMapping({ - source: original.source, - original: { - line: original.line, - column: original.column - }, - generated: { - line: generated.line, - column: generated.column - }, - name: original.name - }); - } - } else { - generated.column++; - } - } - }); - this.walkSourceContents(function (sourceFile, sourceContent) { - map.setSourceContent(sourceFile, sourceContent); - }); - - return { code: generated.code, map: map }; - }; - - exports.SourceNode = SourceNode; - - -/***/ }) -/******/ ]) -}); -; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCBlNDczOGZjNzJhN2IyMzAzOTg4OSIsIndlYnBhY2s6Ly8vLi9zb3VyY2UtbWFwLmpzIiwid2VicGFjazovLy8uL2xpYi9zb3VyY2UtbWFwLWdlbmVyYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9saWIvYmFzZTY0LXZscS5qcyIsIndlYnBhY2s6Ly8vLi9saWIvYmFzZTY0LmpzIiwid2VicGFjazovLy8uL2xpYi91dGlsLmpzIiwid2VicGFjazovLy8uL2xpYi9hcnJheS1zZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbGliL21hcHBpbmctbGlzdC5qcyIsIndlYnBhY2s6Ly8vLi9saWIvc291cmNlLW1hcC1jb25zdW1lci5qcyIsIndlYnBhY2s6Ly8vLi9saWIvYmluYXJ5LXNlYXJjaC5qcyIsIndlYnBhY2s6Ly8vLi9saWIvcXVpY2stc29ydC5qcyIsIndlYnBhY2s6Ly8vLi9saWIvc291cmNlLW5vZGUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87QUNWQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1QkFBZTtBQUNmO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOzs7Ozs7O0FDdENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7QUNQQSxpQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxNQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsTUFBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMkNBQTBDLFNBQVM7QUFDbkQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFDOztBQUVEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDRCQUEyQixRQUFRO0FBQ25DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7Ozs7Ozs7QUNoYUEsaUJBQWdCLG9CQUFvQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXNDLFNBQVM7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7Ozs7OztBQ3hIQSxpQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWdCO0FBQ2hCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7Ozs7OztBQzlFQSxpQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx1REFBc0Q7QUFDdEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxFQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxvQkFBbUI7QUFDbkI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVc7O0FBRVg7QUFDQTtBQUNBLFFBQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBVzs7QUFFWDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTJCLE1BQU07QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1REFBc0Q7QUFDdEQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHVEQUFzRCxZQUFZO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDtBQUNBLEVBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0NBQW1DO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBeUIsY0FBYztBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXVCLHdDQUF3QztBQUMvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQStDLG1CQUFtQixFQUFFO0FBQ3BFOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFpQixvQkFBb0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE2QixNQUFNO0FBQ25DO0FBQ0EsUUFBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdURBQXNEO0FBQ3REOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFPO0FBQ1A7QUFDQTtBQUNBLElBQUc7QUFDSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFtQiwyQkFBMkI7QUFDOUMsc0JBQXFCLCtDQUErQztBQUNwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW1CLDJCQUEyQjtBQUM5Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBbUIsMkJBQTJCO0FBQzlDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFtQiwyQkFBMkI7QUFDOUM7QUFDQTtBQUNBLHNCQUFxQiw0QkFBNEI7QUFDakQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOzs7Ozs7O0FDempDQSxpQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7Ozs7OztBQzlHQSxpQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVcsTUFBTTtBQUNqQjtBQUNBLFlBQVcsT0FBTztBQUNsQjtBQUNBLFlBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFXLE1BQU07QUFDakI7QUFDQSxZQUFXLFNBQVM7QUFDcEI7QUFDQSxZQUFXLE9BQU87QUFDbEI7QUFDQSxZQUFXLE9BQU87QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFtQixPQUFPO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFXLE1BQU07QUFDakI7QUFDQSxZQUFXLFNBQVM7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OztBQ2pIQSxpQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFLOztBQUVMOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFFBQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBaUMsUUFBUTtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBNkMsU0FBUztBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBb0I7QUFDcEI7QUFDQTtBQUNBLHVDQUFzQztBQUN0QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZSxXQUFXO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnREFBK0MsU0FBUztBQUN4RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDBDQUF5QyxTQUFTO0FBQ2xEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBVztBQUNYO0FBQ0E7QUFDQTtBQUNBLFlBQVc7QUFDWDtBQUNBLFVBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSw2Q0FBNEMsY0FBYztBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGNBQWE7QUFDYjtBQUNBLFlBQVc7QUFDWDtBQUNBLFFBQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxJQUFHO0FBQ0g7QUFDQTtBQUNBLElBQUc7O0FBRUgsV0FBVTtBQUNWOztBQUVBIiwiZmlsZSI6InNvdXJjZS1tYXAuZGVidWcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJzb3VyY2VNYXBcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wic291cmNlTWFwXCJdID0gZmFjdG9yeSgpO1xufSkodGhpcywgZnVuY3Rpb24oKSB7XG5yZXR1cm4gXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKVxuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuXG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRleHBvcnRzOiB7fSxcbiBcdFx0XHRpZDogbW9kdWxlSWQsXG4gXHRcdFx0bG9hZGVkOiBmYWxzZVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sb2FkZWQgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKDApO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2svYm9vdHN0cmFwIGU0NzM4ZmM3MmE3YjIzMDM5ODg5IiwiLypcbiAqIENvcHlyaWdodCAyMDA5LTIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFLnR4dCBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuZXhwb3J0cy5Tb3VyY2VNYXBHZW5lcmF0b3IgPSByZXF1aXJlKCcuL2xpYi9zb3VyY2UtbWFwLWdlbmVyYXRvcicpLlNvdXJjZU1hcEdlbmVyYXRvcjtcbmV4cG9ydHMuU291cmNlTWFwQ29uc3VtZXIgPSByZXF1aXJlKCcuL2xpYi9zb3VyY2UtbWFwLWNvbnN1bWVyJykuU291cmNlTWFwQ29uc3VtZXI7XG5leHBvcnRzLlNvdXJjZU5vZGUgPSByZXF1aXJlKCcuL2xpYi9zb3VyY2Utbm9kZScpLlNvdXJjZU5vZGU7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL3NvdXJjZS1tYXAuanNcbi8vIG1vZHVsZSBpZCA9IDBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgYmFzZTY0VkxRID0gcmVxdWlyZSgnLi9iYXNlNjQtdmxxJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xudmFyIEFycmF5U2V0ID0gcmVxdWlyZSgnLi9hcnJheS1zZXQnKS5BcnJheVNldDtcbnZhciBNYXBwaW5nTGlzdCA9IHJlcXVpcmUoJy4vbWFwcGluZy1saXN0JykuTWFwcGluZ0xpc3Q7XG5cbi8qKlxuICogQW4gaW5zdGFuY2Ugb2YgdGhlIFNvdXJjZU1hcEdlbmVyYXRvciByZXByZXNlbnRzIGEgc291cmNlIG1hcCB3aGljaCBpc1xuICogYmVpbmcgYnVpbHQgaW5jcmVtZW50YWxseS4gWW91IG1heSBwYXNzIGFuIG9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmdcbiAqIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGZpbGU6IFRoZSBmaWxlbmFtZSBvZiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS5cbiAqICAgLSBzb3VyY2VSb290OiBBIHJvb3QgZm9yIGFsbCByZWxhdGl2ZSBVUkxzIGluIHRoaXMgc291cmNlIG1hcC5cbiAqL1xuZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yKGFBcmdzKSB7XG4gIGlmICghYUFyZ3MpIHtcbiAgICBhQXJncyA9IHt9O1xuICB9XG4gIHRoaXMuX2ZpbGUgPSB1dGlsLmdldEFyZyhhQXJncywgJ2ZpbGUnLCBudWxsKTtcbiAgdGhpcy5fc291cmNlUm9vdCA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlUm9vdCcsIG51bGwpO1xuICB0aGlzLl9za2lwVmFsaWRhdGlvbiA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc2tpcFZhbGlkYXRpb24nLCBmYWxzZSk7XG4gIHRoaXMuX3NvdXJjZXMgPSBuZXcgQXJyYXlTZXQoKTtcbiAgdGhpcy5fbmFtZXMgPSBuZXcgQXJyYXlTZXQoKTtcbiAgdGhpcy5fbWFwcGluZ3MgPSBuZXcgTWFwcGluZ0xpc3QoKTtcbiAgdGhpcy5fc291cmNlc0NvbnRlbnRzID0gbnVsbDtcbn1cblxuU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBTb3VyY2VNYXBHZW5lcmF0b3IgYmFzZWQgb24gYSBTb3VyY2VNYXBDb25zdW1lclxuICpcbiAqIEBwYXJhbSBhU291cmNlTWFwQ29uc3VtZXIgVGhlIFNvdXJjZU1hcC5cbiAqL1xuU291cmNlTWFwR2VuZXJhdG9yLmZyb21Tb3VyY2VNYXAgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBHZW5lcmF0b3JfZnJvbVNvdXJjZU1hcChhU291cmNlTWFwQ29uc3VtZXIpIHtcbiAgICB2YXIgc291cmNlUm9vdCA9IGFTb3VyY2VNYXBDb25zdW1lci5zb3VyY2VSb290O1xuICAgIHZhciBnZW5lcmF0b3IgPSBuZXcgU291cmNlTWFwR2VuZXJhdG9yKHtcbiAgICAgIGZpbGU6IGFTb3VyY2VNYXBDb25zdW1lci5maWxlLFxuICAgICAgc291cmNlUm9vdDogc291cmNlUm9vdFxuICAgIH0pO1xuICAgIGFTb3VyY2VNYXBDb25zdW1lci5lYWNoTWFwcGluZyhmdW5jdGlvbiAobWFwcGluZykge1xuICAgICAgdmFyIG5ld01hcHBpbmcgPSB7XG4gICAgICAgIGdlbmVyYXRlZDoge1xuICAgICAgICAgIGxpbmU6IG1hcHBpbmcuZ2VuZXJhdGVkTGluZSxcbiAgICAgICAgICBjb2x1bW46IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGlmIChtYXBwaW5nLnNvdXJjZSAhPSBudWxsKSB7XG4gICAgICAgIG5ld01hcHBpbmcuc291cmNlID0gbWFwcGluZy5zb3VyY2U7XG4gICAgICAgIGlmIChzb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgICAgICBuZXdNYXBwaW5nLnNvdXJjZSA9IHV0aWwucmVsYXRpdmUoc291cmNlUm9vdCwgbmV3TWFwcGluZy5zb3VyY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV3TWFwcGluZy5vcmlnaW5hbCA9IHtcbiAgICAgICAgICBsaW5lOiBtYXBwaW5nLm9yaWdpbmFsTGluZSxcbiAgICAgICAgICBjb2x1bW46IG1hcHBpbmcub3JpZ2luYWxDb2x1bW5cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAobWFwcGluZy5uYW1lICE9IG51bGwpIHtcbiAgICAgICAgICBuZXdNYXBwaW5nLm5hbWUgPSBtYXBwaW5nLm5hbWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZ2VuZXJhdG9yLmFkZE1hcHBpbmcobmV3TWFwcGluZyk7XG4gICAgfSk7XG4gICAgYVNvdXJjZU1hcENvbnN1bWVyLnNvdXJjZXMuZm9yRWFjaChmdW5jdGlvbiAoc291cmNlRmlsZSkge1xuICAgICAgdmFyIGNvbnRlbnQgPSBhU291cmNlTWFwQ29uc3VtZXIuc291cmNlQ29udGVudEZvcihzb3VyY2VGaWxlKTtcbiAgICAgIGlmIChjb250ZW50ICE9IG51bGwpIHtcbiAgICAgICAgZ2VuZXJhdG9yLnNldFNvdXJjZUNvbnRlbnQoc291cmNlRmlsZSwgY29udGVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGdlbmVyYXRvcjtcbiAgfTtcblxuLyoqXG4gKiBBZGQgYSBzaW5nbGUgbWFwcGluZyBmcm9tIG9yaWdpbmFsIHNvdXJjZSBsaW5lIGFuZCBjb2x1bW4gdG8gdGhlIGdlbmVyYXRlZFxuICogc291cmNlJ3MgbGluZSBhbmQgY29sdW1uIGZvciB0aGlzIHNvdXJjZSBtYXAgYmVpbmcgY3JlYXRlZC4gVGhlIG1hcHBpbmdcbiAqIG9iamVjdCBzaG91bGQgaGF2ZSB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGdlbmVyYXRlZDogQW4gb2JqZWN0IHdpdGggdGhlIGdlbmVyYXRlZCBsaW5lIGFuZCBjb2x1bW4gcG9zaXRpb25zLlxuICogICAtIG9yaWdpbmFsOiBBbiBvYmplY3Qgd2l0aCB0aGUgb3JpZ2luYWwgbGluZSBhbmQgY29sdW1uIHBvc2l0aW9ucy5cbiAqICAgLSBzb3VyY2U6IFRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZSAocmVsYXRpdmUgdG8gdGhlIHNvdXJjZVJvb3QpLlxuICogICAtIG5hbWU6IEFuIG9wdGlvbmFsIG9yaWdpbmFsIHRva2VuIG5hbWUgZm9yIHRoaXMgbWFwcGluZy5cbiAqL1xuU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5hZGRNYXBwaW5nID1cbiAgZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yX2FkZE1hcHBpbmcoYUFyZ3MpIHtcbiAgICB2YXIgZ2VuZXJhdGVkID0gdXRpbC5nZXRBcmcoYUFyZ3MsICdnZW5lcmF0ZWQnKTtcbiAgICB2YXIgb3JpZ2luYWwgPSB1dGlsLmdldEFyZyhhQXJncywgJ29yaWdpbmFsJywgbnVsbCk7XG4gICAgdmFyIHNvdXJjZSA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJywgbnVsbCk7XG4gICAgdmFyIG5hbWUgPSB1dGlsLmdldEFyZyhhQXJncywgJ25hbWUnLCBudWxsKTtcblxuICAgIGlmICghdGhpcy5fc2tpcFZhbGlkYXRpb24pIHtcbiAgICAgIHRoaXMuX3ZhbGlkYXRlTWFwcGluZyhnZW5lcmF0ZWQsIG9yaWdpbmFsLCBzb3VyY2UsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmIChzb3VyY2UgIT0gbnVsbCkge1xuICAgICAgc291cmNlID0gU3RyaW5nKHNvdXJjZSk7XG4gICAgICBpZiAoIXRoaXMuX3NvdXJjZXMuaGFzKHNvdXJjZSkpIHtcbiAgICAgICAgdGhpcy5fc291cmNlcy5hZGQoc291cmNlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobmFtZSAhPSBudWxsKSB7XG4gICAgICBuYW1lID0gU3RyaW5nKG5hbWUpO1xuICAgICAgaWYgKCF0aGlzLl9uYW1lcy5oYXMobmFtZSkpIHtcbiAgICAgICAgdGhpcy5fbmFtZXMuYWRkKG5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX21hcHBpbmdzLmFkZCh7XG4gICAgICBnZW5lcmF0ZWRMaW5lOiBnZW5lcmF0ZWQubGluZSxcbiAgICAgIGdlbmVyYXRlZENvbHVtbjogZ2VuZXJhdGVkLmNvbHVtbixcbiAgICAgIG9yaWdpbmFsTGluZTogb3JpZ2luYWwgIT0gbnVsbCAmJiBvcmlnaW5hbC5saW5lLFxuICAgICAgb3JpZ2luYWxDb2x1bW46IG9yaWdpbmFsICE9IG51bGwgJiYgb3JpZ2luYWwuY29sdW1uLFxuICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICBuYW1lOiBuYW1lXG4gICAgfSk7XG4gIH07XG5cbi8qKlxuICogU2V0IHRoZSBzb3VyY2UgY29udGVudCBmb3IgYSBzb3VyY2UgZmlsZS5cbiAqL1xuU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5zZXRTb3VyY2VDb250ZW50ID1cbiAgZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yX3NldFNvdXJjZUNvbnRlbnQoYVNvdXJjZUZpbGUsIGFTb3VyY2VDb250ZW50KSB7XG4gICAgdmFyIHNvdXJjZSA9IGFTb3VyY2VGaWxlO1xuICAgIGlmICh0aGlzLl9zb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgIHNvdXJjZSA9IHV0aWwucmVsYXRpdmUodGhpcy5fc291cmNlUm9vdCwgc291cmNlKTtcbiAgICB9XG5cbiAgICBpZiAoYVNvdXJjZUNvbnRlbnQgIT0gbnVsbCkge1xuICAgICAgLy8gQWRkIHRoZSBzb3VyY2UgY29udGVudCB0byB0aGUgX3NvdXJjZXNDb250ZW50cyBtYXAuXG4gICAgICAvLyBDcmVhdGUgYSBuZXcgX3NvdXJjZXNDb250ZW50cyBtYXAgaWYgdGhlIHByb3BlcnR5IGlzIG51bGwuXG4gICAgICBpZiAoIXRoaXMuX3NvdXJjZXNDb250ZW50cykge1xuICAgICAgICB0aGlzLl9zb3VyY2VzQ29udGVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgfVxuICAgICAgdGhpcy5fc291cmNlc0NvbnRlbnRzW3V0aWwudG9TZXRTdHJpbmcoc291cmNlKV0gPSBhU291cmNlQ29udGVudDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3NvdXJjZXNDb250ZW50cykge1xuICAgICAgLy8gUmVtb3ZlIHRoZSBzb3VyY2UgZmlsZSBmcm9tIHRoZSBfc291cmNlc0NvbnRlbnRzIG1hcC5cbiAgICAgIC8vIElmIHRoZSBfc291cmNlc0NvbnRlbnRzIG1hcCBpcyBlbXB0eSwgc2V0IHRoZSBwcm9wZXJ0eSB0byBudWxsLlxuICAgICAgZGVsZXRlIHRoaXMuX3NvdXJjZXNDb250ZW50c1t1dGlsLnRvU2V0U3RyaW5nKHNvdXJjZSldO1xuICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuX3NvdXJjZXNDb250ZW50cykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMuX3NvdXJjZXNDb250ZW50cyA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4vKipcbiAqIEFwcGxpZXMgdGhlIG1hcHBpbmdzIG9mIGEgc3ViLXNvdXJjZS1tYXAgZm9yIGEgc3BlY2lmaWMgc291cmNlIGZpbGUgdG8gdGhlXG4gKiBzb3VyY2UgbWFwIGJlaW5nIGdlbmVyYXRlZC4gRWFjaCBtYXBwaW5nIHRvIHRoZSBzdXBwbGllZCBzb3VyY2UgZmlsZSBpc1xuICogcmV3cml0dGVuIHVzaW5nIHRoZSBzdXBwbGllZCBzb3VyY2UgbWFwLiBOb3RlOiBUaGUgcmVzb2x1dGlvbiBmb3IgdGhlXG4gKiByZXN1bHRpbmcgbWFwcGluZ3MgaXMgdGhlIG1pbmltaXVtIG9mIHRoaXMgbWFwIGFuZCB0aGUgc3VwcGxpZWQgbWFwLlxuICpcbiAqIEBwYXJhbSBhU291cmNlTWFwQ29uc3VtZXIgVGhlIHNvdXJjZSBtYXAgdG8gYmUgYXBwbGllZC5cbiAqIEBwYXJhbSBhU291cmNlRmlsZSBPcHRpb25hbC4gVGhlIGZpbGVuYW1lIG9mIHRoZSBzb3VyY2UgZmlsZS5cbiAqICAgICAgICBJZiBvbWl0dGVkLCBTb3VyY2VNYXBDb25zdW1lcidzIGZpbGUgcHJvcGVydHkgd2lsbCBiZSB1c2VkLlxuICogQHBhcmFtIGFTb3VyY2VNYXBQYXRoIE9wdGlvbmFsLiBUaGUgZGlybmFtZSBvZiB0aGUgcGF0aCB0byB0aGUgc291cmNlIG1hcFxuICogICAgICAgIHRvIGJlIGFwcGxpZWQuIElmIHJlbGF0aXZlLCBpdCBpcyByZWxhdGl2ZSB0byB0aGUgU291cmNlTWFwQ29uc3VtZXIuXG4gKiAgICAgICAgVGhpcyBwYXJhbWV0ZXIgaXMgbmVlZGVkIHdoZW4gdGhlIHR3byBzb3VyY2UgbWFwcyBhcmVuJ3QgaW4gdGhlIHNhbWVcbiAqICAgICAgICBkaXJlY3RvcnksIGFuZCB0aGUgc291cmNlIG1hcCB0byBiZSBhcHBsaWVkIGNvbnRhaW5zIHJlbGF0aXZlIHNvdXJjZVxuICogICAgICAgIHBhdGhzLiBJZiBzbywgdGhvc2UgcmVsYXRpdmUgc291cmNlIHBhdGhzIG5lZWQgdG8gYmUgcmV3cml0dGVuXG4gKiAgICAgICAgcmVsYXRpdmUgdG8gdGhlIFNvdXJjZU1hcEdlbmVyYXRvci5cbiAqL1xuU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5hcHBseVNvdXJjZU1hcCA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcl9hcHBseVNvdXJjZU1hcChhU291cmNlTWFwQ29uc3VtZXIsIGFTb3VyY2VGaWxlLCBhU291cmNlTWFwUGF0aCkge1xuICAgIHZhciBzb3VyY2VGaWxlID0gYVNvdXJjZUZpbGU7XG4gICAgLy8gSWYgYVNvdXJjZUZpbGUgaXMgb21pdHRlZCwgd2Ugd2lsbCB1c2UgdGhlIGZpbGUgcHJvcGVydHkgb2YgdGhlIFNvdXJjZU1hcFxuICAgIGlmIChhU291cmNlRmlsZSA9PSBudWxsKSB7XG4gICAgICBpZiAoYVNvdXJjZU1hcENvbnN1bWVyLmZpbGUgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ1NvdXJjZU1hcEdlbmVyYXRvci5wcm90b3R5cGUuYXBwbHlTb3VyY2VNYXAgcmVxdWlyZXMgZWl0aGVyIGFuIGV4cGxpY2l0IHNvdXJjZSBmaWxlLCAnICtcbiAgICAgICAgICAnb3IgdGhlIHNvdXJjZSBtYXBcXCdzIFwiZmlsZVwiIHByb3BlcnR5LiBCb3RoIHdlcmUgb21pdHRlZC4nXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBzb3VyY2VGaWxlID0gYVNvdXJjZU1hcENvbnN1bWVyLmZpbGU7XG4gICAgfVxuICAgIHZhciBzb3VyY2VSb290ID0gdGhpcy5fc291cmNlUm9vdDtcbiAgICAvLyBNYWtlIFwic291cmNlRmlsZVwiIHJlbGF0aXZlIGlmIGFuIGFic29sdXRlIFVybCBpcyBwYXNzZWQuXG4gICAgaWYgKHNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgc291cmNlRmlsZSA9IHV0aWwucmVsYXRpdmUoc291cmNlUm9vdCwgc291cmNlRmlsZSk7XG4gICAgfVxuICAgIC8vIEFwcGx5aW5nIHRoZSBTb3VyY2VNYXAgY2FuIGFkZCBhbmQgcmVtb3ZlIGl0ZW1zIGZyb20gdGhlIHNvdXJjZXMgYW5kXG4gICAgLy8gdGhlIG5hbWVzIGFycmF5LlxuICAgIHZhciBuZXdTb3VyY2VzID0gbmV3IEFycmF5U2V0KCk7XG4gICAgdmFyIG5ld05hbWVzID0gbmV3IEFycmF5U2V0KCk7XG5cbiAgICAvLyBGaW5kIG1hcHBpbmdzIGZvciB0aGUgXCJzb3VyY2VGaWxlXCJcbiAgICB0aGlzLl9tYXBwaW5ncy51bnNvcnRlZEZvckVhY2goZnVuY3Rpb24gKG1hcHBpbmcpIHtcbiAgICAgIGlmIChtYXBwaW5nLnNvdXJjZSA9PT0gc291cmNlRmlsZSAmJiBtYXBwaW5nLm9yaWdpbmFsTGluZSAhPSBudWxsKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIGl0IGNhbiBiZSBtYXBwZWQgYnkgdGhlIHNvdXJjZSBtYXAsIHRoZW4gdXBkYXRlIHRoZSBtYXBwaW5nLlxuICAgICAgICB2YXIgb3JpZ2luYWwgPSBhU291cmNlTWFwQ29uc3VtZXIub3JpZ2luYWxQb3NpdGlvbkZvcih7XG4gICAgICAgICAgbGluZTogbWFwcGluZy5vcmlnaW5hbExpbmUsXG4gICAgICAgICAgY29sdW1uOiBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAob3JpZ2luYWwuc291cmNlICE9IG51bGwpIHtcbiAgICAgICAgICAvLyBDb3B5IG1hcHBpbmdcbiAgICAgICAgICBtYXBwaW5nLnNvdXJjZSA9IG9yaWdpbmFsLnNvdXJjZTtcbiAgICAgICAgICBpZiAoYVNvdXJjZU1hcFBhdGggIT0gbnVsbCkge1xuICAgICAgICAgICAgbWFwcGluZy5zb3VyY2UgPSB1dGlsLmpvaW4oYVNvdXJjZU1hcFBhdGgsIG1hcHBpbmcuc291cmNlKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICAgICAgICBtYXBwaW5nLnNvdXJjZSA9IHV0aWwucmVsYXRpdmUoc291cmNlUm9vdCwgbWFwcGluZy5zb3VyY2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsTGluZSA9IG9yaWdpbmFsLmxpbmU7XG4gICAgICAgICAgbWFwcGluZy5vcmlnaW5hbENvbHVtbiA9IG9yaWdpbmFsLmNvbHVtbjtcbiAgICAgICAgICBpZiAob3JpZ2luYWwubmFtZSAhPSBudWxsKSB7XG4gICAgICAgICAgICBtYXBwaW5nLm5hbWUgPSBvcmlnaW5hbC5uYW1lO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgc291cmNlID0gbWFwcGluZy5zb3VyY2U7XG4gICAgICBpZiAoc291cmNlICE9IG51bGwgJiYgIW5ld1NvdXJjZXMuaGFzKHNvdXJjZSkpIHtcbiAgICAgICAgbmV3U291cmNlcy5hZGQoc291cmNlKTtcbiAgICAgIH1cblxuICAgICAgdmFyIG5hbWUgPSBtYXBwaW5nLm5hbWU7XG4gICAgICBpZiAobmFtZSAhPSBudWxsICYmICFuZXdOYW1lcy5oYXMobmFtZSkpIHtcbiAgICAgICAgbmV3TmFtZXMuYWRkKG5hbWUpO1xuICAgICAgfVxuXG4gICAgfSwgdGhpcyk7XG4gICAgdGhpcy5fc291cmNlcyA9IG5ld1NvdXJjZXM7XG4gICAgdGhpcy5fbmFtZXMgPSBuZXdOYW1lcztcblxuICAgIC8vIENvcHkgc291cmNlc0NvbnRlbnRzIG9mIGFwcGxpZWQgbWFwLlxuICAgIGFTb3VyY2VNYXBDb25zdW1lci5zb3VyY2VzLmZvckVhY2goZnVuY3Rpb24gKHNvdXJjZUZpbGUpIHtcbiAgICAgIHZhciBjb250ZW50ID0gYVNvdXJjZU1hcENvbnN1bWVyLnNvdXJjZUNvbnRlbnRGb3Ioc291cmNlRmlsZSk7XG4gICAgICBpZiAoY29udGVudCAhPSBudWxsKSB7XG4gICAgICAgIGlmIChhU291cmNlTWFwUGF0aCAhPSBudWxsKSB7XG4gICAgICAgICAgc291cmNlRmlsZSA9IHV0aWwuam9pbihhU291cmNlTWFwUGF0aCwgc291cmNlRmlsZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgICAgIHNvdXJjZUZpbGUgPSB1dGlsLnJlbGF0aXZlKHNvdXJjZVJvb3QsIHNvdXJjZUZpbGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0U291cmNlQ29udGVudChzb3VyY2VGaWxlLCBjb250ZW50KTtcbiAgICAgIH1cbiAgICB9LCB0aGlzKTtcbiAgfTtcblxuLyoqXG4gKiBBIG1hcHBpbmcgY2FuIGhhdmUgb25lIG9mIHRoZSB0aHJlZSBsZXZlbHMgb2YgZGF0YTpcbiAqXG4gKiAgIDEuIEp1c3QgdGhlIGdlbmVyYXRlZCBwb3NpdGlvbi5cbiAqICAgMi4gVGhlIEdlbmVyYXRlZCBwb3NpdGlvbiwgb3JpZ2luYWwgcG9zaXRpb24sIGFuZCBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIDMuIEdlbmVyYXRlZCBhbmQgb3JpZ2luYWwgcG9zaXRpb24sIG9yaWdpbmFsIHNvdXJjZSwgYXMgd2VsbCBhcyBhIG5hbWVcbiAqICAgICAgdG9rZW4uXG4gKlxuICogVG8gbWFpbnRhaW4gY29uc2lzdGVuY3ksIHdlIHZhbGlkYXRlIHRoYXQgYW55IG5ldyBtYXBwaW5nIGJlaW5nIGFkZGVkIGZhbGxzXG4gKiBpbiB0byBvbmUgb2YgdGhlc2UgY2F0ZWdvcmllcy5cbiAqL1xuU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5fdmFsaWRhdGVNYXBwaW5nID1cbiAgZnVuY3Rpb24gU291cmNlTWFwR2VuZXJhdG9yX3ZhbGlkYXRlTWFwcGluZyhhR2VuZXJhdGVkLCBhT3JpZ2luYWwsIGFTb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYU5hbWUpIHtcbiAgICAvLyBXaGVuIGFPcmlnaW5hbCBpcyB0cnV0aHkgYnV0IGhhcyBlbXB0eSB2YWx1ZXMgZm9yIC5saW5lIGFuZCAuY29sdW1uLFxuICAgIC8vIGl0IGlzIG1vc3QgbGlrZWx5IGEgcHJvZ3JhbW1lciBlcnJvci4gSW4gdGhpcyBjYXNlIHdlIHRocm93IGEgdmVyeVxuICAgIC8vIHNwZWNpZmljIGVycm9yIG1lc3NhZ2UgdG8gdHJ5IHRvIGd1aWRlIHRoZW0gdGhlIHJpZ2h0IHdheS5cbiAgICAvLyBGb3IgZXhhbXBsZTogaHR0cHM6Ly9naXRodWIuY29tL1BvbHltZXIvcG9seW1lci1idW5kbGVyL3B1bGwvNTE5XG4gICAgaWYgKGFPcmlnaW5hbCAmJiB0eXBlb2YgYU9yaWdpbmFsLmxpbmUgIT09ICdudW1iZXInICYmIHR5cGVvZiBhT3JpZ2luYWwuY29sdW1uICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnb3JpZ2luYWwubGluZSBhbmQgb3JpZ2luYWwuY29sdW1uIGFyZSBub3QgbnVtYmVycyAtLSB5b3UgcHJvYmFibHkgbWVhbnQgdG8gb21pdCAnICtcbiAgICAgICAgICAgICd0aGUgb3JpZ2luYWwgbWFwcGluZyBlbnRpcmVseSBhbmQgb25seSBtYXAgdGhlIGdlbmVyYXRlZCBwb3NpdGlvbi4gSWYgc28sIHBhc3MgJyArXG4gICAgICAgICAgICAnbnVsbCBmb3IgdGhlIG9yaWdpbmFsIG1hcHBpbmcgaW5zdGVhZCBvZiBhbiBvYmplY3Qgd2l0aCBlbXB0eSBvciBudWxsIHZhbHVlcy4nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGFHZW5lcmF0ZWQgJiYgJ2xpbmUnIGluIGFHZW5lcmF0ZWQgJiYgJ2NvbHVtbicgaW4gYUdlbmVyYXRlZFxuICAgICAgICAmJiBhR2VuZXJhdGVkLmxpbmUgPiAwICYmIGFHZW5lcmF0ZWQuY29sdW1uID49IDBcbiAgICAgICAgJiYgIWFPcmlnaW5hbCAmJiAhYVNvdXJjZSAmJiAhYU5hbWUpIHtcbiAgICAgIC8vIENhc2UgMS5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxzZSBpZiAoYUdlbmVyYXRlZCAmJiAnbGluZScgaW4gYUdlbmVyYXRlZCAmJiAnY29sdW1uJyBpbiBhR2VuZXJhdGVkXG4gICAgICAgICAgICAgJiYgYU9yaWdpbmFsICYmICdsaW5lJyBpbiBhT3JpZ2luYWwgJiYgJ2NvbHVtbicgaW4gYU9yaWdpbmFsXG4gICAgICAgICAgICAgJiYgYUdlbmVyYXRlZC5saW5lID4gMCAmJiBhR2VuZXJhdGVkLmNvbHVtbiA+PSAwXG4gICAgICAgICAgICAgJiYgYU9yaWdpbmFsLmxpbmUgPiAwICYmIGFPcmlnaW5hbC5jb2x1bW4gPj0gMFxuICAgICAgICAgICAgICYmIGFTb3VyY2UpIHtcbiAgICAgIC8vIENhc2VzIDIgYW5kIDMuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIG1hcHBpbmc6ICcgKyBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGdlbmVyYXRlZDogYUdlbmVyYXRlZCxcbiAgICAgICAgc291cmNlOiBhU291cmNlLFxuICAgICAgICBvcmlnaW5hbDogYU9yaWdpbmFsLFxuICAgICAgICBuYW1lOiBhTmFtZVxuICAgICAgfSkpO1xuICAgIH1cbiAgfTtcblxuLyoqXG4gKiBTZXJpYWxpemUgdGhlIGFjY3VtdWxhdGVkIG1hcHBpbmdzIGluIHRvIHRoZSBzdHJlYW0gb2YgYmFzZSA2NCBWTFFzXG4gKiBzcGVjaWZpZWQgYnkgdGhlIHNvdXJjZSBtYXAgZm9ybWF0LlxuICovXG5Tb3VyY2VNYXBHZW5lcmF0b3IucHJvdG90eXBlLl9zZXJpYWxpemVNYXBwaW5ncyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcl9zZXJpYWxpemVNYXBwaW5ncygpIHtcbiAgICB2YXIgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSAwO1xuICAgIHZhciBwcmV2aW91c0dlbmVyYXRlZExpbmUgPSAxO1xuICAgIHZhciBwcmV2aW91c09yaWdpbmFsQ29sdW1uID0gMDtcbiAgICB2YXIgcHJldmlvdXNPcmlnaW5hbExpbmUgPSAwO1xuICAgIHZhciBwcmV2aW91c05hbWUgPSAwO1xuICAgIHZhciBwcmV2aW91c1NvdXJjZSA9IDA7XG4gICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgIHZhciBuZXh0O1xuICAgIHZhciBtYXBwaW5nO1xuICAgIHZhciBuYW1lSWR4O1xuICAgIHZhciBzb3VyY2VJZHg7XG5cbiAgICB2YXIgbWFwcGluZ3MgPSB0aGlzLl9tYXBwaW5ncy50b0FycmF5KCk7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IG1hcHBpbmdzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBtYXBwaW5nID0gbWFwcGluZ3NbaV07XG4gICAgICBuZXh0ID0gJydcblxuICAgICAgaWYgKG1hcHBpbmcuZ2VuZXJhdGVkTGluZSAhPT0gcHJldmlvdXNHZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgIHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uID0gMDtcbiAgICAgICAgd2hpbGUgKG1hcHBpbmcuZ2VuZXJhdGVkTGluZSAhPT0gcHJldmlvdXNHZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgICAgbmV4dCArPSAnOyc7XG4gICAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRMaW5lKys7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgICBpZiAoIXV0aWwuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zSW5mbGF0ZWQobWFwcGluZywgbWFwcGluZ3NbaSAtIDFdKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIG5leHQgKz0gJywnO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG5leHQgKz0gYmFzZTY0VkxRLmVuY29kZShtYXBwaW5nLmdlbmVyYXRlZENvbHVtblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBwcmV2aW91c0dlbmVyYXRlZENvbHVtbik7XG4gICAgICBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiA9IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uO1xuXG4gICAgICBpZiAobWFwcGluZy5zb3VyY2UgIT0gbnVsbCkge1xuICAgICAgICBzb3VyY2VJZHggPSB0aGlzLl9zb3VyY2VzLmluZGV4T2YobWFwcGluZy5zb3VyY2UpO1xuICAgICAgICBuZXh0ICs9IGJhc2U2NFZMUS5lbmNvZGUoc291cmNlSWR4IC0gcHJldmlvdXNTb3VyY2UpO1xuICAgICAgICBwcmV2aW91c1NvdXJjZSA9IHNvdXJjZUlkeDtcblxuICAgICAgICAvLyBsaW5lcyBhcmUgc3RvcmVkIDAtYmFzZWQgaW4gU291cmNlTWFwIHNwZWMgdmVyc2lvbiAzXG4gICAgICAgIG5leHQgKz0gYmFzZTY0VkxRLmVuY29kZShtYXBwaW5nLm9yaWdpbmFsTGluZSAtIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBwcmV2aW91c09yaWdpbmFsTGluZSk7XG4gICAgICAgIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gbWFwcGluZy5vcmlnaW5hbExpbmUgLSAxO1xuXG4gICAgICAgIG5leHQgKz0gYmFzZTY0VkxRLmVuY29kZShtYXBwaW5nLm9yaWdpbmFsQ29sdW1uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gcHJldmlvdXNPcmlnaW5hbENvbHVtbik7XG4gICAgICAgIHByZXZpb3VzT3JpZ2luYWxDb2x1bW4gPSBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uO1xuXG4gICAgICAgIGlmIChtYXBwaW5nLm5hbWUgIT0gbnVsbCkge1xuICAgICAgICAgIG5hbWVJZHggPSB0aGlzLl9uYW1lcy5pbmRleE9mKG1hcHBpbmcubmFtZSk7XG4gICAgICAgICAgbmV4dCArPSBiYXNlNjRWTFEuZW5jb2RlKG5hbWVJZHggLSBwcmV2aW91c05hbWUpO1xuICAgICAgICAgIHByZXZpb3VzTmFtZSA9IG5hbWVJZHg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmVzdWx0ICs9IG5leHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuU291cmNlTWFwR2VuZXJhdG9yLnByb3RvdHlwZS5fZ2VuZXJhdGVTb3VyY2VzQ29udGVudCA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcl9nZW5lcmF0ZVNvdXJjZXNDb250ZW50KGFTb3VyY2VzLCBhU291cmNlUm9vdCkge1xuICAgIHJldHVybiBhU291cmNlcy5tYXAoZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgaWYgKCF0aGlzLl9zb3VyY2VzQ29udGVudHMpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBpZiAoYVNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgICBzb3VyY2UgPSB1dGlsLnJlbGF0aXZlKGFTb3VyY2VSb290LCBzb3VyY2UpO1xuICAgICAgfVxuICAgICAgdmFyIGtleSA9IHV0aWwudG9TZXRTdHJpbmcoc291cmNlKTtcbiAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5fc291cmNlc0NvbnRlbnRzLCBrZXkpXG4gICAgICAgID8gdGhpcy5fc291cmNlc0NvbnRlbnRzW2tleV1cbiAgICAgICAgOiBudWxsO1xuICAgIH0sIHRoaXMpO1xuICB9O1xuXG4vKipcbiAqIEV4dGVybmFsaXplIHRoZSBzb3VyY2UgbWFwLlxuICovXG5Tb3VyY2VNYXBHZW5lcmF0b3IucHJvdG90eXBlLnRvSlNPTiA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcEdlbmVyYXRvcl90b0pTT04oKSB7XG4gICAgdmFyIG1hcCA9IHtcbiAgICAgIHZlcnNpb246IHRoaXMuX3ZlcnNpb24sXG4gICAgICBzb3VyY2VzOiB0aGlzLl9zb3VyY2VzLnRvQXJyYXkoKSxcbiAgICAgIG5hbWVzOiB0aGlzLl9uYW1lcy50b0FycmF5KCksXG4gICAgICBtYXBwaW5nczogdGhpcy5fc2VyaWFsaXplTWFwcGluZ3MoKVxuICAgIH07XG4gICAgaWYgKHRoaXMuX2ZpbGUgIT0gbnVsbCkge1xuICAgICAgbWFwLmZpbGUgPSB0aGlzLl9maWxlO1xuICAgIH1cbiAgICBpZiAodGhpcy5fc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICBtYXAuc291cmNlUm9vdCA9IHRoaXMuX3NvdXJjZVJvb3Q7XG4gICAgfVxuICAgIGlmICh0aGlzLl9zb3VyY2VzQ29udGVudHMpIHtcbiAgICAgIG1hcC5zb3VyY2VzQ29udGVudCA9IHRoaXMuX2dlbmVyYXRlU291cmNlc0NvbnRlbnQobWFwLnNvdXJjZXMsIG1hcC5zb3VyY2VSb290KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWFwO1xuICB9O1xuXG4vKipcbiAqIFJlbmRlciB0aGUgc291cmNlIG1hcCBiZWluZyBnZW5lcmF0ZWQgdG8gYSBzdHJpbmcuXG4gKi9cblNvdXJjZU1hcEdlbmVyYXRvci5wcm90b3R5cGUudG9TdHJpbmcgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBHZW5lcmF0b3JfdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMudG9KU09OKCkpO1xuICB9O1xuXG5leHBvcnRzLlNvdXJjZU1hcEdlbmVyYXRvciA9IFNvdXJjZU1hcEdlbmVyYXRvcjtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbGliL3NvdXJjZS1tYXAtZ2VuZXJhdG9yLmpzXG4vLyBtb2R1bGUgaWQgPSAxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKlxuICogQmFzZWQgb24gdGhlIEJhc2UgNjQgVkxRIGltcGxlbWVudGF0aW9uIGluIENsb3N1cmUgQ29tcGlsZXI6XG4gKiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nsb3N1cmUtY29tcGlsZXIvc291cmNlL2Jyb3dzZS90cnVuay9zcmMvY29tL2dvb2dsZS9kZWJ1Z2dpbmcvc291cmNlbWFwL0Jhc2U2NFZMUS5qYXZhXG4gKlxuICogQ29weXJpZ2h0IDIwMTEgVGhlIENsb3N1cmUgQ29tcGlsZXIgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dFxuICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZVxuICogbWV0OlxuICpcbiAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0XG4gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlXG4gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZ1xuICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkXG4gKiAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gKiAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzXG4gKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWRcbiAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cbiAqXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTXG4gKiBcIkFTIElTXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UXG4gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1JcbiAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUXG4gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCxcbiAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1RcbiAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLFxuICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZXG4gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUXG4gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0VcbiAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKi9cblxudmFyIGJhc2U2NCA9IHJlcXVpcmUoJy4vYmFzZTY0Jyk7XG5cbi8vIEEgc2luZ2xlIGJhc2UgNjQgZGlnaXQgY2FuIGNvbnRhaW4gNiBiaXRzIG9mIGRhdGEuIEZvciB0aGUgYmFzZSA2NCB2YXJpYWJsZVxuLy8gbGVuZ3RoIHF1YW50aXRpZXMgd2UgdXNlIGluIHRoZSBzb3VyY2UgbWFwIHNwZWMsIHRoZSBmaXJzdCBiaXQgaXMgdGhlIHNpZ24sXG4vLyB0aGUgbmV4dCBmb3VyIGJpdHMgYXJlIHRoZSBhY3R1YWwgdmFsdWUsIGFuZCB0aGUgNnRoIGJpdCBpcyB0aGVcbi8vIGNvbnRpbnVhdGlvbiBiaXQuIFRoZSBjb250aW51YXRpb24gYml0IHRlbGxzIHVzIHdoZXRoZXIgdGhlcmUgYXJlIG1vcmVcbi8vIGRpZ2l0cyBpbiB0aGlzIHZhbHVlIGZvbGxvd2luZyB0aGlzIGRpZ2l0LlxuLy9cbi8vICAgQ29udGludWF0aW9uXG4vLyAgIHwgICAgU2lnblxuLy8gICB8ICAgIHxcbi8vICAgViAgICBWXG4vLyAgIDEwMTAxMVxuXG52YXIgVkxRX0JBU0VfU0hJRlQgPSA1O1xuXG4vLyBiaW5hcnk6IDEwMDAwMFxudmFyIFZMUV9CQVNFID0gMSA8PCBWTFFfQkFTRV9TSElGVDtcblxuLy8gYmluYXJ5OiAwMTExMTFcbnZhciBWTFFfQkFTRV9NQVNLID0gVkxRX0JBU0UgLSAxO1xuXG4vLyBiaW5hcnk6IDEwMDAwMFxudmFyIFZMUV9DT05USU5VQVRJT05fQklUID0gVkxRX0JBU0U7XG5cbi8qKlxuICogQ29udmVydHMgZnJvbSBhIHR3by1jb21wbGVtZW50IHZhbHVlIHRvIGEgdmFsdWUgd2hlcmUgdGhlIHNpZ24gYml0IGlzXG4gKiBwbGFjZWQgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdC4gIEZvciBleGFtcGxlLCBhcyBkZWNpbWFsczpcbiAqICAgMSBiZWNvbWVzIDIgKDEwIGJpbmFyeSksIC0xIGJlY29tZXMgMyAoMTEgYmluYXJ5KVxuICogICAyIGJlY29tZXMgNCAoMTAwIGJpbmFyeSksIC0yIGJlY29tZXMgNSAoMTAxIGJpbmFyeSlcbiAqL1xuZnVuY3Rpb24gdG9WTFFTaWduZWQoYVZhbHVlKSB7XG4gIHJldHVybiBhVmFsdWUgPCAwXG4gICAgPyAoKC1hVmFsdWUpIDw8IDEpICsgMVxuICAgIDogKGFWYWx1ZSA8PCAxKSArIDA7XG59XG5cbi8qKlxuICogQ29udmVydHMgdG8gYSB0d28tY29tcGxlbWVudCB2YWx1ZSBmcm9tIGEgdmFsdWUgd2hlcmUgdGhlIHNpZ24gYml0IGlzXG4gKiBwbGFjZWQgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdC4gIEZvciBleGFtcGxlLCBhcyBkZWNpbWFsczpcbiAqICAgMiAoMTAgYmluYXJ5KSBiZWNvbWVzIDEsIDMgKDExIGJpbmFyeSkgYmVjb21lcyAtMVxuICogICA0ICgxMDAgYmluYXJ5KSBiZWNvbWVzIDIsIDUgKDEwMSBiaW5hcnkpIGJlY29tZXMgLTJcbiAqL1xuZnVuY3Rpb24gZnJvbVZMUVNpZ25lZChhVmFsdWUpIHtcbiAgdmFyIGlzTmVnYXRpdmUgPSAoYVZhbHVlICYgMSkgPT09IDE7XG4gIHZhciBzaGlmdGVkID0gYVZhbHVlID4+IDE7XG4gIHJldHVybiBpc05lZ2F0aXZlXG4gICAgPyAtc2hpZnRlZFxuICAgIDogc2hpZnRlZDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBiYXNlIDY0IFZMUSBlbmNvZGVkIHZhbHVlLlxuICovXG5leHBvcnRzLmVuY29kZSA9IGZ1bmN0aW9uIGJhc2U2NFZMUV9lbmNvZGUoYVZhbHVlKSB7XG4gIHZhciBlbmNvZGVkID0gXCJcIjtcbiAgdmFyIGRpZ2l0O1xuXG4gIHZhciB2bHEgPSB0b1ZMUVNpZ25lZChhVmFsdWUpO1xuXG4gIGRvIHtcbiAgICBkaWdpdCA9IHZscSAmIFZMUV9CQVNFX01BU0s7XG4gICAgdmxxID4+Pj0gVkxRX0JBU0VfU0hJRlQ7XG4gICAgaWYgKHZscSA+IDApIHtcbiAgICAgIC8vIFRoZXJlIGFyZSBzdGlsbCBtb3JlIGRpZ2l0cyBpbiB0aGlzIHZhbHVlLCBzbyB3ZSBtdXN0IG1ha2Ugc3VyZSB0aGVcbiAgICAgIC8vIGNvbnRpbnVhdGlvbiBiaXQgaXMgbWFya2VkLlxuICAgICAgZGlnaXQgfD0gVkxRX0NPTlRJTlVBVElPTl9CSVQ7XG4gICAgfVxuICAgIGVuY29kZWQgKz0gYmFzZTY0LmVuY29kZShkaWdpdCk7XG4gIH0gd2hpbGUgKHZscSA+IDApO1xuXG4gIHJldHVybiBlbmNvZGVkO1xufTtcblxuLyoqXG4gKiBEZWNvZGVzIHRoZSBuZXh0IGJhc2UgNjQgVkxRIHZhbHVlIGZyb20gdGhlIGdpdmVuIHN0cmluZyBhbmQgcmV0dXJucyB0aGVcbiAqIHZhbHVlIGFuZCB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nIHZpYSB0aGUgb3V0IHBhcmFtZXRlci5cbiAqL1xuZXhwb3J0cy5kZWNvZGUgPSBmdW5jdGlvbiBiYXNlNjRWTFFfZGVjb2RlKGFTdHIsIGFJbmRleCwgYU91dFBhcmFtKSB7XG4gIHZhciBzdHJMZW4gPSBhU3RyLmxlbmd0aDtcbiAgdmFyIHJlc3VsdCA9IDA7XG4gIHZhciBzaGlmdCA9IDA7XG4gIHZhciBjb250aW51YXRpb24sIGRpZ2l0O1xuXG4gIGRvIHtcbiAgICBpZiAoYUluZGV4ID49IHN0ckxlbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbW9yZSBkaWdpdHMgaW4gYmFzZSA2NCBWTFEgdmFsdWUuXCIpO1xuICAgIH1cblxuICAgIGRpZ2l0ID0gYmFzZTY0LmRlY29kZShhU3RyLmNoYXJDb2RlQXQoYUluZGV4KyspKTtcbiAgICBpZiAoZGlnaXQgPT09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGJhc2U2NCBkaWdpdDogXCIgKyBhU3RyLmNoYXJBdChhSW5kZXggLSAxKSk7XG4gICAgfVxuXG4gICAgY29udGludWF0aW9uID0gISEoZGlnaXQgJiBWTFFfQ09OVElOVUFUSU9OX0JJVCk7XG4gICAgZGlnaXQgJj0gVkxRX0JBU0VfTUFTSztcbiAgICByZXN1bHQgPSByZXN1bHQgKyAoZGlnaXQgPDwgc2hpZnQpO1xuICAgIHNoaWZ0ICs9IFZMUV9CQVNFX1NISUZUO1xuICB9IHdoaWxlIChjb250aW51YXRpb24pO1xuXG4gIGFPdXRQYXJhbS52YWx1ZSA9IGZyb21WTFFTaWduZWQocmVzdWx0KTtcbiAgYU91dFBhcmFtLnJlc3QgPSBhSW5kZXg7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9saWIvYmFzZTY0LXZscS5qc1xuLy8gbW9kdWxlIGlkID0gMlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbnZhciBpbnRUb0NoYXJNYXAgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLycuc3BsaXQoJycpO1xuXG4vKipcbiAqIEVuY29kZSBhbiBpbnRlZ2VyIGluIHRoZSByYW5nZSBvZiAwIHRvIDYzIHRvIGEgc2luZ2xlIGJhc2UgNjQgZGlnaXQuXG4gKi9cbmV4cG9ydHMuZW5jb2RlID0gZnVuY3Rpb24gKG51bWJlcikge1xuICBpZiAoMCA8PSBudW1iZXIgJiYgbnVtYmVyIDwgaW50VG9DaGFyTWFwLmxlbmd0aCkge1xuICAgIHJldHVybiBpbnRUb0NoYXJNYXBbbnVtYmVyXTtcbiAgfVxuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDYzOiBcIiArIG51bWJlcik7XG59O1xuXG4vKipcbiAqIERlY29kZSBhIHNpbmdsZSBiYXNlIDY0IGNoYXJhY3RlciBjb2RlIGRpZ2l0IHRvIGFuIGludGVnZXIuIFJldHVybnMgLTEgb25cbiAqIGZhaWx1cmUuXG4gKi9cbmV4cG9ydHMuZGVjb2RlID0gZnVuY3Rpb24gKGNoYXJDb2RlKSB7XG4gIHZhciBiaWdBID0gNjU7ICAgICAvLyAnQSdcbiAgdmFyIGJpZ1ogPSA5MDsgICAgIC8vICdaJ1xuXG4gIHZhciBsaXR0bGVBID0gOTc7ICAvLyAnYSdcbiAgdmFyIGxpdHRsZVogPSAxMjI7IC8vICd6J1xuXG4gIHZhciB6ZXJvID0gNDg7ICAgICAvLyAnMCdcbiAgdmFyIG5pbmUgPSA1NzsgICAgIC8vICc5J1xuXG4gIHZhciBwbHVzID0gNDM7ICAgICAvLyAnKydcbiAgdmFyIHNsYXNoID0gNDc7ICAgIC8vICcvJ1xuXG4gIHZhciBsaXR0bGVPZmZzZXQgPSAyNjtcbiAgdmFyIG51bWJlck9mZnNldCA9IDUyO1xuXG4gIC8vIDAgLSAyNTogQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpcbiAgaWYgKGJpZ0EgPD0gY2hhckNvZGUgJiYgY2hhckNvZGUgPD0gYmlnWikge1xuICAgIHJldHVybiAoY2hhckNvZGUgLSBiaWdBKTtcbiAgfVxuXG4gIC8vIDI2IC0gNTE6IGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6XG4gIGlmIChsaXR0bGVBIDw9IGNoYXJDb2RlICYmIGNoYXJDb2RlIDw9IGxpdHRsZVopIHtcbiAgICByZXR1cm4gKGNoYXJDb2RlIC0gbGl0dGxlQSArIGxpdHRsZU9mZnNldCk7XG4gIH1cblxuICAvLyA1MiAtIDYxOiAwMTIzNDU2Nzg5XG4gIGlmICh6ZXJvIDw9IGNoYXJDb2RlICYmIGNoYXJDb2RlIDw9IG5pbmUpIHtcbiAgICByZXR1cm4gKGNoYXJDb2RlIC0gemVybyArIG51bWJlck9mZnNldCk7XG4gIH1cblxuICAvLyA2MjogK1xuICBpZiAoY2hhckNvZGUgPT0gcGx1cykge1xuICAgIHJldHVybiA2MjtcbiAgfVxuXG4gIC8vIDYzOiAvXG4gIGlmIChjaGFyQ29kZSA9PSBzbGFzaCkge1xuICAgIHJldHVybiA2MztcbiAgfVxuXG4gIC8vIEludmFsaWQgYmFzZTY0IGRpZ2l0LlxuICByZXR1cm4gLTE7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9saWIvYmFzZTY0LmpzXG4vLyBtb2R1bGUgaWQgPSAzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qIC0qLSBNb2RlOiBqczsganMtaW5kZW50LWxldmVsOiAyOyAtKi0gKi9cbi8qXG4gKiBDb3B5cmlnaHQgMjAxMSBNb3ppbGxhIEZvdW5kYXRpb24gYW5kIGNvbnRyaWJ1dG9yc1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgbGljZW5zZS4gU2VlIExJQ0VOU0Ugb3I6XG4gKiBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gKi9cblxuLyoqXG4gKiBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciBnZXR0aW5nIHZhbHVlcyBmcm9tIHBhcmFtZXRlci9vcHRpb25zXG4gKiBvYmplY3RzLlxuICpcbiAqIEBwYXJhbSBhcmdzIFRoZSBvYmplY3Qgd2UgYXJlIGV4dHJhY3RpbmcgdmFsdWVzIGZyb21cbiAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB3ZSBhcmUgZ2V0dGluZy5cbiAqIEBwYXJhbSBkZWZhdWx0VmFsdWUgQW4gb3B0aW9uYWwgdmFsdWUgdG8gcmV0dXJuIGlmIHRoZSBwcm9wZXJ0eSBpcyBtaXNzaW5nXG4gKiBmcm9tIHRoZSBvYmplY3QuIElmIHRoaXMgaXMgbm90IHNwZWNpZmllZCBhbmQgdGhlIHByb3BlcnR5IGlzIG1pc3NpbmcsIGFuXG4gKiBlcnJvciB3aWxsIGJlIHRocm93bi5cbiAqL1xuZnVuY3Rpb24gZ2V0QXJnKGFBcmdzLCBhTmFtZSwgYURlZmF1bHRWYWx1ZSkge1xuICBpZiAoYU5hbWUgaW4gYUFyZ3MpIHtcbiAgICByZXR1cm4gYUFyZ3NbYU5hbWVdO1xuICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMpIHtcbiAgICByZXR1cm4gYURlZmF1bHRWYWx1ZTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1wiJyArIGFOYW1lICsgJ1wiIGlzIGEgcmVxdWlyZWQgYXJndW1lbnQuJyk7XG4gIH1cbn1cbmV4cG9ydHMuZ2V0QXJnID0gZ2V0QXJnO1xuXG52YXIgdXJsUmVnZXhwID0gL14oPzooW1xcdytcXC0uXSspOik/XFwvXFwvKD86KFxcdys6XFx3KylAKT8oW1xcdy5dKikoPzo6KFxcZCspKT8oXFxTKikkLztcbnZhciBkYXRhVXJsUmVnZXhwID0gL15kYXRhOi4rXFwsLiskLztcblxuZnVuY3Rpb24gdXJsUGFyc2UoYVVybCkge1xuICB2YXIgbWF0Y2ggPSBhVXJsLm1hdGNoKHVybFJlZ2V4cCk7XG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4ge1xuICAgIHNjaGVtZTogbWF0Y2hbMV0sXG4gICAgYXV0aDogbWF0Y2hbMl0sXG4gICAgaG9zdDogbWF0Y2hbM10sXG4gICAgcG9ydDogbWF0Y2hbNF0sXG4gICAgcGF0aDogbWF0Y2hbNV1cbiAgfTtcbn1cbmV4cG9ydHMudXJsUGFyc2UgPSB1cmxQYXJzZTtcblxuZnVuY3Rpb24gdXJsR2VuZXJhdGUoYVBhcnNlZFVybCkge1xuICB2YXIgdXJsID0gJyc7XG4gIGlmIChhUGFyc2VkVXJsLnNjaGVtZSkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLnNjaGVtZSArICc6JztcbiAgfVxuICB1cmwgKz0gJy8vJztcbiAgaWYgKGFQYXJzZWRVcmwuYXV0aCkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLmF1dGggKyAnQCc7XG4gIH1cbiAgaWYgKGFQYXJzZWRVcmwuaG9zdCkge1xuICAgIHVybCArPSBhUGFyc2VkVXJsLmhvc3Q7XG4gIH1cbiAgaWYgKGFQYXJzZWRVcmwucG9ydCkge1xuICAgIHVybCArPSBcIjpcIiArIGFQYXJzZWRVcmwucG9ydFxuICB9XG4gIGlmIChhUGFyc2VkVXJsLnBhdGgpIHtcbiAgICB1cmwgKz0gYVBhcnNlZFVybC5wYXRoO1xuICB9XG4gIHJldHVybiB1cmw7XG59XG5leHBvcnRzLnVybEdlbmVyYXRlID0gdXJsR2VuZXJhdGU7XG5cbi8qKlxuICogTm9ybWFsaXplcyBhIHBhdGgsIG9yIHRoZSBwYXRoIHBvcnRpb24gb2YgYSBVUkw6XG4gKlxuICogLSBSZXBsYWNlcyBjb25zZWN1dGl2ZSBzbGFzaGVzIHdpdGggb25lIHNsYXNoLlxuICogLSBSZW1vdmVzIHVubmVjZXNzYXJ5ICcuJyBwYXJ0cy5cbiAqIC0gUmVtb3ZlcyB1bm5lY2Vzc2FyeSAnPGRpcj4vLi4nIHBhcnRzLlxuICpcbiAqIEJhc2VkIG9uIGNvZGUgaW4gdGhlIE5vZGUuanMgJ3BhdGgnIGNvcmUgbW9kdWxlLlxuICpcbiAqIEBwYXJhbSBhUGF0aCBUaGUgcGF0aCBvciB1cmwgdG8gbm9ybWFsaXplLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemUoYVBhdGgpIHtcbiAgdmFyIHBhdGggPSBhUGF0aDtcbiAgdmFyIHVybCA9IHVybFBhcnNlKGFQYXRoKTtcbiAgaWYgKHVybCkge1xuICAgIGlmICghdXJsLnBhdGgpIHtcbiAgICAgIHJldHVybiBhUGF0aDtcbiAgICB9XG4gICAgcGF0aCA9IHVybC5wYXRoO1xuICB9XG4gIHZhciBpc0Fic29sdXRlID0gZXhwb3J0cy5pc0Fic29sdXRlKHBhdGgpO1xuXG4gIHZhciBwYXJ0cyA9IHBhdGguc3BsaXQoL1xcLysvKTtcbiAgZm9yICh2YXIgcGFydCwgdXAgPSAwLCBpID0gcGFydHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBwYXJ0ID0gcGFydHNbaV07XG4gICAgaWYgKHBhcnQgPT09ICcuJykge1xuICAgICAgcGFydHMuc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAocGFydCA9PT0gJy4uJykge1xuICAgICAgdXArKztcbiAgICB9IGVsc2UgaWYgKHVwID4gMCkge1xuICAgICAgaWYgKHBhcnQgPT09ICcnKSB7XG4gICAgICAgIC8vIFRoZSBmaXJzdCBwYXJ0IGlzIGJsYW5rIGlmIHRoZSBwYXRoIGlzIGFic29sdXRlLiBUcnlpbmcgdG8gZ29cbiAgICAgICAgLy8gYWJvdmUgdGhlIHJvb3QgaXMgYSBuby1vcC4gVGhlcmVmb3JlIHdlIGNhbiByZW1vdmUgYWxsICcuLicgcGFydHNcbiAgICAgICAgLy8gZGlyZWN0bHkgYWZ0ZXIgdGhlIHJvb3QuXG4gICAgICAgIHBhcnRzLnNwbGljZShpICsgMSwgdXApO1xuICAgICAgICB1cCA9IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJ0cy5zcGxpY2UoaSwgMik7XG4gICAgICAgIHVwLS07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHBhdGggPSBwYXJ0cy5qb2luKCcvJyk7XG5cbiAgaWYgKHBhdGggPT09ICcnKSB7XG4gICAgcGF0aCA9IGlzQWJzb2x1dGUgPyAnLycgOiAnLic7XG4gIH1cblxuICBpZiAodXJsKSB7XG4gICAgdXJsLnBhdGggPSBwYXRoO1xuICAgIHJldHVybiB1cmxHZW5lcmF0ZSh1cmwpO1xuICB9XG4gIHJldHVybiBwYXRoO1xufVxuZXhwb3J0cy5ub3JtYWxpemUgPSBub3JtYWxpemU7XG5cbi8qKlxuICogSm9pbnMgdHdvIHBhdGhzL1VSTHMuXG4gKlxuICogQHBhcmFtIGFSb290IFRoZSByb290IHBhdGggb3IgVVJMLlxuICogQHBhcmFtIGFQYXRoIFRoZSBwYXRoIG9yIFVSTCB0byBiZSBqb2luZWQgd2l0aCB0aGUgcm9vdC5cbiAqXG4gKiAtIElmIGFQYXRoIGlzIGEgVVJMIG9yIGEgZGF0YSBVUkksIGFQYXRoIGlzIHJldHVybmVkLCB1bmxlc3MgYVBhdGggaXMgYVxuICogICBzY2hlbWUtcmVsYXRpdmUgVVJMOiBUaGVuIHRoZSBzY2hlbWUgb2YgYVJvb3QsIGlmIGFueSwgaXMgcHJlcGVuZGVkXG4gKiAgIGZpcnN0LlxuICogLSBPdGhlcndpc2UgYVBhdGggaXMgYSBwYXRoLiBJZiBhUm9vdCBpcyBhIFVSTCwgdGhlbiBpdHMgcGF0aCBwb3J0aW9uXG4gKiAgIGlzIHVwZGF0ZWQgd2l0aCB0aGUgcmVzdWx0IGFuZCBhUm9vdCBpcyByZXR1cm5lZC4gT3RoZXJ3aXNlIHRoZSByZXN1bHRcbiAqICAgaXMgcmV0dXJuZWQuXG4gKiAgIC0gSWYgYVBhdGggaXMgYWJzb2x1dGUsIHRoZSByZXN1bHQgaXMgYVBhdGguXG4gKiAgIC0gT3RoZXJ3aXNlIHRoZSB0d28gcGF0aHMgYXJlIGpvaW5lZCB3aXRoIGEgc2xhc2guXG4gKiAtIEpvaW5pbmcgZm9yIGV4YW1wbGUgJ2h0dHA6Ly8nIGFuZCAnd3d3LmV4YW1wbGUuY29tJyBpcyBhbHNvIHN1cHBvcnRlZC5cbiAqL1xuZnVuY3Rpb24gam9pbihhUm9vdCwgYVBhdGgpIHtcbiAgaWYgKGFSb290ID09PSBcIlwiKSB7XG4gICAgYVJvb3QgPSBcIi5cIjtcbiAgfVxuICBpZiAoYVBhdGggPT09IFwiXCIpIHtcbiAgICBhUGF0aCA9IFwiLlwiO1xuICB9XG4gIHZhciBhUGF0aFVybCA9IHVybFBhcnNlKGFQYXRoKTtcbiAgdmFyIGFSb290VXJsID0gdXJsUGFyc2UoYVJvb3QpO1xuICBpZiAoYVJvb3RVcmwpIHtcbiAgICBhUm9vdCA9IGFSb290VXJsLnBhdGggfHwgJy8nO1xuICB9XG5cbiAgLy8gYGpvaW4oZm9vLCAnLy93d3cuZXhhbXBsZS5vcmcnKWBcbiAgaWYgKGFQYXRoVXJsICYmICFhUGF0aFVybC5zY2hlbWUpIHtcbiAgICBpZiAoYVJvb3RVcmwpIHtcbiAgICAgIGFQYXRoVXJsLnNjaGVtZSA9IGFSb290VXJsLnNjaGVtZTtcbiAgICB9XG4gICAgcmV0dXJuIHVybEdlbmVyYXRlKGFQYXRoVXJsKTtcbiAgfVxuXG4gIGlmIChhUGF0aFVybCB8fCBhUGF0aC5tYXRjaChkYXRhVXJsUmVnZXhwKSkge1xuICAgIHJldHVybiBhUGF0aDtcbiAgfVxuXG4gIC8vIGBqb2luKCdodHRwOi8vJywgJ3d3dy5leGFtcGxlLmNvbScpYFxuICBpZiAoYVJvb3RVcmwgJiYgIWFSb290VXJsLmhvc3QgJiYgIWFSb290VXJsLnBhdGgpIHtcbiAgICBhUm9vdFVybC5ob3N0ID0gYVBhdGg7XG4gICAgcmV0dXJuIHVybEdlbmVyYXRlKGFSb290VXJsKTtcbiAgfVxuXG4gIHZhciBqb2luZWQgPSBhUGF0aC5jaGFyQXQoMCkgPT09ICcvJ1xuICAgID8gYVBhdGhcbiAgICA6IG5vcm1hbGl6ZShhUm9vdC5yZXBsYWNlKC9cXC8rJC8sICcnKSArICcvJyArIGFQYXRoKTtcblxuICBpZiAoYVJvb3RVcmwpIHtcbiAgICBhUm9vdFVybC5wYXRoID0gam9pbmVkO1xuICAgIHJldHVybiB1cmxHZW5lcmF0ZShhUm9vdFVybCk7XG4gIH1cbiAgcmV0dXJuIGpvaW5lZDtcbn1cbmV4cG9ydHMuam9pbiA9IGpvaW47XG5cbmV4cG9ydHMuaXNBYnNvbHV0ZSA9IGZ1bmN0aW9uIChhUGF0aCkge1xuICByZXR1cm4gYVBhdGguY2hhckF0KDApID09PSAnLycgfHwgISFhUGF0aC5tYXRjaCh1cmxSZWdleHApO1xufTtcblxuLyoqXG4gKiBNYWtlIGEgcGF0aCByZWxhdGl2ZSB0byBhIFVSTCBvciBhbm90aGVyIHBhdGguXG4gKlxuICogQHBhcmFtIGFSb290IFRoZSByb290IHBhdGggb3IgVVJMLlxuICogQHBhcmFtIGFQYXRoIFRoZSBwYXRoIG9yIFVSTCB0byBiZSBtYWRlIHJlbGF0aXZlIHRvIGFSb290LlxuICovXG5mdW5jdGlvbiByZWxhdGl2ZShhUm9vdCwgYVBhdGgpIHtcbiAgaWYgKGFSb290ID09PSBcIlwiKSB7XG4gICAgYVJvb3QgPSBcIi5cIjtcbiAgfVxuXG4gIGFSb290ID0gYVJvb3QucmVwbGFjZSgvXFwvJC8sICcnKTtcblxuICAvLyBJdCBpcyBwb3NzaWJsZSBmb3IgdGhlIHBhdGggdG8gYmUgYWJvdmUgdGhlIHJvb3QuIEluIHRoaXMgY2FzZSwgc2ltcGx5XG4gIC8vIGNoZWNraW5nIHdoZXRoZXIgdGhlIHJvb3QgaXMgYSBwcmVmaXggb2YgdGhlIHBhdGggd29uJ3Qgd29yay4gSW5zdGVhZCwgd2VcbiAgLy8gbmVlZCB0byByZW1vdmUgY29tcG9uZW50cyBmcm9tIHRoZSByb290IG9uZSBieSBvbmUsIHVudGlsIGVpdGhlciB3ZSBmaW5kXG4gIC8vIGEgcHJlZml4IHRoYXQgZml0cywgb3Igd2UgcnVuIG91dCBvZiBjb21wb25lbnRzIHRvIHJlbW92ZS5cbiAgdmFyIGxldmVsID0gMDtcbiAgd2hpbGUgKGFQYXRoLmluZGV4T2YoYVJvb3QgKyAnLycpICE9PSAwKSB7XG4gICAgdmFyIGluZGV4ID0gYVJvb3QubGFzdEluZGV4T2YoXCIvXCIpO1xuICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgIHJldHVybiBhUGF0aDtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgb25seSBwYXJ0IG9mIHRoZSByb290IHRoYXQgaXMgbGVmdCBpcyB0aGUgc2NoZW1lIChpLmUuIGh0dHA6Ly8sXG4gICAgLy8gZmlsZTovLy8sIGV0Yy4pLCBvbmUgb3IgbW9yZSBzbGFzaGVzICgvKSwgb3Igc2ltcGx5IG5vdGhpbmcgYXQgYWxsLCB3ZVxuICAgIC8vIGhhdmUgZXhoYXVzdGVkIGFsbCBjb21wb25lbnRzLCBzbyB0aGUgcGF0aCBpcyBub3QgcmVsYXRpdmUgdG8gdGhlIHJvb3QuXG4gICAgYVJvb3QgPSBhUm9vdC5zbGljZSgwLCBpbmRleCk7XG4gICAgaWYgKGFSb290Lm1hdGNoKC9eKFteXFwvXSs6XFwvKT9cXC8qJC8pKSB7XG4gICAgICByZXR1cm4gYVBhdGg7XG4gICAgfVxuXG4gICAgKytsZXZlbDtcbiAgfVxuXG4gIC8vIE1ha2Ugc3VyZSB3ZSBhZGQgYSBcIi4uL1wiIGZvciBlYWNoIGNvbXBvbmVudCB3ZSByZW1vdmVkIGZyb20gdGhlIHJvb3QuXG4gIHJldHVybiBBcnJheShsZXZlbCArIDEpLmpvaW4oXCIuLi9cIikgKyBhUGF0aC5zdWJzdHIoYVJvb3QubGVuZ3RoICsgMSk7XG59XG5leHBvcnRzLnJlbGF0aXZlID0gcmVsYXRpdmU7XG5cbnZhciBzdXBwb3J0c051bGxQcm90byA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciBvYmogPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICByZXR1cm4gISgnX19wcm90b19fJyBpbiBvYmopO1xufSgpKTtcblxuZnVuY3Rpb24gaWRlbnRpdHkgKHMpIHtcbiAgcmV0dXJuIHM7XG59XG5cbi8qKlxuICogQmVjYXVzZSBiZWhhdmlvciBnb2VzIHdhY2t5IHdoZW4geW91IHNldCBgX19wcm90b19fYCBvbiBvYmplY3RzLCB3ZVxuICogaGF2ZSB0byBwcmVmaXggYWxsIHRoZSBzdHJpbmdzIGluIG91ciBzZXQgd2l0aCBhbiBhcmJpdHJhcnkgY2hhcmFjdGVyLlxuICpcbiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL3B1bGwvMzEgYW5kXG4gKiBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL2lzc3Vlcy8zMFxuICpcbiAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICovXG5mdW5jdGlvbiB0b1NldFN0cmluZyhhU3RyKSB7XG4gIGlmIChpc1Byb3RvU3RyaW5nKGFTdHIpKSB7XG4gICAgcmV0dXJuICckJyArIGFTdHI7XG4gIH1cblxuICByZXR1cm4gYVN0cjtcbn1cbmV4cG9ydHMudG9TZXRTdHJpbmcgPSBzdXBwb3J0c051bGxQcm90byA/IGlkZW50aXR5IDogdG9TZXRTdHJpbmc7XG5cbmZ1bmN0aW9uIGZyb21TZXRTdHJpbmcoYVN0cikge1xuICBpZiAoaXNQcm90b1N0cmluZyhhU3RyKSkge1xuICAgIHJldHVybiBhU3RyLnNsaWNlKDEpO1xuICB9XG5cbiAgcmV0dXJuIGFTdHI7XG59XG5leHBvcnRzLmZyb21TZXRTdHJpbmcgPSBzdXBwb3J0c051bGxQcm90byA/IGlkZW50aXR5IDogZnJvbVNldFN0cmluZztcblxuZnVuY3Rpb24gaXNQcm90b1N0cmluZyhzKSB7XG4gIGlmICghcykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBsZW5ndGggPSBzLmxlbmd0aDtcblxuICBpZiAobGVuZ3RoIDwgOSAvKiBcIl9fcHJvdG9fX1wiLmxlbmd0aCAqLykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChzLmNoYXJDb2RlQXQobGVuZ3RoIC0gMSkgIT09IDk1ICAvKiAnXycgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSAyKSAhPT0gOTUgIC8qICdfJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDMpICE9PSAxMTEgLyogJ28nICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gNCkgIT09IDExNiAvKiAndCcgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA1KSAhPT0gMTExIC8qICdvJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDYpICE9PSAxMTQgLyogJ3InICovIHx8XG4gICAgICBzLmNoYXJDb2RlQXQobGVuZ3RoIC0gNykgIT09IDExMiAvKiAncCcgKi8gfHxcbiAgICAgIHMuY2hhckNvZGVBdChsZW5ndGggLSA4KSAhPT0gOTUgIC8qICdfJyAqLyB8fFxuICAgICAgcy5jaGFyQ29kZUF0KGxlbmd0aCAtIDkpICE9PSA5NSAgLyogJ18nICovKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IGxlbmd0aCAtIDEwOyBpID49IDA7IGktLSkge1xuICAgIGlmIChzLmNoYXJDb2RlQXQoaSkgIT09IDM2IC8qICckJyAqLykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIENvbXBhcmF0b3IgYmV0d2VlbiB0d28gbWFwcGluZ3Mgd2hlcmUgdGhlIG9yaWdpbmFsIHBvc2l0aW9ucyBhcmUgY29tcGFyZWQuXG4gKlxuICogT3B0aW9uYWxseSBwYXNzIGluIGB0cnVlYCBhcyBgb25seUNvbXBhcmVHZW5lcmF0ZWRgIHRvIGNvbnNpZGVyIHR3b1xuICogbWFwcGluZ3Mgd2l0aCB0aGUgc2FtZSBvcmlnaW5hbCBzb3VyY2UvbGluZS9jb2x1bW4sIGJ1dCBkaWZmZXJlbnQgZ2VuZXJhdGVkXG4gKiBsaW5lIGFuZCBjb2x1bW4gdGhlIHNhbWUuIFVzZWZ1bCB3aGVuIHNlYXJjaGluZyBmb3IgYSBtYXBwaW5nIHdpdGggYVxuICogc3R1YmJlZCBvdXQgbWFwcGluZy5cbiAqL1xuZnVuY3Rpb24gY29tcGFyZUJ5T3JpZ2luYWxQb3NpdGlvbnMobWFwcGluZ0EsIG1hcHBpbmdCLCBvbmx5Q29tcGFyZU9yaWdpbmFsKSB7XG4gIHZhciBjbXAgPSBtYXBwaW5nQS5zb3VyY2UgLSBtYXBwaW5nQi5zb3VyY2U7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxMaW5lIC0gbWFwcGluZ0Iub3JpZ2luYWxMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsQ29sdW1uIC0gbWFwcGluZ0Iub3JpZ2luYWxDb2x1bW47XG4gIGlmIChjbXAgIT09IDAgfHwgb25seUNvbXBhcmVPcmlnaW5hbCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5nZW5lcmF0ZWRDb2x1bW4gLSBtYXBwaW5nQi5nZW5lcmF0ZWRDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkTGluZSAtIG1hcHBpbmdCLmdlbmVyYXRlZExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgcmV0dXJuIG1hcHBpbmdBLm5hbWUgLSBtYXBwaW5nQi5uYW1lO1xufVxuZXhwb3J0cy5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyA9IGNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zO1xuXG4vKipcbiAqIENvbXBhcmF0b3IgYmV0d2VlbiB0d28gbWFwcGluZ3Mgd2l0aCBkZWZsYXRlZCBzb3VyY2UgYW5kIG5hbWUgaW5kaWNlcyB3aGVyZVxuICogdGhlIGdlbmVyYXRlZCBwb3NpdGlvbnMgYXJlIGNvbXBhcmVkLlxuICpcbiAqIE9wdGlvbmFsbHkgcGFzcyBpbiBgdHJ1ZWAgYXMgYG9ubHlDb21wYXJlR2VuZXJhdGVkYCB0byBjb25zaWRlciB0d29cbiAqIG1hcHBpbmdzIHdpdGggdGhlIHNhbWUgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiwgYnV0IGRpZmZlcmVudFxuICogc291cmNlL25hbWUvb3JpZ2luYWwgbGluZSBhbmQgY29sdW1uIHRoZSBzYW1lLiBVc2VmdWwgd2hlbiBzZWFyY2hpbmcgZm9yIGFcbiAqIG1hcHBpbmcgd2l0aCBhIHN0dWJiZWQgb3V0IG1hcHBpbmcuXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkKG1hcHBpbmdBLCBtYXBwaW5nQiwgb25seUNvbXBhcmVHZW5lcmF0ZWQpIHtcbiAgdmFyIGNtcCA9IG1hcHBpbmdBLmdlbmVyYXRlZExpbmUgLSBtYXBwaW5nQi5nZW5lcmF0ZWRMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLmdlbmVyYXRlZENvbHVtbiAtIG1hcHBpbmdCLmdlbmVyYXRlZENvbHVtbjtcbiAgaWYgKGNtcCAhPT0gMCB8fCBvbmx5Q29tcGFyZUdlbmVyYXRlZCkge1xuICAgIHJldHVybiBjbXA7XG4gIH1cblxuICBjbXAgPSBtYXBwaW5nQS5zb3VyY2UgLSBtYXBwaW5nQi5zb3VyY2U7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxMaW5lIC0gbWFwcGluZ0Iub3JpZ2luYWxMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsQ29sdW1uIC0gbWFwcGluZ0Iub3JpZ2luYWxDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgcmV0dXJuIG1hcHBpbmdBLm5hbWUgLSBtYXBwaW5nQi5uYW1lO1xufVxuZXhwb3J0cy5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZCA9IGNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkO1xuXG5mdW5jdGlvbiBzdHJjbXAoYVN0cjEsIGFTdHIyKSB7XG4gIGlmIChhU3RyMSA9PT0gYVN0cjIpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGlmIChhU3RyMSA+IGFTdHIyKSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICByZXR1cm4gLTE7XG59XG5cbi8qKlxuICogQ29tcGFyYXRvciBiZXR3ZWVuIHR3byBtYXBwaW5ncyB3aXRoIGluZmxhdGVkIHNvdXJjZSBhbmQgbmFtZSBzdHJpbmdzIHdoZXJlXG4gKiB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9ucyBhcmUgY29tcGFyZWQuXG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0luZmxhdGVkKG1hcHBpbmdBLCBtYXBwaW5nQikge1xuICB2YXIgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkTGluZSAtIG1hcHBpbmdCLmdlbmVyYXRlZExpbmU7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0EuZ2VuZXJhdGVkQ29sdW1uIC0gbWFwcGluZ0IuZ2VuZXJhdGVkQ29sdW1uO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IHN0cmNtcChtYXBwaW5nQS5zb3VyY2UsIG1hcHBpbmdCLnNvdXJjZSk7XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgY21wID0gbWFwcGluZ0Eub3JpZ2luYWxMaW5lIC0gbWFwcGluZ0Iub3JpZ2luYWxMaW5lO1xuICBpZiAoY21wICE9PSAwKSB7XG4gICAgcmV0dXJuIGNtcDtcbiAgfVxuXG4gIGNtcCA9IG1hcHBpbmdBLm9yaWdpbmFsQ29sdW1uIC0gbWFwcGluZ0Iub3JpZ2luYWxDb2x1bW47XG4gIGlmIChjbXAgIT09IDApIHtcbiAgICByZXR1cm4gY21wO1xuICB9XG5cbiAgcmV0dXJuIHN0cmNtcChtYXBwaW5nQS5uYW1lLCBtYXBwaW5nQi5uYW1lKTtcbn1cbmV4cG9ydHMuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zSW5mbGF0ZWQgPSBjb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZDtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbGliL3V0aWwuanNcbi8vIG1vZHVsZSBpZCA9IDRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xudmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgaGFzTmF0aXZlTWFwID0gdHlwZW9mIE1hcCAhPT0gXCJ1bmRlZmluZWRcIjtcblxuLyoqXG4gKiBBIGRhdGEgc3RydWN0dXJlIHdoaWNoIGlzIGEgY29tYmluYXRpb24gb2YgYW4gYXJyYXkgYW5kIGEgc2V0LiBBZGRpbmcgYSBuZXdcbiAqIG1lbWJlciBpcyBPKDEpLCB0ZXN0aW5nIGZvciBtZW1iZXJzaGlwIGlzIE8oMSksIGFuZCBmaW5kaW5nIHRoZSBpbmRleCBvZiBhblxuICogZWxlbWVudCBpcyBPKDEpLiBSZW1vdmluZyBlbGVtZW50cyBmcm9tIHRoZSBzZXQgaXMgbm90IHN1cHBvcnRlZC4gT25seVxuICogc3RyaW5ncyBhcmUgc3VwcG9ydGVkIGZvciBtZW1iZXJzaGlwLlxuICovXG5mdW5jdGlvbiBBcnJheVNldCgpIHtcbiAgdGhpcy5fYXJyYXkgPSBbXTtcbiAgdGhpcy5fc2V0ID0gaGFzTmF0aXZlTWFwID8gbmV3IE1hcCgpIDogT2JqZWN0LmNyZWF0ZShudWxsKTtcbn1cblxuLyoqXG4gKiBTdGF0aWMgbWV0aG9kIGZvciBjcmVhdGluZyBBcnJheVNldCBpbnN0YW5jZXMgZnJvbSBhbiBleGlzdGluZyBhcnJheS5cbiAqL1xuQXJyYXlTZXQuZnJvbUFycmF5ID0gZnVuY3Rpb24gQXJyYXlTZXRfZnJvbUFycmF5KGFBcnJheSwgYUFsbG93RHVwbGljYXRlcykge1xuICB2YXIgc2V0ID0gbmV3IEFycmF5U2V0KCk7XG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhQXJyYXkubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBzZXQuYWRkKGFBcnJheVtpXSwgYUFsbG93RHVwbGljYXRlcyk7XG4gIH1cbiAgcmV0dXJuIHNldDtcbn07XG5cbi8qKlxuICogUmV0dXJuIGhvdyBtYW55IHVuaXF1ZSBpdGVtcyBhcmUgaW4gdGhpcyBBcnJheVNldC4gSWYgZHVwbGljYXRlcyBoYXZlIGJlZW5cbiAqIGFkZGVkLCB0aGFuIHRob3NlIGRvIG5vdCBjb3VudCB0b3dhcmRzIHRoZSBzaXplLlxuICpcbiAqIEByZXR1cm5zIE51bWJlclxuICovXG5BcnJheVNldC5wcm90b3R5cGUuc2l6ZSA9IGZ1bmN0aW9uIEFycmF5U2V0X3NpemUoKSB7XG4gIHJldHVybiBoYXNOYXRpdmVNYXAgPyB0aGlzLl9zZXQuc2l6ZSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMuX3NldCkubGVuZ3RoO1xufTtcblxuLyoqXG4gKiBBZGQgdGhlIGdpdmVuIHN0cmluZyB0byB0aGlzIHNldC5cbiAqXG4gKiBAcGFyYW0gU3RyaW5nIGFTdHJcbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIEFycmF5U2V0X2FkZChhU3RyLCBhQWxsb3dEdXBsaWNhdGVzKSB7XG4gIHZhciBzU3RyID0gaGFzTmF0aXZlTWFwID8gYVN0ciA6IHV0aWwudG9TZXRTdHJpbmcoYVN0cik7XG4gIHZhciBpc0R1cGxpY2F0ZSA9IGhhc05hdGl2ZU1hcCA/IHRoaXMuaGFzKGFTdHIpIDogaGFzLmNhbGwodGhpcy5fc2V0LCBzU3RyKTtcbiAgdmFyIGlkeCA9IHRoaXMuX2FycmF5Lmxlbmd0aDtcbiAgaWYgKCFpc0R1cGxpY2F0ZSB8fCBhQWxsb3dEdXBsaWNhdGVzKSB7XG4gICAgdGhpcy5fYXJyYXkucHVzaChhU3RyKTtcbiAgfVxuICBpZiAoIWlzRHVwbGljYXRlKSB7XG4gICAgaWYgKGhhc05hdGl2ZU1hcCkge1xuICAgICAgdGhpcy5fc2V0LnNldChhU3RyLCBpZHgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zZXRbc1N0cl0gPSBpZHg7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIElzIHRoZSBnaXZlbiBzdHJpbmcgYSBtZW1iZXIgb2YgdGhpcyBzZXQ/XG4gKlxuICogQHBhcmFtIFN0cmluZyBhU3RyXG4gKi9cbkFycmF5U2V0LnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiBBcnJheVNldF9oYXMoYVN0cikge1xuICBpZiAoaGFzTmF0aXZlTWFwKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NldC5oYXMoYVN0cik7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHNTdHIgPSB1dGlsLnRvU2V0U3RyaW5nKGFTdHIpO1xuICAgIHJldHVybiBoYXMuY2FsbCh0aGlzLl9zZXQsIHNTdHIpO1xuICB9XG59O1xuXG4vKipcbiAqIFdoYXQgaXMgdGhlIGluZGV4IG9mIHRoZSBnaXZlbiBzdHJpbmcgaW4gdGhlIGFycmF5P1xuICpcbiAqIEBwYXJhbSBTdHJpbmcgYVN0clxuICovXG5BcnJheVNldC5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIEFycmF5U2V0X2luZGV4T2YoYVN0cikge1xuICBpZiAoaGFzTmF0aXZlTWFwKSB7XG4gICAgdmFyIGlkeCA9IHRoaXMuX3NldC5nZXQoYVN0cik7XG4gICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICAgIHJldHVybiBpZHg7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBzU3RyID0gdXRpbC50b1NldFN0cmluZyhhU3RyKTtcbiAgICBpZiAoaGFzLmNhbGwodGhpcy5fc2V0LCBzU3RyKSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3NldFtzU3RyXTtcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoJ1wiJyArIGFTdHIgKyAnXCIgaXMgbm90IGluIHRoZSBzZXQuJyk7XG59O1xuXG4vKipcbiAqIFdoYXQgaXMgdGhlIGVsZW1lbnQgYXQgdGhlIGdpdmVuIGluZGV4P1xuICpcbiAqIEBwYXJhbSBOdW1iZXIgYUlkeFxuICovXG5BcnJheVNldC5wcm90b3R5cGUuYXQgPSBmdW5jdGlvbiBBcnJheVNldF9hdChhSWR4KSB7XG4gIGlmIChhSWR4ID49IDAgJiYgYUlkeCA8IHRoaXMuX2FycmF5Lmxlbmd0aCkge1xuICAgIHJldHVybiB0aGlzLl9hcnJheVthSWR4XTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ05vIGVsZW1lbnQgaW5kZXhlZCBieSAnICsgYUlkeCk7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGFycmF5IHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgc2V0ICh3aGljaCBoYXMgdGhlIHByb3BlciBpbmRpY2VzXG4gKiBpbmRpY2F0ZWQgYnkgaW5kZXhPZikuIE5vdGUgdGhhdCB0aGlzIGlzIGEgY29weSBvZiB0aGUgaW50ZXJuYWwgYXJyYXkgdXNlZFxuICogZm9yIHN0b3JpbmcgdGhlIG1lbWJlcnMgc28gdGhhdCBubyBvbmUgY2FuIG1lc3Mgd2l0aCBpbnRlcm5hbCBzdGF0ZS5cbiAqL1xuQXJyYXlTZXQucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiBBcnJheVNldF90b0FycmF5KCkge1xuICByZXR1cm4gdGhpcy5fYXJyYXkuc2xpY2UoKTtcbn07XG5cbmV4cG9ydHMuQXJyYXlTZXQgPSBBcnJheVNldDtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vbGliL2FycmF5LXNldC5qc1xuLy8gbW9kdWxlIGlkID0gNVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTQgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbnZhciB1dGlsID0gcmVxdWlyZSgnLi91dGlsJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIHdoZXRoZXIgbWFwcGluZ0IgaXMgYWZ0ZXIgbWFwcGluZ0Egd2l0aCByZXNwZWN0IHRvIGdlbmVyYXRlZFxuICogcG9zaXRpb24uXG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlZFBvc2l0aW9uQWZ0ZXIobWFwcGluZ0EsIG1hcHBpbmdCKSB7XG4gIC8vIE9wdGltaXplZCBmb3IgbW9zdCBjb21tb24gY2FzZVxuICB2YXIgbGluZUEgPSBtYXBwaW5nQS5nZW5lcmF0ZWRMaW5lO1xuICB2YXIgbGluZUIgPSBtYXBwaW5nQi5nZW5lcmF0ZWRMaW5lO1xuICB2YXIgY29sdW1uQSA9IG1hcHBpbmdBLmdlbmVyYXRlZENvbHVtbjtcbiAgdmFyIGNvbHVtbkIgPSBtYXBwaW5nQi5nZW5lcmF0ZWRDb2x1bW47XG4gIHJldHVybiBsaW5lQiA+IGxpbmVBIHx8IGxpbmVCID09IGxpbmVBICYmIGNvbHVtbkIgPj0gY29sdW1uQSB8fFxuICAgICAgICAgdXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZChtYXBwaW5nQSwgbWFwcGluZ0IpIDw9IDA7XG59XG5cbi8qKlxuICogQSBkYXRhIHN0cnVjdHVyZSB0byBwcm92aWRlIGEgc29ydGVkIHZpZXcgb2YgYWNjdW11bGF0ZWQgbWFwcGluZ3MgaW4gYVxuICogcGVyZm9ybWFuY2UgY29uc2Npb3VzIG1hbm5lci4gSXQgdHJhZGVzIGEgbmVnbGliYWJsZSBvdmVyaGVhZCBpbiBnZW5lcmFsXG4gKiBjYXNlIGZvciBhIGxhcmdlIHNwZWVkdXAgaW4gY2FzZSBvZiBtYXBwaW5ncyBiZWluZyBhZGRlZCBpbiBvcmRlci5cbiAqL1xuZnVuY3Rpb24gTWFwcGluZ0xpc3QoKSB7XG4gIHRoaXMuX2FycmF5ID0gW107XG4gIHRoaXMuX3NvcnRlZCA9IHRydWU7XG4gIC8vIFNlcnZlcyBhcyBpbmZpbXVtXG4gIHRoaXMuX2xhc3QgPSB7Z2VuZXJhdGVkTGluZTogLTEsIGdlbmVyYXRlZENvbHVtbjogMH07XG59XG5cbi8qKlxuICogSXRlcmF0ZSB0aHJvdWdoIGludGVybmFsIGl0ZW1zLiBUaGlzIG1ldGhvZCB0YWtlcyB0aGUgc2FtZSBhcmd1bWVudHMgdGhhdFxuICogYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCB0YWtlcy5cbiAqXG4gKiBOT1RFOiBUaGUgb3JkZXIgb2YgdGhlIG1hcHBpbmdzIGlzIE5PVCBndWFyYW50ZWVkLlxuICovXG5NYXBwaW5nTGlzdC5wcm90b3R5cGUudW5zb3J0ZWRGb3JFYWNoID1cbiAgZnVuY3Rpb24gTWFwcGluZ0xpc3RfZm9yRWFjaChhQ2FsbGJhY2ssIGFUaGlzQXJnKSB7XG4gICAgdGhpcy5fYXJyYXkuZm9yRWFjaChhQ2FsbGJhY2ssIGFUaGlzQXJnKTtcbiAgfTtcblxuLyoqXG4gKiBBZGQgdGhlIGdpdmVuIHNvdXJjZSBtYXBwaW5nLlxuICpcbiAqIEBwYXJhbSBPYmplY3QgYU1hcHBpbmdcbiAqL1xuTWFwcGluZ0xpc3QucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIE1hcHBpbmdMaXN0X2FkZChhTWFwcGluZykge1xuICBpZiAoZ2VuZXJhdGVkUG9zaXRpb25BZnRlcih0aGlzLl9sYXN0LCBhTWFwcGluZykpIHtcbiAgICB0aGlzLl9sYXN0ID0gYU1hcHBpbmc7XG4gICAgdGhpcy5fYXJyYXkucHVzaChhTWFwcGluZyk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fc29ydGVkID0gZmFsc2U7XG4gICAgdGhpcy5fYXJyYXkucHVzaChhTWFwcGluZyk7XG4gIH1cbn07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZmxhdCwgc29ydGVkIGFycmF5IG9mIG1hcHBpbmdzLiBUaGUgbWFwcGluZ3MgYXJlIHNvcnRlZCBieVxuICogZ2VuZXJhdGVkIHBvc2l0aW9uLlxuICpcbiAqIFdBUk5JTkc6IFRoaXMgbWV0aG9kIHJldHVybnMgaW50ZXJuYWwgZGF0YSB3aXRob3V0IGNvcHlpbmcsIGZvclxuICogcGVyZm9ybWFuY2UuIFRoZSByZXR1cm4gdmFsdWUgbXVzdCBOT1QgYmUgbXV0YXRlZCwgYW5kIHNob3VsZCBiZSB0cmVhdGVkIGFzXG4gKiBhbiBpbW11dGFibGUgYm9ycm93LiBJZiB5b3Ugd2FudCB0byB0YWtlIG93bmVyc2hpcCwgeW91IG11c3QgbWFrZSB5b3VyIG93blxuICogY29weS5cbiAqL1xuTWFwcGluZ0xpc3QucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiBNYXBwaW5nTGlzdF90b0FycmF5KCkge1xuICBpZiAoIXRoaXMuX3NvcnRlZCkge1xuICAgIHRoaXMuX2FycmF5LnNvcnQodXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNJbmZsYXRlZCk7XG4gICAgdGhpcy5fc29ydGVkID0gdHJ1ZTtcbiAgfVxuICByZXR1cm4gdGhpcy5fYXJyYXk7XG59O1xuXG5leHBvcnRzLk1hcHBpbmdMaXN0ID0gTWFwcGluZ0xpc3Q7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL2xpYi9tYXBwaW5nLWxpc3QuanNcbi8vIG1vZHVsZSBpZCA9IDZcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyogLSotIE1vZGU6IGpzOyBqcy1pbmRlbnQtbGV2ZWw6IDI7IC0qLSAqL1xuLypcbiAqIENvcHlyaWdodCAyMDExIE1vemlsbGEgRm91bmRhdGlvbiBhbmQgY29udHJpYnV0b3JzXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTmV3IEJTRCBsaWNlbnNlLiBTZWUgTElDRU5TRSBvcjpcbiAqIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMy1DbGF1c2VcbiAqL1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xudmFyIGJpbmFyeVNlYXJjaCA9IHJlcXVpcmUoJy4vYmluYXJ5LXNlYXJjaCcpO1xudmFyIEFycmF5U2V0ID0gcmVxdWlyZSgnLi9hcnJheS1zZXQnKS5BcnJheVNldDtcbnZhciBiYXNlNjRWTFEgPSByZXF1aXJlKCcuL2Jhc2U2NC12bHEnKTtcbnZhciBxdWlja1NvcnQgPSByZXF1aXJlKCcuL3F1aWNrLXNvcnQnKS5xdWlja1NvcnQ7XG5cbmZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyKGFTb3VyY2VNYXApIHtcbiAgdmFyIHNvdXJjZU1hcCA9IGFTb3VyY2VNYXA7XG4gIGlmICh0eXBlb2YgYVNvdXJjZU1hcCA9PT0gJ3N0cmluZycpIHtcbiAgICBzb3VyY2VNYXAgPSBKU09OLnBhcnNlKGFTb3VyY2VNYXAucmVwbGFjZSgvXlxcKVxcXVxcfScvLCAnJykpO1xuICB9XG5cbiAgcmV0dXJuIHNvdXJjZU1hcC5zZWN0aW9ucyAhPSBudWxsXG4gICAgPyBuZXcgSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcClcbiAgICA6IG5ldyBCYXNpY1NvdXJjZU1hcENvbnN1bWVyKHNvdXJjZU1hcCk7XG59XG5cblNvdXJjZU1hcENvbnN1bWVyLmZyb21Tb3VyY2VNYXAgPSBmdW5jdGlvbihhU291cmNlTWFwKSB7XG4gIHJldHVybiBCYXNpY1NvdXJjZU1hcENvbnN1bWVyLmZyb21Tb3VyY2VNYXAoYVNvdXJjZU1hcCk7XG59XG5cbi8qKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXBwaW5nIHNwZWMgdGhhdCB3ZSBhcmUgY29uc3VtaW5nLlxuICovXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3ZlcnNpb24gPSAzO1xuXG4vLyBgX19nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kIGBfX29yaWdpbmFsTWFwcGluZ3NgIGFyZSBhcnJheXMgdGhhdCBob2xkIHRoZVxuLy8gcGFyc2VkIG1hcHBpbmcgY29vcmRpbmF0ZXMgZnJvbSB0aGUgc291cmNlIG1hcCdzIFwibWFwcGluZ3NcIiBhdHRyaWJ1dGUuIFRoZXlcbi8vIGFyZSBsYXppbHkgaW5zdGFudGlhdGVkLCBhY2Nlc3NlZCB2aWEgdGhlIGBfZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZFxuLy8gYF9vcmlnaW5hbE1hcHBpbmdzYCBnZXR0ZXJzIHJlc3BlY3RpdmVseSwgYW5kIHdlIG9ubHkgcGFyc2UgdGhlIG1hcHBpbmdzXG4vLyBhbmQgY3JlYXRlIHRoZXNlIGFycmF5cyBvbmNlIHF1ZXJpZWQgZm9yIGEgc291cmNlIGxvY2F0aW9uLiBXZSBqdW1wIHRocm91Z2hcbi8vIHRoZXNlIGhvb3BzIGJlY2F1c2UgdGhlcmUgY2FuIGJlIG1hbnkgdGhvdXNhbmRzIG9mIG1hcHBpbmdzLCBhbmQgcGFyc2luZ1xuLy8gdGhlbSBpcyBleHBlbnNpdmUsIHNvIHdlIG9ubHkgd2FudCB0byBkbyBpdCBpZiB3ZSBtdXN0LlxuLy9cbi8vIEVhY2ggb2JqZWN0IGluIHRoZSBhcnJheXMgaXMgb2YgdGhlIGZvcm06XG4vL1xuLy8gICAgIHtcbi8vICAgICAgIGdlbmVyYXRlZExpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIGNvZGUsXG4vLyAgICAgICBnZW5lcmF0ZWRDb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgY29kZSxcbi8vICAgICAgIHNvdXJjZTogVGhlIHBhdGggdG8gdGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlIHRoYXQgZ2VuZXJhdGVkIHRoaXNcbi8vICAgICAgICAgICAgICAgY2h1bmsgb2YgY29kZSxcbi8vICAgICAgIG9yaWdpbmFsTGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UgdGhhdFxuLy8gICAgICAgICAgICAgICAgICAgICBjb3JyZXNwb25kcyB0byB0aGlzIGNodW5rIG9mIGdlbmVyYXRlZCBjb2RlLFxuLy8gICAgICAgb3JpZ2luYWxDb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UgdGhhdFxuLy8gICAgICAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRzIHRvIHRoaXMgY2h1bmsgb2YgZ2VuZXJhdGVkIGNvZGUsXG4vLyAgICAgICBuYW1lOiBUaGUgbmFtZSBvZiB0aGUgb3JpZ2luYWwgc3ltYm9sIHdoaWNoIGdlbmVyYXRlZCB0aGlzIGNodW5rIG9mXG4vLyAgICAgICAgICAgICBjb2RlLlxuLy8gICAgIH1cbi8vXG4vLyBBbGwgcHJvcGVydGllcyBleGNlcHQgZm9yIGBnZW5lcmF0ZWRMaW5lYCBhbmQgYGdlbmVyYXRlZENvbHVtbmAgY2FuIGJlXG4vLyBgbnVsbGAuXG4vL1xuLy8gYF9nZW5lcmF0ZWRNYXBwaW5nc2AgaXMgb3JkZXJlZCBieSB0aGUgZ2VuZXJhdGVkIHBvc2l0aW9ucy5cbi8vXG4vLyBgX29yaWdpbmFsTWFwcGluZ3NgIGlzIG9yZGVyZWQgYnkgdGhlIG9yaWdpbmFsIHBvc2l0aW9ucy5cblxuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBudWxsO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSwgJ19nZW5lcmF0ZWRNYXBwaW5ncycsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCF0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MpIHtcbiAgICAgIHRoaXMuX3BhcnNlTWFwcGluZ3ModGhpcy5fbWFwcGluZ3MsIHRoaXMuc291cmNlUm9vdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncztcbiAgfVxufSk7XG5cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fX29yaWdpbmFsTWFwcGluZ3MgPSBudWxsO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSwgJ19vcmlnaW5hbE1hcHBpbmdzJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRoaXMuX19vcmlnaW5hbE1hcHBpbmdzKSB7XG4gICAgICB0aGlzLl9wYXJzZU1hcHBpbmdzKHRoaXMuX21hcHBpbmdzLCB0aGlzLnNvdXJjZVJvb3QpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncztcbiAgfVxufSk7XG5cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fY2hhcklzTWFwcGluZ1NlcGFyYXRvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2NoYXJJc01hcHBpbmdTZXBhcmF0b3IoYVN0ciwgaW5kZXgpIHtcbiAgICB2YXIgYyA9IGFTdHIuY2hhckF0KGluZGV4KTtcbiAgICByZXR1cm4gYyA9PT0gXCI7XCIgfHwgYyA9PT0gXCIsXCI7XG4gIH07XG5cbi8qKlxuICogUGFyc2UgdGhlIG1hcHBpbmdzIGluIGEgc3RyaW5nIGluIHRvIGEgZGF0YSBzdHJ1Y3R1cmUgd2hpY2ggd2UgY2FuIGVhc2lseVxuICogcXVlcnkgKHRoZSBvcmRlcmVkIGFycmF5cyBpbiB0aGUgYHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5nc2AgYW5kXG4gKiBgdGhpcy5fX29yaWdpbmFsTWFwcGluZ3NgIHByb3BlcnRpZXMpLlxuICovXG5Tb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9wYXJzZU1hcHBpbmdzKGFTdHIsIGFTb3VyY2VSb290KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiU3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudCBfcGFyc2VNYXBwaW5nc1wiKTtcbiAgfTtcblxuU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSID0gMTtcblNvdXJjZU1hcENvbnN1bWVyLk9SSUdJTkFMX09SREVSID0gMjtcblxuU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQgPSAxO1xuU291cmNlTWFwQ29uc3VtZXIuTEVBU1RfVVBQRVJfQk9VTkQgPSAyO1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBlYWNoIG1hcHBpbmcgYmV0d2VlbiBhbiBvcmlnaW5hbCBzb3VyY2UvbGluZS9jb2x1bW4gYW5kIGFcbiAqIGdlbmVyYXRlZCBsaW5lL2NvbHVtbiBpbiB0aGlzIHNvdXJjZSBtYXAuXG4gKlxuICogQHBhcmFtIEZ1bmN0aW9uIGFDYWxsYmFja1xuICogICAgICAgIFRoZSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCB3aXRoIGVhY2ggbWFwcGluZy5cbiAqIEBwYXJhbSBPYmplY3QgYUNvbnRleHRcbiAqICAgICAgICBPcHRpb25hbC4gSWYgc3BlY2lmaWVkLCB0aGlzIG9iamVjdCB3aWxsIGJlIHRoZSB2YWx1ZSBvZiBgdGhpc2AgZXZlcnlcbiAqICAgICAgICB0aW1lIHRoYXQgYGFDYWxsYmFja2AgaXMgY2FsbGVkLlxuICogQHBhcmFtIGFPcmRlclxuICogICAgICAgIEVpdGhlciBgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSYCBvclxuICogICAgICAgIGBTb3VyY2VNYXBDb25zdW1lci5PUklHSU5BTF9PUkRFUmAuIFNwZWNpZmllcyB3aGV0aGVyIHlvdSB3YW50IHRvXG4gKiAgICAgICAgaXRlcmF0ZSBvdmVyIHRoZSBtYXBwaW5ncyBzb3J0ZWQgYnkgdGhlIGdlbmVyYXRlZCBmaWxlJ3MgbGluZS9jb2x1bW5cbiAqICAgICAgICBvcmRlciBvciB0aGUgb3JpZ2luYWwncyBzb3VyY2UvbGluZS9jb2x1bW4gb3JkZXIsIHJlc3BlY3RpdmVseS4gRGVmYXVsdHMgdG9cbiAqICAgICAgICBgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSYC5cbiAqL1xuU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmVhY2hNYXBwaW5nID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZWFjaE1hcHBpbmcoYUNhbGxiYWNrLCBhQ29udGV4dCwgYU9yZGVyKSB7XG4gICAgdmFyIGNvbnRleHQgPSBhQ29udGV4dCB8fCBudWxsO1xuICAgIHZhciBvcmRlciA9IGFPcmRlciB8fCBTb3VyY2VNYXBDb25zdW1lci5HRU5FUkFURURfT1JERVI7XG5cbiAgICB2YXIgbWFwcGluZ3M7XG4gICAgc3dpdGNoIChvcmRlcikge1xuICAgIGNhc2UgU291cmNlTWFwQ29uc3VtZXIuR0VORVJBVEVEX09SREVSOlxuICAgICAgbWFwcGluZ3MgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgU291cmNlTWFwQ29uc3VtZXIuT1JJR0lOQUxfT1JERVI6XG4gICAgICBtYXBwaW5ncyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3M7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBvcmRlciBvZiBpdGVyYXRpb24uXCIpO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2VSb290ID0gdGhpcy5zb3VyY2VSb290O1xuICAgIG1hcHBpbmdzLm1hcChmdW5jdGlvbiAobWFwcGluZykge1xuICAgICAgdmFyIHNvdXJjZSA9IG1hcHBpbmcuc291cmNlID09PSBudWxsID8gbnVsbCA6IHRoaXMuX3NvdXJjZXMuYXQobWFwcGluZy5zb3VyY2UpO1xuICAgICAgaWYgKHNvdXJjZSAhPSBudWxsICYmIHNvdXJjZVJvb3QgIT0gbnVsbCkge1xuICAgICAgICBzb3VyY2UgPSB1dGlsLmpvaW4oc291cmNlUm9vdCwgc291cmNlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgICBnZW5lcmF0ZWRMaW5lOiBtYXBwaW5nLmdlbmVyYXRlZExpbmUsXG4gICAgICAgIGdlbmVyYXRlZENvbHVtbjogbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4sXG4gICAgICAgIG9yaWdpbmFsTGluZTogbWFwcGluZy5vcmlnaW5hbExpbmUsXG4gICAgICAgIG9yaWdpbmFsQ29sdW1uOiBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uLFxuICAgICAgICBuYW1lOiBtYXBwaW5nLm5hbWUgPT09IG51bGwgPyBudWxsIDogdGhpcy5fbmFtZXMuYXQobWFwcGluZy5uYW1lKVxuICAgICAgfTtcbiAgICB9LCB0aGlzKS5mb3JFYWNoKGFDYWxsYmFjaywgY29udGV4dCk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyBhbGwgZ2VuZXJhdGVkIGxpbmUgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIG9yaWdpbmFsIHNvdXJjZSxcbiAqIGxpbmUsIGFuZCBjb2x1bW4gcHJvdmlkZWQuIElmIG5vIGNvbHVtbiBpcyBwcm92aWRlZCwgcmV0dXJucyBhbGwgbWFwcGluZ3NcbiAqIGNvcnJlc3BvbmRpbmcgdG8gYSBlaXRoZXIgdGhlIGxpbmUgd2UgYXJlIHNlYXJjaGluZyBmb3Igb3IgdGhlIG5leHRcbiAqIGNsb3Nlc3QgbGluZSB0aGF0IGhhcyBhbnkgbWFwcGluZ3MuIE90aGVyd2lzZSwgcmV0dXJucyBhbGwgbWFwcGluZ3NcbiAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGxpbmUgYW5kIGVpdGhlciB0aGUgY29sdW1uIHdlIGFyZSBzZWFyY2hpbmcgZm9yXG4gKiBvciB0aGUgbmV4dCBjbG9zZXN0IGNvbHVtbiB0aGF0IGhhcyBhbnkgb2Zmc2V0cy5cbiAqXG4gKiBUaGUgb25seSBhcmd1bWVudCBpcyBhbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBPcHRpb25hbC4gdGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZS5cbiAqXG4gKiBhbmQgYW4gYXJyYXkgb2Ygb2JqZWN0cyBpcyByZXR1cm5lZCwgZWFjaCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UsIG9yIG51bGwuXG4gKi9cblNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5hbGxHZW5lcmF0ZWRQb3NpdGlvbnNGb3IgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9hbGxHZW5lcmF0ZWRQb3NpdGlvbnNGb3IoYUFyZ3MpIHtcbiAgICB2YXIgbGluZSA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnbGluZScpO1xuXG4gICAgLy8gV2hlbiB0aGVyZSBpcyBubyBleGFjdCBtYXRjaCwgQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX2ZpbmRNYXBwaW5nXG4gICAgLy8gcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGNsb3Nlc3QgbWFwcGluZyBsZXNzIHRoYW4gdGhlIG5lZWRsZS4gQnlcbiAgICAvLyBzZXR0aW5nIG5lZWRsZS5vcmlnaW5hbENvbHVtbiB0byAwLCB3ZSB0aHVzIGZpbmQgdGhlIGxhc3QgbWFwcGluZyBmb3JcbiAgICAvLyB0aGUgZ2l2ZW4gbGluZSwgcHJvdmlkZWQgc3VjaCBhIG1hcHBpbmcgZXhpc3RzLlxuICAgIHZhciBuZWVkbGUgPSB7XG4gICAgICBzb3VyY2U6IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJyksXG4gICAgICBvcmlnaW5hbExpbmU6IGxpbmUsXG4gICAgICBvcmlnaW5hbENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nLCAwKVxuICAgIH07XG5cbiAgICBpZiAodGhpcy5zb3VyY2VSb290ICE9IG51bGwpIHtcbiAgICAgIG5lZWRsZS5zb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHRoaXMuc291cmNlUm9vdCwgbmVlZGxlLnNvdXJjZSk7XG4gICAgfVxuICAgIGlmICghdGhpcy5fc291cmNlcy5oYXMobmVlZGxlLnNvdXJjZSkpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgbmVlZGxlLnNvdXJjZSA9IHRoaXMuX3NvdXJjZXMuaW5kZXhPZihuZWVkbGUuc291cmNlKTtcblxuICAgIHZhciBtYXBwaW5ncyA9IFtdO1xuXG4gICAgdmFyIGluZGV4ID0gdGhpcy5fZmluZE1hcHBpbmcobmVlZGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsTWFwcGluZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJvcmlnaW5hbExpbmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIm9yaWdpbmFsQ29sdW1uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5hcnlTZWFyY2guTEVBU1RfVVBQRVJfQk9VTkQpO1xuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3NbaW5kZXhdO1xuXG4gICAgICBpZiAoYUFyZ3MuY29sdW1uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdmFyIG9yaWdpbmFsTGluZSA9IG1hcHBpbmcub3JpZ2luYWxMaW5lO1xuXG4gICAgICAgIC8vIEl0ZXJhdGUgdW50aWwgZWl0aGVyIHdlIHJ1biBvdXQgb2YgbWFwcGluZ3MsIG9yIHdlIHJ1biBpbnRvXG4gICAgICAgIC8vIGEgbWFwcGluZyBmb3IgYSBkaWZmZXJlbnQgbGluZSB0aGFuIHRoZSBvbmUgd2UgZm91bmQuIFNpbmNlXG4gICAgICAgIC8vIG1hcHBpbmdzIGFyZSBzb3J0ZWQsIHRoaXMgaXMgZ3VhcmFudGVlZCB0byBmaW5kIGFsbCBtYXBwaW5ncyBmb3JcbiAgICAgICAgLy8gdGhlIGxpbmUgd2UgZm91bmQuXG4gICAgICAgIHdoaWxlIChtYXBwaW5nICYmIG1hcHBpbmcub3JpZ2luYWxMaW5lID09PSBvcmlnaW5hbExpbmUpIHtcbiAgICAgICAgICBtYXBwaW5ncy5wdXNoKHtcbiAgICAgICAgICAgIGxpbmU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRMaW5lJywgbnVsbCksXG4gICAgICAgICAgICBjb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRDb2x1bW4nLCBudWxsKSxcbiAgICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIG1hcHBpbmcgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzWysraW5kZXhdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgb3JpZ2luYWxDb2x1bW4gPSBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uO1xuXG4gICAgICAgIC8vIEl0ZXJhdGUgdW50aWwgZWl0aGVyIHdlIHJ1biBvdXQgb2YgbWFwcGluZ3MsIG9yIHdlIHJ1biBpbnRvXG4gICAgICAgIC8vIGEgbWFwcGluZyBmb3IgYSBkaWZmZXJlbnQgbGluZSB0aGFuIHRoZSBvbmUgd2Ugd2VyZSBzZWFyY2hpbmcgZm9yLlxuICAgICAgICAvLyBTaW5jZSBtYXBwaW5ncyBhcmUgc29ydGVkLCB0aGlzIGlzIGd1YXJhbnRlZWQgdG8gZmluZCBhbGwgbWFwcGluZ3MgZm9yXG4gICAgICAgIC8vIHRoZSBsaW5lIHdlIGFyZSBzZWFyY2hpbmcgZm9yLlxuICAgICAgICB3aGlsZSAobWFwcGluZyAmJlxuICAgICAgICAgICAgICAgbWFwcGluZy5vcmlnaW5hbExpbmUgPT09IGxpbmUgJiZcbiAgICAgICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxDb2x1bW4gPT0gb3JpZ2luYWxDb2x1bW4pIHtcbiAgICAgICAgICBtYXBwaW5ncy5wdXNoKHtcbiAgICAgICAgICAgIGxpbmU6IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRMaW5lJywgbnVsbCksXG4gICAgICAgICAgICBjb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdnZW5lcmF0ZWRDb2x1bW4nLCBudWxsKSxcbiAgICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIG1hcHBpbmcgPSB0aGlzLl9vcmlnaW5hbE1hcHBpbmdzWysraW5kZXhdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcHBpbmdzO1xuICB9O1xuXG5leHBvcnRzLlNvdXJjZU1hcENvbnN1bWVyID0gU291cmNlTWFwQ29uc3VtZXI7XG5cbi8qKlxuICogQSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyIGluc3RhbmNlIHJlcHJlc2VudHMgYSBwYXJzZWQgc291cmNlIG1hcCB3aGljaCB3ZSBjYW5cbiAqIHF1ZXJ5IGZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3JpZ2luYWwgZmlsZSBwb3NpdGlvbnMgYnkgZ2l2aW5nIGl0IGEgZmlsZVxuICogcG9zaXRpb24gaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gKlxuICogVGhlIG9ubHkgcGFyYW1ldGVyIGlzIHRoZSByYXcgc291cmNlIG1hcCAoZWl0aGVyIGFzIGEgSlNPTiBzdHJpbmcsIG9yXG4gKiBhbHJlYWR5IHBhcnNlZCB0byBhbiBvYmplY3QpLiBBY2NvcmRpbmcgdG8gdGhlIHNwZWMsIHNvdXJjZSBtYXBzIGhhdmUgdGhlXG4gKiBmb2xsb3dpbmcgYXR0cmlidXRlczpcbiAqXG4gKiAgIC0gdmVyc2lvbjogV2hpY2ggdmVyc2lvbiBvZiB0aGUgc291cmNlIG1hcCBzcGVjIHRoaXMgbWFwIGlzIGZvbGxvd2luZy5cbiAqICAgLSBzb3VyY2VzOiBBbiBhcnJheSBvZiBVUkxzIHRvIHRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZXMuXG4gKiAgIC0gbmFtZXM6IEFuIGFycmF5IG9mIGlkZW50aWZpZXJzIHdoaWNoIGNhbiBiZSByZWZlcnJlbmNlZCBieSBpbmRpdmlkdWFsIG1hcHBpbmdzLlxuICogICAtIHNvdXJjZVJvb3Q6IE9wdGlvbmFsLiBUaGUgVVJMIHJvb3QgZnJvbSB3aGljaCBhbGwgc291cmNlcyBhcmUgcmVsYXRpdmUuXG4gKiAgIC0gc291cmNlc0NvbnRlbnQ6IE9wdGlvbmFsLiBBbiBhcnJheSBvZiBjb250ZW50cyBvZiB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGVzLlxuICogICAtIG1hcHBpbmdzOiBBIHN0cmluZyBvZiBiYXNlNjQgVkxRcyB3aGljaCBjb250YWluIHRoZSBhY3R1YWwgbWFwcGluZ3MuXG4gKiAgIC0gZmlsZTogT3B0aW9uYWwuIFRoZSBnZW5lcmF0ZWQgZmlsZSB0aGlzIHNvdXJjZSBtYXAgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICpcbiAqIEhlcmUgaXMgYW4gZXhhbXBsZSBzb3VyY2UgbWFwLCB0YWtlbiBmcm9tIHRoZSBzb3VyY2UgbWFwIHNwZWNbMF06XG4gKlxuICogICAgIHtcbiAqICAgICAgIHZlcnNpb24gOiAzLFxuICogICAgICAgZmlsZTogXCJvdXQuanNcIixcbiAqICAgICAgIHNvdXJjZVJvb3QgOiBcIlwiLFxuICogICAgICAgc291cmNlczogW1wiZm9vLmpzXCIsIFwiYmFyLmpzXCJdLFxuICogICAgICAgbmFtZXM6IFtcInNyY1wiLCBcIm1hcHNcIiwgXCJhcmVcIiwgXCJmdW5cIl0sXG4gKiAgICAgICBtYXBwaW5nczogXCJBQSxBQjs7QUJDREU7XCJcbiAqICAgICB9XG4gKlxuICogWzBdOiBodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFVMVJHQWVoUXdSeXBVVG92RjFLUmxwaU9GemUwYi1fMmdjNmZBSDBLWTBrL2VkaXQ/cGxpPTEjXG4gKi9cbmZ1bmN0aW9uIEJhc2ljU291cmNlTWFwQ29uc3VtZXIoYVNvdXJjZU1hcCkge1xuICB2YXIgc291cmNlTWFwID0gYVNvdXJjZU1hcDtcbiAgaWYgKHR5cGVvZiBhU291cmNlTWFwID09PSAnc3RyaW5nJykge1xuICAgIHNvdXJjZU1hcCA9IEpTT04ucGFyc2UoYVNvdXJjZU1hcC5yZXBsYWNlKC9eXFwpXFxdXFx9Jy8sICcnKSk7XG4gIH1cblxuICB2YXIgdmVyc2lvbiA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3ZlcnNpb24nKTtcbiAgdmFyIHNvdXJjZXMgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdzb3VyY2VzJyk7XG4gIC8vIFNhc3MgMy4zIGxlYXZlcyBvdXQgdGhlICduYW1lcycgYXJyYXksIHNvIHdlIGRldmlhdGUgZnJvbSB0aGUgc3BlYyAod2hpY2hcbiAgLy8gcmVxdWlyZXMgdGhlIGFycmF5KSB0byBwbGF5IG5pY2UgaGVyZS5cbiAgdmFyIG5hbWVzID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnbmFtZXMnLCBbXSk7XG4gIHZhciBzb3VyY2VSb290ID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnc291cmNlUm9vdCcsIG51bGwpO1xuICB2YXIgc291cmNlc0NvbnRlbnQgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdzb3VyY2VzQ29udGVudCcsIG51bGwpO1xuICB2YXIgbWFwcGluZ3MgPSB1dGlsLmdldEFyZyhzb3VyY2VNYXAsICdtYXBwaW5ncycpO1xuICB2YXIgZmlsZSA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ2ZpbGUnLCBudWxsKTtcblxuICAvLyBPbmNlIGFnYWluLCBTYXNzIGRldmlhdGVzIGZyb20gdGhlIHNwZWMgYW5kIHN1cHBsaWVzIHRoZSB2ZXJzaW9uIGFzIGFcbiAgLy8gc3RyaW5nIHJhdGhlciB0aGFuIGEgbnVtYmVyLCBzbyB3ZSB1c2UgbG9vc2UgZXF1YWxpdHkgY2hlY2tpbmcgaGVyZS5cbiAgaWYgKHZlcnNpb24gIT0gdGhpcy5fdmVyc2lvbikge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgdmVyc2lvbjogJyArIHZlcnNpb24pO1xuICB9XG5cbiAgc291cmNlcyA9IHNvdXJjZXNcbiAgICAubWFwKFN0cmluZylcbiAgICAvLyBTb21lIHNvdXJjZSBtYXBzIHByb2R1Y2UgcmVsYXRpdmUgc291cmNlIHBhdGhzIGxpa2UgXCIuL2Zvby5qc1wiIGluc3RlYWQgb2ZcbiAgICAvLyBcImZvby5qc1wiLiAgTm9ybWFsaXplIHRoZXNlIGZpcnN0IHNvIHRoYXQgZnV0dXJlIGNvbXBhcmlzb25zIHdpbGwgc3VjY2VlZC5cbiAgICAvLyBTZWUgYnVnemlsLmxhLzEwOTA3NjguXG4gICAgLm1hcCh1dGlsLm5vcm1hbGl6ZSlcbiAgICAvLyBBbHdheXMgZW5zdXJlIHRoYXQgYWJzb2x1dGUgc291cmNlcyBhcmUgaW50ZXJuYWxseSBzdG9yZWQgcmVsYXRpdmUgdG9cbiAgICAvLyB0aGUgc291cmNlIHJvb3QsIGlmIHRoZSBzb3VyY2Ugcm9vdCBpcyBhYnNvbHV0ZS4gTm90IGRvaW5nIHRoaXMgd291bGRcbiAgICAvLyBiZSBwYXJ0aWN1bGFybHkgcHJvYmxlbWF0aWMgd2hlbiB0aGUgc291cmNlIHJvb3QgaXMgYSBwcmVmaXggb2YgdGhlXG4gICAgLy8gc291cmNlICh2YWxpZCwgYnV0IHdoeT8/KS4gU2VlIGdpdGh1YiBpc3N1ZSAjMTk5IGFuZCBidWd6aWwubGEvMTE4ODk4Mi5cbiAgICAubWFwKGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgIHJldHVybiBzb3VyY2VSb290ICYmIHV0aWwuaXNBYnNvbHV0ZShzb3VyY2VSb290KSAmJiB1dGlsLmlzQWJzb2x1dGUoc291cmNlKVxuICAgICAgICA/IHV0aWwucmVsYXRpdmUoc291cmNlUm9vdCwgc291cmNlKVxuICAgICAgICA6IHNvdXJjZTtcbiAgICB9KTtcblxuICAvLyBQYXNzIGB0cnVlYCBiZWxvdyB0byBhbGxvdyBkdXBsaWNhdGUgbmFtZXMgYW5kIHNvdXJjZXMuIFdoaWxlIHNvdXJjZSBtYXBzXG4gIC8vIGFyZSBpbnRlbmRlZCB0byBiZSBjb21wcmVzc2VkIGFuZCBkZWR1cGxpY2F0ZWQsIHRoZSBUeXBlU2NyaXB0IGNvbXBpbGVyXG4gIC8vIHNvbWV0aW1lcyBnZW5lcmF0ZXMgc291cmNlIG1hcHMgd2l0aCBkdXBsaWNhdGVzIGluIHRoZW0uIFNlZSBHaXRodWIgaXNzdWVcbiAgLy8gIzcyIGFuZCBidWd6aWwubGEvODg5NDkyLlxuICB0aGlzLl9uYW1lcyA9IEFycmF5U2V0LmZyb21BcnJheShuYW1lcy5tYXAoU3RyaW5nKSwgdHJ1ZSk7XG4gIHRoaXMuX3NvdXJjZXMgPSBBcnJheVNldC5mcm9tQXJyYXkoc291cmNlcywgdHJ1ZSk7XG5cbiAgdGhpcy5zb3VyY2VSb290ID0gc291cmNlUm9vdDtcbiAgdGhpcy5zb3VyY2VzQ29udGVudCA9IHNvdXJjZXNDb250ZW50O1xuICB0aGlzLl9tYXBwaW5ncyA9IG1hcHBpbmdzO1xuICB0aGlzLmZpbGUgPSBmaWxlO1xufVxuXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlKTtcbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmNvbnN1bWVyID0gU291cmNlTWFwQ29uc3VtZXI7XG5cbi8qKlxuICogQ3JlYXRlIGEgQmFzaWNTb3VyY2VNYXBDb25zdW1lciBmcm9tIGEgU291cmNlTWFwR2VuZXJhdG9yLlxuICpcbiAqIEBwYXJhbSBTb3VyY2VNYXBHZW5lcmF0b3IgYVNvdXJjZU1hcFxuICogICAgICAgIFRoZSBzb3VyY2UgbWFwIHRoYXQgd2lsbCBiZSBjb25zdW1lZC5cbiAqIEByZXR1cm5zIEJhc2ljU291cmNlTWFwQ29uc3VtZXJcbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5mcm9tU291cmNlTWFwID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfZnJvbVNvdXJjZU1hcChhU291cmNlTWFwKSB7XG4gICAgdmFyIHNtYyA9IE9iamVjdC5jcmVhdGUoQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUpO1xuXG4gICAgdmFyIG5hbWVzID0gc21jLl9uYW1lcyA9IEFycmF5U2V0LmZyb21BcnJheShhU291cmNlTWFwLl9uYW1lcy50b0FycmF5KCksIHRydWUpO1xuICAgIHZhciBzb3VyY2VzID0gc21jLl9zb3VyY2VzID0gQXJyYXlTZXQuZnJvbUFycmF5KGFTb3VyY2VNYXAuX3NvdXJjZXMudG9BcnJheSgpLCB0cnVlKTtcbiAgICBzbWMuc291cmNlUm9vdCA9IGFTb3VyY2VNYXAuX3NvdXJjZVJvb3Q7XG4gICAgc21jLnNvdXJjZXNDb250ZW50ID0gYVNvdXJjZU1hcC5fZ2VuZXJhdGVTb3VyY2VzQ29udGVudChzbWMuX3NvdXJjZXMudG9BcnJheSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc21jLnNvdXJjZVJvb3QpO1xuICAgIHNtYy5maWxlID0gYVNvdXJjZU1hcC5fZmlsZTtcblxuICAgIC8vIEJlY2F1c2Ugd2UgYXJlIG1vZGlmeWluZyB0aGUgZW50cmllcyAoYnkgY29udmVydGluZyBzdHJpbmcgc291cmNlcyBhbmRcbiAgICAvLyBuYW1lcyB0byBpbmRpY2VzIGludG8gdGhlIHNvdXJjZXMgYW5kIG5hbWVzIEFycmF5U2V0cyksIHdlIGhhdmUgdG8gbWFrZVxuICAgIC8vIGEgY29weSBvZiB0aGUgZW50cnkgb3IgZWxzZSBiYWQgdGhpbmdzIGhhcHBlbi4gU2hhcmVkIG11dGFibGUgc3RhdGVcbiAgICAvLyBzdHJpa2VzIGFnYWluISBTZWUgZ2l0aHViIGlzc3VlICMxOTEuXG5cbiAgICB2YXIgZ2VuZXJhdGVkTWFwcGluZ3MgPSBhU291cmNlTWFwLl9tYXBwaW5ncy50b0FycmF5KCkuc2xpY2UoKTtcbiAgICB2YXIgZGVzdEdlbmVyYXRlZE1hcHBpbmdzID0gc21jLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBbXTtcbiAgICB2YXIgZGVzdE9yaWdpbmFsTWFwcGluZ3MgPSBzbWMuX19vcmlnaW5hbE1hcHBpbmdzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gZ2VuZXJhdGVkTWFwcGluZ3MubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzcmNNYXBwaW5nID0gZ2VuZXJhdGVkTWFwcGluZ3NbaV07XG4gICAgICB2YXIgZGVzdE1hcHBpbmcgPSBuZXcgTWFwcGluZztcbiAgICAgIGRlc3RNYXBwaW5nLmdlbmVyYXRlZExpbmUgPSBzcmNNYXBwaW5nLmdlbmVyYXRlZExpbmU7XG4gICAgICBkZXN0TWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4gPSBzcmNNYXBwaW5nLmdlbmVyYXRlZENvbHVtbjtcblxuICAgICAgaWYgKHNyY01hcHBpbmcuc291cmNlKSB7XG4gICAgICAgIGRlc3RNYXBwaW5nLnNvdXJjZSA9IHNvdXJjZXMuaW5kZXhPZihzcmNNYXBwaW5nLnNvdXJjZSk7XG4gICAgICAgIGRlc3RNYXBwaW5nLm9yaWdpbmFsTGluZSA9IHNyY01hcHBpbmcub3JpZ2luYWxMaW5lO1xuICAgICAgICBkZXN0TWFwcGluZy5vcmlnaW5hbENvbHVtbiA9IHNyY01hcHBpbmcub3JpZ2luYWxDb2x1bW47XG5cbiAgICAgICAgaWYgKHNyY01hcHBpbmcubmFtZSkge1xuICAgICAgICAgIGRlc3RNYXBwaW5nLm5hbWUgPSBuYW1lcy5pbmRleE9mKHNyY01hcHBpbmcubmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBkZXN0T3JpZ2luYWxNYXBwaW5ncy5wdXNoKGRlc3RNYXBwaW5nKTtcbiAgICAgIH1cblxuICAgICAgZGVzdEdlbmVyYXRlZE1hcHBpbmdzLnB1c2goZGVzdE1hcHBpbmcpO1xuICAgIH1cblxuICAgIHF1aWNrU29ydChzbWMuX19vcmlnaW5hbE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKTtcblxuICAgIHJldHVybiBzbWM7XG4gIH07XG5cbi8qKlxuICogVGhlIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXBwaW5nIHNwZWMgdGhhdCB3ZSBhcmUgY29uc3VtaW5nLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbi8qKlxuICogVGhlIGxpc3Qgb2Ygb3JpZ2luYWwgc291cmNlcy5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLCAnc291cmNlcycsIHtcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NvdXJjZXMudG9BcnJheSgpLm1hcChmdW5jdGlvbiAocykge1xuICAgICAgcmV0dXJuIHRoaXMuc291cmNlUm9vdCAhPSBudWxsID8gdXRpbC5qb2luKHRoaXMuc291cmNlUm9vdCwgcykgOiBzO1xuICAgIH0sIHRoaXMpO1xuICB9XG59KTtcblxuLyoqXG4gKiBQcm92aWRlIHRoZSBKSVQgd2l0aCBhIG5pY2Ugc2hhcGUgLyBoaWRkZW4gY2xhc3MuXG4gKi9cbmZ1bmN0aW9uIE1hcHBpbmcoKSB7XG4gIHRoaXMuZ2VuZXJhdGVkTGluZSA9IDA7XG4gIHRoaXMuZ2VuZXJhdGVkQ29sdW1uID0gMDtcbiAgdGhpcy5zb3VyY2UgPSBudWxsO1xuICB0aGlzLm9yaWdpbmFsTGluZSA9IG51bGw7XG4gIHRoaXMub3JpZ2luYWxDb2x1bW4gPSBudWxsO1xuICB0aGlzLm5hbWUgPSBudWxsO1xufVxuXG4vKipcbiAqIFBhcnNlIHRoZSBtYXBwaW5ncyBpbiBhIHN0cmluZyBpbiB0byBhIGRhdGEgc3RydWN0dXJlIHdoaWNoIHdlIGNhbiBlYXNpbHlcbiAqIHF1ZXJ5ICh0aGUgb3JkZXJlZCBhcnJheXMgaW4gdGhlIGB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3NgIGFuZFxuICogYHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzYCBwcm9wZXJ0aWVzKS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9wYXJzZU1hcHBpbmdzKGFTdHIsIGFTb3VyY2VSb290KSB7XG4gICAgdmFyIGdlbmVyYXRlZExpbmUgPSAxO1xuICAgIHZhciBwcmV2aW91c0dlbmVyYXRlZENvbHVtbiA9IDA7XG4gICAgdmFyIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gMDtcbiAgICB2YXIgcHJldmlvdXNPcmlnaW5hbENvbHVtbiA9IDA7XG4gICAgdmFyIHByZXZpb3VzU291cmNlID0gMDtcbiAgICB2YXIgcHJldmlvdXNOYW1lID0gMDtcbiAgICB2YXIgbGVuZ3RoID0gYVN0ci5sZW5ndGg7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgY2FjaGVkU2VnbWVudHMgPSB7fTtcbiAgICB2YXIgdGVtcCA9IHt9O1xuICAgIHZhciBvcmlnaW5hbE1hcHBpbmdzID0gW107XG4gICAgdmFyIGdlbmVyYXRlZE1hcHBpbmdzID0gW107XG4gICAgdmFyIG1hcHBpbmcsIHN0ciwgc2VnbWVudCwgZW5kLCB2YWx1ZTtcblxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgICAgaWYgKGFTdHIuY2hhckF0KGluZGV4KSA9PT0gJzsnKSB7XG4gICAgICAgIGdlbmVyYXRlZExpbmUrKztcbiAgICAgICAgaW5kZXgrKztcbiAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSAwO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoYVN0ci5jaGFyQXQoaW5kZXgpID09PSAnLCcpIHtcbiAgICAgICAgaW5kZXgrKztcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBtYXBwaW5nID0gbmV3IE1hcHBpbmcoKTtcbiAgICAgICAgbWFwcGluZy5nZW5lcmF0ZWRMaW5lID0gZ2VuZXJhdGVkTGluZTtcblxuICAgICAgICAvLyBCZWNhdXNlIGVhY2ggb2Zmc2V0IGlzIGVuY29kZWQgcmVsYXRpdmUgdG8gdGhlIHByZXZpb3VzIG9uZSxcbiAgICAgICAgLy8gbWFueSBzZWdtZW50cyBvZnRlbiBoYXZlIHRoZSBzYW1lIGVuY29kaW5nLiBXZSBjYW4gZXhwbG9pdCB0aGlzXG4gICAgICAgIC8vIGZhY3QgYnkgY2FjaGluZyB0aGUgcGFyc2VkIHZhcmlhYmxlIGxlbmd0aCBmaWVsZHMgb2YgZWFjaCBzZWdtZW50LFxuICAgICAgICAvLyBhbGxvd2luZyB1cyB0byBhdm9pZCBhIHNlY29uZCBwYXJzZSBpZiB3ZSBlbmNvdW50ZXIgdGhlIHNhbWVcbiAgICAgICAgLy8gc2VnbWVudCBhZ2Fpbi5cbiAgICAgICAgZm9yIChlbmQgPSBpbmRleDsgZW5kIDwgbGVuZ3RoOyBlbmQrKykge1xuICAgICAgICAgIGlmICh0aGlzLl9jaGFySXNNYXBwaW5nU2VwYXJhdG9yKGFTdHIsIGVuZCkpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdHIgPSBhU3RyLnNsaWNlKGluZGV4LCBlbmQpO1xuXG4gICAgICAgIHNlZ21lbnQgPSBjYWNoZWRTZWdtZW50c1tzdHJdO1xuICAgICAgICBpZiAoc2VnbWVudCkge1xuICAgICAgICAgIGluZGV4ICs9IHN0ci5sZW5ndGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VnbWVudCA9IFtdO1xuICAgICAgICAgIHdoaWxlIChpbmRleCA8IGVuZCkge1xuICAgICAgICAgICAgYmFzZTY0VkxRLmRlY29kZShhU3RyLCBpbmRleCwgdGVtcCk7XG4gICAgICAgICAgICB2YWx1ZSA9IHRlbXAudmFsdWU7XG4gICAgICAgICAgICBpbmRleCA9IHRlbXAucmVzdDtcbiAgICAgICAgICAgIHNlZ21lbnQucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIGEgc291cmNlLCBidXQgbm8gbGluZSBhbmQgY29sdW1uJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIGEgc291cmNlIGFuZCBsaW5lLCBidXQgbm8gY29sdW1uJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2FjaGVkU2VnbWVudHNbc3RyXSA9IHNlZ21lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBHZW5lcmF0ZWQgY29sdW1uLlxuICAgICAgICBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbiA9IHByZXZpb3VzR2VuZXJhdGVkQ29sdW1uICsgc2VnbWVudFswXTtcbiAgICAgICAgcHJldmlvdXNHZW5lcmF0ZWRDb2x1bW4gPSBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbjtcblxuICAgICAgICBpZiAoc2VnbWVudC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgLy8gT3JpZ2luYWwgc291cmNlLlxuICAgICAgICAgIG1hcHBpbmcuc291cmNlID0gcHJldmlvdXNTb3VyY2UgKyBzZWdtZW50WzFdO1xuICAgICAgICAgIHByZXZpb3VzU291cmNlICs9IHNlZ21lbnRbMV07XG5cbiAgICAgICAgICAvLyBPcmlnaW5hbCBsaW5lLlxuICAgICAgICAgIG1hcHBpbmcub3JpZ2luYWxMaW5lID0gcHJldmlvdXNPcmlnaW5hbExpbmUgKyBzZWdtZW50WzJdO1xuICAgICAgICAgIHByZXZpb3VzT3JpZ2luYWxMaW5lID0gbWFwcGluZy5vcmlnaW5hbExpbmU7XG4gICAgICAgICAgLy8gTGluZXMgYXJlIHN0b3JlZCAwLWJhc2VkXG4gICAgICAgICAgbWFwcGluZy5vcmlnaW5hbExpbmUgKz0gMTtcblxuICAgICAgICAgIC8vIE9yaWdpbmFsIGNvbHVtbi5cbiAgICAgICAgICBtYXBwaW5nLm9yaWdpbmFsQ29sdW1uID0gcHJldmlvdXNPcmlnaW5hbENvbHVtbiArIHNlZ21lbnRbM107XG4gICAgICAgICAgcHJldmlvdXNPcmlnaW5hbENvbHVtbiA9IG1hcHBpbmcub3JpZ2luYWxDb2x1bW47XG5cbiAgICAgICAgICBpZiAoc2VnbWVudC5sZW5ndGggPiA0KSB7XG4gICAgICAgICAgICAvLyBPcmlnaW5hbCBuYW1lLlxuICAgICAgICAgICAgbWFwcGluZy5uYW1lID0gcHJldmlvdXNOYW1lICsgc2VnbWVudFs0XTtcbiAgICAgICAgICAgIHByZXZpb3VzTmFtZSArPSBzZWdtZW50WzRdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGdlbmVyYXRlZE1hcHBpbmdzLnB1c2gobWFwcGluZyk7XG4gICAgICAgIGlmICh0eXBlb2YgbWFwcGluZy5vcmlnaW5hbExpbmUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgb3JpZ2luYWxNYXBwaW5ncy5wdXNoKG1hcHBpbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcXVpY2tTb3J0KGdlbmVyYXRlZE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeUdlbmVyYXRlZFBvc2l0aW9uc0RlZmxhdGVkKTtcbiAgICB0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MgPSBnZW5lcmF0ZWRNYXBwaW5ncztcblxuICAgIHF1aWNrU29ydChvcmlnaW5hbE1hcHBpbmdzLCB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zKTtcbiAgICB0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncyA9IG9yaWdpbmFsTWFwcGluZ3M7XG4gIH07XG5cbi8qKlxuICogRmluZCB0aGUgbWFwcGluZyB0aGF0IGJlc3QgbWF0Y2hlcyB0aGUgaHlwb3RoZXRpY2FsIFwibmVlZGxlXCIgbWFwcGluZyB0aGF0XG4gKiB3ZSBhcmUgc2VhcmNoaW5nIGZvciBpbiB0aGUgZ2l2ZW4gXCJoYXlzdGFja1wiIG9mIG1hcHBpbmdzLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fZmluZE1hcHBpbmcgPVxuICBmdW5jdGlvbiBTb3VyY2VNYXBDb25zdW1lcl9maW5kTWFwcGluZyhhTmVlZGxlLCBhTWFwcGluZ3MsIGFMaW5lTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYUNvbHVtbk5hbWUsIGFDb21wYXJhdG9yLCBhQmlhcykge1xuICAgIC8vIFRvIHJldHVybiB0aGUgcG9zaXRpb24gd2UgYXJlIHNlYXJjaGluZyBmb3IsIHdlIG11c3QgZmlyc3QgZmluZCB0aGVcbiAgICAvLyBtYXBwaW5nIGZvciB0aGUgZ2l2ZW4gcG9zaXRpb24gYW5kIHRoZW4gcmV0dXJuIHRoZSBvcHBvc2l0ZSBwb3NpdGlvbiBpdFxuICAgIC8vIHBvaW50cyB0by4gQmVjYXVzZSB0aGUgbWFwcGluZ3MgYXJlIHNvcnRlZCwgd2UgY2FuIHVzZSBiaW5hcnkgc2VhcmNoIHRvXG4gICAgLy8gZmluZCB0aGUgYmVzdCBtYXBwaW5nLlxuXG4gICAgaWYgKGFOZWVkbGVbYUxpbmVOYW1lXSA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdMaW5lIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDEsIGdvdCAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICsgYU5lZWRsZVthTGluZU5hbWVdKTtcbiAgICB9XG4gICAgaWYgKGFOZWVkbGVbYUNvbHVtbk5hbWVdIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ29sdW1uIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDAsIGdvdCAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICsgYU5lZWRsZVthQ29sdW1uTmFtZV0pO1xuICAgIH1cblxuICAgIHJldHVybiBiaW5hcnlTZWFyY2guc2VhcmNoKGFOZWVkbGUsIGFNYXBwaW5ncywgYUNvbXBhcmF0b3IsIGFCaWFzKTtcbiAgfTtcblxuLyoqXG4gKiBDb21wdXRlIHRoZSBsYXN0IGNvbHVtbiBmb3IgZWFjaCBnZW5lcmF0ZWQgbWFwcGluZy4gVGhlIGxhc3QgY29sdW1uIGlzXG4gKiBpbmNsdXNpdmUuXG4gKi9cbkJhc2ljU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmNvbXB1dGVDb2x1bW5TcGFucyA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2NvbXB1dGVDb2x1bW5TcGFucygpIHtcbiAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3MubGVuZ3RoOyArK2luZGV4KSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzW2luZGV4XTtcblxuICAgICAgLy8gTWFwcGluZ3MgZG8gbm90IGNvbnRhaW4gYSBmaWVsZCBmb3IgdGhlIGxhc3QgZ2VuZXJhdGVkIGNvbHVtbnQuIFdlXG4gICAgICAvLyBjYW4gY29tZSB1cCB3aXRoIGFuIG9wdGltaXN0aWMgZXN0aW1hdGUsIGhvd2V2ZXIsIGJ5IGFzc3VtaW5nIHRoYXRcbiAgICAgIC8vIG1hcHBpbmdzIGFyZSBjb250aWd1b3VzIChpLmUuIGdpdmVuIHR3byBjb25zZWN1dGl2ZSBtYXBwaW5ncywgdGhlXG4gICAgICAvLyBmaXJzdCBtYXBwaW5nIGVuZHMgd2hlcmUgdGhlIHNlY29uZCBvbmUgc3RhcnRzKS5cbiAgICAgIGlmIChpbmRleCArIDEgPCB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5ncy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIG5leHRNYXBwaW5nID0gdGhpcy5fZ2VuZXJhdGVkTWFwcGluZ3NbaW5kZXggKyAxXTtcblxuICAgICAgICBpZiAobWFwcGluZy5nZW5lcmF0ZWRMaW5lID09PSBuZXh0TWFwcGluZy5nZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgICAgbWFwcGluZy5sYXN0R2VuZXJhdGVkQ29sdW1uID0gbmV4dE1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uIC0gMTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGUgbGFzdCBtYXBwaW5nIGZvciBlYWNoIGxpbmUgc3BhbnMgdGhlIGVudGlyZSBsaW5lLlxuICAgICAgbWFwcGluZy5sYXN0R2VuZXJhdGVkQ29sdW1uID0gSW5maW5pdHk7XG4gICAgfVxuICB9O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIG9yaWdpbmFsIHNvdXJjZSwgbGluZSwgYW5kIGNvbHVtbiBpbmZvcm1hdGlvbiBmb3IgdGhlIGdlbmVyYXRlZFxuICogc291cmNlJ3MgbGluZSBhbmQgY29sdW1uIHBvc2l0aW9ucyBwcm92aWRlZC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgYW4gb2JqZWN0XG4gKiB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIGdlbmVyYXRlZCBzb3VyY2UuXG4gKiAgIC0gYmlhczogRWl0aGVyICdTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORCcgb3JcbiAqICAgICAnU291cmNlTWFwQ29uc3VtZXIuTEVBU1RfVVBQRVJfQk9VTkQnLiBTcGVjaWZpZXMgd2hldGhlciB0byByZXR1cm4gdGhlXG4gKiAgICAgY2xvc2VzdCBlbGVtZW50IHRoYXQgaXMgc21hbGxlciB0aGFuIG9yIGdyZWF0ZXIgdGhhbiB0aGUgb25lIHdlIGFyZVxuICogICAgIHNlYXJjaGluZyBmb3IsIHJlc3BlY3RpdmVseSwgaWYgdGhlIGV4YWN0IGVsZW1lbnQgY2Fubm90IGJlIGZvdW5kLlxuICogICAgIERlZmF1bHRzIHRvICdTb3VyY2VNYXBDb25zdW1lci5HUkVBVEVTVF9MT1dFUl9CT1VORCcuXG4gKlxuICogYW5kIGFuIG9iamVjdCBpcyByZXR1cm5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAqXG4gKiAgIC0gc291cmNlOiBUaGUgb3JpZ2luYWwgc291cmNlIGZpbGUsIG9yIG51bGwuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UsIG9yIG51bGwuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBudWxsLlxuICogICAtIG5hbWU6IFRoZSBvcmlnaW5hbCBpZGVudGlmaWVyLCBvciBudWxsLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5vcmlnaW5hbFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gU291cmNlTWFwQ29uc3VtZXJfb3JpZ2luYWxQb3NpdGlvbkZvcihhQXJncykge1xuICAgIHZhciBuZWVkbGUgPSB7XG4gICAgICBnZW5lcmF0ZWRMaW5lOiB1dGlsLmdldEFyZyhhQXJncywgJ2xpbmUnKSxcbiAgICAgIGdlbmVyYXRlZENvbHVtbjogdXRpbC5nZXRBcmcoYUFyZ3MsICdjb2x1bW4nKVxuICAgIH07XG5cbiAgICB2YXIgaW5kZXggPSB0aGlzLl9maW5kTWFwcGluZyhcbiAgICAgIG5lZWRsZSxcbiAgICAgIHRoaXMuX2dlbmVyYXRlZE1hcHBpbmdzLFxuICAgICAgXCJnZW5lcmF0ZWRMaW5lXCIsXG4gICAgICBcImdlbmVyYXRlZENvbHVtblwiLFxuICAgICAgdXRpbC5jb21wYXJlQnlHZW5lcmF0ZWRQb3NpdGlvbnNEZWZsYXRlZCxcbiAgICAgIHV0aWwuZ2V0QXJnKGFBcmdzLCAnYmlhcycsIFNvdXJjZU1hcENvbnN1bWVyLkdSRUFURVNUX0xPV0VSX0JPVU5EKVxuICAgICk7XG5cbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgdmFyIG1hcHBpbmcgPSB0aGlzLl9nZW5lcmF0ZWRNYXBwaW5nc1tpbmRleF07XG5cbiAgICAgIGlmIChtYXBwaW5nLmdlbmVyYXRlZExpbmUgPT09IG5lZWRsZS5nZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgIHZhciBzb3VyY2UgPSB1dGlsLmdldEFyZyhtYXBwaW5nLCAnc291cmNlJywgbnVsbCk7XG4gICAgICAgIGlmIChzb3VyY2UgIT09IG51bGwpIHtcbiAgICAgICAgICBzb3VyY2UgPSB0aGlzLl9zb3VyY2VzLmF0KHNvdXJjZSk7XG4gICAgICAgICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICAgICAgICBzb3VyY2UgPSB1dGlsLmpvaW4odGhpcy5zb3VyY2VSb290LCBzb3VyY2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgbmFtZSA9IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICduYW1lJywgbnVsbCk7XG4gICAgICAgIGlmIChuYW1lICE9PSBudWxsKSB7XG4gICAgICAgICAgbmFtZSA9IHRoaXMuX25hbWVzLmF0KG5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICAgICAgbGluZTogdXRpbC5nZXRBcmcobWFwcGluZywgJ29yaWdpbmFsTGluZScsIG51bGwpLFxuICAgICAgICAgIGNvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ29yaWdpbmFsQ29sdW1uJywgbnVsbCksXG4gICAgICAgICAgbmFtZTogbmFtZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBzb3VyY2U6IG51bGwsXG4gICAgICBsaW5lOiBudWxsLFxuICAgICAgY29sdW1uOiBudWxsLFxuICAgICAgbmFtZTogbnVsbFxuICAgIH07XG4gIH07XG5cbi8qKlxuICogUmV0dXJuIHRydWUgaWYgd2UgaGF2ZSB0aGUgc291cmNlIGNvbnRlbnQgZm9yIGV2ZXJ5IHNvdXJjZSBpbiB0aGUgc291cmNlXG4gKiBtYXAsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuaGFzQ29udGVudHNPZkFsbFNvdXJjZXMgPVxuICBmdW5jdGlvbiBCYXNpY1NvdXJjZU1hcENvbnN1bWVyX2hhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzKCkge1xuICAgIGlmICghdGhpcy5zb3VyY2VzQ29udGVudCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudC5sZW5ndGggPj0gdGhpcy5fc291cmNlcy5zaXplKCkgJiZcbiAgICAgICF0aGlzLnNvdXJjZXNDb250ZW50LnNvbWUoZnVuY3Rpb24gKHNjKSB7IHJldHVybiBzYyA9PSBudWxsOyB9KTtcbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBzb3VyY2UgY29udGVudC4gVGhlIG9ubHkgYXJndW1lbnQgaXMgdGhlIHVybCBvZiB0aGVcbiAqIG9yaWdpbmFsIHNvdXJjZSBmaWxlLiBSZXR1cm5zIG51bGwgaWYgbm8gb3JpZ2luYWwgc291cmNlIGNvbnRlbnQgaXNcbiAqIGF2YWlsYWJsZS5cbiAqL1xuQmFzaWNTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX3NvdXJjZUNvbnRlbnRGb3IoYVNvdXJjZSwgbnVsbE9uTWlzc2luZykge1xuICAgIGlmICghdGhpcy5zb3VyY2VzQ29udGVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICBhU291cmNlID0gdXRpbC5yZWxhdGl2ZSh0aGlzLnNvdXJjZVJvb3QsIGFTb3VyY2UpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zb3VyY2VzLmhhcyhhU291cmNlKSkge1xuICAgICAgcmV0dXJuIHRoaXMuc291cmNlc0NvbnRlbnRbdGhpcy5fc291cmNlcy5pbmRleE9mKGFTb3VyY2UpXTtcbiAgICB9XG5cbiAgICB2YXIgdXJsO1xuICAgIGlmICh0aGlzLnNvdXJjZVJvb3QgIT0gbnVsbFxuICAgICAgICAmJiAodXJsID0gdXRpbC51cmxQYXJzZSh0aGlzLnNvdXJjZVJvb3QpKSkge1xuICAgICAgLy8gWFhYOiBmaWxlOi8vIFVSSXMgYW5kIGFic29sdXRlIHBhdGhzIGxlYWQgdG8gdW5leHBlY3RlZCBiZWhhdmlvciBmb3JcbiAgICAgIC8vIG1hbnkgdXNlcnMuIFdlIGNhbiBoZWxwIHRoZW0gb3V0IHdoZW4gdGhleSBleHBlY3QgZmlsZTovLyBVUklzIHRvXG4gICAgICAvLyBiZWhhdmUgbGlrZSBpdCB3b3VsZCBpZiB0aGV5IHdlcmUgcnVubmluZyBhIGxvY2FsIEhUVFAgc2VydmVyLiBTZWVcbiAgICAgIC8vIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTg4NTU5Ny5cbiAgICAgIHZhciBmaWxlVXJpQWJzUGF0aCA9IGFTb3VyY2UucmVwbGFjZSgvXmZpbGU6XFwvXFwvLywgXCJcIik7XG4gICAgICBpZiAodXJsLnNjaGVtZSA9PSBcImZpbGVcIlxuICAgICAgICAgICYmIHRoaXMuX3NvdXJjZXMuaGFzKGZpbGVVcmlBYnNQYXRoKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zb3VyY2VzQ29udGVudFt0aGlzLl9zb3VyY2VzLmluZGV4T2YoZmlsZVVyaUFic1BhdGgpXVxuICAgICAgfVxuXG4gICAgICBpZiAoKCF1cmwucGF0aCB8fCB1cmwucGF0aCA9PSBcIi9cIilcbiAgICAgICAgICAmJiB0aGlzLl9zb3VyY2VzLmhhcyhcIi9cIiArIGFTb3VyY2UpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNvdXJjZXNDb250ZW50W3RoaXMuX3NvdXJjZXMuaW5kZXhPZihcIi9cIiArIGFTb3VyY2UpXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgcmVjdXJzaXZlbHkgZnJvbVxuICAgIC8vIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvci4gSW4gdGhhdCBjYXNlLCB3ZVxuICAgIC8vIGRvbid0IHdhbnQgdG8gdGhyb3cgaWYgd2UgY2FuJ3QgZmluZCB0aGUgc291cmNlIC0gd2UganVzdCB3YW50IHRvXG4gICAgLy8gcmV0dXJuIG51bGwsIHNvIHdlIHByb3ZpZGUgYSBmbGFnIHRvIGV4aXQgZ3JhY2VmdWxseS5cbiAgICBpZiAobnVsbE9uTWlzc2luZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyBhU291cmNlICsgJ1wiIGlzIG5vdCBpbiB0aGUgU291cmNlTWFwLicpO1xuICAgIH1cbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgb3JpZ2luYWwgc291cmNlLFxuICogbGluZSwgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdCB3aXRoXG4gKiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICogICAtIGJpYXM6IEVpdGhlciAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnIG9yXG4gKiAgICAgJ1NvdXJjZU1hcENvbnN1bWVyLkxFQVNUX1VQUEVSX0JPVU5EJy4gU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmV0dXJuIHRoZVxuICogICAgIGNsb3Nlc3QgZWxlbWVudCB0aGF0IGlzIHNtYWxsZXIgdGhhbiBvciBncmVhdGVyIHRoYW4gdGhlIG9uZSB3ZSBhcmVcbiAqICAgICBzZWFyY2hpbmcgZm9yLCByZXNwZWN0aXZlbHksIGlmIHRoZSBleGFjdCBlbGVtZW50IGNhbm5vdCBiZSBmb3VuZC5cbiAqICAgICBEZWZhdWx0cyB0byAnU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQnLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICovXG5CYXNpY1NvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5nZW5lcmF0ZWRQb3NpdGlvbkZvciA9XG4gIGZ1bmN0aW9uIFNvdXJjZU1hcENvbnN1bWVyX2dlbmVyYXRlZFBvc2l0aW9uRm9yKGFBcmdzKSB7XG4gICAgdmFyIHNvdXJjZSA9IHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJyk7XG4gICAgaWYgKHRoaXMuc291cmNlUm9vdCAhPSBudWxsKSB7XG4gICAgICBzb3VyY2UgPSB1dGlsLnJlbGF0aXZlKHRoaXMuc291cmNlUm9vdCwgc291cmNlKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9zb3VyY2VzLmhhcyhzb3VyY2UpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBsaW5lOiBudWxsLFxuICAgICAgICBjb2x1bW46IG51bGwsXG4gICAgICAgIGxhc3RDb2x1bW46IG51bGxcbiAgICAgIH07XG4gICAgfVxuICAgIHNvdXJjZSA9IHRoaXMuX3NvdXJjZXMuaW5kZXhPZihzb3VyY2UpO1xuXG4gICAgdmFyIG5lZWRsZSA9IHtcbiAgICAgIHNvdXJjZTogc291cmNlLFxuICAgICAgb3JpZ2luYWxMaW5lOiB1dGlsLmdldEFyZyhhQXJncywgJ2xpbmUnKSxcbiAgICAgIG9yaWdpbmFsQ29sdW1uOiB1dGlsLmdldEFyZyhhQXJncywgJ2NvbHVtbicpXG4gICAgfTtcblxuICAgIHZhciBpbmRleCA9IHRoaXMuX2ZpbmRNYXBwaW5nKFxuICAgICAgbmVlZGxlLFxuICAgICAgdGhpcy5fb3JpZ2luYWxNYXBwaW5ncyxcbiAgICAgIFwib3JpZ2luYWxMaW5lXCIsXG4gICAgICBcIm9yaWdpbmFsQ29sdW1uXCIsXG4gICAgICB1dGlsLmNvbXBhcmVCeU9yaWdpbmFsUG9zaXRpb25zLFxuICAgICAgdXRpbC5nZXRBcmcoYUFyZ3MsICdiaWFzJywgU291cmNlTWFwQ29uc3VtZXIuR1JFQVRFU1RfTE9XRVJfQk9VTkQpXG4gICAgKTtcblxuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICB2YXIgbWFwcGluZyA9IHRoaXMuX29yaWdpbmFsTWFwcGluZ3NbaW5kZXhdO1xuXG4gICAgICBpZiAobWFwcGluZy5zb3VyY2UgPT09IG5lZWRsZS5zb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsaW5lOiB1dGlsLmdldEFyZyhtYXBwaW5nLCAnZ2VuZXJhdGVkTGluZScsIG51bGwpLFxuICAgICAgICAgIGNvbHVtbjogdXRpbC5nZXRBcmcobWFwcGluZywgJ2dlbmVyYXRlZENvbHVtbicsIG51bGwpLFxuICAgICAgICAgIGxhc3RDb2x1bW46IHV0aWwuZ2V0QXJnKG1hcHBpbmcsICdsYXN0R2VuZXJhdGVkQ29sdW1uJywgbnVsbClcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGluZTogbnVsbCxcbiAgICAgIGNvbHVtbjogbnVsbCxcbiAgICAgIGxhc3RDb2x1bW46IG51bGxcbiAgICB9O1xuICB9O1xuXG5leHBvcnRzLkJhc2ljU291cmNlTWFwQ29uc3VtZXIgPSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyO1xuXG4vKipcbiAqIEFuIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lciBpbnN0YW5jZSByZXByZXNlbnRzIGEgcGFyc2VkIHNvdXJjZSBtYXAgd2hpY2hcbiAqIHdlIGNhbiBxdWVyeSBmb3IgaW5mb3JtYXRpb24uIEl0IGRpZmZlcnMgZnJvbSBCYXNpY1NvdXJjZU1hcENvbnN1bWVyIGluXG4gKiB0aGF0IGl0IHRha2VzIFwiaW5kZXhlZFwiIHNvdXJjZSBtYXBzIChpLmUuIG9uZXMgd2l0aCBhIFwic2VjdGlvbnNcIiBmaWVsZCkgYXNcbiAqIGlucHV0LlxuICpcbiAqIFRoZSBvbmx5IHBhcmFtZXRlciBpcyBhIHJhdyBzb3VyY2UgbWFwIChlaXRoZXIgYXMgYSBKU09OIHN0cmluZywgb3IgYWxyZWFkeVxuICogcGFyc2VkIHRvIGFuIG9iamVjdCkuIEFjY29yZGluZyB0byB0aGUgc3BlYyBmb3IgaW5kZXhlZCBzb3VyY2UgbWFwcywgdGhleVxuICogaGF2ZSB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG4gKlxuICogICAtIHZlcnNpb246IFdoaWNoIHZlcnNpb24gb2YgdGhlIHNvdXJjZSBtYXAgc3BlYyB0aGlzIG1hcCBpcyBmb2xsb3dpbmcuXG4gKiAgIC0gZmlsZTogT3B0aW9uYWwuIFRoZSBnZW5lcmF0ZWQgZmlsZSB0aGlzIHNvdXJjZSBtYXAgaXMgYXNzb2NpYXRlZCB3aXRoLlxuICogICAtIHNlY3Rpb25zOiBBIGxpc3Qgb2Ygc2VjdGlvbiBkZWZpbml0aW9ucy5cbiAqXG4gKiBFYWNoIHZhbHVlIHVuZGVyIHRoZSBcInNlY3Rpb25zXCIgZmllbGQgaGFzIHR3byBmaWVsZHM6XG4gKiAgIC0gb2Zmc2V0OiBUaGUgb2Zmc2V0IGludG8gdGhlIG9yaWdpbmFsIHNwZWNpZmllZCBhdCB3aGljaCB0aGlzIHNlY3Rpb25cbiAqICAgICAgIGJlZ2lucyB0byBhcHBseSwgZGVmaW5lZCBhcyBhbiBvYmplY3Qgd2l0aCBhIFwibGluZVwiIGFuZCBcImNvbHVtblwiXG4gKiAgICAgICBmaWVsZC5cbiAqICAgLSBtYXA6IEEgc291cmNlIG1hcCBkZWZpbml0aW9uLiBUaGlzIHNvdXJjZSBtYXAgY291bGQgYWxzbyBiZSBpbmRleGVkLFxuICogICAgICAgYnV0IGRvZXNuJ3QgaGF2ZSB0byBiZS5cbiAqXG4gKiBJbnN0ZWFkIG9mIHRoZSBcIm1hcFwiIGZpZWxkLCBpdCdzIGFsc28gcG9zc2libGUgdG8gaGF2ZSBhIFwidXJsXCIgZmllbGRcbiAqIHNwZWNpZnlpbmcgYSBVUkwgdG8gcmV0cmlldmUgYSBzb3VyY2UgbWFwIGZyb20sIGJ1dCB0aGF0J3MgY3VycmVudGx5XG4gKiB1bnN1cHBvcnRlZC5cbiAqXG4gKiBIZXJlJ3MgYW4gZXhhbXBsZSBzb3VyY2UgbWFwLCB0YWtlbiBmcm9tIHRoZSBzb3VyY2UgbWFwIHNwZWNbMF0sIGJ1dFxuICogbW9kaWZpZWQgdG8gb21pdCBhIHNlY3Rpb24gd2hpY2ggdXNlcyB0aGUgXCJ1cmxcIiBmaWVsZC5cbiAqXG4gKiAge1xuICogICAgdmVyc2lvbiA6IDMsXG4gKiAgICBmaWxlOiBcImFwcC5qc1wiLFxuICogICAgc2VjdGlvbnM6IFt7XG4gKiAgICAgIG9mZnNldDoge2xpbmU6MTAwLCBjb2x1bW46MTB9LFxuICogICAgICBtYXA6IHtcbiAqICAgICAgICB2ZXJzaW9uIDogMyxcbiAqICAgICAgICBmaWxlOiBcInNlY3Rpb24uanNcIixcbiAqICAgICAgICBzb3VyY2VzOiBbXCJmb28uanNcIiwgXCJiYXIuanNcIl0sXG4gKiAgICAgICAgbmFtZXM6IFtcInNyY1wiLCBcIm1hcHNcIiwgXCJhcmVcIiwgXCJmdW5cIl0sXG4gKiAgICAgICAgbWFwcGluZ3M6IFwiQUFBQSxFOztBQkNERTtcIlxuICogICAgICB9XG4gKiAgICB9XSxcbiAqICB9XG4gKlxuICogWzBdOiBodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9kb2N1bWVudC9kLzFVMVJHQWVoUXdSeXBVVG92RjFLUmxwaU9GemUwYi1fMmdjNmZBSDBLWTBrL2VkaXQjaGVhZGluZz1oLjUzNWVzM3hlcHJndFxuICovXG5mdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXIoYVNvdXJjZU1hcCkge1xuICB2YXIgc291cmNlTWFwID0gYVNvdXJjZU1hcDtcbiAgaWYgKHR5cGVvZiBhU291cmNlTWFwID09PSAnc3RyaW5nJykge1xuICAgIHNvdXJjZU1hcCA9IEpTT04ucGFyc2UoYVNvdXJjZU1hcC5yZXBsYWNlKC9eXFwpXFxdXFx9Jy8sICcnKSk7XG4gIH1cblxuICB2YXIgdmVyc2lvbiA9IHV0aWwuZ2V0QXJnKHNvdXJjZU1hcCwgJ3ZlcnNpb24nKTtcbiAgdmFyIHNlY3Rpb25zID0gdXRpbC5nZXRBcmcoc291cmNlTWFwLCAnc2VjdGlvbnMnKTtcblxuICBpZiAodmVyc2lvbiAhPSB0aGlzLl92ZXJzaW9uKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCB2ZXJzaW9uOiAnICsgdmVyc2lvbik7XG4gIH1cblxuICB0aGlzLl9zb3VyY2VzID0gbmV3IEFycmF5U2V0KCk7XG4gIHRoaXMuX25hbWVzID0gbmV3IEFycmF5U2V0KCk7XG5cbiAgdmFyIGxhc3RPZmZzZXQgPSB7XG4gICAgbGluZTogLTEsXG4gICAgY29sdW1uOiAwXG4gIH07XG4gIHRoaXMuX3NlY3Rpb25zID0gc2VjdGlvbnMubWFwKGZ1bmN0aW9uIChzKSB7XG4gICAgaWYgKHMudXJsKSB7XG4gICAgICAvLyBUaGUgdXJsIGZpZWxkIHdpbGwgcmVxdWlyZSBzdXBwb3J0IGZvciBhc3luY2hyb25pY2l0eS5cbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9zb3VyY2UtbWFwL2lzc3Vlcy8xNlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdXBwb3J0IGZvciB1cmwgZmllbGQgaW4gc2VjdGlvbnMgbm90IGltcGxlbWVudGVkLicpO1xuICAgIH1cbiAgICB2YXIgb2Zmc2V0ID0gdXRpbC5nZXRBcmcocywgJ29mZnNldCcpO1xuICAgIHZhciBvZmZzZXRMaW5lID0gdXRpbC5nZXRBcmcob2Zmc2V0LCAnbGluZScpO1xuICAgIHZhciBvZmZzZXRDb2x1bW4gPSB1dGlsLmdldEFyZyhvZmZzZXQsICdjb2x1bW4nKTtcblxuICAgIGlmIChvZmZzZXRMaW5lIDwgbGFzdE9mZnNldC5saW5lIHx8XG4gICAgICAgIChvZmZzZXRMaW5lID09PSBsYXN0T2Zmc2V0LmxpbmUgJiYgb2Zmc2V0Q29sdW1uIDwgbGFzdE9mZnNldC5jb2x1bW4pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NlY3Rpb24gb2Zmc2V0cyBtdXN0IGJlIG9yZGVyZWQgYW5kIG5vbi1vdmVybGFwcGluZy4nKTtcbiAgICB9XG4gICAgbGFzdE9mZnNldCA9IG9mZnNldDtcblxuICAgIHJldHVybiB7XG4gICAgICBnZW5lcmF0ZWRPZmZzZXQ6IHtcbiAgICAgICAgLy8gVGhlIG9mZnNldCBmaWVsZHMgYXJlIDAtYmFzZWQsIGJ1dCB3ZSB1c2UgMS1iYXNlZCBpbmRpY2VzIHdoZW5cbiAgICAgICAgLy8gZW5jb2RpbmcvZGVjb2RpbmcgZnJvbSBWTFEuXG4gICAgICAgIGdlbmVyYXRlZExpbmU6IG9mZnNldExpbmUgKyAxLFxuICAgICAgICBnZW5lcmF0ZWRDb2x1bW46IG9mZnNldENvbHVtbiArIDFcbiAgICAgIH0sXG4gICAgICBjb25zdW1lcjogbmV3IFNvdXJjZU1hcENvbnN1bWVyKHV0aWwuZ2V0QXJnKHMsICdtYXAnKSlcbiAgICB9XG4gIH0pO1xufVxuXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUpO1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNvdXJjZU1hcENvbnN1bWVyO1xuXG4vKipcbiAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBzb3VyY2UgbWFwcGluZyBzcGVjIHRoYXQgd2UgYXJlIGNvbnN1bWluZy5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5fdmVyc2lvbiA9IDM7XG5cbi8qKlxuICogVGhlIGxpc3Qgb2Ygb3JpZ2luYWwgc291cmNlcy5cbiAqL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUsICdzb3VyY2VzJywge1xuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc291cmNlcyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fc2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5fc2VjdGlvbnNbaV0uY29uc3VtZXIuc291cmNlcy5sZW5ndGg7IGorKykge1xuICAgICAgICBzb3VyY2VzLnB1c2godGhpcy5fc2VjdGlvbnNbaV0uY29uc3VtZXIuc291cmNlc1tqXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzb3VyY2VzO1xuICB9XG59KTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBzb3VyY2UsIGxpbmUsIGFuZCBjb2x1bW4gaW5mb3JtYXRpb24gZm9yIHRoZSBnZW5lcmF0ZWRcbiAqIHNvdXJjZSdzIGxpbmUgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdFxuICogd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZS5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIG9yaWdpbmFsIHNvdXJjZSBmaWxlLCBvciBudWxsLlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLCBvciBudWxsLlxuICogICAtIGNvbHVtbjogVGhlIGNvbHVtbiBudW1iZXIgaW4gdGhlIG9yaWdpbmFsIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBuYW1lOiBUaGUgb3JpZ2luYWwgaWRlbnRpZmllciwgb3IgbnVsbC5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5vcmlnaW5hbFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX29yaWdpbmFsUG9zaXRpb25Gb3IoYUFyZ3MpIHtcbiAgICB2YXIgbmVlZGxlID0ge1xuICAgICAgZ2VuZXJhdGVkTGluZTogdXRpbC5nZXRBcmcoYUFyZ3MsICdsaW5lJyksXG4gICAgICBnZW5lcmF0ZWRDb2x1bW46IHV0aWwuZ2V0QXJnKGFBcmdzLCAnY29sdW1uJylcbiAgICB9O1xuXG4gICAgLy8gRmluZCB0aGUgc2VjdGlvbiBjb250YWluaW5nIHRoZSBnZW5lcmF0ZWQgcG9zaXRpb24gd2UncmUgdHJ5aW5nIHRvIG1hcFxuICAgIC8vIHRvIGFuIG9yaWdpbmFsIHBvc2l0aW9uLlxuICAgIHZhciBzZWN0aW9uSW5kZXggPSBiaW5hcnlTZWFyY2guc2VhcmNoKG5lZWRsZSwgdGhpcy5fc2VjdGlvbnMsXG4gICAgICBmdW5jdGlvbihuZWVkbGUsIHNlY3Rpb24pIHtcbiAgICAgICAgdmFyIGNtcCA9IG5lZWRsZS5nZW5lcmF0ZWRMaW5lIC0gc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZTtcbiAgICAgICAgaWYgKGNtcCkge1xuICAgICAgICAgIHJldHVybiBjbXA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKG5lZWRsZS5nZW5lcmF0ZWRDb2x1bW4gLVxuICAgICAgICAgICAgICAgIHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbik7XG4gICAgICB9KTtcbiAgICB2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb25zW3NlY3Rpb25JbmRleF07XG5cbiAgICBpZiAoIXNlY3Rpb24pIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNvdXJjZTogbnVsbCxcbiAgICAgICAgbGluZTogbnVsbCxcbiAgICAgICAgY29sdW1uOiBudWxsLFxuICAgICAgICBuYW1lOiBudWxsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBzZWN0aW9uLmNvbnN1bWVyLm9yaWdpbmFsUG9zaXRpb25Gb3Ioe1xuICAgICAgbGluZTogbmVlZGxlLmdlbmVyYXRlZExpbmUgLVxuICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSAtIDEpLFxuICAgICAgY29sdW1uOiBuZWVkbGUuZ2VuZXJhdGVkQ29sdW1uIC1cbiAgICAgICAgKHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZExpbmUgPT09IG5lZWRsZS5nZW5lcmF0ZWRMaW5lXG4gICAgICAgICA/IHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbiAtIDFcbiAgICAgICAgIDogMCksXG4gICAgICBiaWFzOiBhQXJncy5iaWFzXG4gICAgfSk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJuIHRydWUgaWYgd2UgaGF2ZSB0aGUgc291cmNlIGNvbnRlbnQgZm9yIGV2ZXJ5IHNvdXJjZSBpbiB0aGUgc291cmNlXG4gKiBtYXAsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyLnByb3RvdHlwZS5oYXNDb250ZW50c09mQWxsU291cmNlcyA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9oYXNDb250ZW50c09mQWxsU291cmNlcygpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VjdGlvbnMuZXZlcnkoZnVuY3Rpb24gKHMpIHtcbiAgICAgIHJldHVybiBzLmNvbnN1bWVyLmhhc0NvbnRlbnRzT2ZBbGxTb3VyY2VzKCk7XG4gICAgfSk7XG4gIH07XG5cbi8qKlxuICogUmV0dXJucyB0aGUgb3JpZ2luYWwgc291cmNlIGNvbnRlbnQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIHRoZSB1cmwgb2YgdGhlXG4gKiBvcmlnaW5hbCBzb3VyY2UgZmlsZS4gUmV0dXJucyBudWxsIGlmIG5vIG9yaWdpbmFsIHNvdXJjZSBjb250ZW50IGlzXG4gKiBhdmFpbGFibGUuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuc291cmNlQ29udGVudEZvciA9XG4gIGZ1bmN0aW9uIEluZGV4ZWRTb3VyY2VNYXBDb25zdW1lcl9zb3VyY2VDb250ZW50Rm9yKGFTb3VyY2UsIG51bGxPbk1pc3NpbmcpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3NlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb25zW2ldO1xuXG4gICAgICB2YXIgY29udGVudCA9IHNlY3Rpb24uY29uc3VtZXIuc291cmNlQ29udGVudEZvcihhU291cmNlLCB0cnVlKTtcbiAgICAgIGlmIChjb250ZW50KSB7XG4gICAgICAgIHJldHVybiBjb250ZW50O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAobnVsbE9uTWlzc2luZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdcIicgKyBhU291cmNlICsgJ1wiIGlzIG5vdCBpbiB0aGUgU291cmNlTWFwLicpO1xuICAgIH1cbiAgfTtcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBnZW5lcmF0ZWQgbGluZSBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvciB0aGUgb3JpZ2luYWwgc291cmNlLFxuICogbGluZSwgYW5kIGNvbHVtbiBwb3NpdGlvbnMgcHJvdmlkZWQuIFRoZSBvbmx5IGFyZ3VtZW50IGlzIGFuIG9iamVjdCB3aXRoXG4gKiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIHNvdXJjZTogVGhlIGZpbGVuYW1lIG9mIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gbGluZTogVGhlIGxpbmUgbnVtYmVyIGluIHRoZSBvcmlnaW5hbCBzb3VyY2UuXG4gKiAgIC0gY29sdW1uOiBUaGUgY29sdW1uIG51bWJlciBpbiB0aGUgb3JpZ2luYWwgc291cmNlLlxuICpcbiAqIGFuZCBhbiBvYmplY3QgaXMgcmV0dXJuZWQgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gKlxuICogICAtIGxpbmU6IFRoZSBsaW5lIG51bWJlciBpbiB0aGUgZ2VuZXJhdGVkIHNvdXJjZSwgb3IgbnVsbC5cbiAqICAgLSBjb2x1bW46IFRoZSBjb2x1bW4gbnVtYmVyIGluIHRoZSBnZW5lcmF0ZWQgc291cmNlLCBvciBudWxsLlxuICovXG5JbmRleGVkU291cmNlTWFwQ29uc3VtZXIucHJvdG90eXBlLmdlbmVyYXRlZFBvc2l0aW9uRm9yID1cbiAgZnVuY3Rpb24gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyX2dlbmVyYXRlZFBvc2l0aW9uRm9yKGFBcmdzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNlY3Rpb24gPSB0aGlzLl9zZWN0aW9uc1tpXTtcblxuICAgICAgLy8gT25seSBjb25zaWRlciB0aGlzIHNlY3Rpb24gaWYgdGhlIHJlcXVlc3RlZCBzb3VyY2UgaXMgaW4gdGhlIGxpc3Qgb2ZcbiAgICAgIC8vIHNvdXJjZXMgb2YgdGhlIGNvbnN1bWVyLlxuICAgICAgaWYgKHNlY3Rpb24uY29uc3VtZXIuc291cmNlcy5pbmRleE9mKHV0aWwuZ2V0QXJnKGFBcmdzLCAnc291cmNlJykpID09PSAtMSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHZhciBnZW5lcmF0ZWRQb3NpdGlvbiA9IHNlY3Rpb24uY29uc3VtZXIuZ2VuZXJhdGVkUG9zaXRpb25Gb3IoYUFyZ3MpO1xuICAgICAgaWYgKGdlbmVyYXRlZFBvc2l0aW9uKSB7XG4gICAgICAgIHZhciByZXQgPSB7XG4gICAgICAgICAgbGluZTogZ2VuZXJhdGVkUG9zaXRpb24ubGluZSArXG4gICAgICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSAtIDEpLFxuICAgICAgICAgIGNvbHVtbjogZ2VuZXJhdGVkUG9zaXRpb24uY29sdW1uICtcbiAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lID09PSBnZW5lcmF0ZWRQb3NpdGlvbi5saW5lXG4gICAgICAgICAgICAgPyBzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRDb2x1bW4gLSAxXG4gICAgICAgICAgICAgOiAwKVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBsaW5lOiBudWxsLFxuICAgICAgY29sdW1uOiBudWxsXG4gICAgfTtcbiAgfTtcblxuLyoqXG4gKiBQYXJzZSB0aGUgbWFwcGluZ3MgaW4gYSBzdHJpbmcgaW4gdG8gYSBkYXRhIHN0cnVjdHVyZSB3aGljaCB3ZSBjYW4gZWFzaWx5XG4gKiBxdWVyeSAodGhlIG9yZGVyZWQgYXJyYXlzIGluIHRoZSBgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzYCBhbmRcbiAqIGB0aGlzLl9fb3JpZ2luYWxNYXBwaW5nc2AgcHJvcGVydGllcykuXG4gKi9cbkluZGV4ZWRTb3VyY2VNYXBDb25zdW1lci5wcm90b3R5cGUuX3BhcnNlTWFwcGluZ3MgPVxuICBmdW5jdGlvbiBJbmRleGVkU291cmNlTWFwQ29uc3VtZXJfcGFyc2VNYXBwaW5ncyhhU3RyLCBhU291cmNlUm9vdCkge1xuICAgIHRoaXMuX19nZW5lcmF0ZWRNYXBwaW5ncyA9IFtdO1xuICAgIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLl9zZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNlY3Rpb24gPSB0aGlzLl9zZWN0aW9uc1tpXTtcbiAgICAgIHZhciBzZWN0aW9uTWFwcGluZ3MgPSBzZWN0aW9uLmNvbnN1bWVyLl9nZW5lcmF0ZWRNYXBwaW5ncztcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc2VjdGlvbk1hcHBpbmdzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciBtYXBwaW5nID0gc2VjdGlvbk1hcHBpbmdzW2pdO1xuXG4gICAgICAgIHZhciBzb3VyY2UgPSBzZWN0aW9uLmNvbnN1bWVyLl9zb3VyY2VzLmF0KG1hcHBpbmcuc291cmNlKTtcbiAgICAgICAgaWYgKHNlY3Rpb24uY29uc3VtZXIuc291cmNlUm9vdCAhPT0gbnVsbCkge1xuICAgICAgICAgIHNvdXJjZSA9IHV0aWwuam9pbihzZWN0aW9uLmNvbnN1bWVyLnNvdXJjZVJvb3QsIHNvdXJjZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc291cmNlcy5hZGQoc291cmNlKTtcbiAgICAgICAgc291cmNlID0gdGhpcy5fc291cmNlcy5pbmRleE9mKHNvdXJjZSk7XG5cbiAgICAgICAgdmFyIG5hbWUgPSBzZWN0aW9uLmNvbnN1bWVyLl9uYW1lcy5hdChtYXBwaW5nLm5hbWUpO1xuICAgICAgICB0aGlzLl9uYW1lcy5hZGQobmFtZSk7XG4gICAgICAgIG5hbWUgPSB0aGlzLl9uYW1lcy5pbmRleE9mKG5hbWUpO1xuXG4gICAgICAgIC8vIFRoZSBtYXBwaW5ncyBjb21pbmcgZnJvbSB0aGUgY29uc3VtZXIgZm9yIHRoZSBzZWN0aW9uIGhhdmVcbiAgICAgICAgLy8gZ2VuZXJhdGVkIHBvc2l0aW9ucyByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIHNlY3Rpb24sIHNvIHdlXG4gICAgICAgIC8vIG5lZWQgdG8gb2Zmc2V0IHRoZW0gdG8gYmUgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBjb25jYXRlbmF0ZWRcbiAgICAgICAgLy8gZ2VuZXJhdGVkIGZpbGUuXG4gICAgICAgIHZhciBhZGp1c3RlZE1hcHBpbmcgPSB7XG4gICAgICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgICAgICAgZ2VuZXJhdGVkTGluZTogbWFwcGluZy5nZW5lcmF0ZWRMaW5lICtcbiAgICAgICAgICAgIChzZWN0aW9uLmdlbmVyYXRlZE9mZnNldC5nZW5lcmF0ZWRMaW5lIC0gMSksXG4gICAgICAgICAgZ2VuZXJhdGVkQ29sdW1uOiBtYXBwaW5nLmdlbmVyYXRlZENvbHVtbiArXG4gICAgICAgICAgICAoc2VjdGlvbi5nZW5lcmF0ZWRPZmZzZXQuZ2VuZXJhdGVkTGluZSA9PT0gbWFwcGluZy5nZW5lcmF0ZWRMaW5lXG4gICAgICAgICAgICA/IHNlY3Rpb24uZ2VuZXJhdGVkT2Zmc2V0LmdlbmVyYXRlZENvbHVtbiAtIDFcbiAgICAgICAgICAgIDogMCksXG4gICAgICAgICAgb3JpZ2luYWxMaW5lOiBtYXBwaW5nLm9yaWdpbmFsTGluZSxcbiAgICAgICAgICBvcmlnaW5hbENvbHVtbjogbWFwcGluZy5vcmlnaW5hbENvbHVtbixcbiAgICAgICAgICBuYW1lOiBuYW1lXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5fX2dlbmVyYXRlZE1hcHBpbmdzLnB1c2goYWRqdXN0ZWRNYXBwaW5nKTtcbiAgICAgICAgaWYgKHR5cGVvZiBhZGp1c3RlZE1hcHBpbmcub3JpZ2luYWxMaW5lID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIHRoaXMuX19vcmlnaW5hbE1hcHBpbmdzLnB1c2goYWRqdXN0ZWRNYXBwaW5nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHF1aWNrU29ydCh0aGlzLl9fZ2VuZXJhdGVkTWFwcGluZ3MsIHV0aWwuY29tcGFyZUJ5R2VuZXJhdGVkUG9zaXRpb25zRGVmbGF0ZWQpO1xuICAgIHF1aWNrU29ydCh0aGlzLl9fb3JpZ2luYWxNYXBwaW5ncywgdXRpbC5jb21wYXJlQnlPcmlnaW5hbFBvc2l0aW9ucyk7XG4gIH07XG5cbmV4cG9ydHMuSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyID0gSW5kZXhlZFNvdXJjZU1hcENvbnN1bWVyO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9saWIvc291cmNlLW1hcC1jb25zdW1lci5qc1xuLy8gbW9kdWxlIGlkID0gN1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbmV4cG9ydHMuR1JFQVRFU1RfTE9XRVJfQk9VTkQgPSAxO1xuZXhwb3J0cy5MRUFTVF9VUFBFUl9CT1VORCA9IDI7XG5cbi8qKlxuICogUmVjdXJzaXZlIGltcGxlbWVudGF0aW9uIG9mIGJpbmFyeSBzZWFyY2guXG4gKlxuICogQHBhcmFtIGFMb3cgSW5kaWNlcyBoZXJlIGFuZCBsb3dlciBkbyBub3QgY29udGFpbiB0aGUgbmVlZGxlLlxuICogQHBhcmFtIGFIaWdoIEluZGljZXMgaGVyZSBhbmQgaGlnaGVyIGRvIG5vdCBjb250YWluIHRoZSBuZWVkbGUuXG4gKiBAcGFyYW0gYU5lZWRsZSBUaGUgZWxlbWVudCBiZWluZyBzZWFyY2hlZCBmb3IuXG4gKiBAcGFyYW0gYUhheXN0YWNrIFRoZSBub24tZW1wdHkgYXJyYXkgYmVpbmcgc2VhcmNoZWQuXG4gKiBAcGFyYW0gYUNvbXBhcmUgRnVuY3Rpb24gd2hpY2ggdGFrZXMgdHdvIGVsZW1lbnRzIGFuZCByZXR1cm5zIC0xLCAwLCBvciAxLlxuICogQHBhcmFtIGFCaWFzIEVpdGhlciAnYmluYXJ5U2VhcmNoLkdSRUFURVNUX0xPV0VSX0JPVU5EJyBvclxuICogICAgICdiaW5hcnlTZWFyY2guTEVBU1RfVVBQRVJfQk9VTkQnLiBTcGVjaWZpZXMgd2hldGhlciB0byByZXR1cm4gdGhlXG4gKiAgICAgY2xvc2VzdCBlbGVtZW50IHRoYXQgaXMgc21hbGxlciB0aGFuIG9yIGdyZWF0ZXIgdGhhbiB0aGUgb25lIHdlIGFyZVxuICogICAgIHNlYXJjaGluZyBmb3IsIHJlc3BlY3RpdmVseSwgaWYgdGhlIGV4YWN0IGVsZW1lbnQgY2Fubm90IGJlIGZvdW5kLlxuICovXG5mdW5jdGlvbiByZWN1cnNpdmVTZWFyY2goYUxvdywgYUhpZ2gsIGFOZWVkbGUsIGFIYXlzdGFjaywgYUNvbXBhcmUsIGFCaWFzKSB7XG4gIC8vIFRoaXMgZnVuY3Rpb24gdGVybWluYXRlcyB3aGVuIG9uZSBvZiB0aGUgZm9sbG93aW5nIGlzIHRydWU6XG4gIC8vXG4gIC8vICAgMS4gV2UgZmluZCB0aGUgZXhhY3QgZWxlbWVudCB3ZSBhcmUgbG9va2luZyBmb3IuXG4gIC8vXG4gIC8vICAgMi4gV2UgZGlkIG5vdCBmaW5kIHRoZSBleGFjdCBlbGVtZW50LCBidXQgd2UgY2FuIHJldHVybiB0aGUgaW5kZXggb2ZcbiAgLy8gICAgICB0aGUgbmV4dC1jbG9zZXN0IGVsZW1lbnQuXG4gIC8vXG4gIC8vICAgMy4gV2UgZGlkIG5vdCBmaW5kIHRoZSBleGFjdCBlbGVtZW50LCBhbmQgdGhlcmUgaXMgbm8gbmV4dC1jbG9zZXN0XG4gIC8vICAgICAgZWxlbWVudCB0aGFuIHRoZSBvbmUgd2UgYXJlIHNlYXJjaGluZyBmb3IsIHNvIHdlIHJldHVybiAtMS5cbiAgdmFyIG1pZCA9IE1hdGguZmxvb3IoKGFIaWdoIC0gYUxvdykgLyAyKSArIGFMb3c7XG4gIHZhciBjbXAgPSBhQ29tcGFyZShhTmVlZGxlLCBhSGF5c3RhY2tbbWlkXSwgdHJ1ZSk7XG4gIGlmIChjbXAgPT09IDApIHtcbiAgICAvLyBGb3VuZCB0aGUgZWxlbWVudCB3ZSBhcmUgbG9va2luZyBmb3IuXG4gICAgcmV0dXJuIG1pZDtcbiAgfVxuICBlbHNlIGlmIChjbXAgPiAwKSB7XG4gICAgLy8gT3VyIG5lZWRsZSBpcyBncmVhdGVyIHRoYW4gYUhheXN0YWNrW21pZF0uXG4gICAgaWYgKGFIaWdoIC0gbWlkID4gMSkge1xuICAgICAgLy8gVGhlIGVsZW1lbnQgaXMgaW4gdGhlIHVwcGVyIGhhbGYuXG4gICAgICByZXR1cm4gcmVjdXJzaXZlU2VhcmNoKG1pZCwgYUhpZ2gsIGFOZWVkbGUsIGFIYXlzdGFjaywgYUNvbXBhcmUsIGFCaWFzKTtcbiAgICB9XG5cbiAgICAvLyBUaGUgZXhhY3QgbmVlZGxlIGVsZW1lbnQgd2FzIG5vdCBmb3VuZCBpbiB0aGlzIGhheXN0YWNrLiBEZXRlcm1pbmUgaWZcbiAgICAvLyB3ZSBhcmUgaW4gdGVybWluYXRpb24gY2FzZSAoMykgb3IgKDIpIGFuZCByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIHRoaW5nLlxuICAgIGlmIChhQmlhcyA9PSBleHBvcnRzLkxFQVNUX1VQUEVSX0JPVU5EKSB7XG4gICAgICByZXR1cm4gYUhpZ2ggPCBhSGF5c3RhY2subGVuZ3RoID8gYUhpZ2ggOiAtMTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG1pZDtcbiAgICB9XG4gIH1cbiAgZWxzZSB7XG4gICAgLy8gT3VyIG5lZWRsZSBpcyBsZXNzIHRoYW4gYUhheXN0YWNrW21pZF0uXG4gICAgaWYgKG1pZCAtIGFMb3cgPiAxKSB7XG4gICAgICAvLyBUaGUgZWxlbWVudCBpcyBpbiB0aGUgbG93ZXIgaGFsZi5cbiAgICAgIHJldHVybiByZWN1cnNpdmVTZWFyY2goYUxvdywgbWlkLCBhTmVlZGxlLCBhSGF5c3RhY2ssIGFDb21wYXJlLCBhQmlhcyk7XG4gICAgfVxuXG4gICAgLy8gd2UgYXJlIGluIHRlcm1pbmF0aW9uIGNhc2UgKDMpIG9yICgyKSBhbmQgcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSB0aGluZy5cbiAgICBpZiAoYUJpYXMgPT0gZXhwb3J0cy5MRUFTVF9VUFBFUl9CT1VORCkge1xuICAgICAgcmV0dXJuIG1pZDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGFMb3cgPCAwID8gLTEgOiBhTG93O1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgYmluYXJ5IHNlYXJjaCB3aGljaCB3aWxsIGFsd2F5cyB0cnkgYW5kIHJldHVyblxuICogdGhlIGluZGV4IG9mIHRoZSBjbG9zZXN0IGVsZW1lbnQgaWYgdGhlcmUgaXMgbm8gZXhhY3QgaGl0LiBUaGlzIGlzIGJlY2F1c2VcbiAqIG1hcHBpbmdzIGJldHdlZW4gb3JpZ2luYWwgYW5kIGdlbmVyYXRlZCBsaW5lL2NvbCBwYWlycyBhcmUgc2luZ2xlIHBvaW50cyxcbiAqIGFuZCB0aGVyZSBpcyBhbiBpbXBsaWNpdCByZWdpb24gYmV0d2VlbiBlYWNoIG9mIHRoZW0sIHNvIGEgbWlzcyBqdXN0IG1lYW5zXG4gKiB0aGF0IHlvdSBhcmVuJ3Qgb24gdGhlIHZlcnkgc3RhcnQgb2YgYSByZWdpb24uXG4gKlxuICogQHBhcmFtIGFOZWVkbGUgVGhlIGVsZW1lbnQgeW91IGFyZSBsb29raW5nIGZvci5cbiAqIEBwYXJhbSBhSGF5c3RhY2sgVGhlIGFycmF5IHRoYXQgaXMgYmVpbmcgc2VhcmNoZWQuXG4gKiBAcGFyYW0gYUNvbXBhcmUgQSBmdW5jdGlvbiB3aGljaCB0YWtlcyB0aGUgbmVlZGxlIGFuZCBhbiBlbGVtZW50IGluIHRoZVxuICogICAgIGFycmF5IGFuZCByZXR1cm5zIC0xLCAwLCBvciAxIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBuZWVkbGUgaXMgbGVzc1xuICogICAgIHRoYW4sIGVxdWFsIHRvLCBvciBncmVhdGVyIHRoYW4gdGhlIGVsZW1lbnQsIHJlc3BlY3RpdmVseS5cbiAqIEBwYXJhbSBhQmlhcyBFaXRoZXIgJ2JpbmFyeVNlYXJjaC5HUkVBVEVTVF9MT1dFUl9CT1VORCcgb3JcbiAqICAgICAnYmluYXJ5U2VhcmNoLkxFQVNUX1VQUEVSX0JPVU5EJy4gU3BlY2lmaWVzIHdoZXRoZXIgdG8gcmV0dXJuIHRoZVxuICogICAgIGNsb3Nlc3QgZWxlbWVudCB0aGF0IGlzIHNtYWxsZXIgdGhhbiBvciBncmVhdGVyIHRoYW4gdGhlIG9uZSB3ZSBhcmVcbiAqICAgICBzZWFyY2hpbmcgZm9yLCByZXNwZWN0aXZlbHksIGlmIHRoZSBleGFjdCBlbGVtZW50IGNhbm5vdCBiZSBmb3VuZC5cbiAqICAgICBEZWZhdWx0cyB0byAnYmluYXJ5U2VhcmNoLkdSRUFURVNUX0xPV0VSX0JPVU5EJy5cbiAqL1xuZXhwb3J0cy5zZWFyY2ggPSBmdW5jdGlvbiBzZWFyY2goYU5lZWRsZSwgYUhheXN0YWNrLCBhQ29tcGFyZSwgYUJpYXMpIHtcbiAgaWYgKGFIYXlzdGFjay5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICB2YXIgaW5kZXggPSByZWN1cnNpdmVTZWFyY2goLTEsIGFIYXlzdGFjay5sZW5ndGgsIGFOZWVkbGUsIGFIYXlzdGFjayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFDb21wYXJlLCBhQmlhcyB8fCBleHBvcnRzLkdSRUFURVNUX0xPV0VSX0JPVU5EKTtcbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIC8vIFdlIGhhdmUgZm91bmQgZWl0aGVyIHRoZSBleGFjdCBlbGVtZW50LCBvciB0aGUgbmV4dC1jbG9zZXN0IGVsZW1lbnQgdGhhblxuICAvLyB0aGUgb25lIHdlIGFyZSBzZWFyY2hpbmcgZm9yLiBIb3dldmVyLCB0aGVyZSBtYXkgYmUgbW9yZSB0aGFuIG9uZSBzdWNoXG4gIC8vIGVsZW1lbnQuIE1ha2Ugc3VyZSB3ZSBhbHdheXMgcmV0dXJuIHRoZSBzbWFsbGVzdCBvZiB0aGVzZS5cbiAgd2hpbGUgKGluZGV4IC0gMSA+PSAwKSB7XG4gICAgaWYgKGFDb21wYXJlKGFIYXlzdGFja1tpbmRleF0sIGFIYXlzdGFja1tpbmRleCAtIDFdLCB0cnVlKSAhPT0gMCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIC0taW5kZXg7XG4gIH1cblxuICByZXR1cm4gaW5kZXg7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9saWIvYmluYXJ5LXNlYXJjaC5qc1xuLy8gbW9kdWxlIGlkID0gOFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbi8vIEl0IHR1cm5zIG91dCB0aGF0IHNvbWUgKG1vc3Q/KSBKYXZhU2NyaXB0IGVuZ2luZXMgZG9uJ3Qgc2VsZi1ob3N0XG4vLyBgQXJyYXkucHJvdG90eXBlLnNvcnRgLiBUaGlzIG1ha2VzIHNlbnNlIGJlY2F1c2UgQysrIHdpbGwgbGlrZWx5IHJlbWFpblxuLy8gZmFzdGVyIHRoYW4gSlMgd2hlbiBkb2luZyByYXcgQ1BVLWludGVuc2l2ZSBzb3J0aW5nLiBIb3dldmVyLCB3aGVuIHVzaW5nIGFcbi8vIGN1c3RvbSBjb21wYXJhdG9yIGZ1bmN0aW9uLCBjYWxsaW5nIGJhY2sgYW5kIGZvcnRoIGJldHdlZW4gdGhlIFZNJ3MgQysrIGFuZFxuLy8gSklUJ2QgSlMgaXMgcmF0aGVyIHNsb3cgKmFuZCogbG9zZXMgSklUIHR5cGUgaW5mb3JtYXRpb24sIHJlc3VsdGluZyBpblxuLy8gd29yc2UgZ2VuZXJhdGVkIGNvZGUgZm9yIHRoZSBjb21wYXJhdG9yIGZ1bmN0aW9uIHRoYW4gd291bGQgYmUgb3B0aW1hbC4gSW5cbi8vIGZhY3QsIHdoZW4gc29ydGluZyB3aXRoIGEgY29tcGFyYXRvciwgdGhlc2UgY29zdHMgb3V0d2VpZ2ggdGhlIGJlbmVmaXRzIG9mXG4vLyBzb3J0aW5nIGluIEMrKy4gQnkgdXNpbmcgb3VyIG93biBKUy1pbXBsZW1lbnRlZCBRdWljayBTb3J0IChiZWxvdyksIHdlIGdldFxuLy8gYSB+MzUwMG1zIG1lYW4gc3BlZWQtdXAgaW4gYGJlbmNoL2JlbmNoLmh0bWxgLlxuXG4vKipcbiAqIFN3YXAgdGhlIGVsZW1lbnRzIGluZGV4ZWQgYnkgYHhgIGFuZCBgeWAgaW4gdGhlIGFycmF5IGBhcnlgLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFyeVxuICogICAgICAgIFRoZSBhcnJheS5cbiAqIEBwYXJhbSB7TnVtYmVyfSB4XG4gKiAgICAgICAgVGhlIGluZGV4IG9mIHRoZSBmaXJzdCBpdGVtLlxuICogQHBhcmFtIHtOdW1iZXJ9IHlcbiAqICAgICAgICBUaGUgaW5kZXggb2YgdGhlIHNlY29uZCBpdGVtLlxuICovXG5mdW5jdGlvbiBzd2FwKGFyeSwgeCwgeSkge1xuICB2YXIgdGVtcCA9IGFyeVt4XTtcbiAgYXJ5W3hdID0gYXJ5W3ldO1xuICBhcnlbeV0gPSB0ZW1wO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSByYW5kb20gaW50ZWdlciB3aXRoaW4gdGhlIHJhbmdlIGBsb3cgLi4gaGlnaGAgaW5jbHVzaXZlLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBsb3dcbiAqICAgICAgICBUaGUgbG93ZXIgYm91bmQgb24gdGhlIHJhbmdlLlxuICogQHBhcmFtIHtOdW1iZXJ9IGhpZ2hcbiAqICAgICAgICBUaGUgdXBwZXIgYm91bmQgb24gdGhlIHJhbmdlLlxuICovXG5mdW5jdGlvbiByYW5kb21JbnRJblJhbmdlKGxvdywgaGlnaCkge1xuICByZXR1cm4gTWF0aC5yb3VuZChsb3cgKyAoTWF0aC5yYW5kb20oKSAqIChoaWdoIC0gbG93KSkpO1xufVxuXG4vKipcbiAqIFRoZSBRdWljayBTb3J0IGFsZ29yaXRobS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhcnlcbiAqICAgICAgICBBbiBhcnJheSB0byBzb3J0LlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY29tcGFyYXRvclxuICogICAgICAgIEZ1bmN0aW9uIHRvIHVzZSB0byBjb21wYXJlIHR3byBpdGVtcy5cbiAqIEBwYXJhbSB7TnVtYmVyfSBwXG4gKiAgICAgICAgU3RhcnQgaW5kZXggb2YgdGhlIGFycmF5XG4gKiBAcGFyYW0ge051bWJlcn0gclxuICogICAgICAgIEVuZCBpbmRleCBvZiB0aGUgYXJyYXlcbiAqL1xuZnVuY3Rpb24gZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBwLCByKSB7XG4gIC8vIElmIG91ciBsb3dlciBib3VuZCBpcyBsZXNzIHRoYW4gb3VyIHVwcGVyIGJvdW5kLCB3ZSAoMSkgcGFydGl0aW9uIHRoZVxuICAvLyBhcnJheSBpbnRvIHR3byBwaWVjZXMgYW5kICgyKSByZWN1cnNlIG9uIGVhY2ggaGFsZi4gSWYgaXQgaXMgbm90LCB0aGlzIGlzXG4gIC8vIHRoZSBlbXB0eSBhcnJheSBhbmQgb3VyIGJhc2UgY2FzZS5cblxuICBpZiAocCA8IHIpIHtcbiAgICAvLyAoMSkgUGFydGl0aW9uaW5nLlxuICAgIC8vXG4gICAgLy8gVGhlIHBhcnRpdGlvbmluZyBjaG9vc2VzIGEgcGl2b3QgYmV0d2VlbiBgcGAgYW5kIGByYCBhbmQgbW92ZXMgYWxsXG4gICAgLy8gZWxlbWVudHMgdGhhdCBhcmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBwaXZvdCB0byB0aGUgYmVmb3JlIGl0LCBhbmRcbiAgICAvLyBhbGwgdGhlIGVsZW1lbnRzIHRoYXQgYXJlIGdyZWF0ZXIgdGhhbiBpdCBhZnRlciBpdC4gVGhlIGVmZmVjdCBpcyB0aGF0XG4gICAgLy8gb25jZSBwYXJ0aXRpb24gaXMgZG9uZSwgdGhlIHBpdm90IGlzIGluIHRoZSBleGFjdCBwbGFjZSBpdCB3aWxsIGJlIHdoZW5cbiAgICAvLyB0aGUgYXJyYXkgaXMgcHV0IGluIHNvcnRlZCBvcmRlciwgYW5kIGl0IHdpbGwgbm90IG5lZWQgdG8gYmUgbW92ZWRcbiAgICAvLyBhZ2Fpbi4gVGhpcyBydW5zIGluIE8obikgdGltZS5cblxuICAgIC8vIEFsd2F5cyBjaG9vc2UgYSByYW5kb20gcGl2b3Qgc28gdGhhdCBhbiBpbnB1dCBhcnJheSB3aGljaCBpcyByZXZlcnNlXG4gICAgLy8gc29ydGVkIGRvZXMgbm90IGNhdXNlIE8obl4yKSBydW5uaW5nIHRpbWUuXG4gICAgdmFyIHBpdm90SW5kZXggPSByYW5kb21JbnRJblJhbmdlKHAsIHIpO1xuICAgIHZhciBpID0gcCAtIDE7XG5cbiAgICBzd2FwKGFyeSwgcGl2b3RJbmRleCwgcik7XG4gICAgdmFyIHBpdm90ID0gYXJ5W3JdO1xuXG4gICAgLy8gSW1tZWRpYXRlbHkgYWZ0ZXIgYGpgIGlzIGluY3JlbWVudGVkIGluIHRoaXMgbG9vcCwgdGhlIGZvbGxvd2luZyBob2xkXG4gICAgLy8gdHJ1ZTpcbiAgICAvL1xuICAgIC8vICAgKiBFdmVyeSBlbGVtZW50IGluIGBhcnlbcCAuLiBpXWAgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBwaXZvdC5cbiAgICAvL1xuICAgIC8vICAgKiBFdmVyeSBlbGVtZW50IGluIGBhcnlbaSsxIC4uIGotMV1gIGlzIGdyZWF0ZXIgdGhhbiB0aGUgcGl2b3QuXG4gICAgZm9yICh2YXIgaiA9IHA7IGogPCByOyBqKyspIHtcbiAgICAgIGlmIChjb21wYXJhdG9yKGFyeVtqXSwgcGl2b3QpIDw9IDApIHtcbiAgICAgICAgaSArPSAxO1xuICAgICAgICBzd2FwKGFyeSwgaSwgaik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dhcChhcnksIGkgKyAxLCBqKTtcbiAgICB2YXIgcSA9IGkgKyAxO1xuXG4gICAgLy8gKDIpIFJlY3Vyc2Ugb24gZWFjaCBoYWxmLlxuXG4gICAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBwLCBxIC0gMSk7XG4gICAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCBxICsgMSwgcik7XG4gIH1cbn1cblxuLyoqXG4gKiBTb3J0IHRoZSBnaXZlbiBhcnJheSBpbi1wbGFjZSB3aXRoIHRoZSBnaXZlbiBjb21wYXJhdG9yIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFyeVxuICogICAgICAgIEFuIGFycmF5IHRvIHNvcnQuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb21wYXJhdG9yXG4gKiAgICAgICAgRnVuY3Rpb24gdG8gdXNlIHRvIGNvbXBhcmUgdHdvIGl0ZW1zLlxuICovXG5leHBvcnRzLnF1aWNrU29ydCA9IGZ1bmN0aW9uIChhcnksIGNvbXBhcmF0b3IpIHtcbiAgZG9RdWlja1NvcnQoYXJ5LCBjb21wYXJhdG9yLCAwLCBhcnkubGVuZ3RoIC0gMSk7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9saWIvcXVpY2stc29ydC5qc1xuLy8gbW9kdWxlIGlkID0gOVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiAtKi0gTW9kZToganM7IGpzLWluZGVudC1sZXZlbDogMjsgLSotICovXG4vKlxuICogQ29weXJpZ2h0IDIwMTEgTW96aWxsYSBGb3VuZGF0aW9uIGFuZCBjb250cmlidXRvcnNcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBOZXcgQlNEIGxpY2Vuc2UuIFNlZSBMSUNFTlNFIG9yOlxuICogaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0zLUNsYXVzZVxuICovXG5cbnZhciBTb3VyY2VNYXBHZW5lcmF0b3IgPSByZXF1aXJlKCcuL3NvdXJjZS1tYXAtZ2VuZXJhdG9yJykuU291cmNlTWFwR2VuZXJhdG9yO1xudmFyIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcblxuLy8gTWF0Y2hlcyBhIFdpbmRvd3Mtc3R5bGUgYFxcclxcbmAgbmV3bGluZSBvciBhIGBcXG5gIG5ld2xpbmUgdXNlZCBieSBhbGwgb3RoZXJcbi8vIG9wZXJhdGluZyBzeXN0ZW1zIHRoZXNlIGRheXMgKGNhcHR1cmluZyB0aGUgcmVzdWx0KS5cbnZhciBSRUdFWF9ORVdMSU5FID0gLyhcXHI/XFxuKS87XG5cbi8vIE5ld2xpbmUgY2hhcmFjdGVyIGNvZGUgZm9yIGNoYXJDb2RlQXQoKSBjb21wYXJpc29uc1xudmFyIE5FV0xJTkVfQ09ERSA9IDEwO1xuXG4vLyBQcml2YXRlIHN5bWJvbCBmb3IgaWRlbnRpZnlpbmcgYFNvdXJjZU5vZGVgcyB3aGVuIG11bHRpcGxlIHZlcnNpb25zIG9mXG4vLyB0aGUgc291cmNlLW1hcCBsaWJyYXJ5IGFyZSBsb2FkZWQuIFRoaXMgTVVTVCBOT1QgQ0hBTkdFIGFjcm9zc1xuLy8gdmVyc2lvbnMhXG52YXIgaXNTb3VyY2VOb2RlID0gXCIkJCRpc1NvdXJjZU5vZGUkJCRcIjtcblxuLyoqXG4gKiBTb3VyY2VOb2RlcyBwcm92aWRlIGEgd2F5IHRvIGFic3RyYWN0IG92ZXIgaW50ZXJwb2xhdGluZy9jb25jYXRlbmF0aW5nXG4gKiBzbmlwcGV0cyBvZiBnZW5lcmF0ZWQgSmF2YVNjcmlwdCBzb3VyY2UgY29kZSB3aGlsZSBtYWludGFpbmluZyB0aGUgbGluZSBhbmRcbiAqIGNvbHVtbiBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIG9yaWdpbmFsIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBwYXJhbSBhTGluZSBUaGUgb3JpZ2luYWwgbGluZSBudW1iZXIuXG4gKiBAcGFyYW0gYUNvbHVtbiBUaGUgb3JpZ2luYWwgY29sdW1uIG51bWJlci5cbiAqIEBwYXJhbSBhU291cmNlIFRoZSBvcmlnaW5hbCBzb3VyY2UncyBmaWxlbmFtZS5cbiAqIEBwYXJhbSBhQ2h1bmtzIE9wdGlvbmFsLiBBbiBhcnJheSBvZiBzdHJpbmdzIHdoaWNoIGFyZSBzbmlwcGV0cyBvZlxuICogICAgICAgIGdlbmVyYXRlZCBKUywgb3Igb3RoZXIgU291cmNlTm9kZXMuXG4gKiBAcGFyYW0gYU5hbWUgVGhlIG9yaWdpbmFsIGlkZW50aWZpZXIuXG4gKi9cbmZ1bmN0aW9uIFNvdXJjZU5vZGUoYUxpbmUsIGFDb2x1bW4sIGFTb3VyY2UsIGFDaHVua3MsIGFOYW1lKSB7XG4gIHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgdGhpcy5zb3VyY2VDb250ZW50cyA9IHt9O1xuICB0aGlzLmxpbmUgPSBhTGluZSA9PSBudWxsID8gbnVsbCA6IGFMaW5lO1xuICB0aGlzLmNvbHVtbiA9IGFDb2x1bW4gPT0gbnVsbCA/IG51bGwgOiBhQ29sdW1uO1xuICB0aGlzLnNvdXJjZSA9IGFTb3VyY2UgPT0gbnVsbCA/IG51bGwgOiBhU291cmNlO1xuICB0aGlzLm5hbWUgPSBhTmFtZSA9PSBudWxsID8gbnVsbCA6IGFOYW1lO1xuICB0aGlzW2lzU291cmNlTm9kZV0gPSB0cnVlO1xuICBpZiAoYUNodW5rcyAhPSBudWxsKSB0aGlzLmFkZChhQ2h1bmtzKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgU291cmNlTm9kZSBmcm9tIGdlbmVyYXRlZCBjb2RlIGFuZCBhIFNvdXJjZU1hcENvbnN1bWVyLlxuICpcbiAqIEBwYXJhbSBhR2VuZXJhdGVkQ29kZSBUaGUgZ2VuZXJhdGVkIGNvZGVcbiAqIEBwYXJhbSBhU291cmNlTWFwQ29uc3VtZXIgVGhlIFNvdXJjZU1hcCBmb3IgdGhlIGdlbmVyYXRlZCBjb2RlXG4gKiBAcGFyYW0gYVJlbGF0aXZlUGF0aCBPcHRpb25hbC4gVGhlIHBhdGggdGhhdCByZWxhdGl2ZSBzb3VyY2VzIGluIHRoZVxuICogICAgICAgIFNvdXJjZU1hcENvbnN1bWVyIHNob3VsZCBiZSByZWxhdGl2ZSB0by5cbiAqL1xuU291cmNlTm9kZS5mcm9tU3RyaW5nV2l0aFNvdXJjZU1hcCA9XG4gIGZ1bmN0aW9uIFNvdXJjZU5vZGVfZnJvbVN0cmluZ1dpdGhTb3VyY2VNYXAoYUdlbmVyYXRlZENvZGUsIGFTb3VyY2VNYXBDb25zdW1lciwgYVJlbGF0aXZlUGF0aCkge1xuICAgIC8vIFRoZSBTb3VyY2VOb2RlIHdlIHdhbnQgdG8gZmlsbCB3aXRoIHRoZSBnZW5lcmF0ZWQgY29kZVxuICAgIC8vIGFuZCB0aGUgU291cmNlTWFwXG4gICAgdmFyIG5vZGUgPSBuZXcgU291cmNlTm9kZSgpO1xuXG4gICAgLy8gQWxsIGV2ZW4gaW5kaWNlcyBvZiB0aGlzIGFycmF5IGFyZSBvbmUgbGluZSBvZiB0aGUgZ2VuZXJhdGVkIGNvZGUsXG4gICAgLy8gd2hpbGUgYWxsIG9kZCBpbmRpY2VzIGFyZSB0aGUgbmV3bGluZXMgYmV0d2VlbiB0d28gYWRqYWNlbnQgbGluZXNcbiAgICAvLyAoc2luY2UgYFJFR0VYX05FV0xJTkVgIGNhcHR1cmVzIGl0cyBtYXRjaCkuXG4gICAgLy8gUHJvY2Vzc2VkIGZyYWdtZW50cyBhcmUgYWNjZXNzZWQgYnkgY2FsbGluZyBgc2hpZnROZXh0TGluZWAuXG4gICAgdmFyIHJlbWFpbmluZ0xpbmVzID0gYUdlbmVyYXRlZENvZGUuc3BsaXQoUkVHRVhfTkVXTElORSk7XG4gICAgdmFyIHJlbWFpbmluZ0xpbmVzSW5kZXggPSAwO1xuICAgIHZhciBzaGlmdE5leHRMaW5lID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgbGluZUNvbnRlbnRzID0gZ2V0TmV4dExpbmUoKTtcbiAgICAgIC8vIFRoZSBsYXN0IGxpbmUgb2YgYSBmaWxlIG1pZ2h0IG5vdCBoYXZlIGEgbmV3bGluZS5cbiAgICAgIHZhciBuZXdMaW5lID0gZ2V0TmV4dExpbmUoKSB8fCBcIlwiO1xuICAgICAgcmV0dXJuIGxpbmVDb250ZW50cyArIG5ld0xpbmU7XG5cbiAgICAgIGZ1bmN0aW9uIGdldE5leHRMaW5lKCkge1xuICAgICAgICByZXR1cm4gcmVtYWluaW5nTGluZXNJbmRleCA8IHJlbWFpbmluZ0xpbmVzLmxlbmd0aCA/XG4gICAgICAgICAgICByZW1haW5pbmdMaW5lc1tyZW1haW5pbmdMaW5lc0luZGV4KytdIDogdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBXZSBuZWVkIHRvIHJlbWVtYmVyIHRoZSBwb3NpdGlvbiBvZiBcInJlbWFpbmluZ0xpbmVzXCJcbiAgICB2YXIgbGFzdEdlbmVyYXRlZExpbmUgPSAxLCBsYXN0R2VuZXJhdGVkQ29sdW1uID0gMDtcblxuICAgIC8vIFRoZSBnZW5lcmF0ZSBTb3VyY2VOb2RlcyB3ZSBuZWVkIGEgY29kZSByYW5nZS5cbiAgICAvLyBUbyBleHRyYWN0IGl0IGN1cnJlbnQgYW5kIGxhc3QgbWFwcGluZyBpcyB1c2VkLlxuICAgIC8vIEhlcmUgd2Ugc3RvcmUgdGhlIGxhc3QgbWFwcGluZy5cbiAgICB2YXIgbGFzdE1hcHBpbmcgPSBudWxsO1xuXG4gICAgYVNvdXJjZU1hcENvbnN1bWVyLmVhY2hNYXBwaW5nKGZ1bmN0aW9uIChtYXBwaW5nKSB7XG4gICAgICBpZiAobGFzdE1hcHBpbmcgIT09IG51bGwpIHtcbiAgICAgICAgLy8gV2UgYWRkIHRoZSBjb2RlIGZyb20gXCJsYXN0TWFwcGluZ1wiIHRvIFwibWFwcGluZ1wiOlxuICAgICAgICAvLyBGaXJzdCBjaGVjayBpZiB0aGVyZSBpcyBhIG5ldyBsaW5lIGluIGJldHdlZW4uXG4gICAgICAgIGlmIChsYXN0R2VuZXJhdGVkTGluZSA8IG1hcHBpbmcuZ2VuZXJhdGVkTGluZSkge1xuICAgICAgICAgIC8vIEFzc29jaWF0ZSBmaXJzdCBsaW5lIHdpdGggXCJsYXN0TWFwcGluZ1wiXG4gICAgICAgICAgYWRkTWFwcGluZ1dpdGhDb2RlKGxhc3RNYXBwaW5nLCBzaGlmdE5leHRMaW5lKCkpO1xuICAgICAgICAgIGxhc3RHZW5lcmF0ZWRMaW5lKys7XG4gICAgICAgICAgbGFzdEdlbmVyYXRlZENvbHVtbiA9IDA7XG4gICAgICAgICAgLy8gVGhlIHJlbWFpbmluZyBjb2RlIGlzIGFkZGVkIHdpdGhvdXQgbWFwcGluZ1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFRoZXJlIGlzIG5vIG5ldyBsaW5lIGluIGJldHdlZW4uXG4gICAgICAgICAgLy8gQXNzb2NpYXRlIHRoZSBjb2RlIGJldHdlZW4gXCJsYXN0R2VuZXJhdGVkQ29sdW1uXCIgYW5kXG4gICAgICAgICAgLy8gXCJtYXBwaW5nLmdlbmVyYXRlZENvbHVtblwiIHdpdGggXCJsYXN0TWFwcGluZ1wiXG4gICAgICAgICAgdmFyIG5leHRMaW5lID0gcmVtYWluaW5nTGluZXNbcmVtYWluaW5nTGluZXNJbmRleF07XG4gICAgICAgICAgdmFyIGNvZGUgPSBuZXh0TGluZS5zdWJzdHIoMCwgbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4gLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RHZW5lcmF0ZWRDb2x1bW4pO1xuICAgICAgICAgIHJlbWFpbmluZ0xpbmVzW3JlbWFpbmluZ0xpbmVzSW5kZXhdID0gbmV4dExpbmUuc3Vic3RyKG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uIC1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0R2VuZXJhdGVkQ29sdW1uKTtcbiAgICAgICAgICBsYXN0R2VuZXJhdGVkQ29sdW1uID0gbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW47XG4gICAgICAgICAgYWRkTWFwcGluZ1dpdGhDb2RlKGxhc3RNYXBwaW5nLCBjb2RlKTtcbiAgICAgICAgICAvLyBObyBtb3JlIHJlbWFpbmluZyBjb2RlLCBjb250aW51ZVxuICAgICAgICAgIGxhc3RNYXBwaW5nID0gbWFwcGluZztcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFdlIGFkZCB0aGUgZ2VuZXJhdGVkIGNvZGUgdW50aWwgdGhlIGZpcnN0IG1hcHBpbmdcbiAgICAgIC8vIHRvIHRoZSBTb3VyY2VOb2RlIHdpdGhvdXQgYW55IG1hcHBpbmcuXG4gICAgICAvLyBFYWNoIGxpbmUgaXMgYWRkZWQgYXMgc2VwYXJhdGUgc3RyaW5nLlxuICAgICAgd2hpbGUgKGxhc3RHZW5lcmF0ZWRMaW5lIDwgbWFwcGluZy5nZW5lcmF0ZWRMaW5lKSB7XG4gICAgICAgIG5vZGUuYWRkKHNoaWZ0TmV4dExpbmUoKSk7XG4gICAgICAgIGxhc3RHZW5lcmF0ZWRMaW5lKys7XG4gICAgICB9XG4gICAgICBpZiAobGFzdEdlbmVyYXRlZENvbHVtbiA8IG1hcHBpbmcuZ2VuZXJhdGVkQ29sdW1uKSB7XG4gICAgICAgIHZhciBuZXh0TGluZSA9IHJlbWFpbmluZ0xpbmVzW3JlbWFpbmluZ0xpbmVzSW5kZXhdO1xuICAgICAgICBub2RlLmFkZChuZXh0TGluZS5zdWJzdHIoMCwgbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4pKTtcbiAgICAgICAgcmVtYWluaW5nTGluZXNbcmVtYWluaW5nTGluZXNJbmRleF0gPSBuZXh0TGluZS5zdWJzdHIobWFwcGluZy5nZW5lcmF0ZWRDb2x1bW4pO1xuICAgICAgICBsYXN0R2VuZXJhdGVkQ29sdW1uID0gbWFwcGluZy5nZW5lcmF0ZWRDb2x1bW47XG4gICAgICB9XG4gICAgICBsYXN0TWFwcGluZyA9IG1hcHBpbmc7XG4gICAgfSwgdGhpcyk7XG4gICAgLy8gV2UgaGF2ZSBwcm9jZXNzZWQgYWxsIG1hcHBpbmdzLlxuICAgIGlmIChyZW1haW5pbmdMaW5lc0luZGV4IDwgcmVtYWluaW5nTGluZXMubGVuZ3RoKSB7XG4gICAgICBpZiAobGFzdE1hcHBpbmcpIHtcbiAgICAgICAgLy8gQXNzb2NpYXRlIHRoZSByZW1haW5pbmcgY29kZSBpbiB0aGUgY3VycmVudCBsaW5lIHdpdGggXCJsYXN0TWFwcGluZ1wiXG4gICAgICAgIGFkZE1hcHBpbmdXaXRoQ29kZShsYXN0TWFwcGluZywgc2hpZnROZXh0TGluZSgpKTtcbiAgICAgIH1cbiAgICAgIC8vIGFuZCBhZGQgdGhlIHJlbWFpbmluZyBsaW5lcyB3aXRob3V0IGFueSBtYXBwaW5nXG4gICAgICBub2RlLmFkZChyZW1haW5pbmdMaW5lcy5zcGxpY2UocmVtYWluaW5nTGluZXNJbmRleCkuam9pbihcIlwiKSk7XG4gICAgfVxuXG4gICAgLy8gQ29weSBzb3VyY2VzQ29udGVudCBpbnRvIFNvdXJjZU5vZGVcbiAgICBhU291cmNlTWFwQ29uc3VtZXIuc291cmNlcy5mb3JFYWNoKGZ1bmN0aW9uIChzb3VyY2VGaWxlKSB7XG4gICAgICB2YXIgY29udGVudCA9IGFTb3VyY2VNYXBDb25zdW1lci5zb3VyY2VDb250ZW50Rm9yKHNvdXJjZUZpbGUpO1xuICAgICAgaWYgKGNvbnRlbnQgIT0gbnVsbCkge1xuICAgICAgICBpZiAoYVJlbGF0aXZlUGF0aCAhPSBudWxsKSB7XG4gICAgICAgICAgc291cmNlRmlsZSA9IHV0aWwuam9pbihhUmVsYXRpdmVQYXRoLCBzb3VyY2VGaWxlKTtcbiAgICAgICAgfVxuICAgICAgICBub2RlLnNldFNvdXJjZUNvbnRlbnQoc291cmNlRmlsZSwgY29udGVudCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbm9kZTtcblxuICAgIGZ1bmN0aW9uIGFkZE1hcHBpbmdXaXRoQ29kZShtYXBwaW5nLCBjb2RlKSB7XG4gICAgICBpZiAobWFwcGluZyA9PT0gbnVsbCB8fCBtYXBwaW5nLnNvdXJjZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG5vZGUuYWRkKGNvZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHNvdXJjZSA9IGFSZWxhdGl2ZVBhdGhcbiAgICAgICAgICA/IHV0aWwuam9pbihhUmVsYXRpdmVQYXRoLCBtYXBwaW5nLnNvdXJjZSlcbiAgICAgICAgICA6IG1hcHBpbmcuc291cmNlO1xuICAgICAgICBub2RlLmFkZChuZXcgU291cmNlTm9kZShtYXBwaW5nLm9yaWdpbmFsTGluZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZy5vcmlnaW5hbENvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLm5hbWUpKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbi8qKlxuICogQWRkIGEgY2h1bmsgb2YgZ2VuZXJhdGVkIEpTIHRvIHRoaXMgc291cmNlIG5vZGUuXG4gKlxuICogQHBhcmFtIGFDaHVuayBBIHN0cmluZyBzbmlwcGV0IG9mIGdlbmVyYXRlZCBKUyBjb2RlLCBhbm90aGVyIGluc3RhbmNlIG9mXG4gKiAgICAgICAgU291cmNlTm9kZSwgb3IgYW4gYXJyYXkgd2hlcmUgZWFjaCBtZW1iZXIgaXMgb25lIG9mIHRob3NlIHRoaW5ncy5cbiAqL1xuU291cmNlTm9kZS5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gU291cmNlTm9kZV9hZGQoYUNodW5rKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGFDaHVuaykpIHtcbiAgICBhQ2h1bmsuZm9yRWFjaChmdW5jdGlvbiAoY2h1bmspIHtcbiAgICAgIHRoaXMuYWRkKGNodW5rKTtcbiAgICB9LCB0aGlzKTtcbiAgfVxuICBlbHNlIGlmIChhQ2h1bmtbaXNTb3VyY2VOb2RlXSB8fCB0eXBlb2YgYUNodW5rID09PSBcInN0cmluZ1wiKSB7XG4gICAgaWYgKGFDaHVuaykge1xuICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKGFDaHVuayk7XG4gICAgfVxuICB9XG4gIGVsc2Uge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICBcIkV4cGVjdGVkIGEgU291cmNlTm9kZSwgc3RyaW5nLCBvciBhbiBhcnJheSBvZiBTb3VyY2VOb2RlcyBhbmQgc3RyaW5ncy4gR290IFwiICsgYUNodW5rXG4gICAgKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQWRkIGEgY2h1bmsgb2YgZ2VuZXJhdGVkIEpTIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBzb3VyY2Ugbm9kZS5cbiAqXG4gKiBAcGFyYW0gYUNodW5rIEEgc3RyaW5nIHNuaXBwZXQgb2YgZ2VuZXJhdGVkIEpTIGNvZGUsIGFub3RoZXIgaW5zdGFuY2Ugb2ZcbiAqICAgICAgICBTb3VyY2VOb2RlLCBvciBhbiBhcnJheSB3aGVyZSBlYWNoIG1lbWJlciBpcyBvbmUgb2YgdGhvc2UgdGhpbmdzLlxuICovXG5Tb3VyY2VOb2RlLnByb3RvdHlwZS5wcmVwZW5kID0gZnVuY3Rpb24gU291cmNlTm9kZV9wcmVwZW5kKGFDaHVuaykge1xuICBpZiAoQXJyYXkuaXNBcnJheShhQ2h1bmspKSB7XG4gICAgZm9yICh2YXIgaSA9IGFDaHVuay5sZW5ndGgtMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHRoaXMucHJlcGVuZChhQ2h1bmtbaV0pO1xuICAgIH1cbiAgfVxuICBlbHNlIGlmIChhQ2h1bmtbaXNTb3VyY2VOb2RlXSB8fCB0eXBlb2YgYUNodW5rID09PSBcInN0cmluZ1wiKSB7XG4gICAgdGhpcy5jaGlsZHJlbi51bnNoaWZ0KGFDaHVuayk7XG4gIH1cbiAgZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgIFwiRXhwZWN0ZWQgYSBTb3VyY2VOb2RlLCBzdHJpbmcsIG9yIGFuIGFycmF5IG9mIFNvdXJjZU5vZGVzIGFuZCBzdHJpbmdzLiBHb3QgXCIgKyBhQ2h1bmtcbiAgICApO1xuICB9XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBXYWxrIG92ZXIgdGhlIHRyZWUgb2YgSlMgc25pcHBldHMgaW4gdGhpcyBub2RlIGFuZCBpdHMgY2hpbGRyZW4uIFRoZVxuICogd2Fsa2luZyBmdW5jdGlvbiBpcyBjYWxsZWQgb25jZSBmb3IgZWFjaCBzbmlwcGV0IG9mIEpTIGFuZCBpcyBwYXNzZWQgdGhhdFxuICogc25pcHBldCBhbmQgdGhlIGl0cyBvcmlnaW5hbCBhc3NvY2lhdGVkIHNvdXJjZSdzIGxpbmUvY29sdW1uIGxvY2F0aW9uLlxuICpcbiAqIEBwYXJhbSBhRm4gVGhlIHRyYXZlcnNhbCBmdW5jdGlvbi5cbiAqL1xuU291cmNlTm9kZS5wcm90b3R5cGUud2FsayA9IGZ1bmN0aW9uIFNvdXJjZU5vZGVfd2FsayhhRm4pIHtcbiAgdmFyIGNodW5rO1xuICBmb3IgKHZhciBpID0gMCwgbGVuID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIGNodW5rID0gdGhpcy5jaGlsZHJlbltpXTtcbiAgICBpZiAoY2h1bmtbaXNTb3VyY2VOb2RlXSkge1xuICAgICAgY2h1bmsud2FsayhhRm4pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGlmIChjaHVuayAhPT0gJycpIHtcbiAgICAgICAgYUZuKGNodW5rLCB7IHNvdXJjZTogdGhpcy5zb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgICBsaW5lOiB0aGlzLmxpbmUsXG4gICAgICAgICAgICAgICAgICAgICBjb2x1bW46IHRoaXMuY29sdW1uLFxuICAgICAgICAgICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBMaWtlIGBTdHJpbmcucHJvdG90eXBlLmpvaW5gIGV4Y2VwdCBmb3IgU291cmNlTm9kZXMuIEluc2VydHMgYGFTdHJgIGJldHdlZW5cbiAqIGVhY2ggb2YgYHRoaXMuY2hpbGRyZW5gLlxuICpcbiAqIEBwYXJhbSBhU2VwIFRoZSBzZXBhcmF0b3IuXG4gKi9cblNvdXJjZU5vZGUucHJvdG90eXBlLmpvaW4gPSBmdW5jdGlvbiBTb3VyY2VOb2RlX2pvaW4oYVNlcCkge1xuICB2YXIgbmV3Q2hpbGRyZW47XG4gIHZhciBpO1xuICB2YXIgbGVuID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7XG4gIGlmIChsZW4gPiAwKSB7XG4gICAgbmV3Q2hpbGRyZW4gPSBbXTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuLTE7IGkrKykge1xuICAgICAgbmV3Q2hpbGRyZW4ucHVzaCh0aGlzLmNoaWxkcmVuW2ldKTtcbiAgICAgIG5ld0NoaWxkcmVuLnB1c2goYVNlcCk7XG4gICAgfVxuICAgIG5ld0NoaWxkcmVuLnB1c2godGhpcy5jaGlsZHJlbltpXSk7XG4gICAgdGhpcy5jaGlsZHJlbiA9IG5ld0NoaWxkcmVuO1xuICB9XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBDYWxsIFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSBvbiB0aGUgdmVyeSByaWdodC1tb3N0IHNvdXJjZSBzbmlwcGV0LiBVc2VmdWxcbiAqIGZvciB0cmltbWluZyB3aGl0ZXNwYWNlIGZyb20gdGhlIGVuZCBvZiBhIHNvdXJjZSBub2RlLCBldGMuXG4gKlxuICogQHBhcmFtIGFQYXR0ZXJuIFRoZSBwYXR0ZXJuIHRvIHJlcGxhY2UuXG4gKiBAcGFyYW0gYVJlcGxhY2VtZW50IFRoZSB0aGluZyB0byByZXBsYWNlIHRoZSBwYXR0ZXJuIHdpdGguXG4gKi9cblNvdXJjZU5vZGUucHJvdG90eXBlLnJlcGxhY2VSaWdodCA9IGZ1bmN0aW9uIFNvdXJjZU5vZGVfcmVwbGFjZVJpZ2h0KGFQYXR0ZXJuLCBhUmVwbGFjZW1lbnQpIHtcbiAgdmFyIGxhc3RDaGlsZCA9IHRoaXMuY2hpbGRyZW5bdGhpcy5jaGlsZHJlbi5sZW5ndGggLSAxXTtcbiAgaWYgKGxhc3RDaGlsZFtpc1NvdXJjZU5vZGVdKSB7XG4gICAgbGFzdENoaWxkLnJlcGxhY2VSaWdodChhUGF0dGVybiwgYVJlcGxhY2VtZW50KTtcbiAgfVxuICBlbHNlIGlmICh0eXBlb2YgbGFzdENoaWxkID09PSAnc3RyaW5nJykge1xuICAgIHRoaXMuY2hpbGRyZW5bdGhpcy5jaGlsZHJlbi5sZW5ndGggLSAxXSA9IGxhc3RDaGlsZC5yZXBsYWNlKGFQYXR0ZXJuLCBhUmVwbGFjZW1lbnQpO1xuICB9XG4gIGVsc2Uge1xuICAgIHRoaXMuY2hpbGRyZW4ucHVzaCgnJy5yZXBsYWNlKGFQYXR0ZXJuLCBhUmVwbGFjZW1lbnQpKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0IHRoZSBzb3VyY2UgY29udGVudCBmb3IgYSBzb3VyY2UgZmlsZS4gVGhpcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBTb3VyY2VNYXBHZW5lcmF0b3JcbiAqIGluIHRoZSBzb3VyY2VzQ29udGVudCBmaWVsZC5cbiAqXG4gKiBAcGFyYW0gYVNvdXJjZUZpbGUgVGhlIGZpbGVuYW1lIG9mIHRoZSBzb3VyY2UgZmlsZVxuICogQHBhcmFtIGFTb3VyY2VDb250ZW50IFRoZSBjb250ZW50IG9mIHRoZSBzb3VyY2UgZmlsZVxuICovXG5Tb3VyY2VOb2RlLnByb3RvdHlwZS5zZXRTb3VyY2VDb250ZW50ID1cbiAgZnVuY3Rpb24gU291cmNlTm9kZV9zZXRTb3VyY2VDb250ZW50KGFTb3VyY2VGaWxlLCBhU291cmNlQ29udGVudCkge1xuICAgIHRoaXMuc291cmNlQ29udGVudHNbdXRpbC50b1NldFN0cmluZyhhU291cmNlRmlsZSldID0gYVNvdXJjZUNvbnRlbnQ7XG4gIH07XG5cbi8qKlxuICogV2FsayBvdmVyIHRoZSB0cmVlIG9mIFNvdXJjZU5vZGVzLiBUaGUgd2Fsa2luZyBmdW5jdGlvbiBpcyBjYWxsZWQgZm9yIGVhY2hcbiAqIHNvdXJjZSBmaWxlIGNvbnRlbnQgYW5kIGlzIHBhc3NlZCB0aGUgZmlsZW5hbWUgYW5kIHNvdXJjZSBjb250ZW50LlxuICpcbiAqIEBwYXJhbSBhRm4gVGhlIHRyYXZlcnNhbCBmdW5jdGlvbi5cbiAqL1xuU291cmNlTm9kZS5wcm90b3R5cGUud2Fsa1NvdXJjZUNvbnRlbnRzID1cbiAgZnVuY3Rpb24gU291cmNlTm9kZV93YWxrU291cmNlQ29udGVudHMoYUZuKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmNoaWxkcmVuW2ldW2lzU291cmNlTm9kZV0pIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbltpXS53YWxrU291cmNlQ29udGVudHMoYUZuKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc291cmNlcyA9IE9iamVjdC5rZXlzKHRoaXMuc291cmNlQ29udGVudHMpO1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBzb3VyY2VzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBhRm4odXRpbC5mcm9tU2V0U3RyaW5nKHNvdXJjZXNbaV0pLCB0aGlzLnNvdXJjZUNvbnRlbnRzW3NvdXJjZXNbaV1dKTtcbiAgICB9XG4gIH07XG5cbi8qKlxuICogUmV0dXJuIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBzb3VyY2Ugbm9kZS4gV2Fsa3Mgb3ZlciB0aGUgdHJlZVxuICogYW5kIGNvbmNhdGVuYXRlcyBhbGwgdGhlIHZhcmlvdXMgc25pcHBldHMgdG9nZXRoZXIgdG8gb25lIHN0cmluZy5cbiAqL1xuU291cmNlTm9kZS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiBTb3VyY2VOb2RlX3RvU3RyaW5nKCkge1xuICB2YXIgc3RyID0gXCJcIjtcbiAgdGhpcy53YWxrKGZ1bmN0aW9uIChjaHVuaykge1xuICAgIHN0ciArPSBjaHVuaztcbiAgfSk7XG4gIHJldHVybiBzdHI7XG59O1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHNvdXJjZSBub2RlIGFsb25nIHdpdGggYSBzb3VyY2VcbiAqIG1hcC5cbiAqL1xuU291cmNlTm9kZS5wcm90b3R5cGUudG9TdHJpbmdXaXRoU291cmNlTWFwID0gZnVuY3Rpb24gU291cmNlTm9kZV90b1N0cmluZ1dpdGhTb3VyY2VNYXAoYUFyZ3MpIHtcbiAgdmFyIGdlbmVyYXRlZCA9IHtcbiAgICBjb2RlOiBcIlwiLFxuICAgIGxpbmU6IDEsXG4gICAgY29sdW1uOiAwXG4gIH07XG4gIHZhciBtYXAgPSBuZXcgU291cmNlTWFwR2VuZXJhdG9yKGFBcmdzKTtcbiAgdmFyIHNvdXJjZU1hcHBpbmdBY3RpdmUgPSBmYWxzZTtcbiAgdmFyIGxhc3RPcmlnaW5hbFNvdXJjZSA9IG51bGw7XG4gIHZhciBsYXN0T3JpZ2luYWxMaW5lID0gbnVsbDtcbiAgdmFyIGxhc3RPcmlnaW5hbENvbHVtbiA9IG51bGw7XG4gIHZhciBsYXN0T3JpZ2luYWxOYW1lID0gbnVsbDtcbiAgdGhpcy53YWxrKGZ1bmN0aW9uIChjaHVuaywgb3JpZ2luYWwpIHtcbiAgICBnZW5lcmF0ZWQuY29kZSArPSBjaHVuaztcbiAgICBpZiAob3JpZ2luYWwuc291cmNlICE9PSBudWxsXG4gICAgICAgICYmIG9yaWdpbmFsLmxpbmUgIT09IG51bGxcbiAgICAgICAgJiYgb3JpZ2luYWwuY29sdW1uICE9PSBudWxsKSB7XG4gICAgICBpZihsYXN0T3JpZ2luYWxTb3VyY2UgIT09IG9yaWdpbmFsLnNvdXJjZVxuICAgICAgICAgfHwgbGFzdE9yaWdpbmFsTGluZSAhPT0gb3JpZ2luYWwubGluZVxuICAgICAgICAgfHwgbGFzdE9yaWdpbmFsQ29sdW1uICE9PSBvcmlnaW5hbC5jb2x1bW5cbiAgICAgICAgIHx8IGxhc3RPcmlnaW5hbE5hbWUgIT09IG9yaWdpbmFsLm5hbWUpIHtcbiAgICAgICAgbWFwLmFkZE1hcHBpbmcoe1xuICAgICAgICAgIHNvdXJjZTogb3JpZ2luYWwuc291cmNlLFxuICAgICAgICAgIG9yaWdpbmFsOiB7XG4gICAgICAgICAgICBsaW5lOiBvcmlnaW5hbC5saW5lLFxuICAgICAgICAgICAgY29sdW1uOiBvcmlnaW5hbC5jb2x1bW5cbiAgICAgICAgICB9LFxuICAgICAgICAgIGdlbmVyYXRlZDoge1xuICAgICAgICAgICAgbGluZTogZ2VuZXJhdGVkLmxpbmUsXG4gICAgICAgICAgICBjb2x1bW46IGdlbmVyYXRlZC5jb2x1bW5cbiAgICAgICAgICB9LFxuICAgICAgICAgIG5hbWU6IG9yaWdpbmFsLm5hbWVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBsYXN0T3JpZ2luYWxTb3VyY2UgPSBvcmlnaW5hbC5zb3VyY2U7XG4gICAgICBsYXN0T3JpZ2luYWxMaW5lID0gb3JpZ2luYWwubGluZTtcbiAgICAgIGxhc3RPcmlnaW5hbENvbHVtbiA9IG9yaWdpbmFsLmNvbHVtbjtcbiAgICAgIGxhc3RPcmlnaW5hbE5hbWUgPSBvcmlnaW5hbC5uYW1lO1xuICAgICAgc291cmNlTWFwcGluZ0FjdGl2ZSA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChzb3VyY2VNYXBwaW5nQWN0aXZlKSB7XG4gICAgICBtYXAuYWRkTWFwcGluZyh7XG4gICAgICAgIGdlbmVyYXRlZDoge1xuICAgICAgICAgIGxpbmU6IGdlbmVyYXRlZC5saW5lLFxuICAgICAgICAgIGNvbHVtbjogZ2VuZXJhdGVkLmNvbHVtblxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGxhc3RPcmlnaW5hbFNvdXJjZSA9IG51bGw7XG4gICAgICBzb3VyY2VNYXBwaW5nQWN0aXZlID0gZmFsc2U7XG4gICAgfVxuICAgIGZvciAodmFyIGlkeCA9IDAsIGxlbmd0aCA9IGNodW5rLmxlbmd0aDsgaWR4IDwgbGVuZ3RoOyBpZHgrKykge1xuICAgICAgaWYgKGNodW5rLmNoYXJDb2RlQXQoaWR4KSA9PT0gTkVXTElORV9DT0RFKSB7XG4gICAgICAgIGdlbmVyYXRlZC5saW5lKys7XG4gICAgICAgIGdlbmVyYXRlZC5jb2x1bW4gPSAwO1xuICAgICAgICAvLyBNYXBwaW5ncyBlbmQgYXQgZW9sXG4gICAgICAgIGlmIChpZHggKyAxID09PSBsZW5ndGgpIHtcbiAgICAgICAgICBsYXN0T3JpZ2luYWxTb3VyY2UgPSBudWxsO1xuICAgICAgICAgIHNvdXJjZU1hcHBpbmdBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmIChzb3VyY2VNYXBwaW5nQWN0aXZlKSB7XG4gICAgICAgICAgbWFwLmFkZE1hcHBpbmcoe1xuICAgICAgICAgICAgc291cmNlOiBvcmlnaW5hbC5zb3VyY2UsXG4gICAgICAgICAgICBvcmlnaW5hbDoge1xuICAgICAgICAgICAgICBsaW5lOiBvcmlnaW5hbC5saW5lLFxuICAgICAgICAgICAgICBjb2x1bW46IG9yaWdpbmFsLmNvbHVtblxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdlbmVyYXRlZDoge1xuICAgICAgICAgICAgICBsaW5lOiBnZW5lcmF0ZWQubGluZSxcbiAgICAgICAgICAgICAgY29sdW1uOiBnZW5lcmF0ZWQuY29sdW1uXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmFtZTogb3JpZ2luYWwubmFtZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBnZW5lcmF0ZWQuY29sdW1uKys7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgdGhpcy53YWxrU291cmNlQ29udGVudHMoZnVuY3Rpb24gKHNvdXJjZUZpbGUsIHNvdXJjZUNvbnRlbnQpIHtcbiAgICBtYXAuc2V0U291cmNlQ29udGVudChzb3VyY2VGaWxlLCBzb3VyY2VDb250ZW50KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHsgY29kZTogZ2VuZXJhdGVkLmNvZGUsIG1hcDogbWFwIH07XG59O1xuXG5leHBvcnRzLlNvdXJjZU5vZGUgPSBTb3VyY2VOb2RlO1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9saWIvc291cmNlLW5vZGUuanNcbi8vIG1vZHVsZSBpZCA9IDEwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/node_modules/source-map/dist/source-map.js b/node_modules/source-map/dist/source-map.js deleted file mode 100644 index 4e630e2..0000000 --- a/node_modules/source-map/dist/source-map.js +++ /dev/null @@ -1,3090 +0,0 @@ -(function webpackUniversalModuleDefinition(root, factory) { - if(typeof exports === 'object' && typeof module === 'object') - module.exports = factory(); - else if(typeof define === 'function' && define.amd) - define([], factory); - else if(typeof exports === 'object') - exports["sourceMap"] = factory(); - else - root["sourceMap"] = factory(); -})(this, function() { -return /******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; - -/******/ // The require function -/******/ function __webpack_require__(moduleId) { - -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) -/******/ return installedModules[moduleId].exports; - -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ exports: {}, -/******/ id: moduleId, -/******/ loaded: false -/******/ }; - -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); - -/******/ // Flag the module as loaded -/******/ module.loaded = true; - -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } - - -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; - -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; - -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = ""; - -/******/ // Load entry module and return exports -/******/ return __webpack_require__(0); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */ -/***/ (function(module, exports, __webpack_require__) { - - /* - * Copyright 2009-2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE.txt or: - * http://opensource.org/licenses/BSD-3-Clause - */ - exports.SourceMapGenerator = __webpack_require__(1).SourceMapGenerator; - exports.SourceMapConsumer = __webpack_require__(7).SourceMapConsumer; - exports.SourceNode = __webpack_require__(10).SourceNode; - - -/***/ }), -/* 1 */ -/***/ (function(module, exports, __webpack_require__) { - - /* -*- Mode: js; js-indent-level: 2; -*- */ - /* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - - var base64VLQ = __webpack_require__(2); - var util = __webpack_require__(4); - var ArraySet = __webpack_require__(5).ArraySet; - var MappingList = __webpack_require__(6).MappingList; - - /** - * An instance of the SourceMapGenerator represents a source map which is - * being built incrementally. You may pass an object with the following - * properties: - * - * - file: The filename of the generated source. - * - sourceRoot: A root for all relative URLs in this source map. - */ - function SourceMapGenerator(aArgs) { - if (!aArgs) { - aArgs = {}; - } - this._file = util.getArg(aArgs, 'file', null); - this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null); - this._skipValidation = util.getArg(aArgs, 'skipValidation', false); - this._sources = new ArraySet(); - this._names = new ArraySet(); - this._mappings = new MappingList(); - this._sourcesContents = null; - } - - SourceMapGenerator.prototype._version = 3; - - /** - * Creates a new SourceMapGenerator based on a SourceMapConsumer - * - * @param aSourceMapConsumer The SourceMap. - */ - SourceMapGenerator.fromSourceMap = - function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) { - var sourceRoot = aSourceMapConsumer.sourceRoot; - var generator = new SourceMapGenerator({ - file: aSourceMapConsumer.file, - sourceRoot: sourceRoot - }); - aSourceMapConsumer.eachMapping(function (mapping) { - var newMapping = { - generated: { - line: mapping.generatedLine, - column: mapping.generatedColumn - } - }; - - if (mapping.source != null) { - newMapping.source = mapping.source; - if (sourceRoot != null) { - newMapping.source = util.relative(sourceRoot, newMapping.source); - } - - newMapping.original = { - line: mapping.originalLine, - column: mapping.originalColumn - }; - - if (mapping.name != null) { - newMapping.name = mapping.name; - } - } - - generator.addMapping(newMapping); - }); - aSourceMapConsumer.sources.forEach(function (sourceFile) { - var content = aSourceMapConsumer.sourceContentFor(sourceFile); - if (content != null) { - generator.setSourceContent(sourceFile, content); - } - }); - return generator; - }; - - /** - * Add a single mapping from original source line and column to the generated - * source's line and column for this source map being created. The mapping - * object should have the following properties: - * - * - generated: An object with the generated line and column positions. - * - original: An object with the original line and column positions. - * - source: The original source file (relative to the sourceRoot). - * - name: An optional original token name for this mapping. - */ - SourceMapGenerator.prototype.addMapping = - function SourceMapGenerator_addMapping(aArgs) { - var generated = util.getArg(aArgs, 'generated'); - var original = util.getArg(aArgs, 'original', null); - var source = util.getArg(aArgs, 'source', null); - var name = util.getArg(aArgs, 'name', null); - - if (!this._skipValidation) { - this._validateMapping(generated, original, source, name); - } - - if (source != null) { - source = String(source); - if (!this._sources.has(source)) { - this._sources.add(source); - } - } - - if (name != null) { - name = String(name); - if (!this._names.has(name)) { - this._names.add(name); - } - } - - this._mappings.add({ - generatedLine: generated.line, - generatedColumn: generated.column, - originalLine: original != null && original.line, - originalColumn: original != null && original.column, - source: source, - name: name - }); - }; - - /** - * Set the source content for a source file. - */ - SourceMapGenerator.prototype.setSourceContent = - function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) { - var source = aSourceFile; - if (this._sourceRoot != null) { - source = util.relative(this._sourceRoot, source); - } - - if (aSourceContent != null) { - // Add the source content to the _sourcesContents map. - // Create a new _sourcesContents map if the property is null. - if (!this._sourcesContents) { - this._sourcesContents = Object.create(null); - } - this._sourcesContents[util.toSetString(source)] = aSourceContent; - } else if (this._sourcesContents) { - // Remove the source file from the _sourcesContents map. - // If the _sourcesContents map is empty, set the property to null. - delete this._sourcesContents[util.toSetString(source)]; - if (Object.keys(this._sourcesContents).length === 0) { - this._sourcesContents = null; - } - } - }; - - /** - * Applies the mappings of a sub-source-map for a specific source file to the - * source map being generated. Each mapping to the supplied source file is - * rewritten using the supplied source map. Note: The resolution for the - * resulting mappings is the minimium of this map and the supplied map. - * - * @param aSourceMapConsumer The source map to be applied. - * @param aSourceFile Optional. The filename of the source file. - * If omitted, SourceMapConsumer's file property will be used. - * @param aSourceMapPath Optional. The dirname of the path to the source map - * to be applied. If relative, it is relative to the SourceMapConsumer. - * This parameter is needed when the two source maps aren't in the same - * directory, and the source map to be applied contains relative source - * paths. If so, those relative source paths need to be rewritten - * relative to the SourceMapGenerator. - */ - SourceMapGenerator.prototype.applySourceMap = - function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) { - var sourceFile = aSourceFile; - // If aSourceFile is omitted, we will use the file property of the SourceMap - if (aSourceFile == null) { - if (aSourceMapConsumer.file == null) { - throw new Error( - 'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' + - 'or the source map\'s "file" property. Both were omitted.' - ); - } - sourceFile = aSourceMapConsumer.file; - } - var sourceRoot = this._sourceRoot; - // Make "sourceFile" relative if an absolute Url is passed. - if (sourceRoot != null) { - sourceFile = util.relative(sourceRoot, sourceFile); - } - // Applying the SourceMap can add and remove items from the sources and - // the names array. - var newSources = new ArraySet(); - var newNames = new ArraySet(); - - // Find mappings for the "sourceFile" - this._mappings.unsortedForEach(function (mapping) { - if (mapping.source === sourceFile && mapping.originalLine != null) { - // Check if it can be mapped by the source map, then update the mapping. - var original = aSourceMapConsumer.originalPositionFor({ - line: mapping.originalLine, - column: mapping.originalColumn - }); - if (original.source != null) { - // Copy mapping - mapping.source = original.source; - if (aSourceMapPath != null) { - mapping.source = util.join(aSourceMapPath, mapping.source) - } - if (sourceRoot != null) { - mapping.source = util.relative(sourceRoot, mapping.source); - } - mapping.originalLine = original.line; - mapping.originalColumn = original.column; - if (original.name != null) { - mapping.name = original.name; - } - } - } - - var source = mapping.source; - if (source != null && !newSources.has(source)) { - newSources.add(source); - } - - var name = mapping.name; - if (name != null && !newNames.has(name)) { - newNames.add(name); - } - - }, this); - this._sources = newSources; - this._names = newNames; - - // Copy sourcesContents of applied map. - aSourceMapConsumer.sources.forEach(function (sourceFile) { - var content = aSourceMapConsumer.sourceContentFor(sourceFile); - if (content != null) { - if (aSourceMapPath != null) { - sourceFile = util.join(aSourceMapPath, sourceFile); - } - if (sourceRoot != null) { - sourceFile = util.relative(sourceRoot, sourceFile); - } - this.setSourceContent(sourceFile, content); - } - }, this); - }; - - /** - * A mapping can have one of the three levels of data: - * - * 1. Just the generated position. - * 2. The Generated position, original position, and original source. - * 3. Generated and original position, original source, as well as a name - * token. - * - * To maintain consistency, we validate that any new mapping being added falls - * in to one of these categories. - */ - SourceMapGenerator.prototype._validateMapping = - function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource, - aName) { - // When aOriginal is truthy but has empty values for .line and .column, - // it is most likely a programmer error. In this case we throw a very - // specific error message to try to guide them the right way. - // For example: https://github.com/Polymer/polymer-bundler/pull/519 - if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') { - throw new Error( - 'original.line and original.column are not numbers -- you probably meant to omit ' + - 'the original mapping entirely and only map the generated position. If so, pass ' + - 'null for the original mapping instead of an object with empty or null values.' - ); - } - - if (aGenerated && 'line' in aGenerated && 'column' in aGenerated - && aGenerated.line > 0 && aGenerated.column >= 0 - && !aOriginal && !aSource && !aName) { - // Case 1. - return; - } - else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated - && aOriginal && 'line' in aOriginal && 'column' in aOriginal - && aGenerated.line > 0 && aGenerated.column >= 0 - && aOriginal.line > 0 && aOriginal.column >= 0 - && aSource) { - // Cases 2 and 3. - return; - } - else { - throw new Error('Invalid mapping: ' + JSON.stringify({ - generated: aGenerated, - source: aSource, - original: aOriginal, - name: aName - })); - } - }; - - /** - * Serialize the accumulated mappings in to the stream of base 64 VLQs - * specified by the source map format. - */ - SourceMapGenerator.prototype._serializeMappings = - function SourceMapGenerator_serializeMappings() { - var previousGeneratedColumn = 0; - var previousGeneratedLine = 1; - var previousOriginalColumn = 0; - var previousOriginalLine = 0; - var previousName = 0; - var previousSource = 0; - var result = ''; - var next; - var mapping; - var nameIdx; - var sourceIdx; - - var mappings = this._mappings.toArray(); - for (var i = 0, len = mappings.length; i < len; i++) { - mapping = mappings[i]; - next = '' - - if (mapping.generatedLine !== previousGeneratedLine) { - previousGeneratedColumn = 0; - while (mapping.generatedLine !== previousGeneratedLine) { - next += ';'; - previousGeneratedLine++; - } - } - else { - if (i > 0) { - if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) { - continue; - } - next += ','; - } - } - - next += base64VLQ.encode(mapping.generatedColumn - - previousGeneratedColumn); - previousGeneratedColumn = mapping.generatedColumn; - - if (mapping.source != null) { - sourceIdx = this._sources.indexOf(mapping.source); - next += base64VLQ.encode(sourceIdx - previousSource); - previousSource = sourceIdx; - - // lines are stored 0-based in SourceMap spec version 3 - next += base64VLQ.encode(mapping.originalLine - 1 - - previousOriginalLine); - previousOriginalLine = mapping.originalLine - 1; - - next += base64VLQ.encode(mapping.originalColumn - - previousOriginalColumn); - previousOriginalColumn = mapping.originalColumn; - - if (mapping.name != null) { - nameIdx = this._names.indexOf(mapping.name); - next += base64VLQ.encode(nameIdx - previousName); - previousName = nameIdx; - } - } - - result += next; - } - - return result; - }; - - SourceMapGenerator.prototype._generateSourcesContent = - function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) { - return aSources.map(function (source) { - if (!this._sourcesContents) { - return null; - } - if (aSourceRoot != null) { - source = util.relative(aSourceRoot, source); - } - var key = util.toSetString(source); - return Object.prototype.hasOwnProperty.call(this._sourcesContents, key) - ? this._sourcesContents[key] - : null; - }, this); - }; - - /** - * Externalize the source map. - */ - SourceMapGenerator.prototype.toJSON = - function SourceMapGenerator_toJSON() { - var map = { - version: this._version, - sources: this._sources.toArray(), - names: this._names.toArray(), - mappings: this._serializeMappings() - }; - if (this._file != null) { - map.file = this._file; - } - if (this._sourceRoot != null) { - map.sourceRoot = this._sourceRoot; - } - if (this._sourcesContents) { - map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot); - } - - return map; - }; - - /** - * Render the source map being generated to a string. - */ - SourceMapGenerator.prototype.toString = - function SourceMapGenerator_toString() { - return JSON.stringify(this.toJSON()); - }; - - exports.SourceMapGenerator = SourceMapGenerator; - - -/***/ }), -/* 2 */ -/***/ (function(module, exports, __webpack_require__) { - - /* -*- Mode: js; js-indent-level: 2; -*- */ - /* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - * - * Based on the Base 64 VLQ implementation in Closure Compiler: - * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java - * - * Copyright 2011 The Closure Compiler Authors. All rights reserved. - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - - var base64 = __webpack_require__(3); - - // A single base 64 digit can contain 6 bits of data. For the base 64 variable - // length quantities we use in the source map spec, the first bit is the sign, - // the next four bits are the actual value, and the 6th bit is the - // continuation bit. The continuation bit tells us whether there are more - // digits in this value following this digit. - // - // Continuation - // | Sign - // | | - // V V - // 101011 - - var VLQ_BASE_SHIFT = 5; - - // binary: 100000 - var VLQ_BASE = 1 << VLQ_BASE_SHIFT; - - // binary: 011111 - var VLQ_BASE_MASK = VLQ_BASE - 1; - - // binary: 100000 - var VLQ_CONTINUATION_BIT = VLQ_BASE; - - /** - * Converts from a two-complement value to a value where the sign bit is - * placed in the least significant bit. For example, as decimals: - * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary) - * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary) - */ - function toVLQSigned(aValue) { - return aValue < 0 - ? ((-aValue) << 1) + 1 - : (aValue << 1) + 0; - } - - /** - * Converts to a two-complement value from a value where the sign bit is - * placed in the least significant bit. For example, as decimals: - * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1 - * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2 - */ - function fromVLQSigned(aValue) { - var isNegative = (aValue & 1) === 1; - var shifted = aValue >> 1; - return isNegative - ? -shifted - : shifted; - } - - /** - * Returns the base 64 VLQ encoded value. - */ - exports.encode = function base64VLQ_encode(aValue) { - var encoded = ""; - var digit; - - var vlq = toVLQSigned(aValue); - - do { - digit = vlq & VLQ_BASE_MASK; - vlq >>>= VLQ_BASE_SHIFT; - if (vlq > 0) { - // There are still more digits in this value, so we must make sure the - // continuation bit is marked. - digit |= VLQ_CONTINUATION_BIT; - } - encoded += base64.encode(digit); - } while (vlq > 0); - - return encoded; - }; - - /** - * Decodes the next base 64 VLQ value from the given string and returns the - * value and the rest of the string via the out parameter. - */ - exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) { - var strLen = aStr.length; - var result = 0; - var shift = 0; - var continuation, digit; - - do { - if (aIndex >= strLen) { - throw new Error("Expected more digits in base 64 VLQ value."); - } - - digit = base64.decode(aStr.charCodeAt(aIndex++)); - if (digit === -1) { - throw new Error("Invalid base64 digit: " + aStr.charAt(aIndex - 1)); - } - - continuation = !!(digit & VLQ_CONTINUATION_BIT); - digit &= VLQ_BASE_MASK; - result = result + (digit << shift); - shift += VLQ_BASE_SHIFT; - } while (continuation); - - aOutParam.value = fromVLQSigned(result); - aOutParam.rest = aIndex; - }; - - -/***/ }), -/* 3 */ -/***/ (function(module, exports) { - - /* -*- Mode: js; js-indent-level: 2; -*- */ - /* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - - var intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split(''); - - /** - * Encode an integer in the range of 0 to 63 to a single base 64 digit. - */ - exports.encode = function (number) { - if (0 <= number && number < intToCharMap.length) { - return intToCharMap[number]; - } - throw new TypeError("Must be between 0 and 63: " + number); - }; - - /** - * Decode a single base 64 character code digit to an integer. Returns -1 on - * failure. - */ - exports.decode = function (charCode) { - var bigA = 65; // 'A' - var bigZ = 90; // 'Z' - - var littleA = 97; // 'a' - var littleZ = 122; // 'z' - - var zero = 48; // '0' - var nine = 57; // '9' - - var plus = 43; // '+' - var slash = 47; // '/' - - var littleOffset = 26; - var numberOffset = 52; - - // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ - if (bigA <= charCode && charCode <= bigZ) { - return (charCode - bigA); - } - - // 26 - 51: abcdefghijklmnopqrstuvwxyz - if (littleA <= charCode && charCode <= littleZ) { - return (charCode - littleA + littleOffset); - } - - // 52 - 61: 0123456789 - if (zero <= charCode && charCode <= nine) { - return (charCode - zero + numberOffset); - } - - // 62: + - if (charCode == plus) { - return 62; - } - - // 63: / - if (charCode == slash) { - return 63; - } - - // Invalid base64 digit. - return -1; - }; - - -/***/ }), -/* 4 */ -/***/ (function(module, exports) { - - /* -*- Mode: js; js-indent-level: 2; -*- */ - /* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - - /** - * This is a helper function for getting values from parameter/options - * objects. - * - * @param args The object we are extracting values from - * @param name The name of the property we are getting. - * @param defaultValue An optional value to return if the property is missing - * from the object. If this is not specified and the property is missing, an - * error will be thrown. - */ - function getArg(aArgs, aName, aDefaultValue) { - if (aName in aArgs) { - return aArgs[aName]; - } else if (arguments.length === 3) { - return aDefaultValue; - } else { - throw new Error('"' + aName + '" is a required argument.'); - } - } - exports.getArg = getArg; - - var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/; - var dataUrlRegexp = /^data:.+\,.+$/; - - function urlParse(aUrl) { - var match = aUrl.match(urlRegexp); - if (!match) { - return null; - } - return { - scheme: match[1], - auth: match[2], - host: match[3], - port: match[4], - path: match[5] - }; - } - exports.urlParse = urlParse; - - function urlGenerate(aParsedUrl) { - var url = ''; - if (aParsedUrl.scheme) { - url += aParsedUrl.scheme + ':'; - } - url += '//'; - if (aParsedUrl.auth) { - url += aParsedUrl.auth + '@'; - } - if (aParsedUrl.host) { - url += aParsedUrl.host; - } - if (aParsedUrl.port) { - url += ":" + aParsedUrl.port - } - if (aParsedUrl.path) { - url += aParsedUrl.path; - } - return url; - } - exports.urlGenerate = urlGenerate; - - /** - * Normalizes a path, or the path portion of a URL: - * - * - Replaces consecutive slashes with one slash. - * - Removes unnecessary '.' parts. - * - Removes unnecessary '/..' parts. - * - * Based on code in the Node.js 'path' core module. - * - * @param aPath The path or url to normalize. - */ - function normalize(aPath) { - var path = aPath; - var url = urlParse(aPath); - if (url) { - if (!url.path) { - return aPath; - } - path = url.path; - } - var isAbsolute = exports.isAbsolute(path); - - var parts = path.split(/\/+/); - for (var part, up = 0, i = parts.length - 1; i >= 0; i--) { - part = parts[i]; - if (part === '.') { - parts.splice(i, 1); - } else if (part === '..') { - up++; - } else if (up > 0) { - if (part === '') { - // The first part is blank if the path is absolute. Trying to go - // above the root is a no-op. Therefore we can remove all '..' parts - // directly after the root. - parts.splice(i + 1, up); - up = 0; - } else { - parts.splice(i, 2); - up--; - } - } - } - path = parts.join('/'); - - if (path === '') { - path = isAbsolute ? '/' : '.'; - } - - if (url) { - url.path = path; - return urlGenerate(url); - } - return path; - } - exports.normalize = normalize; - - /** - * Joins two paths/URLs. - * - * @param aRoot The root path or URL. - * @param aPath The path or URL to be joined with the root. - * - * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a - * scheme-relative URL: Then the scheme of aRoot, if any, is prepended - * first. - * - Otherwise aPath is a path. If aRoot is a URL, then its path portion - * is updated with the result and aRoot is returned. Otherwise the result - * is returned. - * - If aPath is absolute, the result is aPath. - * - Otherwise the two paths are joined with a slash. - * - Joining for example 'http://' and 'www.example.com' is also supported. - */ - function join(aRoot, aPath) { - if (aRoot === "") { - aRoot = "."; - } - if (aPath === "") { - aPath = "."; - } - var aPathUrl = urlParse(aPath); - var aRootUrl = urlParse(aRoot); - if (aRootUrl) { - aRoot = aRootUrl.path || '/'; - } - - // `join(foo, '//www.example.org')` - if (aPathUrl && !aPathUrl.scheme) { - if (aRootUrl) { - aPathUrl.scheme = aRootUrl.scheme; - } - return urlGenerate(aPathUrl); - } - - if (aPathUrl || aPath.match(dataUrlRegexp)) { - return aPath; - } - - // `join('http://', 'www.example.com')` - if (aRootUrl && !aRootUrl.host && !aRootUrl.path) { - aRootUrl.host = aPath; - return urlGenerate(aRootUrl); - } - - var joined = aPath.charAt(0) === '/' - ? aPath - : normalize(aRoot.replace(/\/+$/, '') + '/' + aPath); - - if (aRootUrl) { - aRootUrl.path = joined; - return urlGenerate(aRootUrl); - } - return joined; - } - exports.join = join; - - exports.isAbsolute = function (aPath) { - return aPath.charAt(0) === '/' || !!aPath.match(urlRegexp); - }; - - /** - * Make a path relative to a URL or another path. - * - * @param aRoot The root path or URL. - * @param aPath The path or URL to be made relative to aRoot. - */ - function relative(aRoot, aPath) { - if (aRoot === "") { - aRoot = "."; - } - - aRoot = aRoot.replace(/\/$/, ''); - - // It is possible for the path to be above the root. In this case, simply - // checking whether the root is a prefix of the path won't work. Instead, we - // need to remove components from the root one by one, until either we find - // a prefix that fits, or we run out of components to remove. - var level = 0; - while (aPath.indexOf(aRoot + '/') !== 0) { - var index = aRoot.lastIndexOf("/"); - if (index < 0) { - return aPath; - } - - // If the only part of the root that is left is the scheme (i.e. http://, - // file:///, etc.), one or more slashes (/), or simply nothing at all, we - // have exhausted all components, so the path is not relative to the root. - aRoot = aRoot.slice(0, index); - if (aRoot.match(/^([^\/]+:\/)?\/*$/)) { - return aPath; - } - - ++level; - } - - // Make sure we add a "../" for each component we removed from the root. - return Array(level + 1).join("../") + aPath.substr(aRoot.length + 1); - } - exports.relative = relative; - - var supportsNullProto = (function () { - var obj = Object.create(null); - return !('__proto__' in obj); - }()); - - function identity (s) { - return s; - } - - /** - * Because behavior goes wacky when you set `__proto__` on objects, we - * have to prefix all the strings in our set with an arbitrary character. - * - * See https://github.com/mozilla/source-map/pull/31 and - * https://github.com/mozilla/source-map/issues/30 - * - * @param String aStr - */ - function toSetString(aStr) { - if (isProtoString(aStr)) { - return '$' + aStr; - } - - return aStr; - } - exports.toSetString = supportsNullProto ? identity : toSetString; - - function fromSetString(aStr) { - if (isProtoString(aStr)) { - return aStr.slice(1); - } - - return aStr; - } - exports.fromSetString = supportsNullProto ? identity : fromSetString; - - function isProtoString(s) { - if (!s) { - return false; - } - - var length = s.length; - - if (length < 9 /* "__proto__".length */) { - return false; - } - - if (s.charCodeAt(length - 1) !== 95 /* '_' */ || - s.charCodeAt(length - 2) !== 95 /* '_' */ || - s.charCodeAt(length - 3) !== 111 /* 'o' */ || - s.charCodeAt(length - 4) !== 116 /* 't' */ || - s.charCodeAt(length - 5) !== 111 /* 'o' */ || - s.charCodeAt(length - 6) !== 114 /* 'r' */ || - s.charCodeAt(length - 7) !== 112 /* 'p' */ || - s.charCodeAt(length - 8) !== 95 /* '_' */ || - s.charCodeAt(length - 9) !== 95 /* '_' */) { - return false; - } - - for (var i = length - 10; i >= 0; i--) { - if (s.charCodeAt(i) !== 36 /* '$' */) { - return false; - } - } - - return true; - } - - /** - * Comparator between two mappings where the original positions are compared. - * - * Optionally pass in `true` as `onlyCompareGenerated` to consider two - * mappings with the same original source/line/column, but different generated - * line and column the same. Useful when searching for a mapping with a - * stubbed out mapping. - */ - function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) { - var cmp = mappingA.source - mappingB.source; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.originalLine - mappingB.originalLine; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.originalColumn - mappingB.originalColumn; - if (cmp !== 0 || onlyCompareOriginal) { - return cmp; - } - - cmp = mappingA.generatedColumn - mappingB.generatedColumn; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.generatedLine - mappingB.generatedLine; - if (cmp !== 0) { - return cmp; - } - - return mappingA.name - mappingB.name; - } - exports.compareByOriginalPositions = compareByOriginalPositions; - - /** - * Comparator between two mappings with deflated source and name indices where - * the generated positions are compared. - * - * Optionally pass in `true` as `onlyCompareGenerated` to consider two - * mappings with the same generated line and column, but different - * source/name/original line and column the same. Useful when searching for a - * mapping with a stubbed out mapping. - */ - function compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) { - var cmp = mappingA.generatedLine - mappingB.generatedLine; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.generatedColumn - mappingB.generatedColumn; - if (cmp !== 0 || onlyCompareGenerated) { - return cmp; - } - - cmp = mappingA.source - mappingB.source; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.originalLine - mappingB.originalLine; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.originalColumn - mappingB.originalColumn; - if (cmp !== 0) { - return cmp; - } - - return mappingA.name - mappingB.name; - } - exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated; - - function strcmp(aStr1, aStr2) { - if (aStr1 === aStr2) { - return 0; - } - - if (aStr1 > aStr2) { - return 1; - } - - return -1; - } - - /** - * Comparator between two mappings with inflated source and name strings where - * the generated positions are compared. - */ - function compareByGeneratedPositionsInflated(mappingA, mappingB) { - var cmp = mappingA.generatedLine - mappingB.generatedLine; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.generatedColumn - mappingB.generatedColumn; - if (cmp !== 0) { - return cmp; - } - - cmp = strcmp(mappingA.source, mappingB.source); - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.originalLine - mappingB.originalLine; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.originalColumn - mappingB.originalColumn; - if (cmp !== 0) { - return cmp; - } - - return strcmp(mappingA.name, mappingB.name); - } - exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated; - - -/***/ }), -/* 5 */ -/***/ (function(module, exports, __webpack_require__) { - - /* -*- Mode: js; js-indent-level: 2; -*- */ - /* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - - var util = __webpack_require__(4); - var has = Object.prototype.hasOwnProperty; - var hasNativeMap = typeof Map !== "undefined"; - - /** - * A data structure which is a combination of an array and a set. Adding a new - * member is O(1), testing for membership is O(1), and finding the index of an - * element is O(1). Removing elements from the set is not supported. Only - * strings are supported for membership. - */ - function ArraySet() { - this._array = []; - this._set = hasNativeMap ? new Map() : Object.create(null); - } - - /** - * Static method for creating ArraySet instances from an existing array. - */ - ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) { - var set = new ArraySet(); - for (var i = 0, len = aArray.length; i < len; i++) { - set.add(aArray[i], aAllowDuplicates); - } - return set; - }; - - /** - * Return how many unique items are in this ArraySet. If duplicates have been - * added, than those do not count towards the size. - * - * @returns Number - */ - ArraySet.prototype.size = function ArraySet_size() { - return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length; - }; - - /** - * Add the given string to this set. - * - * @param String aStr - */ - ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) { - var sStr = hasNativeMap ? aStr : util.toSetString(aStr); - var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr); - var idx = this._array.length; - if (!isDuplicate || aAllowDuplicates) { - this._array.push(aStr); - } - if (!isDuplicate) { - if (hasNativeMap) { - this._set.set(aStr, idx); - } else { - this._set[sStr] = idx; - } - } - }; - - /** - * Is the given string a member of this set? - * - * @param String aStr - */ - ArraySet.prototype.has = function ArraySet_has(aStr) { - if (hasNativeMap) { - return this._set.has(aStr); - } else { - var sStr = util.toSetString(aStr); - return has.call(this._set, sStr); - } - }; - - /** - * What is the index of the given string in the array? - * - * @param String aStr - */ - ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) { - if (hasNativeMap) { - var idx = this._set.get(aStr); - if (idx >= 0) { - return idx; - } - } else { - var sStr = util.toSetString(aStr); - if (has.call(this._set, sStr)) { - return this._set[sStr]; - } - } - - throw new Error('"' + aStr + '" is not in the set.'); - }; - - /** - * What is the element at the given index? - * - * @param Number aIdx - */ - ArraySet.prototype.at = function ArraySet_at(aIdx) { - if (aIdx >= 0 && aIdx < this._array.length) { - return this._array[aIdx]; - } - throw new Error('No element indexed by ' + aIdx); - }; - - /** - * Returns the array representation of this set (which has the proper indices - * indicated by indexOf). Note that this is a copy of the internal array used - * for storing the members so that no one can mess with internal state. - */ - ArraySet.prototype.toArray = function ArraySet_toArray() { - return this._array.slice(); - }; - - exports.ArraySet = ArraySet; - - -/***/ }), -/* 6 */ -/***/ (function(module, exports, __webpack_require__) { - - /* -*- Mode: js; js-indent-level: 2; -*- */ - /* - * Copyright 2014 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - - var util = __webpack_require__(4); - - /** - * Determine whether mappingB is after mappingA with respect to generated - * position. - */ - function generatedPositionAfter(mappingA, mappingB) { - // Optimized for most common case - var lineA = mappingA.generatedLine; - var lineB = mappingB.generatedLine; - var columnA = mappingA.generatedColumn; - var columnB = mappingB.generatedColumn; - return lineB > lineA || lineB == lineA && columnB >= columnA || - util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0; - } - - /** - * A data structure to provide a sorted view of accumulated mappings in a - * performance conscious manner. It trades a neglibable overhead in general - * case for a large speedup in case of mappings being added in order. - */ - function MappingList() { - this._array = []; - this._sorted = true; - // Serves as infimum - this._last = {generatedLine: -1, generatedColumn: 0}; - } - - /** - * Iterate through internal items. This method takes the same arguments that - * `Array.prototype.forEach` takes. - * - * NOTE: The order of the mappings is NOT guaranteed. - */ - MappingList.prototype.unsortedForEach = - function MappingList_forEach(aCallback, aThisArg) { - this._array.forEach(aCallback, aThisArg); - }; - - /** - * Add the given source mapping. - * - * @param Object aMapping - */ - MappingList.prototype.add = function MappingList_add(aMapping) { - if (generatedPositionAfter(this._last, aMapping)) { - this._last = aMapping; - this._array.push(aMapping); - } else { - this._sorted = false; - this._array.push(aMapping); - } - }; - - /** - * Returns the flat, sorted array of mappings. The mappings are sorted by - * generated position. - * - * WARNING: This method returns internal data without copying, for - * performance. The return value must NOT be mutated, and should be treated as - * an immutable borrow. If you want to take ownership, you must make your own - * copy. - */ - MappingList.prototype.toArray = function MappingList_toArray() { - if (!this._sorted) { - this._array.sort(util.compareByGeneratedPositionsInflated); - this._sorted = true; - } - return this._array; - }; - - exports.MappingList = MappingList; - - -/***/ }), -/* 7 */ -/***/ (function(module, exports, __webpack_require__) { - - /* -*- Mode: js; js-indent-level: 2; -*- */ - /* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - - var util = __webpack_require__(4); - var binarySearch = __webpack_require__(8); - var ArraySet = __webpack_require__(5).ArraySet; - var base64VLQ = __webpack_require__(2); - var quickSort = __webpack_require__(9).quickSort; - - function SourceMapConsumer(aSourceMap) { - var sourceMap = aSourceMap; - if (typeof aSourceMap === 'string') { - sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, '')); - } - - return sourceMap.sections != null - ? new IndexedSourceMapConsumer(sourceMap) - : new BasicSourceMapConsumer(sourceMap); - } - - SourceMapConsumer.fromSourceMap = function(aSourceMap) { - return BasicSourceMapConsumer.fromSourceMap(aSourceMap); - } - - /** - * The version of the source mapping spec that we are consuming. - */ - SourceMapConsumer.prototype._version = 3; - - // `__generatedMappings` and `__originalMappings` are arrays that hold the - // parsed mapping coordinates from the source map's "mappings" attribute. They - // are lazily instantiated, accessed via the `_generatedMappings` and - // `_originalMappings` getters respectively, and we only parse the mappings - // and create these arrays once queried for a source location. We jump through - // these hoops because there can be many thousands of mappings, and parsing - // them is expensive, so we only want to do it if we must. - // - // Each object in the arrays is of the form: - // - // { - // generatedLine: The line number in the generated code, - // generatedColumn: The column number in the generated code, - // source: The path to the original source file that generated this - // chunk of code, - // originalLine: The line number in the original source that - // corresponds to this chunk of generated code, - // originalColumn: The column number in the original source that - // corresponds to this chunk of generated code, - // name: The name of the original symbol which generated this chunk of - // code. - // } - // - // All properties except for `generatedLine` and `generatedColumn` can be - // `null`. - // - // `_generatedMappings` is ordered by the generated positions. - // - // `_originalMappings` is ordered by the original positions. - - SourceMapConsumer.prototype.__generatedMappings = null; - Object.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', { - get: function () { - if (!this.__generatedMappings) { - this._parseMappings(this._mappings, this.sourceRoot); - } - - return this.__generatedMappings; - } - }); - - SourceMapConsumer.prototype.__originalMappings = null; - Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', { - get: function () { - if (!this.__originalMappings) { - this._parseMappings(this._mappings, this.sourceRoot); - } - - return this.__originalMappings; - } - }); - - SourceMapConsumer.prototype._charIsMappingSeparator = - function SourceMapConsumer_charIsMappingSeparator(aStr, index) { - var c = aStr.charAt(index); - return c === ";" || c === ","; - }; - - /** - * Parse the mappings in a string in to a data structure which we can easily - * query (the ordered arrays in the `this.__generatedMappings` and - * `this.__originalMappings` properties). - */ - SourceMapConsumer.prototype._parseMappings = - function SourceMapConsumer_parseMappings(aStr, aSourceRoot) { - throw new Error("Subclasses must implement _parseMappings"); - }; - - SourceMapConsumer.GENERATED_ORDER = 1; - SourceMapConsumer.ORIGINAL_ORDER = 2; - - SourceMapConsumer.GREATEST_LOWER_BOUND = 1; - SourceMapConsumer.LEAST_UPPER_BOUND = 2; - - /** - * Iterate over each mapping between an original source/line/column and a - * generated line/column in this source map. - * - * @param Function aCallback - * The function that is called with each mapping. - * @param Object aContext - * Optional. If specified, this object will be the value of `this` every - * time that `aCallback` is called. - * @param aOrder - * Either `SourceMapConsumer.GENERATED_ORDER` or - * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to - * iterate over the mappings sorted by the generated file's line/column - * order or the original's source/line/column order, respectively. Defaults to - * `SourceMapConsumer.GENERATED_ORDER`. - */ - SourceMapConsumer.prototype.eachMapping = - function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) { - var context = aContext || null; - var order = aOrder || SourceMapConsumer.GENERATED_ORDER; - - var mappings; - switch (order) { - case SourceMapConsumer.GENERATED_ORDER: - mappings = this._generatedMappings; - break; - case SourceMapConsumer.ORIGINAL_ORDER: - mappings = this._originalMappings; - break; - default: - throw new Error("Unknown order of iteration."); - } - - var sourceRoot = this.sourceRoot; - mappings.map(function (mapping) { - var source = mapping.source === null ? null : this._sources.at(mapping.source); - if (source != null && sourceRoot != null) { - source = util.join(sourceRoot, source); - } - return { - source: source, - generatedLine: mapping.generatedLine, - generatedColumn: mapping.generatedColumn, - originalLine: mapping.originalLine, - originalColumn: mapping.originalColumn, - name: mapping.name === null ? null : this._names.at(mapping.name) - }; - }, this).forEach(aCallback, context); - }; - - /** - * Returns all generated line and column information for the original source, - * line, and column provided. If no column is provided, returns all mappings - * corresponding to a either the line we are searching for or the next - * closest line that has any mappings. Otherwise, returns all mappings - * corresponding to the given line and either the column we are searching for - * or the next closest column that has any offsets. - * - * The only argument is an object with the following properties: - * - * - source: The filename of the original source. - * - line: The line number in the original source. - * - column: Optional. the column number in the original source. - * - * and an array of objects is returned, each with the following properties: - * - * - line: The line number in the generated source, or null. - * - column: The column number in the generated source, or null. - */ - SourceMapConsumer.prototype.allGeneratedPositionsFor = - function SourceMapConsumer_allGeneratedPositionsFor(aArgs) { - var line = util.getArg(aArgs, 'line'); - - // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping - // returns the index of the closest mapping less than the needle. By - // setting needle.originalColumn to 0, we thus find the last mapping for - // the given line, provided such a mapping exists. - var needle = { - source: util.getArg(aArgs, 'source'), - originalLine: line, - originalColumn: util.getArg(aArgs, 'column', 0) - }; - - if (this.sourceRoot != null) { - needle.source = util.relative(this.sourceRoot, needle.source); - } - if (!this._sources.has(needle.source)) { - return []; - } - needle.source = this._sources.indexOf(needle.source); - - var mappings = []; - - var index = this._findMapping(needle, - this._originalMappings, - "originalLine", - "originalColumn", - util.compareByOriginalPositions, - binarySearch.LEAST_UPPER_BOUND); - if (index >= 0) { - var mapping = this._originalMappings[index]; - - if (aArgs.column === undefined) { - var originalLine = mapping.originalLine; - - // Iterate until either we run out of mappings, or we run into - // a mapping for a different line than the one we found. Since - // mappings are sorted, this is guaranteed to find all mappings for - // the line we found. - while (mapping && mapping.originalLine === originalLine) { - mappings.push({ - line: util.getArg(mapping, 'generatedLine', null), - column: util.getArg(mapping, 'generatedColumn', null), - lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) - }); - - mapping = this._originalMappings[++index]; - } - } else { - var originalColumn = mapping.originalColumn; - - // Iterate until either we run out of mappings, or we run into - // a mapping for a different line than the one we were searching for. - // Since mappings are sorted, this is guaranteed to find all mappings for - // the line we are searching for. - while (mapping && - mapping.originalLine === line && - mapping.originalColumn == originalColumn) { - mappings.push({ - line: util.getArg(mapping, 'generatedLine', null), - column: util.getArg(mapping, 'generatedColumn', null), - lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) - }); - - mapping = this._originalMappings[++index]; - } - } - } - - return mappings; - }; - - exports.SourceMapConsumer = SourceMapConsumer; - - /** - * A BasicSourceMapConsumer instance represents a parsed source map which we can - * query for information about the original file positions by giving it a file - * position in the generated source. - * - * The only parameter is the raw source map (either as a JSON string, or - * already parsed to an object). According to the spec, source maps have the - * following attributes: - * - * - version: Which version of the source map spec this map is following. - * - sources: An array of URLs to the original source files. - * - names: An array of identifiers which can be referrenced by individual mappings. - * - sourceRoot: Optional. The URL root from which all sources are relative. - * - sourcesContent: Optional. An array of contents of the original source files. - * - mappings: A string of base64 VLQs which contain the actual mappings. - * - file: Optional. The generated file this source map is associated with. - * - * Here is an example source map, taken from the source map spec[0]: - * - * { - * version : 3, - * file: "out.js", - * sourceRoot : "", - * sources: ["foo.js", "bar.js"], - * names: ["src", "maps", "are", "fun"], - * mappings: "AA,AB;;ABCDE;" - * } - * - * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1# - */ - function BasicSourceMapConsumer(aSourceMap) { - var sourceMap = aSourceMap; - if (typeof aSourceMap === 'string') { - sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, '')); - } - - var version = util.getArg(sourceMap, 'version'); - var sources = util.getArg(sourceMap, 'sources'); - // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which - // requires the array) to play nice here. - var names = util.getArg(sourceMap, 'names', []); - var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null); - var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null); - var mappings = util.getArg(sourceMap, 'mappings'); - var file = util.getArg(sourceMap, 'file', null); - - // Once again, Sass deviates from the spec and supplies the version as a - // string rather than a number, so we use loose equality checking here. - if (version != this._version) { - throw new Error('Unsupported version: ' + version); - } - - sources = sources - .map(String) - // Some source maps produce relative source paths like "./foo.js" instead of - // "foo.js". Normalize these first so that future comparisons will succeed. - // See bugzil.la/1090768. - .map(util.normalize) - // Always ensure that absolute sources are internally stored relative to - // the source root, if the source root is absolute. Not doing this would - // be particularly problematic when the source root is a prefix of the - // source (valid, but why??). See github issue #199 and bugzil.la/1188982. - .map(function (source) { - return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source) - ? util.relative(sourceRoot, source) - : source; - }); - - // Pass `true` below to allow duplicate names and sources. While source maps - // are intended to be compressed and deduplicated, the TypeScript compiler - // sometimes generates source maps with duplicates in them. See Github issue - // #72 and bugzil.la/889492. - this._names = ArraySet.fromArray(names.map(String), true); - this._sources = ArraySet.fromArray(sources, true); - - this.sourceRoot = sourceRoot; - this.sourcesContent = sourcesContent; - this._mappings = mappings; - this.file = file; - } - - BasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype); - BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer; - - /** - * Create a BasicSourceMapConsumer from a SourceMapGenerator. - * - * @param SourceMapGenerator aSourceMap - * The source map that will be consumed. - * @returns BasicSourceMapConsumer - */ - BasicSourceMapConsumer.fromSourceMap = - function SourceMapConsumer_fromSourceMap(aSourceMap) { - var smc = Object.create(BasicSourceMapConsumer.prototype); - - var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true); - var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true); - smc.sourceRoot = aSourceMap._sourceRoot; - smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(), - smc.sourceRoot); - smc.file = aSourceMap._file; - - // Because we are modifying the entries (by converting string sources and - // names to indices into the sources and names ArraySets), we have to make - // a copy of the entry or else bad things happen. Shared mutable state - // strikes again! See github issue #191. - - var generatedMappings = aSourceMap._mappings.toArray().slice(); - var destGeneratedMappings = smc.__generatedMappings = []; - var destOriginalMappings = smc.__originalMappings = []; - - for (var i = 0, length = generatedMappings.length; i < length; i++) { - var srcMapping = generatedMappings[i]; - var destMapping = new Mapping; - destMapping.generatedLine = srcMapping.generatedLine; - destMapping.generatedColumn = srcMapping.generatedColumn; - - if (srcMapping.source) { - destMapping.source = sources.indexOf(srcMapping.source); - destMapping.originalLine = srcMapping.originalLine; - destMapping.originalColumn = srcMapping.originalColumn; - - if (srcMapping.name) { - destMapping.name = names.indexOf(srcMapping.name); - } - - destOriginalMappings.push(destMapping); - } - - destGeneratedMappings.push(destMapping); - } - - quickSort(smc.__originalMappings, util.compareByOriginalPositions); - - return smc; - }; - - /** - * The version of the source mapping spec that we are consuming. - */ - BasicSourceMapConsumer.prototype._version = 3; - - /** - * The list of original sources. - */ - Object.defineProperty(BasicSourceMapConsumer.prototype, 'sources', { - get: function () { - return this._sources.toArray().map(function (s) { - return this.sourceRoot != null ? util.join(this.sourceRoot, s) : s; - }, this); - } - }); - - /** - * Provide the JIT with a nice shape / hidden class. - */ - function Mapping() { - this.generatedLine = 0; - this.generatedColumn = 0; - this.source = null; - this.originalLine = null; - this.originalColumn = null; - this.name = null; - } - - /** - * Parse the mappings in a string in to a data structure which we can easily - * query (the ordered arrays in the `this.__generatedMappings` and - * `this.__originalMappings` properties). - */ - BasicSourceMapConsumer.prototype._parseMappings = - function SourceMapConsumer_parseMappings(aStr, aSourceRoot) { - var generatedLine = 1; - var previousGeneratedColumn = 0; - var previousOriginalLine = 0; - var previousOriginalColumn = 0; - var previousSource = 0; - var previousName = 0; - var length = aStr.length; - var index = 0; - var cachedSegments = {}; - var temp = {}; - var originalMappings = []; - var generatedMappings = []; - var mapping, str, segment, end, value; - - while (index < length) { - if (aStr.charAt(index) === ';') { - generatedLine++; - index++; - previousGeneratedColumn = 0; - } - else if (aStr.charAt(index) === ',') { - index++; - } - else { - mapping = new Mapping(); - mapping.generatedLine = generatedLine; - - // Because each offset is encoded relative to the previous one, - // many segments often have the same encoding. We can exploit this - // fact by caching the parsed variable length fields of each segment, - // allowing us to avoid a second parse if we encounter the same - // segment again. - for (end = index; end < length; end++) { - if (this._charIsMappingSeparator(aStr, end)) { - break; - } - } - str = aStr.slice(index, end); - - segment = cachedSegments[str]; - if (segment) { - index += str.length; - } else { - segment = []; - while (index < end) { - base64VLQ.decode(aStr, index, temp); - value = temp.value; - index = temp.rest; - segment.push(value); - } - - if (segment.length === 2) { - throw new Error('Found a source, but no line and column'); - } - - if (segment.length === 3) { - throw new Error('Found a source and line, but no column'); - } - - cachedSegments[str] = segment; - } - - // Generated column. - mapping.generatedColumn = previousGeneratedColumn + segment[0]; - previousGeneratedColumn = mapping.generatedColumn; - - if (segment.length > 1) { - // Original source. - mapping.source = previousSource + segment[1]; - previousSource += segment[1]; - - // Original line. - mapping.originalLine = previousOriginalLine + segment[2]; - previousOriginalLine = mapping.originalLine; - // Lines are stored 0-based - mapping.originalLine += 1; - - // Original column. - mapping.originalColumn = previousOriginalColumn + segment[3]; - previousOriginalColumn = mapping.originalColumn; - - if (segment.length > 4) { - // Original name. - mapping.name = previousName + segment[4]; - previousName += segment[4]; - } - } - - generatedMappings.push(mapping); - if (typeof mapping.originalLine === 'number') { - originalMappings.push(mapping); - } - } - } - - quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated); - this.__generatedMappings = generatedMappings; - - quickSort(originalMappings, util.compareByOriginalPositions); - this.__originalMappings = originalMappings; - }; - - /** - * Find the mapping that best matches the hypothetical "needle" mapping that - * we are searching for in the given "haystack" of mappings. - */ - BasicSourceMapConsumer.prototype._findMapping = - function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName, - aColumnName, aComparator, aBias) { - // To return the position we are searching for, we must first find the - // mapping for the given position and then return the opposite position it - // points to. Because the mappings are sorted, we can use binary search to - // find the best mapping. - - if (aNeedle[aLineName] <= 0) { - throw new TypeError('Line must be greater than or equal to 1, got ' - + aNeedle[aLineName]); - } - if (aNeedle[aColumnName] < 0) { - throw new TypeError('Column must be greater than or equal to 0, got ' - + aNeedle[aColumnName]); - } - - return binarySearch.search(aNeedle, aMappings, aComparator, aBias); - }; - - /** - * Compute the last column for each generated mapping. The last column is - * inclusive. - */ - BasicSourceMapConsumer.prototype.computeColumnSpans = - function SourceMapConsumer_computeColumnSpans() { - for (var index = 0; index < this._generatedMappings.length; ++index) { - var mapping = this._generatedMappings[index]; - - // Mappings do not contain a field for the last generated columnt. We - // can come up with an optimistic estimate, however, by assuming that - // mappings are contiguous (i.e. given two consecutive mappings, the - // first mapping ends where the second one starts). - if (index + 1 < this._generatedMappings.length) { - var nextMapping = this._generatedMappings[index + 1]; - - if (mapping.generatedLine === nextMapping.generatedLine) { - mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1; - continue; - } - } - - // The last mapping for each line spans the entire line. - mapping.lastGeneratedColumn = Infinity; - } - }; - - /** - * Returns the original source, line, and column information for the generated - * source's line and column positions provided. The only argument is an object - * with the following properties: - * - * - line: The line number in the generated source. - * - column: The column number in the generated source. - * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or - * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the - * closest element that is smaller than or greater than the one we are - * searching for, respectively, if the exact element cannot be found. - * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'. - * - * and an object is returned with the following properties: - * - * - source: The original source file, or null. - * - line: The line number in the original source, or null. - * - column: The column number in the original source, or null. - * - name: The original identifier, or null. - */ - BasicSourceMapConsumer.prototype.originalPositionFor = - function SourceMapConsumer_originalPositionFor(aArgs) { - var needle = { - generatedLine: util.getArg(aArgs, 'line'), - generatedColumn: util.getArg(aArgs, 'column') - }; - - var index = this._findMapping( - needle, - this._generatedMappings, - "generatedLine", - "generatedColumn", - util.compareByGeneratedPositionsDeflated, - util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND) - ); - - if (index >= 0) { - var mapping = this._generatedMappings[index]; - - if (mapping.generatedLine === needle.generatedLine) { - var source = util.getArg(mapping, 'source', null); - if (source !== null) { - source = this._sources.at(source); - if (this.sourceRoot != null) { - source = util.join(this.sourceRoot, source); - } - } - var name = util.getArg(mapping, 'name', null); - if (name !== null) { - name = this._names.at(name); - } - return { - source: source, - line: util.getArg(mapping, 'originalLine', null), - column: util.getArg(mapping, 'originalColumn', null), - name: name - }; - } - } - - return { - source: null, - line: null, - column: null, - name: null - }; - }; - - /** - * Return true if we have the source content for every source in the source - * map, false otherwise. - */ - BasicSourceMapConsumer.prototype.hasContentsOfAllSources = - function BasicSourceMapConsumer_hasContentsOfAllSources() { - if (!this.sourcesContent) { - return false; - } - return this.sourcesContent.length >= this._sources.size() && - !this.sourcesContent.some(function (sc) { return sc == null; }); - }; - - /** - * Returns the original source content. The only argument is the url of the - * original source file. Returns null if no original source content is - * available. - */ - BasicSourceMapConsumer.prototype.sourceContentFor = - function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) { - if (!this.sourcesContent) { - return null; - } - - if (this.sourceRoot != null) { - aSource = util.relative(this.sourceRoot, aSource); - } - - if (this._sources.has(aSource)) { - return this.sourcesContent[this._sources.indexOf(aSource)]; - } - - var url; - if (this.sourceRoot != null - && (url = util.urlParse(this.sourceRoot))) { - // XXX: file:// URIs and absolute paths lead to unexpected behavior for - // many users. We can help them out when they expect file:// URIs to - // behave like it would if they were running a local HTTP server. See - // https://bugzilla.mozilla.org/show_bug.cgi?id=885597. - var fileUriAbsPath = aSource.replace(/^file:\/\//, ""); - if (url.scheme == "file" - && this._sources.has(fileUriAbsPath)) { - return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)] - } - - if ((!url.path || url.path == "/") - && this._sources.has("/" + aSource)) { - return this.sourcesContent[this._sources.indexOf("/" + aSource)]; - } - } - - // This function is used recursively from - // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we - // don't want to throw if we can't find the source - we just want to - // return null, so we provide a flag to exit gracefully. - if (nullOnMissing) { - return null; - } - else { - throw new Error('"' + aSource + '" is not in the SourceMap.'); - } - }; - - /** - * Returns the generated line and column information for the original source, - * line, and column positions provided. The only argument is an object with - * the following properties: - * - * - source: The filename of the original source. - * - line: The line number in the original source. - * - column: The column number in the original source. - * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or - * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the - * closest element that is smaller than or greater than the one we are - * searching for, respectively, if the exact element cannot be found. - * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'. - * - * and an object is returned with the following properties: - * - * - line: The line number in the generated source, or null. - * - column: The column number in the generated source, or null. - */ - BasicSourceMapConsumer.prototype.generatedPositionFor = - function SourceMapConsumer_generatedPositionFor(aArgs) { - var source = util.getArg(aArgs, 'source'); - if (this.sourceRoot != null) { - source = util.relative(this.sourceRoot, source); - } - if (!this._sources.has(source)) { - return { - line: null, - column: null, - lastColumn: null - }; - } - source = this._sources.indexOf(source); - - var needle = { - source: source, - originalLine: util.getArg(aArgs, 'line'), - originalColumn: util.getArg(aArgs, 'column') - }; - - var index = this._findMapping( - needle, - this._originalMappings, - "originalLine", - "originalColumn", - util.compareByOriginalPositions, - util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND) - ); - - if (index >= 0) { - var mapping = this._originalMappings[index]; - - if (mapping.source === needle.source) { - return { - line: util.getArg(mapping, 'generatedLine', null), - column: util.getArg(mapping, 'generatedColumn', null), - lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) - }; - } - } - - return { - line: null, - column: null, - lastColumn: null - }; - }; - - exports.BasicSourceMapConsumer = BasicSourceMapConsumer; - - /** - * An IndexedSourceMapConsumer instance represents a parsed source map which - * we can query for information. It differs from BasicSourceMapConsumer in - * that it takes "indexed" source maps (i.e. ones with a "sections" field) as - * input. - * - * The only parameter is a raw source map (either as a JSON string, or already - * parsed to an object). According to the spec for indexed source maps, they - * have the following attributes: - * - * - version: Which version of the source map spec this map is following. - * - file: Optional. The generated file this source map is associated with. - * - sections: A list of section definitions. - * - * Each value under the "sections" field has two fields: - * - offset: The offset into the original specified at which this section - * begins to apply, defined as an object with a "line" and "column" - * field. - * - map: A source map definition. This source map could also be indexed, - * but doesn't have to be. - * - * Instead of the "map" field, it's also possible to have a "url" field - * specifying a URL to retrieve a source map from, but that's currently - * unsupported. - * - * Here's an example source map, taken from the source map spec[0], but - * modified to omit a section which uses the "url" field. - * - * { - * version : 3, - * file: "app.js", - * sections: [{ - * offset: {line:100, column:10}, - * map: { - * version : 3, - * file: "section.js", - * sources: ["foo.js", "bar.js"], - * names: ["src", "maps", "are", "fun"], - * mappings: "AAAA,E;;ABCDE;" - * } - * }], - * } - * - * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt - */ - function IndexedSourceMapConsumer(aSourceMap) { - var sourceMap = aSourceMap; - if (typeof aSourceMap === 'string') { - sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, '')); - } - - var version = util.getArg(sourceMap, 'version'); - var sections = util.getArg(sourceMap, 'sections'); - - if (version != this._version) { - throw new Error('Unsupported version: ' + version); - } - - this._sources = new ArraySet(); - this._names = new ArraySet(); - - var lastOffset = { - line: -1, - column: 0 - }; - this._sections = sections.map(function (s) { - if (s.url) { - // The url field will require support for asynchronicity. - // See https://github.com/mozilla/source-map/issues/16 - throw new Error('Support for url field in sections not implemented.'); - } - var offset = util.getArg(s, 'offset'); - var offsetLine = util.getArg(offset, 'line'); - var offsetColumn = util.getArg(offset, 'column'); - - if (offsetLine < lastOffset.line || - (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) { - throw new Error('Section offsets must be ordered and non-overlapping.'); - } - lastOffset = offset; - - return { - generatedOffset: { - // The offset fields are 0-based, but we use 1-based indices when - // encoding/decoding from VLQ. - generatedLine: offsetLine + 1, - generatedColumn: offsetColumn + 1 - }, - consumer: new SourceMapConsumer(util.getArg(s, 'map')) - } - }); - } - - IndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype); - IndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer; - - /** - * The version of the source mapping spec that we are consuming. - */ - IndexedSourceMapConsumer.prototype._version = 3; - - /** - * The list of original sources. - */ - Object.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', { - get: function () { - var sources = []; - for (var i = 0; i < this._sections.length; i++) { - for (var j = 0; j < this._sections[i].consumer.sources.length; j++) { - sources.push(this._sections[i].consumer.sources[j]); - } - } - return sources; - } - }); - - /** - * Returns the original source, line, and column information for the generated - * source's line and column positions provided. The only argument is an object - * with the following properties: - * - * - line: The line number in the generated source. - * - column: The column number in the generated source. - * - * and an object is returned with the following properties: - * - * - source: The original source file, or null. - * - line: The line number in the original source, or null. - * - column: The column number in the original source, or null. - * - name: The original identifier, or null. - */ - IndexedSourceMapConsumer.prototype.originalPositionFor = - function IndexedSourceMapConsumer_originalPositionFor(aArgs) { - var needle = { - generatedLine: util.getArg(aArgs, 'line'), - generatedColumn: util.getArg(aArgs, 'column') - }; - - // Find the section containing the generated position we're trying to map - // to an original position. - var sectionIndex = binarySearch.search(needle, this._sections, - function(needle, section) { - var cmp = needle.generatedLine - section.generatedOffset.generatedLine; - if (cmp) { - return cmp; - } - - return (needle.generatedColumn - - section.generatedOffset.generatedColumn); - }); - var section = this._sections[sectionIndex]; - - if (!section) { - return { - source: null, - line: null, - column: null, - name: null - }; - } - - return section.consumer.originalPositionFor({ - line: needle.generatedLine - - (section.generatedOffset.generatedLine - 1), - column: needle.generatedColumn - - (section.generatedOffset.generatedLine === needle.generatedLine - ? section.generatedOffset.generatedColumn - 1 - : 0), - bias: aArgs.bias - }); - }; - - /** - * Return true if we have the source content for every source in the source - * map, false otherwise. - */ - IndexedSourceMapConsumer.prototype.hasContentsOfAllSources = - function IndexedSourceMapConsumer_hasContentsOfAllSources() { - return this._sections.every(function (s) { - return s.consumer.hasContentsOfAllSources(); - }); - }; - - /** - * Returns the original source content. The only argument is the url of the - * original source file. Returns null if no original source content is - * available. - */ - IndexedSourceMapConsumer.prototype.sourceContentFor = - function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) { - for (var i = 0; i < this._sections.length; i++) { - var section = this._sections[i]; - - var content = section.consumer.sourceContentFor(aSource, true); - if (content) { - return content; - } - } - if (nullOnMissing) { - return null; - } - else { - throw new Error('"' + aSource + '" is not in the SourceMap.'); - } - }; - - /** - * Returns the generated line and column information for the original source, - * line, and column positions provided. The only argument is an object with - * the following properties: - * - * - source: The filename of the original source. - * - line: The line number in the original source. - * - column: The column number in the original source. - * - * and an object is returned with the following properties: - * - * - line: The line number in the generated source, or null. - * - column: The column number in the generated source, or null. - */ - IndexedSourceMapConsumer.prototype.generatedPositionFor = - function IndexedSourceMapConsumer_generatedPositionFor(aArgs) { - for (var i = 0; i < this._sections.length; i++) { - var section = this._sections[i]; - - // Only consider this section if the requested source is in the list of - // sources of the consumer. - if (section.consumer.sources.indexOf(util.getArg(aArgs, 'source')) === -1) { - continue; - } - var generatedPosition = section.consumer.generatedPositionFor(aArgs); - if (generatedPosition) { - var ret = { - line: generatedPosition.line + - (section.generatedOffset.generatedLine - 1), - column: generatedPosition.column + - (section.generatedOffset.generatedLine === generatedPosition.line - ? section.generatedOffset.generatedColumn - 1 - : 0) - }; - return ret; - } - } - - return { - line: null, - column: null - }; - }; - - /** - * Parse the mappings in a string in to a data structure which we can easily - * query (the ordered arrays in the `this.__generatedMappings` and - * `this.__originalMappings` properties). - */ - IndexedSourceMapConsumer.prototype._parseMappings = - function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) { - this.__generatedMappings = []; - this.__originalMappings = []; - for (var i = 0; i < this._sections.length; i++) { - var section = this._sections[i]; - var sectionMappings = section.consumer._generatedMappings; - for (var j = 0; j < sectionMappings.length; j++) { - var mapping = sectionMappings[j]; - - var source = section.consumer._sources.at(mapping.source); - if (section.consumer.sourceRoot !== null) { - source = util.join(section.consumer.sourceRoot, source); - } - this._sources.add(source); - source = this._sources.indexOf(source); - - var name = section.consumer._names.at(mapping.name); - this._names.add(name); - name = this._names.indexOf(name); - - // The mappings coming from the consumer for the section have - // generated positions relative to the start of the section, so we - // need to offset them to be relative to the start of the concatenated - // generated file. - var adjustedMapping = { - source: source, - generatedLine: mapping.generatedLine + - (section.generatedOffset.generatedLine - 1), - generatedColumn: mapping.generatedColumn + - (section.generatedOffset.generatedLine === mapping.generatedLine - ? section.generatedOffset.generatedColumn - 1 - : 0), - originalLine: mapping.originalLine, - originalColumn: mapping.originalColumn, - name: name - }; - - this.__generatedMappings.push(adjustedMapping); - if (typeof adjustedMapping.originalLine === 'number') { - this.__originalMappings.push(adjustedMapping); - } - } - } - - quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated); - quickSort(this.__originalMappings, util.compareByOriginalPositions); - }; - - exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer; - - -/***/ }), -/* 8 */ -/***/ (function(module, exports) { - - /* -*- Mode: js; js-indent-level: 2; -*- */ - /* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - - exports.GREATEST_LOWER_BOUND = 1; - exports.LEAST_UPPER_BOUND = 2; - - /** - * Recursive implementation of binary search. - * - * @param aLow Indices here and lower do not contain the needle. - * @param aHigh Indices here and higher do not contain the needle. - * @param aNeedle The element being searched for. - * @param aHaystack The non-empty array being searched. - * @param aCompare Function which takes two elements and returns -1, 0, or 1. - * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or - * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the - * closest element that is smaller than or greater than the one we are - * searching for, respectively, if the exact element cannot be found. - */ - function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) { - // This function terminates when one of the following is true: - // - // 1. We find the exact element we are looking for. - // - // 2. We did not find the exact element, but we can return the index of - // the next-closest element. - // - // 3. We did not find the exact element, and there is no next-closest - // element than the one we are searching for, so we return -1. - var mid = Math.floor((aHigh - aLow) / 2) + aLow; - var cmp = aCompare(aNeedle, aHaystack[mid], true); - if (cmp === 0) { - // Found the element we are looking for. - return mid; - } - else if (cmp > 0) { - // Our needle is greater than aHaystack[mid]. - if (aHigh - mid > 1) { - // The element is in the upper half. - return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias); - } - - // The exact needle element was not found in this haystack. Determine if - // we are in termination case (3) or (2) and return the appropriate thing. - if (aBias == exports.LEAST_UPPER_BOUND) { - return aHigh < aHaystack.length ? aHigh : -1; - } else { - return mid; - } - } - else { - // Our needle is less than aHaystack[mid]. - if (mid - aLow > 1) { - // The element is in the lower half. - return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias); - } - - // we are in termination case (3) or (2) and return the appropriate thing. - if (aBias == exports.LEAST_UPPER_BOUND) { - return mid; - } else { - return aLow < 0 ? -1 : aLow; - } - } - } - - /** - * This is an implementation of binary search which will always try and return - * the index of the closest element if there is no exact hit. This is because - * mappings between original and generated line/col pairs are single points, - * and there is an implicit region between each of them, so a miss just means - * that you aren't on the very start of a region. - * - * @param aNeedle The element you are looking for. - * @param aHaystack The array that is being searched. - * @param aCompare A function which takes the needle and an element in the - * array and returns -1, 0, or 1 depending on whether the needle is less - * than, equal to, or greater than the element, respectively. - * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or - * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the - * closest element that is smaller than or greater than the one we are - * searching for, respectively, if the exact element cannot be found. - * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'. - */ - exports.search = function search(aNeedle, aHaystack, aCompare, aBias) { - if (aHaystack.length === 0) { - return -1; - } - - var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack, - aCompare, aBias || exports.GREATEST_LOWER_BOUND); - if (index < 0) { - return -1; - } - - // We have found either the exact element, or the next-closest element than - // the one we are searching for. However, there may be more than one such - // element. Make sure we always return the smallest of these. - while (index - 1 >= 0) { - if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) { - break; - } - --index; - } - - return index; - }; - - -/***/ }), -/* 9 */ -/***/ (function(module, exports) { - - /* -*- Mode: js; js-indent-level: 2; -*- */ - /* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - - // It turns out that some (most?) JavaScript engines don't self-host - // `Array.prototype.sort`. This makes sense because C++ will likely remain - // faster than JS when doing raw CPU-intensive sorting. However, when using a - // custom comparator function, calling back and forth between the VM's C++ and - // JIT'd JS is rather slow *and* loses JIT type information, resulting in - // worse generated code for the comparator function than would be optimal. In - // fact, when sorting with a comparator, these costs outweigh the benefits of - // sorting in C++. By using our own JS-implemented Quick Sort (below), we get - // a ~3500ms mean speed-up in `bench/bench.html`. - - /** - * Swap the elements indexed by `x` and `y` in the array `ary`. - * - * @param {Array} ary - * The array. - * @param {Number} x - * The index of the first item. - * @param {Number} y - * The index of the second item. - */ - function swap(ary, x, y) { - var temp = ary[x]; - ary[x] = ary[y]; - ary[y] = temp; - } - - /** - * Returns a random integer within the range `low .. high` inclusive. - * - * @param {Number} low - * The lower bound on the range. - * @param {Number} high - * The upper bound on the range. - */ - function randomIntInRange(low, high) { - return Math.round(low + (Math.random() * (high - low))); - } - - /** - * The Quick Sort algorithm. - * - * @param {Array} ary - * An array to sort. - * @param {function} comparator - * Function to use to compare two items. - * @param {Number} p - * Start index of the array - * @param {Number} r - * End index of the array - */ - function doQuickSort(ary, comparator, p, r) { - // If our lower bound is less than our upper bound, we (1) partition the - // array into two pieces and (2) recurse on each half. If it is not, this is - // the empty array and our base case. - - if (p < r) { - // (1) Partitioning. - // - // The partitioning chooses a pivot between `p` and `r` and moves all - // elements that are less than or equal to the pivot to the before it, and - // all the elements that are greater than it after it. The effect is that - // once partition is done, the pivot is in the exact place it will be when - // the array is put in sorted order, and it will not need to be moved - // again. This runs in O(n) time. - - // Always choose a random pivot so that an input array which is reverse - // sorted does not cause O(n^2) running time. - var pivotIndex = randomIntInRange(p, r); - var i = p - 1; - - swap(ary, pivotIndex, r); - var pivot = ary[r]; - - // Immediately after `j` is incremented in this loop, the following hold - // true: - // - // * Every element in `ary[p .. i]` is less than or equal to the pivot. - // - // * Every element in `ary[i+1 .. j-1]` is greater than the pivot. - for (var j = p; j < r; j++) { - if (comparator(ary[j], pivot) <= 0) { - i += 1; - swap(ary, i, j); - } - } - - swap(ary, i + 1, j); - var q = i + 1; - - // (2) Recurse on each half. - - doQuickSort(ary, comparator, p, q - 1); - doQuickSort(ary, comparator, q + 1, r); - } - } - - /** - * Sort the given array in-place with the given comparator function. - * - * @param {Array} ary - * An array to sort. - * @param {function} comparator - * Function to use to compare two items. - */ - exports.quickSort = function (ary, comparator) { - doQuickSort(ary, comparator, 0, ary.length - 1); - }; - - -/***/ }), -/* 10 */ -/***/ (function(module, exports, __webpack_require__) { - - /* -*- Mode: js; js-indent-level: 2; -*- */ - /* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - - var SourceMapGenerator = __webpack_require__(1).SourceMapGenerator; - var util = __webpack_require__(4); - - // Matches a Windows-style `\r\n` newline or a `\n` newline used by all other - // operating systems these days (capturing the result). - var REGEX_NEWLINE = /(\r?\n)/; - - // Newline character code for charCodeAt() comparisons - var NEWLINE_CODE = 10; - - // Private symbol for identifying `SourceNode`s when multiple versions of - // the source-map library are loaded. This MUST NOT CHANGE across - // versions! - var isSourceNode = "$$$isSourceNode$$$"; - - /** - * SourceNodes provide a way to abstract over interpolating/concatenating - * snippets of generated JavaScript source code while maintaining the line and - * column information associated with the original source code. - * - * @param aLine The original line number. - * @param aColumn The original column number. - * @param aSource The original source's filename. - * @param aChunks Optional. An array of strings which are snippets of - * generated JS, or other SourceNodes. - * @param aName The original identifier. - */ - function SourceNode(aLine, aColumn, aSource, aChunks, aName) { - this.children = []; - this.sourceContents = {}; - this.line = aLine == null ? null : aLine; - this.column = aColumn == null ? null : aColumn; - this.source = aSource == null ? null : aSource; - this.name = aName == null ? null : aName; - this[isSourceNode] = true; - if (aChunks != null) this.add(aChunks); - } - - /** - * Creates a SourceNode from generated code and a SourceMapConsumer. - * - * @param aGeneratedCode The generated code - * @param aSourceMapConsumer The SourceMap for the generated code - * @param aRelativePath Optional. The path that relative sources in the - * SourceMapConsumer should be relative to. - */ - SourceNode.fromStringWithSourceMap = - function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) { - // The SourceNode we want to fill with the generated code - // and the SourceMap - var node = new SourceNode(); - - // All even indices of this array are one line of the generated code, - // while all odd indices are the newlines between two adjacent lines - // (since `REGEX_NEWLINE` captures its match). - // Processed fragments are accessed by calling `shiftNextLine`. - var remainingLines = aGeneratedCode.split(REGEX_NEWLINE); - var remainingLinesIndex = 0; - var shiftNextLine = function() { - var lineContents = getNextLine(); - // The last line of a file might not have a newline. - var newLine = getNextLine() || ""; - return lineContents + newLine; - - function getNextLine() { - return remainingLinesIndex < remainingLines.length ? - remainingLines[remainingLinesIndex++] : undefined; - } - }; - - // We need to remember the position of "remainingLines" - var lastGeneratedLine = 1, lastGeneratedColumn = 0; - - // The generate SourceNodes we need a code range. - // To extract it current and last mapping is used. - // Here we store the last mapping. - var lastMapping = null; - - aSourceMapConsumer.eachMapping(function (mapping) { - if (lastMapping !== null) { - // We add the code from "lastMapping" to "mapping": - // First check if there is a new line in between. - if (lastGeneratedLine < mapping.generatedLine) { - // Associate first line with "lastMapping" - addMappingWithCode(lastMapping, shiftNextLine()); - lastGeneratedLine++; - lastGeneratedColumn = 0; - // The remaining code is added without mapping - } else { - // There is no new line in between. - // Associate the code between "lastGeneratedColumn" and - // "mapping.generatedColumn" with "lastMapping" - var nextLine = remainingLines[remainingLinesIndex]; - var code = nextLine.substr(0, mapping.generatedColumn - - lastGeneratedColumn); - remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn - - lastGeneratedColumn); - lastGeneratedColumn = mapping.generatedColumn; - addMappingWithCode(lastMapping, code); - // No more remaining code, continue - lastMapping = mapping; - return; - } - } - // We add the generated code until the first mapping - // to the SourceNode without any mapping. - // Each line is added as separate string. - while (lastGeneratedLine < mapping.generatedLine) { - node.add(shiftNextLine()); - lastGeneratedLine++; - } - if (lastGeneratedColumn < mapping.generatedColumn) { - var nextLine = remainingLines[remainingLinesIndex]; - node.add(nextLine.substr(0, mapping.generatedColumn)); - remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn); - lastGeneratedColumn = mapping.generatedColumn; - } - lastMapping = mapping; - }, this); - // We have processed all mappings. - if (remainingLinesIndex < remainingLines.length) { - if (lastMapping) { - // Associate the remaining code in the current line with "lastMapping" - addMappingWithCode(lastMapping, shiftNextLine()); - } - // and add the remaining lines without any mapping - node.add(remainingLines.splice(remainingLinesIndex).join("")); - } - - // Copy sourcesContent into SourceNode - aSourceMapConsumer.sources.forEach(function (sourceFile) { - var content = aSourceMapConsumer.sourceContentFor(sourceFile); - if (content != null) { - if (aRelativePath != null) { - sourceFile = util.join(aRelativePath, sourceFile); - } - node.setSourceContent(sourceFile, content); - } - }); - - return node; - - function addMappingWithCode(mapping, code) { - if (mapping === null || mapping.source === undefined) { - node.add(code); - } else { - var source = aRelativePath - ? util.join(aRelativePath, mapping.source) - : mapping.source; - node.add(new SourceNode(mapping.originalLine, - mapping.originalColumn, - source, - code, - mapping.name)); - } - } - }; - - /** - * Add a chunk of generated JS to this source node. - * - * @param aChunk A string snippet of generated JS code, another instance of - * SourceNode, or an array where each member is one of those things. - */ - SourceNode.prototype.add = function SourceNode_add(aChunk) { - if (Array.isArray(aChunk)) { - aChunk.forEach(function (chunk) { - this.add(chunk); - }, this); - } - else if (aChunk[isSourceNode] || typeof aChunk === "string") { - if (aChunk) { - this.children.push(aChunk); - } - } - else { - throw new TypeError( - "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk - ); - } - return this; - }; - - /** - * Add a chunk of generated JS to the beginning of this source node. - * - * @param aChunk A string snippet of generated JS code, another instance of - * SourceNode, or an array where each member is one of those things. - */ - SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) { - if (Array.isArray(aChunk)) { - for (var i = aChunk.length-1; i >= 0; i--) { - this.prepend(aChunk[i]); - } - } - else if (aChunk[isSourceNode] || typeof aChunk === "string") { - this.children.unshift(aChunk); - } - else { - throw new TypeError( - "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk - ); - } - return this; - }; - - /** - * Walk over the tree of JS snippets in this node and its children. The - * walking function is called once for each snippet of JS and is passed that - * snippet and the its original associated source's line/column location. - * - * @param aFn The traversal function. - */ - SourceNode.prototype.walk = function SourceNode_walk(aFn) { - var chunk; - for (var i = 0, len = this.children.length; i < len; i++) { - chunk = this.children[i]; - if (chunk[isSourceNode]) { - chunk.walk(aFn); - } - else { - if (chunk !== '') { - aFn(chunk, { source: this.source, - line: this.line, - column: this.column, - name: this.name }); - } - } - } - }; - - /** - * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between - * each of `this.children`. - * - * @param aSep The separator. - */ - SourceNode.prototype.join = function SourceNode_join(aSep) { - var newChildren; - var i; - var len = this.children.length; - if (len > 0) { - newChildren = []; - for (i = 0; i < len-1; i++) { - newChildren.push(this.children[i]); - newChildren.push(aSep); - } - newChildren.push(this.children[i]); - this.children = newChildren; - } - return this; - }; - - /** - * Call String.prototype.replace on the very right-most source snippet. Useful - * for trimming whitespace from the end of a source node, etc. - * - * @param aPattern The pattern to replace. - * @param aReplacement The thing to replace the pattern with. - */ - SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) { - var lastChild = this.children[this.children.length - 1]; - if (lastChild[isSourceNode]) { - lastChild.replaceRight(aPattern, aReplacement); - } - else if (typeof lastChild === 'string') { - this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement); - } - else { - this.children.push(''.replace(aPattern, aReplacement)); - } - return this; - }; - - /** - * Set the source content for a source file. This will be added to the SourceMapGenerator - * in the sourcesContent field. - * - * @param aSourceFile The filename of the source file - * @param aSourceContent The content of the source file - */ - SourceNode.prototype.setSourceContent = - function SourceNode_setSourceContent(aSourceFile, aSourceContent) { - this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent; - }; - - /** - * Walk over the tree of SourceNodes. The walking function is called for each - * source file content and is passed the filename and source content. - * - * @param aFn The traversal function. - */ - SourceNode.prototype.walkSourceContents = - function SourceNode_walkSourceContents(aFn) { - for (var i = 0, len = this.children.length; i < len; i++) { - if (this.children[i][isSourceNode]) { - this.children[i].walkSourceContents(aFn); - } - } - - var sources = Object.keys(this.sourceContents); - for (var i = 0, len = sources.length; i < len; i++) { - aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]); - } - }; - - /** - * Return the string representation of this source node. Walks over the tree - * and concatenates all the various snippets together to one string. - */ - SourceNode.prototype.toString = function SourceNode_toString() { - var str = ""; - this.walk(function (chunk) { - str += chunk; - }); - return str; - }; - - /** - * Returns the string representation of this source node along with a source - * map. - */ - SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) { - var generated = { - code: "", - line: 1, - column: 0 - }; - var map = new SourceMapGenerator(aArgs); - var sourceMappingActive = false; - var lastOriginalSource = null; - var lastOriginalLine = null; - var lastOriginalColumn = null; - var lastOriginalName = null; - this.walk(function (chunk, original) { - generated.code += chunk; - if (original.source !== null - && original.line !== null - && original.column !== null) { - if(lastOriginalSource !== original.source - || lastOriginalLine !== original.line - || lastOriginalColumn !== original.column - || lastOriginalName !== original.name) { - map.addMapping({ - source: original.source, - original: { - line: original.line, - column: original.column - }, - generated: { - line: generated.line, - column: generated.column - }, - name: original.name - }); - } - lastOriginalSource = original.source; - lastOriginalLine = original.line; - lastOriginalColumn = original.column; - lastOriginalName = original.name; - sourceMappingActive = true; - } else if (sourceMappingActive) { - map.addMapping({ - generated: { - line: generated.line, - column: generated.column - } - }); - lastOriginalSource = null; - sourceMappingActive = false; - } - for (var idx = 0, length = chunk.length; idx < length; idx++) { - if (chunk.charCodeAt(idx) === NEWLINE_CODE) { - generated.line++; - generated.column = 0; - // Mappings end at eol - if (idx + 1 === length) { - lastOriginalSource = null; - sourceMappingActive = false; - } else if (sourceMappingActive) { - map.addMapping({ - source: original.source, - original: { - line: original.line, - column: original.column - }, - generated: { - line: generated.line, - column: generated.column - }, - name: original.name - }); - } - } else { - generated.column++; - } - } - }); - this.walkSourceContents(function (sourceFile, sourceContent) { - map.setSourceContent(sourceFile, sourceContent); - }); - - return { code: generated.code, map: map }; - }; - - exports.SourceNode = SourceNode; - - -/***/ }) -/******/ ]) -}); -; \ No newline at end of file diff --git a/node_modules/source-map/dist/source-map.min.js b/node_modules/source-map/dist/source-map.min.js deleted file mode 100644 index f2a46bd..0000000 --- a/node_modules/source-map/dist/source-map.min.js +++ /dev/null @@ -1,2 +0,0 @@ -!function(e,n){"object"==typeof exports&&"object"==typeof module?module.exports=n():"function"==typeof define&&define.amd?define([],n):"object"==typeof exports?exports.sourceMap=n():e.sourceMap=n()}(this,function(){return function(e){function n(t){if(r[t])return r[t].exports;var o=r[t]={exports:{},id:t,loaded:!1};return e[t].call(o.exports,o,o.exports,n),o.loaded=!0,o.exports}var r={};return n.m=e,n.c=r,n.p="",n(0)}([function(e,n,r){n.SourceMapGenerator=r(1).SourceMapGenerator,n.SourceMapConsumer=r(7).SourceMapConsumer,n.SourceNode=r(10).SourceNode},function(e,n,r){function t(e){e||(e={}),this._file=i.getArg(e,"file",null),this._sourceRoot=i.getArg(e,"sourceRoot",null),this._skipValidation=i.getArg(e,"skipValidation",!1),this._sources=new s,this._names=new s,this._mappings=new a,this._sourcesContents=null}var o=r(2),i=r(4),s=r(5).ArraySet,a=r(6).MappingList;t.prototype._version=3,t.fromSourceMap=function(e){var n=e.sourceRoot,r=new t({file:e.file,sourceRoot:n});return e.eachMapping(function(e){var t={generated:{line:e.generatedLine,column:e.generatedColumn}};null!=e.source&&(t.source=e.source,null!=n&&(t.source=i.relative(n,t.source)),t.original={line:e.originalLine,column:e.originalColumn},null!=e.name&&(t.name=e.name)),r.addMapping(t)}),e.sources.forEach(function(n){var t=e.sourceContentFor(n);null!=t&&r.setSourceContent(n,t)}),r},t.prototype.addMapping=function(e){var n=i.getArg(e,"generated"),r=i.getArg(e,"original",null),t=i.getArg(e,"source",null),o=i.getArg(e,"name",null);this._skipValidation||this._validateMapping(n,r,t,o),null!=t&&(t=String(t),this._sources.has(t)||this._sources.add(t)),null!=o&&(o=String(o),this._names.has(o)||this._names.add(o)),this._mappings.add({generatedLine:n.line,generatedColumn:n.column,originalLine:null!=r&&r.line,originalColumn:null!=r&&r.column,source:t,name:o})},t.prototype.setSourceContent=function(e,n){var r=e;null!=this._sourceRoot&&(r=i.relative(this._sourceRoot,r)),null!=n?(this._sourcesContents||(this._sourcesContents=Object.create(null)),this._sourcesContents[i.toSetString(r)]=n):this._sourcesContents&&(delete this._sourcesContents[i.toSetString(r)],0===Object.keys(this._sourcesContents).length&&(this._sourcesContents=null))},t.prototype.applySourceMap=function(e,n,r){var t=n;if(null==n){if(null==e.file)throw new Error('SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, or the source map\'s "file" property. Both were omitted.');t=e.file}var o=this._sourceRoot;null!=o&&(t=i.relative(o,t));var a=new s,u=new s;this._mappings.unsortedForEach(function(n){if(n.source===t&&null!=n.originalLine){var s=e.originalPositionFor({line:n.originalLine,column:n.originalColumn});null!=s.source&&(n.source=s.source,null!=r&&(n.source=i.join(r,n.source)),null!=o&&(n.source=i.relative(o,n.source)),n.originalLine=s.line,n.originalColumn=s.column,null!=s.name&&(n.name=s.name))}var l=n.source;null==l||a.has(l)||a.add(l);var c=n.name;null==c||u.has(c)||u.add(c)},this),this._sources=a,this._names=u,e.sources.forEach(function(n){var t=e.sourceContentFor(n);null!=t&&(null!=r&&(n=i.join(r,n)),null!=o&&(n=i.relative(o,n)),this.setSourceContent(n,t))},this)},t.prototype._validateMapping=function(e,n,r,t){if(n&&"number"!=typeof n.line&&"number"!=typeof n.column)throw new Error("original.line and original.column are not numbers -- you probably meant to omit the original mapping entirely and only map the generated position. If so, pass null for the original mapping instead of an object with empty or null values.");if((!(e&&"line"in e&&"column"in e&&e.line>0&&e.column>=0)||n||r||t)&&!(e&&"line"in e&&"column"in e&&n&&"line"in n&&"column"in n&&e.line>0&&e.column>=0&&n.line>0&&n.column>=0&&r))throw new Error("Invalid mapping: "+JSON.stringify({generated:e,source:r,original:n,name:t}))},t.prototype._serializeMappings=function(){for(var e,n,r,t,s=0,a=1,u=0,l=0,c=0,g=0,p="",h=this._mappings.toArray(),f=0,d=h.length;f0){if(!i.compareByGeneratedPositionsInflated(n,h[f-1]))continue;e+=","}e+=o.encode(n.generatedColumn-s),s=n.generatedColumn,null!=n.source&&(t=this._sources.indexOf(n.source),e+=o.encode(t-g),g=t,e+=o.encode(n.originalLine-1-l),l=n.originalLine-1,e+=o.encode(n.originalColumn-u),u=n.originalColumn,null!=n.name&&(r=this._names.indexOf(n.name),e+=o.encode(r-c),c=r)),p+=e}return p},t.prototype._generateSourcesContent=function(e,n){return e.map(function(e){if(!this._sourcesContents)return null;null!=n&&(e=i.relative(n,e));var r=i.toSetString(e);return Object.prototype.hasOwnProperty.call(this._sourcesContents,r)?this._sourcesContents[r]:null},this)},t.prototype.toJSON=function(){var e={version:this._version,sources:this._sources.toArray(),names:this._names.toArray(),mappings:this._serializeMappings()};return null!=this._file&&(e.file=this._file),null!=this._sourceRoot&&(e.sourceRoot=this._sourceRoot),this._sourcesContents&&(e.sourcesContent=this._generateSourcesContent(e.sources,e.sourceRoot)),e},t.prototype.toString=function(){return JSON.stringify(this.toJSON())},n.SourceMapGenerator=t},function(e,n,r){function t(e){return e<0?(-e<<1)+1:(e<<1)+0}function o(e){var n=1===(1&e),r=e>>1;return n?-r:r}var i=r(3),s=5,a=1<>>=s,o>0&&(n|=l),r+=i.encode(n);while(o>0);return r},n.decode=function(e,n,r){var t,a,c=e.length,g=0,p=0;do{if(n>=c)throw new Error("Expected more digits in base 64 VLQ value.");if(a=i.decode(e.charCodeAt(n++)),a===-1)throw new Error("Invalid base64 digit: "+e.charAt(n-1));t=!!(a&l),a&=u,g+=a<=0;c--)s=u[c],"."===s?u.splice(c,1):".."===s?l++:l>0&&(""===s?(u.splice(c+1,l),l=0):(u.splice(c,2),l--));return r=u.join("/"),""===r&&(r=a?"/":"."),i?(i.path=r,o(i)):r}function s(e,n){""===e&&(e="."),""===n&&(n=".");var r=t(n),s=t(e);if(s&&(e=s.path||"/"),r&&!r.scheme)return s&&(r.scheme=s.scheme),o(r);if(r||n.match(_))return n;if(s&&!s.host&&!s.path)return s.host=n,o(s);var a="/"===n.charAt(0)?n:i(e.replace(/\/+$/,"")+"/"+n);return s?(s.path=a,o(s)):a}function a(e,n){""===e&&(e="."),e=e.replace(/\/$/,"");for(var r=0;0!==n.indexOf(e+"/");){var t=e.lastIndexOf("/");if(t<0)return n;if(e=e.slice(0,t),e.match(/^([^\/]+:\/)?\/*$/))return n;++r}return Array(r+1).join("../")+n.substr(e.length+1)}function u(e){return e}function l(e){return g(e)?"$"+e:e}function c(e){return g(e)?e.slice(1):e}function g(e){if(!e)return!1;var n=e.length;if(n<9)return!1;if(95!==e.charCodeAt(n-1)||95!==e.charCodeAt(n-2)||111!==e.charCodeAt(n-3)||116!==e.charCodeAt(n-4)||111!==e.charCodeAt(n-5)||114!==e.charCodeAt(n-6)||112!==e.charCodeAt(n-7)||95!==e.charCodeAt(n-8)||95!==e.charCodeAt(n-9))return!1;for(var r=n-10;r>=0;r--)if(36!==e.charCodeAt(r))return!1;return!0}function p(e,n,r){var t=e.source-n.source;return 0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t||r?t:(t=e.generatedColumn-n.generatedColumn,0!==t?t:(t=e.generatedLine-n.generatedLine,0!==t?t:e.name-n.name))))}function h(e,n,r){var t=e.generatedLine-n.generatedLine;return 0!==t?t:(t=e.generatedColumn-n.generatedColumn,0!==t||r?t:(t=e.source-n.source,0!==t?t:(t=e.originalLine-n.originalLine,0!==t?t:(t=e.originalColumn-n.originalColumn,0!==t?t:e.name-n.name))))}function f(e,n){return e===n?0:e>n?1:-1}function d(e,n){var r=e.generatedLine-n.generatedLine;return 0!==r?r:(r=e.generatedColumn-n.generatedColumn,0!==r?r:(r=f(e.source,n.source),0!==r?r:(r=e.originalLine-n.originalLine,0!==r?r:(r=e.originalColumn-n.originalColumn,0!==r?r:f(e.name,n.name)))))}n.getArg=r;var m=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/,_=/^data:.+\,.+$/;n.urlParse=t,n.urlGenerate=o,n.normalize=i,n.join=s,n.isAbsolute=function(e){return"/"===e.charAt(0)||!!e.match(m)},n.relative=a;var v=function(){var e=Object.create(null);return!("__proto__"in e)}();n.toSetString=v?u:l,n.fromSetString=v?u:c,n.compareByOriginalPositions=p,n.compareByGeneratedPositionsDeflated=h,n.compareByGeneratedPositionsInflated=d},function(e,n,r){function t(){this._array=[],this._set=s?new Map:Object.create(null)}var o=r(4),i=Object.prototype.hasOwnProperty,s="undefined"!=typeof Map;t.fromArray=function(e,n){for(var r=new t,o=0,i=e.length;o=0)return n}else{var r=o.toSetString(e);if(i.call(this._set,r))return this._set[r]}throw new Error('"'+e+'" is not in the set.')},t.prototype.at=function(e){if(e>=0&&er||t==r&&s>=o||i.compareByGeneratedPositionsInflated(e,n)<=0}function o(){this._array=[],this._sorted=!0,this._last={generatedLine:-1,generatedColumn:0}}var i=r(4);o.prototype.unsortedForEach=function(e,n){this._array.forEach(e,n)},o.prototype.add=function(e){t(this._last,e)?(this._last=e,this._array.push(e)):(this._sorted=!1,this._array.push(e))},o.prototype.toArray=function(){return this._sorted||(this._array.sort(i.compareByGeneratedPositionsInflated),this._sorted=!0),this._array},n.MappingList=o},function(e,n,r){function t(e){var n=e;return"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,""))),null!=n.sections?new s(n):new o(n)}function o(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var r=a.getArg(n,"version"),t=a.getArg(n,"sources"),o=a.getArg(n,"names",[]),i=a.getArg(n,"sourceRoot",null),s=a.getArg(n,"sourcesContent",null),u=a.getArg(n,"mappings"),c=a.getArg(n,"file",null);if(r!=this._version)throw new Error("Unsupported version: "+r);t=t.map(String).map(a.normalize).map(function(e){return i&&a.isAbsolute(i)&&a.isAbsolute(e)?a.relative(i,e):e}),this._names=l.fromArray(o.map(String),!0),this._sources=l.fromArray(t,!0),this.sourceRoot=i,this.sourcesContent=s,this._mappings=u,this.file=c}function i(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}function s(e){var n=e;"string"==typeof e&&(n=JSON.parse(e.replace(/^\)\]\}'/,"")));var r=a.getArg(n,"version"),o=a.getArg(n,"sections");if(r!=this._version)throw new Error("Unsupported version: "+r);this._sources=new l,this._names=new l;var i={line:-1,column:0};this._sections=o.map(function(e){if(e.url)throw new Error("Support for url field in sections not implemented.");var n=a.getArg(e,"offset"),r=a.getArg(n,"line"),o=a.getArg(n,"column");if(r=0){var i=this._originalMappings[o];if(void 0===e.column)for(var s=i.originalLine;i&&i.originalLine===s;)t.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o];else for(var l=i.originalColumn;i&&i.originalLine===n&&i.originalColumn==l;)t.push({line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}),i=this._originalMappings[++o]}return t},n.SourceMapConsumer=t,o.prototype=Object.create(t.prototype),o.prototype.consumer=t,o.fromSourceMap=function(e){var n=Object.create(o.prototype),r=n._names=l.fromArray(e._names.toArray(),!0),t=n._sources=l.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file;for(var s=e._mappings.toArray().slice(),u=n.__generatedMappings=[],c=n.__originalMappings=[],p=0,h=s.length;p1&&(r.source=d+o[1],d+=o[1],r.originalLine=h+o[2],h=r.originalLine,r.originalLine+=1,r.originalColumn=f+o[3],f=r.originalColumn,o.length>4&&(r.name=m+o[4],m+=o[4])),S.push(r),"number"==typeof r.originalLine&&A.push(r)}g(S,a.compareByGeneratedPositionsDeflated),this.__generatedMappings=S,g(A,a.compareByOriginalPositions),this.__originalMappings=A},o.prototype._findMapping=function(e,n,r,t,o,i){if(e[r]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[r]);if(e[t]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[t]);return u.search(e,n,o,i)},o.prototype.computeColumnSpans=function(){for(var e=0;e=0){var o=this._generatedMappings[r];if(o.generatedLine===n.generatedLine){var i=a.getArg(o,"source",null);null!==i&&(i=this._sources.at(i),null!=this.sourceRoot&&(i=a.join(this.sourceRoot,i)));var s=a.getArg(o,"name",null);return null!==s&&(s=this._names.at(s)),{source:i,line:a.getArg(o,"originalLine",null),column:a.getArg(o,"originalColumn",null),name:s}}}return{source:null,line:null,column:null,name:null}},o.prototype.hasContentsOfAllSources=function(){return!!this.sourcesContent&&(this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return null==e}))},o.prototype.sourceContentFor=function(e,n){if(!this.sourcesContent)return null;if(null!=this.sourceRoot&&(e=a.relative(this.sourceRoot,e)),this._sources.has(e))return this.sourcesContent[this._sources.indexOf(e)];var r;if(null!=this.sourceRoot&&(r=a.urlParse(this.sourceRoot))){var t=e.replace(/^file:\/\//,"");if("file"==r.scheme&&this._sources.has(t))return this.sourcesContent[this._sources.indexOf(t)];if((!r.path||"/"==r.path)&&this._sources.has("/"+e))return this.sourcesContent[this._sources.indexOf("/"+e)]}if(n)return null;throw new Error('"'+e+'" is not in the SourceMap.')},o.prototype.generatedPositionFor=function(e){var n=a.getArg(e,"source");if(null!=this.sourceRoot&&(n=a.relative(this.sourceRoot,n)),!this._sources.has(n))return{line:null,column:null,lastColumn:null};n=this._sources.indexOf(n);var r={source:n,originalLine:a.getArg(e,"line"),originalColumn:a.getArg(e,"column")},o=this._findMapping(r,this._originalMappings,"originalLine","originalColumn",a.compareByOriginalPositions,a.getArg(e,"bias",t.GREATEST_LOWER_BOUND));if(o>=0){var i=this._originalMappings[o];if(i.source===r.source)return{line:a.getArg(i,"generatedLine",null),column:a.getArg(i,"generatedColumn",null),lastColumn:a.getArg(i,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},n.BasicSourceMapConsumer=o,s.prototype=Object.create(t.prototype),s.prototype.constructor=t,s.prototype._version=3,Object.defineProperty(s.prototype,"sources",{get:function(){for(var e=[],n=0;n0?t-u>1?r(u,t,o,i,s,a):a==n.LEAST_UPPER_BOUND?t1?r(e,u,o,i,s,a):a==n.LEAST_UPPER_BOUND?u:e<0?-1:e}n.GREATEST_LOWER_BOUND=1,n.LEAST_UPPER_BOUND=2,n.search=function(e,t,o,i){if(0===t.length)return-1;var s=r(-1,t.length,e,t,o,i||n.GREATEST_LOWER_BOUND);if(s<0)return-1;for(;s-1>=0&&0===o(t[s],t[s-1],!0);)--s;return s}},function(e,n){function r(e,n,r){var t=e[n];e[n]=e[r],e[r]=t}function t(e,n){return Math.round(e+Math.random()*(n-e))}function o(e,n,i,s){if(i=0;n--)this.prepend(e[n]);else{if(!e[u]&&"string"!=typeof e)throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got "+e);this.children.unshift(e)}return this},t.prototype.walk=function(e){for(var n,r=0,t=this.children.length;r0){for(n=[],r=0;r 0 && aGenerated.column >= 0\n\t && !aOriginal && !aSource && !aName) {\n\t // Case 1.\n\t return;\n\t }\n\t else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n\t && aOriginal && 'line' in aOriginal && 'column' in aOriginal\n\t && aGenerated.line > 0 && aGenerated.column >= 0\n\t && aOriginal.line > 0 && aOriginal.column >= 0\n\t && aSource) {\n\t // Cases 2 and 3.\n\t return;\n\t }\n\t else {\n\t throw new Error('Invalid mapping: ' + JSON.stringify({\n\t generated: aGenerated,\n\t source: aSource,\n\t original: aOriginal,\n\t name: aName\n\t }));\n\t }\n\t };\n\t\n\t/**\n\t * Serialize the accumulated mappings in to the stream of base 64 VLQs\n\t * specified by the source map format.\n\t */\n\tSourceMapGenerator.prototype._serializeMappings =\n\t function SourceMapGenerator_serializeMappings() {\n\t var previousGeneratedColumn = 0;\n\t var previousGeneratedLine = 1;\n\t var previousOriginalColumn = 0;\n\t var previousOriginalLine = 0;\n\t var previousName = 0;\n\t var previousSource = 0;\n\t var result = '';\n\t var next;\n\t var mapping;\n\t var nameIdx;\n\t var sourceIdx;\n\t\n\t var mappings = this._mappings.toArray();\n\t for (var i = 0, len = mappings.length; i < len; i++) {\n\t mapping = mappings[i];\n\t next = ''\n\t\n\t if (mapping.generatedLine !== previousGeneratedLine) {\n\t previousGeneratedColumn = 0;\n\t while (mapping.generatedLine !== previousGeneratedLine) {\n\t next += ';';\n\t previousGeneratedLine++;\n\t }\n\t }\n\t else {\n\t if (i > 0) {\n\t if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {\n\t continue;\n\t }\n\t next += ',';\n\t }\n\t }\n\t\n\t next += base64VLQ.encode(mapping.generatedColumn\n\t - previousGeneratedColumn);\n\t previousGeneratedColumn = mapping.generatedColumn;\n\t\n\t if (mapping.source != null) {\n\t sourceIdx = this._sources.indexOf(mapping.source);\n\t next += base64VLQ.encode(sourceIdx - previousSource);\n\t previousSource = sourceIdx;\n\t\n\t // lines are stored 0-based in SourceMap spec version 3\n\t next += base64VLQ.encode(mapping.originalLine - 1\n\t - previousOriginalLine);\n\t previousOriginalLine = mapping.originalLine - 1;\n\t\n\t next += base64VLQ.encode(mapping.originalColumn\n\t - previousOriginalColumn);\n\t previousOriginalColumn = mapping.originalColumn;\n\t\n\t if (mapping.name != null) {\n\t nameIdx = this._names.indexOf(mapping.name);\n\t next += base64VLQ.encode(nameIdx - previousName);\n\t previousName = nameIdx;\n\t }\n\t }\n\t\n\t result += next;\n\t }\n\t\n\t return result;\n\t };\n\t\n\tSourceMapGenerator.prototype._generateSourcesContent =\n\t function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {\n\t return aSources.map(function (source) {\n\t if (!this._sourcesContents) {\n\t return null;\n\t }\n\t if (aSourceRoot != null) {\n\t source = util.relative(aSourceRoot, source);\n\t }\n\t var key = util.toSetString(source);\n\t return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)\n\t ? this._sourcesContents[key]\n\t : null;\n\t }, this);\n\t };\n\t\n\t/**\n\t * Externalize the source map.\n\t */\n\tSourceMapGenerator.prototype.toJSON =\n\t function SourceMapGenerator_toJSON() {\n\t var map = {\n\t version: this._version,\n\t sources: this._sources.toArray(),\n\t names: this._names.toArray(),\n\t mappings: this._serializeMappings()\n\t };\n\t if (this._file != null) {\n\t map.file = this._file;\n\t }\n\t if (this._sourceRoot != null) {\n\t map.sourceRoot = this._sourceRoot;\n\t }\n\t if (this._sourcesContents) {\n\t map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);\n\t }\n\t\n\t return map;\n\t };\n\t\n\t/**\n\t * Render the source map being generated to a string.\n\t */\n\tSourceMapGenerator.prototype.toString =\n\t function SourceMapGenerator_toString() {\n\t return JSON.stringify(this.toJSON());\n\t };\n\t\n\texports.SourceMapGenerator = SourceMapGenerator;\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t *\n\t * Based on the Base 64 VLQ implementation in Closure Compiler:\n\t * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java\n\t *\n\t * Copyright 2011 The Closure Compiler Authors. All rights reserved.\n\t * Redistribution and use in source and binary forms, with or without\n\t * modification, are permitted provided that the following conditions are\n\t * met:\n\t *\n\t * * Redistributions of source code must retain the above copyright\n\t * notice, this list of conditions and the following disclaimer.\n\t * * Redistributions in binary form must reproduce the above\n\t * copyright notice, this list of conditions and the following\n\t * disclaimer in the documentation and/or other materials provided\n\t * with the distribution.\n\t * * Neither the name of Google Inc. nor the names of its\n\t * contributors may be used to endorse or promote products derived\n\t * from this software without specific prior written permission.\n\t *\n\t * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n\t * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n\t * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n\t * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n\t * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n\t * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n\t * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n\t * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n\t * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n\t * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n\t * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\t */\n\t\n\tvar base64 = __webpack_require__(3);\n\t\n\t// A single base 64 digit can contain 6 bits of data. For the base 64 variable\n\t// length quantities we use in the source map spec, the first bit is the sign,\n\t// the next four bits are the actual value, and the 6th bit is the\n\t// continuation bit. The continuation bit tells us whether there are more\n\t// digits in this value following this digit.\n\t//\n\t// Continuation\n\t// | Sign\n\t// | |\n\t// V V\n\t// 101011\n\t\n\tvar VLQ_BASE_SHIFT = 5;\n\t\n\t// binary: 100000\n\tvar VLQ_BASE = 1 << VLQ_BASE_SHIFT;\n\t\n\t// binary: 011111\n\tvar VLQ_BASE_MASK = VLQ_BASE - 1;\n\t\n\t// binary: 100000\n\tvar VLQ_CONTINUATION_BIT = VLQ_BASE;\n\t\n\t/**\n\t * Converts from a two-complement value to a value where the sign bit is\n\t * placed in the least significant bit. For example, as decimals:\n\t * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary)\n\t * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary)\n\t */\n\tfunction toVLQSigned(aValue) {\n\t return aValue < 0\n\t ? ((-aValue) << 1) + 1\n\t : (aValue << 1) + 0;\n\t}\n\t\n\t/**\n\t * Converts to a two-complement value from a value where the sign bit is\n\t * placed in the least significant bit. For example, as decimals:\n\t * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1\n\t * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2\n\t */\n\tfunction fromVLQSigned(aValue) {\n\t var isNegative = (aValue & 1) === 1;\n\t var shifted = aValue >> 1;\n\t return isNegative\n\t ? -shifted\n\t : shifted;\n\t}\n\t\n\t/**\n\t * Returns the base 64 VLQ encoded value.\n\t */\n\texports.encode = function base64VLQ_encode(aValue) {\n\t var encoded = \"\";\n\t var digit;\n\t\n\t var vlq = toVLQSigned(aValue);\n\t\n\t do {\n\t digit = vlq & VLQ_BASE_MASK;\n\t vlq >>>= VLQ_BASE_SHIFT;\n\t if (vlq > 0) {\n\t // There are still more digits in this value, so we must make sure the\n\t // continuation bit is marked.\n\t digit |= VLQ_CONTINUATION_BIT;\n\t }\n\t encoded += base64.encode(digit);\n\t } while (vlq > 0);\n\t\n\t return encoded;\n\t};\n\t\n\t/**\n\t * Decodes the next base 64 VLQ value from the given string and returns the\n\t * value and the rest of the string via the out parameter.\n\t */\n\texports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {\n\t var strLen = aStr.length;\n\t var result = 0;\n\t var shift = 0;\n\t var continuation, digit;\n\t\n\t do {\n\t if (aIndex >= strLen) {\n\t throw new Error(\"Expected more digits in base 64 VLQ value.\");\n\t }\n\t\n\t digit = base64.decode(aStr.charCodeAt(aIndex++));\n\t if (digit === -1) {\n\t throw new Error(\"Invalid base64 digit: \" + aStr.charAt(aIndex - 1));\n\t }\n\t\n\t continuation = !!(digit & VLQ_CONTINUATION_BIT);\n\t digit &= VLQ_BASE_MASK;\n\t result = result + (digit << shift);\n\t shift += VLQ_BASE_SHIFT;\n\t } while (continuation);\n\t\n\t aOutParam.value = fromVLQSigned(result);\n\t aOutParam.rest = aIndex;\n\t};\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\tvar intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\t\n\t/**\n\t * Encode an integer in the range of 0 to 63 to a single base 64 digit.\n\t */\n\texports.encode = function (number) {\n\t if (0 <= number && number < intToCharMap.length) {\n\t return intToCharMap[number];\n\t }\n\t throw new TypeError(\"Must be between 0 and 63: \" + number);\n\t};\n\t\n\t/**\n\t * Decode a single base 64 character code digit to an integer. Returns -1 on\n\t * failure.\n\t */\n\texports.decode = function (charCode) {\n\t var bigA = 65; // 'A'\n\t var bigZ = 90; // 'Z'\n\t\n\t var littleA = 97; // 'a'\n\t var littleZ = 122; // 'z'\n\t\n\t var zero = 48; // '0'\n\t var nine = 57; // '9'\n\t\n\t var plus = 43; // '+'\n\t var slash = 47; // '/'\n\t\n\t var littleOffset = 26;\n\t var numberOffset = 52;\n\t\n\t // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ\n\t if (bigA <= charCode && charCode <= bigZ) {\n\t return (charCode - bigA);\n\t }\n\t\n\t // 26 - 51: abcdefghijklmnopqrstuvwxyz\n\t if (littleA <= charCode && charCode <= littleZ) {\n\t return (charCode - littleA + littleOffset);\n\t }\n\t\n\t // 52 - 61: 0123456789\n\t if (zero <= charCode && charCode <= nine) {\n\t return (charCode - zero + numberOffset);\n\t }\n\t\n\t // 62: +\n\t if (charCode == plus) {\n\t return 62;\n\t }\n\t\n\t // 63: /\n\t if (charCode == slash) {\n\t return 63;\n\t }\n\t\n\t // Invalid base64 digit.\n\t return -1;\n\t};\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\t/**\n\t * This is a helper function for getting values from parameter/options\n\t * objects.\n\t *\n\t * @param args The object we are extracting values from\n\t * @param name The name of the property we are getting.\n\t * @param defaultValue An optional value to return if the property is missing\n\t * from the object. If this is not specified and the property is missing, an\n\t * error will be thrown.\n\t */\n\tfunction getArg(aArgs, aName, aDefaultValue) {\n\t if (aName in aArgs) {\n\t return aArgs[aName];\n\t } else if (arguments.length === 3) {\n\t return aDefaultValue;\n\t } else {\n\t throw new Error('\"' + aName + '\" is a required argument.');\n\t }\n\t}\n\texports.getArg = getArg;\n\t\n\tvar urlRegexp = /^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/;\n\tvar dataUrlRegexp = /^data:.+\\,.+$/;\n\t\n\tfunction urlParse(aUrl) {\n\t var match = aUrl.match(urlRegexp);\n\t if (!match) {\n\t return null;\n\t }\n\t return {\n\t scheme: match[1],\n\t auth: match[2],\n\t host: match[3],\n\t port: match[4],\n\t path: match[5]\n\t };\n\t}\n\texports.urlParse = urlParse;\n\t\n\tfunction urlGenerate(aParsedUrl) {\n\t var url = '';\n\t if (aParsedUrl.scheme) {\n\t url += aParsedUrl.scheme + ':';\n\t }\n\t url += '//';\n\t if (aParsedUrl.auth) {\n\t url += aParsedUrl.auth + '@';\n\t }\n\t if (aParsedUrl.host) {\n\t url += aParsedUrl.host;\n\t }\n\t if (aParsedUrl.port) {\n\t url += \":\" + aParsedUrl.port\n\t }\n\t if (aParsedUrl.path) {\n\t url += aParsedUrl.path;\n\t }\n\t return url;\n\t}\n\texports.urlGenerate = urlGenerate;\n\t\n\t/**\n\t * Normalizes a path, or the path portion of a URL:\n\t *\n\t * - Replaces consecutive slashes with one slash.\n\t * - Removes unnecessary '.' parts.\n\t * - Removes unnecessary '/..' parts.\n\t *\n\t * Based on code in the Node.js 'path' core module.\n\t *\n\t * @param aPath The path or url to normalize.\n\t */\n\tfunction normalize(aPath) {\n\t var path = aPath;\n\t var url = urlParse(aPath);\n\t if (url) {\n\t if (!url.path) {\n\t return aPath;\n\t }\n\t path = url.path;\n\t }\n\t var isAbsolute = exports.isAbsolute(path);\n\t\n\t var parts = path.split(/\\/+/);\n\t for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {\n\t part = parts[i];\n\t if (part === '.') {\n\t parts.splice(i, 1);\n\t } else if (part === '..') {\n\t up++;\n\t } else if (up > 0) {\n\t if (part === '') {\n\t // The first part is blank if the path is absolute. Trying to go\n\t // above the root is a no-op. Therefore we can remove all '..' parts\n\t // directly after the root.\n\t parts.splice(i + 1, up);\n\t up = 0;\n\t } else {\n\t parts.splice(i, 2);\n\t up--;\n\t }\n\t }\n\t }\n\t path = parts.join('/');\n\t\n\t if (path === '') {\n\t path = isAbsolute ? '/' : '.';\n\t }\n\t\n\t if (url) {\n\t url.path = path;\n\t return urlGenerate(url);\n\t }\n\t return path;\n\t}\n\texports.normalize = normalize;\n\t\n\t/**\n\t * Joins two paths/URLs.\n\t *\n\t * @param aRoot The root path or URL.\n\t * @param aPath The path or URL to be joined with the root.\n\t *\n\t * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a\n\t * scheme-relative URL: Then the scheme of aRoot, if any, is prepended\n\t * first.\n\t * - Otherwise aPath is a path. If aRoot is a URL, then its path portion\n\t * is updated with the result and aRoot is returned. Otherwise the result\n\t * is returned.\n\t * - If aPath is absolute, the result is aPath.\n\t * - Otherwise the two paths are joined with a slash.\n\t * - Joining for example 'http://' and 'www.example.com' is also supported.\n\t */\n\tfunction join(aRoot, aPath) {\n\t if (aRoot === \"\") {\n\t aRoot = \".\";\n\t }\n\t if (aPath === \"\") {\n\t aPath = \".\";\n\t }\n\t var aPathUrl = urlParse(aPath);\n\t var aRootUrl = urlParse(aRoot);\n\t if (aRootUrl) {\n\t aRoot = aRootUrl.path || '/';\n\t }\n\t\n\t // `join(foo, '//www.example.org')`\n\t if (aPathUrl && !aPathUrl.scheme) {\n\t if (aRootUrl) {\n\t aPathUrl.scheme = aRootUrl.scheme;\n\t }\n\t return urlGenerate(aPathUrl);\n\t }\n\t\n\t if (aPathUrl || aPath.match(dataUrlRegexp)) {\n\t return aPath;\n\t }\n\t\n\t // `join('http://', 'www.example.com')`\n\t if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {\n\t aRootUrl.host = aPath;\n\t return urlGenerate(aRootUrl);\n\t }\n\t\n\t var joined = aPath.charAt(0) === '/'\n\t ? aPath\n\t : normalize(aRoot.replace(/\\/+$/, '') + '/' + aPath);\n\t\n\t if (aRootUrl) {\n\t aRootUrl.path = joined;\n\t return urlGenerate(aRootUrl);\n\t }\n\t return joined;\n\t}\n\texports.join = join;\n\t\n\texports.isAbsolute = function (aPath) {\n\t return aPath.charAt(0) === '/' || !!aPath.match(urlRegexp);\n\t};\n\t\n\t/**\n\t * Make a path relative to a URL or another path.\n\t *\n\t * @param aRoot The root path or URL.\n\t * @param aPath The path or URL to be made relative to aRoot.\n\t */\n\tfunction relative(aRoot, aPath) {\n\t if (aRoot === \"\") {\n\t aRoot = \".\";\n\t }\n\t\n\t aRoot = aRoot.replace(/\\/$/, '');\n\t\n\t // It is possible for the path to be above the root. In this case, simply\n\t // checking whether the root is a prefix of the path won't work. Instead, we\n\t // need to remove components from the root one by one, until either we find\n\t // a prefix that fits, or we run out of components to remove.\n\t var level = 0;\n\t while (aPath.indexOf(aRoot + '/') !== 0) {\n\t var index = aRoot.lastIndexOf(\"/\");\n\t if (index < 0) {\n\t return aPath;\n\t }\n\t\n\t // If the only part of the root that is left is the scheme (i.e. http://,\n\t // file:///, etc.), one or more slashes (/), or simply nothing at all, we\n\t // have exhausted all components, so the path is not relative to the root.\n\t aRoot = aRoot.slice(0, index);\n\t if (aRoot.match(/^([^\\/]+:\\/)?\\/*$/)) {\n\t return aPath;\n\t }\n\t\n\t ++level;\n\t }\n\t\n\t // Make sure we add a \"../\" for each component we removed from the root.\n\t return Array(level + 1).join(\"../\") + aPath.substr(aRoot.length + 1);\n\t}\n\texports.relative = relative;\n\t\n\tvar supportsNullProto = (function () {\n\t var obj = Object.create(null);\n\t return !('__proto__' in obj);\n\t}());\n\t\n\tfunction identity (s) {\n\t return s;\n\t}\n\t\n\t/**\n\t * Because behavior goes wacky when you set `__proto__` on objects, we\n\t * have to prefix all the strings in our set with an arbitrary character.\n\t *\n\t * See https://github.com/mozilla/source-map/pull/31 and\n\t * https://github.com/mozilla/source-map/issues/30\n\t *\n\t * @param String aStr\n\t */\n\tfunction toSetString(aStr) {\n\t if (isProtoString(aStr)) {\n\t return '$' + aStr;\n\t }\n\t\n\t return aStr;\n\t}\n\texports.toSetString = supportsNullProto ? identity : toSetString;\n\t\n\tfunction fromSetString(aStr) {\n\t if (isProtoString(aStr)) {\n\t return aStr.slice(1);\n\t }\n\t\n\t return aStr;\n\t}\n\texports.fromSetString = supportsNullProto ? identity : fromSetString;\n\t\n\tfunction isProtoString(s) {\n\t if (!s) {\n\t return false;\n\t }\n\t\n\t var length = s.length;\n\t\n\t if (length < 9 /* \"__proto__\".length */) {\n\t return false;\n\t }\n\t\n\t if (s.charCodeAt(length - 1) !== 95 /* '_' */ ||\n\t s.charCodeAt(length - 2) !== 95 /* '_' */ ||\n\t s.charCodeAt(length - 3) !== 111 /* 'o' */ ||\n\t s.charCodeAt(length - 4) !== 116 /* 't' */ ||\n\t s.charCodeAt(length - 5) !== 111 /* 'o' */ ||\n\t s.charCodeAt(length - 6) !== 114 /* 'r' */ ||\n\t s.charCodeAt(length - 7) !== 112 /* 'p' */ ||\n\t s.charCodeAt(length - 8) !== 95 /* '_' */ ||\n\t s.charCodeAt(length - 9) !== 95 /* '_' */) {\n\t return false;\n\t }\n\t\n\t for (var i = length - 10; i >= 0; i--) {\n\t if (s.charCodeAt(i) !== 36 /* '$' */) {\n\t return false;\n\t }\n\t }\n\t\n\t return true;\n\t}\n\t\n\t/**\n\t * Comparator between two mappings where the original positions are compared.\n\t *\n\t * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n\t * mappings with the same original source/line/column, but different generated\n\t * line and column the same. Useful when searching for a mapping with a\n\t * stubbed out mapping.\n\t */\n\tfunction compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {\n\t var cmp = mappingA.source - mappingB.source;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.originalLine - mappingB.originalLine;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.originalColumn - mappingB.originalColumn;\n\t if (cmp !== 0 || onlyCompareOriginal) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.generatedLine - mappingB.generatedLine;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t return mappingA.name - mappingB.name;\n\t}\n\texports.compareByOriginalPositions = compareByOriginalPositions;\n\t\n\t/**\n\t * Comparator between two mappings with deflated source and name indices where\n\t * the generated positions are compared.\n\t *\n\t * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n\t * mappings with the same generated line and column, but different\n\t * source/name/original line and column the same. Useful when searching for a\n\t * mapping with a stubbed out mapping.\n\t */\n\tfunction compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {\n\t var cmp = mappingA.generatedLine - mappingB.generatedLine;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n\t if (cmp !== 0 || onlyCompareGenerated) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.source - mappingB.source;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.originalLine - mappingB.originalLine;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.originalColumn - mappingB.originalColumn;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t return mappingA.name - mappingB.name;\n\t}\n\texports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;\n\t\n\tfunction strcmp(aStr1, aStr2) {\n\t if (aStr1 === aStr2) {\n\t return 0;\n\t }\n\t\n\t if (aStr1 > aStr2) {\n\t return 1;\n\t }\n\t\n\t return -1;\n\t}\n\t\n\t/**\n\t * Comparator between two mappings with inflated source and name strings where\n\t * the generated positions are compared.\n\t */\n\tfunction compareByGeneratedPositionsInflated(mappingA, mappingB) {\n\t var cmp = mappingA.generatedLine - mappingB.generatedLine;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = strcmp(mappingA.source, mappingB.source);\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.originalLine - mappingB.originalLine;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t cmp = mappingA.originalColumn - mappingB.originalColumn;\n\t if (cmp !== 0) {\n\t return cmp;\n\t }\n\t\n\t return strcmp(mappingA.name, mappingB.name);\n\t}\n\texports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\tvar util = __webpack_require__(4);\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar hasNativeMap = typeof Map !== \"undefined\";\n\t\n\t/**\n\t * A data structure which is a combination of an array and a set. Adding a new\n\t * member is O(1), testing for membership is O(1), and finding the index of an\n\t * element is O(1). Removing elements from the set is not supported. Only\n\t * strings are supported for membership.\n\t */\n\tfunction ArraySet() {\n\t this._array = [];\n\t this._set = hasNativeMap ? new Map() : Object.create(null);\n\t}\n\t\n\t/**\n\t * Static method for creating ArraySet instances from an existing array.\n\t */\n\tArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {\n\t var set = new ArraySet();\n\t for (var i = 0, len = aArray.length; i < len; i++) {\n\t set.add(aArray[i], aAllowDuplicates);\n\t }\n\t return set;\n\t};\n\t\n\t/**\n\t * Return how many unique items are in this ArraySet. If duplicates have been\n\t * added, than those do not count towards the size.\n\t *\n\t * @returns Number\n\t */\n\tArraySet.prototype.size = function ArraySet_size() {\n\t return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;\n\t};\n\t\n\t/**\n\t * Add the given string to this set.\n\t *\n\t * @param String aStr\n\t */\n\tArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {\n\t var sStr = hasNativeMap ? aStr : util.toSetString(aStr);\n\t var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);\n\t var idx = this._array.length;\n\t if (!isDuplicate || aAllowDuplicates) {\n\t this._array.push(aStr);\n\t }\n\t if (!isDuplicate) {\n\t if (hasNativeMap) {\n\t this._set.set(aStr, idx);\n\t } else {\n\t this._set[sStr] = idx;\n\t }\n\t }\n\t};\n\t\n\t/**\n\t * Is the given string a member of this set?\n\t *\n\t * @param String aStr\n\t */\n\tArraySet.prototype.has = function ArraySet_has(aStr) {\n\t if (hasNativeMap) {\n\t return this._set.has(aStr);\n\t } else {\n\t var sStr = util.toSetString(aStr);\n\t return has.call(this._set, sStr);\n\t }\n\t};\n\t\n\t/**\n\t * What is the index of the given string in the array?\n\t *\n\t * @param String aStr\n\t */\n\tArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {\n\t if (hasNativeMap) {\n\t var idx = this._set.get(aStr);\n\t if (idx >= 0) {\n\t return idx;\n\t }\n\t } else {\n\t var sStr = util.toSetString(aStr);\n\t if (has.call(this._set, sStr)) {\n\t return this._set[sStr];\n\t }\n\t }\n\t\n\t throw new Error('\"' + aStr + '\" is not in the set.');\n\t};\n\t\n\t/**\n\t * What is the element at the given index?\n\t *\n\t * @param Number aIdx\n\t */\n\tArraySet.prototype.at = function ArraySet_at(aIdx) {\n\t if (aIdx >= 0 && aIdx < this._array.length) {\n\t return this._array[aIdx];\n\t }\n\t throw new Error('No element indexed by ' + aIdx);\n\t};\n\t\n\t/**\n\t * Returns the array representation of this set (which has the proper indices\n\t * indicated by indexOf). Note that this is a copy of the internal array used\n\t * for storing the members so that no one can mess with internal state.\n\t */\n\tArraySet.prototype.toArray = function ArraySet_toArray() {\n\t return this._array.slice();\n\t};\n\t\n\texports.ArraySet = ArraySet;\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2014 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\tvar util = __webpack_require__(4);\n\t\n\t/**\n\t * Determine whether mappingB is after mappingA with respect to generated\n\t * position.\n\t */\n\tfunction generatedPositionAfter(mappingA, mappingB) {\n\t // Optimized for most common case\n\t var lineA = mappingA.generatedLine;\n\t var lineB = mappingB.generatedLine;\n\t var columnA = mappingA.generatedColumn;\n\t var columnB = mappingB.generatedColumn;\n\t return lineB > lineA || lineB == lineA && columnB >= columnA ||\n\t util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;\n\t}\n\t\n\t/**\n\t * A data structure to provide a sorted view of accumulated mappings in a\n\t * performance conscious manner. It trades a neglibable overhead in general\n\t * case for a large speedup in case of mappings being added in order.\n\t */\n\tfunction MappingList() {\n\t this._array = [];\n\t this._sorted = true;\n\t // Serves as infimum\n\t this._last = {generatedLine: -1, generatedColumn: 0};\n\t}\n\t\n\t/**\n\t * Iterate through internal items. This method takes the same arguments that\n\t * `Array.prototype.forEach` takes.\n\t *\n\t * NOTE: The order of the mappings is NOT guaranteed.\n\t */\n\tMappingList.prototype.unsortedForEach =\n\t function MappingList_forEach(aCallback, aThisArg) {\n\t this._array.forEach(aCallback, aThisArg);\n\t };\n\t\n\t/**\n\t * Add the given source mapping.\n\t *\n\t * @param Object aMapping\n\t */\n\tMappingList.prototype.add = function MappingList_add(aMapping) {\n\t if (generatedPositionAfter(this._last, aMapping)) {\n\t this._last = aMapping;\n\t this._array.push(aMapping);\n\t } else {\n\t this._sorted = false;\n\t this._array.push(aMapping);\n\t }\n\t};\n\t\n\t/**\n\t * Returns the flat, sorted array of mappings. The mappings are sorted by\n\t * generated position.\n\t *\n\t * WARNING: This method returns internal data without copying, for\n\t * performance. The return value must NOT be mutated, and should be treated as\n\t * an immutable borrow. If you want to take ownership, you must make your own\n\t * copy.\n\t */\n\tMappingList.prototype.toArray = function MappingList_toArray() {\n\t if (!this._sorted) {\n\t this._array.sort(util.compareByGeneratedPositionsInflated);\n\t this._sorted = true;\n\t }\n\t return this._array;\n\t};\n\t\n\texports.MappingList = MappingList;\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\tvar util = __webpack_require__(4);\n\tvar binarySearch = __webpack_require__(8);\n\tvar ArraySet = __webpack_require__(5).ArraySet;\n\tvar base64VLQ = __webpack_require__(2);\n\tvar quickSort = __webpack_require__(9).quickSort;\n\t\n\tfunction SourceMapConsumer(aSourceMap) {\n\t var sourceMap = aSourceMap;\n\t if (typeof aSourceMap === 'string') {\n\t sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n\t }\n\t\n\t return sourceMap.sections != null\n\t ? new IndexedSourceMapConsumer(sourceMap)\n\t : new BasicSourceMapConsumer(sourceMap);\n\t}\n\t\n\tSourceMapConsumer.fromSourceMap = function(aSourceMap) {\n\t return BasicSourceMapConsumer.fromSourceMap(aSourceMap);\n\t}\n\t\n\t/**\n\t * The version of the source mapping spec that we are consuming.\n\t */\n\tSourceMapConsumer.prototype._version = 3;\n\t\n\t// `__generatedMappings` and `__originalMappings` are arrays that hold the\n\t// parsed mapping coordinates from the source map's \"mappings\" attribute. They\n\t// are lazily instantiated, accessed via the `_generatedMappings` and\n\t// `_originalMappings` getters respectively, and we only parse the mappings\n\t// and create these arrays once queried for a source location. We jump through\n\t// these hoops because there can be many thousands of mappings, and parsing\n\t// them is expensive, so we only want to do it if we must.\n\t//\n\t// Each object in the arrays is of the form:\n\t//\n\t// {\n\t// generatedLine: The line number in the generated code,\n\t// generatedColumn: The column number in the generated code,\n\t// source: The path to the original source file that generated this\n\t// chunk of code,\n\t// originalLine: The line number in the original source that\n\t// corresponds to this chunk of generated code,\n\t// originalColumn: The column number in the original source that\n\t// corresponds to this chunk of generated code,\n\t// name: The name of the original symbol which generated this chunk of\n\t// code.\n\t// }\n\t//\n\t// All properties except for `generatedLine` and `generatedColumn` can be\n\t// `null`.\n\t//\n\t// `_generatedMappings` is ordered by the generated positions.\n\t//\n\t// `_originalMappings` is ordered by the original positions.\n\t\n\tSourceMapConsumer.prototype.__generatedMappings = null;\n\tObject.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {\n\t get: function () {\n\t if (!this.__generatedMappings) {\n\t this._parseMappings(this._mappings, this.sourceRoot);\n\t }\n\t\n\t return this.__generatedMappings;\n\t }\n\t});\n\t\n\tSourceMapConsumer.prototype.__originalMappings = null;\n\tObject.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {\n\t get: function () {\n\t if (!this.__originalMappings) {\n\t this._parseMappings(this._mappings, this.sourceRoot);\n\t }\n\t\n\t return this.__originalMappings;\n\t }\n\t});\n\t\n\tSourceMapConsumer.prototype._charIsMappingSeparator =\n\t function SourceMapConsumer_charIsMappingSeparator(aStr, index) {\n\t var c = aStr.charAt(index);\n\t return c === \";\" || c === \",\";\n\t };\n\t\n\t/**\n\t * Parse the mappings in a string in to a data structure which we can easily\n\t * query (the ordered arrays in the `this.__generatedMappings` and\n\t * `this.__originalMappings` properties).\n\t */\n\tSourceMapConsumer.prototype._parseMappings =\n\t function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n\t throw new Error(\"Subclasses must implement _parseMappings\");\n\t };\n\t\n\tSourceMapConsumer.GENERATED_ORDER = 1;\n\tSourceMapConsumer.ORIGINAL_ORDER = 2;\n\t\n\tSourceMapConsumer.GREATEST_LOWER_BOUND = 1;\n\tSourceMapConsumer.LEAST_UPPER_BOUND = 2;\n\t\n\t/**\n\t * Iterate over each mapping between an original source/line/column and a\n\t * generated line/column in this source map.\n\t *\n\t * @param Function aCallback\n\t * The function that is called with each mapping.\n\t * @param Object aContext\n\t * Optional. If specified, this object will be the value of `this` every\n\t * time that `aCallback` is called.\n\t * @param aOrder\n\t * Either `SourceMapConsumer.GENERATED_ORDER` or\n\t * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to\n\t * iterate over the mappings sorted by the generated file's line/column\n\t * order or the original's source/line/column order, respectively. Defaults to\n\t * `SourceMapConsumer.GENERATED_ORDER`.\n\t */\n\tSourceMapConsumer.prototype.eachMapping =\n\t function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {\n\t var context = aContext || null;\n\t var order = aOrder || SourceMapConsumer.GENERATED_ORDER;\n\t\n\t var mappings;\n\t switch (order) {\n\t case SourceMapConsumer.GENERATED_ORDER:\n\t mappings = this._generatedMappings;\n\t break;\n\t case SourceMapConsumer.ORIGINAL_ORDER:\n\t mappings = this._originalMappings;\n\t break;\n\t default:\n\t throw new Error(\"Unknown order of iteration.\");\n\t }\n\t\n\t var sourceRoot = this.sourceRoot;\n\t mappings.map(function (mapping) {\n\t var source = mapping.source === null ? null : this._sources.at(mapping.source);\n\t if (source != null && sourceRoot != null) {\n\t source = util.join(sourceRoot, source);\n\t }\n\t return {\n\t source: source,\n\t generatedLine: mapping.generatedLine,\n\t generatedColumn: mapping.generatedColumn,\n\t originalLine: mapping.originalLine,\n\t originalColumn: mapping.originalColumn,\n\t name: mapping.name === null ? null : this._names.at(mapping.name)\n\t };\n\t }, this).forEach(aCallback, context);\n\t };\n\t\n\t/**\n\t * Returns all generated line and column information for the original source,\n\t * line, and column provided. If no column is provided, returns all mappings\n\t * corresponding to a either the line we are searching for or the next\n\t * closest line that has any mappings. Otherwise, returns all mappings\n\t * corresponding to the given line and either the column we are searching for\n\t * or the next closest column that has any offsets.\n\t *\n\t * The only argument is an object with the following properties:\n\t *\n\t * - source: The filename of the original source.\n\t * - line: The line number in the original source.\n\t * - column: Optional. the column number in the original source.\n\t *\n\t * and an array of objects is returned, each with the following properties:\n\t *\n\t * - line: The line number in the generated source, or null.\n\t * - column: The column number in the generated source, or null.\n\t */\n\tSourceMapConsumer.prototype.allGeneratedPositionsFor =\n\t function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {\n\t var line = util.getArg(aArgs, 'line');\n\t\n\t // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping\n\t // returns the index of the closest mapping less than the needle. By\n\t // setting needle.originalColumn to 0, we thus find the last mapping for\n\t // the given line, provided such a mapping exists.\n\t var needle = {\n\t source: util.getArg(aArgs, 'source'),\n\t originalLine: line,\n\t originalColumn: util.getArg(aArgs, 'column', 0)\n\t };\n\t\n\t if (this.sourceRoot != null) {\n\t needle.source = util.relative(this.sourceRoot, needle.source);\n\t }\n\t if (!this._sources.has(needle.source)) {\n\t return [];\n\t }\n\t needle.source = this._sources.indexOf(needle.source);\n\t\n\t var mappings = [];\n\t\n\t var index = this._findMapping(needle,\n\t this._originalMappings,\n\t \"originalLine\",\n\t \"originalColumn\",\n\t util.compareByOriginalPositions,\n\t binarySearch.LEAST_UPPER_BOUND);\n\t if (index >= 0) {\n\t var mapping = this._originalMappings[index];\n\t\n\t if (aArgs.column === undefined) {\n\t var originalLine = mapping.originalLine;\n\t\n\t // Iterate until either we run out of mappings, or we run into\n\t // a mapping for a different line than the one we found. Since\n\t // mappings are sorted, this is guaranteed to find all mappings for\n\t // the line we found.\n\t while (mapping && mapping.originalLine === originalLine) {\n\t mappings.push({\n\t line: util.getArg(mapping, 'generatedLine', null),\n\t column: util.getArg(mapping, 'generatedColumn', null),\n\t lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n\t });\n\t\n\t mapping = this._originalMappings[++index];\n\t }\n\t } else {\n\t var originalColumn = mapping.originalColumn;\n\t\n\t // Iterate until either we run out of mappings, or we run into\n\t // a mapping for a different line than the one we were searching for.\n\t // Since mappings are sorted, this is guaranteed to find all mappings for\n\t // the line we are searching for.\n\t while (mapping &&\n\t mapping.originalLine === line &&\n\t mapping.originalColumn == originalColumn) {\n\t mappings.push({\n\t line: util.getArg(mapping, 'generatedLine', null),\n\t column: util.getArg(mapping, 'generatedColumn', null),\n\t lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n\t });\n\t\n\t mapping = this._originalMappings[++index];\n\t }\n\t }\n\t }\n\t\n\t return mappings;\n\t };\n\t\n\texports.SourceMapConsumer = SourceMapConsumer;\n\t\n\t/**\n\t * A BasicSourceMapConsumer instance represents a parsed source map which we can\n\t * query for information about the original file positions by giving it a file\n\t * position in the generated source.\n\t *\n\t * The only parameter is the raw source map (either as a JSON string, or\n\t * already parsed to an object). According to the spec, source maps have the\n\t * following attributes:\n\t *\n\t * - version: Which version of the source map spec this map is following.\n\t * - sources: An array of URLs to the original source files.\n\t * - names: An array of identifiers which can be referrenced by individual mappings.\n\t * - sourceRoot: Optional. The URL root from which all sources are relative.\n\t * - sourcesContent: Optional. An array of contents of the original source files.\n\t * - mappings: A string of base64 VLQs which contain the actual mappings.\n\t * - file: Optional. The generated file this source map is associated with.\n\t *\n\t * Here is an example source map, taken from the source map spec[0]:\n\t *\n\t * {\n\t * version : 3,\n\t * file: \"out.js\",\n\t * sourceRoot : \"\",\n\t * sources: [\"foo.js\", \"bar.js\"],\n\t * names: [\"src\", \"maps\", \"are\", \"fun\"],\n\t * mappings: \"AA,AB;;ABCDE;\"\n\t * }\n\t *\n\t * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#\n\t */\n\tfunction BasicSourceMapConsumer(aSourceMap) {\n\t var sourceMap = aSourceMap;\n\t if (typeof aSourceMap === 'string') {\n\t sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n\t }\n\t\n\t var version = util.getArg(sourceMap, 'version');\n\t var sources = util.getArg(sourceMap, 'sources');\n\t // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which\n\t // requires the array) to play nice here.\n\t var names = util.getArg(sourceMap, 'names', []);\n\t var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);\n\t var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);\n\t var mappings = util.getArg(sourceMap, 'mappings');\n\t var file = util.getArg(sourceMap, 'file', null);\n\t\n\t // Once again, Sass deviates from the spec and supplies the version as a\n\t // string rather than a number, so we use loose equality checking here.\n\t if (version != this._version) {\n\t throw new Error('Unsupported version: ' + version);\n\t }\n\t\n\t sources = sources\n\t .map(String)\n\t // Some source maps produce relative source paths like \"./foo.js\" instead of\n\t // \"foo.js\". Normalize these first so that future comparisons will succeed.\n\t // See bugzil.la/1090768.\n\t .map(util.normalize)\n\t // Always ensure that absolute sources are internally stored relative to\n\t // the source root, if the source root is absolute. Not doing this would\n\t // be particularly problematic when the source root is a prefix of the\n\t // source (valid, but why??). See github issue #199 and bugzil.la/1188982.\n\t .map(function (source) {\n\t return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)\n\t ? util.relative(sourceRoot, source)\n\t : source;\n\t });\n\t\n\t // Pass `true` below to allow duplicate names and sources. While source maps\n\t // are intended to be compressed and deduplicated, the TypeScript compiler\n\t // sometimes generates source maps with duplicates in them. See Github issue\n\t // #72 and bugzil.la/889492.\n\t this._names = ArraySet.fromArray(names.map(String), true);\n\t this._sources = ArraySet.fromArray(sources, true);\n\t\n\t this.sourceRoot = sourceRoot;\n\t this.sourcesContent = sourcesContent;\n\t this._mappings = mappings;\n\t this.file = file;\n\t}\n\t\n\tBasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\n\tBasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;\n\t\n\t/**\n\t * Create a BasicSourceMapConsumer from a SourceMapGenerator.\n\t *\n\t * @param SourceMapGenerator aSourceMap\n\t * The source map that will be consumed.\n\t * @returns BasicSourceMapConsumer\n\t */\n\tBasicSourceMapConsumer.fromSourceMap =\n\t function SourceMapConsumer_fromSourceMap(aSourceMap) {\n\t var smc = Object.create(BasicSourceMapConsumer.prototype);\n\t\n\t var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);\n\t var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);\n\t smc.sourceRoot = aSourceMap._sourceRoot;\n\t smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),\n\t smc.sourceRoot);\n\t smc.file = aSourceMap._file;\n\t\n\t // Because we are modifying the entries (by converting string sources and\n\t // names to indices into the sources and names ArraySets), we have to make\n\t // a copy of the entry or else bad things happen. Shared mutable state\n\t // strikes again! See github issue #191.\n\t\n\t var generatedMappings = aSourceMap._mappings.toArray().slice();\n\t var destGeneratedMappings = smc.__generatedMappings = [];\n\t var destOriginalMappings = smc.__originalMappings = [];\n\t\n\t for (var i = 0, length = generatedMappings.length; i < length; i++) {\n\t var srcMapping = generatedMappings[i];\n\t var destMapping = new Mapping;\n\t destMapping.generatedLine = srcMapping.generatedLine;\n\t destMapping.generatedColumn = srcMapping.generatedColumn;\n\t\n\t if (srcMapping.source) {\n\t destMapping.source = sources.indexOf(srcMapping.source);\n\t destMapping.originalLine = srcMapping.originalLine;\n\t destMapping.originalColumn = srcMapping.originalColumn;\n\t\n\t if (srcMapping.name) {\n\t destMapping.name = names.indexOf(srcMapping.name);\n\t }\n\t\n\t destOriginalMappings.push(destMapping);\n\t }\n\t\n\t destGeneratedMappings.push(destMapping);\n\t }\n\t\n\t quickSort(smc.__originalMappings, util.compareByOriginalPositions);\n\t\n\t return smc;\n\t };\n\t\n\t/**\n\t * The version of the source mapping spec that we are consuming.\n\t */\n\tBasicSourceMapConsumer.prototype._version = 3;\n\t\n\t/**\n\t * The list of original sources.\n\t */\n\tObject.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {\n\t get: function () {\n\t return this._sources.toArray().map(function (s) {\n\t return this.sourceRoot != null ? util.join(this.sourceRoot, s) : s;\n\t }, this);\n\t }\n\t});\n\t\n\t/**\n\t * Provide the JIT with a nice shape / hidden class.\n\t */\n\tfunction Mapping() {\n\t this.generatedLine = 0;\n\t this.generatedColumn = 0;\n\t this.source = null;\n\t this.originalLine = null;\n\t this.originalColumn = null;\n\t this.name = null;\n\t}\n\t\n\t/**\n\t * Parse the mappings in a string in to a data structure which we can easily\n\t * query (the ordered arrays in the `this.__generatedMappings` and\n\t * `this.__originalMappings` properties).\n\t */\n\tBasicSourceMapConsumer.prototype._parseMappings =\n\t function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n\t var generatedLine = 1;\n\t var previousGeneratedColumn = 0;\n\t var previousOriginalLine = 0;\n\t var previousOriginalColumn = 0;\n\t var previousSource = 0;\n\t var previousName = 0;\n\t var length = aStr.length;\n\t var index = 0;\n\t var cachedSegments = {};\n\t var temp = {};\n\t var originalMappings = [];\n\t var generatedMappings = [];\n\t var mapping, str, segment, end, value;\n\t\n\t while (index < length) {\n\t if (aStr.charAt(index) === ';') {\n\t generatedLine++;\n\t index++;\n\t previousGeneratedColumn = 0;\n\t }\n\t else if (aStr.charAt(index) === ',') {\n\t index++;\n\t }\n\t else {\n\t mapping = new Mapping();\n\t mapping.generatedLine = generatedLine;\n\t\n\t // Because each offset is encoded relative to the previous one,\n\t // many segments often have the same encoding. We can exploit this\n\t // fact by caching the parsed variable length fields of each segment,\n\t // allowing us to avoid a second parse if we encounter the same\n\t // segment again.\n\t for (end = index; end < length; end++) {\n\t if (this._charIsMappingSeparator(aStr, end)) {\n\t break;\n\t }\n\t }\n\t str = aStr.slice(index, end);\n\t\n\t segment = cachedSegments[str];\n\t if (segment) {\n\t index += str.length;\n\t } else {\n\t segment = [];\n\t while (index < end) {\n\t base64VLQ.decode(aStr, index, temp);\n\t value = temp.value;\n\t index = temp.rest;\n\t segment.push(value);\n\t }\n\t\n\t if (segment.length === 2) {\n\t throw new Error('Found a source, but no line and column');\n\t }\n\t\n\t if (segment.length === 3) {\n\t throw new Error('Found a source and line, but no column');\n\t }\n\t\n\t cachedSegments[str] = segment;\n\t }\n\t\n\t // Generated column.\n\t mapping.generatedColumn = previousGeneratedColumn + segment[0];\n\t previousGeneratedColumn = mapping.generatedColumn;\n\t\n\t if (segment.length > 1) {\n\t // Original source.\n\t mapping.source = previousSource + segment[1];\n\t previousSource += segment[1];\n\t\n\t // Original line.\n\t mapping.originalLine = previousOriginalLine + segment[2];\n\t previousOriginalLine = mapping.originalLine;\n\t // Lines are stored 0-based\n\t mapping.originalLine += 1;\n\t\n\t // Original column.\n\t mapping.originalColumn = previousOriginalColumn + segment[3];\n\t previousOriginalColumn = mapping.originalColumn;\n\t\n\t if (segment.length > 4) {\n\t // Original name.\n\t mapping.name = previousName + segment[4];\n\t previousName += segment[4];\n\t }\n\t }\n\t\n\t generatedMappings.push(mapping);\n\t if (typeof mapping.originalLine === 'number') {\n\t originalMappings.push(mapping);\n\t }\n\t }\n\t }\n\t\n\t quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);\n\t this.__generatedMappings = generatedMappings;\n\t\n\t quickSort(originalMappings, util.compareByOriginalPositions);\n\t this.__originalMappings = originalMappings;\n\t };\n\t\n\t/**\n\t * Find the mapping that best matches the hypothetical \"needle\" mapping that\n\t * we are searching for in the given \"haystack\" of mappings.\n\t */\n\tBasicSourceMapConsumer.prototype._findMapping =\n\t function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,\n\t aColumnName, aComparator, aBias) {\n\t // To return the position we are searching for, we must first find the\n\t // mapping for the given position and then return the opposite position it\n\t // points to. Because the mappings are sorted, we can use binary search to\n\t // find the best mapping.\n\t\n\t if (aNeedle[aLineName] <= 0) {\n\t throw new TypeError('Line must be greater than or equal to 1, got '\n\t + aNeedle[aLineName]);\n\t }\n\t if (aNeedle[aColumnName] < 0) {\n\t throw new TypeError('Column must be greater than or equal to 0, got '\n\t + aNeedle[aColumnName]);\n\t }\n\t\n\t return binarySearch.search(aNeedle, aMappings, aComparator, aBias);\n\t };\n\t\n\t/**\n\t * Compute the last column for each generated mapping. The last column is\n\t * inclusive.\n\t */\n\tBasicSourceMapConsumer.prototype.computeColumnSpans =\n\t function SourceMapConsumer_computeColumnSpans() {\n\t for (var index = 0; index < this._generatedMappings.length; ++index) {\n\t var mapping = this._generatedMappings[index];\n\t\n\t // Mappings do not contain a field for the last generated columnt. We\n\t // can come up with an optimistic estimate, however, by assuming that\n\t // mappings are contiguous (i.e. given two consecutive mappings, the\n\t // first mapping ends where the second one starts).\n\t if (index + 1 < this._generatedMappings.length) {\n\t var nextMapping = this._generatedMappings[index + 1];\n\t\n\t if (mapping.generatedLine === nextMapping.generatedLine) {\n\t mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;\n\t continue;\n\t }\n\t }\n\t\n\t // The last mapping for each line spans the entire line.\n\t mapping.lastGeneratedColumn = Infinity;\n\t }\n\t };\n\t\n\t/**\n\t * Returns the original source, line, and column information for the generated\n\t * source's line and column positions provided. The only argument is an object\n\t * with the following properties:\n\t *\n\t * - line: The line number in the generated source.\n\t * - column: The column number in the generated source.\n\t * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n\t * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n\t * closest element that is smaller than or greater than the one we are\n\t * searching for, respectively, if the exact element cannot be found.\n\t * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n\t *\n\t * and an object is returned with the following properties:\n\t *\n\t * - source: The original source file, or null.\n\t * - line: The line number in the original source, or null.\n\t * - column: The column number in the original source, or null.\n\t * - name: The original identifier, or null.\n\t */\n\tBasicSourceMapConsumer.prototype.originalPositionFor =\n\t function SourceMapConsumer_originalPositionFor(aArgs) {\n\t var needle = {\n\t generatedLine: util.getArg(aArgs, 'line'),\n\t generatedColumn: util.getArg(aArgs, 'column')\n\t };\n\t\n\t var index = this._findMapping(\n\t needle,\n\t this._generatedMappings,\n\t \"generatedLine\",\n\t \"generatedColumn\",\n\t util.compareByGeneratedPositionsDeflated,\n\t util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n\t );\n\t\n\t if (index >= 0) {\n\t var mapping = this._generatedMappings[index];\n\t\n\t if (mapping.generatedLine === needle.generatedLine) {\n\t var source = util.getArg(mapping, 'source', null);\n\t if (source !== null) {\n\t source = this._sources.at(source);\n\t if (this.sourceRoot != null) {\n\t source = util.join(this.sourceRoot, source);\n\t }\n\t }\n\t var name = util.getArg(mapping, 'name', null);\n\t if (name !== null) {\n\t name = this._names.at(name);\n\t }\n\t return {\n\t source: source,\n\t line: util.getArg(mapping, 'originalLine', null),\n\t column: util.getArg(mapping, 'originalColumn', null),\n\t name: name\n\t };\n\t }\n\t }\n\t\n\t return {\n\t source: null,\n\t line: null,\n\t column: null,\n\t name: null\n\t };\n\t };\n\t\n\t/**\n\t * Return true if we have the source content for every source in the source\n\t * map, false otherwise.\n\t */\n\tBasicSourceMapConsumer.prototype.hasContentsOfAllSources =\n\t function BasicSourceMapConsumer_hasContentsOfAllSources() {\n\t if (!this.sourcesContent) {\n\t return false;\n\t }\n\t return this.sourcesContent.length >= this._sources.size() &&\n\t !this.sourcesContent.some(function (sc) { return sc == null; });\n\t };\n\t\n\t/**\n\t * Returns the original source content. The only argument is the url of the\n\t * original source file. Returns null if no original source content is\n\t * available.\n\t */\n\tBasicSourceMapConsumer.prototype.sourceContentFor =\n\t function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n\t if (!this.sourcesContent) {\n\t return null;\n\t }\n\t\n\t if (this.sourceRoot != null) {\n\t aSource = util.relative(this.sourceRoot, aSource);\n\t }\n\t\n\t if (this._sources.has(aSource)) {\n\t return this.sourcesContent[this._sources.indexOf(aSource)];\n\t }\n\t\n\t var url;\n\t if (this.sourceRoot != null\n\t && (url = util.urlParse(this.sourceRoot))) {\n\t // XXX: file:// URIs and absolute paths lead to unexpected behavior for\n\t // many users. We can help them out when they expect file:// URIs to\n\t // behave like it would if they were running a local HTTP server. See\n\t // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.\n\t var fileUriAbsPath = aSource.replace(/^file:\\/\\//, \"\");\n\t if (url.scheme == \"file\"\n\t && this._sources.has(fileUriAbsPath)) {\n\t return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]\n\t }\n\t\n\t if ((!url.path || url.path == \"/\")\n\t && this._sources.has(\"/\" + aSource)) {\n\t return this.sourcesContent[this._sources.indexOf(\"/\" + aSource)];\n\t }\n\t }\n\t\n\t // This function is used recursively from\n\t // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we\n\t // don't want to throw if we can't find the source - we just want to\n\t // return null, so we provide a flag to exit gracefully.\n\t if (nullOnMissing) {\n\t return null;\n\t }\n\t else {\n\t throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n\t }\n\t };\n\t\n\t/**\n\t * Returns the generated line and column information for the original source,\n\t * line, and column positions provided. The only argument is an object with\n\t * the following properties:\n\t *\n\t * - source: The filename of the original source.\n\t * - line: The line number in the original source.\n\t * - column: The column number in the original source.\n\t * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n\t * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n\t * closest element that is smaller than or greater than the one we are\n\t * searching for, respectively, if the exact element cannot be found.\n\t * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n\t *\n\t * and an object is returned with the following properties:\n\t *\n\t * - line: The line number in the generated source, or null.\n\t * - column: The column number in the generated source, or null.\n\t */\n\tBasicSourceMapConsumer.prototype.generatedPositionFor =\n\t function SourceMapConsumer_generatedPositionFor(aArgs) {\n\t var source = util.getArg(aArgs, 'source');\n\t if (this.sourceRoot != null) {\n\t source = util.relative(this.sourceRoot, source);\n\t }\n\t if (!this._sources.has(source)) {\n\t return {\n\t line: null,\n\t column: null,\n\t lastColumn: null\n\t };\n\t }\n\t source = this._sources.indexOf(source);\n\t\n\t var needle = {\n\t source: source,\n\t originalLine: util.getArg(aArgs, 'line'),\n\t originalColumn: util.getArg(aArgs, 'column')\n\t };\n\t\n\t var index = this._findMapping(\n\t needle,\n\t this._originalMappings,\n\t \"originalLine\",\n\t \"originalColumn\",\n\t util.compareByOriginalPositions,\n\t util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n\t );\n\t\n\t if (index >= 0) {\n\t var mapping = this._originalMappings[index];\n\t\n\t if (mapping.source === needle.source) {\n\t return {\n\t line: util.getArg(mapping, 'generatedLine', null),\n\t column: util.getArg(mapping, 'generatedColumn', null),\n\t lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n\t };\n\t }\n\t }\n\t\n\t return {\n\t line: null,\n\t column: null,\n\t lastColumn: null\n\t };\n\t };\n\t\n\texports.BasicSourceMapConsumer = BasicSourceMapConsumer;\n\t\n\t/**\n\t * An IndexedSourceMapConsumer instance represents a parsed source map which\n\t * we can query for information. It differs from BasicSourceMapConsumer in\n\t * that it takes \"indexed\" source maps (i.e. ones with a \"sections\" field) as\n\t * input.\n\t *\n\t * The only parameter is a raw source map (either as a JSON string, or already\n\t * parsed to an object). According to the spec for indexed source maps, they\n\t * have the following attributes:\n\t *\n\t * - version: Which version of the source map spec this map is following.\n\t * - file: Optional. The generated file this source map is associated with.\n\t * - sections: A list of section definitions.\n\t *\n\t * Each value under the \"sections\" field has two fields:\n\t * - offset: The offset into the original specified at which this section\n\t * begins to apply, defined as an object with a \"line\" and \"column\"\n\t * field.\n\t * - map: A source map definition. This source map could also be indexed,\n\t * but doesn't have to be.\n\t *\n\t * Instead of the \"map\" field, it's also possible to have a \"url\" field\n\t * specifying a URL to retrieve a source map from, but that's currently\n\t * unsupported.\n\t *\n\t * Here's an example source map, taken from the source map spec[0], but\n\t * modified to omit a section which uses the \"url\" field.\n\t *\n\t * {\n\t * version : 3,\n\t * file: \"app.js\",\n\t * sections: [{\n\t * offset: {line:100, column:10},\n\t * map: {\n\t * version : 3,\n\t * file: \"section.js\",\n\t * sources: [\"foo.js\", \"bar.js\"],\n\t * names: [\"src\", \"maps\", \"are\", \"fun\"],\n\t * mappings: \"AAAA,E;;ABCDE;\"\n\t * }\n\t * }],\n\t * }\n\t *\n\t * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt\n\t */\n\tfunction IndexedSourceMapConsumer(aSourceMap) {\n\t var sourceMap = aSourceMap;\n\t if (typeof aSourceMap === 'string') {\n\t sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n\t }\n\t\n\t var version = util.getArg(sourceMap, 'version');\n\t var sections = util.getArg(sourceMap, 'sections');\n\t\n\t if (version != this._version) {\n\t throw new Error('Unsupported version: ' + version);\n\t }\n\t\n\t this._sources = new ArraySet();\n\t this._names = new ArraySet();\n\t\n\t var lastOffset = {\n\t line: -1,\n\t column: 0\n\t };\n\t this._sections = sections.map(function (s) {\n\t if (s.url) {\n\t // The url field will require support for asynchronicity.\n\t // See https://github.com/mozilla/source-map/issues/16\n\t throw new Error('Support for url field in sections not implemented.');\n\t }\n\t var offset = util.getArg(s, 'offset');\n\t var offsetLine = util.getArg(offset, 'line');\n\t var offsetColumn = util.getArg(offset, 'column');\n\t\n\t if (offsetLine < lastOffset.line ||\n\t (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {\n\t throw new Error('Section offsets must be ordered and non-overlapping.');\n\t }\n\t lastOffset = offset;\n\t\n\t return {\n\t generatedOffset: {\n\t // The offset fields are 0-based, but we use 1-based indices when\n\t // encoding/decoding from VLQ.\n\t generatedLine: offsetLine + 1,\n\t generatedColumn: offsetColumn + 1\n\t },\n\t consumer: new SourceMapConsumer(util.getArg(s, 'map'))\n\t }\n\t });\n\t}\n\t\n\tIndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\n\tIndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;\n\t\n\t/**\n\t * The version of the source mapping spec that we are consuming.\n\t */\n\tIndexedSourceMapConsumer.prototype._version = 3;\n\t\n\t/**\n\t * The list of original sources.\n\t */\n\tObject.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {\n\t get: function () {\n\t var sources = [];\n\t for (var i = 0; i < this._sections.length; i++) {\n\t for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {\n\t sources.push(this._sections[i].consumer.sources[j]);\n\t }\n\t }\n\t return sources;\n\t }\n\t});\n\t\n\t/**\n\t * Returns the original source, line, and column information for the generated\n\t * source's line and column positions provided. The only argument is an object\n\t * with the following properties:\n\t *\n\t * - line: The line number in the generated source.\n\t * - column: The column number in the generated source.\n\t *\n\t * and an object is returned with the following properties:\n\t *\n\t * - source: The original source file, or null.\n\t * - line: The line number in the original source, or null.\n\t * - column: The column number in the original source, or null.\n\t * - name: The original identifier, or null.\n\t */\n\tIndexedSourceMapConsumer.prototype.originalPositionFor =\n\t function IndexedSourceMapConsumer_originalPositionFor(aArgs) {\n\t var needle = {\n\t generatedLine: util.getArg(aArgs, 'line'),\n\t generatedColumn: util.getArg(aArgs, 'column')\n\t };\n\t\n\t // Find the section containing the generated position we're trying to map\n\t // to an original position.\n\t var sectionIndex = binarySearch.search(needle, this._sections,\n\t function(needle, section) {\n\t var cmp = needle.generatedLine - section.generatedOffset.generatedLine;\n\t if (cmp) {\n\t return cmp;\n\t }\n\t\n\t return (needle.generatedColumn -\n\t section.generatedOffset.generatedColumn);\n\t });\n\t var section = this._sections[sectionIndex];\n\t\n\t if (!section) {\n\t return {\n\t source: null,\n\t line: null,\n\t column: null,\n\t name: null\n\t };\n\t }\n\t\n\t return section.consumer.originalPositionFor({\n\t line: needle.generatedLine -\n\t (section.generatedOffset.generatedLine - 1),\n\t column: needle.generatedColumn -\n\t (section.generatedOffset.generatedLine === needle.generatedLine\n\t ? section.generatedOffset.generatedColumn - 1\n\t : 0),\n\t bias: aArgs.bias\n\t });\n\t };\n\t\n\t/**\n\t * Return true if we have the source content for every source in the source\n\t * map, false otherwise.\n\t */\n\tIndexedSourceMapConsumer.prototype.hasContentsOfAllSources =\n\t function IndexedSourceMapConsumer_hasContentsOfAllSources() {\n\t return this._sections.every(function (s) {\n\t return s.consumer.hasContentsOfAllSources();\n\t });\n\t };\n\t\n\t/**\n\t * Returns the original source content. The only argument is the url of the\n\t * original source file. Returns null if no original source content is\n\t * available.\n\t */\n\tIndexedSourceMapConsumer.prototype.sourceContentFor =\n\t function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n\t for (var i = 0; i < this._sections.length; i++) {\n\t var section = this._sections[i];\n\t\n\t var content = section.consumer.sourceContentFor(aSource, true);\n\t if (content) {\n\t return content;\n\t }\n\t }\n\t if (nullOnMissing) {\n\t return null;\n\t }\n\t else {\n\t throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n\t }\n\t };\n\t\n\t/**\n\t * Returns the generated line and column information for the original source,\n\t * line, and column positions provided. The only argument is an object with\n\t * the following properties:\n\t *\n\t * - source: The filename of the original source.\n\t * - line: The line number in the original source.\n\t * - column: The column number in the original source.\n\t *\n\t * and an object is returned with the following properties:\n\t *\n\t * - line: The line number in the generated source, or null.\n\t * - column: The column number in the generated source, or null.\n\t */\n\tIndexedSourceMapConsumer.prototype.generatedPositionFor =\n\t function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {\n\t for (var i = 0; i < this._sections.length; i++) {\n\t var section = this._sections[i];\n\t\n\t // Only consider this section if the requested source is in the list of\n\t // sources of the consumer.\n\t if (section.consumer.sources.indexOf(util.getArg(aArgs, 'source')) === -1) {\n\t continue;\n\t }\n\t var generatedPosition = section.consumer.generatedPositionFor(aArgs);\n\t if (generatedPosition) {\n\t var ret = {\n\t line: generatedPosition.line +\n\t (section.generatedOffset.generatedLine - 1),\n\t column: generatedPosition.column +\n\t (section.generatedOffset.generatedLine === generatedPosition.line\n\t ? section.generatedOffset.generatedColumn - 1\n\t : 0)\n\t };\n\t return ret;\n\t }\n\t }\n\t\n\t return {\n\t line: null,\n\t column: null\n\t };\n\t };\n\t\n\t/**\n\t * Parse the mappings in a string in to a data structure which we can easily\n\t * query (the ordered arrays in the `this.__generatedMappings` and\n\t * `this.__originalMappings` properties).\n\t */\n\tIndexedSourceMapConsumer.prototype._parseMappings =\n\t function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n\t this.__generatedMappings = [];\n\t this.__originalMappings = [];\n\t for (var i = 0; i < this._sections.length; i++) {\n\t var section = this._sections[i];\n\t var sectionMappings = section.consumer._generatedMappings;\n\t for (var j = 0; j < sectionMappings.length; j++) {\n\t var mapping = sectionMappings[j];\n\t\n\t var source = section.consumer._sources.at(mapping.source);\n\t if (section.consumer.sourceRoot !== null) {\n\t source = util.join(section.consumer.sourceRoot, source);\n\t }\n\t this._sources.add(source);\n\t source = this._sources.indexOf(source);\n\t\n\t var name = section.consumer._names.at(mapping.name);\n\t this._names.add(name);\n\t name = this._names.indexOf(name);\n\t\n\t // The mappings coming from the consumer for the section have\n\t // generated positions relative to the start of the section, so we\n\t // need to offset them to be relative to the start of the concatenated\n\t // generated file.\n\t var adjustedMapping = {\n\t source: source,\n\t generatedLine: mapping.generatedLine +\n\t (section.generatedOffset.generatedLine - 1),\n\t generatedColumn: mapping.generatedColumn +\n\t (section.generatedOffset.generatedLine === mapping.generatedLine\n\t ? section.generatedOffset.generatedColumn - 1\n\t : 0),\n\t originalLine: mapping.originalLine,\n\t originalColumn: mapping.originalColumn,\n\t name: name\n\t };\n\t\n\t this.__generatedMappings.push(adjustedMapping);\n\t if (typeof adjustedMapping.originalLine === 'number') {\n\t this.__originalMappings.push(adjustedMapping);\n\t }\n\t }\n\t }\n\t\n\t quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);\n\t quickSort(this.__originalMappings, util.compareByOriginalPositions);\n\t };\n\t\n\texports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;\n\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\texports.GREATEST_LOWER_BOUND = 1;\n\texports.LEAST_UPPER_BOUND = 2;\n\t\n\t/**\n\t * Recursive implementation of binary search.\n\t *\n\t * @param aLow Indices here and lower do not contain the needle.\n\t * @param aHigh Indices here and higher do not contain the needle.\n\t * @param aNeedle The element being searched for.\n\t * @param aHaystack The non-empty array being searched.\n\t * @param aCompare Function which takes two elements and returns -1, 0, or 1.\n\t * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n\t * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n\t * closest element that is smaller than or greater than the one we are\n\t * searching for, respectively, if the exact element cannot be found.\n\t */\n\tfunction recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {\n\t // This function terminates when one of the following is true:\n\t //\n\t // 1. We find the exact element we are looking for.\n\t //\n\t // 2. We did not find the exact element, but we can return the index of\n\t // the next-closest element.\n\t //\n\t // 3. We did not find the exact element, and there is no next-closest\n\t // element than the one we are searching for, so we return -1.\n\t var mid = Math.floor((aHigh - aLow) / 2) + aLow;\n\t var cmp = aCompare(aNeedle, aHaystack[mid], true);\n\t if (cmp === 0) {\n\t // Found the element we are looking for.\n\t return mid;\n\t }\n\t else if (cmp > 0) {\n\t // Our needle is greater than aHaystack[mid].\n\t if (aHigh - mid > 1) {\n\t // The element is in the upper half.\n\t return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);\n\t }\n\t\n\t // The exact needle element was not found in this haystack. Determine if\n\t // we are in termination case (3) or (2) and return the appropriate thing.\n\t if (aBias == exports.LEAST_UPPER_BOUND) {\n\t return aHigh < aHaystack.length ? aHigh : -1;\n\t } else {\n\t return mid;\n\t }\n\t }\n\t else {\n\t // Our needle is less than aHaystack[mid].\n\t if (mid - aLow > 1) {\n\t // The element is in the lower half.\n\t return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);\n\t }\n\t\n\t // we are in termination case (3) or (2) and return the appropriate thing.\n\t if (aBias == exports.LEAST_UPPER_BOUND) {\n\t return mid;\n\t } else {\n\t return aLow < 0 ? -1 : aLow;\n\t }\n\t }\n\t}\n\t\n\t/**\n\t * This is an implementation of binary search which will always try and return\n\t * the index of the closest element if there is no exact hit. This is because\n\t * mappings between original and generated line/col pairs are single points,\n\t * and there is an implicit region between each of them, so a miss just means\n\t * that you aren't on the very start of a region.\n\t *\n\t * @param aNeedle The element you are looking for.\n\t * @param aHaystack The array that is being searched.\n\t * @param aCompare A function which takes the needle and an element in the\n\t * array and returns -1, 0, or 1 depending on whether the needle is less\n\t * than, equal to, or greater than the element, respectively.\n\t * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n\t * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n\t * closest element that is smaller than or greater than the one we are\n\t * searching for, respectively, if the exact element cannot be found.\n\t * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.\n\t */\n\texports.search = function search(aNeedle, aHaystack, aCompare, aBias) {\n\t if (aHaystack.length === 0) {\n\t return -1;\n\t }\n\t\n\t var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,\n\t aCompare, aBias || exports.GREATEST_LOWER_BOUND);\n\t if (index < 0) {\n\t return -1;\n\t }\n\t\n\t // We have found either the exact element, or the next-closest element than\n\t // the one we are searching for. However, there may be more than one such\n\t // element. Make sure we always return the smallest of these.\n\t while (index - 1 >= 0) {\n\t if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {\n\t break;\n\t }\n\t --index;\n\t }\n\t\n\t return index;\n\t};\n\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\t// It turns out that some (most?) JavaScript engines don't self-host\n\t// `Array.prototype.sort`. This makes sense because C++ will likely remain\n\t// faster than JS when doing raw CPU-intensive sorting. However, when using a\n\t// custom comparator function, calling back and forth between the VM's C++ and\n\t// JIT'd JS is rather slow *and* loses JIT type information, resulting in\n\t// worse generated code for the comparator function than would be optimal. In\n\t// fact, when sorting with a comparator, these costs outweigh the benefits of\n\t// sorting in C++. By using our own JS-implemented Quick Sort (below), we get\n\t// a ~3500ms mean speed-up in `bench/bench.html`.\n\t\n\t/**\n\t * Swap the elements indexed by `x` and `y` in the array `ary`.\n\t *\n\t * @param {Array} ary\n\t * The array.\n\t * @param {Number} x\n\t * The index of the first item.\n\t * @param {Number} y\n\t * The index of the second item.\n\t */\n\tfunction swap(ary, x, y) {\n\t var temp = ary[x];\n\t ary[x] = ary[y];\n\t ary[y] = temp;\n\t}\n\t\n\t/**\n\t * Returns a random integer within the range `low .. high` inclusive.\n\t *\n\t * @param {Number} low\n\t * The lower bound on the range.\n\t * @param {Number} high\n\t * The upper bound on the range.\n\t */\n\tfunction randomIntInRange(low, high) {\n\t return Math.round(low + (Math.random() * (high - low)));\n\t}\n\t\n\t/**\n\t * The Quick Sort algorithm.\n\t *\n\t * @param {Array} ary\n\t * An array to sort.\n\t * @param {function} comparator\n\t * Function to use to compare two items.\n\t * @param {Number} p\n\t * Start index of the array\n\t * @param {Number} r\n\t * End index of the array\n\t */\n\tfunction doQuickSort(ary, comparator, p, r) {\n\t // If our lower bound is less than our upper bound, we (1) partition the\n\t // array into two pieces and (2) recurse on each half. If it is not, this is\n\t // the empty array and our base case.\n\t\n\t if (p < r) {\n\t // (1) Partitioning.\n\t //\n\t // The partitioning chooses a pivot between `p` and `r` and moves all\n\t // elements that are less than or equal to the pivot to the before it, and\n\t // all the elements that are greater than it after it. The effect is that\n\t // once partition is done, the pivot is in the exact place it will be when\n\t // the array is put in sorted order, and it will not need to be moved\n\t // again. This runs in O(n) time.\n\t\n\t // Always choose a random pivot so that an input array which is reverse\n\t // sorted does not cause O(n^2) running time.\n\t var pivotIndex = randomIntInRange(p, r);\n\t var i = p - 1;\n\t\n\t swap(ary, pivotIndex, r);\n\t var pivot = ary[r];\n\t\n\t // Immediately after `j` is incremented in this loop, the following hold\n\t // true:\n\t //\n\t // * Every element in `ary[p .. i]` is less than or equal to the pivot.\n\t //\n\t // * Every element in `ary[i+1 .. j-1]` is greater than the pivot.\n\t for (var j = p; j < r; j++) {\n\t if (comparator(ary[j], pivot) <= 0) {\n\t i += 1;\n\t swap(ary, i, j);\n\t }\n\t }\n\t\n\t swap(ary, i + 1, j);\n\t var q = i + 1;\n\t\n\t // (2) Recurse on each half.\n\t\n\t doQuickSort(ary, comparator, p, q - 1);\n\t doQuickSort(ary, comparator, q + 1, r);\n\t }\n\t}\n\t\n\t/**\n\t * Sort the given array in-place with the given comparator function.\n\t *\n\t * @param {Array} ary\n\t * An array to sort.\n\t * @param {function} comparator\n\t * Function to use to compare two items.\n\t */\n\texports.quickSort = function (ary, comparator) {\n\t doQuickSort(ary, comparator, 0, ary.length - 1);\n\t};\n\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* -*- Mode: js; js-indent-level: 2; -*- */\n\t/*\n\t * Copyright 2011 Mozilla Foundation and contributors\n\t * Licensed under the New BSD license. See LICENSE or:\n\t * http://opensource.org/licenses/BSD-3-Clause\n\t */\n\t\n\tvar SourceMapGenerator = __webpack_require__(1).SourceMapGenerator;\n\tvar util = __webpack_require__(4);\n\t\n\t// Matches a Windows-style `\\r\\n` newline or a `\\n` newline used by all other\n\t// operating systems these days (capturing the result).\n\tvar REGEX_NEWLINE = /(\\r?\\n)/;\n\t\n\t// Newline character code for charCodeAt() comparisons\n\tvar NEWLINE_CODE = 10;\n\t\n\t// Private symbol for identifying `SourceNode`s when multiple versions of\n\t// the source-map library are loaded. This MUST NOT CHANGE across\n\t// versions!\n\tvar isSourceNode = \"$$$isSourceNode$$$\";\n\t\n\t/**\n\t * SourceNodes provide a way to abstract over interpolating/concatenating\n\t * snippets of generated JavaScript source code while maintaining the line and\n\t * column information associated with the original source code.\n\t *\n\t * @param aLine The original line number.\n\t * @param aColumn The original column number.\n\t * @param aSource The original source's filename.\n\t * @param aChunks Optional. An array of strings which are snippets of\n\t * generated JS, or other SourceNodes.\n\t * @param aName The original identifier.\n\t */\n\tfunction SourceNode(aLine, aColumn, aSource, aChunks, aName) {\n\t this.children = [];\n\t this.sourceContents = {};\n\t this.line = aLine == null ? null : aLine;\n\t this.column = aColumn == null ? null : aColumn;\n\t this.source = aSource == null ? null : aSource;\n\t this.name = aName == null ? null : aName;\n\t this[isSourceNode] = true;\n\t if (aChunks != null) this.add(aChunks);\n\t}\n\t\n\t/**\n\t * Creates a SourceNode from generated code and a SourceMapConsumer.\n\t *\n\t * @param aGeneratedCode The generated code\n\t * @param aSourceMapConsumer The SourceMap for the generated code\n\t * @param aRelativePath Optional. The path that relative sources in the\n\t * SourceMapConsumer should be relative to.\n\t */\n\tSourceNode.fromStringWithSourceMap =\n\t function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {\n\t // The SourceNode we want to fill with the generated code\n\t // and the SourceMap\n\t var node = new SourceNode();\n\t\n\t // All even indices of this array are one line of the generated code,\n\t // while all odd indices are the newlines between two adjacent lines\n\t // (since `REGEX_NEWLINE` captures its match).\n\t // Processed fragments are accessed by calling `shiftNextLine`.\n\t var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);\n\t var remainingLinesIndex = 0;\n\t var shiftNextLine = function() {\n\t var lineContents = getNextLine();\n\t // The last line of a file might not have a newline.\n\t var newLine = getNextLine() || \"\";\n\t return lineContents + newLine;\n\t\n\t function getNextLine() {\n\t return remainingLinesIndex < remainingLines.length ?\n\t remainingLines[remainingLinesIndex++] : undefined;\n\t }\n\t };\n\t\n\t // We need to remember the position of \"remainingLines\"\n\t var lastGeneratedLine = 1, lastGeneratedColumn = 0;\n\t\n\t // The generate SourceNodes we need a code range.\n\t // To extract it current and last mapping is used.\n\t // Here we store the last mapping.\n\t var lastMapping = null;\n\t\n\t aSourceMapConsumer.eachMapping(function (mapping) {\n\t if (lastMapping !== null) {\n\t // We add the code from \"lastMapping\" to \"mapping\":\n\t // First check if there is a new line in between.\n\t if (lastGeneratedLine < mapping.generatedLine) {\n\t // Associate first line with \"lastMapping\"\n\t addMappingWithCode(lastMapping, shiftNextLine());\n\t lastGeneratedLine++;\n\t lastGeneratedColumn = 0;\n\t // The remaining code is added without mapping\n\t } else {\n\t // There is no new line in between.\n\t // Associate the code between \"lastGeneratedColumn\" and\n\t // \"mapping.generatedColumn\" with \"lastMapping\"\n\t var nextLine = remainingLines[remainingLinesIndex];\n\t var code = nextLine.substr(0, mapping.generatedColumn -\n\t lastGeneratedColumn);\n\t remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -\n\t lastGeneratedColumn);\n\t lastGeneratedColumn = mapping.generatedColumn;\n\t addMappingWithCode(lastMapping, code);\n\t // No more remaining code, continue\n\t lastMapping = mapping;\n\t return;\n\t }\n\t }\n\t // We add the generated code until the first mapping\n\t // to the SourceNode without any mapping.\n\t // Each line is added as separate string.\n\t while (lastGeneratedLine < mapping.generatedLine) {\n\t node.add(shiftNextLine());\n\t lastGeneratedLine++;\n\t }\n\t if (lastGeneratedColumn < mapping.generatedColumn) {\n\t var nextLine = remainingLines[remainingLinesIndex];\n\t node.add(nextLine.substr(0, mapping.generatedColumn));\n\t remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);\n\t lastGeneratedColumn = mapping.generatedColumn;\n\t }\n\t lastMapping = mapping;\n\t }, this);\n\t // We have processed all mappings.\n\t if (remainingLinesIndex < remainingLines.length) {\n\t if (lastMapping) {\n\t // Associate the remaining code in the current line with \"lastMapping\"\n\t addMappingWithCode(lastMapping, shiftNextLine());\n\t }\n\t // and add the remaining lines without any mapping\n\t node.add(remainingLines.splice(remainingLinesIndex).join(\"\"));\n\t }\n\t\n\t // Copy sourcesContent into SourceNode\n\t aSourceMapConsumer.sources.forEach(function (sourceFile) {\n\t var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n\t if (content != null) {\n\t if (aRelativePath != null) {\n\t sourceFile = util.join(aRelativePath, sourceFile);\n\t }\n\t node.setSourceContent(sourceFile, content);\n\t }\n\t });\n\t\n\t return node;\n\t\n\t function addMappingWithCode(mapping, code) {\n\t if (mapping === null || mapping.source === undefined) {\n\t node.add(code);\n\t } else {\n\t var source = aRelativePath\n\t ? util.join(aRelativePath, mapping.source)\n\t : mapping.source;\n\t node.add(new SourceNode(mapping.originalLine,\n\t mapping.originalColumn,\n\t source,\n\t code,\n\t mapping.name));\n\t }\n\t }\n\t };\n\t\n\t/**\n\t * Add a chunk of generated JS to this source node.\n\t *\n\t * @param aChunk A string snippet of generated JS code, another instance of\n\t * SourceNode, or an array where each member is one of those things.\n\t */\n\tSourceNode.prototype.add = function SourceNode_add(aChunk) {\n\t if (Array.isArray(aChunk)) {\n\t aChunk.forEach(function (chunk) {\n\t this.add(chunk);\n\t }, this);\n\t }\n\t else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n\t if (aChunk) {\n\t this.children.push(aChunk);\n\t }\n\t }\n\t else {\n\t throw new TypeError(\n\t \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n\t );\n\t }\n\t return this;\n\t};\n\t\n\t/**\n\t * Add a chunk of generated JS to the beginning of this source node.\n\t *\n\t * @param aChunk A string snippet of generated JS code, another instance of\n\t * SourceNode, or an array where each member is one of those things.\n\t */\n\tSourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {\n\t if (Array.isArray(aChunk)) {\n\t for (var i = aChunk.length-1; i >= 0; i--) {\n\t this.prepend(aChunk[i]);\n\t }\n\t }\n\t else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n\t this.children.unshift(aChunk);\n\t }\n\t else {\n\t throw new TypeError(\n\t \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n\t );\n\t }\n\t return this;\n\t};\n\t\n\t/**\n\t * Walk over the tree of JS snippets in this node and its children. The\n\t * walking function is called once for each snippet of JS and is passed that\n\t * snippet and the its original associated source's line/column location.\n\t *\n\t * @param aFn The traversal function.\n\t */\n\tSourceNode.prototype.walk = function SourceNode_walk(aFn) {\n\t var chunk;\n\t for (var i = 0, len = this.children.length; i < len; i++) {\n\t chunk = this.children[i];\n\t if (chunk[isSourceNode]) {\n\t chunk.walk(aFn);\n\t }\n\t else {\n\t if (chunk !== '') {\n\t aFn(chunk, { source: this.source,\n\t line: this.line,\n\t column: this.column,\n\t name: this.name });\n\t }\n\t }\n\t }\n\t};\n\t\n\t/**\n\t * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between\n\t * each of `this.children`.\n\t *\n\t * @param aSep The separator.\n\t */\n\tSourceNode.prototype.join = function SourceNode_join(aSep) {\n\t var newChildren;\n\t var i;\n\t var len = this.children.length;\n\t if (len > 0) {\n\t newChildren = [];\n\t for (i = 0; i < len-1; i++) {\n\t newChildren.push(this.children[i]);\n\t newChildren.push(aSep);\n\t }\n\t newChildren.push(this.children[i]);\n\t this.children = newChildren;\n\t }\n\t return this;\n\t};\n\t\n\t/**\n\t * Call String.prototype.replace on the very right-most source snippet. Useful\n\t * for trimming whitespace from the end of a source node, etc.\n\t *\n\t * @param aPattern The pattern to replace.\n\t * @param aReplacement The thing to replace the pattern with.\n\t */\n\tSourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {\n\t var lastChild = this.children[this.children.length - 1];\n\t if (lastChild[isSourceNode]) {\n\t lastChild.replaceRight(aPattern, aReplacement);\n\t }\n\t else if (typeof lastChild === 'string') {\n\t this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);\n\t }\n\t else {\n\t this.children.push(''.replace(aPattern, aReplacement));\n\t }\n\t return this;\n\t};\n\t\n\t/**\n\t * Set the source content for a source file. This will be added to the SourceMapGenerator\n\t * in the sourcesContent field.\n\t *\n\t * @param aSourceFile The filename of the source file\n\t * @param aSourceContent The content of the source file\n\t */\n\tSourceNode.prototype.setSourceContent =\n\t function SourceNode_setSourceContent(aSourceFile, aSourceContent) {\n\t this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;\n\t };\n\t\n\t/**\n\t * Walk over the tree of SourceNodes. The walking function is called for each\n\t * source file content and is passed the filename and source content.\n\t *\n\t * @param aFn The traversal function.\n\t */\n\tSourceNode.prototype.walkSourceContents =\n\t function SourceNode_walkSourceContents(aFn) {\n\t for (var i = 0, len = this.children.length; i < len; i++) {\n\t if (this.children[i][isSourceNode]) {\n\t this.children[i].walkSourceContents(aFn);\n\t }\n\t }\n\t\n\t var sources = Object.keys(this.sourceContents);\n\t for (var i = 0, len = sources.length; i < len; i++) {\n\t aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);\n\t }\n\t };\n\t\n\t/**\n\t * Return the string representation of this source node. Walks over the tree\n\t * and concatenates all the various snippets together to one string.\n\t */\n\tSourceNode.prototype.toString = function SourceNode_toString() {\n\t var str = \"\";\n\t this.walk(function (chunk) {\n\t str += chunk;\n\t });\n\t return str;\n\t};\n\t\n\t/**\n\t * Returns the string representation of this source node along with a source\n\t * map.\n\t */\n\tSourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {\n\t var generated = {\n\t code: \"\",\n\t line: 1,\n\t column: 0\n\t };\n\t var map = new SourceMapGenerator(aArgs);\n\t var sourceMappingActive = false;\n\t var lastOriginalSource = null;\n\t var lastOriginalLine = null;\n\t var lastOriginalColumn = null;\n\t var lastOriginalName = null;\n\t this.walk(function (chunk, original) {\n\t generated.code += chunk;\n\t if (original.source !== null\n\t && original.line !== null\n\t && original.column !== null) {\n\t if(lastOriginalSource !== original.source\n\t || lastOriginalLine !== original.line\n\t || lastOriginalColumn !== original.column\n\t || lastOriginalName !== original.name) {\n\t map.addMapping({\n\t source: original.source,\n\t original: {\n\t line: original.line,\n\t column: original.column\n\t },\n\t generated: {\n\t line: generated.line,\n\t column: generated.column\n\t },\n\t name: original.name\n\t });\n\t }\n\t lastOriginalSource = original.source;\n\t lastOriginalLine = original.line;\n\t lastOriginalColumn = original.column;\n\t lastOriginalName = original.name;\n\t sourceMappingActive = true;\n\t } else if (sourceMappingActive) {\n\t map.addMapping({\n\t generated: {\n\t line: generated.line,\n\t column: generated.column\n\t }\n\t });\n\t lastOriginalSource = null;\n\t sourceMappingActive = false;\n\t }\n\t for (var idx = 0, length = chunk.length; idx < length; idx++) {\n\t if (chunk.charCodeAt(idx) === NEWLINE_CODE) {\n\t generated.line++;\n\t generated.column = 0;\n\t // Mappings end at eol\n\t if (idx + 1 === length) {\n\t lastOriginalSource = null;\n\t sourceMappingActive = false;\n\t } else if (sourceMappingActive) {\n\t map.addMapping({\n\t source: original.source,\n\t original: {\n\t line: original.line,\n\t column: original.column\n\t },\n\t generated: {\n\t line: generated.line,\n\t column: generated.column\n\t },\n\t name: original.name\n\t });\n\t }\n\t } else {\n\t generated.column++;\n\t }\n\t }\n\t });\n\t this.walkSourceContents(function (sourceFile, sourceContent) {\n\t map.setSourceContent(sourceFile, sourceContent);\n\t });\n\t\n\t return { code: generated.code, map: map };\n\t};\n\t\n\texports.SourceNode = SourceNode;\n\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// source-map.min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 42c329f865e32e011afb","/*\n * Copyright 2009-2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE.txt or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\nexports.SourceMapGenerator = require('./lib/source-map-generator').SourceMapGenerator;\nexports.SourceMapConsumer = require('./lib/source-map-consumer').SourceMapConsumer;\nexports.SourceNode = require('./lib/source-node').SourceNode;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./source-map.js\n// module id = 0\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar base64VLQ = require('./base64-vlq');\nvar util = require('./util');\nvar ArraySet = require('./array-set').ArraySet;\nvar MappingList = require('./mapping-list').MappingList;\n\n/**\n * An instance of the SourceMapGenerator represents a source map which is\n * being built incrementally. You may pass an object with the following\n * properties:\n *\n * - file: The filename of the generated source.\n * - sourceRoot: A root for all relative URLs in this source map.\n */\nfunction SourceMapGenerator(aArgs) {\n if (!aArgs) {\n aArgs = {};\n }\n this._file = util.getArg(aArgs, 'file', null);\n this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);\n this._skipValidation = util.getArg(aArgs, 'skipValidation', false);\n this._sources = new ArraySet();\n this._names = new ArraySet();\n this._mappings = new MappingList();\n this._sourcesContents = null;\n}\n\nSourceMapGenerator.prototype._version = 3;\n\n/**\n * Creates a new SourceMapGenerator based on a SourceMapConsumer\n *\n * @param aSourceMapConsumer The SourceMap.\n */\nSourceMapGenerator.fromSourceMap =\n function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {\n var sourceRoot = aSourceMapConsumer.sourceRoot;\n var generator = new SourceMapGenerator({\n file: aSourceMapConsumer.file,\n sourceRoot: sourceRoot\n });\n aSourceMapConsumer.eachMapping(function (mapping) {\n var newMapping = {\n generated: {\n line: mapping.generatedLine,\n column: mapping.generatedColumn\n }\n };\n\n if (mapping.source != null) {\n newMapping.source = mapping.source;\n if (sourceRoot != null) {\n newMapping.source = util.relative(sourceRoot, newMapping.source);\n }\n\n newMapping.original = {\n line: mapping.originalLine,\n column: mapping.originalColumn\n };\n\n if (mapping.name != null) {\n newMapping.name = mapping.name;\n }\n }\n\n generator.addMapping(newMapping);\n });\n aSourceMapConsumer.sources.forEach(function (sourceFile) {\n var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n if (content != null) {\n generator.setSourceContent(sourceFile, content);\n }\n });\n return generator;\n };\n\n/**\n * Add a single mapping from original source line and column to the generated\n * source's line and column for this source map being created. The mapping\n * object should have the following properties:\n *\n * - generated: An object with the generated line and column positions.\n * - original: An object with the original line and column positions.\n * - source: The original source file (relative to the sourceRoot).\n * - name: An optional original token name for this mapping.\n */\nSourceMapGenerator.prototype.addMapping =\n function SourceMapGenerator_addMapping(aArgs) {\n var generated = util.getArg(aArgs, 'generated');\n var original = util.getArg(aArgs, 'original', null);\n var source = util.getArg(aArgs, 'source', null);\n var name = util.getArg(aArgs, 'name', null);\n\n if (!this._skipValidation) {\n this._validateMapping(generated, original, source, name);\n }\n\n if (source != null) {\n source = String(source);\n if (!this._sources.has(source)) {\n this._sources.add(source);\n }\n }\n\n if (name != null) {\n name = String(name);\n if (!this._names.has(name)) {\n this._names.add(name);\n }\n }\n\n this._mappings.add({\n generatedLine: generated.line,\n generatedColumn: generated.column,\n originalLine: original != null && original.line,\n originalColumn: original != null && original.column,\n source: source,\n name: name\n });\n };\n\n/**\n * Set the source content for a source file.\n */\nSourceMapGenerator.prototype.setSourceContent =\n function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {\n var source = aSourceFile;\n if (this._sourceRoot != null) {\n source = util.relative(this._sourceRoot, source);\n }\n\n if (aSourceContent != null) {\n // Add the source content to the _sourcesContents map.\n // Create a new _sourcesContents map if the property is null.\n if (!this._sourcesContents) {\n this._sourcesContents = Object.create(null);\n }\n this._sourcesContents[util.toSetString(source)] = aSourceContent;\n } else if (this._sourcesContents) {\n // Remove the source file from the _sourcesContents map.\n // If the _sourcesContents map is empty, set the property to null.\n delete this._sourcesContents[util.toSetString(source)];\n if (Object.keys(this._sourcesContents).length === 0) {\n this._sourcesContents = null;\n }\n }\n };\n\n/**\n * Applies the mappings of a sub-source-map for a specific source file to the\n * source map being generated. Each mapping to the supplied source file is\n * rewritten using the supplied source map. Note: The resolution for the\n * resulting mappings is the minimium of this map and the supplied map.\n *\n * @param aSourceMapConsumer The source map to be applied.\n * @param aSourceFile Optional. The filename of the source file.\n * If omitted, SourceMapConsumer's file property will be used.\n * @param aSourceMapPath Optional. The dirname of the path to the source map\n * to be applied. If relative, it is relative to the SourceMapConsumer.\n * This parameter is needed when the two source maps aren't in the same\n * directory, and the source map to be applied contains relative source\n * paths. If so, those relative source paths need to be rewritten\n * relative to the SourceMapGenerator.\n */\nSourceMapGenerator.prototype.applySourceMap =\n function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {\n var sourceFile = aSourceFile;\n // If aSourceFile is omitted, we will use the file property of the SourceMap\n if (aSourceFile == null) {\n if (aSourceMapConsumer.file == null) {\n throw new Error(\n 'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +\n 'or the source map\\'s \"file\" property. Both were omitted.'\n );\n }\n sourceFile = aSourceMapConsumer.file;\n }\n var sourceRoot = this._sourceRoot;\n // Make \"sourceFile\" relative if an absolute Url is passed.\n if (sourceRoot != null) {\n sourceFile = util.relative(sourceRoot, sourceFile);\n }\n // Applying the SourceMap can add and remove items from the sources and\n // the names array.\n var newSources = new ArraySet();\n var newNames = new ArraySet();\n\n // Find mappings for the \"sourceFile\"\n this._mappings.unsortedForEach(function (mapping) {\n if (mapping.source === sourceFile && mapping.originalLine != null) {\n // Check if it can be mapped by the source map, then update the mapping.\n var original = aSourceMapConsumer.originalPositionFor({\n line: mapping.originalLine,\n column: mapping.originalColumn\n });\n if (original.source != null) {\n // Copy mapping\n mapping.source = original.source;\n if (aSourceMapPath != null) {\n mapping.source = util.join(aSourceMapPath, mapping.source)\n }\n if (sourceRoot != null) {\n mapping.source = util.relative(sourceRoot, mapping.source);\n }\n mapping.originalLine = original.line;\n mapping.originalColumn = original.column;\n if (original.name != null) {\n mapping.name = original.name;\n }\n }\n }\n\n var source = mapping.source;\n if (source != null && !newSources.has(source)) {\n newSources.add(source);\n }\n\n var name = mapping.name;\n if (name != null && !newNames.has(name)) {\n newNames.add(name);\n }\n\n }, this);\n this._sources = newSources;\n this._names = newNames;\n\n // Copy sourcesContents of applied map.\n aSourceMapConsumer.sources.forEach(function (sourceFile) {\n var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n if (content != null) {\n if (aSourceMapPath != null) {\n sourceFile = util.join(aSourceMapPath, sourceFile);\n }\n if (sourceRoot != null) {\n sourceFile = util.relative(sourceRoot, sourceFile);\n }\n this.setSourceContent(sourceFile, content);\n }\n }, this);\n };\n\n/**\n * A mapping can have one of the three levels of data:\n *\n * 1. Just the generated position.\n * 2. The Generated position, original position, and original source.\n * 3. Generated and original position, original source, as well as a name\n * token.\n *\n * To maintain consistency, we validate that any new mapping being added falls\n * in to one of these categories.\n */\nSourceMapGenerator.prototype._validateMapping =\n function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,\n aName) {\n // When aOriginal is truthy but has empty values for .line and .column,\n // it is most likely a programmer error. In this case we throw a very\n // specific error message to try to guide them the right way.\n // For example: https://github.com/Polymer/polymer-bundler/pull/519\n if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') {\n throw new Error(\n 'original.line and original.column are not numbers -- you probably meant to omit ' +\n 'the original mapping entirely and only map the generated position. If so, pass ' +\n 'null for the original mapping instead of an object with empty or null values.'\n );\n }\n\n if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n && aGenerated.line > 0 && aGenerated.column >= 0\n && !aOriginal && !aSource && !aName) {\n // Case 1.\n return;\n }\n else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n && aOriginal && 'line' in aOriginal && 'column' in aOriginal\n && aGenerated.line > 0 && aGenerated.column >= 0\n && aOriginal.line > 0 && aOriginal.column >= 0\n && aSource) {\n // Cases 2 and 3.\n return;\n }\n else {\n throw new Error('Invalid mapping: ' + JSON.stringify({\n generated: aGenerated,\n source: aSource,\n original: aOriginal,\n name: aName\n }));\n }\n };\n\n/**\n * Serialize the accumulated mappings in to the stream of base 64 VLQs\n * specified by the source map format.\n */\nSourceMapGenerator.prototype._serializeMappings =\n function SourceMapGenerator_serializeMappings() {\n var previousGeneratedColumn = 0;\n var previousGeneratedLine = 1;\n var previousOriginalColumn = 0;\n var previousOriginalLine = 0;\n var previousName = 0;\n var previousSource = 0;\n var result = '';\n var next;\n var mapping;\n var nameIdx;\n var sourceIdx;\n\n var mappings = this._mappings.toArray();\n for (var i = 0, len = mappings.length; i < len; i++) {\n mapping = mappings[i];\n next = ''\n\n if (mapping.generatedLine !== previousGeneratedLine) {\n previousGeneratedColumn = 0;\n while (mapping.generatedLine !== previousGeneratedLine) {\n next += ';';\n previousGeneratedLine++;\n }\n }\n else {\n if (i > 0) {\n if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {\n continue;\n }\n next += ',';\n }\n }\n\n next += base64VLQ.encode(mapping.generatedColumn\n - previousGeneratedColumn);\n previousGeneratedColumn = mapping.generatedColumn;\n\n if (mapping.source != null) {\n sourceIdx = this._sources.indexOf(mapping.source);\n next += base64VLQ.encode(sourceIdx - previousSource);\n previousSource = sourceIdx;\n\n // lines are stored 0-based in SourceMap spec version 3\n next += base64VLQ.encode(mapping.originalLine - 1\n - previousOriginalLine);\n previousOriginalLine = mapping.originalLine - 1;\n\n next += base64VLQ.encode(mapping.originalColumn\n - previousOriginalColumn);\n previousOriginalColumn = mapping.originalColumn;\n\n if (mapping.name != null) {\n nameIdx = this._names.indexOf(mapping.name);\n next += base64VLQ.encode(nameIdx - previousName);\n previousName = nameIdx;\n }\n }\n\n result += next;\n }\n\n return result;\n };\n\nSourceMapGenerator.prototype._generateSourcesContent =\n function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {\n return aSources.map(function (source) {\n if (!this._sourcesContents) {\n return null;\n }\n if (aSourceRoot != null) {\n source = util.relative(aSourceRoot, source);\n }\n var key = util.toSetString(source);\n return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)\n ? this._sourcesContents[key]\n : null;\n }, this);\n };\n\n/**\n * Externalize the source map.\n */\nSourceMapGenerator.prototype.toJSON =\n function SourceMapGenerator_toJSON() {\n var map = {\n version: this._version,\n sources: this._sources.toArray(),\n names: this._names.toArray(),\n mappings: this._serializeMappings()\n };\n if (this._file != null) {\n map.file = this._file;\n }\n if (this._sourceRoot != null) {\n map.sourceRoot = this._sourceRoot;\n }\n if (this._sourcesContents) {\n map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);\n }\n\n return map;\n };\n\n/**\n * Render the source map being generated to a string.\n */\nSourceMapGenerator.prototype.toString =\n function SourceMapGenerator_toString() {\n return JSON.stringify(this.toJSON());\n };\n\nexports.SourceMapGenerator = SourceMapGenerator;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/source-map-generator.js\n// module id = 1\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n *\n * Based on the Base 64 VLQ implementation in Closure Compiler:\n * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java\n *\n * Copyright 2011 The Closure Compiler Authors. All rights reserved.\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following\n * disclaimer in the documentation and/or other materials provided\n * with the distribution.\n * * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived\n * from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nvar base64 = require('./base64');\n\n// A single base 64 digit can contain 6 bits of data. For the base 64 variable\n// length quantities we use in the source map spec, the first bit is the sign,\n// the next four bits are the actual value, and the 6th bit is the\n// continuation bit. The continuation bit tells us whether there are more\n// digits in this value following this digit.\n//\n// Continuation\n// | Sign\n// | |\n// V V\n// 101011\n\nvar VLQ_BASE_SHIFT = 5;\n\n// binary: 100000\nvar VLQ_BASE = 1 << VLQ_BASE_SHIFT;\n\n// binary: 011111\nvar VLQ_BASE_MASK = VLQ_BASE - 1;\n\n// binary: 100000\nvar VLQ_CONTINUATION_BIT = VLQ_BASE;\n\n/**\n * Converts from a two-complement value to a value where the sign bit is\n * placed in the least significant bit. For example, as decimals:\n * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary)\n * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary)\n */\nfunction toVLQSigned(aValue) {\n return aValue < 0\n ? ((-aValue) << 1) + 1\n : (aValue << 1) + 0;\n}\n\n/**\n * Converts to a two-complement value from a value where the sign bit is\n * placed in the least significant bit. For example, as decimals:\n * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1\n * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2\n */\nfunction fromVLQSigned(aValue) {\n var isNegative = (aValue & 1) === 1;\n var shifted = aValue >> 1;\n return isNegative\n ? -shifted\n : shifted;\n}\n\n/**\n * Returns the base 64 VLQ encoded value.\n */\nexports.encode = function base64VLQ_encode(aValue) {\n var encoded = \"\";\n var digit;\n\n var vlq = toVLQSigned(aValue);\n\n do {\n digit = vlq & VLQ_BASE_MASK;\n vlq >>>= VLQ_BASE_SHIFT;\n if (vlq > 0) {\n // There are still more digits in this value, so we must make sure the\n // continuation bit is marked.\n digit |= VLQ_CONTINUATION_BIT;\n }\n encoded += base64.encode(digit);\n } while (vlq > 0);\n\n return encoded;\n};\n\n/**\n * Decodes the next base 64 VLQ value from the given string and returns the\n * value and the rest of the string via the out parameter.\n */\nexports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {\n var strLen = aStr.length;\n var result = 0;\n var shift = 0;\n var continuation, digit;\n\n do {\n if (aIndex >= strLen) {\n throw new Error(\"Expected more digits in base 64 VLQ value.\");\n }\n\n digit = base64.decode(aStr.charCodeAt(aIndex++));\n if (digit === -1) {\n throw new Error(\"Invalid base64 digit: \" + aStr.charAt(aIndex - 1));\n }\n\n continuation = !!(digit & VLQ_CONTINUATION_BIT);\n digit &= VLQ_BASE_MASK;\n result = result + (digit << shift);\n shift += VLQ_BASE_SHIFT;\n } while (continuation);\n\n aOutParam.value = fromVLQSigned(result);\n aOutParam.rest = aIndex;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/base64-vlq.js\n// module id = 2\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n/**\n * Encode an integer in the range of 0 to 63 to a single base 64 digit.\n */\nexports.encode = function (number) {\n if (0 <= number && number < intToCharMap.length) {\n return intToCharMap[number];\n }\n throw new TypeError(\"Must be between 0 and 63: \" + number);\n};\n\n/**\n * Decode a single base 64 character code digit to an integer. Returns -1 on\n * failure.\n */\nexports.decode = function (charCode) {\n var bigA = 65; // 'A'\n var bigZ = 90; // 'Z'\n\n var littleA = 97; // 'a'\n var littleZ = 122; // 'z'\n\n var zero = 48; // '0'\n var nine = 57; // '9'\n\n var plus = 43; // '+'\n var slash = 47; // '/'\n\n var littleOffset = 26;\n var numberOffset = 52;\n\n // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ\n if (bigA <= charCode && charCode <= bigZ) {\n return (charCode - bigA);\n }\n\n // 26 - 51: abcdefghijklmnopqrstuvwxyz\n if (littleA <= charCode && charCode <= littleZ) {\n return (charCode - littleA + littleOffset);\n }\n\n // 52 - 61: 0123456789\n if (zero <= charCode && charCode <= nine) {\n return (charCode - zero + numberOffset);\n }\n\n // 62: +\n if (charCode == plus) {\n return 62;\n }\n\n // 63: /\n if (charCode == slash) {\n return 63;\n }\n\n // Invalid base64 digit.\n return -1;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/base64.js\n// module id = 3\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n/**\n * This is a helper function for getting values from parameter/options\n * objects.\n *\n * @param args The object we are extracting values from\n * @param name The name of the property we are getting.\n * @param defaultValue An optional value to return if the property is missing\n * from the object. If this is not specified and the property is missing, an\n * error will be thrown.\n */\nfunction getArg(aArgs, aName, aDefaultValue) {\n if (aName in aArgs) {\n return aArgs[aName];\n } else if (arguments.length === 3) {\n return aDefaultValue;\n } else {\n throw new Error('\"' + aName + '\" is a required argument.');\n }\n}\nexports.getArg = getArg;\n\nvar urlRegexp = /^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/;\nvar dataUrlRegexp = /^data:.+\\,.+$/;\n\nfunction urlParse(aUrl) {\n var match = aUrl.match(urlRegexp);\n if (!match) {\n return null;\n }\n return {\n scheme: match[1],\n auth: match[2],\n host: match[3],\n port: match[4],\n path: match[5]\n };\n}\nexports.urlParse = urlParse;\n\nfunction urlGenerate(aParsedUrl) {\n var url = '';\n if (aParsedUrl.scheme) {\n url += aParsedUrl.scheme + ':';\n }\n url += '//';\n if (aParsedUrl.auth) {\n url += aParsedUrl.auth + '@';\n }\n if (aParsedUrl.host) {\n url += aParsedUrl.host;\n }\n if (aParsedUrl.port) {\n url += \":\" + aParsedUrl.port\n }\n if (aParsedUrl.path) {\n url += aParsedUrl.path;\n }\n return url;\n}\nexports.urlGenerate = urlGenerate;\n\n/**\n * Normalizes a path, or the path portion of a URL:\n *\n * - Replaces consecutive slashes with one slash.\n * - Removes unnecessary '.' parts.\n * - Removes unnecessary '/..' parts.\n *\n * Based on code in the Node.js 'path' core module.\n *\n * @param aPath The path or url to normalize.\n */\nfunction normalize(aPath) {\n var path = aPath;\n var url = urlParse(aPath);\n if (url) {\n if (!url.path) {\n return aPath;\n }\n path = url.path;\n }\n var isAbsolute = exports.isAbsolute(path);\n\n var parts = path.split(/\\/+/);\n for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {\n part = parts[i];\n if (part === '.') {\n parts.splice(i, 1);\n } else if (part === '..') {\n up++;\n } else if (up > 0) {\n if (part === '') {\n // The first part is blank if the path is absolute. Trying to go\n // above the root is a no-op. Therefore we can remove all '..' parts\n // directly after the root.\n parts.splice(i + 1, up);\n up = 0;\n } else {\n parts.splice(i, 2);\n up--;\n }\n }\n }\n path = parts.join('/');\n\n if (path === '') {\n path = isAbsolute ? '/' : '.';\n }\n\n if (url) {\n url.path = path;\n return urlGenerate(url);\n }\n return path;\n}\nexports.normalize = normalize;\n\n/**\n * Joins two paths/URLs.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be joined with the root.\n *\n * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a\n * scheme-relative URL: Then the scheme of aRoot, if any, is prepended\n * first.\n * - Otherwise aPath is a path. If aRoot is a URL, then its path portion\n * is updated with the result and aRoot is returned. Otherwise the result\n * is returned.\n * - If aPath is absolute, the result is aPath.\n * - Otherwise the two paths are joined with a slash.\n * - Joining for example 'http://' and 'www.example.com' is also supported.\n */\nfunction join(aRoot, aPath) {\n if (aRoot === \"\") {\n aRoot = \".\";\n }\n if (aPath === \"\") {\n aPath = \".\";\n }\n var aPathUrl = urlParse(aPath);\n var aRootUrl = urlParse(aRoot);\n if (aRootUrl) {\n aRoot = aRootUrl.path || '/';\n }\n\n // `join(foo, '//www.example.org')`\n if (aPathUrl && !aPathUrl.scheme) {\n if (aRootUrl) {\n aPathUrl.scheme = aRootUrl.scheme;\n }\n return urlGenerate(aPathUrl);\n }\n\n if (aPathUrl || aPath.match(dataUrlRegexp)) {\n return aPath;\n }\n\n // `join('http://', 'www.example.com')`\n if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {\n aRootUrl.host = aPath;\n return urlGenerate(aRootUrl);\n }\n\n var joined = aPath.charAt(0) === '/'\n ? aPath\n : normalize(aRoot.replace(/\\/+$/, '') + '/' + aPath);\n\n if (aRootUrl) {\n aRootUrl.path = joined;\n return urlGenerate(aRootUrl);\n }\n return joined;\n}\nexports.join = join;\n\nexports.isAbsolute = function (aPath) {\n return aPath.charAt(0) === '/' || !!aPath.match(urlRegexp);\n};\n\n/**\n * Make a path relative to a URL or another path.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be made relative to aRoot.\n */\nfunction relative(aRoot, aPath) {\n if (aRoot === \"\") {\n aRoot = \".\";\n }\n\n aRoot = aRoot.replace(/\\/$/, '');\n\n // It is possible for the path to be above the root. In this case, simply\n // checking whether the root is a prefix of the path won't work. Instead, we\n // need to remove components from the root one by one, until either we find\n // a prefix that fits, or we run out of components to remove.\n var level = 0;\n while (aPath.indexOf(aRoot + '/') !== 0) {\n var index = aRoot.lastIndexOf(\"/\");\n if (index < 0) {\n return aPath;\n }\n\n // If the only part of the root that is left is the scheme (i.e. http://,\n // file:///, etc.), one or more slashes (/), or simply nothing at all, we\n // have exhausted all components, so the path is not relative to the root.\n aRoot = aRoot.slice(0, index);\n if (aRoot.match(/^([^\\/]+:\\/)?\\/*$/)) {\n return aPath;\n }\n\n ++level;\n }\n\n // Make sure we add a \"../\" for each component we removed from the root.\n return Array(level + 1).join(\"../\") + aPath.substr(aRoot.length + 1);\n}\nexports.relative = relative;\n\nvar supportsNullProto = (function () {\n var obj = Object.create(null);\n return !('__proto__' in obj);\n}());\n\nfunction identity (s) {\n return s;\n}\n\n/**\n * Because behavior goes wacky when you set `__proto__` on objects, we\n * have to prefix all the strings in our set with an arbitrary character.\n *\n * See https://github.com/mozilla/source-map/pull/31 and\n * https://github.com/mozilla/source-map/issues/30\n *\n * @param String aStr\n */\nfunction toSetString(aStr) {\n if (isProtoString(aStr)) {\n return '$' + aStr;\n }\n\n return aStr;\n}\nexports.toSetString = supportsNullProto ? identity : toSetString;\n\nfunction fromSetString(aStr) {\n if (isProtoString(aStr)) {\n return aStr.slice(1);\n }\n\n return aStr;\n}\nexports.fromSetString = supportsNullProto ? identity : fromSetString;\n\nfunction isProtoString(s) {\n if (!s) {\n return false;\n }\n\n var length = s.length;\n\n if (length < 9 /* \"__proto__\".length */) {\n return false;\n }\n\n if (s.charCodeAt(length - 1) !== 95 /* '_' */ ||\n s.charCodeAt(length - 2) !== 95 /* '_' */ ||\n s.charCodeAt(length - 3) !== 111 /* 'o' */ ||\n s.charCodeAt(length - 4) !== 116 /* 't' */ ||\n s.charCodeAt(length - 5) !== 111 /* 'o' */ ||\n s.charCodeAt(length - 6) !== 114 /* 'r' */ ||\n s.charCodeAt(length - 7) !== 112 /* 'p' */ ||\n s.charCodeAt(length - 8) !== 95 /* '_' */ ||\n s.charCodeAt(length - 9) !== 95 /* '_' */) {\n return false;\n }\n\n for (var i = length - 10; i >= 0; i--) {\n if (s.charCodeAt(i) !== 36 /* '$' */) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Comparator between two mappings where the original positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same original source/line/column, but different generated\n * line and column the same. Useful when searching for a mapping with a\n * stubbed out mapping.\n */\nfunction compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {\n var cmp = mappingA.source - mappingB.source;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalLine - mappingB.originalLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalColumn - mappingB.originalColumn;\n if (cmp !== 0 || onlyCompareOriginal) {\n return cmp;\n }\n\n cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.generatedLine - mappingB.generatedLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n return mappingA.name - mappingB.name;\n}\nexports.compareByOriginalPositions = compareByOriginalPositions;\n\n/**\n * Comparator between two mappings with deflated source and name indices where\n * the generated positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same generated line and column, but different\n * source/name/original line and column the same. Useful when searching for a\n * mapping with a stubbed out mapping.\n */\nfunction compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {\n var cmp = mappingA.generatedLine - mappingB.generatedLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n if (cmp !== 0 || onlyCompareGenerated) {\n return cmp;\n }\n\n cmp = mappingA.source - mappingB.source;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalLine - mappingB.originalLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalColumn - mappingB.originalColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n return mappingA.name - mappingB.name;\n}\nexports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;\n\nfunction strcmp(aStr1, aStr2) {\n if (aStr1 === aStr2) {\n return 0;\n }\n\n if (aStr1 > aStr2) {\n return 1;\n }\n\n return -1;\n}\n\n/**\n * Comparator between two mappings with inflated source and name strings where\n * the generated positions are compared.\n */\nfunction compareByGeneratedPositionsInflated(mappingA, mappingB) {\n var cmp = mappingA.generatedLine - mappingB.generatedLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = strcmp(mappingA.source, mappingB.source);\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalLine - mappingB.originalLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalColumn - mappingB.originalColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/util.js\n// module id = 4\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar has = Object.prototype.hasOwnProperty;\nvar hasNativeMap = typeof Map !== \"undefined\";\n\n/**\n * A data structure which is a combination of an array and a set. Adding a new\n * member is O(1), testing for membership is O(1), and finding the index of an\n * element is O(1). Removing elements from the set is not supported. Only\n * strings are supported for membership.\n */\nfunction ArraySet() {\n this._array = [];\n this._set = hasNativeMap ? new Map() : Object.create(null);\n}\n\n/**\n * Static method for creating ArraySet instances from an existing array.\n */\nArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {\n var set = new ArraySet();\n for (var i = 0, len = aArray.length; i < len; i++) {\n set.add(aArray[i], aAllowDuplicates);\n }\n return set;\n};\n\n/**\n * Return how many unique items are in this ArraySet. If duplicates have been\n * added, than those do not count towards the size.\n *\n * @returns Number\n */\nArraySet.prototype.size = function ArraySet_size() {\n return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;\n};\n\n/**\n * Add the given string to this set.\n *\n * @param String aStr\n */\nArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {\n var sStr = hasNativeMap ? aStr : util.toSetString(aStr);\n var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);\n var idx = this._array.length;\n if (!isDuplicate || aAllowDuplicates) {\n this._array.push(aStr);\n }\n if (!isDuplicate) {\n if (hasNativeMap) {\n this._set.set(aStr, idx);\n } else {\n this._set[sStr] = idx;\n }\n }\n};\n\n/**\n * Is the given string a member of this set?\n *\n * @param String aStr\n */\nArraySet.prototype.has = function ArraySet_has(aStr) {\n if (hasNativeMap) {\n return this._set.has(aStr);\n } else {\n var sStr = util.toSetString(aStr);\n return has.call(this._set, sStr);\n }\n};\n\n/**\n * What is the index of the given string in the array?\n *\n * @param String aStr\n */\nArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {\n if (hasNativeMap) {\n var idx = this._set.get(aStr);\n if (idx >= 0) {\n return idx;\n }\n } else {\n var sStr = util.toSetString(aStr);\n if (has.call(this._set, sStr)) {\n return this._set[sStr];\n }\n }\n\n throw new Error('\"' + aStr + '\" is not in the set.');\n};\n\n/**\n * What is the element at the given index?\n *\n * @param Number aIdx\n */\nArraySet.prototype.at = function ArraySet_at(aIdx) {\n if (aIdx >= 0 && aIdx < this._array.length) {\n return this._array[aIdx];\n }\n throw new Error('No element indexed by ' + aIdx);\n};\n\n/**\n * Returns the array representation of this set (which has the proper indices\n * indicated by indexOf). Note that this is a copy of the internal array used\n * for storing the members so that no one can mess with internal state.\n */\nArraySet.prototype.toArray = function ArraySet_toArray() {\n return this._array.slice();\n};\n\nexports.ArraySet = ArraySet;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/array-set.js\n// module id = 5\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2014 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\n\n/**\n * Determine whether mappingB is after mappingA with respect to generated\n * position.\n */\nfunction generatedPositionAfter(mappingA, mappingB) {\n // Optimized for most common case\n var lineA = mappingA.generatedLine;\n var lineB = mappingB.generatedLine;\n var columnA = mappingA.generatedColumn;\n var columnB = mappingB.generatedColumn;\n return lineB > lineA || lineB == lineA && columnB >= columnA ||\n util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;\n}\n\n/**\n * A data structure to provide a sorted view of accumulated mappings in a\n * performance conscious manner. It trades a neglibable overhead in general\n * case for a large speedup in case of mappings being added in order.\n */\nfunction MappingList() {\n this._array = [];\n this._sorted = true;\n // Serves as infimum\n this._last = {generatedLine: -1, generatedColumn: 0};\n}\n\n/**\n * Iterate through internal items. This method takes the same arguments that\n * `Array.prototype.forEach` takes.\n *\n * NOTE: The order of the mappings is NOT guaranteed.\n */\nMappingList.prototype.unsortedForEach =\n function MappingList_forEach(aCallback, aThisArg) {\n this._array.forEach(aCallback, aThisArg);\n };\n\n/**\n * Add the given source mapping.\n *\n * @param Object aMapping\n */\nMappingList.prototype.add = function MappingList_add(aMapping) {\n if (generatedPositionAfter(this._last, aMapping)) {\n this._last = aMapping;\n this._array.push(aMapping);\n } else {\n this._sorted = false;\n this._array.push(aMapping);\n }\n};\n\n/**\n * Returns the flat, sorted array of mappings. The mappings are sorted by\n * generated position.\n *\n * WARNING: This method returns internal data without copying, for\n * performance. The return value must NOT be mutated, and should be treated as\n * an immutable borrow. If you want to take ownership, you must make your own\n * copy.\n */\nMappingList.prototype.toArray = function MappingList_toArray() {\n if (!this._sorted) {\n this._array.sort(util.compareByGeneratedPositionsInflated);\n this._sorted = true;\n }\n return this._array;\n};\n\nexports.MappingList = MappingList;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/mapping-list.js\n// module id = 6\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar binarySearch = require('./binary-search');\nvar ArraySet = require('./array-set').ArraySet;\nvar base64VLQ = require('./base64-vlq');\nvar quickSort = require('./quick-sort').quickSort;\n\nfunction SourceMapConsumer(aSourceMap) {\n var sourceMap = aSourceMap;\n if (typeof aSourceMap === 'string') {\n sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n }\n\n return sourceMap.sections != null\n ? new IndexedSourceMapConsumer(sourceMap)\n : new BasicSourceMapConsumer(sourceMap);\n}\n\nSourceMapConsumer.fromSourceMap = function(aSourceMap) {\n return BasicSourceMapConsumer.fromSourceMap(aSourceMap);\n}\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nSourceMapConsumer.prototype._version = 3;\n\n// `__generatedMappings` and `__originalMappings` are arrays that hold the\n// parsed mapping coordinates from the source map's \"mappings\" attribute. They\n// are lazily instantiated, accessed via the `_generatedMappings` and\n// `_originalMappings` getters respectively, and we only parse the mappings\n// and create these arrays once queried for a source location. We jump through\n// these hoops because there can be many thousands of mappings, and parsing\n// them is expensive, so we only want to do it if we must.\n//\n// Each object in the arrays is of the form:\n//\n// {\n// generatedLine: The line number in the generated code,\n// generatedColumn: The column number in the generated code,\n// source: The path to the original source file that generated this\n// chunk of code,\n// originalLine: The line number in the original source that\n// corresponds to this chunk of generated code,\n// originalColumn: The column number in the original source that\n// corresponds to this chunk of generated code,\n// name: The name of the original symbol which generated this chunk of\n// code.\n// }\n//\n// All properties except for `generatedLine` and `generatedColumn` can be\n// `null`.\n//\n// `_generatedMappings` is ordered by the generated positions.\n//\n// `_originalMappings` is ordered by the original positions.\n\nSourceMapConsumer.prototype.__generatedMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {\n get: function () {\n if (!this.__generatedMappings) {\n this._parseMappings(this._mappings, this.sourceRoot);\n }\n\n return this.__generatedMappings;\n }\n});\n\nSourceMapConsumer.prototype.__originalMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {\n get: function () {\n if (!this.__originalMappings) {\n this._parseMappings(this._mappings, this.sourceRoot);\n }\n\n return this.__originalMappings;\n }\n});\n\nSourceMapConsumer.prototype._charIsMappingSeparator =\n function SourceMapConsumer_charIsMappingSeparator(aStr, index) {\n var c = aStr.charAt(index);\n return c === \";\" || c === \",\";\n };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nSourceMapConsumer.prototype._parseMappings =\n function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n throw new Error(\"Subclasses must implement _parseMappings\");\n };\n\nSourceMapConsumer.GENERATED_ORDER = 1;\nSourceMapConsumer.ORIGINAL_ORDER = 2;\n\nSourceMapConsumer.GREATEST_LOWER_BOUND = 1;\nSourceMapConsumer.LEAST_UPPER_BOUND = 2;\n\n/**\n * Iterate over each mapping between an original source/line/column and a\n * generated line/column in this source map.\n *\n * @param Function aCallback\n * The function that is called with each mapping.\n * @param Object aContext\n * Optional. If specified, this object will be the value of `this` every\n * time that `aCallback` is called.\n * @param aOrder\n * Either `SourceMapConsumer.GENERATED_ORDER` or\n * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to\n * iterate over the mappings sorted by the generated file's line/column\n * order or the original's source/line/column order, respectively. Defaults to\n * `SourceMapConsumer.GENERATED_ORDER`.\n */\nSourceMapConsumer.prototype.eachMapping =\n function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {\n var context = aContext || null;\n var order = aOrder || SourceMapConsumer.GENERATED_ORDER;\n\n var mappings;\n switch (order) {\n case SourceMapConsumer.GENERATED_ORDER:\n mappings = this._generatedMappings;\n break;\n case SourceMapConsumer.ORIGINAL_ORDER:\n mappings = this._originalMappings;\n break;\n default:\n throw new Error(\"Unknown order of iteration.\");\n }\n\n var sourceRoot = this.sourceRoot;\n mappings.map(function (mapping) {\n var source = mapping.source === null ? null : this._sources.at(mapping.source);\n if (source != null && sourceRoot != null) {\n source = util.join(sourceRoot, source);\n }\n return {\n source: source,\n generatedLine: mapping.generatedLine,\n generatedColumn: mapping.generatedColumn,\n originalLine: mapping.originalLine,\n originalColumn: mapping.originalColumn,\n name: mapping.name === null ? null : this._names.at(mapping.name)\n };\n }, this).forEach(aCallback, context);\n };\n\n/**\n * Returns all generated line and column information for the original source,\n * line, and column provided. If no column is provided, returns all mappings\n * corresponding to a either the line we are searching for or the next\n * closest line that has any mappings. Otherwise, returns all mappings\n * corresponding to the given line and either the column we are searching for\n * or the next closest column that has any offsets.\n *\n * The only argument is an object with the following properties:\n *\n * - source: The filename of the original source.\n * - line: The line number in the original source.\n * - column: Optional. the column number in the original source.\n *\n * and an array of objects is returned, each with the following properties:\n *\n * - line: The line number in the generated source, or null.\n * - column: The column number in the generated source, or null.\n */\nSourceMapConsumer.prototype.allGeneratedPositionsFor =\n function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {\n var line = util.getArg(aArgs, 'line');\n\n // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping\n // returns the index of the closest mapping less than the needle. By\n // setting needle.originalColumn to 0, we thus find the last mapping for\n // the given line, provided such a mapping exists.\n var needle = {\n source: util.getArg(aArgs, 'source'),\n originalLine: line,\n originalColumn: util.getArg(aArgs, 'column', 0)\n };\n\n if (this.sourceRoot != null) {\n needle.source = util.relative(this.sourceRoot, needle.source);\n }\n if (!this._sources.has(needle.source)) {\n return [];\n }\n needle.source = this._sources.indexOf(needle.source);\n\n var mappings = [];\n\n var index = this._findMapping(needle,\n this._originalMappings,\n \"originalLine\",\n \"originalColumn\",\n util.compareByOriginalPositions,\n binarySearch.LEAST_UPPER_BOUND);\n if (index >= 0) {\n var mapping = this._originalMappings[index];\n\n if (aArgs.column === undefined) {\n var originalLine = mapping.originalLine;\n\n // Iterate until either we run out of mappings, or we run into\n // a mapping for a different line than the one we found. Since\n // mappings are sorted, this is guaranteed to find all mappings for\n // the line we found.\n while (mapping && mapping.originalLine === originalLine) {\n mappings.push({\n line: util.getArg(mapping, 'generatedLine', null),\n column: util.getArg(mapping, 'generatedColumn', null),\n lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n });\n\n mapping = this._originalMappings[++index];\n }\n } else {\n var originalColumn = mapping.originalColumn;\n\n // Iterate until either we run out of mappings, or we run into\n // a mapping for a different line than the one we were searching for.\n // Since mappings are sorted, this is guaranteed to find all mappings for\n // the line we are searching for.\n while (mapping &&\n mapping.originalLine === line &&\n mapping.originalColumn == originalColumn) {\n mappings.push({\n line: util.getArg(mapping, 'generatedLine', null),\n column: util.getArg(mapping, 'generatedColumn', null),\n lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n });\n\n mapping = this._originalMappings[++index];\n }\n }\n }\n\n return mappings;\n };\n\nexports.SourceMapConsumer = SourceMapConsumer;\n\n/**\n * A BasicSourceMapConsumer instance represents a parsed source map which we can\n * query for information about the original file positions by giving it a file\n * position in the generated source.\n *\n * The only parameter is the raw source map (either as a JSON string, or\n * already parsed to an object). According to the spec, source maps have the\n * following attributes:\n *\n * - version: Which version of the source map spec this map is following.\n * - sources: An array of URLs to the original source files.\n * - names: An array of identifiers which can be referrenced by individual mappings.\n * - sourceRoot: Optional. The URL root from which all sources are relative.\n * - sourcesContent: Optional. An array of contents of the original source files.\n * - mappings: A string of base64 VLQs which contain the actual mappings.\n * - file: Optional. The generated file this source map is associated with.\n *\n * Here is an example source map, taken from the source map spec[0]:\n *\n * {\n * version : 3,\n * file: \"out.js\",\n * sourceRoot : \"\",\n * sources: [\"foo.js\", \"bar.js\"],\n * names: [\"src\", \"maps\", \"are\", \"fun\"],\n * mappings: \"AA,AB;;ABCDE;\"\n * }\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#\n */\nfunction BasicSourceMapConsumer(aSourceMap) {\n var sourceMap = aSourceMap;\n if (typeof aSourceMap === 'string') {\n sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n }\n\n var version = util.getArg(sourceMap, 'version');\n var sources = util.getArg(sourceMap, 'sources');\n // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which\n // requires the array) to play nice here.\n var names = util.getArg(sourceMap, 'names', []);\n var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);\n var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);\n var mappings = util.getArg(sourceMap, 'mappings');\n var file = util.getArg(sourceMap, 'file', null);\n\n // Once again, Sass deviates from the spec and supplies the version as a\n // string rather than a number, so we use loose equality checking here.\n if (version != this._version) {\n throw new Error('Unsupported version: ' + version);\n }\n\n sources = sources\n .map(String)\n // Some source maps produce relative source paths like \"./foo.js\" instead of\n // \"foo.js\". Normalize these first so that future comparisons will succeed.\n // See bugzil.la/1090768.\n .map(util.normalize)\n // Always ensure that absolute sources are internally stored relative to\n // the source root, if the source root is absolute. Not doing this would\n // be particularly problematic when the source root is a prefix of the\n // source (valid, but why??). See github issue #199 and bugzil.la/1188982.\n .map(function (source) {\n return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)\n ? util.relative(sourceRoot, source)\n : source;\n });\n\n // Pass `true` below to allow duplicate names and sources. While source maps\n // are intended to be compressed and deduplicated, the TypeScript compiler\n // sometimes generates source maps with duplicates in them. See Github issue\n // #72 and bugzil.la/889492.\n this._names = ArraySet.fromArray(names.map(String), true);\n this._sources = ArraySet.fromArray(sources, true);\n\n this.sourceRoot = sourceRoot;\n this.sourcesContent = sourcesContent;\n this._mappings = mappings;\n this.file = file;\n}\n\nBasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nBasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;\n\n/**\n * Create a BasicSourceMapConsumer from a SourceMapGenerator.\n *\n * @param SourceMapGenerator aSourceMap\n * The source map that will be consumed.\n * @returns BasicSourceMapConsumer\n */\nBasicSourceMapConsumer.fromSourceMap =\n function SourceMapConsumer_fromSourceMap(aSourceMap) {\n var smc = Object.create(BasicSourceMapConsumer.prototype);\n\n var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);\n var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);\n smc.sourceRoot = aSourceMap._sourceRoot;\n smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),\n smc.sourceRoot);\n smc.file = aSourceMap._file;\n\n // Because we are modifying the entries (by converting string sources and\n // names to indices into the sources and names ArraySets), we have to make\n // a copy of the entry or else bad things happen. Shared mutable state\n // strikes again! See github issue #191.\n\n var generatedMappings = aSourceMap._mappings.toArray().slice();\n var destGeneratedMappings = smc.__generatedMappings = [];\n var destOriginalMappings = smc.__originalMappings = [];\n\n for (var i = 0, length = generatedMappings.length; i < length; i++) {\n var srcMapping = generatedMappings[i];\n var destMapping = new Mapping;\n destMapping.generatedLine = srcMapping.generatedLine;\n destMapping.generatedColumn = srcMapping.generatedColumn;\n\n if (srcMapping.source) {\n destMapping.source = sources.indexOf(srcMapping.source);\n destMapping.originalLine = srcMapping.originalLine;\n destMapping.originalColumn = srcMapping.originalColumn;\n\n if (srcMapping.name) {\n destMapping.name = names.indexOf(srcMapping.name);\n }\n\n destOriginalMappings.push(destMapping);\n }\n\n destGeneratedMappings.push(destMapping);\n }\n\n quickSort(smc.__originalMappings, util.compareByOriginalPositions);\n\n return smc;\n };\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nBasicSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {\n get: function () {\n return this._sources.toArray().map(function (s) {\n return this.sourceRoot != null ? util.join(this.sourceRoot, s) : s;\n }, this);\n }\n});\n\n/**\n * Provide the JIT with a nice shape / hidden class.\n */\nfunction Mapping() {\n this.generatedLine = 0;\n this.generatedColumn = 0;\n this.source = null;\n this.originalLine = null;\n this.originalColumn = null;\n this.name = null;\n}\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nBasicSourceMapConsumer.prototype._parseMappings =\n function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n var generatedLine = 1;\n var previousGeneratedColumn = 0;\n var previousOriginalLine = 0;\n var previousOriginalColumn = 0;\n var previousSource = 0;\n var previousName = 0;\n var length = aStr.length;\n var index = 0;\n var cachedSegments = {};\n var temp = {};\n var originalMappings = [];\n var generatedMappings = [];\n var mapping, str, segment, end, value;\n\n while (index < length) {\n if (aStr.charAt(index) === ';') {\n generatedLine++;\n index++;\n previousGeneratedColumn = 0;\n }\n else if (aStr.charAt(index) === ',') {\n index++;\n }\n else {\n mapping = new Mapping();\n mapping.generatedLine = generatedLine;\n\n // Because each offset is encoded relative to the previous one,\n // many segments often have the same encoding. We can exploit this\n // fact by caching the parsed variable length fields of each segment,\n // allowing us to avoid a second parse if we encounter the same\n // segment again.\n for (end = index; end < length; end++) {\n if (this._charIsMappingSeparator(aStr, end)) {\n break;\n }\n }\n str = aStr.slice(index, end);\n\n segment = cachedSegments[str];\n if (segment) {\n index += str.length;\n } else {\n segment = [];\n while (index < end) {\n base64VLQ.decode(aStr, index, temp);\n value = temp.value;\n index = temp.rest;\n segment.push(value);\n }\n\n if (segment.length === 2) {\n throw new Error('Found a source, but no line and column');\n }\n\n if (segment.length === 3) {\n throw new Error('Found a source and line, but no column');\n }\n\n cachedSegments[str] = segment;\n }\n\n // Generated column.\n mapping.generatedColumn = previousGeneratedColumn + segment[0];\n previousGeneratedColumn = mapping.generatedColumn;\n\n if (segment.length > 1) {\n // Original source.\n mapping.source = previousSource + segment[1];\n previousSource += segment[1];\n\n // Original line.\n mapping.originalLine = previousOriginalLine + segment[2];\n previousOriginalLine = mapping.originalLine;\n // Lines are stored 0-based\n mapping.originalLine += 1;\n\n // Original column.\n mapping.originalColumn = previousOriginalColumn + segment[3];\n previousOriginalColumn = mapping.originalColumn;\n\n if (segment.length > 4) {\n // Original name.\n mapping.name = previousName + segment[4];\n previousName += segment[4];\n }\n }\n\n generatedMappings.push(mapping);\n if (typeof mapping.originalLine === 'number') {\n originalMappings.push(mapping);\n }\n }\n }\n\n quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);\n this.__generatedMappings = generatedMappings;\n\n quickSort(originalMappings, util.compareByOriginalPositions);\n this.__originalMappings = originalMappings;\n };\n\n/**\n * Find the mapping that best matches the hypothetical \"needle\" mapping that\n * we are searching for in the given \"haystack\" of mappings.\n */\nBasicSourceMapConsumer.prototype._findMapping =\n function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,\n aColumnName, aComparator, aBias) {\n // To return the position we are searching for, we must first find the\n // mapping for the given position and then return the opposite position it\n // points to. Because the mappings are sorted, we can use binary search to\n // find the best mapping.\n\n if (aNeedle[aLineName] <= 0) {\n throw new TypeError('Line must be greater than or equal to 1, got '\n + aNeedle[aLineName]);\n }\n if (aNeedle[aColumnName] < 0) {\n throw new TypeError('Column must be greater than or equal to 0, got '\n + aNeedle[aColumnName]);\n }\n\n return binarySearch.search(aNeedle, aMappings, aComparator, aBias);\n };\n\n/**\n * Compute the last column for each generated mapping. The last column is\n * inclusive.\n */\nBasicSourceMapConsumer.prototype.computeColumnSpans =\n function SourceMapConsumer_computeColumnSpans() {\n for (var index = 0; index < this._generatedMappings.length; ++index) {\n var mapping = this._generatedMappings[index];\n\n // Mappings do not contain a field for the last generated columnt. We\n // can come up with an optimistic estimate, however, by assuming that\n // mappings are contiguous (i.e. given two consecutive mappings, the\n // first mapping ends where the second one starts).\n if (index + 1 < this._generatedMappings.length) {\n var nextMapping = this._generatedMappings[index + 1];\n\n if (mapping.generatedLine === nextMapping.generatedLine) {\n mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;\n continue;\n }\n }\n\n // The last mapping for each line spans the entire line.\n mapping.lastGeneratedColumn = Infinity;\n }\n };\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n * - line: The line number in the generated source.\n * - column: The column number in the generated source.\n * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n * - source: The original source file, or null.\n * - line: The line number in the original source, or null.\n * - column: The column number in the original source, or null.\n * - name: The original identifier, or null.\n */\nBasicSourceMapConsumer.prototype.originalPositionFor =\n function SourceMapConsumer_originalPositionFor(aArgs) {\n var needle = {\n generatedLine: util.getArg(aArgs, 'line'),\n generatedColumn: util.getArg(aArgs, 'column')\n };\n\n var index = this._findMapping(\n needle,\n this._generatedMappings,\n \"generatedLine\",\n \"generatedColumn\",\n util.compareByGeneratedPositionsDeflated,\n util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n );\n\n if (index >= 0) {\n var mapping = this._generatedMappings[index];\n\n if (mapping.generatedLine === needle.generatedLine) {\n var source = util.getArg(mapping, 'source', null);\n if (source !== null) {\n source = this._sources.at(source);\n if (this.sourceRoot != null) {\n source = util.join(this.sourceRoot, source);\n }\n }\n var name = util.getArg(mapping, 'name', null);\n if (name !== null) {\n name = this._names.at(name);\n }\n return {\n source: source,\n line: util.getArg(mapping, 'originalLine', null),\n column: util.getArg(mapping, 'originalColumn', null),\n name: name\n };\n }\n }\n\n return {\n source: null,\n line: null,\n column: null,\n name: null\n };\n };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nBasicSourceMapConsumer.prototype.hasContentsOfAllSources =\n function BasicSourceMapConsumer_hasContentsOfAllSources() {\n if (!this.sourcesContent) {\n return false;\n }\n return this.sourcesContent.length >= this._sources.size() &&\n !this.sourcesContent.some(function (sc) { return sc == null; });\n };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nBasicSourceMapConsumer.prototype.sourceContentFor =\n function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n if (!this.sourcesContent) {\n return null;\n }\n\n if (this.sourceRoot != null) {\n aSource = util.relative(this.sourceRoot, aSource);\n }\n\n if (this._sources.has(aSource)) {\n return this.sourcesContent[this._sources.indexOf(aSource)];\n }\n\n var url;\n if (this.sourceRoot != null\n && (url = util.urlParse(this.sourceRoot))) {\n // XXX: file:// URIs and absolute paths lead to unexpected behavior for\n // many users. We can help them out when they expect file:// URIs to\n // behave like it would if they were running a local HTTP server. See\n // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.\n var fileUriAbsPath = aSource.replace(/^file:\\/\\//, \"\");\n if (url.scheme == \"file\"\n && this._sources.has(fileUriAbsPath)) {\n return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]\n }\n\n if ((!url.path || url.path == \"/\")\n && this._sources.has(\"/\" + aSource)) {\n return this.sourcesContent[this._sources.indexOf(\"/\" + aSource)];\n }\n }\n\n // This function is used recursively from\n // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we\n // don't want to throw if we can't find the source - we just want to\n // return null, so we provide a flag to exit gracefully.\n if (nullOnMissing) {\n return null;\n }\n else {\n throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n }\n };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n * - source: The filename of the original source.\n * - line: The line number in the original source.\n * - column: The column number in the original source.\n * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n * - line: The line number in the generated source, or null.\n * - column: The column number in the generated source, or null.\n */\nBasicSourceMapConsumer.prototype.generatedPositionFor =\n function SourceMapConsumer_generatedPositionFor(aArgs) {\n var source = util.getArg(aArgs, 'source');\n if (this.sourceRoot != null) {\n source = util.relative(this.sourceRoot, source);\n }\n if (!this._sources.has(source)) {\n return {\n line: null,\n column: null,\n lastColumn: null\n };\n }\n source = this._sources.indexOf(source);\n\n var needle = {\n source: source,\n originalLine: util.getArg(aArgs, 'line'),\n originalColumn: util.getArg(aArgs, 'column')\n };\n\n var index = this._findMapping(\n needle,\n this._originalMappings,\n \"originalLine\",\n \"originalColumn\",\n util.compareByOriginalPositions,\n util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n );\n\n if (index >= 0) {\n var mapping = this._originalMappings[index];\n\n if (mapping.source === needle.source) {\n return {\n line: util.getArg(mapping, 'generatedLine', null),\n column: util.getArg(mapping, 'generatedColumn', null),\n lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n };\n }\n }\n\n return {\n line: null,\n column: null,\n lastColumn: null\n };\n };\n\nexports.BasicSourceMapConsumer = BasicSourceMapConsumer;\n\n/**\n * An IndexedSourceMapConsumer instance represents a parsed source map which\n * we can query for information. It differs from BasicSourceMapConsumer in\n * that it takes \"indexed\" source maps (i.e. ones with a \"sections\" field) as\n * input.\n *\n * The only parameter is a raw source map (either as a JSON string, or already\n * parsed to an object). According to the spec for indexed source maps, they\n * have the following attributes:\n *\n * - version: Which version of the source map spec this map is following.\n * - file: Optional. The generated file this source map is associated with.\n * - sections: A list of section definitions.\n *\n * Each value under the \"sections\" field has two fields:\n * - offset: The offset into the original specified at which this section\n * begins to apply, defined as an object with a \"line\" and \"column\"\n * field.\n * - map: A source map definition. This source map could also be indexed,\n * but doesn't have to be.\n *\n * Instead of the \"map\" field, it's also possible to have a \"url\" field\n * specifying a URL to retrieve a source map from, but that's currently\n * unsupported.\n *\n * Here's an example source map, taken from the source map spec[0], but\n * modified to omit a section which uses the \"url\" field.\n *\n * {\n * version : 3,\n * file: \"app.js\",\n * sections: [{\n * offset: {line:100, column:10},\n * map: {\n * version : 3,\n * file: \"section.js\",\n * sources: [\"foo.js\", \"bar.js\"],\n * names: [\"src\", \"maps\", \"are\", \"fun\"],\n * mappings: \"AAAA,E;;ABCDE;\"\n * }\n * }],\n * }\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt\n */\nfunction IndexedSourceMapConsumer(aSourceMap) {\n var sourceMap = aSourceMap;\n if (typeof aSourceMap === 'string') {\n sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n }\n\n var version = util.getArg(sourceMap, 'version');\n var sections = util.getArg(sourceMap, 'sections');\n\n if (version != this._version) {\n throw new Error('Unsupported version: ' + version);\n }\n\n this._sources = new ArraySet();\n this._names = new ArraySet();\n\n var lastOffset = {\n line: -1,\n column: 0\n };\n this._sections = sections.map(function (s) {\n if (s.url) {\n // The url field will require support for asynchronicity.\n // See https://github.com/mozilla/source-map/issues/16\n throw new Error('Support for url field in sections not implemented.');\n }\n var offset = util.getArg(s, 'offset');\n var offsetLine = util.getArg(offset, 'line');\n var offsetColumn = util.getArg(offset, 'column');\n\n if (offsetLine < lastOffset.line ||\n (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {\n throw new Error('Section offsets must be ordered and non-overlapping.');\n }\n lastOffset = offset;\n\n return {\n generatedOffset: {\n // The offset fields are 0-based, but we use 1-based indices when\n // encoding/decoding from VLQ.\n generatedLine: offsetLine + 1,\n generatedColumn: offsetColumn + 1\n },\n consumer: new SourceMapConsumer(util.getArg(s, 'map'))\n }\n });\n}\n\nIndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nIndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nIndexedSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {\n get: function () {\n var sources = [];\n for (var i = 0; i < this._sections.length; i++) {\n for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {\n sources.push(this._sections[i].consumer.sources[j]);\n }\n }\n return sources;\n }\n});\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n * - line: The line number in the generated source.\n * - column: The column number in the generated source.\n *\n * and an object is returned with the following properties:\n *\n * - source: The original source file, or null.\n * - line: The line number in the original source, or null.\n * - column: The column number in the original source, or null.\n * - name: The original identifier, or null.\n */\nIndexedSourceMapConsumer.prototype.originalPositionFor =\n function IndexedSourceMapConsumer_originalPositionFor(aArgs) {\n var needle = {\n generatedLine: util.getArg(aArgs, 'line'),\n generatedColumn: util.getArg(aArgs, 'column')\n };\n\n // Find the section containing the generated position we're trying to map\n // to an original position.\n var sectionIndex = binarySearch.search(needle, this._sections,\n function(needle, section) {\n var cmp = needle.generatedLine - section.generatedOffset.generatedLine;\n if (cmp) {\n return cmp;\n }\n\n return (needle.generatedColumn -\n section.generatedOffset.generatedColumn);\n });\n var section = this._sections[sectionIndex];\n\n if (!section) {\n return {\n source: null,\n line: null,\n column: null,\n name: null\n };\n }\n\n return section.consumer.originalPositionFor({\n line: needle.generatedLine -\n (section.generatedOffset.generatedLine - 1),\n column: needle.generatedColumn -\n (section.generatedOffset.generatedLine === needle.generatedLine\n ? section.generatedOffset.generatedColumn - 1\n : 0),\n bias: aArgs.bias\n });\n };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nIndexedSourceMapConsumer.prototype.hasContentsOfAllSources =\n function IndexedSourceMapConsumer_hasContentsOfAllSources() {\n return this._sections.every(function (s) {\n return s.consumer.hasContentsOfAllSources();\n });\n };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nIndexedSourceMapConsumer.prototype.sourceContentFor =\n function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n for (var i = 0; i < this._sections.length; i++) {\n var section = this._sections[i];\n\n var content = section.consumer.sourceContentFor(aSource, true);\n if (content) {\n return content;\n }\n }\n if (nullOnMissing) {\n return null;\n }\n else {\n throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n }\n };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n * - source: The filename of the original source.\n * - line: The line number in the original source.\n * - column: The column number in the original source.\n *\n * and an object is returned with the following properties:\n *\n * - line: The line number in the generated source, or null.\n * - column: The column number in the generated source, or null.\n */\nIndexedSourceMapConsumer.prototype.generatedPositionFor =\n function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {\n for (var i = 0; i < this._sections.length; i++) {\n var section = this._sections[i];\n\n // Only consider this section if the requested source is in the list of\n // sources of the consumer.\n if (section.consumer.sources.indexOf(util.getArg(aArgs, 'source')) === -1) {\n continue;\n }\n var generatedPosition = section.consumer.generatedPositionFor(aArgs);\n if (generatedPosition) {\n var ret = {\n line: generatedPosition.line +\n (section.generatedOffset.generatedLine - 1),\n column: generatedPosition.column +\n (section.generatedOffset.generatedLine === generatedPosition.line\n ? section.generatedOffset.generatedColumn - 1\n : 0)\n };\n return ret;\n }\n }\n\n return {\n line: null,\n column: null\n };\n };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nIndexedSourceMapConsumer.prototype._parseMappings =\n function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n this.__generatedMappings = [];\n this.__originalMappings = [];\n for (var i = 0; i < this._sections.length; i++) {\n var section = this._sections[i];\n var sectionMappings = section.consumer._generatedMappings;\n for (var j = 0; j < sectionMappings.length; j++) {\n var mapping = sectionMappings[j];\n\n var source = section.consumer._sources.at(mapping.source);\n if (section.consumer.sourceRoot !== null) {\n source = util.join(section.consumer.sourceRoot, source);\n }\n this._sources.add(source);\n source = this._sources.indexOf(source);\n\n var name = section.consumer._names.at(mapping.name);\n this._names.add(name);\n name = this._names.indexOf(name);\n\n // The mappings coming from the consumer for the section have\n // generated positions relative to the start of the section, so we\n // need to offset them to be relative to the start of the concatenated\n // generated file.\n var adjustedMapping = {\n source: source,\n generatedLine: mapping.generatedLine +\n (section.generatedOffset.generatedLine - 1),\n generatedColumn: mapping.generatedColumn +\n (section.generatedOffset.generatedLine === mapping.generatedLine\n ? section.generatedOffset.generatedColumn - 1\n : 0),\n originalLine: mapping.originalLine,\n originalColumn: mapping.originalColumn,\n name: name\n };\n\n this.__generatedMappings.push(adjustedMapping);\n if (typeof adjustedMapping.originalLine === 'number') {\n this.__originalMappings.push(adjustedMapping);\n }\n }\n }\n\n quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);\n quickSort(this.__originalMappings, util.compareByOriginalPositions);\n };\n\nexports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/source-map-consumer.js\n// module id = 7\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nexports.GREATEST_LOWER_BOUND = 1;\nexports.LEAST_UPPER_BOUND = 2;\n\n/**\n * Recursive implementation of binary search.\n *\n * @param aLow Indices here and lower do not contain the needle.\n * @param aHigh Indices here and higher do not contain the needle.\n * @param aNeedle The element being searched for.\n * @param aHaystack The non-empty array being searched.\n * @param aCompare Function which takes two elements and returns -1, 0, or 1.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n */\nfunction recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {\n // This function terminates when one of the following is true:\n //\n // 1. We find the exact element we are looking for.\n //\n // 2. We did not find the exact element, but we can return the index of\n // the next-closest element.\n //\n // 3. We did not find the exact element, and there is no next-closest\n // element than the one we are searching for, so we return -1.\n var mid = Math.floor((aHigh - aLow) / 2) + aLow;\n var cmp = aCompare(aNeedle, aHaystack[mid], true);\n if (cmp === 0) {\n // Found the element we are looking for.\n return mid;\n }\n else if (cmp > 0) {\n // Our needle is greater than aHaystack[mid].\n if (aHigh - mid > 1) {\n // The element is in the upper half.\n return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);\n }\n\n // The exact needle element was not found in this haystack. Determine if\n // we are in termination case (3) or (2) and return the appropriate thing.\n if (aBias == exports.LEAST_UPPER_BOUND) {\n return aHigh < aHaystack.length ? aHigh : -1;\n } else {\n return mid;\n }\n }\n else {\n // Our needle is less than aHaystack[mid].\n if (mid - aLow > 1) {\n // The element is in the lower half.\n return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);\n }\n\n // we are in termination case (3) or (2) and return the appropriate thing.\n if (aBias == exports.LEAST_UPPER_BOUND) {\n return mid;\n } else {\n return aLow < 0 ? -1 : aLow;\n }\n }\n}\n\n/**\n * This is an implementation of binary search which will always try and return\n * the index of the closest element if there is no exact hit. This is because\n * mappings between original and generated line/col pairs are single points,\n * and there is an implicit region between each of them, so a miss just means\n * that you aren't on the very start of a region.\n *\n * @param aNeedle The element you are looking for.\n * @param aHaystack The array that is being searched.\n * @param aCompare A function which takes the needle and an element in the\n * array and returns -1, 0, or 1 depending on whether the needle is less\n * than, equal to, or greater than the element, respectively.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.\n */\nexports.search = function search(aNeedle, aHaystack, aCompare, aBias) {\n if (aHaystack.length === 0) {\n return -1;\n }\n\n var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,\n aCompare, aBias || exports.GREATEST_LOWER_BOUND);\n if (index < 0) {\n return -1;\n }\n\n // We have found either the exact element, or the next-closest element than\n // the one we are searching for. However, there may be more than one such\n // element. Make sure we always return the smallest of these.\n while (index - 1 >= 0) {\n if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {\n break;\n }\n --index;\n }\n\n return index;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/binary-search.js\n// module id = 8\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n// It turns out that some (most?) JavaScript engines don't self-host\n// `Array.prototype.sort`. This makes sense because C++ will likely remain\n// faster than JS when doing raw CPU-intensive sorting. However, when using a\n// custom comparator function, calling back and forth between the VM's C++ and\n// JIT'd JS is rather slow *and* loses JIT type information, resulting in\n// worse generated code for the comparator function than would be optimal. In\n// fact, when sorting with a comparator, these costs outweigh the benefits of\n// sorting in C++. By using our own JS-implemented Quick Sort (below), we get\n// a ~3500ms mean speed-up in `bench/bench.html`.\n\n/**\n * Swap the elements indexed by `x` and `y` in the array `ary`.\n *\n * @param {Array} ary\n * The array.\n * @param {Number} x\n * The index of the first item.\n * @param {Number} y\n * The index of the second item.\n */\nfunction swap(ary, x, y) {\n var temp = ary[x];\n ary[x] = ary[y];\n ary[y] = temp;\n}\n\n/**\n * Returns a random integer within the range `low .. high` inclusive.\n *\n * @param {Number} low\n * The lower bound on the range.\n * @param {Number} high\n * The upper bound on the range.\n */\nfunction randomIntInRange(low, high) {\n return Math.round(low + (Math.random() * (high - low)));\n}\n\n/**\n * The Quick Sort algorithm.\n *\n * @param {Array} ary\n * An array to sort.\n * @param {function} comparator\n * Function to use to compare two items.\n * @param {Number} p\n * Start index of the array\n * @param {Number} r\n * End index of the array\n */\nfunction doQuickSort(ary, comparator, p, r) {\n // If our lower bound is less than our upper bound, we (1) partition the\n // array into two pieces and (2) recurse on each half. If it is not, this is\n // the empty array and our base case.\n\n if (p < r) {\n // (1) Partitioning.\n //\n // The partitioning chooses a pivot between `p` and `r` and moves all\n // elements that are less than or equal to the pivot to the before it, and\n // all the elements that are greater than it after it. The effect is that\n // once partition is done, the pivot is in the exact place it will be when\n // the array is put in sorted order, and it will not need to be moved\n // again. This runs in O(n) time.\n\n // Always choose a random pivot so that an input array which is reverse\n // sorted does not cause O(n^2) running time.\n var pivotIndex = randomIntInRange(p, r);\n var i = p - 1;\n\n swap(ary, pivotIndex, r);\n var pivot = ary[r];\n\n // Immediately after `j` is incremented in this loop, the following hold\n // true:\n //\n // * Every element in `ary[p .. i]` is less than or equal to the pivot.\n //\n // * Every element in `ary[i+1 .. j-1]` is greater than the pivot.\n for (var j = p; j < r; j++) {\n if (comparator(ary[j], pivot) <= 0) {\n i += 1;\n swap(ary, i, j);\n }\n }\n\n swap(ary, i + 1, j);\n var q = i + 1;\n\n // (2) Recurse on each half.\n\n doQuickSort(ary, comparator, p, q - 1);\n doQuickSort(ary, comparator, q + 1, r);\n }\n}\n\n/**\n * Sort the given array in-place with the given comparator function.\n *\n * @param {Array} ary\n * An array to sort.\n * @param {function} comparator\n * Function to use to compare two items.\n */\nexports.quickSort = function (ary, comparator) {\n doQuickSort(ary, comparator, 0, ary.length - 1);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/quick-sort.js\n// module id = 9\n// module chunks = 0","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar SourceMapGenerator = require('./source-map-generator').SourceMapGenerator;\nvar util = require('./util');\n\n// Matches a Windows-style `\\r\\n` newline or a `\\n` newline used by all other\n// operating systems these days (capturing the result).\nvar REGEX_NEWLINE = /(\\r?\\n)/;\n\n// Newline character code for charCodeAt() comparisons\nvar NEWLINE_CODE = 10;\n\n// Private symbol for identifying `SourceNode`s when multiple versions of\n// the source-map library are loaded. This MUST NOT CHANGE across\n// versions!\nvar isSourceNode = \"$$$isSourceNode$$$\";\n\n/**\n * SourceNodes provide a way to abstract over interpolating/concatenating\n * snippets of generated JavaScript source code while maintaining the line and\n * column information associated with the original source code.\n *\n * @param aLine The original line number.\n * @param aColumn The original column number.\n * @param aSource The original source's filename.\n * @param aChunks Optional. An array of strings which are snippets of\n * generated JS, or other SourceNodes.\n * @param aName The original identifier.\n */\nfunction SourceNode(aLine, aColumn, aSource, aChunks, aName) {\n this.children = [];\n this.sourceContents = {};\n this.line = aLine == null ? null : aLine;\n this.column = aColumn == null ? null : aColumn;\n this.source = aSource == null ? null : aSource;\n this.name = aName == null ? null : aName;\n this[isSourceNode] = true;\n if (aChunks != null) this.add(aChunks);\n}\n\n/**\n * Creates a SourceNode from generated code and a SourceMapConsumer.\n *\n * @param aGeneratedCode The generated code\n * @param aSourceMapConsumer The SourceMap for the generated code\n * @param aRelativePath Optional. The path that relative sources in the\n * SourceMapConsumer should be relative to.\n */\nSourceNode.fromStringWithSourceMap =\n function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {\n // The SourceNode we want to fill with the generated code\n // and the SourceMap\n var node = new SourceNode();\n\n // All even indices of this array are one line of the generated code,\n // while all odd indices are the newlines between two adjacent lines\n // (since `REGEX_NEWLINE` captures its match).\n // Processed fragments are accessed by calling `shiftNextLine`.\n var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);\n var remainingLinesIndex = 0;\n var shiftNextLine = function() {\n var lineContents = getNextLine();\n // The last line of a file might not have a newline.\n var newLine = getNextLine() || \"\";\n return lineContents + newLine;\n\n function getNextLine() {\n return remainingLinesIndex < remainingLines.length ?\n remainingLines[remainingLinesIndex++] : undefined;\n }\n };\n\n // We need to remember the position of \"remainingLines\"\n var lastGeneratedLine = 1, lastGeneratedColumn = 0;\n\n // The generate SourceNodes we need a code range.\n // To extract it current and last mapping is used.\n // Here we store the last mapping.\n var lastMapping = null;\n\n aSourceMapConsumer.eachMapping(function (mapping) {\n if (lastMapping !== null) {\n // We add the code from \"lastMapping\" to \"mapping\":\n // First check if there is a new line in between.\n if (lastGeneratedLine < mapping.generatedLine) {\n // Associate first line with \"lastMapping\"\n addMappingWithCode(lastMapping, shiftNextLine());\n lastGeneratedLine++;\n lastGeneratedColumn = 0;\n // The remaining code is added without mapping\n } else {\n // There is no new line in between.\n // Associate the code between \"lastGeneratedColumn\" and\n // \"mapping.generatedColumn\" with \"lastMapping\"\n var nextLine = remainingLines[remainingLinesIndex];\n var code = nextLine.substr(0, mapping.generatedColumn -\n lastGeneratedColumn);\n remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -\n lastGeneratedColumn);\n lastGeneratedColumn = mapping.generatedColumn;\n addMappingWithCode(lastMapping, code);\n // No more remaining code, continue\n lastMapping = mapping;\n return;\n }\n }\n // We add the generated code until the first mapping\n // to the SourceNode without any mapping.\n // Each line is added as separate string.\n while (lastGeneratedLine < mapping.generatedLine) {\n node.add(shiftNextLine());\n lastGeneratedLine++;\n }\n if (lastGeneratedColumn < mapping.generatedColumn) {\n var nextLine = remainingLines[remainingLinesIndex];\n node.add(nextLine.substr(0, mapping.generatedColumn));\n remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);\n lastGeneratedColumn = mapping.generatedColumn;\n }\n lastMapping = mapping;\n }, this);\n // We have processed all mappings.\n if (remainingLinesIndex < remainingLines.length) {\n if (lastMapping) {\n // Associate the remaining code in the current line with \"lastMapping\"\n addMappingWithCode(lastMapping, shiftNextLine());\n }\n // and add the remaining lines without any mapping\n node.add(remainingLines.splice(remainingLinesIndex).join(\"\"));\n }\n\n // Copy sourcesContent into SourceNode\n aSourceMapConsumer.sources.forEach(function (sourceFile) {\n var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n if (content != null) {\n if (aRelativePath != null) {\n sourceFile = util.join(aRelativePath, sourceFile);\n }\n node.setSourceContent(sourceFile, content);\n }\n });\n\n return node;\n\n function addMappingWithCode(mapping, code) {\n if (mapping === null || mapping.source === undefined) {\n node.add(code);\n } else {\n var source = aRelativePath\n ? util.join(aRelativePath, mapping.source)\n : mapping.source;\n node.add(new SourceNode(mapping.originalLine,\n mapping.originalColumn,\n source,\n code,\n mapping.name));\n }\n }\n };\n\n/**\n * Add a chunk of generated JS to this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n * SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.add = function SourceNode_add(aChunk) {\n if (Array.isArray(aChunk)) {\n aChunk.forEach(function (chunk) {\n this.add(chunk);\n }, this);\n }\n else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n if (aChunk) {\n this.children.push(aChunk);\n }\n }\n else {\n throw new TypeError(\n \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n );\n }\n return this;\n};\n\n/**\n * Add a chunk of generated JS to the beginning of this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n * SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {\n if (Array.isArray(aChunk)) {\n for (var i = aChunk.length-1; i >= 0; i--) {\n this.prepend(aChunk[i]);\n }\n }\n else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n this.children.unshift(aChunk);\n }\n else {\n throw new TypeError(\n \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n );\n }\n return this;\n};\n\n/**\n * Walk over the tree of JS snippets in this node and its children. The\n * walking function is called once for each snippet of JS and is passed that\n * snippet and the its original associated source's line/column location.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walk = function SourceNode_walk(aFn) {\n var chunk;\n for (var i = 0, len = this.children.length; i < len; i++) {\n chunk = this.children[i];\n if (chunk[isSourceNode]) {\n chunk.walk(aFn);\n }\n else {\n if (chunk !== '') {\n aFn(chunk, { source: this.source,\n line: this.line,\n column: this.column,\n name: this.name });\n }\n }\n }\n};\n\n/**\n * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between\n * each of `this.children`.\n *\n * @param aSep The separator.\n */\nSourceNode.prototype.join = function SourceNode_join(aSep) {\n var newChildren;\n var i;\n var len = this.children.length;\n if (len > 0) {\n newChildren = [];\n for (i = 0; i < len-1; i++) {\n newChildren.push(this.children[i]);\n newChildren.push(aSep);\n }\n newChildren.push(this.children[i]);\n this.children = newChildren;\n }\n return this;\n};\n\n/**\n * Call String.prototype.replace on the very right-most source snippet. Useful\n * for trimming whitespace from the end of a source node, etc.\n *\n * @param aPattern The pattern to replace.\n * @param aReplacement The thing to replace the pattern with.\n */\nSourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {\n var lastChild = this.children[this.children.length - 1];\n if (lastChild[isSourceNode]) {\n lastChild.replaceRight(aPattern, aReplacement);\n }\n else if (typeof lastChild === 'string') {\n this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);\n }\n else {\n this.children.push(''.replace(aPattern, aReplacement));\n }\n return this;\n};\n\n/**\n * Set the source content for a source file. This will be added to the SourceMapGenerator\n * in the sourcesContent field.\n *\n * @param aSourceFile The filename of the source file\n * @param aSourceContent The content of the source file\n */\nSourceNode.prototype.setSourceContent =\n function SourceNode_setSourceContent(aSourceFile, aSourceContent) {\n this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;\n };\n\n/**\n * Walk over the tree of SourceNodes. The walking function is called for each\n * source file content and is passed the filename and source content.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walkSourceContents =\n function SourceNode_walkSourceContents(aFn) {\n for (var i = 0, len = this.children.length; i < len; i++) {\n if (this.children[i][isSourceNode]) {\n this.children[i].walkSourceContents(aFn);\n }\n }\n\n var sources = Object.keys(this.sourceContents);\n for (var i = 0, len = sources.length; i < len; i++) {\n aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);\n }\n };\n\n/**\n * Return the string representation of this source node. Walks over the tree\n * and concatenates all the various snippets together to one string.\n */\nSourceNode.prototype.toString = function SourceNode_toString() {\n var str = \"\";\n this.walk(function (chunk) {\n str += chunk;\n });\n return str;\n};\n\n/**\n * Returns the string representation of this source node along with a source\n * map.\n */\nSourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {\n var generated = {\n code: \"\",\n line: 1,\n column: 0\n };\n var map = new SourceMapGenerator(aArgs);\n var sourceMappingActive = false;\n var lastOriginalSource = null;\n var lastOriginalLine = null;\n var lastOriginalColumn = null;\n var lastOriginalName = null;\n this.walk(function (chunk, original) {\n generated.code += chunk;\n if (original.source !== null\n && original.line !== null\n && original.column !== null) {\n if(lastOriginalSource !== original.source\n || lastOriginalLine !== original.line\n || lastOriginalColumn !== original.column\n || lastOriginalName !== original.name) {\n map.addMapping({\n source: original.source,\n original: {\n line: original.line,\n column: original.column\n },\n generated: {\n line: generated.line,\n column: generated.column\n },\n name: original.name\n });\n }\n lastOriginalSource = original.source;\n lastOriginalLine = original.line;\n lastOriginalColumn = original.column;\n lastOriginalName = original.name;\n sourceMappingActive = true;\n } else if (sourceMappingActive) {\n map.addMapping({\n generated: {\n line: generated.line,\n column: generated.column\n }\n });\n lastOriginalSource = null;\n sourceMappingActive = false;\n }\n for (var idx = 0, length = chunk.length; idx < length; idx++) {\n if (chunk.charCodeAt(idx) === NEWLINE_CODE) {\n generated.line++;\n generated.column = 0;\n // Mappings end at eol\n if (idx + 1 === length) {\n lastOriginalSource = null;\n sourceMappingActive = false;\n } else if (sourceMappingActive) {\n map.addMapping({\n source: original.source,\n original: {\n line: original.line,\n column: original.column\n },\n generated: {\n line: generated.line,\n column: generated.column\n },\n name: original.name\n });\n }\n } else {\n generated.column++;\n }\n }\n });\n this.walkSourceContents(function (sourceFile, sourceContent) {\n map.setSourceContent(sourceFile, sourceContent);\n });\n\n return { code: generated.code, map: map };\n};\n\nexports.SourceNode = SourceNode;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./lib/source-node.js\n// module id = 10\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file diff --git a/node_modules/source-map/lib/array-set.js b/node_modules/source-map/lib/array-set.js deleted file mode 100644 index fbd5c81..0000000 --- a/node_modules/source-map/lib/array-set.js +++ /dev/null @@ -1,121 +0,0 @@ -/* -*- Mode: js; js-indent-level: 2; -*- */ -/* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - -var util = require('./util'); -var has = Object.prototype.hasOwnProperty; -var hasNativeMap = typeof Map !== "undefined"; - -/** - * A data structure which is a combination of an array and a set. Adding a new - * member is O(1), testing for membership is O(1), and finding the index of an - * element is O(1). Removing elements from the set is not supported. Only - * strings are supported for membership. - */ -function ArraySet() { - this._array = []; - this._set = hasNativeMap ? new Map() : Object.create(null); -} - -/** - * Static method for creating ArraySet instances from an existing array. - */ -ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) { - var set = new ArraySet(); - for (var i = 0, len = aArray.length; i < len; i++) { - set.add(aArray[i], aAllowDuplicates); - } - return set; -}; - -/** - * Return how many unique items are in this ArraySet. If duplicates have been - * added, than those do not count towards the size. - * - * @returns Number - */ -ArraySet.prototype.size = function ArraySet_size() { - return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length; -}; - -/** - * Add the given string to this set. - * - * @param String aStr - */ -ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) { - var sStr = hasNativeMap ? aStr : util.toSetString(aStr); - var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr); - var idx = this._array.length; - if (!isDuplicate || aAllowDuplicates) { - this._array.push(aStr); - } - if (!isDuplicate) { - if (hasNativeMap) { - this._set.set(aStr, idx); - } else { - this._set[sStr] = idx; - } - } -}; - -/** - * Is the given string a member of this set? - * - * @param String aStr - */ -ArraySet.prototype.has = function ArraySet_has(aStr) { - if (hasNativeMap) { - return this._set.has(aStr); - } else { - var sStr = util.toSetString(aStr); - return has.call(this._set, sStr); - } -}; - -/** - * What is the index of the given string in the array? - * - * @param String aStr - */ -ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) { - if (hasNativeMap) { - var idx = this._set.get(aStr); - if (idx >= 0) { - return idx; - } - } else { - var sStr = util.toSetString(aStr); - if (has.call(this._set, sStr)) { - return this._set[sStr]; - } - } - - throw new Error('"' + aStr + '" is not in the set.'); -}; - -/** - * What is the element at the given index? - * - * @param Number aIdx - */ -ArraySet.prototype.at = function ArraySet_at(aIdx) { - if (aIdx >= 0 && aIdx < this._array.length) { - return this._array[aIdx]; - } - throw new Error('No element indexed by ' + aIdx); -}; - -/** - * Returns the array representation of this set (which has the proper indices - * indicated by indexOf). Note that this is a copy of the internal array used - * for storing the members so that no one can mess with internal state. - */ -ArraySet.prototype.toArray = function ArraySet_toArray() { - return this._array.slice(); -}; - -exports.ArraySet = ArraySet; diff --git a/node_modules/source-map/lib/base64-vlq.js b/node_modules/source-map/lib/base64-vlq.js deleted file mode 100644 index 612b404..0000000 --- a/node_modules/source-map/lib/base64-vlq.js +++ /dev/null @@ -1,140 +0,0 @@ -/* -*- Mode: js; js-indent-level: 2; -*- */ -/* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - * - * Based on the Base 64 VLQ implementation in Closure Compiler: - * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java - * - * Copyright 2011 The Closure Compiler Authors. All rights reserved. - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -var base64 = require('./base64'); - -// A single base 64 digit can contain 6 bits of data. For the base 64 variable -// length quantities we use in the source map spec, the first bit is the sign, -// the next four bits are the actual value, and the 6th bit is the -// continuation bit. The continuation bit tells us whether there are more -// digits in this value following this digit. -// -// Continuation -// | Sign -// | | -// V V -// 101011 - -var VLQ_BASE_SHIFT = 5; - -// binary: 100000 -var VLQ_BASE = 1 << VLQ_BASE_SHIFT; - -// binary: 011111 -var VLQ_BASE_MASK = VLQ_BASE - 1; - -// binary: 100000 -var VLQ_CONTINUATION_BIT = VLQ_BASE; - -/** - * Converts from a two-complement value to a value where the sign bit is - * placed in the least significant bit. For example, as decimals: - * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary) - * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary) - */ -function toVLQSigned(aValue) { - return aValue < 0 - ? ((-aValue) << 1) + 1 - : (aValue << 1) + 0; -} - -/** - * Converts to a two-complement value from a value where the sign bit is - * placed in the least significant bit. For example, as decimals: - * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1 - * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2 - */ -function fromVLQSigned(aValue) { - var isNegative = (aValue & 1) === 1; - var shifted = aValue >> 1; - return isNegative - ? -shifted - : shifted; -} - -/** - * Returns the base 64 VLQ encoded value. - */ -exports.encode = function base64VLQ_encode(aValue) { - var encoded = ""; - var digit; - - var vlq = toVLQSigned(aValue); - - do { - digit = vlq & VLQ_BASE_MASK; - vlq >>>= VLQ_BASE_SHIFT; - if (vlq > 0) { - // There are still more digits in this value, so we must make sure the - // continuation bit is marked. - digit |= VLQ_CONTINUATION_BIT; - } - encoded += base64.encode(digit); - } while (vlq > 0); - - return encoded; -}; - -/** - * Decodes the next base 64 VLQ value from the given string and returns the - * value and the rest of the string via the out parameter. - */ -exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) { - var strLen = aStr.length; - var result = 0; - var shift = 0; - var continuation, digit; - - do { - if (aIndex >= strLen) { - throw new Error("Expected more digits in base 64 VLQ value."); - } - - digit = base64.decode(aStr.charCodeAt(aIndex++)); - if (digit === -1) { - throw new Error("Invalid base64 digit: " + aStr.charAt(aIndex - 1)); - } - - continuation = !!(digit & VLQ_CONTINUATION_BIT); - digit &= VLQ_BASE_MASK; - result = result + (digit << shift); - shift += VLQ_BASE_SHIFT; - } while (continuation); - - aOutParam.value = fromVLQSigned(result); - aOutParam.rest = aIndex; -}; diff --git a/node_modules/source-map/lib/base64.js b/node_modules/source-map/lib/base64.js deleted file mode 100644 index 8aa86b3..0000000 --- a/node_modules/source-map/lib/base64.js +++ /dev/null @@ -1,67 +0,0 @@ -/* -*- Mode: js; js-indent-level: 2; -*- */ -/* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - -var intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split(''); - -/** - * Encode an integer in the range of 0 to 63 to a single base 64 digit. - */ -exports.encode = function (number) { - if (0 <= number && number < intToCharMap.length) { - return intToCharMap[number]; - } - throw new TypeError("Must be between 0 and 63: " + number); -}; - -/** - * Decode a single base 64 character code digit to an integer. Returns -1 on - * failure. - */ -exports.decode = function (charCode) { - var bigA = 65; // 'A' - var bigZ = 90; // 'Z' - - var littleA = 97; // 'a' - var littleZ = 122; // 'z' - - var zero = 48; // '0' - var nine = 57; // '9' - - var plus = 43; // '+' - var slash = 47; // '/' - - var littleOffset = 26; - var numberOffset = 52; - - // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ - if (bigA <= charCode && charCode <= bigZ) { - return (charCode - bigA); - } - - // 26 - 51: abcdefghijklmnopqrstuvwxyz - if (littleA <= charCode && charCode <= littleZ) { - return (charCode - littleA + littleOffset); - } - - // 52 - 61: 0123456789 - if (zero <= charCode && charCode <= nine) { - return (charCode - zero + numberOffset); - } - - // 62: + - if (charCode == plus) { - return 62; - } - - // 63: / - if (charCode == slash) { - return 63; - } - - // Invalid base64 digit. - return -1; -}; diff --git a/node_modules/source-map/lib/binary-search.js b/node_modules/source-map/lib/binary-search.js deleted file mode 100644 index 010ac94..0000000 --- a/node_modules/source-map/lib/binary-search.js +++ /dev/null @@ -1,111 +0,0 @@ -/* -*- Mode: js; js-indent-level: 2; -*- */ -/* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - -exports.GREATEST_LOWER_BOUND = 1; -exports.LEAST_UPPER_BOUND = 2; - -/** - * Recursive implementation of binary search. - * - * @param aLow Indices here and lower do not contain the needle. - * @param aHigh Indices here and higher do not contain the needle. - * @param aNeedle The element being searched for. - * @param aHaystack The non-empty array being searched. - * @param aCompare Function which takes two elements and returns -1, 0, or 1. - * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or - * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the - * closest element that is smaller than or greater than the one we are - * searching for, respectively, if the exact element cannot be found. - */ -function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) { - // This function terminates when one of the following is true: - // - // 1. We find the exact element we are looking for. - // - // 2. We did not find the exact element, but we can return the index of - // the next-closest element. - // - // 3. We did not find the exact element, and there is no next-closest - // element than the one we are searching for, so we return -1. - var mid = Math.floor((aHigh - aLow) / 2) + aLow; - var cmp = aCompare(aNeedle, aHaystack[mid], true); - if (cmp === 0) { - // Found the element we are looking for. - return mid; - } - else if (cmp > 0) { - // Our needle is greater than aHaystack[mid]. - if (aHigh - mid > 1) { - // The element is in the upper half. - return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias); - } - - // The exact needle element was not found in this haystack. Determine if - // we are in termination case (3) or (2) and return the appropriate thing. - if (aBias == exports.LEAST_UPPER_BOUND) { - return aHigh < aHaystack.length ? aHigh : -1; - } else { - return mid; - } - } - else { - // Our needle is less than aHaystack[mid]. - if (mid - aLow > 1) { - // The element is in the lower half. - return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias); - } - - // we are in termination case (3) or (2) and return the appropriate thing. - if (aBias == exports.LEAST_UPPER_BOUND) { - return mid; - } else { - return aLow < 0 ? -1 : aLow; - } - } -} - -/** - * This is an implementation of binary search which will always try and return - * the index of the closest element if there is no exact hit. This is because - * mappings between original and generated line/col pairs are single points, - * and there is an implicit region between each of them, so a miss just means - * that you aren't on the very start of a region. - * - * @param aNeedle The element you are looking for. - * @param aHaystack The array that is being searched. - * @param aCompare A function which takes the needle and an element in the - * array and returns -1, 0, or 1 depending on whether the needle is less - * than, equal to, or greater than the element, respectively. - * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or - * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the - * closest element that is smaller than or greater than the one we are - * searching for, respectively, if the exact element cannot be found. - * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'. - */ -exports.search = function search(aNeedle, aHaystack, aCompare, aBias) { - if (aHaystack.length === 0) { - return -1; - } - - var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack, - aCompare, aBias || exports.GREATEST_LOWER_BOUND); - if (index < 0) { - return -1; - } - - // We have found either the exact element, or the next-closest element than - // the one we are searching for. However, there may be more than one such - // element. Make sure we always return the smallest of these. - while (index - 1 >= 0) { - if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) { - break; - } - --index; - } - - return index; -}; diff --git a/node_modules/source-map/lib/mapping-list.js b/node_modules/source-map/lib/mapping-list.js deleted file mode 100644 index 06d1274..0000000 --- a/node_modules/source-map/lib/mapping-list.js +++ /dev/null @@ -1,79 +0,0 @@ -/* -*- Mode: js; js-indent-level: 2; -*- */ -/* - * Copyright 2014 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - -var util = require('./util'); - -/** - * Determine whether mappingB is after mappingA with respect to generated - * position. - */ -function generatedPositionAfter(mappingA, mappingB) { - // Optimized for most common case - var lineA = mappingA.generatedLine; - var lineB = mappingB.generatedLine; - var columnA = mappingA.generatedColumn; - var columnB = mappingB.generatedColumn; - return lineB > lineA || lineB == lineA && columnB >= columnA || - util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0; -} - -/** - * A data structure to provide a sorted view of accumulated mappings in a - * performance conscious manner. It trades a neglibable overhead in general - * case for a large speedup in case of mappings being added in order. - */ -function MappingList() { - this._array = []; - this._sorted = true; - // Serves as infimum - this._last = {generatedLine: -1, generatedColumn: 0}; -} - -/** - * Iterate through internal items. This method takes the same arguments that - * `Array.prototype.forEach` takes. - * - * NOTE: The order of the mappings is NOT guaranteed. - */ -MappingList.prototype.unsortedForEach = - function MappingList_forEach(aCallback, aThisArg) { - this._array.forEach(aCallback, aThisArg); - }; - -/** - * Add the given source mapping. - * - * @param Object aMapping - */ -MappingList.prototype.add = function MappingList_add(aMapping) { - if (generatedPositionAfter(this._last, aMapping)) { - this._last = aMapping; - this._array.push(aMapping); - } else { - this._sorted = false; - this._array.push(aMapping); - } -}; - -/** - * Returns the flat, sorted array of mappings. The mappings are sorted by - * generated position. - * - * WARNING: This method returns internal data without copying, for - * performance. The return value must NOT be mutated, and should be treated as - * an immutable borrow. If you want to take ownership, you must make your own - * copy. - */ -MappingList.prototype.toArray = function MappingList_toArray() { - if (!this._sorted) { - this._array.sort(util.compareByGeneratedPositionsInflated); - this._sorted = true; - } - return this._array; -}; - -exports.MappingList = MappingList; diff --git a/node_modules/source-map/lib/quick-sort.js b/node_modules/source-map/lib/quick-sort.js deleted file mode 100644 index 6a7caad..0000000 --- a/node_modules/source-map/lib/quick-sort.js +++ /dev/null @@ -1,114 +0,0 @@ -/* -*- Mode: js; js-indent-level: 2; -*- */ -/* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - -// It turns out that some (most?) JavaScript engines don't self-host -// `Array.prototype.sort`. This makes sense because C++ will likely remain -// faster than JS when doing raw CPU-intensive sorting. However, when using a -// custom comparator function, calling back and forth between the VM's C++ and -// JIT'd JS is rather slow *and* loses JIT type information, resulting in -// worse generated code for the comparator function than would be optimal. In -// fact, when sorting with a comparator, these costs outweigh the benefits of -// sorting in C++. By using our own JS-implemented Quick Sort (below), we get -// a ~3500ms mean speed-up in `bench/bench.html`. - -/** - * Swap the elements indexed by `x` and `y` in the array `ary`. - * - * @param {Array} ary - * The array. - * @param {Number} x - * The index of the first item. - * @param {Number} y - * The index of the second item. - */ -function swap(ary, x, y) { - var temp = ary[x]; - ary[x] = ary[y]; - ary[y] = temp; -} - -/** - * Returns a random integer within the range `low .. high` inclusive. - * - * @param {Number} low - * The lower bound on the range. - * @param {Number} high - * The upper bound on the range. - */ -function randomIntInRange(low, high) { - return Math.round(low + (Math.random() * (high - low))); -} - -/** - * The Quick Sort algorithm. - * - * @param {Array} ary - * An array to sort. - * @param {function} comparator - * Function to use to compare two items. - * @param {Number} p - * Start index of the array - * @param {Number} r - * End index of the array - */ -function doQuickSort(ary, comparator, p, r) { - // If our lower bound is less than our upper bound, we (1) partition the - // array into two pieces and (2) recurse on each half. If it is not, this is - // the empty array and our base case. - - if (p < r) { - // (1) Partitioning. - // - // The partitioning chooses a pivot between `p` and `r` and moves all - // elements that are less than or equal to the pivot to the before it, and - // all the elements that are greater than it after it. The effect is that - // once partition is done, the pivot is in the exact place it will be when - // the array is put in sorted order, and it will not need to be moved - // again. This runs in O(n) time. - - // Always choose a random pivot so that an input array which is reverse - // sorted does not cause O(n^2) running time. - var pivotIndex = randomIntInRange(p, r); - var i = p - 1; - - swap(ary, pivotIndex, r); - var pivot = ary[r]; - - // Immediately after `j` is incremented in this loop, the following hold - // true: - // - // * Every element in `ary[p .. i]` is less than or equal to the pivot. - // - // * Every element in `ary[i+1 .. j-1]` is greater than the pivot. - for (var j = p; j < r; j++) { - if (comparator(ary[j], pivot) <= 0) { - i += 1; - swap(ary, i, j); - } - } - - swap(ary, i + 1, j); - var q = i + 1; - - // (2) Recurse on each half. - - doQuickSort(ary, comparator, p, q - 1); - doQuickSort(ary, comparator, q + 1, r); - } -} - -/** - * Sort the given array in-place with the given comparator function. - * - * @param {Array} ary - * An array to sort. - * @param {function} comparator - * Function to use to compare two items. - */ -exports.quickSort = function (ary, comparator) { - doQuickSort(ary, comparator, 0, ary.length - 1); -}; diff --git a/node_modules/source-map/lib/source-map-consumer.js b/node_modules/source-map/lib/source-map-consumer.js deleted file mode 100644 index 6abcc28..0000000 --- a/node_modules/source-map/lib/source-map-consumer.js +++ /dev/null @@ -1,1082 +0,0 @@ -/* -*- Mode: js; js-indent-level: 2; -*- */ -/* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - -var util = require('./util'); -var binarySearch = require('./binary-search'); -var ArraySet = require('./array-set').ArraySet; -var base64VLQ = require('./base64-vlq'); -var quickSort = require('./quick-sort').quickSort; - -function SourceMapConsumer(aSourceMap) { - var sourceMap = aSourceMap; - if (typeof aSourceMap === 'string') { - sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, '')); - } - - return sourceMap.sections != null - ? new IndexedSourceMapConsumer(sourceMap) - : new BasicSourceMapConsumer(sourceMap); -} - -SourceMapConsumer.fromSourceMap = function(aSourceMap) { - return BasicSourceMapConsumer.fromSourceMap(aSourceMap); -} - -/** - * The version of the source mapping spec that we are consuming. - */ -SourceMapConsumer.prototype._version = 3; - -// `__generatedMappings` and `__originalMappings` are arrays that hold the -// parsed mapping coordinates from the source map's "mappings" attribute. They -// are lazily instantiated, accessed via the `_generatedMappings` and -// `_originalMappings` getters respectively, and we only parse the mappings -// and create these arrays once queried for a source location. We jump through -// these hoops because there can be many thousands of mappings, and parsing -// them is expensive, so we only want to do it if we must. -// -// Each object in the arrays is of the form: -// -// { -// generatedLine: The line number in the generated code, -// generatedColumn: The column number in the generated code, -// source: The path to the original source file that generated this -// chunk of code, -// originalLine: The line number in the original source that -// corresponds to this chunk of generated code, -// originalColumn: The column number in the original source that -// corresponds to this chunk of generated code, -// name: The name of the original symbol which generated this chunk of -// code. -// } -// -// All properties except for `generatedLine` and `generatedColumn` can be -// `null`. -// -// `_generatedMappings` is ordered by the generated positions. -// -// `_originalMappings` is ordered by the original positions. - -SourceMapConsumer.prototype.__generatedMappings = null; -Object.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', { - get: function () { - if (!this.__generatedMappings) { - this._parseMappings(this._mappings, this.sourceRoot); - } - - return this.__generatedMappings; - } -}); - -SourceMapConsumer.prototype.__originalMappings = null; -Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', { - get: function () { - if (!this.__originalMappings) { - this._parseMappings(this._mappings, this.sourceRoot); - } - - return this.__originalMappings; - } -}); - -SourceMapConsumer.prototype._charIsMappingSeparator = - function SourceMapConsumer_charIsMappingSeparator(aStr, index) { - var c = aStr.charAt(index); - return c === ";" || c === ","; - }; - -/** - * Parse the mappings in a string in to a data structure which we can easily - * query (the ordered arrays in the `this.__generatedMappings` and - * `this.__originalMappings` properties). - */ -SourceMapConsumer.prototype._parseMappings = - function SourceMapConsumer_parseMappings(aStr, aSourceRoot) { - throw new Error("Subclasses must implement _parseMappings"); - }; - -SourceMapConsumer.GENERATED_ORDER = 1; -SourceMapConsumer.ORIGINAL_ORDER = 2; - -SourceMapConsumer.GREATEST_LOWER_BOUND = 1; -SourceMapConsumer.LEAST_UPPER_BOUND = 2; - -/** - * Iterate over each mapping between an original source/line/column and a - * generated line/column in this source map. - * - * @param Function aCallback - * The function that is called with each mapping. - * @param Object aContext - * Optional. If specified, this object will be the value of `this` every - * time that `aCallback` is called. - * @param aOrder - * Either `SourceMapConsumer.GENERATED_ORDER` or - * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to - * iterate over the mappings sorted by the generated file's line/column - * order or the original's source/line/column order, respectively. Defaults to - * `SourceMapConsumer.GENERATED_ORDER`. - */ -SourceMapConsumer.prototype.eachMapping = - function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) { - var context = aContext || null; - var order = aOrder || SourceMapConsumer.GENERATED_ORDER; - - var mappings; - switch (order) { - case SourceMapConsumer.GENERATED_ORDER: - mappings = this._generatedMappings; - break; - case SourceMapConsumer.ORIGINAL_ORDER: - mappings = this._originalMappings; - break; - default: - throw new Error("Unknown order of iteration."); - } - - var sourceRoot = this.sourceRoot; - mappings.map(function (mapping) { - var source = mapping.source === null ? null : this._sources.at(mapping.source); - if (source != null && sourceRoot != null) { - source = util.join(sourceRoot, source); - } - return { - source: source, - generatedLine: mapping.generatedLine, - generatedColumn: mapping.generatedColumn, - originalLine: mapping.originalLine, - originalColumn: mapping.originalColumn, - name: mapping.name === null ? null : this._names.at(mapping.name) - }; - }, this).forEach(aCallback, context); - }; - -/** - * Returns all generated line and column information for the original source, - * line, and column provided. If no column is provided, returns all mappings - * corresponding to a either the line we are searching for or the next - * closest line that has any mappings. Otherwise, returns all mappings - * corresponding to the given line and either the column we are searching for - * or the next closest column that has any offsets. - * - * The only argument is an object with the following properties: - * - * - source: The filename of the original source. - * - line: The line number in the original source. - * - column: Optional. the column number in the original source. - * - * and an array of objects is returned, each with the following properties: - * - * - line: The line number in the generated source, or null. - * - column: The column number in the generated source, or null. - */ -SourceMapConsumer.prototype.allGeneratedPositionsFor = - function SourceMapConsumer_allGeneratedPositionsFor(aArgs) { - var line = util.getArg(aArgs, 'line'); - - // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping - // returns the index of the closest mapping less than the needle. By - // setting needle.originalColumn to 0, we thus find the last mapping for - // the given line, provided such a mapping exists. - var needle = { - source: util.getArg(aArgs, 'source'), - originalLine: line, - originalColumn: util.getArg(aArgs, 'column', 0) - }; - - if (this.sourceRoot != null) { - needle.source = util.relative(this.sourceRoot, needle.source); - } - if (!this._sources.has(needle.source)) { - return []; - } - needle.source = this._sources.indexOf(needle.source); - - var mappings = []; - - var index = this._findMapping(needle, - this._originalMappings, - "originalLine", - "originalColumn", - util.compareByOriginalPositions, - binarySearch.LEAST_UPPER_BOUND); - if (index >= 0) { - var mapping = this._originalMappings[index]; - - if (aArgs.column === undefined) { - var originalLine = mapping.originalLine; - - // Iterate until either we run out of mappings, or we run into - // a mapping for a different line than the one we found. Since - // mappings are sorted, this is guaranteed to find all mappings for - // the line we found. - while (mapping && mapping.originalLine === originalLine) { - mappings.push({ - line: util.getArg(mapping, 'generatedLine', null), - column: util.getArg(mapping, 'generatedColumn', null), - lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) - }); - - mapping = this._originalMappings[++index]; - } - } else { - var originalColumn = mapping.originalColumn; - - // Iterate until either we run out of mappings, or we run into - // a mapping for a different line than the one we were searching for. - // Since mappings are sorted, this is guaranteed to find all mappings for - // the line we are searching for. - while (mapping && - mapping.originalLine === line && - mapping.originalColumn == originalColumn) { - mappings.push({ - line: util.getArg(mapping, 'generatedLine', null), - column: util.getArg(mapping, 'generatedColumn', null), - lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) - }); - - mapping = this._originalMappings[++index]; - } - } - } - - return mappings; - }; - -exports.SourceMapConsumer = SourceMapConsumer; - -/** - * A BasicSourceMapConsumer instance represents a parsed source map which we can - * query for information about the original file positions by giving it a file - * position in the generated source. - * - * The only parameter is the raw source map (either as a JSON string, or - * already parsed to an object). According to the spec, source maps have the - * following attributes: - * - * - version: Which version of the source map spec this map is following. - * - sources: An array of URLs to the original source files. - * - names: An array of identifiers which can be referrenced by individual mappings. - * - sourceRoot: Optional. The URL root from which all sources are relative. - * - sourcesContent: Optional. An array of contents of the original source files. - * - mappings: A string of base64 VLQs which contain the actual mappings. - * - file: Optional. The generated file this source map is associated with. - * - * Here is an example source map, taken from the source map spec[0]: - * - * { - * version : 3, - * file: "out.js", - * sourceRoot : "", - * sources: ["foo.js", "bar.js"], - * names: ["src", "maps", "are", "fun"], - * mappings: "AA,AB;;ABCDE;" - * } - * - * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1# - */ -function BasicSourceMapConsumer(aSourceMap) { - var sourceMap = aSourceMap; - if (typeof aSourceMap === 'string') { - sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, '')); - } - - var version = util.getArg(sourceMap, 'version'); - var sources = util.getArg(sourceMap, 'sources'); - // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which - // requires the array) to play nice here. - var names = util.getArg(sourceMap, 'names', []); - var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null); - var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null); - var mappings = util.getArg(sourceMap, 'mappings'); - var file = util.getArg(sourceMap, 'file', null); - - // Once again, Sass deviates from the spec and supplies the version as a - // string rather than a number, so we use loose equality checking here. - if (version != this._version) { - throw new Error('Unsupported version: ' + version); - } - - sources = sources - .map(String) - // Some source maps produce relative source paths like "./foo.js" instead of - // "foo.js". Normalize these first so that future comparisons will succeed. - // See bugzil.la/1090768. - .map(util.normalize) - // Always ensure that absolute sources are internally stored relative to - // the source root, if the source root is absolute. Not doing this would - // be particularly problematic when the source root is a prefix of the - // source (valid, but why??). See github issue #199 and bugzil.la/1188982. - .map(function (source) { - return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source) - ? util.relative(sourceRoot, source) - : source; - }); - - // Pass `true` below to allow duplicate names and sources. While source maps - // are intended to be compressed and deduplicated, the TypeScript compiler - // sometimes generates source maps with duplicates in them. See Github issue - // #72 and bugzil.la/889492. - this._names = ArraySet.fromArray(names.map(String), true); - this._sources = ArraySet.fromArray(sources, true); - - this.sourceRoot = sourceRoot; - this.sourcesContent = sourcesContent; - this._mappings = mappings; - this.file = file; -} - -BasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype); -BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer; - -/** - * Create a BasicSourceMapConsumer from a SourceMapGenerator. - * - * @param SourceMapGenerator aSourceMap - * The source map that will be consumed. - * @returns BasicSourceMapConsumer - */ -BasicSourceMapConsumer.fromSourceMap = - function SourceMapConsumer_fromSourceMap(aSourceMap) { - var smc = Object.create(BasicSourceMapConsumer.prototype); - - var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true); - var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true); - smc.sourceRoot = aSourceMap._sourceRoot; - smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(), - smc.sourceRoot); - smc.file = aSourceMap._file; - - // Because we are modifying the entries (by converting string sources and - // names to indices into the sources and names ArraySets), we have to make - // a copy of the entry or else bad things happen. Shared mutable state - // strikes again! See github issue #191. - - var generatedMappings = aSourceMap._mappings.toArray().slice(); - var destGeneratedMappings = smc.__generatedMappings = []; - var destOriginalMappings = smc.__originalMappings = []; - - for (var i = 0, length = generatedMappings.length; i < length; i++) { - var srcMapping = generatedMappings[i]; - var destMapping = new Mapping; - destMapping.generatedLine = srcMapping.generatedLine; - destMapping.generatedColumn = srcMapping.generatedColumn; - - if (srcMapping.source) { - destMapping.source = sources.indexOf(srcMapping.source); - destMapping.originalLine = srcMapping.originalLine; - destMapping.originalColumn = srcMapping.originalColumn; - - if (srcMapping.name) { - destMapping.name = names.indexOf(srcMapping.name); - } - - destOriginalMappings.push(destMapping); - } - - destGeneratedMappings.push(destMapping); - } - - quickSort(smc.__originalMappings, util.compareByOriginalPositions); - - return smc; - }; - -/** - * The version of the source mapping spec that we are consuming. - */ -BasicSourceMapConsumer.prototype._version = 3; - -/** - * The list of original sources. - */ -Object.defineProperty(BasicSourceMapConsumer.prototype, 'sources', { - get: function () { - return this._sources.toArray().map(function (s) { - return this.sourceRoot != null ? util.join(this.sourceRoot, s) : s; - }, this); - } -}); - -/** - * Provide the JIT with a nice shape / hidden class. - */ -function Mapping() { - this.generatedLine = 0; - this.generatedColumn = 0; - this.source = null; - this.originalLine = null; - this.originalColumn = null; - this.name = null; -} - -/** - * Parse the mappings in a string in to a data structure which we can easily - * query (the ordered arrays in the `this.__generatedMappings` and - * `this.__originalMappings` properties). - */ -BasicSourceMapConsumer.prototype._parseMappings = - function SourceMapConsumer_parseMappings(aStr, aSourceRoot) { - var generatedLine = 1; - var previousGeneratedColumn = 0; - var previousOriginalLine = 0; - var previousOriginalColumn = 0; - var previousSource = 0; - var previousName = 0; - var length = aStr.length; - var index = 0; - var cachedSegments = {}; - var temp = {}; - var originalMappings = []; - var generatedMappings = []; - var mapping, str, segment, end, value; - - while (index < length) { - if (aStr.charAt(index) === ';') { - generatedLine++; - index++; - previousGeneratedColumn = 0; - } - else if (aStr.charAt(index) === ',') { - index++; - } - else { - mapping = new Mapping(); - mapping.generatedLine = generatedLine; - - // Because each offset is encoded relative to the previous one, - // many segments often have the same encoding. We can exploit this - // fact by caching the parsed variable length fields of each segment, - // allowing us to avoid a second parse if we encounter the same - // segment again. - for (end = index; end < length; end++) { - if (this._charIsMappingSeparator(aStr, end)) { - break; - } - } - str = aStr.slice(index, end); - - segment = cachedSegments[str]; - if (segment) { - index += str.length; - } else { - segment = []; - while (index < end) { - base64VLQ.decode(aStr, index, temp); - value = temp.value; - index = temp.rest; - segment.push(value); - } - - if (segment.length === 2) { - throw new Error('Found a source, but no line and column'); - } - - if (segment.length === 3) { - throw new Error('Found a source and line, but no column'); - } - - cachedSegments[str] = segment; - } - - // Generated column. - mapping.generatedColumn = previousGeneratedColumn + segment[0]; - previousGeneratedColumn = mapping.generatedColumn; - - if (segment.length > 1) { - // Original source. - mapping.source = previousSource + segment[1]; - previousSource += segment[1]; - - // Original line. - mapping.originalLine = previousOriginalLine + segment[2]; - previousOriginalLine = mapping.originalLine; - // Lines are stored 0-based - mapping.originalLine += 1; - - // Original column. - mapping.originalColumn = previousOriginalColumn + segment[3]; - previousOriginalColumn = mapping.originalColumn; - - if (segment.length > 4) { - // Original name. - mapping.name = previousName + segment[4]; - previousName += segment[4]; - } - } - - generatedMappings.push(mapping); - if (typeof mapping.originalLine === 'number') { - originalMappings.push(mapping); - } - } - } - - quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated); - this.__generatedMappings = generatedMappings; - - quickSort(originalMappings, util.compareByOriginalPositions); - this.__originalMappings = originalMappings; - }; - -/** - * Find the mapping that best matches the hypothetical "needle" mapping that - * we are searching for in the given "haystack" of mappings. - */ -BasicSourceMapConsumer.prototype._findMapping = - function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName, - aColumnName, aComparator, aBias) { - // To return the position we are searching for, we must first find the - // mapping for the given position and then return the opposite position it - // points to. Because the mappings are sorted, we can use binary search to - // find the best mapping. - - if (aNeedle[aLineName] <= 0) { - throw new TypeError('Line must be greater than or equal to 1, got ' - + aNeedle[aLineName]); - } - if (aNeedle[aColumnName] < 0) { - throw new TypeError('Column must be greater than or equal to 0, got ' - + aNeedle[aColumnName]); - } - - return binarySearch.search(aNeedle, aMappings, aComparator, aBias); - }; - -/** - * Compute the last column for each generated mapping. The last column is - * inclusive. - */ -BasicSourceMapConsumer.prototype.computeColumnSpans = - function SourceMapConsumer_computeColumnSpans() { - for (var index = 0; index < this._generatedMappings.length; ++index) { - var mapping = this._generatedMappings[index]; - - // Mappings do not contain a field for the last generated columnt. We - // can come up with an optimistic estimate, however, by assuming that - // mappings are contiguous (i.e. given two consecutive mappings, the - // first mapping ends where the second one starts). - if (index + 1 < this._generatedMappings.length) { - var nextMapping = this._generatedMappings[index + 1]; - - if (mapping.generatedLine === nextMapping.generatedLine) { - mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1; - continue; - } - } - - // The last mapping for each line spans the entire line. - mapping.lastGeneratedColumn = Infinity; - } - }; - -/** - * Returns the original source, line, and column information for the generated - * source's line and column positions provided. The only argument is an object - * with the following properties: - * - * - line: The line number in the generated source. - * - column: The column number in the generated source. - * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or - * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the - * closest element that is smaller than or greater than the one we are - * searching for, respectively, if the exact element cannot be found. - * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'. - * - * and an object is returned with the following properties: - * - * - source: The original source file, or null. - * - line: The line number in the original source, or null. - * - column: The column number in the original source, or null. - * - name: The original identifier, or null. - */ -BasicSourceMapConsumer.prototype.originalPositionFor = - function SourceMapConsumer_originalPositionFor(aArgs) { - var needle = { - generatedLine: util.getArg(aArgs, 'line'), - generatedColumn: util.getArg(aArgs, 'column') - }; - - var index = this._findMapping( - needle, - this._generatedMappings, - "generatedLine", - "generatedColumn", - util.compareByGeneratedPositionsDeflated, - util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND) - ); - - if (index >= 0) { - var mapping = this._generatedMappings[index]; - - if (mapping.generatedLine === needle.generatedLine) { - var source = util.getArg(mapping, 'source', null); - if (source !== null) { - source = this._sources.at(source); - if (this.sourceRoot != null) { - source = util.join(this.sourceRoot, source); - } - } - var name = util.getArg(mapping, 'name', null); - if (name !== null) { - name = this._names.at(name); - } - return { - source: source, - line: util.getArg(mapping, 'originalLine', null), - column: util.getArg(mapping, 'originalColumn', null), - name: name - }; - } - } - - return { - source: null, - line: null, - column: null, - name: null - }; - }; - -/** - * Return true if we have the source content for every source in the source - * map, false otherwise. - */ -BasicSourceMapConsumer.prototype.hasContentsOfAllSources = - function BasicSourceMapConsumer_hasContentsOfAllSources() { - if (!this.sourcesContent) { - return false; - } - return this.sourcesContent.length >= this._sources.size() && - !this.sourcesContent.some(function (sc) { return sc == null; }); - }; - -/** - * Returns the original source content. The only argument is the url of the - * original source file. Returns null if no original source content is - * available. - */ -BasicSourceMapConsumer.prototype.sourceContentFor = - function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) { - if (!this.sourcesContent) { - return null; - } - - if (this.sourceRoot != null) { - aSource = util.relative(this.sourceRoot, aSource); - } - - if (this._sources.has(aSource)) { - return this.sourcesContent[this._sources.indexOf(aSource)]; - } - - var url; - if (this.sourceRoot != null - && (url = util.urlParse(this.sourceRoot))) { - // XXX: file:// URIs and absolute paths lead to unexpected behavior for - // many users. We can help them out when they expect file:// URIs to - // behave like it would if they were running a local HTTP server. See - // https://bugzilla.mozilla.org/show_bug.cgi?id=885597. - var fileUriAbsPath = aSource.replace(/^file:\/\//, ""); - if (url.scheme == "file" - && this._sources.has(fileUriAbsPath)) { - return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)] - } - - if ((!url.path || url.path == "/") - && this._sources.has("/" + aSource)) { - return this.sourcesContent[this._sources.indexOf("/" + aSource)]; - } - } - - // This function is used recursively from - // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we - // don't want to throw if we can't find the source - we just want to - // return null, so we provide a flag to exit gracefully. - if (nullOnMissing) { - return null; - } - else { - throw new Error('"' + aSource + '" is not in the SourceMap.'); - } - }; - -/** - * Returns the generated line and column information for the original source, - * line, and column positions provided. The only argument is an object with - * the following properties: - * - * - source: The filename of the original source. - * - line: The line number in the original source. - * - column: The column number in the original source. - * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or - * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the - * closest element that is smaller than or greater than the one we are - * searching for, respectively, if the exact element cannot be found. - * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'. - * - * and an object is returned with the following properties: - * - * - line: The line number in the generated source, or null. - * - column: The column number in the generated source, or null. - */ -BasicSourceMapConsumer.prototype.generatedPositionFor = - function SourceMapConsumer_generatedPositionFor(aArgs) { - var source = util.getArg(aArgs, 'source'); - if (this.sourceRoot != null) { - source = util.relative(this.sourceRoot, source); - } - if (!this._sources.has(source)) { - return { - line: null, - column: null, - lastColumn: null - }; - } - source = this._sources.indexOf(source); - - var needle = { - source: source, - originalLine: util.getArg(aArgs, 'line'), - originalColumn: util.getArg(aArgs, 'column') - }; - - var index = this._findMapping( - needle, - this._originalMappings, - "originalLine", - "originalColumn", - util.compareByOriginalPositions, - util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND) - ); - - if (index >= 0) { - var mapping = this._originalMappings[index]; - - if (mapping.source === needle.source) { - return { - line: util.getArg(mapping, 'generatedLine', null), - column: util.getArg(mapping, 'generatedColumn', null), - lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) - }; - } - } - - return { - line: null, - column: null, - lastColumn: null - }; - }; - -exports.BasicSourceMapConsumer = BasicSourceMapConsumer; - -/** - * An IndexedSourceMapConsumer instance represents a parsed source map which - * we can query for information. It differs from BasicSourceMapConsumer in - * that it takes "indexed" source maps (i.e. ones with a "sections" field) as - * input. - * - * The only parameter is a raw source map (either as a JSON string, or already - * parsed to an object). According to the spec for indexed source maps, they - * have the following attributes: - * - * - version: Which version of the source map spec this map is following. - * - file: Optional. The generated file this source map is associated with. - * - sections: A list of section definitions. - * - * Each value under the "sections" field has two fields: - * - offset: The offset into the original specified at which this section - * begins to apply, defined as an object with a "line" and "column" - * field. - * - map: A source map definition. This source map could also be indexed, - * but doesn't have to be. - * - * Instead of the "map" field, it's also possible to have a "url" field - * specifying a URL to retrieve a source map from, but that's currently - * unsupported. - * - * Here's an example source map, taken from the source map spec[0], but - * modified to omit a section which uses the "url" field. - * - * { - * version : 3, - * file: "app.js", - * sections: [{ - * offset: {line:100, column:10}, - * map: { - * version : 3, - * file: "section.js", - * sources: ["foo.js", "bar.js"], - * names: ["src", "maps", "are", "fun"], - * mappings: "AAAA,E;;ABCDE;" - * } - * }], - * } - * - * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt - */ -function IndexedSourceMapConsumer(aSourceMap) { - var sourceMap = aSourceMap; - if (typeof aSourceMap === 'string') { - sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, '')); - } - - var version = util.getArg(sourceMap, 'version'); - var sections = util.getArg(sourceMap, 'sections'); - - if (version != this._version) { - throw new Error('Unsupported version: ' + version); - } - - this._sources = new ArraySet(); - this._names = new ArraySet(); - - var lastOffset = { - line: -1, - column: 0 - }; - this._sections = sections.map(function (s) { - if (s.url) { - // The url field will require support for asynchronicity. - // See https://github.com/mozilla/source-map/issues/16 - throw new Error('Support for url field in sections not implemented.'); - } - var offset = util.getArg(s, 'offset'); - var offsetLine = util.getArg(offset, 'line'); - var offsetColumn = util.getArg(offset, 'column'); - - if (offsetLine < lastOffset.line || - (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) { - throw new Error('Section offsets must be ordered and non-overlapping.'); - } - lastOffset = offset; - - return { - generatedOffset: { - // The offset fields are 0-based, but we use 1-based indices when - // encoding/decoding from VLQ. - generatedLine: offsetLine + 1, - generatedColumn: offsetColumn + 1 - }, - consumer: new SourceMapConsumer(util.getArg(s, 'map')) - } - }); -} - -IndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype); -IndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer; - -/** - * The version of the source mapping spec that we are consuming. - */ -IndexedSourceMapConsumer.prototype._version = 3; - -/** - * The list of original sources. - */ -Object.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', { - get: function () { - var sources = []; - for (var i = 0; i < this._sections.length; i++) { - for (var j = 0; j < this._sections[i].consumer.sources.length; j++) { - sources.push(this._sections[i].consumer.sources[j]); - } - } - return sources; - } -}); - -/** - * Returns the original source, line, and column information for the generated - * source's line and column positions provided. The only argument is an object - * with the following properties: - * - * - line: The line number in the generated source. - * - column: The column number in the generated source. - * - * and an object is returned with the following properties: - * - * - source: The original source file, or null. - * - line: The line number in the original source, or null. - * - column: The column number in the original source, or null. - * - name: The original identifier, or null. - */ -IndexedSourceMapConsumer.prototype.originalPositionFor = - function IndexedSourceMapConsumer_originalPositionFor(aArgs) { - var needle = { - generatedLine: util.getArg(aArgs, 'line'), - generatedColumn: util.getArg(aArgs, 'column') - }; - - // Find the section containing the generated position we're trying to map - // to an original position. - var sectionIndex = binarySearch.search(needle, this._sections, - function(needle, section) { - var cmp = needle.generatedLine - section.generatedOffset.generatedLine; - if (cmp) { - return cmp; - } - - return (needle.generatedColumn - - section.generatedOffset.generatedColumn); - }); - var section = this._sections[sectionIndex]; - - if (!section) { - return { - source: null, - line: null, - column: null, - name: null - }; - } - - return section.consumer.originalPositionFor({ - line: needle.generatedLine - - (section.generatedOffset.generatedLine - 1), - column: needle.generatedColumn - - (section.generatedOffset.generatedLine === needle.generatedLine - ? section.generatedOffset.generatedColumn - 1 - : 0), - bias: aArgs.bias - }); - }; - -/** - * Return true if we have the source content for every source in the source - * map, false otherwise. - */ -IndexedSourceMapConsumer.prototype.hasContentsOfAllSources = - function IndexedSourceMapConsumer_hasContentsOfAllSources() { - return this._sections.every(function (s) { - return s.consumer.hasContentsOfAllSources(); - }); - }; - -/** - * Returns the original source content. The only argument is the url of the - * original source file. Returns null if no original source content is - * available. - */ -IndexedSourceMapConsumer.prototype.sourceContentFor = - function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) { - for (var i = 0; i < this._sections.length; i++) { - var section = this._sections[i]; - - var content = section.consumer.sourceContentFor(aSource, true); - if (content) { - return content; - } - } - if (nullOnMissing) { - return null; - } - else { - throw new Error('"' + aSource + '" is not in the SourceMap.'); - } - }; - -/** - * Returns the generated line and column information for the original source, - * line, and column positions provided. The only argument is an object with - * the following properties: - * - * - source: The filename of the original source. - * - line: The line number in the original source. - * - column: The column number in the original source. - * - * and an object is returned with the following properties: - * - * - line: The line number in the generated source, or null. - * - column: The column number in the generated source, or null. - */ -IndexedSourceMapConsumer.prototype.generatedPositionFor = - function IndexedSourceMapConsumer_generatedPositionFor(aArgs) { - for (var i = 0; i < this._sections.length; i++) { - var section = this._sections[i]; - - // Only consider this section if the requested source is in the list of - // sources of the consumer. - if (section.consumer.sources.indexOf(util.getArg(aArgs, 'source')) === -1) { - continue; - } - var generatedPosition = section.consumer.generatedPositionFor(aArgs); - if (generatedPosition) { - var ret = { - line: generatedPosition.line + - (section.generatedOffset.generatedLine - 1), - column: generatedPosition.column + - (section.generatedOffset.generatedLine === generatedPosition.line - ? section.generatedOffset.generatedColumn - 1 - : 0) - }; - return ret; - } - } - - return { - line: null, - column: null - }; - }; - -/** - * Parse the mappings in a string in to a data structure which we can easily - * query (the ordered arrays in the `this.__generatedMappings` and - * `this.__originalMappings` properties). - */ -IndexedSourceMapConsumer.prototype._parseMappings = - function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) { - this.__generatedMappings = []; - this.__originalMappings = []; - for (var i = 0; i < this._sections.length; i++) { - var section = this._sections[i]; - var sectionMappings = section.consumer._generatedMappings; - for (var j = 0; j < sectionMappings.length; j++) { - var mapping = sectionMappings[j]; - - var source = section.consumer._sources.at(mapping.source); - if (section.consumer.sourceRoot !== null) { - source = util.join(section.consumer.sourceRoot, source); - } - this._sources.add(source); - source = this._sources.indexOf(source); - - var name = section.consumer._names.at(mapping.name); - this._names.add(name); - name = this._names.indexOf(name); - - // The mappings coming from the consumer for the section have - // generated positions relative to the start of the section, so we - // need to offset them to be relative to the start of the concatenated - // generated file. - var adjustedMapping = { - source: source, - generatedLine: mapping.generatedLine + - (section.generatedOffset.generatedLine - 1), - generatedColumn: mapping.generatedColumn + - (section.generatedOffset.generatedLine === mapping.generatedLine - ? section.generatedOffset.generatedColumn - 1 - : 0), - originalLine: mapping.originalLine, - originalColumn: mapping.originalColumn, - name: name - }; - - this.__generatedMappings.push(adjustedMapping); - if (typeof adjustedMapping.originalLine === 'number') { - this.__originalMappings.push(adjustedMapping); - } - } - } - - quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated); - quickSort(this.__originalMappings, util.compareByOriginalPositions); - }; - -exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer; diff --git a/node_modules/source-map/lib/source-map-generator.js b/node_modules/source-map/lib/source-map-generator.js deleted file mode 100644 index aff1e7f..0000000 --- a/node_modules/source-map/lib/source-map-generator.js +++ /dev/null @@ -1,416 +0,0 @@ -/* -*- Mode: js; js-indent-level: 2; -*- */ -/* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - -var base64VLQ = require('./base64-vlq'); -var util = require('./util'); -var ArraySet = require('./array-set').ArraySet; -var MappingList = require('./mapping-list').MappingList; - -/** - * An instance of the SourceMapGenerator represents a source map which is - * being built incrementally. You may pass an object with the following - * properties: - * - * - file: The filename of the generated source. - * - sourceRoot: A root for all relative URLs in this source map. - */ -function SourceMapGenerator(aArgs) { - if (!aArgs) { - aArgs = {}; - } - this._file = util.getArg(aArgs, 'file', null); - this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null); - this._skipValidation = util.getArg(aArgs, 'skipValidation', false); - this._sources = new ArraySet(); - this._names = new ArraySet(); - this._mappings = new MappingList(); - this._sourcesContents = null; -} - -SourceMapGenerator.prototype._version = 3; - -/** - * Creates a new SourceMapGenerator based on a SourceMapConsumer - * - * @param aSourceMapConsumer The SourceMap. - */ -SourceMapGenerator.fromSourceMap = - function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) { - var sourceRoot = aSourceMapConsumer.sourceRoot; - var generator = new SourceMapGenerator({ - file: aSourceMapConsumer.file, - sourceRoot: sourceRoot - }); - aSourceMapConsumer.eachMapping(function (mapping) { - var newMapping = { - generated: { - line: mapping.generatedLine, - column: mapping.generatedColumn - } - }; - - if (mapping.source != null) { - newMapping.source = mapping.source; - if (sourceRoot != null) { - newMapping.source = util.relative(sourceRoot, newMapping.source); - } - - newMapping.original = { - line: mapping.originalLine, - column: mapping.originalColumn - }; - - if (mapping.name != null) { - newMapping.name = mapping.name; - } - } - - generator.addMapping(newMapping); - }); - aSourceMapConsumer.sources.forEach(function (sourceFile) { - var content = aSourceMapConsumer.sourceContentFor(sourceFile); - if (content != null) { - generator.setSourceContent(sourceFile, content); - } - }); - return generator; - }; - -/** - * Add a single mapping from original source line and column to the generated - * source's line and column for this source map being created. The mapping - * object should have the following properties: - * - * - generated: An object with the generated line and column positions. - * - original: An object with the original line and column positions. - * - source: The original source file (relative to the sourceRoot). - * - name: An optional original token name for this mapping. - */ -SourceMapGenerator.prototype.addMapping = - function SourceMapGenerator_addMapping(aArgs) { - var generated = util.getArg(aArgs, 'generated'); - var original = util.getArg(aArgs, 'original', null); - var source = util.getArg(aArgs, 'source', null); - var name = util.getArg(aArgs, 'name', null); - - if (!this._skipValidation) { - this._validateMapping(generated, original, source, name); - } - - if (source != null) { - source = String(source); - if (!this._sources.has(source)) { - this._sources.add(source); - } - } - - if (name != null) { - name = String(name); - if (!this._names.has(name)) { - this._names.add(name); - } - } - - this._mappings.add({ - generatedLine: generated.line, - generatedColumn: generated.column, - originalLine: original != null && original.line, - originalColumn: original != null && original.column, - source: source, - name: name - }); - }; - -/** - * Set the source content for a source file. - */ -SourceMapGenerator.prototype.setSourceContent = - function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) { - var source = aSourceFile; - if (this._sourceRoot != null) { - source = util.relative(this._sourceRoot, source); - } - - if (aSourceContent != null) { - // Add the source content to the _sourcesContents map. - // Create a new _sourcesContents map if the property is null. - if (!this._sourcesContents) { - this._sourcesContents = Object.create(null); - } - this._sourcesContents[util.toSetString(source)] = aSourceContent; - } else if (this._sourcesContents) { - // Remove the source file from the _sourcesContents map. - // If the _sourcesContents map is empty, set the property to null. - delete this._sourcesContents[util.toSetString(source)]; - if (Object.keys(this._sourcesContents).length === 0) { - this._sourcesContents = null; - } - } - }; - -/** - * Applies the mappings of a sub-source-map for a specific source file to the - * source map being generated. Each mapping to the supplied source file is - * rewritten using the supplied source map. Note: The resolution for the - * resulting mappings is the minimium of this map and the supplied map. - * - * @param aSourceMapConsumer The source map to be applied. - * @param aSourceFile Optional. The filename of the source file. - * If omitted, SourceMapConsumer's file property will be used. - * @param aSourceMapPath Optional. The dirname of the path to the source map - * to be applied. If relative, it is relative to the SourceMapConsumer. - * This parameter is needed when the two source maps aren't in the same - * directory, and the source map to be applied contains relative source - * paths. If so, those relative source paths need to be rewritten - * relative to the SourceMapGenerator. - */ -SourceMapGenerator.prototype.applySourceMap = - function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) { - var sourceFile = aSourceFile; - // If aSourceFile is omitted, we will use the file property of the SourceMap - if (aSourceFile == null) { - if (aSourceMapConsumer.file == null) { - throw new Error( - 'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' + - 'or the source map\'s "file" property. Both were omitted.' - ); - } - sourceFile = aSourceMapConsumer.file; - } - var sourceRoot = this._sourceRoot; - // Make "sourceFile" relative if an absolute Url is passed. - if (sourceRoot != null) { - sourceFile = util.relative(sourceRoot, sourceFile); - } - // Applying the SourceMap can add and remove items from the sources and - // the names array. - var newSources = new ArraySet(); - var newNames = new ArraySet(); - - // Find mappings for the "sourceFile" - this._mappings.unsortedForEach(function (mapping) { - if (mapping.source === sourceFile && mapping.originalLine != null) { - // Check if it can be mapped by the source map, then update the mapping. - var original = aSourceMapConsumer.originalPositionFor({ - line: mapping.originalLine, - column: mapping.originalColumn - }); - if (original.source != null) { - // Copy mapping - mapping.source = original.source; - if (aSourceMapPath != null) { - mapping.source = util.join(aSourceMapPath, mapping.source) - } - if (sourceRoot != null) { - mapping.source = util.relative(sourceRoot, mapping.source); - } - mapping.originalLine = original.line; - mapping.originalColumn = original.column; - if (original.name != null) { - mapping.name = original.name; - } - } - } - - var source = mapping.source; - if (source != null && !newSources.has(source)) { - newSources.add(source); - } - - var name = mapping.name; - if (name != null && !newNames.has(name)) { - newNames.add(name); - } - - }, this); - this._sources = newSources; - this._names = newNames; - - // Copy sourcesContents of applied map. - aSourceMapConsumer.sources.forEach(function (sourceFile) { - var content = aSourceMapConsumer.sourceContentFor(sourceFile); - if (content != null) { - if (aSourceMapPath != null) { - sourceFile = util.join(aSourceMapPath, sourceFile); - } - if (sourceRoot != null) { - sourceFile = util.relative(sourceRoot, sourceFile); - } - this.setSourceContent(sourceFile, content); - } - }, this); - }; - -/** - * A mapping can have one of the three levels of data: - * - * 1. Just the generated position. - * 2. The Generated position, original position, and original source. - * 3. Generated and original position, original source, as well as a name - * token. - * - * To maintain consistency, we validate that any new mapping being added falls - * in to one of these categories. - */ -SourceMapGenerator.prototype._validateMapping = - function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource, - aName) { - // When aOriginal is truthy but has empty values for .line and .column, - // it is most likely a programmer error. In this case we throw a very - // specific error message to try to guide them the right way. - // For example: https://github.com/Polymer/polymer-bundler/pull/519 - if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') { - throw new Error( - 'original.line and original.column are not numbers -- you probably meant to omit ' + - 'the original mapping entirely and only map the generated position. If so, pass ' + - 'null for the original mapping instead of an object with empty or null values.' - ); - } - - if (aGenerated && 'line' in aGenerated && 'column' in aGenerated - && aGenerated.line > 0 && aGenerated.column >= 0 - && !aOriginal && !aSource && !aName) { - // Case 1. - return; - } - else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated - && aOriginal && 'line' in aOriginal && 'column' in aOriginal - && aGenerated.line > 0 && aGenerated.column >= 0 - && aOriginal.line > 0 && aOriginal.column >= 0 - && aSource) { - // Cases 2 and 3. - return; - } - else { - throw new Error('Invalid mapping: ' + JSON.stringify({ - generated: aGenerated, - source: aSource, - original: aOriginal, - name: aName - })); - } - }; - -/** - * Serialize the accumulated mappings in to the stream of base 64 VLQs - * specified by the source map format. - */ -SourceMapGenerator.prototype._serializeMappings = - function SourceMapGenerator_serializeMappings() { - var previousGeneratedColumn = 0; - var previousGeneratedLine = 1; - var previousOriginalColumn = 0; - var previousOriginalLine = 0; - var previousName = 0; - var previousSource = 0; - var result = ''; - var next; - var mapping; - var nameIdx; - var sourceIdx; - - var mappings = this._mappings.toArray(); - for (var i = 0, len = mappings.length; i < len; i++) { - mapping = mappings[i]; - next = '' - - if (mapping.generatedLine !== previousGeneratedLine) { - previousGeneratedColumn = 0; - while (mapping.generatedLine !== previousGeneratedLine) { - next += ';'; - previousGeneratedLine++; - } - } - else { - if (i > 0) { - if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) { - continue; - } - next += ','; - } - } - - next += base64VLQ.encode(mapping.generatedColumn - - previousGeneratedColumn); - previousGeneratedColumn = mapping.generatedColumn; - - if (mapping.source != null) { - sourceIdx = this._sources.indexOf(mapping.source); - next += base64VLQ.encode(sourceIdx - previousSource); - previousSource = sourceIdx; - - // lines are stored 0-based in SourceMap spec version 3 - next += base64VLQ.encode(mapping.originalLine - 1 - - previousOriginalLine); - previousOriginalLine = mapping.originalLine - 1; - - next += base64VLQ.encode(mapping.originalColumn - - previousOriginalColumn); - previousOriginalColumn = mapping.originalColumn; - - if (mapping.name != null) { - nameIdx = this._names.indexOf(mapping.name); - next += base64VLQ.encode(nameIdx - previousName); - previousName = nameIdx; - } - } - - result += next; - } - - return result; - }; - -SourceMapGenerator.prototype._generateSourcesContent = - function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) { - return aSources.map(function (source) { - if (!this._sourcesContents) { - return null; - } - if (aSourceRoot != null) { - source = util.relative(aSourceRoot, source); - } - var key = util.toSetString(source); - return Object.prototype.hasOwnProperty.call(this._sourcesContents, key) - ? this._sourcesContents[key] - : null; - }, this); - }; - -/** - * Externalize the source map. - */ -SourceMapGenerator.prototype.toJSON = - function SourceMapGenerator_toJSON() { - var map = { - version: this._version, - sources: this._sources.toArray(), - names: this._names.toArray(), - mappings: this._serializeMappings() - }; - if (this._file != null) { - map.file = this._file; - } - if (this._sourceRoot != null) { - map.sourceRoot = this._sourceRoot; - } - if (this._sourcesContents) { - map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot); - } - - return map; - }; - -/** - * Render the source map being generated to a string. - */ -SourceMapGenerator.prototype.toString = - function SourceMapGenerator_toString() { - return JSON.stringify(this.toJSON()); - }; - -exports.SourceMapGenerator = SourceMapGenerator; diff --git a/node_modules/source-map/lib/source-node.js b/node_modules/source-map/lib/source-node.js deleted file mode 100644 index d196a53..0000000 --- a/node_modules/source-map/lib/source-node.js +++ /dev/null @@ -1,413 +0,0 @@ -/* -*- Mode: js; js-indent-level: 2; -*- */ -/* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - -var SourceMapGenerator = require('./source-map-generator').SourceMapGenerator; -var util = require('./util'); - -// Matches a Windows-style `\r\n` newline or a `\n` newline used by all other -// operating systems these days (capturing the result). -var REGEX_NEWLINE = /(\r?\n)/; - -// Newline character code for charCodeAt() comparisons -var NEWLINE_CODE = 10; - -// Private symbol for identifying `SourceNode`s when multiple versions of -// the source-map library are loaded. This MUST NOT CHANGE across -// versions! -var isSourceNode = "$$$isSourceNode$$$"; - -/** - * SourceNodes provide a way to abstract over interpolating/concatenating - * snippets of generated JavaScript source code while maintaining the line and - * column information associated with the original source code. - * - * @param aLine The original line number. - * @param aColumn The original column number. - * @param aSource The original source's filename. - * @param aChunks Optional. An array of strings which are snippets of - * generated JS, or other SourceNodes. - * @param aName The original identifier. - */ -function SourceNode(aLine, aColumn, aSource, aChunks, aName) { - this.children = []; - this.sourceContents = {}; - this.line = aLine == null ? null : aLine; - this.column = aColumn == null ? null : aColumn; - this.source = aSource == null ? null : aSource; - this.name = aName == null ? null : aName; - this[isSourceNode] = true; - if (aChunks != null) this.add(aChunks); -} - -/** - * Creates a SourceNode from generated code and a SourceMapConsumer. - * - * @param aGeneratedCode The generated code - * @param aSourceMapConsumer The SourceMap for the generated code - * @param aRelativePath Optional. The path that relative sources in the - * SourceMapConsumer should be relative to. - */ -SourceNode.fromStringWithSourceMap = - function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) { - // The SourceNode we want to fill with the generated code - // and the SourceMap - var node = new SourceNode(); - - // All even indices of this array are one line of the generated code, - // while all odd indices are the newlines between two adjacent lines - // (since `REGEX_NEWLINE` captures its match). - // Processed fragments are accessed by calling `shiftNextLine`. - var remainingLines = aGeneratedCode.split(REGEX_NEWLINE); - var remainingLinesIndex = 0; - var shiftNextLine = function() { - var lineContents = getNextLine(); - // The last line of a file might not have a newline. - var newLine = getNextLine() || ""; - return lineContents + newLine; - - function getNextLine() { - return remainingLinesIndex < remainingLines.length ? - remainingLines[remainingLinesIndex++] : undefined; - } - }; - - // We need to remember the position of "remainingLines" - var lastGeneratedLine = 1, lastGeneratedColumn = 0; - - // The generate SourceNodes we need a code range. - // To extract it current and last mapping is used. - // Here we store the last mapping. - var lastMapping = null; - - aSourceMapConsumer.eachMapping(function (mapping) { - if (lastMapping !== null) { - // We add the code from "lastMapping" to "mapping": - // First check if there is a new line in between. - if (lastGeneratedLine < mapping.generatedLine) { - // Associate first line with "lastMapping" - addMappingWithCode(lastMapping, shiftNextLine()); - lastGeneratedLine++; - lastGeneratedColumn = 0; - // The remaining code is added without mapping - } else { - // There is no new line in between. - // Associate the code between "lastGeneratedColumn" and - // "mapping.generatedColumn" with "lastMapping" - var nextLine = remainingLines[remainingLinesIndex]; - var code = nextLine.substr(0, mapping.generatedColumn - - lastGeneratedColumn); - remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn - - lastGeneratedColumn); - lastGeneratedColumn = mapping.generatedColumn; - addMappingWithCode(lastMapping, code); - // No more remaining code, continue - lastMapping = mapping; - return; - } - } - // We add the generated code until the first mapping - // to the SourceNode without any mapping. - // Each line is added as separate string. - while (lastGeneratedLine < mapping.generatedLine) { - node.add(shiftNextLine()); - lastGeneratedLine++; - } - if (lastGeneratedColumn < mapping.generatedColumn) { - var nextLine = remainingLines[remainingLinesIndex]; - node.add(nextLine.substr(0, mapping.generatedColumn)); - remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn); - lastGeneratedColumn = mapping.generatedColumn; - } - lastMapping = mapping; - }, this); - // We have processed all mappings. - if (remainingLinesIndex < remainingLines.length) { - if (lastMapping) { - // Associate the remaining code in the current line with "lastMapping" - addMappingWithCode(lastMapping, shiftNextLine()); - } - // and add the remaining lines without any mapping - node.add(remainingLines.splice(remainingLinesIndex).join("")); - } - - // Copy sourcesContent into SourceNode - aSourceMapConsumer.sources.forEach(function (sourceFile) { - var content = aSourceMapConsumer.sourceContentFor(sourceFile); - if (content != null) { - if (aRelativePath != null) { - sourceFile = util.join(aRelativePath, sourceFile); - } - node.setSourceContent(sourceFile, content); - } - }); - - return node; - - function addMappingWithCode(mapping, code) { - if (mapping === null || mapping.source === undefined) { - node.add(code); - } else { - var source = aRelativePath - ? util.join(aRelativePath, mapping.source) - : mapping.source; - node.add(new SourceNode(mapping.originalLine, - mapping.originalColumn, - source, - code, - mapping.name)); - } - } - }; - -/** - * Add a chunk of generated JS to this source node. - * - * @param aChunk A string snippet of generated JS code, another instance of - * SourceNode, or an array where each member is one of those things. - */ -SourceNode.prototype.add = function SourceNode_add(aChunk) { - if (Array.isArray(aChunk)) { - aChunk.forEach(function (chunk) { - this.add(chunk); - }, this); - } - else if (aChunk[isSourceNode] || typeof aChunk === "string") { - if (aChunk) { - this.children.push(aChunk); - } - } - else { - throw new TypeError( - "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk - ); - } - return this; -}; - -/** - * Add a chunk of generated JS to the beginning of this source node. - * - * @param aChunk A string snippet of generated JS code, another instance of - * SourceNode, or an array where each member is one of those things. - */ -SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) { - if (Array.isArray(aChunk)) { - for (var i = aChunk.length-1; i >= 0; i--) { - this.prepend(aChunk[i]); - } - } - else if (aChunk[isSourceNode] || typeof aChunk === "string") { - this.children.unshift(aChunk); - } - else { - throw new TypeError( - "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk - ); - } - return this; -}; - -/** - * Walk over the tree of JS snippets in this node and its children. The - * walking function is called once for each snippet of JS and is passed that - * snippet and the its original associated source's line/column location. - * - * @param aFn The traversal function. - */ -SourceNode.prototype.walk = function SourceNode_walk(aFn) { - var chunk; - for (var i = 0, len = this.children.length; i < len; i++) { - chunk = this.children[i]; - if (chunk[isSourceNode]) { - chunk.walk(aFn); - } - else { - if (chunk !== '') { - aFn(chunk, { source: this.source, - line: this.line, - column: this.column, - name: this.name }); - } - } - } -}; - -/** - * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between - * each of `this.children`. - * - * @param aSep The separator. - */ -SourceNode.prototype.join = function SourceNode_join(aSep) { - var newChildren; - var i; - var len = this.children.length; - if (len > 0) { - newChildren = []; - for (i = 0; i < len-1; i++) { - newChildren.push(this.children[i]); - newChildren.push(aSep); - } - newChildren.push(this.children[i]); - this.children = newChildren; - } - return this; -}; - -/** - * Call String.prototype.replace on the very right-most source snippet. Useful - * for trimming whitespace from the end of a source node, etc. - * - * @param aPattern The pattern to replace. - * @param aReplacement The thing to replace the pattern with. - */ -SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) { - var lastChild = this.children[this.children.length - 1]; - if (lastChild[isSourceNode]) { - lastChild.replaceRight(aPattern, aReplacement); - } - else if (typeof lastChild === 'string') { - this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement); - } - else { - this.children.push(''.replace(aPattern, aReplacement)); - } - return this; -}; - -/** - * Set the source content for a source file. This will be added to the SourceMapGenerator - * in the sourcesContent field. - * - * @param aSourceFile The filename of the source file - * @param aSourceContent The content of the source file - */ -SourceNode.prototype.setSourceContent = - function SourceNode_setSourceContent(aSourceFile, aSourceContent) { - this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent; - }; - -/** - * Walk over the tree of SourceNodes. The walking function is called for each - * source file content and is passed the filename and source content. - * - * @param aFn The traversal function. - */ -SourceNode.prototype.walkSourceContents = - function SourceNode_walkSourceContents(aFn) { - for (var i = 0, len = this.children.length; i < len; i++) { - if (this.children[i][isSourceNode]) { - this.children[i].walkSourceContents(aFn); - } - } - - var sources = Object.keys(this.sourceContents); - for (var i = 0, len = sources.length; i < len; i++) { - aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]); - } - }; - -/** - * Return the string representation of this source node. Walks over the tree - * and concatenates all the various snippets together to one string. - */ -SourceNode.prototype.toString = function SourceNode_toString() { - var str = ""; - this.walk(function (chunk) { - str += chunk; - }); - return str; -}; - -/** - * Returns the string representation of this source node along with a source - * map. - */ -SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) { - var generated = { - code: "", - line: 1, - column: 0 - }; - var map = new SourceMapGenerator(aArgs); - var sourceMappingActive = false; - var lastOriginalSource = null; - var lastOriginalLine = null; - var lastOriginalColumn = null; - var lastOriginalName = null; - this.walk(function (chunk, original) { - generated.code += chunk; - if (original.source !== null - && original.line !== null - && original.column !== null) { - if(lastOriginalSource !== original.source - || lastOriginalLine !== original.line - || lastOriginalColumn !== original.column - || lastOriginalName !== original.name) { - map.addMapping({ - source: original.source, - original: { - line: original.line, - column: original.column - }, - generated: { - line: generated.line, - column: generated.column - }, - name: original.name - }); - } - lastOriginalSource = original.source; - lastOriginalLine = original.line; - lastOriginalColumn = original.column; - lastOriginalName = original.name; - sourceMappingActive = true; - } else if (sourceMappingActive) { - map.addMapping({ - generated: { - line: generated.line, - column: generated.column - } - }); - lastOriginalSource = null; - sourceMappingActive = false; - } - for (var idx = 0, length = chunk.length; idx < length; idx++) { - if (chunk.charCodeAt(idx) === NEWLINE_CODE) { - generated.line++; - generated.column = 0; - // Mappings end at eol - if (idx + 1 === length) { - lastOriginalSource = null; - sourceMappingActive = false; - } else if (sourceMappingActive) { - map.addMapping({ - source: original.source, - original: { - line: original.line, - column: original.column - }, - generated: { - line: generated.line, - column: generated.column - }, - name: original.name - }); - } - } else { - generated.column++; - } - } - }); - this.walkSourceContents(function (sourceFile, sourceContent) { - map.setSourceContent(sourceFile, sourceContent); - }); - - return { code: generated.code, map: map }; -}; - -exports.SourceNode = SourceNode; diff --git a/node_modules/source-map/lib/util.js b/node_modules/source-map/lib/util.js deleted file mode 100644 index 44e0e45..0000000 --- a/node_modules/source-map/lib/util.js +++ /dev/null @@ -1,417 +0,0 @@ -/* -*- Mode: js; js-indent-level: 2; -*- */ -/* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - -/** - * This is a helper function for getting values from parameter/options - * objects. - * - * @param args The object we are extracting values from - * @param name The name of the property we are getting. - * @param defaultValue An optional value to return if the property is missing - * from the object. If this is not specified and the property is missing, an - * error will be thrown. - */ -function getArg(aArgs, aName, aDefaultValue) { - if (aName in aArgs) { - return aArgs[aName]; - } else if (arguments.length === 3) { - return aDefaultValue; - } else { - throw new Error('"' + aName + '" is a required argument.'); - } -} -exports.getArg = getArg; - -var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/; -var dataUrlRegexp = /^data:.+\,.+$/; - -function urlParse(aUrl) { - var match = aUrl.match(urlRegexp); - if (!match) { - return null; - } - return { - scheme: match[1], - auth: match[2], - host: match[3], - port: match[4], - path: match[5] - }; -} -exports.urlParse = urlParse; - -function urlGenerate(aParsedUrl) { - var url = ''; - if (aParsedUrl.scheme) { - url += aParsedUrl.scheme + ':'; - } - url += '//'; - if (aParsedUrl.auth) { - url += aParsedUrl.auth + '@'; - } - if (aParsedUrl.host) { - url += aParsedUrl.host; - } - if (aParsedUrl.port) { - url += ":" + aParsedUrl.port - } - if (aParsedUrl.path) { - url += aParsedUrl.path; - } - return url; -} -exports.urlGenerate = urlGenerate; - -/** - * Normalizes a path, or the path portion of a URL: - * - * - Replaces consecutive slashes with one slash. - * - Removes unnecessary '.' parts. - * - Removes unnecessary '/..' parts. - * - * Based on code in the Node.js 'path' core module. - * - * @param aPath The path or url to normalize. - */ -function normalize(aPath) { - var path = aPath; - var url = urlParse(aPath); - if (url) { - if (!url.path) { - return aPath; - } - path = url.path; - } - var isAbsolute = exports.isAbsolute(path); - - var parts = path.split(/\/+/); - for (var part, up = 0, i = parts.length - 1; i >= 0; i--) { - part = parts[i]; - if (part === '.') { - parts.splice(i, 1); - } else if (part === '..') { - up++; - } else if (up > 0) { - if (part === '') { - // The first part is blank if the path is absolute. Trying to go - // above the root is a no-op. Therefore we can remove all '..' parts - // directly after the root. - parts.splice(i + 1, up); - up = 0; - } else { - parts.splice(i, 2); - up--; - } - } - } - path = parts.join('/'); - - if (path === '') { - path = isAbsolute ? '/' : '.'; - } - - if (url) { - url.path = path; - return urlGenerate(url); - } - return path; -} -exports.normalize = normalize; - -/** - * Joins two paths/URLs. - * - * @param aRoot The root path or URL. - * @param aPath The path or URL to be joined with the root. - * - * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a - * scheme-relative URL: Then the scheme of aRoot, if any, is prepended - * first. - * - Otherwise aPath is a path. If aRoot is a URL, then its path portion - * is updated with the result and aRoot is returned. Otherwise the result - * is returned. - * - If aPath is absolute, the result is aPath. - * - Otherwise the two paths are joined with a slash. - * - Joining for example 'http://' and 'www.example.com' is also supported. - */ -function join(aRoot, aPath) { - if (aRoot === "") { - aRoot = "."; - } - if (aPath === "") { - aPath = "."; - } - var aPathUrl = urlParse(aPath); - var aRootUrl = urlParse(aRoot); - if (aRootUrl) { - aRoot = aRootUrl.path || '/'; - } - - // `join(foo, '//www.example.org')` - if (aPathUrl && !aPathUrl.scheme) { - if (aRootUrl) { - aPathUrl.scheme = aRootUrl.scheme; - } - return urlGenerate(aPathUrl); - } - - if (aPathUrl || aPath.match(dataUrlRegexp)) { - return aPath; - } - - // `join('http://', 'www.example.com')` - if (aRootUrl && !aRootUrl.host && !aRootUrl.path) { - aRootUrl.host = aPath; - return urlGenerate(aRootUrl); - } - - var joined = aPath.charAt(0) === '/' - ? aPath - : normalize(aRoot.replace(/\/+$/, '') + '/' + aPath); - - if (aRootUrl) { - aRootUrl.path = joined; - return urlGenerate(aRootUrl); - } - return joined; -} -exports.join = join; - -exports.isAbsolute = function (aPath) { - return aPath.charAt(0) === '/' || !!aPath.match(urlRegexp); -}; - -/** - * Make a path relative to a URL or another path. - * - * @param aRoot The root path or URL. - * @param aPath The path or URL to be made relative to aRoot. - */ -function relative(aRoot, aPath) { - if (aRoot === "") { - aRoot = "."; - } - - aRoot = aRoot.replace(/\/$/, ''); - - // It is possible for the path to be above the root. In this case, simply - // checking whether the root is a prefix of the path won't work. Instead, we - // need to remove components from the root one by one, until either we find - // a prefix that fits, or we run out of components to remove. - var level = 0; - while (aPath.indexOf(aRoot + '/') !== 0) { - var index = aRoot.lastIndexOf("/"); - if (index < 0) { - return aPath; - } - - // If the only part of the root that is left is the scheme (i.e. http://, - // file:///, etc.), one or more slashes (/), or simply nothing at all, we - // have exhausted all components, so the path is not relative to the root. - aRoot = aRoot.slice(0, index); - if (aRoot.match(/^([^\/]+:\/)?\/*$/)) { - return aPath; - } - - ++level; - } - - // Make sure we add a "../" for each component we removed from the root. - return Array(level + 1).join("../") + aPath.substr(aRoot.length + 1); -} -exports.relative = relative; - -var supportsNullProto = (function () { - var obj = Object.create(null); - return !('__proto__' in obj); -}()); - -function identity (s) { - return s; -} - -/** - * Because behavior goes wacky when you set `__proto__` on objects, we - * have to prefix all the strings in our set with an arbitrary character. - * - * See https://github.com/mozilla/source-map/pull/31 and - * https://github.com/mozilla/source-map/issues/30 - * - * @param String aStr - */ -function toSetString(aStr) { - if (isProtoString(aStr)) { - return '$' + aStr; - } - - return aStr; -} -exports.toSetString = supportsNullProto ? identity : toSetString; - -function fromSetString(aStr) { - if (isProtoString(aStr)) { - return aStr.slice(1); - } - - return aStr; -} -exports.fromSetString = supportsNullProto ? identity : fromSetString; - -function isProtoString(s) { - if (!s) { - return false; - } - - var length = s.length; - - if (length < 9 /* "__proto__".length */) { - return false; - } - - if (s.charCodeAt(length - 1) !== 95 /* '_' */ || - s.charCodeAt(length - 2) !== 95 /* '_' */ || - s.charCodeAt(length - 3) !== 111 /* 'o' */ || - s.charCodeAt(length - 4) !== 116 /* 't' */ || - s.charCodeAt(length - 5) !== 111 /* 'o' */ || - s.charCodeAt(length - 6) !== 114 /* 'r' */ || - s.charCodeAt(length - 7) !== 112 /* 'p' */ || - s.charCodeAt(length - 8) !== 95 /* '_' */ || - s.charCodeAt(length - 9) !== 95 /* '_' */) { - return false; - } - - for (var i = length - 10; i >= 0; i--) { - if (s.charCodeAt(i) !== 36 /* '$' */) { - return false; - } - } - - return true; -} - -/** - * Comparator between two mappings where the original positions are compared. - * - * Optionally pass in `true` as `onlyCompareGenerated` to consider two - * mappings with the same original source/line/column, but different generated - * line and column the same. Useful when searching for a mapping with a - * stubbed out mapping. - */ -function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) { - var cmp = mappingA.source - mappingB.source; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.originalLine - mappingB.originalLine; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.originalColumn - mappingB.originalColumn; - if (cmp !== 0 || onlyCompareOriginal) { - return cmp; - } - - cmp = mappingA.generatedColumn - mappingB.generatedColumn; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.generatedLine - mappingB.generatedLine; - if (cmp !== 0) { - return cmp; - } - - return mappingA.name - mappingB.name; -} -exports.compareByOriginalPositions = compareByOriginalPositions; - -/** - * Comparator between two mappings with deflated source and name indices where - * the generated positions are compared. - * - * Optionally pass in `true` as `onlyCompareGenerated` to consider two - * mappings with the same generated line and column, but different - * source/name/original line and column the same. Useful when searching for a - * mapping with a stubbed out mapping. - */ -function compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) { - var cmp = mappingA.generatedLine - mappingB.generatedLine; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.generatedColumn - mappingB.generatedColumn; - if (cmp !== 0 || onlyCompareGenerated) { - return cmp; - } - - cmp = mappingA.source - mappingB.source; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.originalLine - mappingB.originalLine; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.originalColumn - mappingB.originalColumn; - if (cmp !== 0) { - return cmp; - } - - return mappingA.name - mappingB.name; -} -exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated; - -function strcmp(aStr1, aStr2) { - if (aStr1 === aStr2) { - return 0; - } - - if (aStr1 > aStr2) { - return 1; - } - - return -1; -} - -/** - * Comparator between two mappings with inflated source and name strings where - * the generated positions are compared. - */ -function compareByGeneratedPositionsInflated(mappingA, mappingB) { - var cmp = mappingA.generatedLine - mappingB.generatedLine; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.generatedColumn - mappingB.generatedColumn; - if (cmp !== 0) { - return cmp; - } - - cmp = strcmp(mappingA.source, mappingB.source); - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.originalLine - mappingB.originalLine; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.originalColumn - mappingB.originalColumn; - if (cmp !== 0) { - return cmp; - } - - return strcmp(mappingA.name, mappingB.name); -} -exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated; diff --git a/node_modules/source-map/package.json b/node_modules/source-map/package.json deleted file mode 100644 index 048e3ae..0000000 --- a/node_modules/source-map/package.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "name": "source-map", - "description": "Generates and consumes source maps", - "version": "0.5.7", - "homepage": "https://github.com/mozilla/source-map", - "author": "Nick Fitzgerald ", - "contributors": [ - "Tobias Koppers ", - "Duncan Beevers ", - "Stephen Crane ", - "Ryan Seddon ", - "Miles Elam ", - "Mihai Bazon ", - "Michael Ficarra ", - "Todd Wolfson ", - "Alexander Solovyov ", - "Felix Gnass ", - "Conrad Irwin ", - "usrbincc ", - "David Glasser ", - "Chase Douglas ", - "Evan Wallace ", - "Heather Arthur ", - "Hugh Kennedy ", - "David Glasser ", - "Simon Lydell ", - "Jmeas Smith ", - "Michael Z Goddard ", - "azu ", - "John Gozde ", - "Adam Kirkton ", - "Chris Montgomery ", - "J. Ryan Stinnett ", - "Jack Herrington ", - "Chris Truter ", - "Daniel Espeset ", - "Jamie Wong ", - "Eddy Bruël ", - "Hawken Rives ", - "Gilad Peleg ", - "djchie ", - "Gary Ye ", - "Nicolas Lalevée " - ], - "repository": { - "type": "git", - "url": "http://github.com/mozilla/source-map.git" - }, - "main": "./source-map.js", - "files": [ - "source-map.js", - "lib/", - "dist/source-map.debug.js", - "dist/source-map.js", - "dist/source-map.min.js", - "dist/source-map.min.js.map" - ], - "engines": { - "node": ">=0.10.0" - }, - "license": "BSD-3-Clause", - "scripts": { - "test": "npm run build && node test/run-tests.js", - "build": "webpack --color", - "toc": "doctoc --title '## Table of Contents' README.md && doctoc --title '## Table of Contents' CONTRIBUTING.md" - }, - "devDependencies": { - "doctoc": "^0.15.0", - "webpack": "^1.12.0" - }, - "typings": "source-map" -} diff --git a/node_modules/source-map/source-map.js b/node_modules/source-map/source-map.js deleted file mode 100644 index bc88fe8..0000000 --- a/node_modules/source-map/source-map.js +++ /dev/null @@ -1,8 +0,0 @@ -/* - * Copyright 2009-2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE.txt or: - * http://opensource.org/licenses/BSD-3-Clause - */ -exports.SourceMapGenerator = require('./lib/source-map-generator').SourceMapGenerator; -exports.SourceMapConsumer = require('./lib/source-map-consumer').SourceMapConsumer; -exports.SourceNode = require('./lib/source-node').SourceNode; diff --git a/node_modules/split-string/LICENSE b/node_modules/split-string/LICENSE deleted file mode 100644 index e33d14b..0000000 --- a/node_modules/split-string/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015-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/split-string/README.md b/node_modules/split-string/README.md deleted file mode 100644 index d622e44..0000000 --- a/node_modules/split-string/README.md +++ /dev/null @@ -1,321 +0,0 @@ -# split-string [![NPM version](https://img.shields.io/npm/v/split-string.svg?style=flat)](https://www.npmjs.com/package/split-string) [![NPM monthly downloads](https://img.shields.io/npm/dm/split-string.svg?style=flat)](https://npmjs.org/package/split-string) [![NPM total downloads](https://img.shields.io/npm/dt/split-string.svg?style=flat)](https://npmjs.org/package/split-string) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/split-string.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/split-string) - -> Split a string on a character except when the character is escaped. - -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 split-string -``` - - - -
    -Why use this? - -
    - -Although it's easy to split on a string: - -```js -console.log('a.b.c'.split('.')); -//=> ['a', 'b', 'c'] -``` - -It's more challenging to split a string whilst respecting escaped or quoted characters. - -**Bad** - -```js -console.log('a\\.b.c'.split('.')); -//=> ['a\\', 'b', 'c'] - -console.log('"a.b.c".d'.split('.')); -//=> ['"a', 'b', 'c"', 'd'] -``` - -**Good** - -```js -var split = require('split-string'); -console.log(split('a\\.b.c')); -//=> ['a.b', 'c'] - -console.log(split('"a.b.c".d')); -//=> ['a.b.c', 'd'] -``` - -See the [options](#options) to learn how to choose the separator or retain quotes or escaping. - -
    - -
    - -## Usage - -```js -var split = require('split-string'); - -split('a.b.c'); -//=> ['a', 'b', 'c'] - -// respects escaped characters -split('a.b.c\\.d'); -//=> ['a', 'b', 'c.d'] - -// respects double-quoted strings -split('a."b.c.d".e'); -//=> ['a', 'b.c.d', 'e'] -``` - -**Brackets** - -Also respects brackets [unless disabled](#optionsbrackets): - -```js -split('a (b c d) e', ' '); -//=> ['a', '(b c d)', 'e'] -``` - -## Options - -### options.brackets - -**Type**: `object|boolean` - -**Default**: `undefined` - -**Description** - -If enabled, split-string will not split inside brackets. The following brackets types are supported when `options.brackets` is `true`, - -```js -{ - '<': '>', - '(': ')', - '[': ']', - '{': '}' -} -``` - -Or, if object of brackets must be passed, each property on the object must be a bracket type, where the property key is the opening delimiter and property value is the closing delimiter. - -**Examples** - -```js -// no bracket support by default -split('a.{b.c}'); -//=> [ 'a', '{b', 'c}' ] - -// support all basic bracket types: "<>{}[]()" -split('a.{b.c}', {brackets: true}); -//=> [ 'a', '{b.c}' ] - -// also supports nested brackets -split('a.{b.{c.d}.e}.f', {brackets: true}); -//=> [ 'a', '{b.{c.d}.e}', 'f' ] - -// support only the specified brackets -split('[a.b].(c.d)', {brackets: {'[': ']'}}); -//=> [ '[a.b]', '(c', 'd)' ] -``` - -### options.sep - -**Type**: `string` - -**Default**: `.` - -The separator/character to split on. - -**Example** - -```js -split('a.b,c', {sep: ','}); -//=> ['a.b', 'c'] - -// you can also pass the separator as string as the last argument -split('a.b,c', ','); -//=> ['a.b', 'c'] -``` - -### options.keepEscaping - -**Type**: `boolean` - -**Default**: `undefined` - -Keep backslashes in the result. - -**Example** - -```js -split('a.b\\.c'); -//=> ['a', 'b.c'] - -split('a.b.\\c', {keepEscaping: true}); -//=> ['a', 'b\.c'] -``` - -### options.keepQuotes - -**Type**: `boolean` - -**Default**: `undefined` - -Keep single- or double-quotes in the result. - -**Example** - -```js -split('a."b.c.d".e'); -//=> ['a', 'b.c.d', 'e'] - -split('a."b.c.d".e', {keepQuotes: true}); -//=> ['a', '"b.c.d"', 'e'] - -split('a.\'b.c.d\'.e', {keepQuotes: true}); -//=> ['a', '\'b.c.d\'', 'e'] -``` - -### options.keepDoubleQuotes - -**Type**: `boolean` - -**Default**: `undefined` - -Keep double-quotes in the result. - -**Example** - -```js -split('a."b.c.d".e'); -//=> ['a', 'b.c.d', 'e'] - -split('a."b.c.d".e', {keepDoubleQuotes: true}); -//=> ['a', '"b.c.d"', 'e'] -``` - -### options.keepSingleQuotes - -**Type**: `boolean` - -**Default**: `undefined` - -Keep single-quotes in the result. - -**Example** - -```js -split('a.\'b.c.d\'.e'); -//=> ['a', 'b.c.d', 'e'] - -split('a.\'b.c.d\'.e', {keepSingleQuotes: true}); -//=> ['a', '\'b.c.d\'', 'e'] -``` - -## Customizer - -**Type**: `function` - -**Default**: `undefined` - -Pass a function as the last argument to customize how tokens are added to the array. - -**Example** - -```js -var arr = split('a.b', function(tok) { - if (tok.arr[tok.arr.length - 1] === 'a') { - tok.split = false; - } -}); -console.log(arr); -//=> ['a.b'] -``` - -**Properties** - -The `tok` object has the following properties: - -* `tok.val` (string) The current value about to be pushed onto the result array -* `tok.idx` (number) the current index in the string -* `tok.str` (string) the entire string -* `tok.arr` (array) the result array - -## Release history - -### v3.0.0 - 2017-06-17 - -**Added** - -* adds support for brackets - -## 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: - -* [deromanize](https://www.npmjs.com/package/deromanize): Convert roman numerals to arabic numbers (useful for books, outlines, documentation, slide decks, etc) | [homepage](https://github.com/jonschlinkert/deromanize "Convert roman numerals to arabic numbers (useful for books, outlines, documentation, slide decks, etc)") -* [randomatic](https://www.npmjs.com/package/randomatic): Generate randomized strings of a specified length using simple character sequences. The original generate-password. | [homepage](https://github.com/jonschlinkert/randomatic "Generate randomized strings of a specified length using simple character sequences. The original generate-password.") -* [repeat-string](https://www.npmjs.com/package/repeat-string): Repeat the given string n times. Fastest implementation for repeating a string. | [homepage](https://github.com/jonschlinkert/repeat-string "Repeat the given string n times. Fastest implementation for repeating a string.") -* [romanize](https://www.npmjs.com/package/romanize): Convert numbers to roman numerals (useful for books, outlines, documentation, slide decks, etc) | [homepage](https://github.com/jonschlinkert/romanize "Convert numbers to roman numerals (useful for books, outlines, documentation, slide decks, etc)") - -### Contributors - -| **Commits** | **Contributor** | -| --- | --- | -| 28 | [jonschlinkert](https://github.com/jonschlinkert) | -| 9 | [doowb](https://github.com/doowb) | - -### Author - -**Jon Schlinkert** - -* [github/jonschlinkert](https://github.com/jonschlinkert) -* [twitter/jonschlinkert](https://twitter.com/jonschlinkert) - -### License - -Copyright © 2017, [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 November 19, 2017._ \ No newline at end of file diff --git a/node_modules/split-string/index.js b/node_modules/split-string/index.js deleted file mode 100644 index 7bc0ea9..0000000 --- a/node_modules/split-string/index.js +++ /dev/null @@ -1,171 +0,0 @@ -/*! - * split-string - * - * Copyright (c) 2015-2017, Jon Schlinkert. - * Released under the MIT License. - */ - -'use strict'; - -var extend = require('extend-shallow'); - -module.exports = function(str, options, fn) { - if (typeof str !== 'string') { - throw new TypeError('expected a string'); - } - - if (typeof options === 'function') { - fn = options; - options = null; - } - - // allow separator to be defined as a string - if (typeof options === 'string') { - options = { sep: options }; - } - - var opts = extend({sep: '.'}, options); - var quotes = opts.quotes || ['"', "'", '`']; - var brackets; - - if (opts.brackets === true) { - brackets = { - '<': '>', - '(': ')', - '[': ']', - '{': '}' - }; - } else if (opts.brackets) { - brackets = opts.brackets; - } - - var tokens = []; - var stack = []; - var arr = ['']; - var sep = opts.sep; - var len = str.length; - var idx = -1; - var closeIdx; - - function expected() { - if (brackets && stack.length) { - return brackets[stack[stack.length - 1]]; - } - } - - while (++idx < len) { - var ch = str[idx]; - var next = str[idx + 1]; - var tok = { val: ch, idx: idx, arr: arr, str: str }; - tokens.push(tok); - - if (ch === '\\') { - tok.val = keepEscaping(opts, str, idx) === true ? (ch + next) : next; - tok.escaped = true; - if (typeof fn === 'function') { - fn(tok); - } - arr[arr.length - 1] += tok.val; - idx++; - continue; - } - - if (brackets && brackets[ch]) { - stack.push(ch); - var e = expected(); - var i = idx + 1; - - if (str.indexOf(e, i + 1) !== -1) { - while (stack.length && i < len) { - var s = str[++i]; - if (s === '\\') { - s++; - continue; - } - - if (quotes.indexOf(s) !== -1) { - i = getClosingQuote(str, s, i + 1); - continue; - } - - e = expected(); - if (stack.length && str.indexOf(e, i + 1) === -1) { - break; - } - - if (brackets[s]) { - stack.push(s); - continue; - } - - if (e === s) { - stack.pop(); - } - } - } - - closeIdx = i; - if (closeIdx === -1) { - arr[arr.length - 1] += ch; - continue; - } - - ch = str.slice(idx, closeIdx + 1); - tok.val = ch; - tok.idx = idx = closeIdx; - } - - if (quotes.indexOf(ch) !== -1) { - closeIdx = getClosingQuote(str, ch, idx + 1); - if (closeIdx === -1) { - arr[arr.length - 1] += ch; - continue; - } - - if (keepQuotes(ch, opts) === true) { - ch = str.slice(idx, closeIdx + 1); - } else { - ch = str.slice(idx + 1, closeIdx); - } - - tok.val = ch; - tok.idx = idx = closeIdx; - } - - if (typeof fn === 'function') { - fn(tok, tokens); - ch = tok.val; - idx = tok.idx; - } - - if (tok.val === sep && tok.split !== false) { - arr.push(''); - continue; - } - - arr[arr.length - 1] += tok.val; - } - - return arr; -}; - -function getClosingQuote(str, ch, i, brackets) { - var idx = str.indexOf(ch, i); - if (str.charAt(idx - 1) === '\\') { - return getClosingQuote(str, ch, idx + 1); - } - return idx; -} - -function keepQuotes(ch, opts) { - if (opts.keepDoubleQuotes === true && ch === '"') return true; - if (opts.keepSingleQuotes === true && ch === "'") return true; - return opts.keepQuotes; -} - -function keepEscaping(opts, str, idx) { - if (typeof opts.keepEscaping === 'function') { - return opts.keepEscaping(str, idx); - } - return opts.keepEscaping === true || str[idx + 1] === '\\'; -} diff --git a/node_modules/split-string/node_modules/extend-shallow/LICENSE b/node_modules/split-string/node_modules/extend-shallow/LICENSE deleted file mode 100644 index 99c9369..0000000 --- a/node_modules/split-string/node_modules/extend-shallow/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014-2015, 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/split-string/node_modules/extend-shallow/README.md b/node_modules/split-string/node_modules/extend-shallow/README.md deleted file mode 100644 index dee226f..0000000 --- a/node_modules/split-string/node_modules/extend-shallow/README.md +++ /dev/null @@ -1,97 +0,0 @@ -# extend-shallow [![NPM version](https://img.shields.io/npm/v/extend-shallow.svg?style=flat)](https://www.npmjs.com/package/extend-shallow) [![NPM monthly downloads](https://img.shields.io/npm/dm/extend-shallow.svg?style=flat)](https://npmjs.org/package/extend-shallow) [![NPM total downloads](https://img.shields.io/npm/dt/extend-shallow.svg?style=flat)](https://npmjs.org/package/extend-shallow) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/extend-shallow.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/extend-shallow) - -> Extend an object with the properties of additional objects. node.js/javascript util. - -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 extend-shallow -``` - -## Usage - -```js -var extend = require('extend-shallow'); - -extend({a: 'b'}, {c: 'd'}) -//=> {a: 'b', c: 'd'} -``` - -Pass an empty object to shallow clone: - -```js -var obj = {}; -extend(obj, {a: 'b'}, {c: 'd'}) -//=> {a: 'b', c: 'd'} -``` - -## 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: - -* [extend-shallow](https://www.npmjs.com/package/extend-shallow): Extend an object with the properties of additional objects. node.js/javascript util. | [homepage](https://github.com/jonschlinkert/extend-shallow "Extend an object with the properties of additional objects. node.js/javascript util.") -* [for-in](https://www.npmjs.com/package/for-in): Iterate over the own and inherited enumerable properties of an object, and return an object… [more](https://github.com/jonschlinkert/for-in) | [homepage](https://github.com/jonschlinkert/for-in "Iterate over the own and inherited enumerable properties of an object, and return an object with properties that evaluate to true from the callback. Exit early by returning `false`. JavaScript/Node.js") -* [for-own](https://www.npmjs.com/package/for-own): Iterate over the own enumerable properties of an object, and return an object with properties… [more](https://github.com/jonschlinkert/for-own) | [homepage](https://github.com/jonschlinkert/for-own "Iterate over the own enumerable properties of an object, and return an object with properties that evaluate to true from the callback. Exit early by returning `false`. JavaScript/Node.js.") -* [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.") -* [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** | -| --- | --- | -| 33 | [jonschlinkert](https://github.com/jonschlinkert) | -| 1 | [pdehaan](https://github.com/pdehaan) | - -### Author - -**Jon Schlinkert** - -* [github/jonschlinkert](https://github.com/jonschlinkert) -* [twitter/jonschlinkert](https://twitter.com/jonschlinkert) - -### License - -Copyright © 2017, [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 November 19, 2017._ \ No newline at end of file diff --git a/node_modules/split-string/node_modules/extend-shallow/index.js b/node_modules/split-string/node_modules/extend-shallow/index.js deleted file mode 100644 index c9582f8..0000000 --- a/node_modules/split-string/node_modules/extend-shallow/index.js +++ /dev/null @@ -1,60 +0,0 @@ -'use strict'; - -var isExtendable = require('is-extendable'); -var assignSymbols = require('assign-symbols'); - -module.exports = Object.assign || function(obj/*, objects*/) { - if (obj === null || typeof obj === 'undefined') { - throw new TypeError('Cannot convert undefined or null to object'); - } - if (!isObject(obj)) { - obj = {}; - } - for (var i = 1; i < arguments.length; i++) { - var val = arguments[i]; - if (isString(val)) { - val = toObject(val); - } - if (isObject(val)) { - assign(obj, val); - assignSymbols(obj, val); - } - } - return obj; -}; - -function assign(a, b) { - for (var key in b) { - if (hasOwn(b, key)) { - a[key] = b[key]; - } - } -} - -function isString(val) { - return (val && typeof val === 'string'); -} - -function toObject(str) { - var obj = {}; - for (var i in str) { - obj[i] = str[i]; - } - return obj; -} - -function isObject(val) { - return (val && typeof val === 'object') || isExtendable(val); -} - -/** - * Returns true if the given `key` is an own property of `obj`. - */ - -function hasOwn(obj, key) { - return Object.prototype.hasOwnProperty.call(obj, key); -} - -function isEnum(obj, key) { - return Object.prototype.propertyIsEnumerable.call(obj, key); -} diff --git a/node_modules/split-string/node_modules/extend-shallow/package.json b/node_modules/split-string/node_modules/extend-shallow/package.json deleted file mode 100644 index e5e9105..0000000 --- a/node_modules/split-string/node_modules/extend-shallow/package.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "name": "extend-shallow", - "description": "Extend an object with the properties of additional objects. node.js/javascript util.", - "version": "3.0.2", - "homepage": "https://github.com/jonschlinkert/extend-shallow", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "contributors": [ - "Jon Schlinkert (http://twitter.com/jonschlinkert)", - "Peter deHaan (http://about.me/peterdehaan)" - ], - "repository": "jonschlinkert/extend-shallow", - "bugs": { - "url": "https://github.com/jonschlinkert/extend-shallow/issues" - }, - "license": "MIT", - "files": [ - "index.js" - ], - "main": "index.js", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "devDependencies": { - "array-slice": "^1.0.0", - "benchmarked": "^2.0.0", - "for-own": "^1.0.0", - "gulp-format-md": "^1.0.0", - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.1", - "minimist": "^1.2.0", - "mocha": "^3.5.3", - "object-assign": "^4.1.1" - }, - "keywords": [ - "assign", - "clone", - "extend", - "merge", - "obj", - "object", - "object-assign", - "object.assign", - "prop", - "properties", - "property", - "props", - "shallow", - "util", - "utility", - "utils", - "value" - ], - "verb": { - "toc": false, - "layout": "default", - "tasks": [ - "readme" - ], - "related": { - "list": [ - "extend-shallow", - "for-in", - "for-own", - "is-plain-object", - "isobject", - "kind-of" - ] - }, - "plugins": [ - "gulp-format-md" - ], - "lint": { - "reflinks": true - } - } -} diff --git a/node_modules/split-string/node_modules/is-extendable/LICENSE b/node_modules/split-string/node_modules/is-extendable/LICENSE deleted file mode 100644 index c0d7f13..0000000 --- a/node_modules/split-string/node_modules/is-extendable/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015-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. \ No newline at end of file diff --git a/node_modules/split-string/node_modules/is-extendable/README.md b/node_modules/split-string/node_modules/is-extendable/README.md deleted file mode 100644 index 875b56a..0000000 --- a/node_modules/split-string/node_modules/is-extendable/README.md +++ /dev/null @@ -1,88 +0,0 @@ -# is-extendable [![NPM version](https://img.shields.io/npm/v/is-extendable.svg?style=flat)](https://www.npmjs.com/package/is-extendable) [![NPM monthly downloads](https://img.shields.io/npm/dm/is-extendable.svg?style=flat)](https://npmjs.org/package/is-extendable) [![NPM total downloads](https://img.shields.io/npm/dt/is-extendable.svg?style=flat)](https://npmjs.org/package/is-extendable) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/is-extendable.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/is-extendable) - -> Returns true if a value is a plain object, array or function. - -## Install - -Install with [npm](https://www.npmjs.com/): - -```sh -$ npm install --save is-extendable -``` - -## Usage - -```js -var isExtendable = require('is-extendable'); -``` - -Returns true if the value is any of the following: - -* array -* plain object -* function - -## Notes - -All objects in JavaScript can have keys, but it's a pain to check for this, since we ether need to verify that the value is not `null` or `undefined` and: - -* the value is not a primitive, or -* that the object is a plain object, function or array - -Also note that an `extendable` object is not the same as an [extensible object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isExtensible), which is one that (in es6) is not sealed, frozen, or marked as non-extensible using `preventExtensions`. - -## Release history - -### v1.0.0 - 2017/07/20 - -**Breaking changes** - -* No longer considers date, regex or error objects to be extendable - -## About - -### Related projects - -* [assign-deep](https://www.npmjs.com/package/assign-deep): Deeply assign the enumerable properties and/or es6 Symbol properies of source objects to the target… [more](https://github.com/jonschlinkert/assign-deep) | [homepage](https://github.com/jonschlinkert/assign-deep "Deeply assign the enumerable properties and/or es6 Symbol properies of source objects to the target (first) object.") -* [is-equal-shallow](https://www.npmjs.com/package/is-equal-shallow): Does a shallow comparison of two objects, returning false if the keys or values differ. | [homepage](https://github.com/jonschlinkert/is-equal-shallow "Does a shallow comparison of two objects, returning false if the keys or values differ.") -* [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.") -* [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.") - -### Contributing - -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). - -### 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 -``` - -### 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 -``` - -### Author - -**Jon Schlinkert** - -* [github/jonschlinkert](https://github.com/jonschlinkert) -* [twitter/jonschlinkert](https://twitter.com/jonschlinkert) - -### License - -Copyright © 2017, [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 July 20, 2017._ \ No newline at end of file diff --git a/node_modules/split-string/node_modules/is-extendable/index.d.ts b/node_modules/split-string/node_modules/is-extendable/index.d.ts deleted file mode 100644 index b96d507..0000000 --- a/node_modules/split-string/node_modules/is-extendable/index.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export = isExtendable; - -declare function isExtendable(val: any): boolean; - -declare namespace isExtendable {} diff --git a/node_modules/split-string/node_modules/is-extendable/index.js b/node_modules/split-string/node_modules/is-extendable/index.js deleted file mode 100644 index a8b26ad..0000000 --- a/node_modules/split-string/node_modules/is-extendable/index.js +++ /dev/null @@ -1,14 +0,0 @@ -/*! - * is-extendable - * - * Copyright (c) 2015-2017, Jon Schlinkert. - * Released under the MIT License. - */ - -'use strict'; - -var isPlainObject = require('is-plain-object'); - -module.exports = function isExtendable(val) { - return isPlainObject(val) || typeof val === 'function' || Array.isArray(val); -}; diff --git a/node_modules/split-string/node_modules/is-extendable/package.json b/node_modules/split-string/node_modules/is-extendable/package.json deleted file mode 100644 index 2aaab65..0000000 --- a/node_modules/split-string/node_modules/is-extendable/package.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "name": "is-extendable", - "description": "Returns true if a value is a plain object, array or function.", - "version": "1.0.1", - "homepage": "https://github.com/jonschlinkert/is-extendable", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "repository": "jonschlinkert/is-extendable", - "bugs": { - "url": "https://github.com/jonschlinkert/is-extendable/issues" - }, - "license": "MIT", - "files": [ - "index.js", - "index.d.ts" - ], - "main": "index.js", - "types": "index.d.ts", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "devDependencies": { - "gulp-format-md": "^1.0.0", - "mocha": "^3.4.2" - }, - "keywords": [ - "array", - "assign", - "check", - "date", - "extend", - "extendable", - "extensible", - "function", - "is", - "object", - "regex", - "test" - ], - "verb": { - "related": { - "list": [ - "assign-deep", - "is-equal-shallow", - "is-plain-object", - "isobject", - "kind-of" - ] - }, - "toc": false, - "layout": "default", - "tasks": [ - "readme" - ], - "plugins": [ - "gulp-format-md" - ], - "lint": { - "reflinks": true - } - } -} diff --git a/node_modules/split-string/package.json b/node_modules/split-string/package.json deleted file mode 100644 index 8f490a2..0000000 --- a/node_modules/split-string/package.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "name": "split-string", - "description": "Split a string on a character except when the character is escaped.", - "version": "3.1.0", - "homepage": "https://github.com/jonschlinkert/split-string", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "contributors": [ - "Brian Woodward (https://twitter.com/doowb)", - "Jon Schlinkert (http://twitter.com/jonschlinkert)" - ], - "repository": "jonschlinkert/split-string", - "bugs": { - "url": "https://github.com/jonschlinkert/split-string/issues" - }, - "license": "MIT", - "files": [ - "index.js" - ], - "main": "index.js", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "devDependencies": { - "gulp-format-md": "^1.0.0", - "mocha": "^3.5.3" - }, - "keywords": [ - "character", - "escape", - "split", - "string" - ], - "verb": { - "toc": false, - "layout": "default", - "titles": [ - ".", - "install", - "Why use this?" - ], - "related": { - "list": [ - "deromanize", - "randomatic", - "repeat-string", - "romanize" - ] - }, - "tasks": [ - "readme" - ], - "plugins": [ - "gulp-format-md" - ], - "lint": { - "reflinks": true - } - } -} diff --git a/node_modules/split/.npmignore b/node_modules/split/.npmignore deleted file mode 100644 index 13abef4..0000000 --- a/node_modules/split/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules -node_modules/* -npm_debug.log diff --git a/node_modules/split/.travis.yml b/node_modules/split/.travis.yml deleted file mode 100644 index dad2273..0000000 --- a/node_modules/split/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - 0.8 - - "0.10" diff --git a/node_modules/split/LICENCE b/node_modules/split/LICENCE deleted file mode 100644 index 171dd97..0000000 --- a/node_modules/split/LICENCE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2011 Dominic Tarr - -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/split/examples/pretty.js b/node_modules/split/examples/pretty.js deleted file mode 100644 index 2e89131..0000000 --- a/node_modules/split/examples/pretty.js +++ /dev/null @@ -1,26 +0,0 @@ - -var inspect = require('util').inspect -var es = require('event-stream') //load event-stream -var split = require('../') - -if(!module.parent) { - es.pipe( //pipe joins streams together - process.openStdin(), //open stdin - split(), //split stream to break on newlines - es.map(function (data, callback) {//turn this async function into a stream - var j - try { - j = JSON.parse(data) //try to parse input into json - } catch (err) { - return callback(null, data) //if it fails just pass it anyway - } - callback(null, inspect(j)) //render it nicely - }), - process.stdout // pipe it to stdout ! - ) - } - -// run this -// -// curl -sS registry.npmjs.org/event-stream | node pretty.js -// diff --git a/node_modules/split/index.js b/node_modules/split/index.js deleted file mode 100644 index d856433..0000000 --- a/node_modules/split/index.js +++ /dev/null @@ -1,63 +0,0 @@ -//filter will reemit the data if cb(err,pass) pass is truthy - -// reduce is more tricky -// maybe we want to group the reductions or emit progress updates occasionally -// the most basic reduce just emits one 'data' event after it has recieved 'end' - - -var through = require('through') -var Decoder = require('string_decoder').StringDecoder - -module.exports = split - -//TODO pass in a function to map across the lines. - -function split (matcher, mapper, options) { - var decoder = new Decoder() - var soFar = '' - var maxLength = options && options.maxLength; - if('function' === typeof matcher) - mapper = matcher, matcher = null - if (!matcher) - matcher = /\r?\n/ - - function emit(stream, piece) { - if(mapper) { - try { - piece = mapper(piece) - } - catch (err) { - return stream.emit('error', err) - } - if('undefined' !== typeof piece) - stream.queue(piece) - } - else - stream.queue(piece) - } - - function next (stream, buffer) { - var pieces = ((soFar != null ? soFar : '') + buffer).split(matcher) - soFar = pieces.pop() - - if (maxLength && soFar.length > maxLength) - stream.emit('error', new Error('maximum buffer reached')) - - for (var i = 0; i < pieces.length; i++) { - var piece = pieces[i] - emit(stream, piece) - } - } - - return through(function (b) { - next(this, decoder.write(b)) - }, - function () { - if(decoder.end) - next(this, decoder.end()) - if(soFar != null) - emit(this, soFar) - this.queue(null) - }) -} - diff --git a/node_modules/split/package.json b/node_modules/split/package.json deleted file mode 100644 index 00b35ca..0000000 --- a/node_modules/split/package.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "split", - "version": "0.3.3", - "license": "MIT", - "description": "split a Text Stream into a Line Stream", - "homepage": "http://github.com/dominictarr/split", - "repository": { - "type": "git", - "url": "git://github.com/dominictarr/split.git" - }, - "dependencies": { - "through": "2" - }, - "devDependencies": { - "asynct": "*", - "event-stream": "~3.0.2", - "it-is": "1", - "stream-spec": "~0.2", - "ubelt": "~2.9", - "string-to-stream": "~1.0.0" - }, - "scripts": { - "test": "asynct test/" - }, - "author": "Dominic Tarr (http://bit.ly/dominictarr)", - "optionalDependencies": {}, - "engines": { - "node": "*" - } -} diff --git a/node_modules/split/readme.markdown b/node_modules/split/readme.markdown deleted file mode 100644 index 13854ae..0000000 --- a/node_modules/split/readme.markdown +++ /dev/null @@ -1,66 +0,0 @@ -# Split (matcher) - -[![build status](https://secure.travis-ci.org/dominictarr/split.png)](http://travis-ci.org/dominictarr/split) - -Break up a stream and reassemble it so that each line is a chunk. matcher may be a `String`, or a `RegExp` - -Example, read every line in a file ... - -``` js - fs.createReadStream(file) - .pipe(split()) - .on('data', function (line) { - //each chunk now is a seperate line! - }) - -``` - -`split` takes the same arguments as `string.split` except it defaults to '/\r?\n/' instead of ',', and the optional `limit` paremeter is ignored. -[String#split](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/split) - -`split` takes an optional options object on it's third argument. - -``` js - split(matcher, mapper, options) -``` - -Valid options: - -* maxLength - The maximum buffer length without seeing a newline or `matcher`, - if a single line exceeds this, the split stream will emit an error. - -``` js - split(JSON.parse, null, { maxLength: 2}) -``` - -## keep matched splitter - -As with `Array#split`, if you split by a regular expression with a matching group, -the matches will be retained in the collection. - -``` -stdin -.pipe(split(/(\r?\n)/)) -... //lines + separators. -``` - - -# NDJ - Newline Delimited Json - -`split` accepts a function which transforms each line. - -``` js -fs.createReadStream(file) - .pipe(split(JSON.parse)) - .on('data', function (obj) { - //each chunk now is a a js object - }) - .on('error', function (err) { - //syntax errors will land here - //note, this ends the stream. - }) -``` - -# License - -MIT diff --git a/node_modules/split/test/options.asynct.js b/node_modules/split/test/options.asynct.js deleted file mode 100644 index 6d34d87..0000000 --- a/node_modules/split/test/options.asynct.js +++ /dev/null @@ -1,23 +0,0 @@ -var it = require('it-is').style('colour') - , split = require('..') - -exports ['maximum buffer limit'] = function (test) { - var s = split(JSON.parse, null, { - maxLength: 2 - }) - , caughtError = false - , rows = [] - - s.on('error', function (err) { - caughtError = true - }) - - s.on('data', function (row) { rows.push(row) }) - - s.write('{"a":1}\n{"') - s.write('{ "') - it(caughtError).equal(true) - - s.end() - test.done() -} diff --git a/node_modules/split/test/partitioned_unicode.js b/node_modules/split/test/partitioned_unicode.js deleted file mode 100644 index aff3d5d..0000000 --- a/node_modules/split/test/partitioned_unicode.js +++ /dev/null @@ -1,34 +0,0 @@ -var it = require('it-is').style('colour') - , split = require('..') - -exports ['split data with partitioned unicode character'] = function (test) { - var s = split(/,/g) - , caughtError = false - , rows = [] - - s.on('error', function (err) { - caughtError = true - }) - - s.on('data', function (row) { rows.push(row) }) - - var x = 'テスト試験今日とても,よい天気で' - unicodeData = new Buffer(x); - - // partition of 日 - piece1 = unicodeData.slice(0, 20); - piece2 = unicodeData.slice(20, unicodeData.length); - - s.write(piece1); - s.write(piece2); - - s.end() - - it(caughtError).equal(false) - - it(rows).deepEqual(['テスト試験今日とても', 'よい天気で']); - - it(rows).deepEqual(x.split(',')) - - test.done() -} diff --git a/node_modules/split/test/split.asynct.js b/node_modules/split/test/split.asynct.js deleted file mode 100644 index e5df026..0000000 --- a/node_modules/split/test/split.asynct.js +++ /dev/null @@ -1,137 +0,0 @@ -var es = require('event-stream') - , it = require('it-is').style('colour') - , d = require('ubelt') - , split = require('..') - , join = require('path').join - , fs = require('fs') - , Stream = require('stream').Stream - , Readable = require('stream').Readable - , spec = require('stream-spec') - , through = require('through') - , stringStream = require('string-to-stream') - -exports ['split() works like String#split'] = function (test) { - var readme = join(__filename) - , expected = fs.readFileSync(readme, 'utf-8').split('\n') - , cs = split() - , actual = [] - , ended = false - , x = spec(cs).through() - - var a = new Stream () - - a.write = function (l) { - actual.push(l.trim()) - } - a.end = function () { - - ended = true - expected.forEach(function (v,k) { - //String.split will append an empty string '' - //if the string ends in a split pattern. - //es.split doesn't which was breaking this test. - //clearly, appending the empty string is correct. - //tests are passing though. which is the current job. - if(v) - it(actual[k]).like(v) - }) - //give the stream time to close - process.nextTick(function () { - test.done() - x.validate() - }) - } - a.writable = true - - fs.createReadStream(readme, {flags: 'r'}).pipe(cs) - cs.pipe(a) - -} - -exports ['split() takes mapper function'] = function (test) { - var readme = join(__filename) - , expected = fs.readFileSync(readme, 'utf-8').split('\n') - , cs = split(function (line) { return line.toUpperCase() }) - , actual = [] - , ended = false - , x = spec(cs).through() - - var a = new Stream () - - a.write = function (l) { - actual.push(l.trim()) - } - a.end = function () { - - ended = true - expected.forEach(function (v,k) { - //String.split will append an empty string '' - //if the string ends in a split pattern. - //es.split doesn't which was breaking this test. - //clearly, appending the empty string is correct. - //tests are passing though. which is the current job. - if(v) - it(actual[k]).equal(v.trim().toUpperCase()) - }) - //give the stream time to close - process.nextTick(function () { - test.done() - x.validate() - }) - } - a.writable = true - - fs.createReadStream(readme, {flags: 'r'}).pipe(cs) - cs.pipe(a) - -} - -exports ['split() works with empty string chunks'] = function (test) { - var str = ' foo' - , expected = str.split(/[\s]*/).reduce(splitBy(/[\s]*/), []) - , cs1 = split(/[\s]*/) - , cs2 = split(/[\s]*/) - , actual = [] - , ended = false - , x = spec(cs1).through() - , y = spec(cs2).through() - - var a = new Stream () - - a.write = function (l) { - actual.push(l.trim()) - } - a.end = function () { - - ended = true - expected.forEach(function (v,k) { - //String.split will append an empty string '' - //if the string ends in a split pattern. - //es.split doesn't which was breaking this test. - //clearly, appending the empty string is correct. - //tests are passing though. which is the current job. - if(v) - it(actual[k]).like(v) - }) - //give the stream time to close - process.nextTick(function () { - test.done() - x.validate() - y.validate() - }) - } - a.writable = true - - cs1.pipe(cs2) - cs2.pipe(a) - - cs1.write(str) - cs1.end() - -} - -function splitBy (delimeter) { - return function (arr, piece) { - return arr.concat(piece.split(delimeter)) - } -} \ No newline at end of file diff --git a/node_modules/split/test/try_catch.asynct.js b/node_modules/split/test/try_catch.asynct.js deleted file mode 100644 index 39e49f7..0000000 --- a/node_modules/split/test/try_catch.asynct.js +++ /dev/null @@ -1,51 +0,0 @@ -var it = require('it-is').style('colour') - , split = require('..') - -exports ['emit mapper exceptions as error events'] = function (test) { - var s = split(JSON.parse) - , caughtError = false - , rows = [] - - s.on('error', function (err) { - caughtError = true - }) - - s.on('data', function (row) { rows.push(row) }) - - s.write('{"a":1}\n{"') - it(caughtError).equal(false) - it(rows).deepEqual([ { a: 1 } ]) - - s.write('b":2}\n{"c":}\n') - it(caughtError).equal(true) - it(rows).deepEqual([ { a: 1 }, { b: 2 } ]) - - s.end() - test.done() -} - -exports ['mapper error events on trailing chunks'] = function (test) { - var s = split(JSON.parse) - , caughtError = false - , rows = [] - - s.on('error', function (err) { - caughtError = true - }) - - s.on('data', function (row) { rows.push(row) }) - - s.write('{"a":1}\n{"') - it(caughtError).equal(false) - it(rows).deepEqual([ { a: 1 } ]) - - s.write('b":2}\n{"c":}') - it(caughtError).equal(false) - it(rows).deepEqual([ { a: 1 }, { b: 2 } ]) - - s.end() - it(caughtError).equal(true) - it(rows).deepEqual([ { a: 1 }, { b: 2 } ]) - - test.done() -} diff --git a/node_modules/static-extend/LICENSE b/node_modules/static-extend/LICENSE deleted file mode 100644 index e28e603..0000000 --- a/node_modules/static-extend/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 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/static-extend/index.js b/node_modules/static-extend/index.js deleted file mode 100644 index f4124b2..0000000 --- a/node_modules/static-extend/index.js +++ /dev/null @@ -1,90 +0,0 @@ -/*! - * static-extend - * - * Copyright (c) 2016, Jon Schlinkert. - * Licensed under the MIT License. - */ - -'use strict'; - -var copy = require('object-copy'); -var define = require('define-property'); -var util = require('util'); - -/** - * Returns a function for extending the static properties, - * prototype properties, and descriptors from the `Parent` - * constructor onto `Child` constructors. - * - * ```js - * var extend = require('static-extend'); - * Parent.extend = extend(Parent); - * - * // optionally pass a custom merge function as the second arg - * Parent.extend = extend(Parent, function(Child) { - * Child.prototype.mixin = function(key, val) { - * Child.prototype[key] = val; - * }; - * }); - * - * // extend "child" constructors - * Parent.extend(Child); - * - * // optionally define prototype methods as the second arg - * Parent.extend(Child, { - * foo: function() {}, - * bar: function() {} - * }); - * ``` - * @param {Function} `Parent` Parent ctor - * @param {Function} `extendFn` Optional extend function for handling any necessary custom merging. Useful when updating methods that require a specific prototype. - * @param {Function} `Child` Child ctor - * @param {Object} `proto` Optionally pass additional prototype properties to inherit. - * @return {Object} - * @api public - */ - -function extend(Parent, extendFn) { - if (typeof Parent !== 'function') { - throw new TypeError('expected Parent to be a function.'); - } - - return function(Ctor, proto) { - if (typeof Ctor !== 'function') { - throw new TypeError('expected Ctor to be a function.'); - } - - util.inherits(Ctor, Parent); - copy(Ctor, Parent); - - // proto can be null or a plain object - if (typeof proto === 'object') { - var obj = Object.create(proto); - - for (var k in obj) { - Ctor.prototype[k] = obj[k]; - } - } - - // keep a reference to the parent prototype - define(Ctor.prototype, '_parent_', { - configurable: true, - set: function() {}, - get: function() { - return Parent.prototype; - } - }); - - if (typeof extendFn === 'function') { - extendFn(Ctor, Parent); - } - - Ctor.extend = extend(Ctor, extendFn); - }; -}; - -/** - * Expose `extend` - */ - -module.exports = extend; diff --git a/node_modules/static-extend/node_modules/define-property/LICENSE b/node_modules/static-extend/node_modules/define-property/LICENSE deleted file mode 100644 index 65f90ac..0000000 --- a/node_modules/static-extend/node_modules/define-property/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015, 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/static-extend/node_modules/define-property/README.md b/node_modules/static-extend/node_modules/define-property/README.md deleted file mode 100644 index 8cac698..0000000 --- a/node_modules/static-extend/node_modules/define-property/README.md +++ /dev/null @@ -1,77 +0,0 @@ -# define-property [![NPM version](https://badge.fury.io/js/define-property.svg)](http://badge.fury.io/js/define-property) - -> Define a non-enumerable property on an object. - -## Install - -Install with [npm](https://www.npmjs.com/) - -```sh -$ npm i define-property --save -``` - -## Usage - -**Params** - -* `obj`: The object on which to define the property. -* `prop`: The name of the property to be defined or modified. -* `descriptor`: The descriptor for the property being defined or modified. - -```js -var define = require('define-property'); -var obj = {}; -define(obj, 'foo', function(val) { - return val.toUpperCase(); -}); - -console.log(obj); -//=> {} - -console.log(obj.foo('bar')); -//=> 'BAR' -``` - -**get/set** - -```js -define(obj, 'foo', { - get: function() {}, - set: function() {} -}); -``` - -## Related projects - -* [delegate-object](https://www.npmjs.com/package/delegate-object): Copy properties from an object to another object, where properties with function values will be… [more](https://www.npmjs.com/package/delegate-object) | [homepage](https://github.com/doowb/delegate-object) -* [forward-object](https://www.npmjs.com/package/forward-object): Copy properties from an object to another object, where properties with function values will be… [more](https://www.npmjs.com/package/forward-object) | [homepage](https://github.com/doowb/forward-object) -* [mixin-deep](https://www.npmjs.com/package/mixin-deep): Deeply mix the properties of objects into the first object. Like merge-deep, but doesn't clone. | [homepage](https://github.com/jonschlinkert/mixin-deep) -* [mixin-object](https://www.npmjs.com/package/mixin-object): Mixin the own and inherited properties of other objects onto the first object. Pass an… [more](https://www.npmjs.com/package/mixin-object) | [homepage](https://github.com/jonschlinkert/mixin-object) - -## Running tests - -Install dev dependencies: - -```sh -$ npm i -d && npm test -``` - -## Contributing - -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/define-property/issues/new). - -## Author - -**Jon Schlinkert** - -+ [github/jonschlinkert](https://github.com/jonschlinkert) -+ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) - -## License - -Copyright © 2015 Jon Schlinkert -Released under the MIT license. - -*** - -_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on August 31, 2015._ diff --git a/node_modules/static-extend/node_modules/define-property/index.js b/node_modules/static-extend/node_modules/define-property/index.js deleted file mode 100644 index 3e0e5e1..0000000 --- a/node_modules/static-extend/node_modules/define-property/index.js +++ /dev/null @@ -1,31 +0,0 @@ -/*! - * define-property - * - * Copyright (c) 2015, Jon Schlinkert. - * Licensed under the MIT License. - */ - -'use strict'; - -var isDescriptor = require('is-descriptor'); - -module.exports = function defineProperty(obj, prop, val) { - if (typeof obj !== 'object' && typeof obj !== 'function') { - throw new TypeError('expected an object or function.'); - } - - if (typeof prop !== 'string') { - throw new TypeError('expected `prop` to be a string.'); - } - - if (isDescriptor(val) && ('set' in val || 'get' in val)) { - return Object.defineProperty(obj, prop, val); - } - - return Object.defineProperty(obj, prop, { - configurable: true, - enumerable: false, - writable: true, - value: val - }); -}; diff --git a/node_modules/static-extend/node_modules/define-property/package.json b/node_modules/static-extend/node_modules/define-property/package.json deleted file mode 100644 index 43561bf..0000000 --- a/node_modules/static-extend/node_modules/define-property/package.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "name": "define-property", - "description": "Define a non-enumerable property on an object.", - "version": "0.2.5", - "homepage": "https://github.com/jonschlinkert/define-property", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "repository": "jonschlinkert/define-property", - "bugs": { - "url": "https://github.com/jonschlinkert/define-property/issues" - }, - "license": "MIT", - "files": [ - "index.js" - ], - "main": "index.js", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "devDependencies": { - "mocha": "*", - "should": "^7.0.4" - }, - "keywords": [ - "define", - "define-property", - "enumerable", - "key", - "non", - "non-enumerable", - "object", - "prop", - "property", - "value" - ], - "verb": { - "related": { - "list": [ - "mixin-deep", - "mixin-object", - "delegate-object", - "forward-object" - ] - } - }, - "dependencies": { - "is-descriptor": "^0.1.0" - } -} diff --git a/node_modules/static-extend/node_modules/is-accessor-descriptor/LICENSE b/node_modules/static-extend/node_modules/is-accessor-descriptor/LICENSE deleted file mode 100644 index 65f90ac..0000000 --- a/node_modules/static-extend/node_modules/is-accessor-descriptor/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015, 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/static-extend/node_modules/is-accessor-descriptor/README.md b/node_modules/static-extend/node_modules/is-accessor-descriptor/README.md deleted file mode 100644 index 3743fe6..0000000 --- a/node_modules/static-extend/node_modules/is-accessor-descriptor/README.md +++ /dev/null @@ -1,123 +0,0 @@ -# is-accessor-descriptor [![NPM version](https://img.shields.io/npm/v/is-accessor-descriptor.svg)](https://www.npmjs.com/package/is-accessor-descriptor) [![Build Status](https://img.shields.io/travis/jonschlinkert/is-accessor-descriptor.svg)](https://travis-ci.org/jonschlinkert/is-accessor-descriptor) - -> Returns true if a value has the characteristics of a valid JavaScript accessor descriptor. - -- [Install](#install) -- [Usage](#usage) -- [Examples](#examples) -- [API](#api) -- [Related projects](#related-projects) -- [Running tests](#running-tests) -- [Contributing](#contributing) -- [Author](#author) -- [License](#license) - -_(TOC generated by [verb](https://github.com/verbose/verb) using [markdown-toc](https://github.com/jonschlinkert/markdown-toc))_ - -## Install - -Install with [npm](https://www.npmjs.com/): - -```sh -$ npm i is-accessor-descriptor --save -``` - -## Usage - -```js -var isAccessor = require('is-accessor-descriptor'); - -isAccessor({get: function() {}}); -//=> true -``` - -You may also pass an object and property name to check if the property is an accessor: - -```js -isAccessor(foo, 'bar'); -``` - -## Examples - -`false` when not an object - -```js -isAccessor('a') -isAccessor(null) -isAccessor([]) -//=> false -``` - -`true` when the object has valid properties - -and the properties all have the correct JavaScript types: - -```js -isAccessor({get: noop, set: noop}) -isAccessor({get: noop}) -isAccessor({set: noop}) -//=> true -``` - -`false` when the object has invalid properties - -```js -isAccessor({get: noop, set: noop, bar: 'baz'}) -isAccessor({get: noop, writable: true}) -isAccessor({get: noop, value: true}) -//=> false -``` - -`false` when an accessor is not a function - -```js -isAccessor({get: noop, set: 'baz'}) -isAccessor({get: 'foo', set: noop}) -isAccessor({get: 'foo', bar: 'baz'}) -isAccessor({get: 'foo', set: 'baz'}) -//=> false -``` - -`false` when a value is not the correct type - -```js -isAccessor({get: noop, set: noop, enumerable: 'foo'}) -isAccessor({set: noop, configurable: 'foo'}) -isAccessor({get: noop, configurable: 'foo'}) -//=> false -``` - -## Related projects - -* [is-accessor-descriptor](https://www.npmjs.com/package/is-accessor-descriptor): Returns true if a value has the characteristics of a valid JavaScript accessor descriptor. | [homepage](https://github.com/jonschlinkert/is-accessor-descriptor) -* [is-data-descriptor](https://www.npmjs.com/package/is-data-descriptor): Returns true if a value has the characteristics of a valid JavaScript data descriptor. | [homepage](https://github.com/jonschlinkert/is-data-descriptor) -* [is-descriptor](https://www.npmjs.com/package/is-descriptor): Returns true if a value has the characteristics of a valid JavaScript descriptor. Works for… [more](https://www.npmjs.com/package/is-descriptor) | [homepage](https://github.com/jonschlinkert/is-descriptor) -* [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) - -## Running tests - -Install dev dependencies: - -```sh -$ npm i -d && npm test -``` - -## Contributing - -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/is-accessor-descriptor/issues/new). - -## Author - -**Jon Schlinkert** - -* [github/jonschlinkert](https://github.com/jonschlinkert) -* [twitter/jonschlinkert](http://twitter.com/jonschlinkert) - -## License - -Copyright © 2015 [Jon Schlinkert](https://github.com/jonschlinkert) -Released under the MIT license. - -*** - -_This file was generated by [verb](https://github.com/verbose/verb) on December 28, 2015._ \ No newline at end of file diff --git a/node_modules/static-extend/node_modules/is-accessor-descriptor/index.js b/node_modules/static-extend/node_modules/is-accessor-descriptor/index.js deleted file mode 100644 index 2ca4af8..0000000 --- a/node_modules/static-extend/node_modules/is-accessor-descriptor/index.js +++ /dev/null @@ -1,69 +0,0 @@ -/*! - * is-accessor-descriptor - * - * Copyright (c) 2015, Jon Schlinkert. - * Licensed under the MIT License. - */ - -'use strict'; - -var typeOf = require('kind-of'); - -// accessor descriptor properties -var accessor = { - get: 'function', - set: 'function', - configurable: 'boolean', - enumerable: 'boolean' -}; - -function isAccessorDescriptor(obj, prop) { - if (typeof prop === 'string') { - var val = Object.getOwnPropertyDescriptor(obj, prop); - return typeof val !== 'undefined'; - } - - if (typeOf(obj) !== 'object') { - return false; - } - - if (has(obj, 'value') || has(obj, 'writable')) { - return false; - } - - if (!has(obj, 'get') || typeof obj.get !== 'function') { - return false; - } - - // tldr: it's valid to have "set" be undefined - // "set" might be undefined if `Object.getOwnPropertyDescriptor` - // was used to get the value, and only `get` was defined by the user - if (has(obj, 'set') && typeof obj[key] !== 'function' && typeof obj[key] !== 'undefined') { - return false; - } - - for (var key in obj) { - if (!accessor.hasOwnProperty(key)) { - continue; - } - - if (typeOf(obj[key]) === accessor[key]) { - continue; - } - - if (typeof obj[key] !== 'undefined') { - return false; - } - } - return true; -} - -function has(obj, key) { - return {}.hasOwnProperty.call(obj, key); -} - -/** - * Expose `isAccessorDescriptor` - */ - -module.exports = isAccessorDescriptor; diff --git a/node_modules/static-extend/node_modules/is-accessor-descriptor/package.json b/node_modules/static-extend/node_modules/is-accessor-descriptor/package.json deleted file mode 100644 index 0f39c64..0000000 --- a/node_modules/static-extend/node_modules/is-accessor-descriptor/package.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "name": "is-accessor-descriptor", - "description": "Returns true if a value has the characteristics of a valid JavaScript accessor descriptor.", - "version": "0.1.6", - "homepage": "https://github.com/jonschlinkert/is-accessor-descriptor", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "repository": "jonschlinkert/is-accessor-descriptor", - "bugs": { - "url": "https://github.com/jonschlinkert/is-accessor-descriptor/issues" - }, - "license": "MIT", - "files": [ - "index.js" - ], - "main": "index.js", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "dependencies": { - "kind-of": "^3.0.2" - }, - "devDependencies": { - "mocha": "*", - "should": "*" - }, - "keywords": [ - "accessor", - "check", - "data", - "descriptor", - "get", - "getter", - "is", - "keys", - "object", - "properties", - "property", - "set", - "setter", - "type", - "valid", - "value" - ], - "verb": { - "related": { - "list": [ - "is-accessor-descriptor", - "is-data-descriptor", - "is-descriptor", - "isobject" - ] - }, - "plugins": [ - "gulp-format-md" - ], - "layout": "default" - } -} diff --git a/node_modules/static-extend/node_modules/is-data-descriptor/LICENSE b/node_modules/static-extend/node_modules/is-data-descriptor/LICENSE deleted file mode 100644 index 65f90ac..0000000 --- a/node_modules/static-extend/node_modules/is-data-descriptor/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015, 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/static-extend/node_modules/is-data-descriptor/README.md b/node_modules/static-extend/node_modules/is-data-descriptor/README.md deleted file mode 100644 index 41e1643..0000000 --- a/node_modules/static-extend/node_modules/is-data-descriptor/README.md +++ /dev/null @@ -1,128 +0,0 @@ -# is-data-descriptor [![NPM version](https://img.shields.io/npm/v/is-data-descriptor.svg)](https://www.npmjs.com/package/is-data-descriptor) [![Build Status](https://img.shields.io/travis/jonschlinkert/is-data-descriptor.svg)](https://travis-ci.org/jonschlinkert/is-data-descriptor) - -> Returns true if a value has the characteristics of a valid JavaScript data descriptor. - -## Install - -Install with [npm](https://www.npmjs.com/): - -```sh -$ npm i is-data-descriptor --save -``` - -## Usage - -```js -var isDataDesc = require('is-data-descriptor'); -``` - -## Examples - -`true` when the descriptor has valid properties with valid values. - -```js -// `value` can be anything -isDataDesc({value: 'foo'}) -isDataDesc({value: function() {}}) -isDataDesc({value: true}) -//=> true -``` - -`false` when not an object - -```js -isDataDesc('a') -//=> false -isDataDesc(null) -//=> false -isDataDesc([]) -//=> false -``` - -`false` when the object has invalid properties - -```js -isDataDesc({value: 'foo', bar: 'baz'}) -//=> false -isDataDesc({value: 'foo', bar: 'baz'}) -//=> false -isDataDesc({value: 'foo', get: function(){}}) -//=> false -isDataDesc({get: function(){}, value: 'foo'}) -//=> false -``` - -`false` when a value is not the correct type - -```js -isDataDesc({value: 'foo', enumerable: 'foo'}) -//=> false -isDataDesc({value: 'foo', configurable: 'foo'}) -//=> false -isDataDesc({value: 'foo', writable: 'foo'}) -//=> false -``` - -## Valid properties - -The only valid data descriptor properties are the following: - -* `configurable` (required) -* `enumerable` (required) -* `value` (optional) -* `writable` (optional) - -To be a valid data descriptor, either `value` or `writable` must be defined. - -**Invalid properties** - -A descriptor may have additional _invalid_ properties (an error will **not** be thrown). - -```js -var foo = {}; - -Object.defineProperty(foo, 'bar', { - enumerable: true, - whatever: 'blah', // invalid, but doesn't cause an error - get: function() { - return 'baz'; - } -}); - -console.log(foo.bar); -//=> 'baz' -``` - -## Related projects - -* [is-accessor-descriptor](https://www.npmjs.com/package/is-accessor-descriptor): Returns true if a value has the characteristics of a valid JavaScript accessor descriptor. | [homepage](https://github.com/jonschlinkert/is-accessor-descriptor) -* [is-descriptor](https://www.npmjs.com/package/is-descriptor): Returns true if a value has the characteristics of a valid JavaScript descriptor. Works for… [more](https://www.npmjs.com/package/is-descriptor) | [homepage](https://github.com/jonschlinkert/is-descriptor) -* [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) - -## Running tests - -Install dev dependencies: - -```sh -$ npm i -d && npm test -``` - -## Contributing - -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/is-data-descriptor/issues/new). - -## Author - -**Jon Schlinkert** - -* [github/jonschlinkert](https://github.com/jonschlinkert) -* [twitter/jonschlinkert](http://twitter.com/jonschlinkert) - -## License - -Copyright © 2015 [Jon Schlinkert](https://github.com/jonschlinkert) -Released under the MIT license. - -*** - -_This file was generated by [verb](https://github.com/verbose/verb) on December 28, 2015._ \ No newline at end of file diff --git a/node_modules/static-extend/node_modules/is-data-descriptor/index.js b/node_modules/static-extend/node_modules/is-data-descriptor/index.js deleted file mode 100644 index d4d09c9..0000000 --- a/node_modules/static-extend/node_modules/is-data-descriptor/index.js +++ /dev/null @@ -1,55 +0,0 @@ -/*! - * is-data-descriptor - * - * Copyright (c) 2015, Jon Schlinkert. - * Licensed under the MIT License. - */ - -'use strict'; - -var typeOf = require('kind-of'); - -// data descriptor properties -var data = { - configurable: 'boolean', - enumerable: 'boolean', - writable: 'boolean' -}; - -function isDataDescriptor(obj, prop) { - if (typeOf(obj) !== 'object') { - return false; - } - - if (typeof prop === 'string') { - var val = Object.getOwnPropertyDescriptor(obj, prop); - return typeof val !== 'undefined'; - } - - if (!('value' in obj) && !('writable' in obj)) { - return false; - } - - for (var key in obj) { - if (key === 'value') continue; - - if (!data.hasOwnProperty(key)) { - continue; - } - - if (typeOf(obj[key]) === data[key]) { - continue; - } - - if (typeof obj[key] !== 'undefined') { - return false; - } - } - return true; -} - -/** - * Expose `isDataDescriptor` - */ - -module.exports = isDataDescriptor; diff --git a/node_modules/static-extend/node_modules/is-data-descriptor/package.json b/node_modules/static-extend/node_modules/is-data-descriptor/package.json deleted file mode 100644 index 5fb294b..0000000 --- a/node_modules/static-extend/node_modules/is-data-descriptor/package.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "name": "is-data-descriptor", - "description": "Returns true if a value has the characteristics of a valid JavaScript data descriptor.", - "version": "0.1.4", - "homepage": "https://github.com/jonschlinkert/is-data-descriptor", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "repository": "jonschlinkert/is-data-descriptor", - "bugs": { - "url": "https://github.com/jonschlinkert/is-data-descriptor/issues" - }, - "license": "MIT", - "files": [ - "index.js" - ], - "main": "index.js", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "dependencies": { - "kind-of": "^3.0.2" - }, - "devDependencies": { - "mocha": "*", - "should": "*" - }, - "keywords": [ - "accessor", - "check", - "data", - "descriptor", - "get", - "getter", - "is", - "keys", - "object", - "properties", - "property", - "set", - "setter", - "type", - "valid", - "value" - ], - "verb": { - "related": { - "list": [ - "is-accessor-descriptor", - "is-data-descriptor", - "is-descriptor", - "isobject" - ] - }, - "plugins": [ - "gulp-format-md" - ] - } -} diff --git a/node_modules/static-extend/node_modules/is-descriptor/LICENSE b/node_modules/static-extend/node_modules/is-descriptor/LICENSE deleted file mode 100644 index c0d7f13..0000000 --- a/node_modules/static-extend/node_modules/is-descriptor/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015-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. \ No newline at end of file diff --git a/node_modules/static-extend/node_modules/is-descriptor/README.md b/node_modules/static-extend/node_modules/is-descriptor/README.md deleted file mode 100644 index 658e533..0000000 --- a/node_modules/static-extend/node_modules/is-descriptor/README.md +++ /dev/null @@ -1,193 +0,0 @@ -# is-descriptor [![NPM version](https://img.shields.io/npm/v/is-descriptor.svg?style=flat)](https://www.npmjs.com/package/is-descriptor) [![NPM monthly downloads](https://img.shields.io/npm/dm/is-descriptor.svg?style=flat)](https://npmjs.org/package/is-descriptor) [![NPM total downloads](https://img.shields.io/npm/dt/is-descriptor.svg?style=flat)](https://npmjs.org/package/is-descriptor) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/is-descriptor.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/is-descriptor) - -> Returns true if a value has the characteristics of a valid JavaScript descriptor. Works for data descriptors and accessor descriptors. - -## Install - -Install with [npm](https://www.npmjs.com/): - -```sh -$ npm install --save is-descriptor -``` - -## Usage - -```js -var isDescriptor = require('is-descriptor'); - -isDescriptor({value: 'foo'}) -//=> true -isDescriptor({get: function(){}, set: function(){}}) -//=> true -isDescriptor({get: 'foo', set: function(){}}) -//=> false -``` - -You may also check for a descriptor by passing an object as the first argument and property name (`string`) as the second argument. - -```js -var obj = {}; -obj.foo = 'abc'; - -Object.defineProperty(obj, 'bar', { - value: 'xyz' -}); - -isDescriptor(obj, 'foo'); -//=> true -isDescriptor(obj, 'bar'); -//=> true -``` - -## Examples - -### value type - -`false` when not an object - -```js -isDescriptor('a'); -//=> false -isDescriptor(null); -//=> false -isDescriptor([]); -//=> false -``` - -### data descriptor - -`true` when the object has valid properties with valid values. - -```js -isDescriptor({value: 'foo'}); -//=> true -isDescriptor({value: noop}); -//=> true -``` - -`false` when the object has invalid properties - -```js -isDescriptor({value: 'foo', bar: 'baz'}); -//=> false -isDescriptor({value: 'foo', bar: 'baz'}); -//=> false -isDescriptor({value: 'foo', get: noop}); -//=> false -isDescriptor({get: noop, value: noop}); -//=> false -``` - -`false` when a value is not the correct type - -```js -isDescriptor({value: 'foo', enumerable: 'foo'}); -//=> false -isDescriptor({value: 'foo', configurable: 'foo'}); -//=> false -isDescriptor({value: 'foo', writable: 'foo'}); -//=> false -``` - -### accessor descriptor - -`true` when the object has valid properties with valid values. - -```js -isDescriptor({get: noop, set: noop}); -//=> true -isDescriptor({get: noop}); -//=> true -isDescriptor({set: noop}); -//=> true -``` - -`false` when the object has invalid properties - -```js -isDescriptor({get: noop, set: noop, bar: 'baz'}); -//=> false -isDescriptor({get: noop, writable: true}); -//=> false -isDescriptor({get: noop, value: true}); -//=> false -``` - -`false` when an accessor is not a function - -```js -isDescriptor({get: noop, set: 'baz'}); -//=> false -isDescriptor({get: 'foo', set: noop}); -//=> false -isDescriptor({get: 'foo', bar: 'baz'}); -//=> false -isDescriptor({get: 'foo', set: 'baz'}); -//=> false -``` - -`false` when a value is not the correct type - -```js -isDescriptor({get: noop, set: noop, enumerable: 'foo'}); -//=> false -isDescriptor({set: noop, configurable: 'foo'}); -//=> false -isDescriptor({get: noop, configurable: 'foo'}); -//=> false -``` - -## About - -### Related projects - -* [is-accessor-descriptor](https://www.npmjs.com/package/is-accessor-descriptor): Returns true if a value has the characteristics of a valid JavaScript accessor descriptor. | [homepage](https://github.com/jonschlinkert/is-accessor-descriptor "Returns true if a value has the characteristics of a valid JavaScript accessor descriptor.") -* [is-data-descriptor](https://www.npmjs.com/package/is-data-descriptor): Returns true if a value has the characteristics of a valid JavaScript data descriptor. | [homepage](https://github.com/jonschlinkert/is-data-descriptor "Returns true if a value has the characteristics of a valid JavaScript data descriptor.") -* [is-descriptor](https://www.npmjs.com/package/is-descriptor): Returns true if a value has the characteristics of a valid JavaScript descriptor. Works for… [more](https://github.com/jonschlinkert/is-descriptor) | [homepage](https://github.com/jonschlinkert/is-descriptor "Returns true if a value has the characteristics of a valid JavaScript descriptor. Works for data descriptors and accessor descriptors.") -* [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.") - -### Contributing - -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). - -### Contributors - -| **Commits** | **Contributor** | -| --- | --- | -| 24 | [jonschlinkert](https://github.com/jonschlinkert) | -| 1 | [doowb](https://github.com/doowb) | -| 1 | [wtgtybhertgeghgtwtg](https://github.com/wtgtybhertgeghgtwtg) | - -### 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 -``` - -### 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 -``` - -### Author - -**Jon Schlinkert** - -* [github/jonschlinkert](https://github.com/jonschlinkert) -* [twitter/jonschlinkert](https://twitter.com/jonschlinkert) - -### License - -Copyright © 2017, [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 July 22, 2017._ \ No newline at end of file diff --git a/node_modules/static-extend/node_modules/is-descriptor/index.js b/node_modules/static-extend/node_modules/is-descriptor/index.js deleted file mode 100644 index c9b91d7..0000000 --- a/node_modules/static-extend/node_modules/is-descriptor/index.js +++ /dev/null @@ -1,22 +0,0 @@ -/*! - * is-descriptor - * - * Copyright (c) 2015-2017, Jon Schlinkert. - * Released under the MIT License. - */ - -'use strict'; - -var typeOf = require('kind-of'); -var isAccessor = require('is-accessor-descriptor'); -var isData = require('is-data-descriptor'); - -module.exports = function isDescriptor(obj, key) { - if (typeOf(obj) !== 'object') { - return false; - } - if ('get' in obj) { - return isAccessor(obj, key); - } - return isData(obj, key); -}; diff --git a/node_modules/static-extend/node_modules/is-descriptor/node_modules/kind-of/LICENSE b/node_modules/static-extend/node_modules/is-descriptor/node_modules/kind-of/LICENSE deleted file mode 100644 index 3f2eca1..0000000 --- a/node_modules/static-extend/node_modules/is-descriptor/node_modules/kind-of/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -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/static-extend/node_modules/is-descriptor/node_modules/kind-of/README.md b/node_modules/static-extend/node_modules/is-descriptor/node_modules/kind-of/README.md deleted file mode 100644 index 170bf30..0000000 --- a/node_modules/static-extend/node_modules/is-descriptor/node_modules/kind-of/README.md +++ /dev/null @@ -1,342 +0,0 @@ -# kind-of [![NPM version](https://img.shields.io/npm/v/kind-of.svg?style=flat)](https://www.npmjs.com/package/kind-of) [![NPM monthly downloads](https://img.shields.io/npm/dm/kind-of.svg?style=flat)](https://npmjs.org/package/kind-of) [![NPM total downloads](https://img.shields.io/npm/dt/kind-of.svg?style=flat)](https://npmjs.org/package/kind-of) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/kind-of.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/kind-of) - -> Get the native type of a value. - -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 kind-of -``` - -Install with [bower](https://bower.io/) - -```sh -$ bower install kind-of --save -``` - -## Why use this? - -1. [it's fast](#benchmarks) | [optimizations](#optimizations) -2. [better type checking](#better-type-checking) - -## Usage - -> es5, browser and es6 ready - -```js -var kindOf = require('kind-of'); - -kindOf(undefined); -//=> 'undefined' - -kindOf(null); -//=> 'null' - -kindOf(true); -//=> 'boolean' - -kindOf(false); -//=> 'boolean' - -kindOf(new Boolean(true)); -//=> 'boolean' - -kindOf(new Buffer('')); -//=> 'buffer' - -kindOf(42); -//=> 'number' - -kindOf(new Number(42)); -//=> 'number' - -kindOf('str'); -//=> 'string' - -kindOf(new String('str')); -//=> 'string' - -kindOf(arguments); -//=> 'arguments' - -kindOf({}); -//=> 'object' - -kindOf(Object.create(null)); -//=> 'object' - -kindOf(new Test()); -//=> 'object' - -kindOf(new Date()); -//=> 'date' - -kindOf([]); -//=> 'array' - -kindOf([1, 2, 3]); -//=> 'array' - -kindOf(new Array()); -//=> 'array' - -kindOf(/foo/); -//=> 'regexp' - -kindOf(new RegExp('foo')); -//=> 'regexp' - -kindOf(function () {}); -//=> 'function' - -kindOf(function * () {}); -//=> 'function' - -kindOf(new Function()); -//=> 'function' - -kindOf(new Map()); -//=> 'map' - -kindOf(new WeakMap()); -//=> 'weakmap' - -kindOf(new Set()); -//=> 'set' - -kindOf(new WeakSet()); -//=> 'weakset' - -kindOf(Symbol('str')); -//=> 'symbol' - -kindOf(new Int8Array()); -//=> 'int8array' - -kindOf(new Uint8Array()); -//=> 'uint8array' - -kindOf(new Uint8ClampedArray()); -//=> 'uint8clampedarray' - -kindOf(new Int16Array()); -//=> 'int16array' - -kindOf(new Uint16Array()); -//=> 'uint16array' - -kindOf(new Int32Array()); -//=> 'int32array' - -kindOf(new Uint32Array()); -//=> 'uint32array' - -kindOf(new Float32Array()); -//=> 'float32array' - -kindOf(new Float64Array()); -//=> 'float64array' -``` - -## Release history - -### v4.0.0 - -**Added** - -* `promise` support - -### v5.0.0 - -**Added** - -* `Set Iterator` and `Map Iterator` support - -**Fixed** - -* Now returns `generatorfunction` for generator functions - -## Benchmarks - -Benchmarked against [typeof](http://github.com/CodingFu/typeof) and [type-of](https://github.com/ForbesLindesay/type-of). -Note that performaces is slower for es6 features `Map`, `WeakMap`, `Set` and `WeakSet`. - -```bash -#1: array - current x 23,329,397 ops/sec ±0.82% (94 runs sampled) - lib-type-of x 4,170,273 ops/sec ±0.55% (94 runs sampled) - lib-typeof x 9,686,935 ops/sec ±0.59% (98 runs sampled) - -#2: boolean - current x 27,197,115 ops/sec ±0.85% (94 runs sampled) - lib-type-of x 3,145,791 ops/sec ±0.73% (97 runs sampled) - lib-typeof x 9,199,562 ops/sec ±0.44% (99 runs sampled) - -#3: date - current x 20,190,117 ops/sec ±0.86% (92 runs sampled) - lib-type-of x 5,166,970 ops/sec ±0.74% (94 runs sampled) - lib-typeof x 9,610,821 ops/sec ±0.50% (96 runs sampled) - -#4: function - current x 23,855,460 ops/sec ±0.60% (97 runs sampled) - lib-type-of x 5,667,740 ops/sec ±0.54% (100 runs sampled) - lib-typeof x 10,010,644 ops/sec ±0.44% (100 runs sampled) - -#5: null - current x 27,061,047 ops/sec ±0.97% (96 runs sampled) - lib-type-of x 13,965,573 ops/sec ±0.62% (97 runs sampled) - lib-typeof x 8,460,194 ops/sec ±0.61% (97 runs sampled) - -#6: number - current x 25,075,682 ops/sec ±0.53% (99 runs sampled) - lib-type-of x 2,266,405 ops/sec ±0.41% (98 runs sampled) - lib-typeof x 9,821,481 ops/sec ±0.45% (99 runs sampled) - -#7: object - current x 3,348,980 ops/sec ±0.49% (99 runs sampled) - lib-type-of x 3,245,138 ops/sec ±0.60% (94 runs sampled) - lib-typeof x 9,262,952 ops/sec ±0.59% (99 runs sampled) - -#8: regex - current x 21,284,827 ops/sec ±0.72% (96 runs sampled) - lib-type-of x 4,689,241 ops/sec ±0.43% (100 runs sampled) - lib-typeof x 8,957,593 ops/sec ±0.62% (98 runs sampled) - -#9: string - current x 25,379,234 ops/sec ±0.58% (96 runs sampled) - lib-type-of x 3,635,148 ops/sec ±0.76% (93 runs sampled) - lib-typeof x 9,494,134 ops/sec ±0.49% (98 runs sampled) - -#10: undef - current x 27,459,221 ops/sec ±1.01% (93 runs sampled) - lib-type-of x 14,360,433 ops/sec ±0.52% (99 runs sampled) - lib-typeof x 23,202,868 ops/sec ±0.59% (94 runs sampled) - -``` - -## Optimizations - -In 7 out of 8 cases, this library is 2x-10x faster than other top libraries included in the benchmarks. There are a few things that lead to this performance advantage, none of them hard and fast rules, but all of them simple and repeatable in almost any code library: - -1. Optimize around the fastest and most common use cases first. Of course, this will change from project-to-project, but I took some time to understand how and why `typeof` checks were being used in my own libraries and other libraries I use a lot. -2. Optimize around bottlenecks - In other words, the order in which conditionals are implemented is significant, because each check is only as fast as the failing checks that came before it. Here, the biggest bottleneck by far is checking for plain objects (an object that was created by the `Object` constructor). I opted to make this check happen by process of elimination rather than brute force up front (e.g. by using something like `val.constructor.name`), so that every other type check would not be penalized it. -3. Don't do uneccessary processing - why do `.slice(8, -1).toLowerCase();` just to get the word `regex`? It's much faster to do `if (type === '[object RegExp]') return 'regex'` -4. There is no reason to make the code in a microlib as terse as possible, just to win points for making it shorter. It's always better to favor performant code over terse code. You will always only be using a single `require()` statement to use the library anyway, regardless of how the code is written. - -## Better type checking - -kind-of is more correct than other type checking libs I've looked at. For example, here are some differing results from other popular libs: - -### [typeof](https://github.com/CodingFu/typeof) lib - -Incorrectly tests instances of custom constructors (pretty common): - -```js -var typeOf = require('typeof'); -function Test() {} -console.log(typeOf(new Test())); -//=> 'test' -``` - -Returns `object` instead of `arguments`: - -```js -function foo() { - console.log(typeOf(arguments)) //=> 'object' -} -foo(); -``` - -### [type-of](https://github.com/ForbesLindesay/type-of) lib - -Incorrectly returns `object` for generator functions, buffers, `Map`, `Set`, `WeakMap` and `WeakSet`: - -```js -function * foo() {} -console.log(typeOf(foo)); -//=> 'object' -console.log(typeOf(new Buffer(''))); -//=> 'object' -console.log(typeOf(new Map())); -//=> 'object' -console.log(typeOf(new Set())); -//=> 'object' -console.log(typeOf(new WeakMap())); -//=> 'object' -console.log(typeOf(new WeakSet())); -//=> 'object' -``` - -## 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-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") -* [is-number](https://www.npmjs.com/package/is-number): Returns true if the value is a number. comprehensive tests. | [homepage](https://github.com/jonschlinkert/is-number "Returns true if the value is a number. comprehensive tests.") -* [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. ") - -### Contributors - -| **Commits** | **Contributor** | -| --- | --- | -| 82 | [jonschlinkert](https://github.com/jonschlinkert) | -| 3 | [aretecode](https://github.com/aretecode) | -| 2 | [miguelmota](https://github.com/miguelmota) | -| 1 | [dtothefp](https://github.com/dtothefp) | -| 1 | [ksheedlo](https://github.com/ksheedlo) | -| 1 | [pdehaan](https://github.com/pdehaan) | -| 1 | [laggingreflex](https://github.com/laggingreflex) | -| 1 | [charlike](https://github.com/charlike) | - -### Author - -**Jon Schlinkert** - -* [github/jonschlinkert](https://github.com/jonschlinkert) -* [twitter/jonschlinkert](https://twitter.com/jonschlinkert) - -### License - -Copyright © 2017, [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 October 13, 2017._ \ No newline at end of file diff --git a/node_modules/static-extend/node_modules/is-descriptor/node_modules/kind-of/index.js b/node_modules/static-extend/node_modules/is-descriptor/node_modules/kind-of/index.js deleted file mode 100644 index fc5cde9..0000000 --- a/node_modules/static-extend/node_modules/is-descriptor/node_modules/kind-of/index.js +++ /dev/null @@ -1,147 +0,0 @@ -var toString = Object.prototype.toString; - -/** - * Get the native `typeof` a value. - * - * @param {*} `val` - * @return {*} Native javascript type - */ - -module.exports = function kindOf(val) { - var type = typeof val; - - // primitivies - if (type === 'undefined') { - return 'undefined'; - } - if (val === null) { - return 'null'; - } - if (val === true || val === false || val instanceof Boolean) { - return 'boolean'; - } - if (type === 'string' || val instanceof String) { - return 'string'; - } - if (type === 'number' || val instanceof Number) { - return 'number'; - } - - // functions - if (type === 'function' || val instanceof Function) { - if (typeof val.constructor.name !== 'undefined' && val.constructor.name.slice(0, 9) === 'Generator') { - return 'generatorfunction'; - } - return 'function'; - } - - // array - if (typeof Array.isArray !== 'undefined' && Array.isArray(val)) { - return 'array'; - } - - // check for instances of RegExp and Date before calling `toString` - if (val instanceof RegExp) { - return 'regexp'; - } - if (val instanceof Date) { - return 'date'; - } - - // other objects - type = toString.call(val); - - if (type === '[object RegExp]') { - return 'regexp'; - } - if (type === '[object Date]') { - return 'date'; - } - if (type === '[object Arguments]') { - return 'arguments'; - } - if (type === '[object Error]') { - return 'error'; - } - if (type === '[object Promise]') { - return 'promise'; - } - - // buffer - if (isBuffer(val)) { - return 'buffer'; - } - - // es6: Map, WeakMap, Set, WeakSet - if (type === '[object Set]') { - return 'set'; - } - if (type === '[object WeakSet]') { - return 'weakset'; - } - if (type === '[object Map]') { - return 'map'; - } - if (type === '[object WeakMap]') { - return 'weakmap'; - } - if (type === '[object Symbol]') { - return 'symbol'; - } - - if (type === '[object Map Iterator]') { - return 'mapiterator'; - } - if (type === '[object Set Iterator]') { - return 'setiterator'; - } - if (type === '[object String Iterator]') { - return 'stringiterator'; - } - if (type === '[object Array Iterator]') { - return 'arrayiterator'; - } - - // typed arrays - if (type === '[object Int8Array]') { - return 'int8array'; - } - if (type === '[object Uint8Array]') { - return 'uint8array'; - } - if (type === '[object Uint8ClampedArray]') { - return 'uint8clampedarray'; - } - if (type === '[object Int16Array]') { - return 'int16array'; - } - if (type === '[object Uint16Array]') { - return 'uint16array'; - } - if (type === '[object Int32Array]') { - return 'int32array'; - } - if (type === '[object Uint32Array]') { - return 'uint32array'; - } - if (type === '[object Float32Array]') { - return 'float32array'; - } - if (type === '[object Float64Array]') { - return 'float64array'; - } - - // must be a plain object - return 'object'; -}; - -/** - * If you need to support Safari 5-7 (8-10 yr-old browser), - * take a look at https://github.com/feross/is-buffer - */ - -function isBuffer(val) { - return val.constructor - && typeof val.constructor.isBuffer === 'function' - && val.constructor.isBuffer(val); -} diff --git a/node_modules/static-extend/node_modules/is-descriptor/node_modules/kind-of/package.json b/node_modules/static-extend/node_modules/is-descriptor/node_modules/kind-of/package.json deleted file mode 100644 index 334235f..0000000 --- a/node_modules/static-extend/node_modules/is-descriptor/node_modules/kind-of/package.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "name": "kind-of", - "description": "Get the native type of a value.", - "version": "5.1.0", - "homepage": "https://github.com/jonschlinkert/kind-of", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "contributors": [ - "David Fox-Powell (https://dtothefp.github.io/me)", - "James (https://twitter.com/aretecode)", - "Jon Schlinkert (http://twitter.com/jonschlinkert)", - "Ken Sheedlo (kensheedlo.com)", - "laggingreflex (https://github.com/laggingreflex)", - "Miguel Mota (https://miguelmota.com)", - "Peter deHaan (http://about.me/peterdehaan)", - "tunnckoCore (https://i.am.charlike.online)" - ], - "repository": "jonschlinkert/kind-of", - "bugs": { - "url": "https://github.com/jonschlinkert/kind-of/issues" - }, - "license": "MIT", - "files": [ - "index.js" - ], - "main": "index.js", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha", - "prepublish": "browserify -o browser.js -e index.js -s index --bare" - }, - "devDependencies": { - "ansi-bold": "^0.1.1", - "benchmarked": "^1.1.1", - "browserify": "^14.4.0", - "gulp-format-md": "^0.1.12", - "matched": "^0.4.4", - "mocha": "^3.4.2", - "type-of": "^2.0.1", - "typeof": "^1.0.0" - }, - "keywords": [ - "arguments", - "array", - "boolean", - "check", - "date", - "function", - "is", - "is-type", - "is-type-of", - "kind", - "kind-of", - "number", - "object", - "of", - "regexp", - "string", - "test", - "type", - "type-of", - "typeof", - "types" - ], - "verb": { - "related": { - "list": [ - "is-glob", - "is-number", - "is-primitive" - ] - }, - "toc": false, - "layout": "default", - "tasks": [ - "readme" - ], - "plugins": [ - "gulp-format-md" - ], - "lint": { - "reflinks": true - }, - "reflinks": [ - "type-of", - "typeof", - "verb" - ] - } -} diff --git a/node_modules/static-extend/node_modules/is-descriptor/package.json b/node_modules/static-extend/node_modules/is-descriptor/package.json deleted file mode 100644 index a561bfe..0000000 --- a/node_modules/static-extend/node_modules/is-descriptor/package.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "name": "is-descriptor", - "description": "Returns true if a value has the characteristics of a valid JavaScript descriptor. Works for data descriptors and accessor descriptors.", - "version": "0.1.6", - "homepage": "https://github.com/jonschlinkert/is-descriptor", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "contributors": [ - "Brian Woodward (https://twitter.com/doowb)", - "Jon Schlinkert (http://twitter.com/jonschlinkert)", - "(https://github.com/wtgtybhertgeghgtwtg)" - ], - "repository": "jonschlinkert/is-descriptor", - "bugs": { - "url": "https://github.com/jonschlinkert/is-descriptor/issues" - }, - "license": "MIT", - "files": [ - "index.js" - ], - "main": "index.js", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "devDependencies": { - "gulp-format-md": "^1.0.0", - "mocha": "^3.4.2" - }, - "keywords": [ - "accessor", - "check", - "data", - "descriptor", - "get", - "getter", - "is", - "keys", - "object", - "properties", - "property", - "set", - "setter", - "type", - "valid", - "value" - ], - "verb": { - "related": { - "list": [ - "is-accessor-descriptor", - "is-data-descriptor", - "is-descriptor", - "isobject" - ] - }, - "plugins": [ - "gulp-format-md" - ], - "toc": false, - "layout": "default", - "tasks": [ - "readme" - ], - "lint": { - "reflinks": true - } - } -} diff --git a/node_modules/static-extend/package.json b/node_modules/static-extend/package.json deleted file mode 100644 index a63ab95..0000000 --- a/node_modules/static-extend/package.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "name": "static-extend", - "description": "Adds a static `extend` method to a class, to simplify inheritance. Extends the static properties, prototype properties, and descriptors from a `Parent` constructor onto `Child` constructors.", - "version": "0.1.2", - "homepage": "https://github.com/jonschlinkert/static-extend", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "repository": "jonschlinkert/static-extend", - "bugs": { - "url": "https://github.com/jonschlinkert/static-extend/issues" - }, - "license": "MIT", - "files": [ - "index.js" - ], - "main": "index.js", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "devDependencies": { - "gulp-format-md": "^0.1.9", - "mocha": "^2.5.3" - }, - "keywords": [ - "class", - "ctor", - "descriptor", - "extend", - "extends", - "inherit", - "inheritance", - "merge", - "method", - "prop", - "properties", - "property", - "prototype" - ], - "verb": { - "run": true, - "toc": false, - "layout": "default", - "tasks": [ - "readme" - ], - "plugins": [ - "gulp-format-md" - ], - "reflinks": [ - "verb", - "verb-readme-generator" - ], - "lint": { - "reflinks": true - } - } -} diff --git a/node_modules/statuses/HISTORY.md b/node_modules/statuses/HISTORY.md deleted file mode 100644 index a1977b2..0000000 --- a/node_modules/statuses/HISTORY.md +++ /dev/null @@ -1,65 +0,0 @@ -1.5.0 / 2018-03-27 -================== - - * Add `103 Early Hints` - -1.4.0 / 2017-10-20 -================== - - * Add `STATUS_CODES` export - -1.3.1 / 2016-11-11 -================== - - * Fix return type in JSDoc - -1.3.0 / 2016-05-17 -================== - - * Add `421 Misdirected Request` - * perf: enable strict mode - -1.2.1 / 2015-02-01 -================== - - * Fix message for status 451 - - `451 Unavailable For Legal Reasons` - -1.2.0 / 2014-09-28 -================== - - * Add `208 Already Repored` - * Add `226 IM Used` - * Add `306 (Unused)` - * Add `415 Unable For Legal Reasons` - * Add `508 Loop Detected` - -1.1.1 / 2014-09-24 -================== - - * Add missing 308 to `codes.json` - -1.1.0 / 2014-09-21 -================== - - * Add `codes.json` for universal support - -1.0.4 / 2014-08-20 -================== - - * Package cleanup - -1.0.3 / 2014-06-08 -================== - - * Add 308 to `.redirect` category - -1.0.2 / 2014-03-13 -================== - - * Add `.retry` category - -1.0.1 / 2014-03-12 -================== - - * Initial release diff --git a/node_modules/statuses/LICENSE b/node_modules/statuses/LICENSE deleted file mode 100644 index 28a3161..0000000 --- a/node_modules/statuses/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ - -The MIT License (MIT) - -Copyright (c) 2014 Jonathan Ong -Copyright (c) 2016 Douglas Christopher Wilson - -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/statuses/README.md b/node_modules/statuses/README.md deleted file mode 100644 index 0fe5720..0000000 --- a/node_modules/statuses/README.md +++ /dev/null @@ -1,127 +0,0 @@ -# Statuses - -[![NPM Version][npm-image]][npm-url] -[![NPM Downloads][downloads-image]][downloads-url] -[![Node.js Version][node-version-image]][node-version-url] -[![Build Status][travis-image]][travis-url] -[![Test Coverage][coveralls-image]][coveralls-url] - -HTTP status utility for node. - -This module provides a list of status codes and messages sourced from -a few different projects: - - * The [IANA Status Code Registry](https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml) - * The [Node.js project](https://nodejs.org/) - * The [NGINX project](https://www.nginx.com/) - * The [Apache HTTP Server project](https://httpd.apache.org/) - -## Installation - -This is a [Node.js](https://nodejs.org/en/) module available through the -[npm registry](https://www.npmjs.com/). Installation is done using the -[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): - -```sh -$ npm install statuses -``` - -## API - - - -```js -var status = require('statuses') -``` - -### var code = status(Integer || String) - -If `Integer` or `String` is a valid HTTP code or status message, then the -appropriate `code` will be returned. Otherwise, an error will be thrown. - - - -```js -status(403) // => 403 -status('403') // => 403 -status('forbidden') // => 403 -status('Forbidden') // => 403 -status(306) // throws, as it's not supported by node.js -``` - -### status.STATUS_CODES - -Returns an object which maps status codes to status messages, in -the same format as the -[Node.js http module](https://nodejs.org/dist/latest/docs/api/http.html#http_http_status_codes). - -### status.codes - -Returns an array of all the status codes as `Integer`s. - -### var msg = status[code] - -Map of `code` to `status message`. `undefined` for invalid `code`s. - - - -```js -status[404] // => 'Not Found' -``` - -### var code = status[msg] - -Map of `status message` to `code`. `msg` can either be title-cased or -lower-cased. `undefined` for invalid `status message`s. - - - -```js -status['not found'] // => 404 -status['Not Found'] // => 404 -``` - -### status.redirect[code] - -Returns `true` if a status code is a valid redirect status. - - - -```js -status.redirect[200] // => undefined -status.redirect[301] // => true -``` - -### status.empty[code] - -Returns `true` if a status code expects an empty body. - - - -```js -status.empty[200] // => undefined -status.empty[204] // => true -status.empty[304] // => true -``` - -### status.retry[code] - -Returns `true` if you should retry the rest. - - - -```js -status.retry[501] // => undefined -status.retry[503] // => true -``` - -[npm-image]: https://img.shields.io/npm/v/statuses.svg -[npm-url]: https://npmjs.org/package/statuses -[node-version-image]: https://img.shields.io/node/v/statuses.svg -[node-version-url]: https://nodejs.org/en/download -[travis-image]: https://img.shields.io/travis/jshttp/statuses.svg -[travis-url]: https://travis-ci.org/jshttp/statuses -[coveralls-image]: https://img.shields.io/coveralls/jshttp/statuses.svg -[coveralls-url]: https://coveralls.io/r/jshttp/statuses?branch=master -[downloads-image]: https://img.shields.io/npm/dm/statuses.svg -[downloads-url]: https://npmjs.org/package/statuses diff --git a/node_modules/statuses/codes.json b/node_modules/statuses/codes.json deleted file mode 100644 index a09283a..0000000 --- a/node_modules/statuses/codes.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "100": "Continue", - "101": "Switching Protocols", - "102": "Processing", - "103": "Early Hints", - "200": "OK", - "201": "Created", - "202": "Accepted", - "203": "Non-Authoritative Information", - "204": "No Content", - "205": "Reset Content", - "206": "Partial Content", - "207": "Multi-Status", - "208": "Already Reported", - "226": "IM Used", - "300": "Multiple Choices", - "301": "Moved Permanently", - "302": "Found", - "303": "See Other", - "304": "Not Modified", - "305": "Use Proxy", - "306": "(Unused)", - "307": "Temporary Redirect", - "308": "Permanent Redirect", - "400": "Bad Request", - "401": "Unauthorized", - "402": "Payment Required", - "403": "Forbidden", - "404": "Not Found", - "405": "Method Not Allowed", - "406": "Not Acceptable", - "407": "Proxy Authentication Required", - "408": "Request Timeout", - "409": "Conflict", - "410": "Gone", - "411": "Length Required", - "412": "Precondition Failed", - "413": "Payload Too Large", - "414": "URI Too Long", - "415": "Unsupported Media Type", - "416": "Range Not Satisfiable", - "417": "Expectation Failed", - "418": "I'm a teapot", - "421": "Misdirected Request", - "422": "Unprocessable Entity", - "423": "Locked", - "424": "Failed Dependency", - "425": "Unordered Collection", - "426": "Upgrade Required", - "428": "Precondition Required", - "429": "Too Many Requests", - "431": "Request Header Fields Too Large", - "451": "Unavailable For Legal Reasons", - "500": "Internal Server Error", - "501": "Not Implemented", - "502": "Bad Gateway", - "503": "Service Unavailable", - "504": "Gateway Timeout", - "505": "HTTP Version Not Supported", - "506": "Variant Also Negotiates", - "507": "Insufficient Storage", - "508": "Loop Detected", - "509": "Bandwidth Limit Exceeded", - "510": "Not Extended", - "511": "Network Authentication Required" -} diff --git a/node_modules/statuses/index.js b/node_modules/statuses/index.js deleted file mode 100644 index 4df469a..0000000 --- a/node_modules/statuses/index.js +++ /dev/null @@ -1,113 +0,0 @@ -/*! - * statuses - * Copyright(c) 2014 Jonathan Ong - * Copyright(c) 2016 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict' - -/** - * Module dependencies. - * @private - */ - -var codes = require('./codes.json') - -/** - * Module exports. - * @public - */ - -module.exports = status - -// status code to message map -status.STATUS_CODES = codes - -// array of status codes -status.codes = populateStatusesMap(status, codes) - -// status codes for redirects -status.redirect = { - 300: true, - 301: true, - 302: true, - 303: true, - 305: true, - 307: true, - 308: true -} - -// status codes for empty bodies -status.empty = { - 204: true, - 205: true, - 304: true -} - -// status codes for when you should retry the request -status.retry = { - 502: true, - 503: true, - 504: true -} - -/** - * Populate the statuses map for given codes. - * @private - */ - -function populateStatusesMap (statuses, codes) { - var arr = [] - - Object.keys(codes).forEach(function forEachCode (code) { - var message = codes[code] - var status = Number(code) - - // Populate properties - statuses[status] = message - statuses[message] = status - statuses[message.toLowerCase()] = status - - // Add to array - arr.push(status) - }) - - return arr -} - -/** - * Get the status code. - * - * Given a number, this will throw if it is not a known status - * code, otherwise the code will be returned. Given a string, - * the string will be parsed for a number and return the code - * if valid, otherwise will lookup the code assuming this is - * the status message. - * - * @param {string|number} code - * @returns {number} - * @public - */ - -function status (code) { - if (typeof code === 'number') { - if (!status[code]) throw new Error('invalid status code: ' + code) - return code - } - - if (typeof code !== 'string') { - throw new TypeError('code must be a number or string') - } - - // '403' - var n = parseInt(code, 10) - if (!isNaN(n)) { - if (!status[n]) throw new Error('invalid status code: ' + n) - return n - } - - n = status[code.toLowerCase()] - if (!n) throw new Error('invalid status message: "' + code + '"') - return n -} diff --git a/node_modules/statuses/package.json b/node_modules/statuses/package.json deleted file mode 100644 index 7595e2b..0000000 --- a/node_modules/statuses/package.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "name": "statuses", - "description": "HTTP status utility", - "version": "1.5.0", - "contributors": [ - "Douglas Christopher Wilson ", - "Jonathan Ong (http://jongleberry.com)" - ], - "repository": "jshttp/statuses", - "license": "MIT", - "keywords": [ - "http", - "status", - "code" - ], - "files": [ - "HISTORY.md", - "index.js", - "codes.json", - "LICENSE" - ], - "devDependencies": { - "csv-parse": "1.2.4", - "eslint": "4.19.1", - "eslint-config-standard": "11.0.0", - "eslint-plugin-import": "2.9.0", - "eslint-plugin-markdown": "1.0.0-beta.6", - "eslint-plugin-node": "6.0.1", - "eslint-plugin-promise": "3.7.0", - "eslint-plugin-standard": "3.0.1", - "istanbul": "0.4.5", - "mocha": "1.21.5", - "raw-body": "2.3.2", - "stream-to-array": "2.3.0" - }, - "engines": { - "node": ">= 0.6" - }, - "scripts": { - "build": "node scripts/build.js", - "fetch": "node scripts/fetch-apache.js && node scripts/fetch-iana.js && node scripts/fetch-nginx.js && node scripts/fetch-node.js", - "lint": "eslint --plugin markdown --ext js,md .", - "test": "mocha --reporter spec --check-leaks --bail test/", - "test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/", - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/", - "update": "npm run fetch && npm run build" - } -} diff --git a/node_modules/stream-combiner/.npmignore b/node_modules/stream-combiner/.npmignore deleted file mode 100644 index 13abef4..0000000 --- a/node_modules/stream-combiner/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules -node_modules/* -npm_debug.log diff --git a/node_modules/stream-combiner/.travis.yml b/node_modules/stream-combiner/.travis.yml deleted file mode 100644 index 895dbd3..0000000 --- a/node_modules/stream-combiner/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - 0.6 - - 0.8 diff --git a/node_modules/stream-combiner/LICENSE b/node_modules/stream-combiner/LICENSE deleted file mode 100644 index 6d03581..0000000 --- a/node_modules/stream-combiner/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2012 'Dominic Tarr' - -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/stream-combiner/README.md b/node_modules/stream-combiner/README.md deleted file mode 100644 index 565e0e2..0000000 --- a/node_modules/stream-combiner/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# stream-combiner - - - -## Combine (stream1,...,streamN) - -Turn a pipeline into a single stream. `pipeline` returns a stream that writes to the first stream -and reads from the last stream. - -Listening for 'error' will recieve errors from all streams inside the pipe. - -``` js - var Combine = require('stream-combiner') - var es = require('event-stream') - - Combine( //connect streams together with `pipe` - process.openStdin(), //open stdin - es.split(), //split stream to break on newlines - es.map(function (data, callback) {//turn this async function into a stream - callback(null - , inspect(JSON.parse(data))) //render it nicely - }), - process.stdout // pipe it to stdout ! - ) -``` - -## License - -MIT diff --git a/node_modules/stream-combiner/index.js b/node_modules/stream-combiner/index.js deleted file mode 100644 index 99cf5b6..0000000 --- a/node_modules/stream-combiner/index.js +++ /dev/null @@ -1,39 +0,0 @@ -var duplexer = require('duplexer') - -module.exports = function () { - - var streams = [].slice.call(arguments) - , first = streams[0] - , last = streams[streams.length - 1] - , thepipe = duplexer(first, last) - - if(streams.length == 1) - return streams[0] - else if (!streams.length) - throw new Error('connect called with empty args') - - //pipe all the streams together - - function recurse (streams) { - if(streams.length < 2) - return - streams[0].pipe(streams[1]) - recurse(streams.slice(1)) - } - - recurse(streams) - - function onerror () { - var args = [].slice.call(arguments) - args.unshift('error') - thepipe.emit.apply(thepipe, args) - } - - //es.duplex already reemits the error from the first and last stream. - //add a listener for the inner streams in the pipeline. - for(var i = 1; i < streams.length - 1; i ++) - streams[i].on('error', onerror) - - return thepipe -} - diff --git a/node_modules/stream-combiner/package.json b/node_modules/stream-combiner/package.json deleted file mode 100644 index c0e9845..0000000 --- a/node_modules/stream-combiner/package.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "stream-combiner", - "version": "0.0.4", - "homepage": "https://github.com/dominictarr/stream-combiner", - "repository": { - "type": "git", - "url": "git://github.com/dominictarr/stream-combiner.git" - }, - "dependencies": { - "duplexer": "~0.1.1" - }, - "devDependencies": { - "tape": "~2.3.0", - "event-stream": "~3.0.7" - }, - "scripts": { - "test": "set -e; for t in test/*.js; do node $t; done" - }, - "author": "'Dominic Tarr' (http://dominictarr.com)", - "license": "MIT" -} diff --git a/node_modules/stream-combiner/test/index.js b/node_modules/stream-combiner/test/index.js deleted file mode 100644 index d17ddad..0000000 --- a/node_modules/stream-combiner/test/index.js +++ /dev/null @@ -1,52 +0,0 @@ -var es = require('event-stream') -var combine = require('..') -var test = require('tape') - -test('do not duplicate errors', function (test) { - - var errors = 0; - var pipe = combine( - es.through(function(data) { - return this.emit('data', data); - }), - es.through(function(data) { - return this.emit('error', new Error(data)); - }) - ) - - pipe.on('error', function(err) { - errors++ - test.ok(errors, 'expected error count') - process.nextTick(function () { - return test.end(); - }) - }) - - return pipe.write('meh'); -}) - -test('3 pipe do not duplicate errors', function (test) { - - var errors = 0; - var pipe = combine( - es.through(function(data) { - return this.emit('data', data); - }), - es.through(function(data) { - return this.emit('error', new Error(data)); - }), - es.through() - ) - - pipe.on('error', function(err) { - errors++ - test.ok(errors, 'expected error count') - process.nextTick(function () { - return test.end(); - }) - }) - - return pipe.write('meh'); - -}) - diff --git a/node_modules/string_decoder/.travis.yml b/node_modules/string_decoder/.travis.yml deleted file mode 100644 index 3347a72..0000000 --- a/node_modules/string_decoder/.travis.yml +++ /dev/null @@ -1,50 +0,0 @@ -sudo: false -language: node_js -before_install: - - npm install -g npm@2 - - test $NPM_LEGACY && npm install -g npm@latest-3 || npm install npm -g -notifications: - email: false -matrix: - fast_finish: true - include: - - node_js: '0.8' - env: - - TASK=test - - NPM_LEGACY=true - - node_js: '0.10' - env: - - TASK=test - - NPM_LEGACY=true - - node_js: '0.11' - env: - - TASK=test - - NPM_LEGACY=true - - node_js: '0.12' - env: - - TASK=test - - NPM_LEGACY=true - - node_js: 1 - env: - - TASK=test - - NPM_LEGACY=true - - node_js: 2 - env: - - TASK=test - - NPM_LEGACY=true - - node_js: 3 - env: - - TASK=test - - NPM_LEGACY=true - - node_js: 4 - env: TASK=test - - node_js: 5 - env: TASK=test - - node_js: 6 - env: TASK=test - - node_js: 7 - env: TASK=test - - node_js: 8 - env: TASK=test - - node_js: 9 - env: TASK=test diff --git a/node_modules/string_decoder/LICENSE b/node_modules/string_decoder/LICENSE deleted file mode 100644 index 778edb2..0000000 --- a/node_modules/string_decoder/LICENSE +++ /dev/null @@ -1,48 +0,0 @@ -Node.js is licensed for use as follows: - -""" -Copyright Node.js contributors. 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. -""" - -This license applies to parts of Node.js originating from the -https://github.com/joyent/node repository: - -""" -Copyright Joyent, Inc. and other Node contributors. 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. -""" - diff --git a/node_modules/string_decoder/README.md b/node_modules/string_decoder/README.md deleted file mode 100644 index 5fd5831..0000000 --- a/node_modules/string_decoder/README.md +++ /dev/null @@ -1,47 +0,0 @@ -# string_decoder - -***Node-core v8.9.4 string_decoder for userland*** - - -[![NPM](https://nodei.co/npm/string_decoder.png?downloads=true&downloadRank=true)](https://nodei.co/npm/string_decoder/) -[![NPM](https://nodei.co/npm-dl/string_decoder.png?&months=6&height=3)](https://nodei.co/npm/string_decoder/) - - -```bash -npm install --save string_decoder -``` - -***Node-core string_decoder for userland*** - -This package is a mirror of the string_decoder implementation in Node-core. - -Full documentation may be found on the [Node.js website](https://nodejs.org/dist/v8.9.4/docs/api/). - -As of version 1.0.0 **string_decoder** uses semantic versioning. - -## Previous versions - -Previous version numbers match the versions found in Node core, e.g. 0.10.24 matches Node 0.10.24, likewise 0.11.10 matches Node 0.11.10. - -## Update - -The *build/* directory contains a build script that will scrape the source from the [nodejs/node](https://github.com/nodejs/node) repo given a specific Node version. - -## Streams Working Group - -`string_decoder` is maintained by the Streams Working Group, which -oversees the development and maintenance of the Streams API within -Node.js. The responsibilities of the Streams Working Group include: - -* Addressing stream issues on the Node.js issue tracker. -* Authoring and editing stream documentation within the Node.js project. -* Reviewing changes to stream subclasses within the Node.js project. -* Redirecting changes to streams from the Node.js project to this - project. -* Assisting in the implementation of stream providers within Node.js. -* Recommending versions of `readable-stream` to be included in Node.js. -* Messaging about the future of streams to give the community advance - notice of changes. - -See [readable-stream](https://github.com/nodejs/readable-stream) for -more details. diff --git a/node_modules/string_decoder/lib/string_decoder.js b/node_modules/string_decoder/lib/string_decoder.js deleted file mode 100644 index 2e89e63..0000000 --- a/node_modules/string_decoder/lib/string_decoder.js +++ /dev/null @@ -1,296 +0,0 @@ -// Copyright Joyent, Inc. and other Node 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. - -'use strict'; - -/**/ - -var Buffer = require('safe-buffer').Buffer; -/**/ - -var isEncoding = Buffer.isEncoding || function (encoding) { - encoding = '' + encoding; - switch (encoding && encoding.toLowerCase()) { - case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw': - return true; - default: - return false; - } -}; - -function _normalizeEncoding(enc) { - if (!enc) return 'utf8'; - var retried; - while (true) { - switch (enc) { - case 'utf8': - case 'utf-8': - return 'utf8'; - case 'ucs2': - case 'ucs-2': - case 'utf16le': - case 'utf-16le': - return 'utf16le'; - case 'latin1': - case 'binary': - return 'latin1'; - case 'base64': - case 'ascii': - case 'hex': - return enc; - default: - if (retried) return; // undefined - enc = ('' + enc).toLowerCase(); - retried = true; - } - } -}; - -// Do not cache `Buffer.isEncoding` when checking encoding names as some -// modules monkey-patch it to support additional encodings -function normalizeEncoding(enc) { - var nenc = _normalizeEncoding(enc); - if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc); - return nenc || enc; -} - -// StringDecoder provides an interface for efficiently splitting a series of -// buffers into a series of JS strings without breaking apart multi-byte -// characters. -exports.StringDecoder = StringDecoder; -function StringDecoder(encoding) { - this.encoding = normalizeEncoding(encoding); - var nb; - switch (this.encoding) { - case 'utf16le': - this.text = utf16Text; - this.end = utf16End; - nb = 4; - break; - case 'utf8': - this.fillLast = utf8FillLast; - nb = 4; - break; - case 'base64': - this.text = base64Text; - this.end = base64End; - nb = 3; - break; - default: - this.write = simpleWrite; - this.end = simpleEnd; - return; - } - this.lastNeed = 0; - this.lastTotal = 0; - this.lastChar = Buffer.allocUnsafe(nb); -} - -StringDecoder.prototype.write = function (buf) { - if (buf.length === 0) return ''; - var r; - var i; - if (this.lastNeed) { - r = this.fillLast(buf); - if (r === undefined) return ''; - i = this.lastNeed; - this.lastNeed = 0; - } else { - i = 0; - } - if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i); - return r || ''; -}; - -StringDecoder.prototype.end = utf8End; - -// Returns only complete characters in a Buffer -StringDecoder.prototype.text = utf8Text; - -// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer -StringDecoder.prototype.fillLast = function (buf) { - if (this.lastNeed <= buf.length) { - buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed); - return this.lastChar.toString(this.encoding, 0, this.lastTotal); - } - buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length); - this.lastNeed -= buf.length; -}; - -// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a -// continuation byte. If an invalid byte is detected, -2 is returned. -function utf8CheckByte(byte) { - if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4; - return byte >> 6 === 0x02 ? -1 : -2; -} - -// Checks at most 3 bytes at the end of a Buffer in order to detect an -// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4) -// needed to complete the UTF-8 character (if applicable) are returned. -function utf8CheckIncomplete(self, buf, i) { - var j = buf.length - 1; - if (j < i) return 0; - var nb = utf8CheckByte(buf[j]); - if (nb >= 0) { - if (nb > 0) self.lastNeed = nb - 1; - return nb; - } - if (--j < i || nb === -2) return 0; - nb = utf8CheckByte(buf[j]); - if (nb >= 0) { - if (nb > 0) self.lastNeed = nb - 2; - return nb; - } - if (--j < i || nb === -2) return 0; - nb = utf8CheckByte(buf[j]); - if (nb >= 0) { - if (nb > 0) { - if (nb === 2) nb = 0;else self.lastNeed = nb - 3; - } - return nb; - } - return 0; -} - -// Validates as many continuation bytes for a multi-byte UTF-8 character as -// needed or are available. If we see a non-continuation byte where we expect -// one, we "replace" the validated continuation bytes we've seen so far with -// a single UTF-8 replacement character ('\ufffd'), to match v8's UTF-8 decoding -// behavior. The continuation byte check is included three times in the case -// where all of the continuation bytes for a character exist in the same buffer. -// It is also done this way as a slight performance increase instead of using a -// loop. -function utf8CheckExtraBytes(self, buf, p) { - if ((buf[0] & 0xC0) !== 0x80) { - self.lastNeed = 0; - return '\ufffd'; - } - if (self.lastNeed > 1 && buf.length > 1) { - if ((buf[1] & 0xC0) !== 0x80) { - self.lastNeed = 1; - return '\ufffd'; - } - if (self.lastNeed > 2 && buf.length > 2) { - if ((buf[2] & 0xC0) !== 0x80) { - self.lastNeed = 2; - return '\ufffd'; - } - } - } -} - -// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer. -function utf8FillLast(buf) { - var p = this.lastTotal - this.lastNeed; - var r = utf8CheckExtraBytes(this, buf, p); - if (r !== undefined) return r; - if (this.lastNeed <= buf.length) { - buf.copy(this.lastChar, p, 0, this.lastNeed); - return this.lastChar.toString(this.encoding, 0, this.lastTotal); - } - buf.copy(this.lastChar, p, 0, buf.length); - this.lastNeed -= buf.length; -} - -// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a -// partial character, the character's bytes are buffered until the required -// number of bytes are available. -function utf8Text(buf, i) { - var total = utf8CheckIncomplete(this, buf, i); - if (!this.lastNeed) return buf.toString('utf8', i); - this.lastTotal = total; - var end = buf.length - (total - this.lastNeed); - buf.copy(this.lastChar, 0, end); - return buf.toString('utf8', i, end); -} - -// For UTF-8, a replacement character is added when ending on a partial -// character. -function utf8End(buf) { - var r = buf && buf.length ? this.write(buf) : ''; - if (this.lastNeed) return r + '\ufffd'; - return r; -} - -// UTF-16LE typically needs two bytes per character, but even if we have an even -// number of bytes available, we need to check if we end on a leading/high -// surrogate. In that case, we need to wait for the next two bytes in order to -// decode the last character properly. -function utf16Text(buf, i) { - if ((buf.length - i) % 2 === 0) { - var r = buf.toString('utf16le', i); - if (r) { - var c = r.charCodeAt(r.length - 1); - if (c >= 0xD800 && c <= 0xDBFF) { - this.lastNeed = 2; - this.lastTotal = 4; - this.lastChar[0] = buf[buf.length - 2]; - this.lastChar[1] = buf[buf.length - 1]; - return r.slice(0, -1); - } - } - return r; - } - this.lastNeed = 1; - this.lastTotal = 2; - this.lastChar[0] = buf[buf.length - 1]; - return buf.toString('utf16le', i, buf.length - 1); -} - -// For UTF-16LE we do not explicitly append special replacement characters if we -// end on a partial character, we simply let v8 handle that. -function utf16End(buf) { - var r = buf && buf.length ? this.write(buf) : ''; - if (this.lastNeed) { - var end = this.lastTotal - this.lastNeed; - return r + this.lastChar.toString('utf16le', 0, end); - } - return r; -} - -function base64Text(buf, i) { - var n = (buf.length - i) % 3; - if (n === 0) return buf.toString('base64', i); - this.lastNeed = 3 - n; - this.lastTotal = 3; - if (n === 1) { - this.lastChar[0] = buf[buf.length - 1]; - } else { - this.lastChar[0] = buf[buf.length - 2]; - this.lastChar[1] = buf[buf.length - 1]; - } - return buf.toString('base64', i, buf.length - n); -} - -function base64End(buf) { - var r = buf && buf.length ? this.write(buf) : ''; - if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed); - return r; -} - -// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex) -function simpleWrite(buf) { - return buf.toString(this.encoding); -} - -function simpleEnd(buf) { - return buf && buf.length ? this.write(buf) : ''; -} \ No newline at end of file diff --git a/node_modules/string_decoder/package.json b/node_modules/string_decoder/package.json deleted file mode 100644 index 518c3eb..0000000 --- a/node_modules/string_decoder/package.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "string_decoder", - "version": "1.1.1", - "description": "The string_decoder module from Node core", - "main": "lib/string_decoder.js", - "dependencies": { - "safe-buffer": "~5.1.0" - }, - "devDependencies": { - "babel-polyfill": "^6.23.0", - "core-util-is": "^1.0.2", - "inherits": "^2.0.3", - "tap": "~0.4.8" - }, - "scripts": { - "test": "tap test/parallel/*.js && node test/verify-dependencies", - "ci": "tap test/parallel/*.js test/ours/*.js --tap | tee test.tap && node test/verify-dependencies.js" - }, - "repository": { - "type": "git", - "url": "git://github.com/nodejs/string_decoder.git" - }, - "homepage": "https://github.com/nodejs/string_decoder", - "keywords": [ - "string", - "decoder", - "browser", - "browserify" - ], - "license": "MIT" -} diff --git a/node_modules/through/.travis.yml b/node_modules/through/.travis.yml deleted file mode 100644 index c693a93..0000000 --- a/node_modules/through/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: node_js -node_js: - - 0.6 - - 0.8 - - "0.10" diff --git a/node_modules/through/LICENSE.APACHE2 b/node_modules/through/LICENSE.APACHE2 deleted file mode 100644 index 6366c04..0000000 --- a/node_modules/through/LICENSE.APACHE2 +++ /dev/null @@ -1,15 +0,0 @@ -Apache License, Version 2.0 - -Copyright (c) 2011 Dominic Tarr - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. diff --git a/node_modules/through/LICENSE.MIT b/node_modules/through/LICENSE.MIT deleted file mode 100644 index 6eafbd7..0000000 --- a/node_modules/through/LICENSE.MIT +++ /dev/null @@ -1,24 +0,0 @@ -The MIT License - -Copyright (c) 2011 Dominic Tarr - -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/through/index.js b/node_modules/through/index.js deleted file mode 100644 index ca5fc59..0000000 --- a/node_modules/through/index.js +++ /dev/null @@ -1,108 +0,0 @@ -var Stream = require('stream') - -// through -// -// a stream that does nothing but re-emit the input. -// useful for aggregating a series of changing but not ending streams into one stream) - -exports = module.exports = through -through.through = through - -//create a readable writable stream. - -function through (write, end, opts) { - write = write || function (data) { this.queue(data) } - end = end || function () { this.queue(null) } - - var ended = false, destroyed = false, buffer = [], _ended = false - var stream = new Stream() - stream.readable = stream.writable = true - stream.paused = false - -// stream.autoPause = !(opts && opts.autoPause === false) - stream.autoDestroy = !(opts && opts.autoDestroy === false) - - stream.write = function (data) { - write.call(this, data) - return !stream.paused - } - - function drain() { - while(buffer.length && !stream.paused) { - var data = buffer.shift() - if(null === data) - return stream.emit('end') - else - stream.emit('data', data) - } - } - - stream.queue = stream.push = function (data) { -// console.error(ended) - if(_ended) return stream - if(data === null) _ended = true - buffer.push(data) - drain() - return stream - } - - //this will be registered as the first 'end' listener - //must call destroy next tick, to make sure we're after any - //stream piped from here. - //this is only a problem if end is not emitted synchronously. - //a nicer way to do this is to make sure this is the last listener for 'end' - - stream.on('end', function () { - stream.readable = false - if(!stream.writable && stream.autoDestroy) - process.nextTick(function () { - stream.destroy() - }) - }) - - function _end () { - stream.writable = false - end.call(stream) - if(!stream.readable && stream.autoDestroy) - stream.destroy() - } - - stream.end = function (data) { - if(ended) return - ended = true - if(arguments.length) stream.write(data) - _end() // will emit or queue - return stream - } - - stream.destroy = function () { - if(destroyed) return - destroyed = true - ended = true - buffer.length = 0 - stream.writable = stream.readable = false - stream.emit('close') - return stream - } - - stream.pause = function () { - if(stream.paused) return - stream.paused = true - return stream - } - - stream.resume = function () { - if(stream.paused) { - stream.paused = false - stream.emit('resume') - } - drain() - //may have become paused again, - //as drain emits 'data'. - if(!stream.paused) - stream.emit('drain') - return stream - } - return stream -} - diff --git a/node_modules/through/package.json b/node_modules/through/package.json deleted file mode 100644 index 9862189..0000000 --- a/node_modules/through/package.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "through", - "version": "2.3.8", - "description": "simplified stream construction", - "main": "index.js", - "scripts": { - "test": "set -e; for t in test/*.js; do node $t; done" - }, - "devDependencies": { - "stream-spec": "~0.3.5", - "tape": "~2.3.2", - "from": "~0.1.3" - }, - "keywords": [ - "stream", - "streams", - "user-streams", - "pipe" - ], - "author": "Dominic Tarr (dominictarr.com)", - "license": "MIT", - "repository": { - "type": "git", - "url": "https://github.com/dominictarr/through.git" - }, - "homepage": "https://github.com/dominictarr/through", - "testling": { - "browsers": [ - "ie/8..latest", - "ff/15..latest", - "chrome/20..latest", - "safari/5.1..latest" - ], - "files": "test/*.js" - } -} diff --git a/node_modules/through/readme.markdown b/node_modules/through/readme.markdown deleted file mode 100644 index cb34c81..0000000 --- a/node_modules/through/readme.markdown +++ /dev/null @@ -1,64 +0,0 @@ -#through - -[![build status](https://secure.travis-ci.org/dominictarr/through.png)](http://travis-ci.org/dominictarr/through) -[![testling badge](https://ci.testling.com/dominictarr/through.png)](https://ci.testling.com/dominictarr/through) - -Easy way to create a `Stream` that is both `readable` and `writable`. - -* Pass in optional `write` and `end` methods. -* `through` takes care of pause/resume logic if you use `this.queue(data)` instead of `this.emit('data', data)`. -* Use `this.pause()` and `this.resume()` to manage flow. -* Check `this.paused` to see current flow state. (`write` always returns `!this.paused`). - -This function is the basis for most of the synchronous streams in -[event-stream](http://github.com/dominictarr/event-stream). - -``` js -var through = require('through') - -through(function write(data) { - this.queue(data) //data *must* not be null - }, - function end () { //optional - this.queue(null) - }) -``` - -Or, can also be used _without_ buffering on pause, use `this.emit('data', data)`, -and this.emit('end') - -``` js -var through = require('through') - -through(function write(data) { - this.emit('data', data) - //this.pause() - }, - function end () { //optional - this.emit('end') - }) -``` - -## Extended Options - -You will probably not need these 99% of the time. - -### autoDestroy=false - -By default, `through` emits close when the writable -and readable side of the stream has ended. -If that is not desired, set `autoDestroy=false`. - -``` js -var through = require('through') - -//like this -var ts = through(write, end, {autoDestroy: false}) -//or like this -var ts = through(write, end) -ts.autoDestroy = false -``` - -## License - -MIT / Apache2 diff --git a/node_modules/through/test/async.js b/node_modules/through/test/async.js deleted file mode 100644 index 46bdbae..0000000 --- a/node_modules/through/test/async.js +++ /dev/null @@ -1,28 +0,0 @@ -var from = require('from') -var through = require('../') - -var tape = require('tape') - -tape('simple async example', function (t) { - - var n = 0, expected = [1,2,3,4,5], actual = [] - from(expected) - .pipe(through(function(data) { - this.pause() - n ++ - setTimeout(function(){ - console.log('pushing data', data) - this.push(data) - this.resume() - }.bind(this), 300) - })).pipe(through(function(data) { - console.log('pushing data second time', data); - this.push(data) - })).on('data', function (d) { - actual.push(d) - }).on('end', function() { - t.deepEqual(actual, expected) - t.end() - }) - -}) diff --git a/node_modules/through/test/auto-destroy.js b/node_modules/through/test/auto-destroy.js deleted file mode 100644 index 9a8fd00..0000000 --- a/node_modules/through/test/auto-destroy.js +++ /dev/null @@ -1,30 +0,0 @@ -var test = require('tape') -var through = require('../') - -// must emit end before close. - -test('end before close', function (assert) { - var ts = through() - ts.autoDestroy = false - var ended = false, closed = false - - ts.on('end', function () { - assert.ok(!closed) - ended = true - }) - ts.on('close', function () { - assert.ok(ended) - closed = true - }) - - ts.write(1) - ts.write(2) - ts.write(3) - ts.end() - assert.ok(ended) - assert.notOk(closed) - ts.destroy() - assert.ok(closed) - assert.end() -}) - diff --git a/node_modules/through/test/buffering.js b/node_modules/through/test/buffering.js deleted file mode 100644 index b0084bf..0000000 --- a/node_modules/through/test/buffering.js +++ /dev/null @@ -1,71 +0,0 @@ -var test = require('tape') -var through = require('../') - -// must emit end before close. - -test('buffering', function(assert) { - var ts = through(function (data) { - this.queue(data) - }, function () { - this.queue(null) - }) - - var ended = false, actual = [] - - ts.on('data', actual.push.bind(actual)) - ts.on('end', function () { - ended = true - }) - - ts.write(1) - ts.write(2) - ts.write(3) - assert.deepEqual(actual, [1, 2, 3]) - ts.pause() - ts.write(4) - ts.write(5) - ts.write(6) - assert.deepEqual(actual, [1, 2, 3]) - ts.resume() - assert.deepEqual(actual, [1, 2, 3, 4, 5, 6]) - ts.pause() - ts.end() - assert.ok(!ended) - ts.resume() - assert.ok(ended) - assert.end() -}) - -test('buffering has data in queue, when ends', function (assert) { - - /* - * If stream ends while paused with data in the queue, - * stream should still emit end after all data is written - * on resume. - */ - - var ts = through(function (data) { - this.queue(data) - }, function () { - this.queue(null) - }) - - var ended = false, actual = [] - - ts.on('data', actual.push.bind(actual)) - ts.on('end', function () { - ended = true - }) - - ts.pause() - ts.write(1) - ts.write(2) - ts.write(3) - ts.end() - assert.deepEqual(actual, [], 'no data written yet, still paused') - assert.ok(!ended, 'end not emitted yet, still paused') - ts.resume() - assert.deepEqual(actual, [1, 2, 3], 'resumed, all data should be delivered') - assert.ok(ended, 'end should be emitted once all data was delivered') - assert.end(); -}) diff --git a/node_modules/through/test/end.js b/node_modules/through/test/end.js deleted file mode 100644 index fa113f5..0000000 --- a/node_modules/through/test/end.js +++ /dev/null @@ -1,45 +0,0 @@ -var test = require('tape') -var through = require('../') - -// must emit end before close. - -test('end before close', function (assert) { - var ts = through() - var ended = false, closed = false - - ts.on('end', function () { - assert.ok(!closed) - ended = true - }) - ts.on('close', function () { - assert.ok(ended) - closed = true - }) - - ts.write(1) - ts.write(2) - ts.write(3) - ts.end() - assert.ok(ended) - assert.ok(closed) - assert.end() -}) - -test('end only once', function (t) { - - var ts = through() - var ended = false, closed = false - - ts.on('end', function () { - t.equal(ended, false) - ended = true - }) - - ts.queue(null) - ts.queue(null) - ts.queue(null) - - ts.resume() - - t.end() -}) diff --git a/node_modules/through/test/index.js b/node_modules/through/test/index.js deleted file mode 100644 index 96da82f..0000000 --- a/node_modules/through/test/index.js +++ /dev/null @@ -1,133 +0,0 @@ - -var test = require('tape') -var spec = require('stream-spec') -var through = require('../') - -/* - I'm using these two functions, and not streams and pipe - so there is less to break. if this test fails it must be - the implementation of _through_ -*/ - -function write(array, stream) { - array = array.slice() - function next() { - while(array.length) - if(stream.write(array.shift()) === false) - return stream.once('drain', next) - - stream.end() - } - - next() -} - -function read(stream, callback) { - var actual = [] - stream.on('data', function (data) { - actual.push(data) - }) - stream.once('end', function () { - callback(null, actual) - }) - stream.once('error', function (err) { - callback(err) - }) -} - -test('simple defaults', function(assert) { - - var l = 1000 - , expected = [] - - while(l--) expected.push(l * Math.random()) - - var t = through() - var s = spec(t).through().pausable() - - read(t, function (err, actual) { - assert.ifError(err) - assert.deepEqual(actual, expected) - assert.end() - }) - - t.on('close', s.validate) - - write(expected, t) -}); - -test('simple functions', function(assert) { - - var l = 1000 - , expected = [] - - while(l--) expected.push(l * Math.random()) - - var t = through(function (data) { - this.emit('data', data*2) - }) - var s = spec(t).through().pausable() - - - read(t, function (err, actual) { - assert.ifError(err) - assert.deepEqual(actual, expected.map(function (data) { - return data*2 - })) - assert.end() - }) - - t.on('close', s.validate) - - write(expected, t) -}) - -test('pauses', function(assert) { - - var l = 1000 - , expected = [] - - while(l--) expected.push(l) //Math.random()) - - var t = through() - - var s = spec(t) - .through() - .pausable() - - t.on('data', function () { - if(Math.random() > 0.1) return - t.pause() - process.nextTick(function () { - t.resume() - }) - }) - - read(t, function (err, actual) { - assert.ifError(err) - assert.deepEqual(actual, expected) - }) - - t.on('close', function () { - s.validate() - assert.end() - }) - - write(expected, t) -}) - -test('does not soft-end on `undefined`', function(assert) { - var stream = through() - , count = 0 - - stream.on('data', function (data) { - count++ - }) - - stream.write(undefined) - stream.write(undefined) - - assert.equal(count, 2) - - assert.end() -}) diff --git a/node_modules/to-object-path/LICENSE b/node_modules/to-object-path/LICENSE deleted file mode 100644 index 1e49edf..0000000 --- a/node_modules/to-object-path/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015-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/to-object-path/README.md b/node_modules/to-object-path/README.md deleted file mode 100644 index 7f3cfb1..0000000 --- a/node_modules/to-object-path/README.md +++ /dev/null @@ -1,71 +0,0 @@ -# to-object-path [![NPM version](https://badge.fury.io/js/to-object-path.svg)](http://badge.fury.io/js/to-object-path) - -> Create an object path from a list or array of strings. - -## Install - -Install with [npm](https://www.npmjs.com/) - -```sh -$ npm i to-object-path --save -``` - -## Usage - -```js -var toPath = require('to-object-path'); - -toPath('foo', 'bar', 'baz'); -toPath('foo', ['bar', 'baz']); -//=> 'foo.bar.baz' -``` - -Also supports passing an arguments object (without having to slice args): - -```js -function foo() - return toPath(arguments); -} - -foo('foo', 'bar', 'baz'); -foo('foo', ['bar', 'baz']); -//=> 'foo.bar.baz' -``` - -Visit the [example](./example.js) to see how this could be used in an application. - -## Related projects - -* [get-value](https://www.npmjs.com/package/get-value): Use property paths (` a.b.c`) to get a nested value from an object. | [homepage](https://github.com/jonschlinkert/get-value) -* [has-value](https://www.npmjs.com/package/has-value): Returns true if a value exists, false if empty. Works with deeply nested values using… [more](https://www.npmjs.com/package/has-value) | [homepage](https://github.com/jonschlinkert/has-value) -* [omit-value](https://www.npmjs.com/package/omit-value): Omit properties from an object or deeply nested property of an object using object path… [more](https://www.npmjs.com/package/omit-value) | [homepage](https://github.com/jonschlinkert/omit-value) -* [set-value](https://www.npmjs.com/package/set-value): Create nested values and any intermediaries using dot notation (`'a.b.c'`) paths. | [homepage](https://github.com/jonschlinkert/set-value) -* [unset-value](https://www.npmjs.com/package/unset-value): Delete nested properties from an object using dot notation. | [homepage](https://github.com/jonschlinkert/unset-value) - -## Running tests - -Install dev dependencies: - -```sh -$ npm i -d && npm test -``` - -## Contributing - -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/to-object-path/issues/new). - -## Author - -**Jon Schlinkert** - -+ [github/jonschlinkert](https://github.com/jonschlinkert) -+ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) - -## License - -Copyright © 2015 Jon Schlinkert -Released under the MIT license. - -*** - -_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on October 28, 2015._ \ No newline at end of file diff --git a/node_modules/to-object-path/index.js b/node_modules/to-object-path/index.js deleted file mode 100644 index 489f8f6..0000000 --- a/node_modules/to-object-path/index.js +++ /dev/null @@ -1,33 +0,0 @@ -/*! - * to-object-path - * - * Copyright (c) 2015, Jon Schlinkert. - * Licensed under the MIT License. - */ - -'use strict'; - -var typeOf = require('kind-of'); - -module.exports = function toPath(args) { - if (typeOf(args) !== 'arguments') { - args = arguments; - } - return filter(args).join('.'); -}; - -function filter(arr) { - var len = arr.length; - var idx = -1; - var res = []; - - while (++idx < len) { - var ele = arr[idx]; - if (typeOf(ele) === 'arguments' || Array.isArray(ele)) { - res.push.apply(res, filter(ele)); - } else if (typeof ele === 'string') { - res.push(ele); - } - } - return res; -} diff --git a/node_modules/to-object-path/package.json b/node_modules/to-object-path/package.json deleted file mode 100644 index 2fe341b..0000000 --- a/node_modules/to-object-path/package.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "name": "to-object-path", - "description": "Create an object path from a list or array of strings.", - "version": "0.3.0", - "homepage": "https://github.com/jonschlinkert/to-object-path", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "repository": "jonschlinkert/to-object-path", - "bugs": { - "url": "https://github.com/jonschlinkert/to-object-path/issues" - }, - "license": "MIT", - "files": [ - "index.js" - ], - "main": "index.js", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "dependencies": { - "kind-of": "^3.0.2" - }, - "devDependencies": { - "base": "^0.6.7", - "mocha": "*" - }, - "keywords": [ - "dot", - "nested", - "notation", - "object", - "path", - "stringify" - ], - "verb": { - "related": { - "list": [ - "get-value", - "set-value", - "has-value", - "omit-value", - "unset-value" - ] - } - } -} diff --git a/node_modules/to-regex-range/LICENSE b/node_modules/to-regex-range/LICENSE deleted file mode 100644 index 83b56e7..0000000 --- a/node_modules/to-regex-range/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015-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/to-regex-range/README.md b/node_modules/to-regex-range/README.md deleted file mode 100644 index 2763c5a..0000000 --- a/node_modules/to-regex-range/README.md +++ /dev/null @@ -1,281 +0,0 @@ -# to-regex-range [![NPM version](https://img.shields.io/npm/v/to-regex-range.svg?style=flat)](https://www.npmjs.com/package/to-regex-range) [![NPM monthly downloads](https://img.shields.io/npm/dm/to-regex-range.svg?style=flat)](https://npmjs.org/package/to-regex-range) [![NPM total downloads](https://img.shields.io/npm/dt/to-regex-range.svg?style=flat)](https://npmjs.org/package/to-regex-range) [![Linux Build Status](https://img.shields.io/travis/micromatch/to-regex-range.svg?style=flat&label=Travis)](https://travis-ci.org/micromatch/to-regex-range) - -> Pass two numbers, get a regex-compatible source string for matching ranges. Validated against more than 2.78 million test assertions. - -## Install - -Install with [npm](https://www.npmjs.com/): - -```sh -$ npm install --save to-regex-range -``` - -Install with [yarn](https://yarnpkg.com): - -```sh -$ yarn add to-regex-range -``` - -
    -What does this do? - -
    - -This libary generates the `source` string to be passed to `new RegExp()` for matching a range of numbers. - -**Example** - -```js -var toRegexRange = require('to-regex-range'); -var regex = new RegExp(toRegexRange('15', '95')); -``` - -A string is returned so that you can do whatever you need with it before passing it to `new RegExp()` (like adding `^` or `$` boundaries, defining flags, or combining it another string). - -
    - -
    - -
    -Why use this library? - -
    - -### Convenience - -Creating regular expressions for matching numbers gets deceptively complicated pretty fast. - -For example, let's say you need a validation regex for matching part of a user-id, postal code, social security number, tax id, etc: - -* regex for matching `1` => `/1/` (easy enough) -* regex for matching `1` through `5` => `/[1-5]/` (not bad...) -* regex for matching `1` or `5` => `/(1|5)/` (still easy...) -* regex for matching `1` through `50` => `/([1-9]|[1-4][0-9]|50)/` (uh-oh...) -* regex for matching `1` through `55` => `/([1-9]|[1-4][0-9]|5[0-5])/` (no prob, I can do this...) -* regex for matching `1` through `555` => `/([1-9]|[1-9][0-9]|[1-4][0-9]{2}|5[0-4][0-9]|55[0-5])/` (maybe not...) -* regex for matching `0001` through `5555` => `/(0{3}[1-9]|0{2}[1-9][0-9]|0[1-9][0-9]{2}|[1-4][0-9]{3}|5[0-4][0-9]{2}|55[0-4][0-9]|555[0-5])/` (okay, I get the point!) - -The numbers are contrived, but they're also really basic. In the real world you might need to generate a regex on-the-fly for validation. - -**Learn more** - -If you're interested in learning more about [character classes](http://www.regular-expressions.info/charclass.html) and other regex features, I personally have always found [regular-expressions.info](http://www.regular-expressions.info/charclass.html) to be pretty useful. - -### Heavily tested - -As of April 27, 2017, this library runs [2,783,483 test assertions](./test/test.js) against generated regex-ranges to provide brute-force verification that results are indeed correct. - -Tests run in ~870ms on my MacBook Pro, 2.5 GHz Intel Core i7. - -### Highly optimized - -Generated regular expressions are highly optimized: - -* duplicate sequences and character classes are reduced using quantifiers -* smart enough to use `?` conditionals when number(s) or range(s) can be positive or negative -* uses fragment caching to avoid processing the same exact string more than once - -
    - -
    - -## Usage - -Add this library to your javascript application with the following line of code - -```js -var toRegexRange = require('to-regex-range'); -``` - -The main export is a function that takes two integers: the `min` value and `max` value (formatted as strings or numbers). - -```js -var source = toRegexRange('15', '95'); -//=> 1[5-9]|[2-8][0-9]|9[0-5] - -var re = new RegExp('^' + source + '$'); -console.log(re.test('14')); //=> false -console.log(re.test('50')); //=> true -console.log(re.test('94')); //=> true -console.log(re.test('96')); //=> false -``` - -## Options - -### options.capture - -**Type**: `boolean` - -**Deafault**: `undefined` - -Wrap the returned value in parentheses when there is more than one regex condition. Useful when you're dynamically generating ranges. - -```js -console.log(toRegexRange('-10', '10')); -//=> -[1-9]|-?10|[0-9] - -console.log(toRegexRange('-10', '10', {capture: true})); -//=> (-[1-9]|-?10|[0-9]) -``` - -### options.shorthand - -**Type**: `boolean` - -**Deafault**: `undefined` - -Use the regex shorthand for `[0-9]`: - -```js -console.log(toRegexRange('0', '999999')); -//=> [0-9]|[1-9][0-9]{1,5} - -console.log(toRegexRange('0', '999999', {shorthand: true})); -//=> \d|[1-9]\d{1,5} -``` - -### options.relaxZeros - -**Type**: `boolean` - -**Default**: `true` - -This option only applies to **negative zero-padded ranges**. By default, when a negative zero-padded range is defined, the number of leading zeros is relaxed using `-0*`. - -```js -console.log(toRegexRange('-001', '100')); -//=> -0*1|0{2}[0-9]|0[1-9][0-9]|100 - -console.log(toRegexRange('-001', '100', {relaxZeros: false})); -//=> -0{2}1|0{2}[0-9]|0[1-9][0-9]|100 -``` - -
    -Why are zeros relaxed for negative zero-padded ranges by default? - -Consider the following. - -```js -var regex = toRegexRange('-001', '100'); -``` - -_Note that `-001` and `100` are both three digits long_. - -In most zero-padding implementations, only a single leading zero is enough to indicate that zero-padding should be applied. Thus, the leading zeros would be "corrected" on the negative range in the example to `-01`, instead of `-001`, to make total length of each string no greater than the length of the largest number in the range (in other words, `-001` is 4 digits, but `100` is only three digits). - -If zeros were not relaxed by default, you might expect the resulting regex of the above pattern to match `-001` - given that it's defined that way in the arguments - _but it wouldn't_. It would, however, match `-01`. This gets even more ambiguous with large ranges, like `-01` to `1000000`. - -Thus, we relax zeros by default to provide a more predictable experience for users. - -
    - -## Examples - -| **Range** | **Result** | **Compile time** | -| --- | --- | --- | -| `toRegexRange('5, 5')` | `5` | _33μs_ | -| `toRegexRange('5, 6')` | `5\|6` | _53μs_ | -| `toRegexRange('29, 51')` | `29\|[34][0-9]\|5[01]` | _699μs_ | -| `toRegexRange('31, 877')` | `3[1-9]\|[4-9][0-9]\|[1-7][0-9]{2}\|8[0-6][0-9]\|87[0-7]` | _711μs_ | -| `toRegexRange('111, 555')` | `11[1-9]\|1[2-9][0-9]\|[2-4][0-9]{2}\|5[0-4][0-9]\|55[0-5]` | _62μs_ | -| `toRegexRange('-10, 10')` | `-[1-9]\|-?10\|[0-9]` | _74μs_ | -| `toRegexRange('-100, -10')` | `-1[0-9]\|-[2-9][0-9]\|-100` | _49μs_ | -| `toRegexRange('-100, 100')` | `-[1-9]\|-?[1-9][0-9]\|-?100\|[0-9]` | _45μs_ | -| `toRegexRange('001, 100')` | `0{2}[1-9]\|0[1-9][0-9]\|100` | _158μs_ | -| `toRegexRange('0010, 1000')` | `0{2}1[0-9]\|0{2}[2-9][0-9]\|0[1-9][0-9]{2}\|1000` | _61μs_ | -| `toRegexRange('1, 2')` | `1\|2` | _10μs_ | -| `toRegexRange('1, 5')` | `[1-5]` | _24μs_ | -| `toRegexRange('1, 10')` | `[1-9]\|10` | _23μs_ | -| `toRegexRange('1, 100')` | `[1-9]\|[1-9][0-9]\|100` | _30μs_ | -| `toRegexRange('1, 1000')` | `[1-9]\|[1-9][0-9]{1,2}\|1000` | _52μs_ | -| `toRegexRange('1, 10000')` | `[1-9]\|[1-9][0-9]{1,3}\|10000` | _47μs_ | -| `toRegexRange('1, 100000')` | `[1-9]\|[1-9][0-9]{1,4}\|100000` | _44μs_ | -| `toRegexRange('1, 1000000')` | `[1-9]\|[1-9][0-9]{1,5}\|1000000` | _49μs_ | -| `toRegexRange('1, 10000000')` | `[1-9]\|[1-9][0-9]{1,6}\|10000000` | _63μs_ | - -## Heads up! - -**Order of arguments** - -When the `min` is larger than the `max`, values will be flipped to create a valid range: - -```js -toRegexRange('51', '29'); -``` - -Is effectively flipped to: - -```js -toRegexRange('29', '51'); -//=> 29|[3-4][0-9]|5[0-1] -``` - -**Steps / increments** - -This library does not support steps (increments). A pr to add support would be welcome. - -## History - -### v2.0.0 - 2017-04-21 - -**New features** - -Adds support for zero-padding! - -### v1.0.0 - -**Optimizations** - -Repeating ranges are now grouped using quantifiers. rocessing time is roughly the same, but the generated regex is much smaller, which should result in faster matching. - -## Attribution - -Inspired by the python library [range-regex](https://github.com/dimka665/range-regex). - -## About - -### Related projects - -* [expand-range](https://www.npmjs.com/package/expand-range): Fast, bash-like range expansion. Expand a range of numbers or letters, uppercase or lowercase. See… [more](https://github.com/jonschlinkert/expand-range) | [homepage](https://github.com/jonschlinkert/expand-range "Fast, bash-like range expansion. Expand a range of numbers or letters, uppercase or lowercase. See the benchmarks. Used by micromatch.") -* [fill-range](https://www.npmjs.com/package/fill-range): Fill in a range of numbers or letters, optionally passing an increment or `step` to… [more](https://github.com/jonschlinkert/fill-range) | [homepage](https://github.com/jonschlinkert/fill-range "Fill in a range of numbers or letters, optionally passing an increment or `step` to use, or create a regex-compatible range with `options.toRegex`") -* [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.") -* [repeat-element](https://www.npmjs.com/package/repeat-element): Create an array by repeating the given value n times. | [homepage](https://github.com/jonschlinkert/repeat-element "Create an array by repeating the given value n times.") -* [repeat-string](https://www.npmjs.com/package/repeat-string): Repeat the given string n times. Fastest implementation for repeating a string. | [homepage](https://github.com/jonschlinkert/repeat-string "Repeat the given string n times. Fastest implementation for repeating a string.") - -### Contributing - -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). - -### 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 -``` - -### 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 -``` - -### Author - -**Jon Schlinkert** - -* [github/jonschlinkert](https://github.com/jonschlinkert) -* [twitter/jonschlinkert](https://twitter.com/jonschlinkert) - -### License - -Copyright © 2017, [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 April 27, 2017._ \ No newline at end of file diff --git a/node_modules/to-regex-range/index.js b/node_modules/to-regex-range/index.js deleted file mode 100644 index 7bb5a74..0000000 --- a/node_modules/to-regex-range/index.js +++ /dev/null @@ -1,294 +0,0 @@ -/*! - * to-regex-range - * - * Copyright (c) 2015, 2017, Jon Schlinkert. - * Released under the MIT License. - */ - -'use strict'; - -var repeat = require('repeat-string'); -var isNumber = require('is-number'); -var cache = {}; - -function toRegexRange(min, max, options) { - if (isNumber(min) === false) { - throw new RangeError('toRegexRange: first argument is invalid.'); - } - - if (typeof max === 'undefined' || min === max) { - return String(min); - } - - if (isNumber(max) === false) { - throw new RangeError('toRegexRange: second argument is invalid.'); - } - - options = options || {}; - var relax = String(options.relaxZeros); - var shorthand = String(options.shorthand); - var capture = String(options.capture); - var key = min + ':' + max + '=' + relax + shorthand + capture; - if (cache.hasOwnProperty(key)) { - return cache[key].result; - } - - var a = Math.min(min, max); - var b = Math.max(min, max); - - if (Math.abs(a - b) === 1) { - var result = min + '|' + max; - if (options.capture) { - return '(' + result + ')'; - } - return result; - } - - var isPadded = padding(min) || padding(max); - var positives = []; - var negatives = []; - - var tok = {min: min, max: max, a: a, b: b}; - if (isPadded) { - tok.isPadded = isPadded; - tok.maxLen = String(tok.max).length; - } - - if (a < 0) { - var newMin = b < 0 ? Math.abs(b) : 1; - var newMax = Math.abs(a); - negatives = splitToPatterns(newMin, newMax, tok, options); - a = tok.a = 0; - } - - if (b >= 0) { - positives = splitToPatterns(a, b, tok, options); - } - - tok.negatives = negatives; - tok.positives = positives; - tok.result = siftPatterns(negatives, positives, options); - - if (options.capture && (positives.length + negatives.length) > 1) { - tok.result = '(' + tok.result + ')'; - } - - cache[key] = tok; - return tok.result; -} - -function siftPatterns(neg, pos, options) { - var onlyNegative = filterPatterns(neg, pos, '-', false, options) || []; - var onlyPositive = filterPatterns(pos, neg, '', false, options) || []; - var intersected = filterPatterns(neg, pos, '-?', true, options) || []; - var subpatterns = onlyNegative.concat(intersected).concat(onlyPositive); - return subpatterns.join('|'); -} - -function splitToRanges(min, max) { - min = Number(min); - max = Number(max); - - var nines = 1; - var stops = [max]; - var stop = +countNines(min, nines); - - while (min <= stop && stop <= max) { - stops = push(stops, stop); - nines += 1; - stop = +countNines(min, nines); - } - - var zeros = 1; - stop = countZeros(max + 1, zeros) - 1; - - while (min < stop && stop <= max) { - stops = push(stops, stop); - zeros += 1; - stop = countZeros(max + 1, zeros) - 1; - } - - stops.sort(compare); - return stops; -} - -/** - * Convert a range to a regex pattern - * @param {Number} `start` - * @param {Number} `stop` - * @return {String} - */ - -function rangeToPattern(start, stop, options) { - if (start === stop) { - return {pattern: String(start), digits: []}; - } - - var zipped = zip(String(start), String(stop)); - var len = zipped.length, i = -1; - - var pattern = ''; - var digits = 0; - - while (++i < len) { - var numbers = zipped[i]; - var startDigit = numbers[0]; - var stopDigit = numbers[1]; - - if (startDigit === stopDigit) { - pattern += startDigit; - - } else if (startDigit !== '0' || stopDigit !== '9') { - pattern += toCharacterClass(startDigit, stopDigit); - - } else { - digits += 1; - } - } - - if (digits) { - pattern += options.shorthand ? '\\d' : '[0-9]'; - } - - return { pattern: pattern, digits: [digits] }; -} - -function splitToPatterns(min, max, tok, options) { - var ranges = splitToRanges(min, max); - var len = ranges.length; - var idx = -1; - - var tokens = []; - var start = min; - var prev; - - while (++idx < len) { - var range = ranges[idx]; - var obj = rangeToPattern(start, range, options); - var zeros = ''; - - if (!tok.isPadded && prev && prev.pattern === obj.pattern) { - if (prev.digits.length > 1) { - prev.digits.pop(); - } - prev.digits.push(obj.digits[0]); - prev.string = prev.pattern + toQuantifier(prev.digits); - start = range + 1; - continue; - } - - if (tok.isPadded) { - zeros = padZeros(range, tok); - } - - obj.string = zeros + obj.pattern + toQuantifier(obj.digits); - tokens.push(obj); - start = range + 1; - prev = obj; - } - - return tokens; -} - -function filterPatterns(arr, comparison, prefix, intersection, options) { - var res = []; - - for (var i = 0; i < arr.length; i++) { - var tok = arr[i]; - var ele = tok.string; - - if (options.relaxZeros !== false) { - if (prefix === '-' && ele.charAt(0) === '0') { - if (ele.charAt(1) === '{') { - ele = '0*' + ele.replace(/^0\{\d+\}/, ''); - } else { - ele = '0*' + ele.slice(1); - } - } - } - - if (!intersection && !contains(comparison, 'string', ele)) { - res.push(prefix + ele); - } - - if (intersection && contains(comparison, 'string', ele)) { - res.push(prefix + ele); - } - } - return res; -} - -/** - * Zip strings (`for in` can be used on string characters) - */ - -function zip(a, b) { - var arr = []; - for (var ch in a) arr.push([a[ch], b[ch]]); - return arr; -} - -function compare(a, b) { - return a > b ? 1 : b > a ? -1 : 0; -} - -function push(arr, ele) { - if (arr.indexOf(ele) === -1) arr.push(ele); - return arr; -} - -function contains(arr, key, val) { - for (var i = 0; i < arr.length; i++) { - if (arr[i][key] === val) { - return true; - } - } - return false; -} - -function countNines(min, len) { - return String(min).slice(0, -len) + repeat('9', len); -} - -function countZeros(integer, zeros) { - return integer - (integer % Math.pow(10, zeros)); -} - -function toQuantifier(digits) { - var start = digits[0]; - var stop = digits[1] ? (',' + digits[1]) : ''; - if (!stop && (!start || start === 1)) { - return ''; - } - return '{' + start + stop + '}'; -} - -function toCharacterClass(a, b) { - return '[' + a + ((b - a === 1) ? '' : '-') + b + ']'; -} - -function padding(str) { - return /^-?(0+)\d/.exec(str); -} - -function padZeros(val, tok) { - if (tok.isPadded) { - var diff = Math.abs(tok.maxLen - String(val).length); - switch (diff) { - case 0: - return ''; - case 1: - return '0'; - default: { - return '0{' + diff + '}'; - } - } - } - return val; -} - -/** - * Expose `toRegexRange` - */ - -module.exports = toRegexRange; diff --git a/node_modules/to-regex-range/package.json b/node_modules/to-regex-range/package.json deleted file mode 100644 index 6c8e6b1..0000000 --- a/node_modules/to-regex-range/package.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "name": "to-regex-range", - "description": "Pass two numbers, get a regex-compatible source string for matching ranges. Validated against more than 2.78 million test assertions.", - "version": "2.1.1", - "homepage": "https://github.com/micromatch/to-regex-range", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "repository": "micromatch/to-regex-range", - "bugs": { - "url": "https://github.com/micromatch/to-regex-range/issues" - }, - "license": "MIT", - "files": [ - "index.js" - ], - "main": "index.js", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "devDependencies": { - "fill-range": "^3.1.1", - "gulp-format-md": "^0.1.12", - "mocha": "^3.2.0", - "text-table": "^0.2.0", - "time-diff": "^0.3.1" - }, - "keywords": [ - "alpha", - "alphabetical", - "bash", - "brace", - "date", - "expand", - "expansion", - "glob", - "match", - "matches", - "matching", - "number", - "numerical", - "range", - "ranges", - "regex", - "sequence", - "sh", - "to", - "year" - ], - "verb": { - "related": { - "list": [ - "expand-range", - "fill-range", - "micromatch", - "repeat-element", - "repeat-string" - ] - }, - "toc": false, - "layout": "default", - "tasks": [ - "readme" - ], - "plugins": [ - "gulp-format-md" - ], - "lint": { - "reflinks": true - }, - "helpers": [ - "./examples.js" - ], - "reflinks": [ - "0-5", - "0-9", - "1-5", - "1-9" - ] - } -} diff --git a/node_modules/to-regex/LICENSE b/node_modules/to-regex/LICENSE deleted file mode 100644 index 7c9987b..0000000 --- a/node_modules/to-regex/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016-2018, 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/to-regex/README.md b/node_modules/to-regex/README.md deleted file mode 100644 index 5a28fc3..0000000 --- a/node_modules/to-regex/README.md +++ /dev/null @@ -1,205 +0,0 @@ -# to-regex [![NPM version](https://img.shields.io/npm/v/to-regex.svg?style=flat)](https://www.npmjs.com/package/to-regex) [![NPM monthly downloads](https://img.shields.io/npm/dm/to-regex.svg?style=flat)](https://npmjs.org/package/to-regex) [![NPM total downloads](https://img.shields.io/npm/dt/to-regex.svg?style=flat)](https://npmjs.org/package/to-regex) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/to-regex.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/to-regex) - -> Generate a regex from a string or array of strings. - -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) -- [Usage](#usage) -- [Options](#options) - * [options.contains](#optionscontains) - * [options.negate](#optionsnegate) - * [options.nocase](#optionsnocase) - * [options.flags](#optionsflags) - * [options.cache](#optionscache) - * [options.safe](#optionssafe) -- [About](#about) - * [Related projects](#related-projects) - * [Author](#author) - * [License](#license) - -_(TOC generated by [verb](https://github.com/verbose/verb) using [markdown-toc](https://github.com/jonschlinkert/markdown-toc))_ - -## Install - -Install with [npm](https://www.npmjs.com/): - -```sh -$ npm install --save to-regex -``` - -## Usage - -```js -var toRegex = require('to-regex'); - -console.log(toRegex('foo')); -//=> /^(?:foo)$/ - -console.log(toRegex('foo', {negate: true})); -//=> /^(?:(?:(?!^(?:foo)$).)*)$/ - -console.log(toRegex('foo', {contains: true})); -//=> /(?:foo)/ - -console.log(toRegex(['foo', 'bar'], {negate: true})); -//=> /^(?:(?:(?!^(?:(?:foo)|(?:bar))$).)*)$/ - -console.log(toRegex(['foo', 'bar'], {negate: true, contains: true})); -//=> /^(?:(?:(?!(?:(?:foo)|(?:bar))).)*)$/ -``` - -## Options - -### options.contains - -**Type**: `Boolean` - -**Default**: `undefined` - -Generate a regex that will match any string that _contains_ the given pattern. By default, regex is strict will only return true for exact matches. - -```js -var toRegex = require('to-regex'); -console.log(toRegex('foo', {contains: true})); -//=> /(?:foo)/ -``` - -### options.negate - -**Type**: `Boolean` - -**Default**: `undefined` - -Create a regex that will match everything except the given pattern. - -```js -var toRegex = require('to-regex'); -console.log(toRegex('foo', {negate: true})); -//=> /^(?:(?:(?!^(?:foo)$).)*)$/ -``` - -### options.nocase - -**Type**: `Boolean` - -**Default**: `undefined` - -Adds the `i` flag, to enable case-insensitive matching. - -```js -var toRegex = require('to-regex'); -console.log(toRegex('foo', {nocase: true})); -//=> /^(?:foo)$/i -``` - -Alternatively you can pass the flags you want directly on [options.flags](#options.flags). - -### options.flags - -**Type**: `String` - -**Default**: `undefined` - -Define the flags you want to use on the generated regex. - -```js -var toRegex = require('to-regex'); -console.log(toRegex('foo', {flags: 'gm'})); -//=> /^(?:foo)$/gm -console.log(toRegex('foo', {flags: 'gmi', nocase: true})); //<= handles redundancy -//=> /^(?:foo)$/gmi -``` - -### options.cache - -**Type**: `Boolean` - -**Default**: `true` - -Generated regex is cached based on the provided string and options. As a result, runtime compilation only happens once per pattern (as long as options are also the same), which can result in dramatic speed improvements. - -This also helps with debugging, since adding options and pattern are added to the generated regex. - -**Disable caching** - -```js -toRegex('foo', {cache: false}); -``` - -### options.safe - -**Type**: `Boolean` - -**Default**: `undefined` - -Check the generated regular expression with [safe-regex](https://github.com/substack/safe-regex) and throw an error if the regex is potentially unsafe. - -**Examples** - -```js -console.log(toRegex('(x+x+)+y')); -//=> /^(?:(x+x+)+y)$/ - -// The following would throw an error -toRegex('(x+x+)+y', {safe: true}); -``` - -## 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: - -* [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") -* [path-regex](https://www.npmjs.com/package/path-regex): Regular expression for matching the parts of a file path. | [homepage](https://github.com/regexps/path-regex "Regular expression for matching the parts of a file path.") -* [to-regex-range](https://www.npmjs.com/package/to-regex-range): Pass two numbers, get a regex-compatible source string for matching ranges. Validated against more than… [more](https://github.com/micromatch/to-regex-range) | [homepage](https://github.com/micromatch/to-regex-range "Pass two numbers, get a regex-compatible source string for matching ranges. Validated against more than 2.78 million test assertions.") - -### Author - -**Jon Schlinkert** - -* [linkedin/in/jonschlinkert](https://linkedin.com/in/jonschlinkert) -* [github/jonschlinkert](https://github.com/jonschlinkert) -* [twitter/jonschlinkert](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 February 24, 2018._ \ No newline at end of file diff --git a/node_modules/to-regex/index.js b/node_modules/to-regex/index.js deleted file mode 100644 index a87d015..0000000 --- a/node_modules/to-regex/index.js +++ /dev/null @@ -1,155 +0,0 @@ -'use strict'; - -var safe = require('safe-regex'); -var define = require('define-property'); -var extend = require('extend-shallow'); -var not = require('regex-not'); -var MAX_LENGTH = 1024 * 64; - -/** - * Session cache - */ - -var cache = {}; - -/** - * Create a regular expression from the given `pattern` string. - * - * @param {String|RegExp} `pattern` Pattern can be a string or regular expression. - * @param {Object} `options` - * @return {RegExp} - * @api public - */ - -module.exports = function(patterns, options) { - if (!Array.isArray(patterns)) { - return makeRe(patterns, options); - } - return makeRe(patterns.join('|'), options); -}; - -/** - * Create a regular expression from the given `pattern` string. - * - * @param {String|RegExp} `pattern` Pattern can be a string or regular expression. - * @param {Object} `options` - * @return {RegExp} - * @api public - */ - -function makeRe(pattern, options) { - if (pattern instanceof RegExp) { - return pattern; - } - - if (typeof pattern !== 'string') { - throw new TypeError('expected a string'); - } - - if (pattern.length > MAX_LENGTH) { - throw new Error('expected pattern to be less than ' + MAX_LENGTH + ' characters'); - } - - var key = pattern; - // do this before shallow cloning options, it's a lot faster - if (!options || (options && options.cache !== false)) { - key = createKey(pattern, options); - - if (cache.hasOwnProperty(key)) { - return cache[key]; - } - } - - var opts = extend({}, options); - if (opts.contains === true) { - if (opts.negate === true) { - opts.strictNegate = false; - } else { - opts.strict = false; - } - } - - if (opts.strict === false) { - opts.strictOpen = false; - opts.strictClose = false; - } - - var open = opts.strictOpen !== false ? '^' : ''; - var close = opts.strictClose !== false ? '$' : ''; - var flags = opts.flags || ''; - var regex; - - if (opts.nocase === true && !/i/.test(flags)) { - flags += 'i'; - } - - try { - if (opts.negate || typeof opts.strictNegate === 'boolean') { - pattern = not.create(pattern, opts); - } - - var str = open + '(?:' + pattern + ')' + close; - regex = new RegExp(str, flags); - - if (opts.safe === true && safe(regex) === false) { - throw new Error('potentially unsafe regular expression: ' + regex.source); - } - - } catch (err) { - if (opts.strictErrors === true || opts.safe === true) { - err.key = key; - err.pattern = pattern; - err.originalOptions = options; - err.createdOptions = opts; - throw err; - } - - try { - regex = new RegExp('^' + pattern.replace(/(\W)/g, '\\$1') + '$'); - } catch (err) { - regex = /.^/; //<= match nothing - } - } - - if (opts.cache !== false) { - memoize(regex, key, pattern, opts); - } - return regex; -} - -/** - * Memoize generated regex. This can result in dramatic speed improvements - * and simplify debugging by adding options and pattern to the regex. It can be - * disabled by passing setting `options.cache` to false. - */ - -function memoize(regex, key, pattern, options) { - define(regex, 'cached', true); - define(regex, 'pattern', pattern); - define(regex, 'options', options); - define(regex, 'key', key); - cache[key] = regex; -} - -/** - * Create the key to use for memoization. The key is generated - * by iterating over the options and concatenating key-value pairs - * to the pattern string. - */ - -function createKey(pattern, options) { - if (!options) return pattern; - var key = pattern; - for (var prop in options) { - if (options.hasOwnProperty(prop)) { - key += ';' + prop + '=' + String(options[prop]); - } - } - return key; -} - -/** - * Expose `makeRe` - */ - -module.exports.makeRe = makeRe; diff --git a/node_modules/to-regex/node_modules/extend-shallow/LICENSE b/node_modules/to-regex/node_modules/extend-shallow/LICENSE deleted file mode 100644 index 99c9369..0000000 --- a/node_modules/to-regex/node_modules/extend-shallow/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014-2015, 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/to-regex/node_modules/extend-shallow/README.md b/node_modules/to-regex/node_modules/extend-shallow/README.md deleted file mode 100644 index dee226f..0000000 --- a/node_modules/to-regex/node_modules/extend-shallow/README.md +++ /dev/null @@ -1,97 +0,0 @@ -# extend-shallow [![NPM version](https://img.shields.io/npm/v/extend-shallow.svg?style=flat)](https://www.npmjs.com/package/extend-shallow) [![NPM monthly downloads](https://img.shields.io/npm/dm/extend-shallow.svg?style=flat)](https://npmjs.org/package/extend-shallow) [![NPM total downloads](https://img.shields.io/npm/dt/extend-shallow.svg?style=flat)](https://npmjs.org/package/extend-shallow) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/extend-shallow.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/extend-shallow) - -> Extend an object with the properties of additional objects. node.js/javascript util. - -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 extend-shallow -``` - -## Usage - -```js -var extend = require('extend-shallow'); - -extend({a: 'b'}, {c: 'd'}) -//=> {a: 'b', c: 'd'} -``` - -Pass an empty object to shallow clone: - -```js -var obj = {}; -extend(obj, {a: 'b'}, {c: 'd'}) -//=> {a: 'b', c: 'd'} -``` - -## 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: - -* [extend-shallow](https://www.npmjs.com/package/extend-shallow): Extend an object with the properties of additional objects. node.js/javascript util. | [homepage](https://github.com/jonschlinkert/extend-shallow "Extend an object with the properties of additional objects. node.js/javascript util.") -* [for-in](https://www.npmjs.com/package/for-in): Iterate over the own and inherited enumerable properties of an object, and return an object… [more](https://github.com/jonschlinkert/for-in) | [homepage](https://github.com/jonschlinkert/for-in "Iterate over the own and inherited enumerable properties of an object, and return an object with properties that evaluate to true from the callback. Exit early by returning `false`. JavaScript/Node.js") -* [for-own](https://www.npmjs.com/package/for-own): Iterate over the own enumerable properties of an object, and return an object with properties… [more](https://github.com/jonschlinkert/for-own) | [homepage](https://github.com/jonschlinkert/for-own "Iterate over the own enumerable properties of an object, and return an object with properties that evaluate to true from the callback. Exit early by returning `false`. JavaScript/Node.js.") -* [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.") -* [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** | -| --- | --- | -| 33 | [jonschlinkert](https://github.com/jonschlinkert) | -| 1 | [pdehaan](https://github.com/pdehaan) | - -### Author - -**Jon Schlinkert** - -* [github/jonschlinkert](https://github.com/jonschlinkert) -* [twitter/jonschlinkert](https://twitter.com/jonschlinkert) - -### License - -Copyright © 2017, [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 November 19, 2017._ \ No newline at end of file diff --git a/node_modules/to-regex/node_modules/extend-shallow/index.js b/node_modules/to-regex/node_modules/extend-shallow/index.js deleted file mode 100644 index c9582f8..0000000 --- a/node_modules/to-regex/node_modules/extend-shallow/index.js +++ /dev/null @@ -1,60 +0,0 @@ -'use strict'; - -var isExtendable = require('is-extendable'); -var assignSymbols = require('assign-symbols'); - -module.exports = Object.assign || function(obj/*, objects*/) { - if (obj === null || typeof obj === 'undefined') { - throw new TypeError('Cannot convert undefined or null to object'); - } - if (!isObject(obj)) { - obj = {}; - } - for (var i = 1; i < arguments.length; i++) { - var val = arguments[i]; - if (isString(val)) { - val = toObject(val); - } - if (isObject(val)) { - assign(obj, val); - assignSymbols(obj, val); - } - } - return obj; -}; - -function assign(a, b) { - for (var key in b) { - if (hasOwn(b, key)) { - a[key] = b[key]; - } - } -} - -function isString(val) { - return (val && typeof val === 'string'); -} - -function toObject(str) { - var obj = {}; - for (var i in str) { - obj[i] = str[i]; - } - return obj; -} - -function isObject(val) { - return (val && typeof val === 'object') || isExtendable(val); -} - -/** - * Returns true if the given `key` is an own property of `obj`. - */ - -function hasOwn(obj, key) { - return Object.prototype.hasOwnProperty.call(obj, key); -} - -function isEnum(obj, key) { - return Object.prototype.propertyIsEnumerable.call(obj, key); -} diff --git a/node_modules/to-regex/node_modules/extend-shallow/package.json b/node_modules/to-regex/node_modules/extend-shallow/package.json deleted file mode 100644 index e5e9105..0000000 --- a/node_modules/to-regex/node_modules/extend-shallow/package.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "name": "extend-shallow", - "description": "Extend an object with the properties of additional objects. node.js/javascript util.", - "version": "3.0.2", - "homepage": "https://github.com/jonschlinkert/extend-shallow", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "contributors": [ - "Jon Schlinkert (http://twitter.com/jonschlinkert)", - "Peter deHaan (http://about.me/peterdehaan)" - ], - "repository": "jonschlinkert/extend-shallow", - "bugs": { - "url": "https://github.com/jonschlinkert/extend-shallow/issues" - }, - "license": "MIT", - "files": [ - "index.js" - ], - "main": "index.js", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "devDependencies": { - "array-slice": "^1.0.0", - "benchmarked": "^2.0.0", - "for-own": "^1.0.0", - "gulp-format-md": "^1.0.0", - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.1", - "minimist": "^1.2.0", - "mocha": "^3.5.3", - "object-assign": "^4.1.1" - }, - "keywords": [ - "assign", - "clone", - "extend", - "merge", - "obj", - "object", - "object-assign", - "object.assign", - "prop", - "properties", - "property", - "props", - "shallow", - "util", - "utility", - "utils", - "value" - ], - "verb": { - "toc": false, - "layout": "default", - "tasks": [ - "readme" - ], - "related": { - "list": [ - "extend-shallow", - "for-in", - "for-own", - "is-plain-object", - "isobject", - "kind-of" - ] - }, - "plugins": [ - "gulp-format-md" - ], - "lint": { - "reflinks": true - } - } -} diff --git a/node_modules/to-regex/node_modules/is-extendable/LICENSE b/node_modules/to-regex/node_modules/is-extendable/LICENSE deleted file mode 100644 index c0d7f13..0000000 --- a/node_modules/to-regex/node_modules/is-extendable/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015-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. \ No newline at end of file diff --git a/node_modules/to-regex/node_modules/is-extendable/README.md b/node_modules/to-regex/node_modules/is-extendable/README.md deleted file mode 100644 index 875b56a..0000000 --- a/node_modules/to-regex/node_modules/is-extendable/README.md +++ /dev/null @@ -1,88 +0,0 @@ -# is-extendable [![NPM version](https://img.shields.io/npm/v/is-extendable.svg?style=flat)](https://www.npmjs.com/package/is-extendable) [![NPM monthly downloads](https://img.shields.io/npm/dm/is-extendable.svg?style=flat)](https://npmjs.org/package/is-extendable) [![NPM total downloads](https://img.shields.io/npm/dt/is-extendable.svg?style=flat)](https://npmjs.org/package/is-extendable) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/is-extendable.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/is-extendable) - -> Returns true if a value is a plain object, array or function. - -## Install - -Install with [npm](https://www.npmjs.com/): - -```sh -$ npm install --save is-extendable -``` - -## Usage - -```js -var isExtendable = require('is-extendable'); -``` - -Returns true if the value is any of the following: - -* array -* plain object -* function - -## Notes - -All objects in JavaScript can have keys, but it's a pain to check for this, since we ether need to verify that the value is not `null` or `undefined` and: - -* the value is not a primitive, or -* that the object is a plain object, function or array - -Also note that an `extendable` object is not the same as an [extensible object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/isExtensible), which is one that (in es6) is not sealed, frozen, or marked as non-extensible using `preventExtensions`. - -## Release history - -### v1.0.0 - 2017/07/20 - -**Breaking changes** - -* No longer considers date, regex or error objects to be extendable - -## About - -### Related projects - -* [assign-deep](https://www.npmjs.com/package/assign-deep): Deeply assign the enumerable properties and/or es6 Symbol properies of source objects to the target… [more](https://github.com/jonschlinkert/assign-deep) | [homepage](https://github.com/jonschlinkert/assign-deep "Deeply assign the enumerable properties and/or es6 Symbol properies of source objects to the target (first) object.") -* [is-equal-shallow](https://www.npmjs.com/package/is-equal-shallow): Does a shallow comparison of two objects, returning false if the keys or values differ. | [homepage](https://github.com/jonschlinkert/is-equal-shallow "Does a shallow comparison of two objects, returning false if the keys or values differ.") -* [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.") -* [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.") - -### Contributing - -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). - -### 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 -``` - -### 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 -``` - -### Author - -**Jon Schlinkert** - -* [github/jonschlinkert](https://github.com/jonschlinkert) -* [twitter/jonschlinkert](https://twitter.com/jonschlinkert) - -### License - -Copyright © 2017, [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 July 20, 2017._ \ No newline at end of file diff --git a/node_modules/to-regex/node_modules/is-extendable/index.d.ts b/node_modules/to-regex/node_modules/is-extendable/index.d.ts deleted file mode 100644 index b96d507..0000000 --- a/node_modules/to-regex/node_modules/is-extendable/index.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export = isExtendable; - -declare function isExtendable(val: any): boolean; - -declare namespace isExtendable {} diff --git a/node_modules/to-regex/node_modules/is-extendable/index.js b/node_modules/to-regex/node_modules/is-extendable/index.js deleted file mode 100644 index a8b26ad..0000000 --- a/node_modules/to-regex/node_modules/is-extendable/index.js +++ /dev/null @@ -1,14 +0,0 @@ -/*! - * is-extendable - * - * Copyright (c) 2015-2017, Jon Schlinkert. - * Released under the MIT License. - */ - -'use strict'; - -var isPlainObject = require('is-plain-object'); - -module.exports = function isExtendable(val) { - return isPlainObject(val) || typeof val === 'function' || Array.isArray(val); -}; diff --git a/node_modules/to-regex/node_modules/is-extendable/package.json b/node_modules/to-regex/node_modules/is-extendable/package.json deleted file mode 100644 index 2aaab65..0000000 --- a/node_modules/to-regex/node_modules/is-extendable/package.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "name": "is-extendable", - "description": "Returns true if a value is a plain object, array or function.", - "version": "1.0.1", - "homepage": "https://github.com/jonschlinkert/is-extendable", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "repository": "jonschlinkert/is-extendable", - "bugs": { - "url": "https://github.com/jonschlinkert/is-extendable/issues" - }, - "license": "MIT", - "files": [ - "index.js", - "index.d.ts" - ], - "main": "index.js", - "types": "index.d.ts", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "devDependencies": { - "gulp-format-md": "^1.0.0", - "mocha": "^3.4.2" - }, - "keywords": [ - "array", - "assign", - "check", - "date", - "extend", - "extendable", - "extensible", - "function", - "is", - "object", - "regex", - "test" - ], - "verb": { - "related": { - "list": [ - "assign-deep", - "is-equal-shallow", - "is-plain-object", - "isobject", - "kind-of" - ] - }, - "toc": false, - "layout": "default", - "tasks": [ - "readme" - ], - "plugins": [ - "gulp-format-md" - ], - "lint": { - "reflinks": true - } - } -} diff --git a/node_modules/to-regex/package.json b/node_modules/to-regex/package.json deleted file mode 100644 index e4277d3..0000000 --- a/node_modules/to-regex/package.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "name": "to-regex", - "description": "Generate a regex from a string or array of strings.", - "version": "3.0.2", - "homepage": "https://github.com/jonschlinkert/to-regex", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "repository": "jonschlinkert/to-regex", - "bugs": { - "url": "https://github.com/jonschlinkert/to-regex/issues" - }, - "license": "MIT", - "files": [ - "index.js" - ], - "main": "index.js", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "devDependencies": { - "gulp-format-md": "^1.0.0", - "mocha": "^3.5.3" - }, - "keywords": [ - "match", - "regex", - "regular expression", - "test", - "to" - ], - "verb": { - "toc": { - "method": "preWrite" - }, - "layout": "default", - "tasks": [ - "readme" - ], - "plugins": [ - "gulp-format-md" - ], - "related": { - "list": [ - "has-glob", - "is-glob", - "path-regex", - "to-regex-range" - ] - }, - "lint": { - "reflinks": true - } - } -} diff --git a/node_modules/toidentifier/HISTORY.md b/node_modules/toidentifier/HISTORY.md deleted file mode 100644 index cb7cc89..0000000 --- a/node_modules/toidentifier/HISTORY.md +++ /dev/null @@ -1,9 +0,0 @@ -1.0.1 / 2021-11-14 -================== - - * pref: enable strict mode - -1.0.0 / 2018-07-09 -================== - - * Initial release diff --git a/node_modules/toidentifier/LICENSE b/node_modules/toidentifier/LICENSE deleted file mode 100644 index de22d15..0000000 --- a/node_modules/toidentifier/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2016 Douglas Christopher Wilson - -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/toidentifier/README.md b/node_modules/toidentifier/README.md deleted file mode 100644 index 57e8a78..0000000 --- a/node_modules/toidentifier/README.md +++ /dev/null @@ -1,61 +0,0 @@ -# toidentifier - -[![NPM Version][npm-image]][npm-url] -[![NPM Downloads][downloads-image]][downloads-url] -[![Build Status][github-actions-ci-image]][github-actions-ci-url] -[![Test Coverage][codecov-image]][codecov-url] - -> Convert a string of words to a JavaScript identifier - -## Install - -This is a [Node.js](https://nodejs.org/en/) module available through the -[npm registry](https://www.npmjs.com/). Installation is done using the -[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): - -```bash -$ npm install toidentifier -``` - -## Example - -```js -var toIdentifier = require('toidentifier') - -console.log(toIdentifier('Bad Request')) -// => "BadRequest" -``` - -## API - -This CommonJS module exports a single default function: `toIdentifier`. - -### toIdentifier(string) - -Given a string as the argument, it will be transformed according to -the following rules and the new string will be returned: - -1. Split into words separated by space characters (`0x20`). -2. Upper case the first character of each word. -3. Join the words together with no separator. -4. Remove all non-word (`[0-9a-z_]`) characters. - -## License - -[MIT](LICENSE) - -[codecov-image]: https://img.shields.io/codecov/c/github/component/toidentifier.svg -[codecov-url]: https://codecov.io/gh/component/toidentifier -[downloads-image]: https://img.shields.io/npm/dm/toidentifier.svg -[downloads-url]: https://npmjs.org/package/toidentifier -[github-actions-ci-image]: https://img.shields.io/github/workflow/status/component/toidentifier/ci/master?label=ci -[github-actions-ci-url]: https://github.com/component/toidentifier?query=workflow%3Aci -[npm-image]: https://img.shields.io/npm/v/toidentifier.svg -[npm-url]: https://npmjs.org/package/toidentifier - - -## - -[npm]: https://www.npmjs.com/ - -[yarn]: https://yarnpkg.com/ diff --git a/node_modules/toidentifier/index.js b/node_modules/toidentifier/index.js deleted file mode 100644 index 9295d02..0000000 --- a/node_modules/toidentifier/index.js +++ /dev/null @@ -1,32 +0,0 @@ -/*! - * toidentifier - * Copyright(c) 2016 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict' - -/** - * Module exports. - * @public - */ - -module.exports = toIdentifier - -/** - * Trasform the given string into a JavaScript identifier - * - * @param {string} str - * @returns {string} - * @public - */ - -function toIdentifier (str) { - return str - .split(' ') - .map(function (token) { - return token.slice(0, 1).toUpperCase() + token.slice(1) - }) - .join('') - .replace(/[^ _0-9a-z]/gi, '') -} diff --git a/node_modules/toidentifier/package.json b/node_modules/toidentifier/package.json deleted file mode 100644 index 42db1a6..0000000 --- a/node_modules/toidentifier/package.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "toidentifier", - "description": "Convert a string of words to a JavaScript identifier", - "version": "1.0.1", - "author": "Douglas Christopher Wilson ", - "contributors": [ - "Douglas Christopher Wilson ", - "Nick Baugh (http://niftylettuce.com/)" - ], - "repository": "component/toidentifier", - "devDependencies": { - "eslint": "7.32.0", - "eslint-config-standard": "14.1.1", - "eslint-plugin-import": "2.25.3", - "eslint-plugin-markdown": "2.2.1", - "eslint-plugin-node": "11.1.0", - "eslint-plugin-promise": "4.3.1", - "eslint-plugin-standard": "4.1.0", - "mocha": "9.1.3", - "nyc": "15.1.0" - }, - "engines": { - "node": ">=0.6" - }, - "license": "MIT", - "files": [ - "HISTORY.md", - "LICENSE", - "index.js" - ], - "scripts": { - "lint": "eslint .", - "test": "mocha --reporter spec --bail --check-leaks test/", - "test-ci": "nyc --reporter=lcov --reporter=text npm test", - "test-cov": "nyc --reporter=html --reporter=text npm test", - "version": "node scripts/version-history.js && git add HISTORY.md" - } -} diff --git a/node_modules/union-value/LICENSE b/node_modules/union-value/LICENSE deleted file mode 100644 index 83b56e7..0000000 --- a/node_modules/union-value/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015-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/union-value/README.md b/node_modules/union-value/README.md deleted file mode 100644 index 1a90ffb..0000000 --- a/node_modules/union-value/README.md +++ /dev/null @@ -1,73 +0,0 @@ -# union-value [![NPM version](https://img.shields.io/npm/v/union-value.svg?style=flat)](https://www.npmjs.com/package/union-value) [![NPM monthly downloads](https://img.shields.io/npm/dm/union-value.svg?style=flat)](https://npmjs.org/package/union-value) [![NPM total downloads](https://img.shields.io/npm/dt/union-value.svg?style=flat)](https://npmjs.org/package/union-value) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/union-value.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/union-value) - -> Set an array of unique values as the property of an object. Supports setting deeply nested properties using using object-paths/dot notation. - -## Install - -Install with [npm](https://www.npmjs.com/): - -```sh -$ npm install --save union-value -``` - -## Usage - -```js -var union = require('union-value'); - -var obj = {}; - -union(obj, 'a.b.c', ['one', 'two']); -union(obj, 'a.b.c', ['three']); - -console.log(obj); -//=> {a: {b: {c: [ 'one', 'two', 'three' ] }}} -``` - -## About - -### Related projects - -* [assign-value](https://www.npmjs.com/package/assign-value): Assign a value or extend a deeply nested property of an object using object path… [more](https://github.com/jonschlinkert/assign-value) | [homepage](https://github.com/jonschlinkert/assign-value "Assign a value or extend a deeply nested property of an object using object path notation.") -* [get-value](https://www.npmjs.com/package/get-value): Use property paths (`a.b.c`) to get a nested value from an object. | [homepage](https://github.com/jonschlinkert/get-value "Use property paths (`a.b.c`) to get a nested value from an object.") -* [has-value](https://www.npmjs.com/package/has-value): Returns true if a value exists, false if empty. Works with deeply nested values using… [more](https://github.com/jonschlinkert/has-value) | [homepage](https://github.com/jonschlinkert/has-value "Returns true if a value exists, false if empty. Works with deeply nested values using object paths.") -* [set-value](https://www.npmjs.com/package/set-value): Create nested values and any intermediaries using dot notation (`'a.b.c'`) paths. | [homepage](https://github.com/jonschlinkert/set-value "Create nested values and any intermediaries using dot notation (`'a.b.c'`) paths.") -* [unset-value](https://www.npmjs.com/package/unset-value): Delete nested properties from an object using dot notation. | [homepage](https://github.com/jonschlinkert/unset-value "Delete nested properties from an object using dot notation.") - -### Contributing - -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). - -### 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 -``` - -### 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 -``` - -### Author - -**Jon Schlinkert** - -* [github/jonschlinkert](https://github.com/jonschlinkert) -* [twitter/jonschlinkert](https://twitter.com/jonschlinkert) - -### License - -Copyright © 2017, [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.4.2, on February 25, 2017._ \ No newline at end of file diff --git a/node_modules/union-value/index.js b/node_modules/union-value/index.js deleted file mode 100644 index 9c5d8db..0000000 --- a/node_modules/union-value/index.js +++ /dev/null @@ -1,30 +0,0 @@ -'use strict'; - -var isObject = require('is-extendable'); -var union = require('arr-union'); -var get = require('get-value'); -var set = require('set-value'); - -module.exports = function unionValue(obj, prop, value) { - if (!isObject(obj)) { - throw new TypeError('union-value expects the first argument to be an object.'); - } - - if (typeof prop !== 'string') { - throw new TypeError('union-value expects `prop` to be a string.'); - } - - var arr = arrayify(get(obj, prop)); - set(obj, prop, union(arr, arrayify(value))); - return obj; -}; - -function arrayify(val) { - if (val === null || typeof val === 'undefined') { - return []; - } - if (Array.isArray(val)) { - return val; - } - return [val]; -} diff --git a/node_modules/union-value/package.json b/node_modules/union-value/package.json deleted file mode 100644 index 65441f6..0000000 --- a/node_modules/union-value/package.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "name": "union-value", - "description": "Set an array of unique values as the property of an object. Supports setting deeply nested properties using using object-paths/dot notation.", - "version": "1.0.1", - "homepage": "https://github.com/jonschlinkert/union-value", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "repository": "jonschlinkert/union-value", - "bugs": { - "url": "https://github.com/jonschlinkert/union-value/issues" - }, - "license": "MIT", - "files": [ - "index.js" - ], - "main": "index.js", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "devDependencies": { - "gulp-format-md": "^0.1.11", - "mocha": "^3.2.0", - "should": "^11.2.0" - }, - "keywords": [ - "array", - "dot", - "get", - "has", - "nested", - "notation", - "object", - "path", - "prop", - "property", - "set", - "union", - "value" - ], - "verb": { - "toc": false, - "layout": "default", - "tasks": [ - "readme" - ], - "plugins": [ - "gulp-format-md" - ], - "related": { - "list": [ - "assign-value", - "get-value", - "has-value", - "set-value", - "unset-value" - ] - }, - "lint": { - "reflinks": true - } - } -} diff --git a/node_modules/unix-crypt-td-js/Makefile b/node_modules/unix-crypt-td-js/Makefile deleted file mode 100644 index 1dbf1c6..0000000 --- a/node_modules/unix-crypt-td-js/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -all: unix-crypt-td.min.js - -unix-crypt-td.min.js: src/unix-crypt-td.js - google-closure-compiler --js src/unix-crypt-td.js --compilation_level ADVANCED_OPTIMIZATIONS > unix-crypt-td.min.js diff --git a/node_modules/unix-crypt-td-js/README.markdown b/node_modules/unix-crypt-td-js/README.markdown deleted file mode 100644 index 61b2f60..0000000 --- a/node_modules/unix-crypt-td-js/README.markdown +++ /dev/null @@ -1,51 +0,0 @@ -Unix crypt(3) Javascript Implementation -======================================= - -Straightforward implementaiton of the DES-based Unix crypt(3) hash, based largely on crypt.c in the Seventh Edition Unix distribution released by Caldera Systems under a BSD-style license. - -Building the minified version ------------------------------ - -Running the Makefile requires the [Google Closure Compiler](http://code.google.com/closure/compiler/) -installed on your path. Alternatively, you may use any JS Minifier you want. - -Usage ------ - -Simple examples: - - unixCryptTD('foob' /* pw */, 'ar' /* salt */) // === 'arlEKn0OzVJn.' - unixCryptTD([102, 111, 111, 98], 'ar') // === 'arlEKn0OzVJn.' - unixCryptTD([102, 111, 111, 98], [97, 114] // === 'arlEKn0OzVJn.' - unixCryptTD('foob', 'ar', true /* returnBytes */) // === [97, 114, 108, 69, - // 75, 110, 48, 79, 122, 86, 74, 110, 46] - -Testing -------- - -Just run `npm test` - -Author ------- - -Tim Joseph Dumol <[tim@timdumol.com](mailto:tim@timdumol.com)> - -Licensing ---------- - -BSD License: - -Copyright(C) Tim Joseph F. Dumol 2011. All rights reserved. -Derived from crypt.c in the Seventh Edition Unix distribution by Caldera International, which is Copyright(C) Caldera International Inc. 2001-2002. All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - -Redistributions of source code and documentation must retain the above copyright notice, this list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -* All advertising materials mentioning features or use of this software must display the following acknowledgement: This product includes software developed or owned by Caldera International, Inc. - -* Neither the name of Caldera International, Inc. nor the names of other contributors may be used to endorse or promote products derived from this software without specific prior written permission. - -USE OF THE SOFTWARE PROVIDED FOR UNDER THIS LICENSE BY CALDERA INTERNATIONAL, INC. AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CALDERA INTERNATIONAL, INC. BE LIABLE FOR ANY DIRECT, INDIRECT INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,e BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/node_modules/unix-crypt-td-js/package.json b/node_modules/unix-crypt-td-js/package.json deleted file mode 100644 index d498800..0000000 --- a/node_modules/unix-crypt-td-js/package.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "unix-crypt-td-js", - "version": "1.1.4", - "description": "Javascript implementation of the Unix crypt(3) DES-based hash", - "main": "unix-crypt-td.min.js", - "directories": { - "test": "test" - }, - "scripts": { - "test": "mocha" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/TimDumol/unix-crypt-td-js.git" - }, - "keywords": [ - "crypt" - ], - "author": "Tim Dumol ", - "license": "BSD-3-Clause", - "bugs": { - "url": "https://github.com/TimDumol/unix-crypt-td-js/issues" - }, - "homepage": "https://github.com/TimDumol/unix-crypt-td-js#readme", - "devDependencies": { - "mocha": "^6.2.2" - } -} diff --git a/node_modules/unix-crypt-td-js/src/unix-crypt-td.js b/node_modules/unix-crypt-td-js/src/unix-crypt-td.js deleted file mode 100644 index 51cf47f..0000000 --- a/node_modules/unix-crypt-td-js/src/unix-crypt-td.js +++ /dev/null @@ -1,464 +0,0 @@ -'use strict'; -/** - * Unix crypt(3) Javascript Implementation - * - * Straightforward implementaiton of the DES-based Unix crypt(3) hash, based largely - * on crypt.c in the Seventh Edition Unix distribution released by Caldera Systems - * under a BSD-style license. - * - * @author Tim Joseph Dumol - */ - -/* -Legalese: - -Copyright(C) Tim Joseph F. Dumol 2011. All rights reserved. -Derived from crypt.c in the Seventh Edition Unix distribution by -Caldera International, which is Copyright(C) Caldera International -Inc. 2001-2002. All rights reserved. - -Redistribution and use in source and binary forms, -with or without modification, are permitted provided that the -following conditions are met: - -Redistributions of source code and documentation must retain the above -copyright notice, this list of conditions and the following -disclaimer. - -* Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -* All advertising materials mentioning features or use of this software - must display the following acknowledgement: This product includes - software developed or owned by Caldera International, Inc. - -* Neither the name of Caldera International, Inc. nor the names of - other contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -USE OF THE SOFTWARE PROVIDED FOR UNDER THIS LICENSE BY CALDERA -INTERNATIONAL, INC. AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR -IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL CALDERA INTERNATIONAL, INC. BE LIABLE -FOR ANY DIRECT, INDIRECT INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE -OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN -IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - -/** - * Implements the Unix crypt(3) DES-based hash. - * - * @param {Array.|string} pw The string to hash - * @param {Array.|string} salt The salt to use (two character string from [a-zA-Z0-9./]). - * @param {boolean=} returnBytes (optional) If true, return an array of bytes; - * otherwise, return a string. - */ -var unixCryptTD = (function() { - /* - * Initial permutation, - */ - var IP = [ - 58,50,42,34,26,18,10, 2, - 60,52,44,36,28,20,12, 4, - 62,54,46,38,30,22,14, 6, - 64,56,48,40,32,24,16, 8, - 57,49,41,33,25,17, 9, 1, - 59,51,43,35,27,19,11, 3, - 61,53,45,37,29,21,13, 5, - 63,55,47,39,31,23,15, 7 - ]; - - /* - * Final permutation, FP = IP^(-1) - */ - var FP =[ - 40, 8,48,16,56,24,64,32, - 39, 7,47,15,55,23,63,31, - 38, 6,46,14,54,22,62,30, - 37, 5,45,13,53,21,61,29, - 36, 4,44,12,52,20,60,28, - 35, 3,43,11,51,19,59,27, - 34, 2,42,10,50,18,58,26, - 33, 1,41, 9,49,17,57,25 - ]; - - /* - * Permuted-choice 1 from the key bits - * to yield C and D. - * Note that bits 8,16... are left out: - * They are intended for a parity check. - */ - var PC1_C = [ - 57,49,41,33,25,17, 9, - 1,58,50,42,34,26,18, - 10, 2,59,51,43,35,27, - 19,11, 3,60,52,44,36 - ]; - - var PC1_D = [ - 63,55,47,39,31,23,15, - 7,62,54,46,38,30,22, - 14, 6,61,53,45,37,29, - 21,13, 5,28,20,12, 4 - ]; - - /* - * Sequence of shifts used for the key schedule. - */ - var shifts =[ - 1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1 - ]; - - /* - * Permuted-choice 2, to pick out the bits from - * the CD array that generate the key schedule. - */ - var PC2_C = [ - 14,17,11,24, 1, 5, - 3,28,15, 6,21,10, - 23,19,12, 4,26, 8, - 16, 7,27,20,13, 2 - ]; - - var PC2_D = [ - 41,52,31,37,47,55, - 30,40,51,45,33,48, - 44,49,39,56,34,53, - 46,42,50,36,29,32 - ]; - - /* - * The C and D arrays used to calculate the key schedule. - */ - - var C = []; - var D = []; - /* - * The key schedule. - * Generated from the key. - */ - var KS = []; - for (var i = 0; i < 16; ++i) { - KS[i] = []; - } - - /* - * Set up the key schedule from the key. - */ - - function setkey(key) { - var i, j, k, t; - - /* - * First, generate C and D by permuting - * the key. The low order bit of each - * 8-bit char is not used, so C and D are only 28 - * bits apiece. - */ - for (i=0; i<28; i++) { - C[i] = key[PC1_C[i]-1]; - D[i] = key[PC1_D[i]-1]; - } - /* - * To generate Ki, rotate C and D according - * to schedule and pick up a permutation - * using PC2. - */ - for (i=0; i<16; i++) { - /* - * rotate. - */ - for (k=0; k>3)&1; - f[t+1] = (k>>2)&1; - f[t+2] = (k>>1)&1; - f[t+3] = (k>>0)&1; - } - /* - * The new R is L ^ f(R, K). - * The f here has to be permuted first, though. - */ - for (j=0; j<32; j++) - R[j] = L[j] ^ f[P[j]-1]; - /* - * Finally, the new L (the original R) - * is copied back. - */ - for (j=0; j<32; j++) - L[j] = tempL[j]; - } - /* - * The output L and R are reversed. - */ - for (j=0; j<32; j++) { - t = L[j]; - L[j] = R[j]; - R[j] = t; - } - /* - * The final output - * gets the inverse permutation of the very original. - */ - for (j=0; j<32; ++j) { - perm[j] = L[j]; - perm[j+32] = R[j]; - } - for (j=0; j<64; j++) { - block[j] = perm[FP[j]-1]; - } - } - - /** - * Transform a string to an array of bytes - */ - var strToBytes = function(str) { - var i, x = []; - for (i = 0; i < str.length; ++i) { - x[i] = str.charCodeAt(i); - } - return x - }; - - var bytesToStr = function(bytes) { - return String.fromCharCode.apply(String, bytes); - } - - return function crypt(pw, salt, returnBytes) { - if (typeof(pw) === 'string') pw = strToBytes(pw); - if (typeof(salt) === 'string') salt = strToBytes(salt); - - var i, j, k, c, temp; - var block = [], iobuf = []; - for(i=0; i<66; i++) - block[i] = 0; - for(i=0, k=0; (c= pw[k]) && i<64; ++k){ - for(j=0; j<7; j++, i++) - block[i] = (c>>(6-j)) & 1; - i++; - } - - setkey(block); - - for(i=0; i<66; i++) - block[i] = 0; - - for(i=0;i<48;i++) - E[i] = e[i]; - - for(i=0, k=0;i<2;i++, ++k){ - c = salt[k]; - iobuf[i] = c; - if(c>'Z'.charCodeAt(0)) c -= 6; - if(c>'9'.charCodeAt(0)) c -= 7; - c -= '.'.charCodeAt(0); - for(j=0;j<6;j++){ - if((c>>j) & 1){ - temp = E[6*i+j]; - E[6*i+j] = E[6*i+j+24]; - E[6*i+j+24] = temp; - } - } - } - - for(i=0; i<25; i++) - encrypt(block,0); - - for(i=0; i<11; i++){ - c = 0; - for(j=0; j<6; j++){ - c <<= 1; - c |= block[6*i+j]; - } - c += '.'.charCodeAt(0); - if(c>'9'.charCodeAt(0)) c += 7; - if(c>'Z'.charCodeAt(0)) c += 6; - iobuf[i+2] = c; - } - if(iobuf[1]==0) - iobuf[1] = iobuf[0]; - - if (returnBytes) return(iobuf); - else return bytesToStr(iobuf); - } -})(); - -if (typeof(module) !== "undefined" && module != null) { - module["exports"] = unixCryptTD; -} -if (typeof(window) !== "undefined" && window != null) { - window["unixCryptTD"] = unixCryptTD; -} diff --git a/node_modules/unix-crypt-td-js/test/test.js b/node_modules/unix-crypt-td-js/test/test.js deleted file mode 100644 index 938927f..0000000 --- a/node_modules/unix-crypt-td-js/test/test.js +++ /dev/null @@ -1,13 +0,0 @@ -/** Tests for Unix Crypt **/ -let assert = require('assert'); -let unixCryptTD = require('../src/unix-crypt-td.js'); - -describe('unixCryptTD', function() { - it('should equal output of crypt(3)', function() { - assert.equal(unixCryptTD('foo', 'ba'), 'ba4TuD1iozTxw'); - assert.equal(unixCryptTD('random long string', 'hi'), 'hib8W/d4WOlU.'); - assert.equal(unixCryptTD('foob', 'ar'), 'arlEKn0OzVJn.'); - assert.equal(unixCryptTD('Hello World! This is Unix crypt(3)!', 'ux'), - 'uxNS5oJDUz4Sc'); - }); -}); diff --git a/node_modules/unix-crypt-td-js/unix-crypt-td.min.js b/node_modules/unix-crypt-td-js/unix-crypt-td.min.js deleted file mode 100644 index fb56b1d..0000000 --- a/node_modules/unix-crypt-td-js/unix-crypt-td.min.js +++ /dev/null @@ -1,8 +0,0 @@ -var z=function(){function x(e){var a,t=[];for(a=0;aw;++w)u[w]=[];var p=[],H=[32,1,2,3,4,5,4,5,6,7,8,9,8,9,10,11,12,13,12,13,14,15,16,17,16,17,18,19,20,21,20,21,22,23,24,25,24,25,26,27,28,29,28,29,30,31,32,1], -I=[[14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,7,0,15,7,4,14,2,13,1,10,6,12,11,9,5,3,8,4,1,14,8,13,6,2,11,15,12,9,7,3,10,5,0,15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13],[15,1,8,14,6,11,3,4,9,7,2,13,12,0,5,10,3,13,4,7,15,2,8,14,12,0,1,10,6,9,11,5,0,14,7,11,10,4,13,1,5,8,12,6,9,3,2,15,13,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9],[10,0,9,14,6,3,15,5,1,13,12,7,11,4,2,8,13,7,0,9,3,4,6,10,2,8,5,14,12,11,15,1,13,6,4,9,8,15,3,0,11,1,2,12,5,10,14,7,1,10,13,0,6,9,8,7,4,15,14,3,11,5,2,12],[7,13,14,3,0,6,9,10,1,2,8,5,11,12,4, -15,13,8,11,5,6,15,0,3,4,7,2,12,1,10,14,9,10,6,9,0,12,11,7,13,15,1,3,14,5,2,8,4,3,15,0,6,10,1,13,8,9,4,5,11,12,7,2,14],[2,12,4,1,7,10,11,6,8,5,3,15,13,0,14,9,14,11,2,12,4,7,13,1,5,0,15,10,3,9,8,6,4,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14,11,8,12,7,1,14,2,13,6,15,0,9,10,4,5,3],[12,1,10,15,9,2,6,8,0,13,3,4,14,7,5,11,10,15,4,2,7,12,9,5,6,1,13,14,0,11,3,8,9,14,15,5,2,8,12,3,7,0,4,10,1,13,11,6,4,3,2,12,9,5,15,10,11,14,1,7,6,0,8,13],[4,11,2,14,15,0,8,13,3,12,9,7,5,10,6,1,13,0,11,7,4,9,1,10,14,3,5,12,2,15,8, -6,1,4,11,13,12,3,7,14,10,15,6,8,0,5,9,2,6,11,13,8,1,4,10,7,9,5,0,15,14,2,3,12],[13,2,8,4,6,15,11,1,10,9,3,14,5,0,12,7,1,15,13,8,10,3,7,4,12,5,6,11,0,14,9,2,7,11,4,1,9,12,14,2,0,6,10,13,15,3,5,8,2,1,14,7,4,10,8,13,15,12,9,0,3,5,6,11]],J=[16,7,20,21,29,12,28,17,1,15,23,26,5,18,31,10,2,8,24,14,32,27,3,9,19,13,30,6,22,11,4,25],q=[],g=[],y=[[]],r=[],h=[];return function(e,a,t){"string"===typeof e&&(e=x(e));"string"===typeof a&&(a=x(a));var b,c,f,d,k=[],l=[];for(b=0;66>b;b++)k[b]=0;for(f=b=0;(d=e[f])&& -64>b;++f){for(c=0;7>c;c++,b++)k[b]=d>>6-c&1;b++}for(b=0;28>b;b++)m[b]=k[C[b]-1],n[b]=k[D[b]-1];for(b=0;16>b;b++){for(f=0;fc;c++)m[c]=m[c+1];m[27]=d;d=n[0];for(c=0;27>c;c++)n[c]=n[c+1];n[27]=d}for(c=0;24>c;c++)u[b][c]=m[F[c]-1],u[b][c+24]=n[G[c]-28-1]}for(b=0;66>b;b++)k[b]=0;for(b=0;48>b;b++)p[b]=H[b];for(f=b=0;2>b;b++,++f)for(d=a[f],l[b]=d,90c;c++)d>>c&1&&(e=p[6*b+c],p[6*b+c]=p[6*b+c+24],p[6*b+c+24]=e);for(b=0;25>b;b++){f=k;d=[];for(a= -0;64>a;a++)d[a]=f[A[a]-1];for(a=0;32>a;++a)q[a]=d[a],g[a]=d[a+32];for(c=0;16>c;c++){e=c;for(a=0;32>a;a++)y[a]=g[a];for(a=0;48>a;a++)h[a]=g[p[a]-1]^u[e][a];for(a=0;8>a;a++){e=6*a;var v=I[a][(h[e]<<5)+(h[e+1]<<3)+(h[e+2]<<2)+(h[e+3]<<1)+(h[e+4]<<0)+(h[e+5]<<4)];e=4*a;r[e]=v>>3&1;r[e+1]=v>>2&1;r[e+2]=v>>1&1;r[e+3]=v>>0&1}for(a=0;32>a;a++)g[a]=q[a]^r[J[a]-1];for(a=0;32>a;a++)q[a]=y[a]}for(a=0;32>a;a++)e=q[a],q[a]=g[a],g[a]=e;for(a=0;32>a;++a)d[a]=q[a],d[a+32]=g[a];for(a=0;64>a;a++)f[a]=d[B[a]-1]}for(b= -0;11>b;b++){for(c=d=0;6>c;c++)d<<=1,d|=k[6*b+c];d+=46;57 - -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/unpipe/README.md b/node_modules/unpipe/README.md deleted file mode 100644 index e536ad2..0000000 --- a/node_modules/unpipe/README.md +++ /dev/null @@ -1,43 +0,0 @@ -# unpipe - -[![NPM Version][npm-image]][npm-url] -[![NPM Downloads][downloads-image]][downloads-url] -[![Node.js Version][node-image]][node-url] -[![Build Status][travis-image]][travis-url] -[![Test Coverage][coveralls-image]][coveralls-url] - -Unpipe a stream from all destinations. - -## Installation - -```sh -$ npm install unpipe -``` - -## API - -```js -var unpipe = require('unpipe') -``` - -### unpipe(stream) - -Unpipes all destinations from a given stream. With stream 2+, this is -equivalent to `stream.unpipe()`. When used with streams 1 style streams -(typically Node.js 0.8 and below), this module attempts to undo the -actions done in `stream.pipe(dest)`. - -## License - -[MIT](LICENSE) - -[npm-image]: https://img.shields.io/npm/v/unpipe.svg -[npm-url]: https://npmjs.org/package/unpipe -[node-image]: https://img.shields.io/node/v/unpipe.svg -[node-url]: http://nodejs.org/download/ -[travis-image]: https://img.shields.io/travis/stream-utils/unpipe.svg -[travis-url]: https://travis-ci.org/stream-utils/unpipe -[coveralls-image]: https://img.shields.io/coveralls/stream-utils/unpipe.svg -[coveralls-url]: https://coveralls.io/r/stream-utils/unpipe?branch=master -[downloads-image]: https://img.shields.io/npm/dm/unpipe.svg -[downloads-url]: https://npmjs.org/package/unpipe diff --git a/node_modules/unpipe/index.js b/node_modules/unpipe/index.js deleted file mode 100644 index 15c3d97..0000000 --- a/node_modules/unpipe/index.js +++ /dev/null @@ -1,69 +0,0 @@ -/*! - * unpipe - * Copyright(c) 2015 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict' - -/** - * Module exports. - * @public - */ - -module.exports = unpipe - -/** - * Determine if there are Node.js pipe-like data listeners. - * @private - */ - -function hasPipeDataListeners(stream) { - var listeners = stream.listeners('data') - - for (var i = 0; i < listeners.length; i++) { - if (listeners[i].name === 'ondata') { - return true - } - } - - return false -} - -/** - * Unpipe a stream from all destinations. - * - * @param {object} stream - * @public - */ - -function unpipe(stream) { - if (!stream) { - throw new TypeError('argument stream is required') - } - - if (typeof stream.unpipe === 'function') { - // new-style - stream.unpipe() - return - } - - // Node.js 0.8 hack - if (!hasPipeDataListeners(stream)) { - return - } - - var listener - var listeners = stream.listeners('close') - - for (var i = 0; i < listeners.length; i++) { - listener = listeners[i] - - if (listener.name !== 'cleanup' && listener.name !== 'onclose') { - continue - } - - // invoke the listener - listener.call(stream) - } -} diff --git a/node_modules/unpipe/package.json b/node_modules/unpipe/package.json deleted file mode 100644 index a2b7358..0000000 --- a/node_modules/unpipe/package.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "unpipe", - "description": "Unpipe a stream from all destinations", - "version": "1.0.0", - "author": "Douglas Christopher Wilson ", - "license": "MIT", - "repository": "stream-utils/unpipe", - "devDependencies": { - "istanbul": "0.3.15", - "mocha": "2.2.5", - "readable-stream": "1.1.13" - }, - "files": [ - "HISTORY.md", - "LICENSE", - "README.md", - "index.js" - ], - "engines": { - "node": ">= 0.8" - }, - "scripts": { - "test": "mocha --reporter spec --bail --check-leaks test/", - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/", - "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/" - } -} diff --git a/node_modules/unset-value/LICENSE b/node_modules/unset-value/LICENSE deleted file mode 100644 index ec85897..0000000 --- a/node_modules/unset-value/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015, 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/unset-value/README.md b/node_modules/unset-value/README.md deleted file mode 100644 index f0fec3d..0000000 --- a/node_modules/unset-value/README.md +++ /dev/null @@ -1,131 +0,0 @@ -# unset-value [![NPM version](https://img.shields.io/npm/v/unset-value.svg?style=flat)](https://www.npmjs.com/package/unset-value) [![NPM monthly downloads](https://img.shields.io/npm/dm/unset-value.svg?style=flat)](https://npmjs.org/package/unset-value) [![NPM total downloads](https://img.shields.io/npm/dt/unset-value.svg?style=flat)](https://npmjs.org/package/unset-value) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/unset-value.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/unset-value) - -> Delete nested properties from an object using dot notation. - -## Install - -Install with [npm](https://www.npmjs.com/): - -```sh -$ npm install --save unset-value -``` - -## Usage - -```js -var unset = require('unset-value'); - -var obj = {a: {b: {c: 'd', e: 'f'}}}; -unset(obj, 'a.b.c'); -console.log(obj); -//=> {a: {b: {e: 'f'}}}; -``` - -## Examples - -### Updates the object when a property is deleted - -```js -var obj = {a: 'b'}; -unset(obj, 'a'); -console.log(obj); -//=> {} -``` - -### Returns true when a property is deleted - -```js -unset({a: 'b'}, 'a') // true -``` - -### Returns `true` when a property does not exist - -This is consistent with `delete` behavior in that it does not -throw when a property does not exist. - -```js -unset({a: {b: {c: 'd'}}}, 'd') // true -``` - -### delete nested values - -```js -var one = {a: {b: {c: 'd'}}}; -unset(one, 'a.b'); -console.log(one); -//=> {a: {}} - -var two = {a: {b: {c: 'd'}}}; -unset(two, 'a.b.c'); -console.log(two); -//=> {a: {b: {}}} - -var three = {a: {b: {c: 'd', e: 'f'}}}; -unset(three, 'a.b.c'); -console.log(three); -//=> {a: {b: {e: 'f'}}} -``` - -### throws on invalid args - -```js -unset(); -// 'expected an object.' -``` - -## About - -### Related projects - -* [get-value](https://www.npmjs.com/package/get-value): Use property paths (`a.b.c`) to get a nested value from an object. | [homepage](https://github.com/jonschlinkert/get-value "Use property paths (`a.b.c`) to get a nested value from an object.") -* [get-values](https://www.npmjs.com/package/get-values): Return an array of all values from the given object. | [homepage](https://github.com/jonschlinkert/get-values "Return an array of all values from the given object.") -* [omit-value](https://www.npmjs.com/package/omit-value): Omit properties from an object or deeply nested property of an object using object path… [more](https://github.com/jonschlinkert/omit-value) | [homepage](https://github.com/jonschlinkert/omit-value "Omit properties from an object or deeply nested property of an object using object path notation.") -* [put-value](https://www.npmjs.com/package/put-value): Update only existing values from an object, works with dot notation paths like `a.b.c` and… [more](https://github.com/tunnckocore/put-value#readme) | [homepage](https://github.com/tunnckocore/put-value#readme "Update only existing values from an object, works with dot notation paths like `a.b.c` and support deep nesting.") -* [set-value](https://www.npmjs.com/package/set-value): Create nested values and any intermediaries using dot notation (`'a.b.c'`) paths. | [homepage](https://github.com/jonschlinkert/set-value "Create nested values and any intermediaries using dot notation (`'a.b.c'`) paths.") -* [union-value](https://www.npmjs.com/package/union-value): Set an array of unique values as the property of an object. Supports setting deeply… [more](https://github.com/jonschlinkert/union-value) | [homepage](https://github.com/jonschlinkert/union-value "Set an array of unique values as the property of an object. Supports setting deeply nested properties using using object-paths/dot notation.") -* [upsert-value](https://www.npmjs.com/package/upsert-value): Update or set nested values and any intermediaries with dot notation (`'a.b.c'`) paths. | [homepage](https://github.com/doowb/upsert-value "Update or set nested values and any intermediaries with dot notation (`'a.b.c'`) paths.") - -### Contributing - -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). - -### Contributors - -| **Commits** | **Contributor** | -| --- | --- | -| 6 | [jonschlinkert](https://github.com/jonschlinkert) | -| 2 | [wtgtybhertgeghgtwtg](https://github.com/wtgtybhertgeghgtwtg) | - -### 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 -``` - -### 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 -``` - -### Author - -**Jon Schlinkert** - -* [github/jonschlinkert](https://github.com/jonschlinkert) -* [twitter/jonschlinkert](https://twitter.com/jonschlinkert) - -### License - -Copyright © 2017, [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.4.2, on February 25, 2017._ \ No newline at end of file diff --git a/node_modules/unset-value/index.js b/node_modules/unset-value/index.js deleted file mode 100644 index a919010..0000000 --- a/node_modules/unset-value/index.js +++ /dev/null @@ -1,32 +0,0 @@ -/*! - * unset-value - * - * Copyright (c) 2015, 2017, Jon Schlinkert. - * Released under the MIT License. - */ - -'use strict'; - -var isObject = require('isobject'); -var has = require('has-value'); - -module.exports = function unset(obj, prop) { - if (!isObject(obj)) { - throw new TypeError('expected an object.'); - } - if (obj.hasOwnProperty(prop)) { - delete obj[prop]; - return true; - } - - if (has(obj, prop)) { - var segs = prop.split('.'); - var last = segs.pop(); - while (segs.length && segs[segs.length - 1].slice(-1) === '\\') { - last = segs.pop().slice(0, -1) + '.' + last; - } - while (segs.length) obj = obj[prop = segs.shift()]; - return (delete obj[last]); - } - return true; -}; diff --git a/node_modules/unset-value/node_modules/has-value/LICENSE b/node_modules/unset-value/node_modules/has-value/LICENSE deleted file mode 100644 index 39245ac..0000000 --- a/node_modules/unset-value/node_modules/has-value/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -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/unset-value/node_modules/has-value/README.md b/node_modules/unset-value/node_modules/has-value/README.md deleted file mode 100644 index a927633..0000000 --- a/node_modules/unset-value/node_modules/has-value/README.md +++ /dev/null @@ -1,130 +0,0 @@ -# has-value [![NPM version](https://img.shields.io/npm/v/has-value.svg?style=flat)](https://www.npmjs.com/package/has-value) [![NPM downloads](https://img.shields.io/npm/dm/has-value.svg?style=flat)](https://npmjs.org/package/has-value) [![Build Status](https://img.shields.io/travis/jonschlinkert/has-value.svg?style=flat)](https://travis-ci.org/jonschlinkert/has-value) - -> Returns true if a value exists, false if empty. Works with deeply nested values using object paths. - -## Install - -Install with [npm](https://www.npmjs.com/): - -```sh -$ npm install has-value --save -``` - -**Works for:** - -* booleans -* functions -* numbers (pass `true` as the last arg to treat zero as a value instead of falsey) -* strings -* nulls -* object -* arrays - -## Usage - -Works with nested object paths or a single value: - -```js -var hasValue = require('has-value'); - -hasValue({a: {b: {c: 'foo'}}} 'a.b.c'); -//=> true - -hasValue('a'); -//=> true - -hasValue(''); -//=> false - -hasValue(1); -//=> true - -hasValue(0); -//=> false - -hasValue(0, true); // pass `true` as the last arg to treat zero as a value -//=> true - -hasValue({a: 'a'}}); -//=> true - -hasValue({}}); -//=> false - -hasValue(['a']); -//=> true - -hasValue([]); -//=> false - -hasValue(function(foo) {}); // function length/arity -//=> true - -hasValue(function() {}); -//=> false - -hasValue(true); -hasValue(false); -//=> true -``` - -## isEmpty - -To do the opposite and test for empty values, do: - -```js -function isEmpty(o, isZero) { - return !hasValue.apply(hasValue, arguments); -} -``` - -## Related projects - -You might also be interested in these projects: - -* [get-object](https://www.npmjs.com/package/get-object): Get a property from an object using dot (object path) notation. | [homepage](https://github.com/jonschlinkert/get-object) -* [get-property](https://www.npmjs.com/package/get-property): Get a nested property or its value from an object using simple `a.b.c` paths. | [homepage](https://github.com/jonschlinkert/get-property) -* [get-value](https://www.npmjs.com/package/get-value): Use property paths (`a.b.c`) to get a nested value from an object. | [homepage](https://github.com/jonschlinkert/get-value) -* [set-value](https://www.npmjs.com/package/set-value): Create nested values and any intermediaries using dot notation (`'a.b.c'`) paths. | [homepage](https://github.com/jonschlinkert/set-value) - -## Contributing - -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/has-value/issues/new). - -## Building docs - -Generate readme and API documentation with [verb](https://github.com/verbose/verb): - -```sh -$ npm install verb && npm run docs -``` - -Or, if [verb](https://github.com/verbose/verb) is installed globally: - -```sh -$ 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/has-value/blob/master/LICENSE). - -*** - -_This file was generated by [verb](https://github.com/verbose/verb), v, on March 27, 2016._ \ No newline at end of file diff --git a/node_modules/unset-value/node_modules/has-value/index.js b/node_modules/unset-value/node_modules/has-value/index.js deleted file mode 100644 index 90687c8..0000000 --- a/node_modules/unset-value/node_modules/has-value/index.js +++ /dev/null @@ -1,19 +0,0 @@ -/*! - * has-value - * - * Copyright (c) 2014-2016, Jon Schlinkert. - * Licensed under the MIT License. - */ - -'use strict'; - -var isObject = require('isobject'); -var hasValues = require('has-values'); -var get = require('get-value'); - -module.exports = function(obj, prop, noZero) { - if (isObject(obj)) { - return hasValues(get(obj, prop), noZero); - } - return hasValues(obj, prop); -}; diff --git a/node_modules/unset-value/node_modules/has-value/node_modules/isobject/LICENSE b/node_modules/unset-value/node_modules/has-value/node_modules/isobject/LICENSE deleted file mode 100644 index 39245ac..0000000 --- a/node_modules/unset-value/node_modules/has-value/node_modules/isobject/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -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/unset-value/node_modules/has-value/node_modules/isobject/README.md b/node_modules/unset-value/node_modules/has-value/node_modules/isobject/README.md deleted file mode 100644 index 9dd897a..0000000 --- a/node_modules/unset-value/node_modules/has-value/node_modules/isobject/README.md +++ /dev/null @@ -1,112 +0,0 @@ -# isobject [![NPM version](https://img.shields.io/npm/v/isobject.svg?style=flat)](https://www.npmjs.com/package/isobject) [![NPM downloads](https://img.shields.io/npm/dm/isobject.svg?style=flat)](https://npmjs.org/package/isobject) [![Build Status](https://img.shields.io/travis/jonschlinkert/isobject.svg?style=flat)](https://travis-ci.org/jonschlinkert/isobject) - -Returns true if the value is an object and not an array or null. - -## Install - -Install with [npm](https://www.npmjs.com/): - -```sh -$ npm install isobject --save -``` - -Use [is-plain-object](https://github.com/jonschlinkert/is-plain-object) if you want only objects that are created by the `Object` constructor. - -## Install - -Install with [npm](https://www.npmjs.com/): - -```sh -$ npm install isobject -``` - -Install with [bower](http://bower.io/) - -```sh -$ bower install isobject -``` - -## Usage - -```js -var isObject = require('isobject'); -``` - -**True** - -All of the following return `true`: - -```js -isObject({}); -isObject(Object.create({})); -isObject(Object.create(Object.prototype)); -isObject(Object.create(null)); -isObject({}); -isObject(new Foo); -isObject(/foo/); -``` - -**False** - -All of the following return `false`: - -```js -isObject(); -isObject(function () {}); -isObject(1); -isObject([]); -isObject(undefined); -isObject(null); -``` - -## Related projects - -You might also be interested in these projects: - -[merge-deep](https://www.npmjs.com/package/merge-deep): Recursively merge values in a javascript object. | [homepage](https://github.com/jonschlinkert/merge-deep) - -* [extend-shallow](https://www.npmjs.com/package/extend-shallow): Extend an object with the properties of additional objects. node.js/javascript util. | [homepage](https://github.com/jonschlinkert/extend-shallow) -* [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) -* [kind-of](https://www.npmjs.com/package/kind-of): Get the native type of a value. | [homepage](https://github.com/jonschlinkert/kind-of) - -## Contributing - -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/isobject/issues/new). - -## Building docs - -Generate readme and API documentation with [verb](https://github.com/verbose/verb): - -```sh -$ npm install verb && npm run docs -``` - -Or, if [verb](https://github.com/verbose/verb) is installed globally: - -```sh -$ 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/isobject/blob/master/LICENSE). - -*** - -_This file was generated by [verb](https://github.com/verbose/verb), v0.9.0, on April 25, 2016._ \ No newline at end of file diff --git a/node_modules/unset-value/node_modules/has-value/node_modules/isobject/index.js b/node_modules/unset-value/node_modules/has-value/node_modules/isobject/index.js deleted file mode 100644 index aa0dce0..0000000 --- a/node_modules/unset-value/node_modules/has-value/node_modules/isobject/index.js +++ /dev/null @@ -1,14 +0,0 @@ -/*! - * isobject - * - * Copyright (c) 2014-2015, Jon Schlinkert. - * Licensed under the MIT License. - */ - -'use strict'; - -var isArray = require('isarray'); - -module.exports = function isObject(val) { - return val != null && typeof val === 'object' && isArray(val) === false; -}; diff --git a/node_modules/unset-value/node_modules/has-value/node_modules/isobject/package.json b/node_modules/unset-value/node_modules/has-value/node_modules/isobject/package.json deleted file mode 100644 index 954f411..0000000 --- a/node_modules/unset-value/node_modules/has-value/node_modules/isobject/package.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "name": "isobject", - "description": "Returns true if the value is an object and not an array or null.", - "version": "2.1.0", - "homepage": "https://github.com/jonschlinkert/isobject", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "repository": "jonschlinkert/isobject", - "bugs": { - "url": "https://github.com/jonschlinkert/isobject/issues" - }, - "license": "MIT", - "files": [ - "index.js" - ], - "main": "index.js", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "dependencies": { - "isarray": "1.0.0" - }, - "devDependencies": { - "gulp-format-md": "^0.1.9", - "mocha": "^2.4.5" - }, - "keywords": [ - "check", - "is", - "is-object", - "isobject", - "kind", - "kind-of", - "kindof", - "native", - "object", - "type", - "typeof", - "value" - ], - "verb": { - "related": { - "list": [ - "merge-deep", - "extend-shallow", - "is-plain-object", - "kind-of" - ] - }, - "toc": false, - "layout": "default", - "tasks": [ - "readme" - ], - "plugins": [ - "gulp-format-md" - ], - "lint": { - "reflinks": true - }, - "reflinks": [ - "verb" - ] - } -} diff --git a/node_modules/unset-value/node_modules/has-value/package.json b/node_modules/unset-value/node_modules/has-value/package.json deleted file mode 100644 index 88ff6ed..0000000 --- a/node_modules/unset-value/node_modules/has-value/package.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "name": "has-value", - "version": "0.3.1", - "description": "Returns true if a value exists, false if empty. Works with deeply nested values using object paths.", - "homepage": "https://github.com/jonschlinkert/has-value", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "repository": "jonschlinkert/has-value", - "bugs": { - "url": "https://github.com/jonschlinkert/has-value/issues" - }, - "license": "MIT", - "files": [ - "index.js" - ], - "main": "index.js", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "devDependencies": { - "gulp-format-md": "^0.1.7", - "mocha": "^2.4.5" - }, - "keywords": [ - "array", - "boolean", - "empty", - "find", - "function", - "has", - "hasOwn", - "javascript", - "js", - "key", - "keys", - "node.js", - "null", - "number", - "object", - "properties", - "property", - "string", - "type", - "util", - "utilities", - "utility", - "value" - ], - "verb": { - "run": true, - "toc": false, - "layout": "default", - "tasks": [ - "readme" - ], - "plugins": [ - "gulp-format-md" - ], - "related": { - "list": [ - "get-object", - "get-property", - "get-value", - "set-value" - ] - }, - "reflinks": [ - "verb" - ], - "lint": { - "reflinks": true - } - } -} diff --git a/node_modules/unset-value/node_modules/has-values/LICENSE b/node_modules/unset-value/node_modules/has-values/LICENSE deleted file mode 100644 index 39245ac..0000000 --- a/node_modules/unset-value/node_modules/has-values/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -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/unset-value/node_modules/has-values/README.md b/node_modules/unset-value/node_modules/has-values/README.md deleted file mode 100644 index 13319c5..0000000 --- a/node_modules/unset-value/node_modules/has-values/README.md +++ /dev/null @@ -1,114 +0,0 @@ -# has-values [![NPM version](https://img.shields.io/npm/v/has-values.svg?style=flat)](https://www.npmjs.com/package/has-values) [![NPM downloads](https://img.shields.io/npm/dm/has-values.svg?style=flat)](https://npmjs.org/package/has-values) [![Build Status](https://img.shields.io/travis/jonschlinkert/has-values.svg?style=flat)](https://travis-ci.org/jonschlinkert/has-values) - -> Returns true if any values exist, false if empty. Works for booleans, functions, numbers, strings, nulls, objects and arrays. - -## Install - -Install with [npm](https://www.npmjs.com/): - -```sh -$ npm install has-values --save -``` - -## Usage - -```js -var hasValue = require('has-values'); - -hasValue('a'); -//=> true - -hasValue(''); -//=> false - -hasValue(1); -//=> true - -hasValue(0); -//=> false - -hasValue(0, true); // treat zero as a value -//=> true - -hasValue({a: 'a'}}); -//=> true - -hasValue({}}); -//=> false - -hasValue(['a']); -//=> true - -hasValue([]); -//=> false - -hasValue(function(foo) {}); // function length/arity -//=> true - -hasValue(function() {}); -//=> false - -hasValue(true); -hasValue(false); -//=> true -``` - -## isEmpty - -To test for empty values, do: - -```js -function isEmpty(o, isZero) { - return !hasValue(o, isZero); -} -``` - -## Related projects - -You might also be interested in these projects: - -* [has-value](https://www.npmjs.com/package/has-value): Returns true if a value exists, false if empty. Works with deeply nested values using… [more](https://www.npmjs.com/package/has-value) | [homepage](https://github.com/jonschlinkert/has-value) -* [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) -* [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) - -## Contributing - -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/has-values/issues/new). - -## Building docs - -Generate readme and API documentation with [verb](https://github.com/verbose/verb): - -```sh -$ npm install verb && npm run docs -``` - -Or, if [verb](https://github.com/verbose/verb) is installed globally: - -```sh -$ 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/has-values/blob/master/LICENSE). - -*** - -_This file was generated by [verb](https://github.com/verbose/verb), v, on March 27, 2016._ \ No newline at end of file diff --git a/node_modules/unset-value/node_modules/has-values/index.js b/node_modules/unset-value/node_modules/has-values/index.js deleted file mode 100644 index 6d04ba1..0000000 --- a/node_modules/unset-value/node_modules/has-values/index.js +++ /dev/null @@ -1,36 +0,0 @@ -/*! - * has-values - * - * Copyright (c) 2014-2015, Jon Schlinkert. - * Licensed under the MIT License. - */ - -'use strict'; - -module.exports = function hasValue(o, noZero) { - if (o === null || o === undefined) { - return false; - } - - if (typeof o === 'boolean') { - return true; - } - - if (typeof o === 'number') { - if (o === 0 && noZero === true) { - return false; - } - return true; - } - - if (o.length !== undefined) { - return o.length !== 0; - } - - for (var key in o) { - if (o.hasOwnProperty(key)) { - return true; - } - } - return false; -}; diff --git a/node_modules/unset-value/node_modules/has-values/package.json b/node_modules/unset-value/node_modules/has-values/package.json deleted file mode 100644 index 519a2c8..0000000 --- a/node_modules/unset-value/node_modules/has-values/package.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "name": "has-values", - "version": "0.1.4", - "description": "Returns true if any values exist, false if empty. Works for booleans, functions, numbers, strings, nulls, objects and arrays. ", - "homepage": "https://github.com/jonschlinkert/has-values", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "repository": "jonschlinkert/has-values", - "bugs": { - "url": "https://github.com/jonschlinkert/has-values/issues" - }, - "license": "MIT", - "files": [ - "index.js" - ], - "main": "index.js", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "devDependencies": { - "gulp-format-md": "^0.1.7", - "mocha": "^2.4.5" - }, - "keywords": [ - "array", - "boolean", - "empty", - "find", - "function", - "has", - "hasOwn", - "javascript", - "js", - "key", - "keys", - "node.js", - "null", - "number", - "object", - "properties", - "property", - "string", - "type", - "util", - "utilities", - "utility", - "value" - ], - "verb": { - "run": true, - "toc": false, - "layout": "default", - "tasks": [ - "readme" - ], - "plugins": [ - "gulp-format-md" - ], - "related": { - "list": [ - "has-value", - "isobject", - "is-plain-object" - ] - }, - "reflinks": [ - "verb" - ], - "lint": { - "reflinks": true - } - } -} diff --git a/node_modules/unset-value/package.json b/node_modules/unset-value/package.json deleted file mode 100644 index 0753ba6..0000000 --- a/node_modules/unset-value/package.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "name": "unset-value", - "description": "Delete nested properties from an object using dot notation.", - "version": "1.0.0", - "homepage": "https://github.com/jonschlinkert/unset-value", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "contributors": [ - " (https://github.com/wtgtybhertgeghgtwtg)", - "Jon Schlinkert (http://twitter.com/jonschlinkert)" - ], - "repository": "jonschlinkert/unset-value", - "bugs": { - "url": "https://github.com/jonschlinkert/unset-value/issues" - }, - "license": "MIT", - "files": [ - "index.js" - ], - "main": "index.js", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "devDependencies": { - "gulp-format-md": "^0.1.11", - "mocha": "*", - "should": "*" - }, - "keywords": [ - "del", - "delete", - "key", - "object", - "omit", - "prop", - "property", - "remove", - "unset", - "value" - ], - "verb": { - "related": { - "list": [ - "get-value", - "get-values", - "omit-value", - "put-value", - "set-value", - "union-value", - "upsert-value" - ] - }, - "toc": false, - "layout": "default", - "tasks": [ - "readme" - ], - "plugins": [ - "gulp-format-md" - ], - "lint": { - "reflinks": true - } - } -} diff --git a/node_modules/upath/LICENSE b/node_modules/upath/LICENSE deleted file mode 100755 index 77fab24..0000000 --- a/node_modules/upath/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright(c) 2014-2019 Angelos Pikoulas (agelos.pikoulas@gmail.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/upath/build/code/upath.js b/node_modules/upath/build/code/upath.js deleted file mode 100644 index f0949e1..0000000 --- a/node_modules/upath/build/code/upath.js +++ /dev/null @@ -1,171 +0,0 @@ -/** -* upath http://github.com/anodynos/upath/ -* -* A proxy to `path`, replacing `\` with `/` for all results & new methods to normalize & join keeping leading `./` and add, change, default, trim file extensions. -* Version 1.2.0 - Compiled on 2019-09-02 23:33:57 -* Repository git://github.com/anodynos/upath -* Copyright(c) 2019 Angelos Pikoulas -* License MIT -*/ - -// Generated by uRequire v0.7.0-beta.33 target: 'lib' template: 'nodejs' - - -var VERSION = '1.2.0'; // injected by urequire-rc-inject-version - -var extraFn, extraFunctions, isFunction, isString, isValidExt, name, path, propName, propValue, toUnix, upath, slice = [].slice, indexOf = [].indexOf || function (item) { - for (var i = 0, l = this.length; i < l; i++) { - if (i in this && this[i] === item) - return i; - } - return -1; - }, hasProp = {}.hasOwnProperty; -path = require("path"); -isFunction = function (val) { - return val instanceof Function; -}; -isString = function (val) { - return typeof val === "string" || !!val && typeof val === "object" && Object.prototype.toString.call(val) === "[object String]"; -}; -upath = exports; -upath.VERSION = typeof VERSION !== "undefined" && VERSION !== null ? VERSION : "NO-VERSION"; -toUnix = function (p) { - var double; - p = p.replace(/\\/g, "/"); - double = /\/\//; - while (p.match(double)) { - p = p.replace(double, "/"); - } - return p; -}; -for (propName in path) { - propValue = path[propName]; - if (isFunction(propValue)) { - upath[propName] = function (propName) { - return function () { - var args, result; - args = 1 <= arguments.length ? slice.call(arguments, 0) : []; - args = args.map(function (p) { - if (isString(p)) { - return toUnix(p); - } else { - return p; - } - }); - result = path[propName].apply(path, args); - if (isString(result)) { - return toUnix(result); - } else { - return result; - } - }; - }(propName); - } else { - upath[propName] = propValue; - } -} -upath.sep = "/"; -extraFunctions = { - toUnix: toUnix, - normalizeSafe: function (p) { - p = toUnix(p); - if (p.startsWith("./")) { - if (p.startsWith("./..") || p === "./") { - return upath.normalize(p); - } else { - return "./" + upath.normalize(p); - } - } else { - return upath.normalize(p); - } - }, - normalizeTrim: function (p) { - p = upath.normalizeSafe(p); - if (p.endsWith("/")) { - return p.slice(0, +(p.length - 2) + 1 || 9000000000); - } else { - return p; - } - }, - joinSafe: function () { - var p, result; - p = 1 <= arguments.length ? slice.call(arguments, 0) : []; - result = upath.join.apply(null, p); - if (p[0].startsWith("./") && !result.startsWith("./")) { - result = "./" + result; - } - return result; - }, - addExt: function (file, ext) { - if (!ext) { - return file; - } else { - if (ext[0] !== ".") { - ext = "." + ext; - } - return file + (file.endsWith(ext) ? "" : ext); - } - }, - trimExt: function (filename, ignoreExts, maxSize) { - var oldExt; - if (maxSize == null) { - maxSize = 7; - } - oldExt = upath.extname(filename); - if (isValidExt(oldExt, ignoreExts, maxSize)) { - return filename.slice(0, +(filename.length - oldExt.length - 1) + 1 || 9000000000); - } else { - return filename; - } - }, - removeExt: function (filename, ext) { - if (!ext) { - return filename; - } else { - ext = ext[0] === "." ? ext : "." + ext; - if (upath.extname(filename) === ext) { - return upath.trimExt(filename); - } else { - return filename; - } - } - }, - changeExt: function (filename, ext, ignoreExts, maxSize) { - if (maxSize == null) { - maxSize = 7; - } - return upath.trimExt(filename, ignoreExts, maxSize) + (!ext ? "" : ext[0] === "." ? ext : "." + ext); - }, - defaultExt: function (filename, ext, ignoreExts, maxSize) { - var oldExt; - if (maxSize == null) { - maxSize = 7; - } - oldExt = upath.extname(filename); - if (isValidExt(oldExt, ignoreExts, maxSize)) { - return filename; - } else { - return upath.addExt(filename, ext); - } - } -}; -isValidExt = function (ext, ignoreExts, maxSize) { - if (ignoreExts == null) { - ignoreExts = []; - } - return ext && ext.length <= maxSize && indexOf.call(ignoreExts.map(function (e) { - return (e && e[0] !== "." ? "." : "") + e; - }), ext) < 0; -}; -for (name in extraFunctions) { - if (!hasProp.call(extraFunctions, name)) - continue; - extraFn = extraFunctions[name]; - if (upath[name] !== void 0) { - throw new Error("path." + name + " already exists."); - } else { - upath[name] = extraFn; - } -} - -; \ No newline at end of file diff --git a/node_modules/upath/package.json b/node_modules/upath/package.json deleted file mode 100644 index 38f605b..0000000 --- a/node_modules/upath/package.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "name": "upath", - "description": "A proxy to `path`, replacing `\\` with `/` for all results & new methods to normalize & join keeping leading `./` and add, change, default, trim file extensions.", - "version": "1.2.0", - "homepage": "http://github.com/anodynos/upath/", - "author": { - "name": "Angelos Pikoulas", - "email": "agelos.pikoulas@gmail.com" - }, - "license": "MIT", - "keywords": [ - "path", - "unix", - "windows", - "extension", - "file extension", - "replace extension", - "change extension", - "trim extension", - "add extension", - "default extension" - ], - "repository": { - "type": "git", - "url": "git://github.com/anodynos/upath" - }, - "bugs": { - "url": "http://github.com/anodynos/upath/issues", - "email": "agelos.pikoulas@gmail.com" - }, - "main": "./build/code/upath.js", - "types": "./upath.d.ts", - "preferGlobal": false, - "scripts": { - "test": "grunt", - "build": "grunt lib" - }, - "directories": { - "doc": "./doc", - "dist": "./build" - }, - "engines": { - "node": ">=4", - "yarn": "*" - }, - "devDependencies": { - "chai": "~4.0.2", - "coffee-script": "1.12.6", - "grunt": "0.4.5", - "grunt-contrib-watch": "^1.1.0", - "grunt-urequire": "0.7.x", - "lodash": "^4.17.15", - "mocha": "~3.4.2", - "uberscore": "0.0.19", - "underscore.string": "^3.3.5", - "urequire": "0.7.0-beta.33", - "urequire-ab-specrunner": "^0.2.5", - "urequire-rc-inject-version": "^0.1.6" - } -} diff --git a/node_modules/upath/readme.md b/node_modules/upath/readme.md deleted file mode 100644 index 21bd958..0000000 --- a/node_modules/upath/readme.md +++ /dev/null @@ -1,342 +0,0 @@ -# upath v1.2.0 - -[![Build Status](https://travis-ci.org/anodynos/upath.svg?branch=master)](https://travis-ci.org/anodynos/upath) -[![Up to date Status](https://david-dm.org/anodynos/upath.png)](https://david-dm.org/anodynos/upath) - -A drop-in replacement / proxy to nodejs's `path` that: - - * Replaces the windows `\` with the unix `/` in all string params & results. This has significant positives - see below. - - * Adds **filename extensions** functions `addExt`, `trimExt`, `removeExt`, `changeExt`, and `defaultExt`. - - * Add a `normalizeSafe` function to preserve any meaningful leading `./` & a `normalizeTrim` which additionally trims any useless ending `/`. - - * Plus a helper `toUnix` that simply converts `\` to `/` and consolidates duplicates. - -**Useful note: these docs are actually auto generated from [specs](https://github.com/anodynos/upath/blob/master/source/spec/upath-spec.coffee), running on Linux.** - -Notes: - - * `upath.sep` is set to `'/'` for seamless replacement (as of 1.0.3). - - * upath has no runtime dependencies, except built-in `path` (as of 1.0.4) - - * travis-ci tested in node versions 4 to 12 - - -## Why ? - -Normal `path` doesn't convert paths to a unified format (ie `/`) before calculating paths (`normalize`, `join`), which can lead to numerous problems. -Also path joining, normalization etc on the two formats is not consistent, depending on where it runs. Running `path` on Windows yields different results than when it runs on Linux / Mac. - -In general, if you code your paths logic while developing on Unix/Mac and it runs on Windows, you may run into problems when using `path`. - -Note that using **Unix `/` on Windows** works perfectly inside nodejs (and other languages), so there's no reason to stick to the Windows legacy at all. - -##### Examples / specs - - -Check out the different (improved) behavior to vanilla `path`: - - `upath.normalize(path)` --returns--> - - ✓ `'c:/windows/nodejs/path'` ---> `'c:/windows/nodejs/path'` // equal to `path.normalize()` - ✓ `'c:/windows/../nodejs/path'` ---> `'c:/nodejs/path'` // equal to `path.normalize()` - ✓ `'c:\\windows\\nodejs\\path'` ---> `'c:/windows/nodejs/path'` // `path.normalize()` gives `'c:\windows\nodejs\path'` - ✓ `'c:\\windows\\..\\nodejs\\path'` ---> `'c:/nodejs/path'` // `path.normalize()` gives `'c:\windows\..\nodejs\path'` - ✓ `'//windows\\unix/mixed'` ---> `'/windows/unix/mixed'` // `path.normalize()` gives `'/windows\unix/mixed'` - ✓ `'\\windows//unix/mixed'` ---> `'/windows/unix/mixed'` // `path.normalize()` gives `'\windows/unix/mixed'` - ✓ `'////\\windows\\..\\unix/mixed/'` ---> `'/unix/mixed/'` // `path.normalize()` gives `'/\windows\..\unix/mixed/'` - - -Joining paths can also be a problem: - - `upath.join(paths...)` --returns--> - - ✓ `'some/nodejs/deep', '../path'` ---> `'some/nodejs/path'` // equal to `path.join()` - ✓ `'some/nodejs\\windows', '../path'` ---> `'some/nodejs/path'` // `path.join()` gives `'some/path'` - ✓ `'some\\windows\\only', '..\\path'` ---> `'some/windows/path'` // `path.join()` gives `'some\windows\only/..\path'` - - -Parsing with `path.parse()` should also be consistent across OSes: - - `upath.parse(path)` --returns--> - - ✓ `'c:\Windows\Directory\somefile.ext'` ---> `{ root: '', dir: 'c:/Windows/Directory', base: 'somefile.ext', ext: '.ext', name: 'somefile' }` - // `path.parse()` gives `'{ root: '', dir: '', base: 'c:\\Windows\\Directory\\somefile.ext', ext: '.ext', name: 'c:\\Windows\\Directory\\somefile' }'` - ✓ `'/root/of/unix/somefile.ext'` ---> `{ root: '/', dir: '/root/of/unix', base: 'somefile.ext', ext: '.ext', name: 'somefile' }` // equal to `path.parse()` - - -## Added functions - - -#### `upath.toUnix(path)` - -Just converts all `` to `/` and consolidates duplicates, without performing any normalization. - -##### Examples / specs - - `upath.toUnix(path)` --returns--> - - ✓ `'.//windows\//unix//mixed////'` ---> `'./windows/unix/mixed/'` - ✓ `'..///windows\..\\unix/mixed'` ---> `'../windows/../unix/mixed'` - - -#### `upath.normalizeSafe(path)` - -Exactly like `path.normalize(path)`, but it keeps the first meaningful `./`. - -Note that the unix `/` is returned everywhere, so windows `\` is always converted to unix `/`. - -##### Examples / specs & how it differs from vanilla `path` - - `upath.normalizeSafe(path)` --returns--> - - ✓ `''` ---> `'.'` // equal to `path.normalize()` - ✓ `'.'` ---> `'.'` // equal to `path.normalize()` - ✓ `'./'` ---> `'./'` // equal to `path.normalize()` - ✓ `'.//'` ---> `'./'` // equal to `path.normalize()` - ✓ `'.\\'` ---> `'./'` // `path.normalize()` gives `'.\'` - ✓ `'.\\//'` ---> `'./'` // `path.normalize()` gives `'.\/'` - ✓ `'./..'` ---> `'..'` // equal to `path.normalize()` - ✓ `'.//..'` ---> `'..'` // equal to `path.normalize()` - ✓ `'./../'` ---> `'../'` // equal to `path.normalize()` - ✓ `'.\\..\\'` ---> `'../'` // `path.normalize()` gives `'.\..\'` - ✓ `'./../dep'` ---> `'../dep'` // equal to `path.normalize()` - ✓ `'../dep'` ---> `'../dep'` // equal to `path.normalize()` - ✓ `'../path/dep'` ---> `'../path/dep'` // equal to `path.normalize()` - ✓ `'../path/../dep'` ---> `'../dep'` // equal to `path.normalize()` - ✓ `'dep'` ---> `'dep'` // equal to `path.normalize()` - ✓ `'path//dep'` ---> `'path/dep'` // equal to `path.normalize()` - ✓ `'./dep'` ---> `'./dep'` // `path.normalize()` gives `'dep'` - ✓ `'./path/dep'` ---> `'./path/dep'` // `path.normalize()` gives `'path/dep'` - ✓ `'./path/../dep'` ---> `'./dep'` // `path.normalize()` gives `'dep'` - ✓ `'.//windows\\unix/mixed/'` ---> `'./windows/unix/mixed/'` // `path.normalize()` gives `'windows\unix/mixed/'` - ✓ `'..//windows\\unix/mixed'` ---> `'../windows/unix/mixed'` // `path.normalize()` gives `'../windows\unix/mixed'` - ✓ `'windows\\unix/mixed/'` ---> `'windows/unix/mixed/'` // `path.normalize()` gives `'windows\unix/mixed/'` - ✓ `'..//windows\\..\\unix/mixed'` ---> `'../unix/mixed'` // `path.normalize()` gives `'../windows\..\unix/mixed'` - - -#### `upath.normalizeTrim(path)` - -Exactly like `path.normalizeSafe(path)`, but it trims any useless ending `/`. - -##### Examples / specs - - `upath.normalizeTrim(path)` --returns--> - - ✓ `'./'` ---> `'.'` // `upath.normalizeSafe()` gives `'./'` - ✓ `'./../'` ---> `'..'` // `upath.normalizeSafe()` gives `'../'` - ✓ `'./../dep/'` ---> `'../dep'` // `upath.normalizeSafe()` gives `'../dep/'` - ✓ `'path//dep\\'` ---> `'path/dep'` // `upath.normalizeSafe()` gives `'path/dep/'` - ✓ `'.//windows\\unix/mixed/'` ---> `'./windows/unix/mixed'` // `upath.normalizeSafe()` gives `'./windows/unix/mixed/'` - - -#### `upath.joinSafe([path1][, path2][, ...])` - -Exactly like `path.join()`, but it keeps the first meaningful `./`. - -Note that the unix `/` is returned everywhere, so windows `\` is always converted to unix `/`. - -##### Examples / specs & how it differs from vanilla `path` - - `upath.joinSafe(path)` --returns--> - - ✓ `'some/nodejs/deep', '../path'` ---> `'some/nodejs/path'` // equal to `path.join()` - ✓ `'./some/local/unix/', '../path'` ---> `'./some/local/path'` // `path.join()` gives `'some/local/path'` - ✓ `'./some\\current\\mixed', '..\\path'` ---> `'./some/current/path'` // `path.join()` gives `'some\current\mixed/..\path'` - ✓ `'../some/relative/destination', '..\\path'` ---> `'../some/relative/path'` // `path.join()` gives `'../some/relative/destination/..\path'` - - -## Added functions for *filename extension* manipulation. - -**Happy notes:** - - In all functions you can: - - * use both `.ext` & `ext` - the dot `.` on the extension is always adjusted correctly. - - * omit the `ext` param (pass null/undefined/empty string) and the common sense thing will happen. - - * ignore specific extensions from being considered as valid ones (eg `.min`, `.dev` `.aLongExtIsNotAnExt` etc), hence no trimming or replacement takes place on them. - - - -#### `upath.addExt(filename, [ext])` - -Adds `.ext` to `filename`, but only if it doesn't already have the exact extension. - -##### Examples / specs - - `upath.addExt(filename, 'js')` --returns--> - - ✓ `'myfile/addExt'` ---> `'myfile/addExt.js'` - ✓ `'myfile/addExt.txt'` ---> `'myfile/addExt.txt.js'` - ✓ `'myfile/addExt.js'` ---> `'myfile/addExt.js'` - ✓ `'myfile/addExt.min.'` ---> `'myfile/addExt.min..js'` - - -It adds nothing if no `ext` param is passed. - - `upath.addExt(filename)` --returns--> - - ✓ `'myfile/addExt'` ---> `'myfile/addExt'` - ✓ `'myfile/addExt.txt'` ---> `'myfile/addExt.txt'` - ✓ `'myfile/addExt.js'` ---> `'myfile/addExt.js'` - ✓ `'myfile/addExt.min.'` ---> `'myfile/addExt.min.'` - - -#### `upath.trimExt(filename, [ignoreExts], [maxSize=7])` - -Trims a filename's extension. - - * Extensions are considered to be up to `maxSize` chars long, counting the dot (defaults to 7). - - * An `Array` of `ignoreExts` (eg `['.min']`) prevents these from being considered as extension, thus are not trimmed. - -##### Examples / specs - - `upath.trimExt(filename)` --returns--> - - ✓ `'my/trimedExt.txt'` ---> `'my/trimedExt'` - ✓ `'my/trimedExt'` ---> `'my/trimedExt'` - ✓ `'my/trimedExt.min'` ---> `'my/trimedExt'` - ✓ `'my/trimedExt.min.js'` ---> `'my/trimedExt.min'` - ✓ `'../my/trimedExt.longExt'` ---> `'../my/trimedExt.longExt'` - - -It is ignoring `.min` & `.dev` as extensions, and considers exts with up to 8 chars. - - `upath.trimExt(filename, ['min', '.dev'], 8)` --returns--> - - ✓ `'my/trimedExt.txt'` ---> `'my/trimedExt'` - ✓ `'my/trimedExt.min'` ---> `'my/trimedExt.min'` - ✓ `'my/trimedExt.dev'` ---> `'my/trimedExt.dev'` - ✓ `'../my/trimedExt.longExt'` ---> `'../my/trimedExt'` - ✓ `'../my/trimedExt.longRExt'` ---> `'../my/trimedExt.longRExt'` - - -#### `upath.removeExt(filename, ext)` - -Removes the specific `ext` extension from filename, if it has it. Otherwise it leaves it as is. -As in all upath functions, it be `.ext` or `ext`. - -##### Examples / specs - - `upath.removeExt(filename, '.js')` --returns--> - - ✓ `'removedExt.js'` ---> `'removedExt'` - ✓ `'removedExt.txt.js'` ---> `'removedExt.txt'` - ✓ `'notRemoved.txt'` ---> `'notRemoved.txt'` - -It does not care about the length of exts. - - `upath.removeExt(filename, '.longExt')` --returns--> - - ✓ `'removedExt.longExt'` ---> `'removedExt'` - ✓ `'removedExt.txt.longExt'` ---> `'removedExt.txt'` - ✓ `'notRemoved.txt'` ---> `'notRemoved.txt'` - - -#### `upath.changeExt(filename, [ext], [ignoreExts], [maxSize=7])` - -Changes a filename's extension to `ext`. If it has no (valid) extension, it adds it. - - * Valid extensions are considered to be up to `maxSize` chars long, counting the dot (defaults to 7). - - * An `Array` of `ignoreExts` (eg `['.min']`) prevents these from being considered as extension, thus are not changed - the new extension is added instead. - -##### Examples / specs - - `upath.changeExt(filename, '.js')` --returns--> - - ✓ `'my/module.min'` ---> `'my/module.js'` - ✓ `'my/module.coffee'` ---> `'my/module.js'` - ✓ `'my/module'` ---> `'my/module.js'` - ✓ `'file/withDot.'` ---> `'file/withDot.js'` - ✓ `'file/change.longExt'` ---> `'file/change.longExt.js'` - - -If no `ext` param is given, it trims the current extension (if any). - - `upath.changeExt(filename)` --returns--> - - ✓ `'my/module.min'` ---> `'my/module'` - ✓ `'my/module.coffee'` ---> `'my/module'` - ✓ `'my/module'` ---> `'my/module'` - ✓ `'file/withDot.'` ---> `'file/withDot'` - ✓ `'file/change.longExt'` ---> `'file/change.longExt'` - - -It is ignoring `.min` & `.dev` as extensions, and considers exts with up to 8 chars. - - `upath.changeExt(filename, 'js', ['min', '.dev'], 8)` --returns--> - - ✓ `'my/module.coffee'` ---> `'my/module.js'` - ✓ `'file/notValidExt.min'` ---> `'file/notValidExt.min.js'` - ✓ `'file/notValidExt.dev'` ---> `'file/notValidExt.dev.js'` - ✓ `'file/change.longExt'` ---> `'file/change.js'` - ✓ `'file/change.longRExt'` ---> `'file/change.longRExt.js'` - - -#### `upath.defaultExt(filename, [ext], [ignoreExts], [maxSize=7])` - -Adds `.ext` to `filename`, only if it doesn't already have _any_ *old* extension. - - * (Old) extensions are considered to be up to `maxSize` chars long, counting the dot (defaults to 7). - - * An `Array` of `ignoreExts` (eg `['.min']`) will force adding default `.ext` even if one of these is present. - -##### Examples / specs - - `upath.defaultExt(filename, 'js')` --returns--> - - ✓ `'fileWith/defaultExt'` ---> `'fileWith/defaultExt.js'` - ✓ `'fileWith/defaultExt.js'` ---> `'fileWith/defaultExt.js'` - ✓ `'fileWith/defaultExt.min'` ---> `'fileWith/defaultExt.min'` - ✓ `'fileWith/defaultExt.longExt'` ---> `'fileWith/defaultExt.longExt.js'` - - -If no `ext` param is passed, it leaves filename intact. - - `upath.defaultExt(filename)` --returns--> - - ✓ `'fileWith/defaultExt'` ---> `'fileWith/defaultExt'` - ✓ `'fileWith/defaultExt.js'` ---> `'fileWith/defaultExt.js'` - ✓ `'fileWith/defaultExt.min'` ---> `'fileWith/defaultExt.min'` - ✓ `'fileWith/defaultExt.longExt'` ---> `'fileWith/defaultExt.longExt'` - - -It is ignoring `.min` & `.dev` as extensions, and considers exts with up to 8 chars. - - `upath.defaultExt(filename, 'js', ['min', '.dev'], 8)` --returns--> - - ✓ `'fileWith/defaultExt'` ---> `'fileWith/defaultExt.js'` - ✓ `'fileWith/defaultExt.min'` ---> `'fileWith/defaultExt.min.js'` - ✓ `'fileWith/defaultExt.dev'` ---> `'fileWith/defaultExt.dev.js'` - ✓ `'fileWith/defaultExt.longExt'` ---> `'fileWith/defaultExt.longExt'` - ✓ `'fileWith/defaultExt.longRext'` ---> `'fileWith/defaultExt.longRext.js'` - - -Copyright(c) 2014-2019 Angelos Pikoulas (agelos.pikoulas@gmail.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/upath/upath.d.ts b/node_modules/upath/upath.d.ts deleted file mode 100644 index 778d70a..0000000 --- a/node_modules/upath/upath.d.ts +++ /dev/null @@ -1,239 +0,0 @@ -declare module "upath" { - - /** - * A parsed path object generated by path.parse() or consumed by path.format(). - */ - export interface ParsedPath { - /** - * The root of the path such as '/' or 'c:\' - */ - root: string; - /** - * The full directory path such as '/home/user/dir' or 'c:\path\dir' - */ - dir: string; - /** - * The file name including extension (if any) such as 'index.html' - */ - base: string; - /** - * The file extension (if any) such as '.html' - */ - ext: string; - /** - * The file name without extension (if any) such as 'index' - */ - name: string; - } - - /** - * Version of the library - */ - export var VERSION: string; - - /** - * Just converts all `to/` and consolidates duplicates, without performing any normalization. - * - * @param p string path to convert to unix. - */ - export function toUnix(p: string): string; - - /** - * Exactly like path.normalize(path), but it keeps the first meaningful ./. - * - * Note that the unix / is returned everywhere, so windows \ is always converted to unix /. - * - * @param p string path to normalize. - */ - export function normalizeSafe(p: string): string; - - /** - * Exactly like path.normalizeSafe(path), but it trims any useless ending /. - * - * @param p string path to normalize - */ - export function normalizeTrim(p: string): string; - - /** - * Exactly like path.join(), but it keeps the first meaningful ./. - * - * Note that the unix / is returned everywhere, so windows \ is always converted to unix /. - * - * @param paths string paths to join - */ - export function joinSafe(...p: any[]): string; - - /** - * Adds .ext to filename, but only if it doesn't already have the exact extension. - * - * @param file string filename to add extension to - * @param ext string extension to add - */ - export function addExt(file: string, ext: string): string; - - /** - * Trims a filename's extension. - * - * Extensions are considered to be up to maxSize chars long, counting the dot (defaults to 7). - * - * An Array of ignoreExts (eg ['.min']) prevents these from being considered as extension, thus are not trimmed. - * - * @param filename string filename to trim it's extension - * @param ignoreExts array extensions to ignore - * @param maxSize number max length of the extension - */ - export function trimExt(filename: string, ignoreExts?: string[], maxSize?: number): string; - - /** - * Removes the specific ext extension from filename, if it has it. Otherwise it leaves it as is. As in all upath functions, it be .ext or ext. - * - * @param file string filename to remove extension to - * @param ext string extension to remove - */ - export function removeExt(filename: string, ext: string): string; - - /** - * Changes a filename's extension to ext. If it has no (valid) extension, it adds it. - * - * Valid extensions are considered to be up to maxSize chars long, counting the dot (defaults to 7). - * - * An Array of ignoreExts (eg ['.min']) prevents these from being considered as extension, thus are not changed - the new extension is added instead. - * - * @param filename string filename to change it's extension - * @param ext string extension to change to - * @param ignoreExts array extensions to ignore - * @param maxSize number max length of the extension - */ - export function changeExt(filename: string, ext: string, ignoreExts?: string[], maxSize?: number): string; - - /** - * Adds .ext to filename, only if it doesn't already have any old extension. - * - * (Old) extensions are considered to be up to maxSize chars long, counting the dot (defaults to 7). - * - * An Array of ignoreExts (eg ['.min']) will force adding default .ext even if one of these is present. - * - * @param filename string filename to default to it's extension - * @param ext string extension to default to - * @param ignoreExts array extensions to ignore - * @param maxSize number max length of the extension - */ - export function defaultExt(filename: string, ext: string, ignoreExts?: string[], maxSize?: number): string; - - /** - * Normalize a string path, reducing '..' and '.' parts. - * When multiple slashes are found, they're replaced by a single one; when the path contains a trailing slash, it is preserved. On Windows backslashes are used. - * - * @param p string path to normalize. - */ - export function normalize(p: string): string; - /** - * Join all arguments together and normalize the resulting path. - * Arguments must be strings. In v0.8, non-string arguments were silently ignored. In v0.10 and up, an exception is thrown. - * - * @param paths string paths to join. - */ - export function join(...paths: any[]): string; - /** - * Join all arguments together and normalize the resulting path. - * Arguments must be strings. In v0.8, non-string arguments were silently ignored. In v0.10 and up, an exception is thrown. - * - * @param paths string paths to join. - */ - export function join(...paths: string[]): string; - /** - * The right-most parameter is considered {to}. Other parameters are considered an array of {from}. - * - * Starting from leftmost {from} parameter, resolves {to} to an absolute path. - * - * If {to} isn't already absolute, {from} arguments are prepended in right to left order, until an absolute path is found. If after using all {from} paths still no absolute path is found, the current working directory is used as well. The resulting path is normalized, and trailing slashes are removed unless the path gets resolved to the root directory. - * - * @param pathSegments string paths to join. Non-string arguments are ignored. - */ - export function resolve(...pathSegments: any[]): string; - /** - * Determines whether {path} is an absolute path. An absolute path will always resolve to the same location, regardless of the working directory. - * - * @param path path to test. - */ - export function isAbsolute(path: string): boolean; - /** - * Solve the relative path from {from} to {to}. - * At times we have two absolute paths, and we need to derive the relative path from one to the other. This is actually the reverse transform of path.resolve. - * - * @param from - * @param to - */ - export function relative(from: string, to: string): string; - /** - * Return the directory name of a path. Similar to the Unix dirname command. - * - * @param p the path to evaluate. - */ - export function dirname(p: string): string; - /** - * Return the last portion of a path. Similar to the Unix basename command. - * Often used to extract the file name from a fully qualified path. - * - * @param p the path to evaluate. - * @param ext optionally, an extension to remove from the result. - */ - export function basename(p: string, ext?: string): string; - /** - * Return the extension of the path, from the last '.' to end of string in the last portion of the path. - * If there is no '.' in the last portion of the path or the first character of it is '.', then it returns an empty string - * - * @param p the path to evaluate. - */ - export function extname(p: string): string; - /** - * The platform-specific file separator. '\\' or '/'. - */ - export var sep: string; - /** - * The platform-specific file delimiter. ';' or ':'. - */ - export var delimiter: string; - /** - * Returns an object from a path string - the opposite of format(). - * - * @param pathString path to evaluate. - */ - export function parse(pathString: string): ParsedPath; - /** - * Returns a path string from an object - the opposite of parse(). - * - * @param pathString path to evaluate. - */ - export function format(pathObject: ParsedPath): string; - - export module posix { - export function normalize(p: string): string; - export function join(...paths: any[]): string; - export function resolve(...pathSegments: any[]): string; - export function isAbsolute(p: string): boolean; - export function relative(from: string, to: string): string; - export function dirname(p: string): string; - export function basename(p: string, ext?: string): string; - export function extname(p: string): string; - export var sep: string; - export var delimiter: string; - export function parse(p: string): ParsedPath; - export function format(pP: ParsedPath): string; - } - - export module win32 { - export function normalize(p: string): string; - export function join(...paths: any[]): string; - export function resolve(...pathSegments: any[]): string; - export function isAbsolute(p: string): boolean; - export function relative(from: string, to: string): string; - export function dirname(p: string): string; - export function basename(p: string, ext?: string): string; - export function extname(p: string): string; - export var sep: string; - export var delimiter: string; - export function parse(p: string): ParsedPath; - export function format(pP: ParsedPath): string; - } -} diff --git a/node_modules/urix/.jshintrc b/node_modules/urix/.jshintrc deleted file mode 100644 index 9d1a618..0000000 --- a/node_modules/urix/.jshintrc +++ /dev/null @@ -1,42 +0,0 @@ -{ - "bitwise": true, - "camelcase": true, - "curly": false, - "eqeqeq": true, - "es3": false, - "forin": true, - "immed": false, - "indent": false, - "latedef": "nofunc", - "newcap": false, - "noarg": true, - "noempty": true, - "nonew": false, - "plusplus": false, - "quotmark": true, - "undef": true, - "unused": "vars", - "strict": false, - "trailing": true, - "maxparams": 5, - "maxdepth": false, - "maxstatements": false, - "maxcomplexity": false, - "maxlen": 100, - - "asi": true, - "expr": true, - "globalstrict": true, - "smarttabs": true, - "sub": true, - - "node": true, - "globals": { - "describe": false, - "it": false, - "before": false, - "beforeEach": false, - "after": false, - "afterEach": false - } -} diff --git a/node_modules/urix/LICENSE b/node_modules/urix/LICENSE deleted file mode 100644 index 0595be3..0000000 --- a/node_modules/urix/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2013 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/urix/index.js b/node_modules/urix/index.js deleted file mode 100644 index dc6ef27..0000000 --- a/node_modules/urix/index.js +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2014 Simon Lydell -// X11 (“MIT”) Licensed. (See LICENSE.) - -var path = require("path") - -"use strict" - -function urix(aPath) { - if (path.sep === "\\") { - return aPath - .replace(/\\/g, "/") - .replace(/^[a-z]:\/?/i, "/") - } - return aPath -} - -module.exports = urix diff --git a/node_modules/urix/package.json b/node_modules/urix/package.json deleted file mode 100644 index 992e329..0000000 --- a/node_modules/urix/package.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "urix", - "version": "0.1.0", - "author": "Simon Lydell", - "license": "MIT", - "description": "Makes Windows-style paths more unix and URI friendly.", - "main": "index.js", - "repository": "lydell/urix", - "keywords": [ - "path", - "url", - "uri", - "unix", - "windows", - "backslash", - "slash" - ], - "scripts": { - "test": "jshint index.js test/ && mocha" - }, - "devDependencies": { - "mocha": "^1.17.1", - "jshint": "^2.4.4" - } -} diff --git a/node_modules/urix/readme.md b/node_modules/urix/readme.md deleted file mode 100644 index b258b98..0000000 --- a/node_modules/urix/readme.md +++ /dev/null @@ -1,46 +0,0 @@ -[![Build Status](https://travis-ci.org/lydell/urix.png?branch=master)](https://travis-ci.org/lydell/urix) - -Overview -======== - -Makes Windows-style paths more unix and URI friendly. Useful if you work with -paths that eventually will be used in URLs. - -```js -var urix = require("urix") - -// On Windows: -urix("c:\\users\\you\\foo") -// /users/you/foo - -// On unix-like systems: -urix("c:\\users\\you\\foo") -// c:\users\you\foo -``` - - -Installation -============ - -`npm install urix` - -```js -var urix = require("urix") -``` - - -Usage -===== - -### `urix(path)` ### - -On Windows, replaces all backslashes with slashes and uses a slash instead of a -drive letter and a colon for absolute paths. - -On unix-like systems it is a no-op. - - -License -======= - -[The X11 (“MIT”) License](LICENSE). diff --git a/node_modules/urix/test/index.js b/node_modules/urix/test/index.js deleted file mode 100644 index 5333f24..0000000 --- a/node_modules/urix/test/index.js +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2014 Simon Lydell -// X11 (“MIT”) Licensed. (See LICENSE.) - -var path = require("path") -var assert = require("assert") -var urix = require("../") - -"use stict" - -function test(testPath, expected) { - path.sep = "\\" - assert.equal(urix(testPath), expected) - path.sep = "/" - assert.equal(urix(testPath), testPath) -} - -describe("urix", function() { - - it("is a function", function() { - assert.equal(typeof urix, "function") - }) - - - it("converts backslashes to slashes", function() { - test("a\\b\\c", "a/b/c") - test("\\a\\b\\c", "/a/b/c") - test("a/b\\c", "a/b/c") - test("\\\\a\\\\\\b///c", "//a///b///c") - }) - - - it("changes the drive letter to a slash", function() { - test("c:\\a", "/a") - test("C:\\a", "/a") - test("z:\\a", "/a") - test("c:a", "/a") - test("c:/a", "/a") - test("c:\\\\a", "//a") - test("c://a", "//a") - test("c:\\//a", "///a") - }) - -}) diff --git a/node_modules/use/LICENSE b/node_modules/use/LICENSE deleted file mode 100644 index 7cccaf9..0000000 --- a/node_modules/use/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015-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/use/README.md b/node_modules/use/README.md deleted file mode 100644 index 59b1dbd..0000000 --- a/node_modules/use/README.md +++ /dev/null @@ -1,90 +0,0 @@ -# use [![NPM version](https://img.shields.io/npm/v/use.svg?style=flat)](https://www.npmjs.com/package/use) [![NPM monthly downloads](https://img.shields.io/npm/dm/use.svg?style=flat)](https://npmjs.org/package/use) [![NPM total downloads](https://img.shields.io/npm/dt/use.svg?style=flat)](https://npmjs.org/package/use) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/use.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/use) - -> Easily add plugin support to your node.js application. - -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 use -``` - -A different take on plugin handling! This is not a middleware system, if you need something that handles async middleware, [ware](https://github.com/segmentio/ware) is great for that. - -## Usage - -```js -const use = require('use'); -``` - -See the [examples folder](./examples) for usage examples. - -## 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: - -* [base-plugins](https://www.npmjs.com/package/base-plugins): Adds 'smart plugin' support to your base application. | [homepage](https://github.com/node-base/base-plugins "Adds 'smart plugin' support to your base application.") -* [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") -* [ware](https://www.npmjs.com/package/ware): Easily create your own middleware layer. | [homepage](https://github.com/segmentio/ware "Easily create your own middleware layer.") - -### Contributors - -| **Commits** | **Contributor** | -| --- | --- | -| 37 | [jonschlinkert](https://github.com/jonschlinkert) | -| 7 | [charlike-old](https://github.com/charlike-old) | -| 2 | [doowb](https://github.com/doowb) | -| 2 | [wtgtybhertgeghgtwtg](https://github.com/wtgtybhertgeghgtwtg) | - -### 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 July 12, 2018._ \ No newline at end of file diff --git a/node_modules/use/index.js b/node_modules/use/index.js deleted file mode 100644 index 9a1eb4e..0000000 --- a/node_modules/use/index.js +++ /dev/null @@ -1,155 +0,0 @@ -/*! - * use - * - * Copyright (c) 2015-2017, Jon Schlinkert. - * Released under the MIT License. - */ - -'use strict'; - -module.exports = function base(app, options) { - if (!isObject(app) && typeof app !== 'function') { - throw new TypeError('expected an object or function'); - } - - var opts = isObject(options) ? options : {}; - var prop = typeof opts.prop === 'string' ? opts.prop : 'fns'; - if (!Array.isArray(app[prop])) { - define(app, prop, []); - } - - /** - * Define a plugin function to be passed to use. The only - * parameter exposed to the plugin is `app`, the object or function. - * passed to `use(app)`. `app` is also exposed as `this` in plugins. - * - * Additionally, **if a plugin returns a function, the function will - * be pushed onto the `fns` array**, allowing the plugin to be - * called at a later point by the `run` method. - * - * ```js - * var use = require('use'); - * - * // define a plugin - * function foo(app) { - * // do stuff - * } - * - * var app = function(){}; - * use(app); - * - * // register plugins - * app.use(foo); - * app.use(bar); - * app.use(baz); - * ``` - * @name .use - * @param {Function} `fn` plugin function to call - * @api public - */ - - define(app, 'use', use); - - /** - * Run all plugins on `fns`. Any plugin that returns a function - * when called by `use` is pushed onto the `fns` array. - * - * ```js - * var config = {}; - * app.run(config); - * ``` - * @name .run - * @param {Object} `value` Object to be modified by plugins. - * @return {Object} Returns the object passed to `run` - * @api public - */ - - define(app, 'run', function(val) { - if (!isObject(val)) return; - - if (!val.use || !val.run) { - define(val, prop, val[prop] || []); - define(val, 'use', use); - } - - if (!val[prop] || val[prop].indexOf(base) === -1) { - val.use(base); - } - - var self = this || app; - var fns = self[prop]; - var len = fns.length; - var idx = -1; - - while (++idx < len) { - val.use(fns[idx]); - } - return val; - }); - - /** - * Call plugin `fn`. If a function is returned push it into the - * `fns` array to be called by the `run` method. - */ - - function use(type, fn, options) { - var offset = 1; - - if (typeof type === 'string' || Array.isArray(type)) { - fn = wrap(type, fn); - offset++; - } else { - options = fn; - fn = type; - } - - if (typeof fn !== 'function') { - throw new TypeError('expected a function'); - } - - var self = this || app; - var fns = self[prop]; - - var args = [].slice.call(arguments, offset); - args.unshift(self); - - if (typeof opts.hook === 'function') { - opts.hook.apply(self, args); - } - - var val = fn.apply(self, args); - if (typeof val === 'function' && fns.indexOf(val) === -1) { - fns.push(val); - } - return self; - } - - /** - * Wrap a named plugin function so that it's only called on objects of the - * given `type` - * - * @param {String} `type` - * @param {Function} `fn` Plugin function - * @return {Function} - */ - - function wrap(type, fn) { - return function plugin() { - return this.type === type ? fn.apply(this, arguments) : plugin; - }; - } - - return app; -}; - -function isObject(val) { - return val && typeof val === 'object' && !Array.isArray(val); -} - -function define(obj, key, val) { - Object.defineProperty(obj, key, { - configurable: true, - writable: true, - value: val - }); -} diff --git a/node_modules/use/package.json b/node_modules/use/package.json deleted file mode 100644 index b7a3f9a..0000000 --- a/node_modules/use/package.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "name": "use", - "description": "Easily add plugin support to your node.js application.", - "version": "3.1.1", - "homepage": "https://github.com/jonschlinkert/use", - "author": "Jon Schlinkert (https://github.com/jonschlinkert)", - "contributors": [ - "Brian Woodward (https://twitter.com/doowb)", - "Jon Schlinkert (http://twitter.com/jonschlinkert)", - "Olsten Larck (https://i.am.charlike.online)", - "(https://github.com/wtgtybhertgeghgtwtg)" - ], - "repository": "jonschlinkert/use", - "bugs": { - "url": "https://github.com/jonschlinkert/use/issues" - }, - "license": "MIT", - "files": [ - "index.js" - ], - "main": "index.js", - "engines": { - "node": ">=0.10.0" - }, - "scripts": { - "test": "mocha" - }, - "devDependencies": { - "base-plugins": "^1.0.0", - "define-property": "^2.0.0", - "extend-shallow": "^3.0.1", - "gulp": "^3.9.1", - "gulp-eslint": "^4.0.0", - "gulp-format-md": "^1.0.0", - "gulp-istanbul": "^1.1.2", - "gulp-mocha": "^3.0.1", - "mocha": "^4.0.1" - }, - "keywords": [ - "use" - ], - "verb": { - "toc": false, - "layout": "default", - "tasks": [ - "readme" - ], - "plugins": [ - "gulp-format-md" - ], - "related": { - "list": [ - "base", - "base-plugins", - "ware" - ] - }, - "reflinks": [ - "verb", - "ware" - ], - "lint": { - "reflinks": true - } - } -} diff --git a/node_modules/util-deprecate/History.md b/node_modules/util-deprecate/History.md deleted file mode 100644 index acc8675..0000000 --- a/node_modules/util-deprecate/History.md +++ /dev/null @@ -1,16 +0,0 @@ - -1.0.2 / 2015-10-07 -================== - - * use try/catch when checking `localStorage` (#3, @kumavis) - -1.0.1 / 2014-11-25 -================== - - * browser: use `console.warn()` for deprecation calls - * browser: more jsdocs - -1.0.0 / 2014-04-30 -================== - - * initial commit diff --git a/node_modules/util-deprecate/LICENSE b/node_modules/util-deprecate/LICENSE deleted file mode 100644 index 6a60e8c..0000000 --- a/node_modules/util-deprecate/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -(The MIT License) - -Copyright (c) 2014 Nathan Rajlich - -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/util-deprecate/README.md b/node_modules/util-deprecate/README.md deleted file mode 100644 index 75622fa..0000000 --- a/node_modules/util-deprecate/README.md +++ /dev/null @@ -1,53 +0,0 @@ -util-deprecate -============== -### The Node.js `util.deprecate()` function with browser support - -In Node.js, this module simply re-exports the `util.deprecate()` function. - -In the web browser (i.e. via browserify), a browser-specific implementation -of the `util.deprecate()` function is used. - - -## API - -A `deprecate()` function is the only thing exposed by this module. - -``` javascript -// setup: -exports.foo = deprecate(foo, 'foo() is deprecated, use bar() instead'); - - -// users see: -foo(); -// foo() is deprecated, use bar() instead -foo(); -foo(); -``` - - -## License - -(The MIT License) - -Copyright (c) 2014 Nathan Rajlich - -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/util-deprecate/browser.js b/node_modules/util-deprecate/browser.js deleted file mode 100644 index 549ae2f..0000000 --- a/node_modules/util-deprecate/browser.js +++ /dev/null @@ -1,67 +0,0 @@ - -/** - * Module exports. - */ - -module.exports = deprecate; - -/** - * Mark that a method should not be used. - * Returns a modified function which warns once by default. - * - * If `localStorage.noDeprecation = true` is set, then it is a no-op. - * - * If `localStorage.throwDeprecation = true` is set, then deprecated functions - * will throw an Error when invoked. - * - * If `localStorage.traceDeprecation = true` is set, then deprecated functions - * will invoke `console.trace()` instead of `console.error()`. - * - * @param {Function} fn - the function to deprecate - * @param {String} msg - the string to print to the console when `fn` is invoked - * @returns {Function} a new "deprecated" version of `fn` - * @api public - */ - -function deprecate (fn, msg) { - if (config('noDeprecation')) { - return fn; - } - - var warned = false; - function deprecated() { - if (!warned) { - if (config('throwDeprecation')) { - throw new Error(msg); - } else if (config('traceDeprecation')) { - console.trace(msg); - } else { - console.warn(msg); - } - warned = true; - } - return fn.apply(this, arguments); - } - - return deprecated; -} - -/** - * Checks `localStorage` for boolean values for the given `name`. - * - * @param {String} name - * @returns {Boolean} - * @api private - */ - -function config (name) { - // accessing global.localStorage can trigger a DOMException in sandboxed iframes - try { - if (!global.localStorage) return false; - } catch (_) { - return false; - } - var val = global.localStorage[name]; - if (null == val) return false; - return String(val).toLowerCase() === 'true'; -} diff --git a/node_modules/util-deprecate/node.js b/node_modules/util-deprecate/node.js deleted file mode 100644 index 5e6fcff..0000000 --- a/node_modules/util-deprecate/node.js +++ /dev/null @@ -1,6 +0,0 @@ - -/** - * For Node.js, simply re-export the core `util.deprecate` function. - */ - -module.exports = require('util').deprecate; diff --git a/node_modules/util-deprecate/package.json b/node_modules/util-deprecate/package.json deleted file mode 100644 index 2e79f89..0000000 --- a/node_modules/util-deprecate/package.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "util-deprecate", - "version": "1.0.2", - "description": "The Node.js `util.deprecate()` function with browser support", - "main": "node.js", - "browser": "browser.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "repository": { - "type": "git", - "url": "git://github.com/TooTallNate/util-deprecate.git" - }, - "keywords": [ - "util", - "deprecate", - "browserify", - "browser", - "node" - ], - "author": "Nathan Rajlich (http://n8.io/)", - "license": "MIT", - "bugs": { - "url": "https://github.com/TooTallNate/util-deprecate/issues" - }, - "homepage": "https://github.com/TooTallNate/util-deprecate" -} diff --git a/node_modules/utils-merge/.npmignore b/node_modules/utils-merge/.npmignore deleted file mode 100644 index 3e53844..0000000 --- a/node_modules/utils-merge/.npmignore +++ /dev/null @@ -1,9 +0,0 @@ -CONTRIBUTING.md -Makefile -docs/ -examples/ -reports/ -test/ - -.jshintrc -.travis.yml diff --git a/node_modules/utils-merge/LICENSE b/node_modules/utils-merge/LICENSE deleted file mode 100644 index 76f6d08..0000000 --- a/node_modules/utils-merge/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2013-2017 Jared Hanson - -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/utils-merge/README.md b/node_modules/utils-merge/README.md deleted file mode 100644 index 0cb7117..0000000 --- a/node_modules/utils-merge/README.md +++ /dev/null @@ -1,34 +0,0 @@ -# utils-merge - -[![Version](https://img.shields.io/npm/v/utils-merge.svg?label=version)](https://www.npmjs.com/package/utils-merge) -[![Build](https://img.shields.io/travis/jaredhanson/utils-merge.svg)](https://travis-ci.org/jaredhanson/utils-merge) -[![Quality](https://img.shields.io/codeclimate/github/jaredhanson/utils-merge.svg?label=quality)](https://codeclimate.com/github/jaredhanson/utils-merge) -[![Coverage](https://img.shields.io/coveralls/jaredhanson/utils-merge.svg)](https://coveralls.io/r/jaredhanson/utils-merge) -[![Dependencies](https://img.shields.io/david/jaredhanson/utils-merge.svg)](https://david-dm.org/jaredhanson/utils-merge) - - -Merges the properties from a source object into a destination object. - -## Install - -```bash -$ npm install utils-merge -``` - -## Usage - -```javascript -var a = { foo: 'bar' } - , b = { bar: 'baz' }; - -merge(a, b); -// => { foo: 'bar', bar: 'baz' } -``` - -## License - -[The MIT License](http://opensource.org/licenses/MIT) - -Copyright (c) 2013-2017 Jared Hanson <[http://jaredhanson.net/](http://jaredhanson.net/)> - - Sponsor diff --git a/node_modules/utils-merge/index.js b/node_modules/utils-merge/index.js deleted file mode 100644 index 4265c69..0000000 --- a/node_modules/utils-merge/index.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * Merge object b with object a. - * - * var a = { foo: 'bar' } - * , b = { bar: 'baz' }; - * - * merge(a, b); - * // => { foo: 'bar', bar: 'baz' } - * - * @param {Object} a - * @param {Object} b - * @return {Object} - * @api public - */ - -exports = module.exports = function(a, b){ - if (a && b) { - for (var key in b) { - a[key] = b[key]; - } - } - return a; -}; diff --git a/node_modules/utils-merge/package.json b/node_modules/utils-merge/package.json deleted file mode 100644 index e36b078..0000000 --- a/node_modules/utils-merge/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "utils-merge", - "version": "1.0.1", - "description": "merge() utility function", - "keywords": [ - "util" - ], - "author": { - "name": "Jared Hanson", - "email": "jaredhanson@gmail.com", - "url": "http://www.jaredhanson.net/" - }, - "repository": { - "type": "git", - "url": "git://github.com/jaredhanson/utils-merge.git" - }, - "bugs": { - "url": "http://github.com/jaredhanson/utils-merge/issues" - }, - "license": "MIT", - "licenses": [ - { - "type": "MIT", - "url": "http://opensource.org/licenses/MIT" - } - ], - "main": "./index", - "dependencies": {}, - "devDependencies": { - "make-node": "0.3.x", - "mocha": "1.x.x", - "chai": "1.x.x" - }, - "engines": { - "node": ">= 0.4.0" - }, - "scripts": { - "test": "node_modules/.bin/mocha --reporter spec --require test/bootstrap/node test/*.test.js" - } -} diff --git a/node_modules/uuid/AUTHORS b/node_modules/uuid/AUTHORS deleted file mode 100644 index 5a10523..0000000 --- a/node_modules/uuid/AUTHORS +++ /dev/null @@ -1,5 +0,0 @@ -Robert Kieffer -Christoph Tavan -AJ ONeal -Vincent Voyer -Roman Shtylman diff --git a/node_modules/uuid/CHANGELOG.md b/node_modules/uuid/CHANGELOG.md deleted file mode 100644 index f811b8a..0000000 --- a/node_modules/uuid/CHANGELOG.md +++ /dev/null @@ -1,119 +0,0 @@ -# Changelog - -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. - -## [3.4.0](https://github.com/uuidjs/uuid/compare/v3.3.3...v3.4.0) (2020-01-16) - - -### Features - -* rename repository to github:uuidjs/uuid ([#351](https://github.com/uuidjs/uuid/issues/351)) ([e2d7314](https://github.com/uuidjs/uuid/commit/e2d7314)), closes [#338](https://github.com/uuidjs/uuid/issues/338) - -### [3.3.3](https://github.com/uuidjs/uuid/compare/v3.3.2...v3.3.3) (2019-08-19) - - -## [3.3.2](https://github.com/uuidjs/uuid/compare/v3.3.1...v3.3.2) (2018-06-28) - - -### Bug Fixes - -* typo ([305d877](https://github.com/uuidjs/uuid/commit/305d877)) - - - - -## [3.3.1](https://github.com/uuidjs/uuid/compare/v3.3.0...v3.3.1) (2018-06-28) - - -### Bug Fixes - -* fix [#284](https://github.com/uuidjs/uuid/issues/284) by setting function name in try-catch ([f2a60f2](https://github.com/uuidjs/uuid/commit/f2a60f2)) - - - - -# [3.3.0](https://github.com/uuidjs/uuid/compare/v3.2.1...v3.3.0) (2018-06-22) - - -### Bug Fixes - -* assignment to readonly property to allow running in strict mode ([#270](https://github.com/uuidjs/uuid/issues/270)) ([d062fdc](https://github.com/uuidjs/uuid/commit/d062fdc)) -* fix [#229](https://github.com/uuidjs/uuid/issues/229) ([c9684d4](https://github.com/uuidjs/uuid/commit/c9684d4)) -* Get correct version of IE11 crypto ([#274](https://github.com/uuidjs/uuid/issues/274)) ([153d331](https://github.com/uuidjs/uuid/commit/153d331)) -* mem issue when generating uuid ([#267](https://github.com/uuidjs/uuid/issues/267)) ([c47702c](https://github.com/uuidjs/uuid/commit/c47702c)) - -### Features - -* enforce Conventional Commit style commit messages ([#282](https://github.com/uuidjs/uuid/issues/282)) ([cc9a182](https://github.com/uuidjs/uuid/commit/cc9a182)) - - - -## [3.2.1](https://github.com/uuidjs/uuid/compare/v3.2.0...v3.2.1) (2018-01-16) - - -### Bug Fixes - -* use msCrypto if available. Fixes [#241](https://github.com/uuidjs/uuid/issues/241) ([#247](https://github.com/uuidjs/uuid/issues/247)) ([1fef18b](https://github.com/uuidjs/uuid/commit/1fef18b)) - - - - -# [3.2.0](https://github.com/uuidjs/uuid/compare/v3.1.0...v3.2.0) (2018-01-16) - - -### Bug Fixes - -* remove mistakenly added typescript dependency, rollback version (standard-version will auto-increment) ([09fa824](https://github.com/uuidjs/uuid/commit/09fa824)) -* use msCrypto if available. Fixes [#241](https://github.com/uuidjs/uuid/issues/241) ([#247](https://github.com/uuidjs/uuid/issues/247)) ([1fef18b](https://github.com/uuidjs/uuid/commit/1fef18b)) - - -### Features - -* Add v3 Support ([#217](https://github.com/uuidjs/uuid/issues/217)) ([d94f726](https://github.com/uuidjs/uuid/commit/d94f726)) - - -# [3.1.0](https://github.com/uuidjs/uuid/compare/v3.1.0...v3.0.1) (2017-06-17) - -### Bug Fixes - -* (fix) Add .npmignore file to exclude test/ and other non-essential files from packing. (#183) -* Fix typo (#178) -* Simple typo fix (#165) - -### Features -* v5 support in CLI (#197) -* V5 support (#188) - - -# 3.0.1 (2016-11-28) - -* split uuid versions into separate files - - -# 3.0.0 (2016-11-17) - -* remove .parse and .unparse - - -# 2.0.0 - -* Removed uuid.BufferClass - - -# 1.4.0 - -* Improved module context detection -* Removed public RNG functions - - -# 1.3.2 - -* Improve tests and handling of v1() options (Issue #24) -* Expose RNG option to allow for perf testing with different generators - - -# 1.3.0 - -* Support for version 1 ids, thanks to [@ctavan](https://github.com/ctavan)! -* Support for node.js crypto API -* De-emphasizing performance in favor of a) cryptographic quality PRNGs where available and b) more manageable code diff --git a/node_modules/uuid/LICENSE.md b/node_modules/uuid/LICENSE.md deleted file mode 100644 index 8c84e39..0000000 --- a/node_modules/uuid/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2010-2016 Robert Kieffer 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/uuid/README.md b/node_modules/uuid/README.md deleted file mode 100644 index 1752e47..0000000 --- a/node_modules/uuid/README.md +++ /dev/null @@ -1,276 +0,0 @@ - - -# uuid [![Build Status](https://secure.travis-ci.org/kelektiv/node-uuid.svg?branch=master)](http://travis-ci.org/kelektiv/node-uuid) # - -Simple, fast generation of [RFC4122](http://www.ietf.org/rfc/rfc4122.txt) UUIDS. - -Features: - -* Support for version 1, 3, 4 and 5 UUIDs -* Cross-platform -* Uses cryptographically-strong random number APIs (when available) -* Zero-dependency, small footprint (... but not [this small](https://gist.github.com/982883)) - -[**Deprecation warning**: The use of `require('uuid')` is deprecated and will not be -supported after version 3.x of this module. Instead, use `require('uuid/[v1|v3|v4|v5]')` as shown in the examples below.] - -## Quickstart - CommonJS (Recommended) - -```shell -npm install uuid -``` - -Then generate your uuid version of choice ... - -Version 1 (timestamp): - -```javascript -const uuidv1 = require('uuid/v1'); -uuidv1(); // ⇨ '2c5ea4c0-4067-11e9-8bad-9b1deb4d3b7d' - -``` - -Version 3 (namespace): - -```javascript -const uuidv3 = require('uuid/v3'); - -// ... using predefined DNS namespace (for domain names) -uuidv3('hello.example.com', uuidv3.DNS); // ⇨ '9125a8dc-52ee-365b-a5aa-81b0b3681cf6' - -// ... using predefined URL namespace (for, well, URLs) -uuidv3('http://example.com/hello', uuidv3.URL); // ⇨ 'c6235813-3ba4-3801-ae84-e0a6ebb7d138' - -// ... using a custom namespace -// -// Note: Custom namespaces should be a UUID string specific to your application! -// E.g. the one here was generated using this modules `uuid` CLI. -const MY_NAMESPACE = '1b671a64-40d5-491e-99b0-da01ff1f3341'; -uuidv3('Hello, World!', MY_NAMESPACE); // ⇨ 'e8b5a51d-11c8-3310-a6ab-367563f20686' - -``` - -Version 4 (random): - -```javascript -const uuidv4 = require('uuid/v4'); -uuidv4(); // ⇨ '1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed' - -``` - -Version 5 (namespace): - -```javascript -const uuidv5 = require('uuid/v5'); - -// ... using predefined DNS namespace (for domain names) -uuidv5('hello.example.com', uuidv5.DNS); // ⇨ 'fdda765f-fc57-5604-a269-52a7df8164ec' - -// ... using predefined URL namespace (for, well, URLs) -uuidv5('http://example.com/hello', uuidv5.URL); // ⇨ '3bbcee75-cecc-5b56-8031-b6641c1ed1f1' - -// ... using a custom namespace -// -// Note: Custom namespaces should be a UUID string specific to your application! -// E.g. the one here was generated using this modules `uuid` CLI. -const MY_NAMESPACE = '1b671a64-40d5-491e-99b0-da01ff1f3341'; -uuidv5('Hello, World!', MY_NAMESPACE); // ⇨ '630eb68f-e0fa-5ecc-887a-7c7a62614681' - -``` - -## API - -### Version 1 - -```javascript -const uuidv1 = require('uuid/v1'); - -// Incantations -uuidv1(); -uuidv1(options); -uuidv1(options, buffer, offset); -``` - -Generate and return a RFC4122 v1 (timestamp-based) UUID. - -* `options` - (Object) Optional uuid state to apply. Properties may include: - - * `node` - (Array) Node id as Array of 6 bytes (per 4.1.6). Default: Randomly generated ID. See note 1. - * `clockseq` - (Number between 0 - 0x3fff) RFC clock sequence. Default: An internally maintained clockseq is used. - * `msecs` - (Number) Time in milliseconds since unix Epoch. Default: The current time is used. - * `nsecs` - (Number between 0-9999) additional time, in 100-nanosecond units. Ignored if `msecs` is unspecified. Default: internal uuid counter is used, as per 4.2.1.2. - -* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. -* `offset` - (Number) Starting index in `buffer` at which to begin writing. - -Returns `buffer`, if specified, otherwise the string form of the UUID - -Note: The default [node id](https://tools.ietf.org/html/rfc4122#section-4.1.6) (the last 12 digits in the UUID) is generated once, randomly, on process startup, and then remains unchanged for the duration of the process. - -Example: Generate string UUID with fully-specified options - -```javascript -const v1options = { - node: [0x01, 0x23, 0x45, 0x67, 0x89, 0xab], - clockseq: 0x1234, - msecs: new Date('2011-11-01').getTime(), - nsecs: 5678 -}; -uuidv1(v1options); // ⇨ '710b962e-041c-11e1-9234-0123456789ab' - -``` - -Example: In-place generation of two binary IDs - -```javascript -// Generate two ids in an array -const arr = new Array(); -uuidv1(null, arr, 0); // ⇨ - // [ - // 44, 94, 164, 192, 64, 103, - // 17, 233, 146, 52, 155, 29, - // 235, 77, 59, 125 - // ] -uuidv1(null, arr, 16); // ⇨ - // [ - // 44, 94, 164, 192, 64, 103, 17, 233, - // 146, 52, 155, 29, 235, 77, 59, 125, - // 44, 94, 164, 193, 64, 103, 17, 233, - // 146, 52, 155, 29, 235, 77, 59, 125 - // ] - -``` - -### Version 3 - -```javascript -const uuidv3 = require('uuid/v3'); - -// Incantations -uuidv3(name, namespace); -uuidv3(name, namespace, buffer); -uuidv3(name, namespace, buffer, offset); -``` - -Generate and return a RFC4122 v3 UUID. - -* `name` - (String | Array[]) "name" to create UUID with -* `namespace` - (String | Array[]) "namespace" UUID either as a String or Array[16] of byte values -* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. -* `offset` - (Number) Starting index in `buffer` at which to begin writing. Default = 0 - -Returns `buffer`, if specified, otherwise the string form of the UUID - -Example: - -```javascript -uuidv3('hello world', MY_NAMESPACE); // ⇨ '042ffd34-d989-321c-ad06-f60826172424' - -``` - -### Version 4 - -```javascript -const uuidv4 = require('uuid/v4') - -// Incantations -uuidv4(); -uuidv4(options); -uuidv4(options, buffer, offset); -``` - -Generate and return a RFC4122 v4 UUID. - -* `options` - (Object) Optional uuid state to apply. Properties may include: - * `random` - (Number[16]) Array of 16 numbers (0-255) to use in place of randomly generated values - * `rng` - (Function) Random # generator function that returns an Array[16] of byte values (0-255) -* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. -* `offset` - (Number) Starting index in `buffer` at which to begin writing. - -Returns `buffer`, if specified, otherwise the string form of the UUID - -Example: Generate string UUID with predefined `random` values - -```javascript -const v4options = { - random: [ - 0x10, 0x91, 0x56, 0xbe, 0xc4, 0xfb, 0xc1, 0xea, - 0x71, 0xb4, 0xef, 0xe1, 0x67, 0x1c, 0x58, 0x36 - ] -}; -uuidv4(v4options); // ⇨ '109156be-c4fb-41ea-b1b4-efe1671c5836' - -``` - -Example: Generate two IDs in a single buffer - -```javascript -const buffer = new Array(); -uuidv4(null, buffer, 0); // ⇨ - // [ - // 155, 29, 235, 77, 59, - // 125, 75, 173, 155, 221, - // 43, 13, 123, 61, 203, - // 109 - // ] -uuidv4(null, buffer, 16); // ⇨ - // [ - // 155, 29, 235, 77, 59, 125, 75, 173, - // 155, 221, 43, 13, 123, 61, 203, 109, - // 27, 157, 107, 205, 187, 253, 75, 45, - // 155, 93, 171, 141, 251, 189, 75, 237 - // ] - -``` - -### Version 5 - -```javascript -const uuidv5 = require('uuid/v5'); - -// Incantations -uuidv5(name, namespace); -uuidv5(name, namespace, buffer); -uuidv5(name, namespace, buffer, offset); -``` - -Generate and return a RFC4122 v5 UUID. - -* `name` - (String | Array[]) "name" to create UUID with -* `namespace` - (String | Array[]) "namespace" UUID either as a String or Array[16] of byte values -* `buffer` - (Array | Buffer) Array or buffer where UUID bytes are to be written. -* `offset` - (Number) Starting index in `buffer` at which to begin writing. Default = 0 - -Returns `buffer`, if specified, otherwise the string form of the UUID - -Example: - -```javascript -uuidv5('hello world', MY_NAMESPACE); // ⇨ '9f282611-e0fd-5650-8953-89c8e342da0b' - -``` - -## Command Line - -UUIDs can be generated from the command line with the `uuid` command. - -```shell -$ uuid -ddeb27fb-d9a0-4624-be4d-4615062daed4 - -$ uuid v1 -02d37060-d446-11e7-a9fa-7bdae751ebe1 -``` - -Type `uuid --help` for usage details - -## Testing - -```shell -npm test -``` - ----- -Markdown generated from [README_js.md](README_js.md) by [![RunMD Logo](http://i.imgur.com/h0FVyzU.png)](https://github.com/broofa/runmd) \ No newline at end of file diff --git a/node_modules/uuid/bin/uuid b/node_modules/uuid/bin/uuid deleted file mode 100755 index 502626e..0000000 --- a/node_modules/uuid/bin/uuid +++ /dev/null @@ -1,65 +0,0 @@ -#!/usr/bin/env node -var assert = require('assert'); - -function usage() { - console.log('Usage:'); - console.log(' uuid'); - console.log(' uuid v1'); - console.log(' uuid v3 '); - console.log(' uuid v4'); - console.log(' uuid v5 '); - console.log(' uuid --help'); - console.log('\nNote: may be "URL" or "DNS" to use the corresponding UUIDs defined by RFC4122'); -} - -var args = process.argv.slice(2); - -if (args.indexOf('--help') >= 0) { - usage(); - process.exit(0); -} -var version = args.shift() || 'v4'; - -switch (version) { - case 'v1': - var uuidV1 = require('../v1'); - console.log(uuidV1()); - break; - - case 'v3': - var uuidV3 = require('../v3'); - - var name = args.shift(); - var namespace = args.shift(); - assert(name != null, 'v3 name not specified'); - assert(namespace != null, 'v3 namespace not specified'); - - if (namespace == 'URL') namespace = uuidV3.URL; - if (namespace == 'DNS') namespace = uuidV3.DNS; - - console.log(uuidV3(name, namespace)); - break; - - case 'v4': - var uuidV4 = require('../v4'); - console.log(uuidV4()); - break; - - case 'v5': - var uuidV5 = require('../v5'); - - var name = args.shift(); - var namespace = args.shift(); - assert(name != null, 'v5 name not specified'); - assert(namespace != null, 'v5 namespace not specified'); - - if (namespace == 'URL') namespace = uuidV5.URL; - if (namespace == 'DNS') namespace = uuidV5.DNS; - - console.log(uuidV5(name, namespace)); - break; - - default: - usage(); - process.exit(1); -} diff --git a/node_modules/uuid/index.js b/node_modules/uuid/index.js deleted file mode 100644 index e96791a..0000000 --- a/node_modules/uuid/index.js +++ /dev/null @@ -1,8 +0,0 @@ -var v1 = require('./v1'); -var v4 = require('./v4'); - -var uuid = v4; -uuid.v1 = v1; -uuid.v4 = v4; - -module.exports = uuid; diff --git a/node_modules/uuid/lib/bytesToUuid.js b/node_modules/uuid/lib/bytesToUuid.js deleted file mode 100644 index 24b6041..0000000 --- a/node_modules/uuid/lib/bytesToUuid.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Convert array of 16 byte values to UUID string format of the form: - * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - */ -var byteToHex = []; -for (var i = 0; i < 256; ++i) { - byteToHex[i] = (i + 0x100).toString(16).substr(1); -} - -function bytesToUuid(buf, offset) { - var i = offset || 0; - var bth = byteToHex; - // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4 - return ([ - bth[buf[i++]], bth[buf[i++]], - bth[buf[i++]], bth[buf[i++]], '-', - bth[buf[i++]], bth[buf[i++]], '-', - bth[buf[i++]], bth[buf[i++]], '-', - bth[buf[i++]], bth[buf[i++]], '-', - bth[buf[i++]], bth[buf[i++]], - bth[buf[i++]], bth[buf[i++]], - bth[buf[i++]], bth[buf[i++]] - ]).join(''); -} - -module.exports = bytesToUuid; diff --git a/node_modules/uuid/lib/md5-browser.js b/node_modules/uuid/lib/md5-browser.js deleted file mode 100644 index 9b3b6c7..0000000 --- a/node_modules/uuid/lib/md5-browser.js +++ /dev/null @@ -1,216 +0,0 @@ -/* - * Browser-compatible JavaScript MD5 - * - * Modification of JavaScript MD5 - * https://github.com/blueimp/JavaScript-MD5 - * - * Copyright 2011, Sebastian Tschan - * https://blueimp.net - * - * Licensed under the MIT license: - * https://opensource.org/licenses/MIT - * - * Based on - * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message - * Digest Algorithm, as defined in RFC 1321. - * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009 - * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet - * Distributed under the BSD License - * See http://pajhome.org.uk/crypt/md5 for more info. - */ - -'use strict'; - -function md5(bytes) { - if (typeof(bytes) == 'string') { - var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape - bytes = new Array(msg.length); - for (var i = 0; i < msg.length; i++) bytes[i] = msg.charCodeAt(i); - } - - return md5ToHexEncodedArray( - wordsToMd5( - bytesToWords(bytes) - , bytes.length * 8) - ); -} - - -/* -* Convert an array of little-endian words to an array of bytes -*/ -function md5ToHexEncodedArray(input) { - var i; - var x; - var output = []; - var length32 = input.length * 32; - var hexTab = '0123456789abcdef'; - var hex; - - for (i = 0; i < length32; i += 8) { - x = (input[i >> 5] >>> (i % 32)) & 0xFF; - - hex = parseInt(hexTab.charAt((x >>> 4) & 0x0F) + hexTab.charAt(x & 0x0F), 16); - - output.push(hex); - } - return output; -} - -/* -* Calculate the MD5 of an array of little-endian words, and a bit length. -*/ -function wordsToMd5(x, len) { - /* append padding */ - x[len >> 5] |= 0x80 << (len % 32); - x[(((len + 64) >>> 9) << 4) + 14] = len; - - var i; - var olda; - var oldb; - var oldc; - var oldd; - var a = 1732584193; - var b = -271733879; - var c = -1732584194; - - var d = 271733878; - - for (i = 0; i < x.length; i += 16) { - olda = a; - oldb = b; - oldc = c; - oldd = d; - - a = md5ff(a, b, c, d, x[i], 7, -680876936); - d = md5ff(d, a, b, c, x[i + 1], 12, -389564586); - c = md5ff(c, d, a, b, x[i + 2], 17, 606105819); - b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330); - a = md5ff(a, b, c, d, x[i + 4], 7, -176418897); - d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426); - c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341); - b = md5ff(b, c, d, a, x[i + 7], 22, -45705983); - a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416); - d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417); - c = md5ff(c, d, a, b, x[i + 10], 17, -42063); - b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162); - a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682); - d = md5ff(d, a, b, c, x[i + 13], 12, -40341101); - c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290); - b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329); - - a = md5gg(a, b, c, d, x[i + 1], 5, -165796510); - d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632); - c = md5gg(c, d, a, b, x[i + 11], 14, 643717713); - b = md5gg(b, c, d, a, x[i], 20, -373897302); - a = md5gg(a, b, c, d, x[i + 5], 5, -701558691); - d = md5gg(d, a, b, c, x[i + 10], 9, 38016083); - c = md5gg(c, d, a, b, x[i + 15], 14, -660478335); - b = md5gg(b, c, d, a, x[i + 4], 20, -405537848); - a = md5gg(a, b, c, d, x[i + 9], 5, 568446438); - d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690); - c = md5gg(c, d, a, b, x[i + 3], 14, -187363961); - b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501); - a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467); - d = md5gg(d, a, b, c, x[i + 2], 9, -51403784); - c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473); - b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734); - - a = md5hh(a, b, c, d, x[i + 5], 4, -378558); - d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463); - c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562); - b = md5hh(b, c, d, a, x[i + 14], 23, -35309556); - a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060); - d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353); - c = md5hh(c, d, a, b, x[i + 7], 16, -155497632); - b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640); - a = md5hh(a, b, c, d, x[i + 13], 4, 681279174); - d = md5hh(d, a, b, c, x[i], 11, -358537222); - c = md5hh(c, d, a, b, x[i + 3], 16, -722521979); - b = md5hh(b, c, d, a, x[i + 6], 23, 76029189); - a = md5hh(a, b, c, d, x[i + 9], 4, -640364487); - d = md5hh(d, a, b, c, x[i + 12], 11, -421815835); - c = md5hh(c, d, a, b, x[i + 15], 16, 530742520); - b = md5hh(b, c, d, a, x[i + 2], 23, -995338651); - - a = md5ii(a, b, c, d, x[i], 6, -198630844); - d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415); - c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905); - b = md5ii(b, c, d, a, x[i + 5], 21, -57434055); - a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571); - d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606); - c = md5ii(c, d, a, b, x[i + 10], 15, -1051523); - b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799); - a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359); - d = md5ii(d, a, b, c, x[i + 15], 10, -30611744); - c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380); - b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649); - a = md5ii(a, b, c, d, x[i + 4], 6, -145523070); - d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379); - c = md5ii(c, d, a, b, x[i + 2], 15, 718787259); - b = md5ii(b, c, d, a, x[i + 9], 21, -343485551); - - a = safeAdd(a, olda); - b = safeAdd(b, oldb); - c = safeAdd(c, oldc); - d = safeAdd(d, oldd); - } - return [a, b, c, d]; -} - -/* -* Convert an array bytes to an array of little-endian words -* Characters >255 have their high-byte silently ignored. -*/ -function bytesToWords(input) { - var i; - var output = []; - output[(input.length >> 2) - 1] = undefined; - for (i = 0; i < output.length; i += 1) { - output[i] = 0; - } - var length8 = input.length * 8; - for (i = 0; i < length8; i += 8) { - output[i >> 5] |= (input[(i / 8)] & 0xFF) << (i % 32); - } - - return output; -} - -/* -* Add integers, wrapping at 2^32. This uses 16-bit operations internally -* to work around bugs in some JS interpreters. -*/ -function safeAdd(x, y) { - var lsw = (x & 0xFFFF) + (y & 0xFFFF); - var msw = (x >> 16) + (y >> 16) + (lsw >> 16); - return (msw << 16) | (lsw & 0xFFFF); -} - -/* -* Bitwise rotate a 32-bit number to the left. -*/ -function bitRotateLeft(num, cnt) { - return (num << cnt) | (num >>> (32 - cnt)); -} - -/* -* These functions implement the four basic operations the algorithm uses. -*/ -function md5cmn(q, a, b, x, s, t) { - return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b); -} -function md5ff(a, b, c, d, x, s, t) { - return md5cmn((b & c) | ((~b) & d), a, b, x, s, t); -} -function md5gg(a, b, c, d, x, s, t) { - return md5cmn((b & d) | (c & (~d)), a, b, x, s, t); -} -function md5hh(a, b, c, d, x, s, t) { - return md5cmn(b ^ c ^ d, a, b, x, s, t); -} -function md5ii(a, b, c, d, x, s, t) { - return md5cmn(c ^ (b | (~d)), a, b, x, s, t); -} - -module.exports = md5; diff --git a/node_modules/uuid/lib/md5.js b/node_modules/uuid/lib/md5.js deleted file mode 100644 index 7044b87..0000000 --- a/node_modules/uuid/lib/md5.js +++ /dev/null @@ -1,25 +0,0 @@ -'use strict'; - -var crypto = require('crypto'); - -function md5(bytes) { - if (typeof Buffer.from === 'function') { - // Modern Buffer API - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); - } - } else { - // Pre-v4 Buffer API - if (Array.isArray(bytes)) { - bytes = new Buffer(bytes); - } else if (typeof bytes === 'string') { - bytes = new Buffer(bytes, 'utf8'); - } - } - - return crypto.createHash('md5').update(bytes).digest(); -} - -module.exports = md5; diff --git a/node_modules/uuid/lib/rng-browser.js b/node_modules/uuid/lib/rng-browser.js deleted file mode 100644 index 6361fb8..0000000 --- a/node_modules/uuid/lib/rng-browser.js +++ /dev/null @@ -1,34 +0,0 @@ -// Unique ID creation requires a high quality random # generator. In the -// browser this is a little complicated due to unknown quality of Math.random() -// and inconsistent support for the `crypto` API. We do the best we can via -// feature-detection - -// getRandomValues needs to be invoked in a context where "this" is a Crypto -// implementation. Also, find the complete implementation of crypto on IE11. -var getRandomValues = (typeof(crypto) != 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto)) || - (typeof(msCrypto) != 'undefined' && typeof window.msCrypto.getRandomValues == 'function' && msCrypto.getRandomValues.bind(msCrypto)); - -if (getRandomValues) { - // WHATWG crypto RNG - http://wiki.whatwg.org/wiki/Crypto - var rnds8 = new Uint8Array(16); // eslint-disable-line no-undef - - module.exports = function whatwgRNG() { - getRandomValues(rnds8); - return rnds8; - }; -} else { - // Math.random()-based (RNG) - // - // If all else fails, use Math.random(). It's fast, but is of unspecified - // quality. - var rnds = new Array(16); - - module.exports = function mathRNG() { - for (var i = 0, r; i < 16; i++) { - if ((i & 0x03) === 0) r = Math.random() * 0x100000000; - rnds[i] = r >>> ((i & 0x03) << 3) & 0xff; - } - - return rnds; - }; -} diff --git a/node_modules/uuid/lib/rng.js b/node_modules/uuid/lib/rng.js deleted file mode 100644 index 58f0dc9..0000000 --- a/node_modules/uuid/lib/rng.js +++ /dev/null @@ -1,8 +0,0 @@ -// Unique ID creation requires a high quality random # generator. In node.js -// this is pretty straight-forward - we use the crypto API. - -var crypto = require('crypto'); - -module.exports = function nodeRNG() { - return crypto.randomBytes(16); -}; diff --git a/node_modules/uuid/lib/sha1-browser.js b/node_modules/uuid/lib/sha1-browser.js deleted file mode 100644 index 5758ed7..0000000 --- a/node_modules/uuid/lib/sha1-browser.js +++ /dev/null @@ -1,89 +0,0 @@ -// Adapted from Chris Veness' SHA1 code at -// http://www.movable-type.co.uk/scripts/sha1.html -'use strict'; - -function f(s, x, y, z) { - switch (s) { - case 0: return (x & y) ^ (~x & z); - case 1: return x ^ y ^ z; - case 2: return (x & y) ^ (x & z) ^ (y & z); - case 3: return x ^ y ^ z; - } -} - -function ROTL(x, n) { - return (x << n) | (x>>> (32 - n)); -} - -function sha1(bytes) { - var K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xca62c1d6]; - var H = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0]; - - if (typeof(bytes) == 'string') { - var msg = unescape(encodeURIComponent(bytes)); // UTF8 escape - bytes = new Array(msg.length); - for (var i = 0; i < msg.length; i++) bytes[i] = msg.charCodeAt(i); - } - - bytes.push(0x80); - - var l = bytes.length/4 + 2; - var N = Math.ceil(l/16); - var M = new Array(N); - - for (var i=0; i>> 0; - e = d; - d = c; - c = ROTL(b, 30) >>> 0; - b = a; - a = T; - } - - H[0] = (H[0] + a) >>> 0; - H[1] = (H[1] + b) >>> 0; - H[2] = (H[2] + c) >>> 0; - H[3] = (H[3] + d) >>> 0; - H[4] = (H[4] + e) >>> 0; - } - - return [ - H[0] >> 24 & 0xff, H[0] >> 16 & 0xff, H[0] >> 8 & 0xff, H[0] & 0xff, - H[1] >> 24 & 0xff, H[1] >> 16 & 0xff, H[1] >> 8 & 0xff, H[1] & 0xff, - H[2] >> 24 & 0xff, H[2] >> 16 & 0xff, H[2] >> 8 & 0xff, H[2] & 0xff, - H[3] >> 24 & 0xff, H[3] >> 16 & 0xff, H[3] >> 8 & 0xff, H[3] & 0xff, - H[4] >> 24 & 0xff, H[4] >> 16 & 0xff, H[4] >> 8 & 0xff, H[4] & 0xff - ]; -} - -module.exports = sha1; diff --git a/node_modules/uuid/lib/sha1.js b/node_modules/uuid/lib/sha1.js deleted file mode 100644 index 0b54b25..0000000 --- a/node_modules/uuid/lib/sha1.js +++ /dev/null @@ -1,25 +0,0 @@ -'use strict'; - -var crypto = require('crypto'); - -function sha1(bytes) { - if (typeof Buffer.from === 'function') { - // Modern Buffer API - if (Array.isArray(bytes)) { - bytes = Buffer.from(bytes); - } else if (typeof bytes === 'string') { - bytes = Buffer.from(bytes, 'utf8'); - } - } else { - // Pre-v4 Buffer API - if (Array.isArray(bytes)) { - bytes = new Buffer(bytes); - } else if (typeof bytes === 'string') { - bytes = new Buffer(bytes, 'utf8'); - } - } - - return crypto.createHash('sha1').update(bytes).digest(); -} - -module.exports = sha1; diff --git a/node_modules/uuid/lib/v35.js b/node_modules/uuid/lib/v35.js deleted file mode 100644 index 8b066cc..0000000 --- a/node_modules/uuid/lib/v35.js +++ /dev/null @@ -1,57 +0,0 @@ -var bytesToUuid = require('./bytesToUuid'); - -function uuidToBytes(uuid) { - // Note: We assume we're being passed a valid uuid string - var bytes = []; - uuid.replace(/[a-fA-F0-9]{2}/g, function(hex) { - bytes.push(parseInt(hex, 16)); - }); - - return bytes; -} - -function stringToBytes(str) { - str = unescape(encodeURIComponent(str)); // UTF8 escape - var bytes = new Array(str.length); - for (var i = 0; i < str.length; i++) { - bytes[i] = str.charCodeAt(i); - } - return bytes; -} - -module.exports = function(name, version, hashfunc) { - var generateUUID = function(value, namespace, buf, offset) { - var off = buf && offset || 0; - - if (typeof(value) == 'string') value = stringToBytes(value); - if (typeof(namespace) == 'string') namespace = uuidToBytes(namespace); - - if (!Array.isArray(value)) throw TypeError('value must be an array of bytes'); - if (!Array.isArray(namespace) || namespace.length !== 16) throw TypeError('namespace must be uuid string or an Array of 16 byte values'); - - // Per 4.3 - var bytes = hashfunc(namespace.concat(value)); - bytes[6] = (bytes[6] & 0x0f) | version; - bytes[8] = (bytes[8] & 0x3f) | 0x80; - - if (buf) { - for (var idx = 0; idx < 16; ++idx) { - buf[off+idx] = bytes[idx]; - } - } - - return buf || bytesToUuid(bytes); - }; - - // Function#name is not settable on some platforms (#270) - try { - generateUUID.name = name; - } catch (err) { - } - - // Pre-defined namespaces, per Appendix C - generateUUID.DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8'; - generateUUID.URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8'; - - return generateUUID; -}; diff --git a/node_modules/uuid/package.json b/node_modules/uuid/package.json deleted file mode 100644 index efc07b8..0000000 --- a/node_modules/uuid/package.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "name": "uuid", - "version": "3.4.0", - "description": "RFC4122 (v1, v4, and v5) UUIDs", - "commitlint": { - "extends": [ - "@commitlint/config-conventional" - ] - }, - "keywords": [ - "uuid", - "guid", - "rfc4122" - ], - "license": "MIT", - "bin": { - "uuid": "./bin/uuid" - }, - "devDependencies": { - "@commitlint/cli": "~8.2.0", - "@commitlint/config-conventional": "~8.2.0", - "eslint": "~6.4.0", - "husky": "~3.0.5", - "mocha": "6.2.0", - "runmd": "1.2.1", - "standard-version": "7.0.0" - }, - "scripts": { - "lint": "eslint .", - "test": "npm run lint && mocha test/test.js", - "md": "runmd --watch --output=README.md README_js.md", - "release": "standard-version", - "prepare": "runmd --output=README.md README_js.md" - }, - "browser": { - "./lib/rng.js": "./lib/rng-browser.js", - "./lib/sha1.js": "./lib/sha1-browser.js", - "./lib/md5.js": "./lib/md5-browser.js" - }, - "repository": { - "type": "git", - "url": "https://github.com/uuidjs/uuid.git" - }, - "husky": { - "hooks": { - "commit-msg": "commitlint -E HUSKY_GIT_PARAMS" - } - } -} diff --git a/node_modules/uuid/v1.js b/node_modules/uuid/v1.js deleted file mode 100644 index 8c245de..0000000 --- a/node_modules/uuid/v1.js +++ /dev/null @@ -1,109 +0,0 @@ -var rng = require('./lib/rng'); -var bytesToUuid = require('./lib/bytesToUuid'); - -// **`v1()` - Generate time-based UUID** -// -// Inspired by https://github.com/LiosK/UUID.js -// and http://docs.python.org/library/uuid.html - -var _nodeId; -var _clockseq; - -// Previous uuid creation time -var _lastMSecs = 0; -var _lastNSecs = 0; - -// See https://github.com/uuidjs/uuid for API details -function v1(options, buf, offset) { - var i = buf && offset || 0; - var b = buf || []; - - options = options || {}; - var node = options.node || _nodeId; - var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; - - // node and clockseq need to be initialized to random values if they're not - // specified. We do this lazily to minimize issues related to insufficient - // system entropy. See #189 - if (node == null || clockseq == null) { - var seedBytes = rng(); - if (node == null) { - // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1) - node = _nodeId = [ - seedBytes[0] | 0x01, - seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5] - ]; - } - if (clockseq == null) { - // Per 4.2.2, randomize (14 bit) clockseq - clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff; - } - } - - // UUID timestamps are 100 nano-second units since the Gregorian epoch, - // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so - // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs' - // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00. - var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime(); - - // Per 4.2.1.2, use count of uuid's generated during the current clock - // cycle to simulate higher resolution clock - var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; - - // Time since last uuid creation (in msecs) - var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000; - - // Per 4.2.1.2, Bump clockseq on clock regression - if (dt < 0 && options.clockseq === undefined) { - clockseq = clockseq + 1 & 0x3fff; - } - - // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new - // time interval - if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) { - nsecs = 0; - } - - // Per 4.2.1.2 Throw error if too many uuids are requested - if (nsecs >= 10000) { - throw new Error('uuid.v1(): Can\'t create more than 10M uuids/sec'); - } - - _lastMSecs = msecs; - _lastNSecs = nsecs; - _clockseq = clockseq; - - // Per 4.1.4 - Convert from unix epoch to Gregorian epoch - msecs += 12219292800000; - - // `time_low` - var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000; - b[i++] = tl >>> 24 & 0xff; - b[i++] = tl >>> 16 & 0xff; - b[i++] = tl >>> 8 & 0xff; - b[i++] = tl & 0xff; - - // `time_mid` - var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff; - b[i++] = tmh >>> 8 & 0xff; - b[i++] = tmh & 0xff; - - // `time_high_and_version` - b[i++] = tmh >>> 24 & 0xf | 0x10; // include version - b[i++] = tmh >>> 16 & 0xff; - - // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant) - b[i++] = clockseq >>> 8 | 0x80; - - // `clock_seq_low` - b[i++] = clockseq & 0xff; - - // `node` - for (var n = 0; n < 6; ++n) { - b[i + n] = node[n]; - } - - return buf ? buf : bytesToUuid(b); -} - -module.exports = v1; diff --git a/node_modules/uuid/v3.js b/node_modules/uuid/v3.js deleted file mode 100644 index ee7e14c..0000000 --- a/node_modules/uuid/v3.js +++ /dev/null @@ -1,4 +0,0 @@ -var v35 = require('./lib/v35.js'); -var md5 = require('./lib/md5'); - -module.exports = v35('v3', 0x30, md5); \ No newline at end of file diff --git a/node_modules/uuid/v4.js b/node_modules/uuid/v4.js deleted file mode 100644 index 1f07be1..0000000 --- a/node_modules/uuid/v4.js +++ /dev/null @@ -1,29 +0,0 @@ -var rng = require('./lib/rng'); -var bytesToUuid = require('./lib/bytesToUuid'); - -function v4(options, buf, offset) { - var i = buf && offset || 0; - - if (typeof(options) == 'string') { - buf = options === 'binary' ? new Array(16) : null; - options = null; - } - options = options || {}; - - var rnds = options.random || (options.rng || rng)(); - - // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - rnds[6] = (rnds[6] & 0x0f) | 0x40; - rnds[8] = (rnds[8] & 0x3f) | 0x80; - - // Copy bytes to buffer, if provided - if (buf) { - for (var ii = 0; ii < 16; ++ii) { - buf[i + ii] = rnds[ii]; - } - } - - return buf || bytesToUuid(rnds); -} - -module.exports = v4; diff --git a/node_modules/uuid/v5.js b/node_modules/uuid/v5.js deleted file mode 100644 index 4945baf..0000000 --- a/node_modules/uuid/v5.js +++ /dev/null @@ -1,3 +0,0 @@ -var v35 = require('./lib/v35.js'); -var sha1 = require('./lib/sha1'); -module.exports = v35('v5', 0x50, sha1); diff --git a/node_modules/vary/HISTORY.md b/node_modules/vary/HISTORY.md deleted file mode 100644 index f6cbcf7..0000000 --- a/node_modules/vary/HISTORY.md +++ /dev/null @@ -1,39 +0,0 @@ -1.1.2 / 2017-09-23 -================== - - * perf: improve header token parsing speed - -1.1.1 / 2017-03-20 -================== - - * perf: hoist regular expression - -1.1.0 / 2015-09-29 -================== - - * Only accept valid field names in the `field` argument - - Ensures the resulting string is a valid HTTP header value - -1.0.1 / 2015-07-08 -================== - - * Fix setting empty header from empty `field` - * perf: enable strict mode - * perf: remove argument reassignments - -1.0.0 / 2014-08-10 -================== - - * Accept valid `Vary` header string as `field` - * Add `vary.append` for low-level string manipulation - * Move to `jshttp` orgainzation - -0.1.0 / 2014-06-05 -================== - - * Support array of fields to set - -0.0.0 / 2014-06-04 -================== - - * Initial release diff --git a/node_modules/vary/LICENSE b/node_modules/vary/LICENSE deleted file mode 100644 index 84441fb..0000000 --- a/node_modules/vary/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -(The MIT License) - -Copyright (c) 2014-2017 Douglas Christopher Wilson - -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/vary/README.md b/node_modules/vary/README.md deleted file mode 100644 index cc000b3..0000000 --- a/node_modules/vary/README.md +++ /dev/null @@ -1,101 +0,0 @@ -# vary - -[![NPM Version][npm-image]][npm-url] -[![NPM Downloads][downloads-image]][downloads-url] -[![Node.js Version][node-version-image]][node-version-url] -[![Build Status][travis-image]][travis-url] -[![Test Coverage][coveralls-image]][coveralls-url] - -Manipulate the HTTP Vary header - -## Installation - -This is a [Node.js](https://nodejs.org/en/) module available through the -[npm registry](https://www.npmjs.com/). Installation is done using the -[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): - -```sh -$ npm install vary -``` - -## API - - - -```js -var vary = require('vary') -``` - -### vary(res, field) - -Adds the given header `field` to the `Vary` response header of `res`. -This can be a string of a single field, a string of a valid `Vary` -header, or an array of multiple fields. - -This will append the header if not already listed, otherwise leaves -it listed in the current location. - - - -```js -// Append "Origin" to the Vary header of the response -vary(res, 'Origin') -``` - -### vary.append(header, field) - -Adds the given header `field` to the `Vary` response header string `header`. -This can be a string of a single field, a string of a valid `Vary` header, -or an array of multiple fields. - -This will append the header if not already listed, otherwise leaves -it listed in the current location. The new header string is returned. - - - -```js -// Get header string appending "Origin" to "Accept, User-Agent" -vary.append('Accept, User-Agent', 'Origin') -``` - -## Examples - -### Updating the Vary header when content is based on it - -```js -var http = require('http') -var vary = require('vary') - -http.createServer(function onRequest (req, res) { - // about to user-agent sniff - vary(res, 'User-Agent') - - var ua = req.headers['user-agent'] || '' - var isMobile = /mobi|android|touch|mini/i.test(ua) - - // serve site, depending on isMobile - res.setHeader('Content-Type', 'text/html') - res.end('You are (probably) ' + (isMobile ? '' : 'not ') + 'a mobile user') -}) -``` - -## Testing - -```sh -$ npm test -``` - -## License - -[MIT](LICENSE) - -[npm-image]: https://img.shields.io/npm/v/vary.svg -[npm-url]: https://npmjs.org/package/vary -[node-version-image]: https://img.shields.io/node/v/vary.svg -[node-version-url]: https://nodejs.org/en/download -[travis-image]: https://img.shields.io/travis/jshttp/vary/master.svg -[travis-url]: https://travis-ci.org/jshttp/vary -[coveralls-image]: https://img.shields.io/coveralls/jshttp/vary/master.svg -[coveralls-url]: https://coveralls.io/r/jshttp/vary -[downloads-image]: https://img.shields.io/npm/dm/vary.svg -[downloads-url]: https://npmjs.org/package/vary diff --git a/node_modules/vary/index.js b/node_modules/vary/index.js deleted file mode 100644 index 5b5e741..0000000 --- a/node_modules/vary/index.js +++ /dev/null @@ -1,149 +0,0 @@ -/*! - * vary - * Copyright(c) 2014-2017 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict' - -/** - * Module exports. - */ - -module.exports = vary -module.exports.append = append - -/** - * RegExp to match field-name in RFC 7230 sec 3.2 - * - * field-name = token - * token = 1*tchar - * tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*" - * / "+" / "-" / "." / "^" / "_" / "`" / "|" / "~" - * / DIGIT / ALPHA - * ; any VCHAR, except delimiters - */ - -var FIELD_NAME_REGEXP = /^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/ - -/** - * Append a field to a vary header. - * - * @param {String} header - * @param {String|Array} field - * @return {String} - * @public - */ - -function append (header, field) { - if (typeof header !== 'string') { - throw new TypeError('header argument is required') - } - - if (!field) { - throw new TypeError('field argument is required') - } - - // get fields array - var fields = !Array.isArray(field) - ? parse(String(field)) - : field - - // assert on invalid field names - for (var j = 0; j < fields.length; j++) { - if (!FIELD_NAME_REGEXP.test(fields[j])) { - throw new TypeError('field argument contains an invalid header name') - } - } - - // existing, unspecified vary - if (header === '*') { - return header - } - - // enumerate current values - var val = header - var vals = parse(header.toLowerCase()) - - // unspecified vary - if (fields.indexOf('*') !== -1 || vals.indexOf('*') !== -1) { - return '*' - } - - for (var i = 0; i < fields.length; i++) { - var fld = fields[i].toLowerCase() - - // append value (case-preserving) - if (vals.indexOf(fld) === -1) { - vals.push(fld) - val = val - ? val + ', ' + fields[i] - : fields[i] - } - } - - return val -} - -/** - * Parse a vary header into an array. - * - * @param {String} header - * @return {Array} - * @private - */ - -function parse (header) { - var end = 0 - var list = [] - var start = 0 - - // gather tokens - for (var i = 0, len = header.length; i < len; i++) { - switch (header.charCodeAt(i)) { - case 0x20: /* */ - if (start === end) { - start = end = i + 1 - } - break - case 0x2c: /* , */ - list.push(header.substring(start, end)) - start = end = i + 1 - break - default: - end = i + 1 - break - } - } - - // final token - list.push(header.substring(start, end)) - - return list -} - -/** - * Mark that a request is varied on a header field. - * - * @param {Object} res - * @param {String|Array} field - * @public - */ - -function vary (res, field) { - if (!res || !res.getHeader || !res.setHeader) { - // quack quack - throw new TypeError('res argument is required') - } - - // get existing header - var val = res.getHeader('Vary') || '' - var header = Array.isArray(val) - ? val.join(', ') - : String(val) - - // set new header - if ((val = append(header, field))) { - res.setHeader('Vary', val) - } -} diff --git a/node_modules/vary/package.json b/node_modules/vary/package.json deleted file mode 100644 index 028f72a..0000000 --- a/node_modules/vary/package.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "name": "vary", - "description": "Manipulate the HTTP Vary header", - "version": "1.1.2", - "author": "Douglas Christopher Wilson ", - "license": "MIT", - "keywords": [ - "http", - "res", - "vary" - ], - "repository": "jshttp/vary", - "devDependencies": { - "beautify-benchmark": "0.2.4", - "benchmark": "2.1.4", - "eslint": "3.19.0", - "eslint-config-standard": "10.2.1", - "eslint-plugin-import": "2.7.0", - "eslint-plugin-markdown": "1.0.0-beta.6", - "eslint-plugin-node": "5.1.1", - "eslint-plugin-promise": "3.5.0", - "eslint-plugin-standard": "3.0.1", - "istanbul": "0.4.5", - "mocha": "2.5.3", - "supertest": "1.1.0" - }, - "files": [ - "HISTORY.md", - "LICENSE", - "README.md", - "index.js" - ], - "engines": { - "node": ">= 0.8" - }, - "scripts": { - "bench": "node benchmark/index.js", - "lint": "eslint --plugin markdown --ext js,md .", - "test": "mocha --reporter spec --bail --check-leaks test/", - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/", - "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/" - } -} diff --git a/node_modules/websocket-driver/CHANGELOG.md b/node_modules/websocket-driver/CHANGELOG.md deleted file mode 100644 index cb3945f..0000000 --- a/node_modules/websocket-driver/CHANGELOG.md +++ /dev/null @@ -1,142 +0,0 @@ -### 0.7.4 / 2020-05-22 - -- Avoid crashing if `process.version` does not contain any digits -- Emit `ping` and `pong` events from the `Server` driver -- Require http-parser-js >=0.5.1 which fixes the bug we addressed in 0.7.3 - -### 0.7.3 / 2019-06-13 - -- Cap version of http-parser-js below 0.4.11, which introduced a bug that - prevents us from handling messages that are part of the same input buffer as - the handshake response if chunked encoding is specified - -### 0.7.2 / 2019-06-13 - -(This version was pulled due to an error when publishing) - -### 0.7.1 / 2019-06-10 - -- Catch any exceptions produced while generating a handshake response and send a - `400 Bad Request` response to the client -- Pick the RFC-6455 protocol version if the request contains any of the headers - used by that version -- Use the `Buffer.alloc()` and `Buffer.from()` functions instead of the unsafe - `Buffer()` constructor -- Handle errors encountered while handling malformed draft-76 requests -- Change license from MIT to Apache 2.0 - -### 0.7.0 / 2017-09-11 - -- Add `ping` and `pong` to the set of events users can listen to -- Replace the bindings to Node's HTTP parser with `http-parser-js` - -### 0.6.5 / 2016-05-20 - -- Don't mutate buffers passed in by the application when masking - -### 0.6.4 / 2016-01-07 - -- If a number is given as input for a frame payload, send it as a string - -### 0.6.3 / 2015-11-06 - -- Reject draft-76 handshakes if their Sec-WebSocket-Key headers are invalid -- Throw a more helpful error if a client is created with an invalid URL - -### 0.6.2 / 2015-07-18 - -- When the peer sends a close frame with no error code, emit 1000 - -### 0.6.1 / 2015-07-13 - -- Use the `buffer.{read,write}UInt{16,32}BE` methods for reading/writing numbers - to buffers rather than including duplicate logic for this - -### 0.6.0 / 2015-07-08 - -- Allow the parser to recover cleanly if event listeners raise an error -- Add a `pong` method for sending unsolicited pong frames - -### 0.5.4 / 2015-03-29 - -- Don't emit extra close frames if we receive a close frame after we already - sent one -- Fail the connection when the driver receives an invalid - `Sec-WebSocket-Extensions` header - -### 0.5.3 / 2015-02-22 - -- Don't treat incoming data as WebSocket frames if a client driver is closed - before receiving the server handshake - -### 0.5.2 / 2015-02-19 - -- Fix compatibility with the HTTP parser on io.js -- Use `websocket-extensions` to make sure messages and close frames are kept in - order -- Don't emit multiple `error` events - -### 0.5.1 / 2014-12-18 - -- Don't allow drivers to be created with unrecognized options - -### 0.5.0 / 2014-12-13 - -- Support protocol extensions via the websocket-extensions module - -### 0.4.0 / 2014-11-08 - -- Support connection via HTTP proxies using `CONNECT` - -### 0.3.6 / 2014-10-04 - -- It is now possible to call `close()` before `start()` and close the driver - -### 0.3.5 / 2014-07-06 - -- Don't hold references to frame buffers after a message has been emitted -- Make sure that `protocol` and `version` are exposed properly by the TCP driver - -### 0.3.4 / 2014-05-08 - -- Don't hold memory-leaking references to I/O buffers after they have been - parsed - -### 0.3.3 / 2014-04-24 - -- Correct the draft-76 status line reason phrase - -### 0.3.2 / 2013-12-29 - -- Expand `maxLength` to cover sequences of continuation frames and - `draft-{75,76}` -- Decrease default maximum frame buffer size to 64MB -- Stop parsing when the protocol enters a failure mode, to save CPU cycles - -### 0.3.1 / 2013-12-03 - -- Add a `maxLength` option to limit allowed frame size -- Don't pre-allocate a message buffer until the whole frame has arrived -- Fix compatibility with Node v0.11 `HTTPParser` - -### 0.3.0 / 2013-09-09 - -- Support client URLs with Basic Auth credentials - -### 0.2.2 / 2013-07-05 - -- No functional changes, just updates to package.json - -### 0.2.1 / 2013-05-17 - -- Export the isSecureRequest() method since faye-websocket relies on it -- Queue sent messages in the client's initial state - -### 0.2.0 / 2013-05-12 - -- Add API for setting and reading headers -- Add Driver.server() method for getting a driver for TCP servers - -### 0.1.0 / 2013-05-04 - -- First stable release diff --git a/node_modules/websocket-driver/LICENSE.md b/node_modules/websocket-driver/LICENSE.md deleted file mode 100644 index 9475f06..0000000 --- a/node_modules/websocket-driver/LICENSE.md +++ /dev/null @@ -1,12 +0,0 @@ -Copyright 2010-2020 James Coglan - -Licensed under the Apache License, Version 2.0 (the "License"); you may not use -this file except in compliance with the License. You may obtain a copy of the -License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software distributed -under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR -CONDITIONS OF ANY KIND, either express or implied. See the License for the -specific language governing permissions and limitations under the License. diff --git a/node_modules/websocket-driver/README.md b/node_modules/websocket-driver/README.md deleted file mode 100644 index 95c33c4..0000000 --- a/node_modules/websocket-driver/README.md +++ /dev/null @@ -1,370 +0,0 @@ -# websocket-driver [![Build Status](https://travis-ci.org/faye/websocket-driver-node.svg)](https://travis-ci.org/faye/websocket-driver-node) - -This module provides a complete implementation of the WebSocket protocols that -can be hooked up to any I/O stream. It aims to simplify things by decoupling the -protocol details from the I/O layer, such that users only need to implement code -to stream data in and out of it without needing to know anything about how the -protocol actually works. Think of it as a complete WebSocket system with -pluggable I/O. - -Due to this design, you get a lot of things for free. In particular, if you hook -this module up to some I/O object, it will do all of this for you: - -- Select the correct server-side driver to talk to the client -- Generate and send both server- and client-side handshakes -- Recognize when the handshake phase completes and the WS protocol begins -- Negotiate subprotocol selection based on `Sec-WebSocket-Protocol` -- Negotiate and use extensions via the - [websocket-extensions](https://github.com/faye/websocket-extensions-node) - module -- Buffer sent messages until the handshake process is finished -- Deal with proxies that defer delivery of the draft-76 handshake body -- Notify you when the socket is open and closed and when messages arrive -- Recombine fragmented messages -- Dispatch text, binary, ping, pong and close frames -- Manage the socket-closing handshake process -- Automatically reply to ping frames with a matching pong -- Apply masking to messages sent by the client - -This library was originally extracted from the [Faye](http://faye.jcoglan.com) -project but now aims to provide simple WebSocket support for any Node-based -project. - - -## Installation - -``` -$ npm install websocket-driver -``` - - -## Usage - -This module provides protocol drivers that have the same interface on the server -and on the client. A WebSocket driver is an object with two duplex streams -attached; one for incoming/outgoing messages and one for managing the wire -protocol over an I/O stream. The full API is described below. - - -### Server-side with HTTP - -A Node webserver emits a special event for 'upgrade' requests, and this is where -you should handle WebSockets. You first check whether the request is a -WebSocket, and if so you can create a driver and attach the request's I/O stream -to it. - -```js -var http = require('http'), - websocket = require('websocket-driver'); - -var server = http.createServer(); - -server.on('upgrade', function(request, socket, body) { - if (!websocket.isWebSocket(request)) return; - - var driver = websocket.http(request); - - driver.io.write(body); - socket.pipe(driver.io).pipe(socket); - - driver.messages.on('data', function(message) { - console.log('Got a message', message); - }); - - driver.start(); -}); -``` - -Note the line `driver.io.write(body)` - you must pass the `body` buffer to the -socket driver in order to make certain versions of the protocol work. - - -### Server-side with TCP - -You can also handle WebSocket connections in a bare TCP server, if you're not -using an HTTP server and don't want to implement HTTP parsing yourself. - -The driver will emit a `connect` event when a request is received, and at this -point you can detect whether it's a WebSocket and handle it as such. Here's an -example using the Node `net` module: - -```js -var net = require('net'), - websocket = require('websocket-driver'); - -var server = net.createServer(function(connection) { - var driver = websocket.server(); - - driver.on('connect', function() { - if (websocket.isWebSocket(driver)) { - driver.start(); - } else { - // handle other HTTP requests - } - }); - - driver.on('close', function() { connection.end() }); - connection.on('error', function() {}); - - connection.pipe(driver.io).pipe(connection); - - driver.messages.pipe(driver.messages); -}); - -server.listen(4180); -``` - -In the `connect` event, the driver gains several properties to describe the -request, similar to a Node request object, such as `method`, `url` and -`headers`. However you should remember it's not a real request object; you -cannot write data to it, it only tells you what request data we parsed from the -input. - -If the request has a body, it will be in the `driver.body` buffer, but only as -much of the body as has been piped into the driver when the `connect` event -fires. - - -### Client-side - -Similarly, to implement a WebSocket client you just need to make a driver by -passing in a URL. After this you use the driver API as described below to -process incoming data and send outgoing data. - - -```js -var net = require('net'), - websocket = require('websocket-driver'); - -var driver = websocket.client('ws://www.example.com/socket'), - tcp = net.connect(80, 'www.example.com'); - -tcp.pipe(driver.io).pipe(tcp); - -tcp.on('connect', function() { - driver.start(); -}); - -driver.messages.on('data', function(message) { - console.log('Got a message', message); -}); -``` - -Client drivers have two additional properties for reading the HTTP data that was -sent back by the server: - -- `driver.statusCode` - the integer value of the HTTP status code -- `driver.headers` - an object containing the response headers - - -### HTTP Proxies - -The client driver supports connections via HTTP proxies using the `CONNECT` -method. Instead of sending the WebSocket handshake immediately, it will send a -`CONNECT` request, wait for a `200` response, and then proceed as normal. - -To use this feature, call `driver.proxy(url)` where `url` is the origin of the -proxy, including a username and password if required. This produces a duplex -stream that you should pipe in and out of your TCP connection to the proxy -server. When the proxy emits `connect`, you can then pipe `driver.io` to your -TCP stream and call `driver.start()`. - -```js -var net = require('net'), - websocket = require('websocket-driver'); - -var driver = websocket.client('ws://www.example.com/socket'), - proxy = driver.proxy('http://username:password@proxy.example.com'), - tcp = net.connect(80, 'proxy.example.com'); - -tcp.pipe(proxy).pipe(tcp, { end: false }); - -tcp.on('connect', function() { - proxy.start(); -}); - -proxy.on('connect', function() { - driver.io.pipe(tcp).pipe(driver.io); - driver.start(); -}); - -driver.messages.on('data', function(message) { - console.log('Got a message', message); -}); -``` - -The proxy's `connect` event is also where you should perform a TLS handshake on -your TCP stream, if you are connecting to a `wss:` endpoint. - -In the event that proxy connection fails, `proxy` will emit an `error`. You can -inspect the proxy's response via `proxy.statusCode` and `proxy.headers`. - -```js -proxy.on('error', function(error) { - console.error(error.message); - console.log(proxy.statusCode); - console.log(proxy.headers); -}); -``` - -Before calling `proxy.start()` you can set custom headers using -`proxy.setHeader()`: - -```js -proxy.setHeader('User-Agent', 'node'); -proxy.start(); -``` - - -### Driver API - -Drivers are created using one of the following methods: - -```js -driver = websocket.http(request, options) -driver = websocket.server(options) -driver = websocket.client(url, options) -``` - -The `http` method returns a driver chosen using the headers from a Node HTTP -request object. The `server` method returns a driver that will parse an HTTP -request and then decide which driver to use for it using the `http` method. The -`client` method always returns a driver for the RFC version of the protocol with -masking enabled on outgoing frames. - -The `options` argument is optional, and is an object. It may contain the -following fields: - -- `maxLength` - the maximum allowed size of incoming message frames, in bytes. - The default value is `2^26 - 1`, or 1 byte short of 64 MiB. -- `protocols` - an array of strings representing acceptable subprotocols for use - over the socket. The driver will negotiate one of these to use via the - `Sec-WebSocket-Protocol` header if supported by the other peer. - -A driver has two duplex streams attached to it: - -- **`driver.io`** - this stream should be attached to an I/O socket like a TCP - stream. Pipe incoming TCP chunks to this stream for them to be parsed, and - pipe this stream back into TCP to send outgoing frames. -- **`driver.messages`** - this stream emits messages received over the - WebSocket. Writing to it sends messages to the other peer by emitting frames - via the `driver.io` stream. - -All drivers respond to the following API methods, but some of them are no-ops -depending on whether the client supports the behaviour. - -Note that most of these methods are commands: if they produce data that should -be sent over the socket, they will give this to you by emitting `data` events on -the `driver.io` stream. - -#### `driver.on('open', function(event) {})` - -Adds a callback to execute when the socket becomes open. - -#### `driver.on('message', function(event) {})` - -Adds a callback to execute when a message is received. `event` will have a -`data` attribute containing either a string in the case of a text message or a -`Buffer` in the case of a binary message. - -You can also listen for messages using the `driver.messages.on('data')` event, -which emits strings for text messages and buffers for binary messages. - -#### `driver.on('error', function(event) {})` - -Adds a callback to execute when a protocol error occurs due to the other peer -sending an invalid byte sequence. `event` will have a `message` attribute -describing the error. - -#### `driver.on('close', function(event) {})` - -Adds a callback to execute when the socket becomes closed. The `event` object -has `code` and `reason` attributes. - -#### `driver.on('ping', function(event) {})` - -Adds a callback block to execute when a ping is received. You do not need to -handle this by sending a pong frame yourself; the driver handles this for you. - -#### `driver.on('pong', function(event) {})` - -Adds a callback block to execute when a pong is received. If this was in -response to a ping you sent, you can also handle this event via the -`driver.ping(message, function() { ... })` callback. - -#### `driver.addExtension(extension)` - -Registers a protocol extension whose operation will be negotiated via the -`Sec-WebSocket-Extensions` header. `extension` is any extension compatible with -the [websocket-extensions](https://github.com/faye/websocket-extensions-node) -framework. - -#### `driver.setHeader(name, value)` - -Sets a custom header to be sent as part of the handshake response, either from -the server or from the client. Must be called before `start()`, since this is -when the headers are serialized and sent. - -#### `driver.start()` - -Initiates the protocol by sending the handshake - either the response for a -server-side driver or the request for a client-side one. This should be the -first method you invoke. Returns `true` if and only if a handshake was sent. - -#### `driver.parse(string)` - -Takes a string and parses it, potentially resulting in message events being -emitted (see `on('message')` above) or in data being sent to `driver.io`. You -should send all data you receive via I/O to this method by piping a stream into -`driver.io`. - -#### `driver.text(string)` - -Sends a text message over the socket. If the socket handshake is not yet -complete, the message will be queued until it is. Returns `true` if the message -was sent or queued, and `false` if the socket can no longer send messages. - -This method is equivalent to `driver.messages.write(string)`. - -#### `driver.binary(buffer)` - -Takes a `Buffer` and sends it as a binary message. Will queue and return `true` -or `false` the same way as the `text` method. It will also return `false` if the -driver does not support binary messages. - -This method is equivalent to `driver.messages.write(buffer)`. - -#### `driver.ping(string = '', function() {})` - -Sends a ping frame over the socket, queueing it if necessary. `string` and the -callback are both optional. If a callback is given, it will be invoked when the -socket receives a pong frame whose content matches `string`. Returns `false` if -frames can no longer be sent, or if the driver does not support ping/pong. - -#### `driver.pong(string = '')` - -Sends a pong frame over the socket, queueing it if necessary. `string` is -optional. Returns `false` if frames can no longer be sent, or if the driver does -not support ping/pong. - -You don't need to call this when a ping frame is received; pings are replied to -automatically by the driver. This method is for sending unsolicited pongs. - -#### `driver.close()` - -Initiates the closing handshake if the socket is still open. For drivers with no -closing handshake, this will result in the immediate execution of the -`on('close')` driver. For drivers with a closing handshake, this sends a closing -frame and `emit('close')` will execute when a response is received or a protocol -error occurs. - -#### `driver.version` - -Returns the WebSocket version in use as a string. Will either be `hixie-75`, -`hixie-76` or `hybi-$version`. - -#### `driver.protocol` - -Returns a string containing the selected subprotocol, if any was agreed upon -using the `Sec-WebSocket-Protocol` mechanism. This value becomes available after -`emit('open')` has fired. diff --git a/node_modules/websocket-driver/lib/websocket/driver.js b/node_modules/websocket-driver/lib/websocket/driver.js deleted file mode 100644 index 3d701cc..0000000 --- a/node_modules/websocket-driver/lib/websocket/driver.js +++ /dev/null @@ -1,43 +0,0 @@ -'use strict'; - -// Protocol references: -// -// * http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-75 -// * http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-76 -// * http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-17 - -var Base = require('./driver/base'), - Client = require('./driver/client'), - Server = require('./driver/server'); - -var Driver = { - client: function(url, options) { - options = options || {}; - if (options.masking === undefined) options.masking = true; - return new Client(url, options); - }, - - server: function(options) { - options = options || {}; - if (options.requireMasking === undefined) options.requireMasking = true; - return new Server(options); - }, - - http: function() { - return Server.http.apply(Server, arguments); - }, - - isSecureRequest: function(request) { - return Server.isSecureRequest(request); - }, - - isWebSocket: function(request) { - return Base.isWebSocket(request); - }, - - validateOptions: function(options, validKeys) { - Base.validateOptions(options, validKeys); - } -}; - -module.exports = Driver; diff --git a/node_modules/websocket-driver/lib/websocket/driver/base.js b/node_modules/websocket-driver/lib/websocket/driver/base.js deleted file mode 100644 index f05af5f..0000000 --- a/node_modules/websocket-driver/lib/websocket/driver/base.js +++ /dev/null @@ -1,193 +0,0 @@ -'use strict'; - -var Buffer = require('safe-buffer').Buffer, - Emitter = require('events').EventEmitter, - util = require('util'), - streams = require('../streams'), - Headers = require('./headers'), - Reader = require('./stream_reader'); - -var Base = function(request, url, options) { - Emitter.call(this); - Base.validateOptions(options || {}, ['maxLength', 'masking', 'requireMasking', 'protocols']); - - this._request = request; - this._reader = new Reader(); - this._options = options || {}; - this._maxLength = this._options.maxLength || this.MAX_LENGTH; - this._headers = new Headers(); - this.__queue = []; - this.readyState = 0; - this.url = url; - - this.io = new streams.IO(this); - this.messages = new streams.Messages(this); - this._bindEventListeners(); -}; -util.inherits(Base, Emitter); - -Base.isWebSocket = function(request) { - var connection = request.headers.connection || '', - upgrade = request.headers.upgrade || ''; - - return request.method === 'GET' && - connection.toLowerCase().split(/ *, */).indexOf('upgrade') >= 0 && - upgrade.toLowerCase() === 'websocket'; -}; - -Base.validateOptions = function(options, validKeys) { - for (var key in options) { - if (validKeys.indexOf(key) < 0) - throw new Error('Unrecognized option: ' + key); - } -}; - -var instance = { - // This is 64MB, small enough for an average VPS to handle without - // crashing from process out of memory - MAX_LENGTH: 0x3ffffff, - - STATES: ['connecting', 'open', 'closing', 'closed'], - - _bindEventListeners: function() { - var self = this; - - // Protocol errors are informational and do not have to be handled - this.messages.on('error', function() {}); - - this.on('message', function(event) { - var messages = self.messages; - if (messages.readable) messages.emit('data', event.data); - }); - - this.on('error', function(error) { - var messages = self.messages; - if (messages.readable) messages.emit('error', error); - }); - - this.on('close', function() { - var messages = self.messages; - if (!messages.readable) return; - messages.readable = messages.writable = false; - messages.emit('end'); - }); - }, - - getState: function() { - return this.STATES[this.readyState] || null; - }, - - addExtension: function(extension) { - return false; - }, - - setHeader: function(name, value) { - if (this.readyState > 0) return false; - this._headers.set(name, value); - return true; - }, - - start: function() { - if (this.readyState !== 0) return false; - - if (!Base.isWebSocket(this._request)) - return this._failHandshake(new Error('Not a WebSocket request')); - - var response; - - try { - response = this._handshakeResponse(); - } catch (error) { - return this._failHandshake(error); - } - - this._write(response); - if (this._stage !== -1) this._open(); - return true; - }, - - _failHandshake: function(error) { - var headers = new Headers(); - headers.set('Content-Type', 'text/plain'); - headers.set('Content-Length', Buffer.byteLength(error.message, 'utf8')); - - headers = ['HTTP/1.1 400 Bad Request', headers.toString(), error.message]; - this._write(Buffer.from(headers.join('\r\n'), 'utf8')); - this._fail('protocol_error', error.message); - - return false; - }, - - text: function(message) { - return this.frame(message); - }, - - binary: function(message) { - return false; - }, - - ping: function() { - return false; - }, - - pong: function() { - return false; - }, - - close: function(reason, code) { - if (this.readyState !== 1) return false; - this.readyState = 3; - this.emit('close', new Base.CloseEvent(null, null)); - return true; - }, - - _open: function() { - this.readyState = 1; - this.__queue.forEach(function(args) { this.frame.apply(this, args) }, this); - this.__queue = []; - this.emit('open', new Base.OpenEvent()); - }, - - _queue: function(message) { - this.__queue.push(message); - return true; - }, - - _write: function(chunk) { - var io = this.io; - if (io.readable) io.emit('data', chunk); - }, - - _fail: function(type, message) { - this.readyState = 2; - this.emit('error', new Error(message)); - this.close(); - } -}; - -for (var key in instance) - Base.prototype[key] = instance[key]; - - -Base.ConnectEvent = function() {}; - -Base.OpenEvent = function() {}; - -Base.CloseEvent = function(code, reason) { - this.code = code; - this.reason = reason; -}; - -Base.MessageEvent = function(data) { - this.data = data; -}; - -Base.PingEvent = function(data) { - this.data = data; -}; - -Base.PongEvent = function(data) { - this.data = data; -}; - -module.exports = Base; diff --git a/node_modules/websocket-driver/lib/websocket/driver/client.js b/node_modules/websocket-driver/lib/websocket/driver/client.js deleted file mode 100644 index f24d645..0000000 --- a/node_modules/websocket-driver/lib/websocket/driver/client.js +++ /dev/null @@ -1,142 +0,0 @@ -'use strict'; - -var Buffer = require('safe-buffer').Buffer, - crypto = require('crypto'), - url = require('url'), - util = require('util'), - HttpParser = require('../http_parser'), - Base = require('./base'), - Hybi = require('./hybi'), - Proxy = require('./proxy'); - -var Client = function(_url, options) { - this.version = 'hybi-' + Hybi.VERSION; - Hybi.call(this, null, _url, options); - - this.readyState = -1; - this._key = Client.generateKey(); - this._accept = Hybi.generateAccept(this._key); - this._http = new HttpParser('response'); - - var uri = url.parse(this.url), - auth = uri.auth && Buffer.from(uri.auth, 'utf8').toString('base64'); - - if (this.VALID_PROTOCOLS.indexOf(uri.protocol) < 0) - throw new Error(this.url + ' is not a valid WebSocket URL'); - - this._pathname = (uri.pathname || '/') + (uri.search || ''); - - this._headers.set('Host', uri.host); - this._headers.set('Upgrade', 'websocket'); - this._headers.set('Connection', 'Upgrade'); - this._headers.set('Sec-WebSocket-Key', this._key); - this._headers.set('Sec-WebSocket-Version', Hybi.VERSION); - - if (this._protocols.length > 0) - this._headers.set('Sec-WebSocket-Protocol', this._protocols.join(', ')); - - if (auth) - this._headers.set('Authorization', 'Basic ' + auth); -}; -util.inherits(Client, Hybi); - -Client.generateKey = function() { - return crypto.randomBytes(16).toString('base64'); -}; - -var instance = { - VALID_PROTOCOLS: ['ws:', 'wss:'], - - proxy: function(origin, options) { - return new Proxy(this, origin, options); - }, - - start: function() { - if (this.readyState !== -1) return false; - this._write(this._handshakeRequest()); - this.readyState = 0; - return true; - }, - - parse: function(chunk) { - if (this.readyState === 3) return; - if (this.readyState > 0) return Hybi.prototype.parse.call(this, chunk); - - this._http.parse(chunk); - if (!this._http.isComplete()) return; - - this._validateHandshake(); - if (this.readyState === 3) return; - - this._open(); - this.parse(this._http.body); - }, - - _handshakeRequest: function() { - var extensions = this._extensions.generateOffer(); - if (extensions) - this._headers.set('Sec-WebSocket-Extensions', extensions); - - var start = 'GET ' + this._pathname + ' HTTP/1.1', - headers = [start, this._headers.toString(), '']; - - return Buffer.from(headers.join('\r\n'), 'utf8'); - }, - - _failHandshake: function(message) { - message = 'Error during WebSocket handshake: ' + message; - this.readyState = 3; - this.emit('error', new Error(message)); - this.emit('close', new Base.CloseEvent(this.ERRORS.protocol_error, message)); - }, - - _validateHandshake: function() { - this.statusCode = this._http.statusCode; - this.headers = this._http.headers; - - if (this._http.error) - return this._failHandshake(this._http.error.message); - - if (this._http.statusCode !== 101) - return this._failHandshake('Unexpected response code: ' + this._http.statusCode); - - var headers = this._http.headers, - upgrade = headers['upgrade'] || '', - connection = headers['connection'] || '', - accept = headers['sec-websocket-accept'] || '', - protocol = headers['sec-websocket-protocol'] || ''; - - if (upgrade === '') - return this._failHandshake("'Upgrade' header is missing"); - if (upgrade.toLowerCase() !== 'websocket') - return this._failHandshake("'Upgrade' header value is not 'WebSocket'"); - - if (connection === '') - return this._failHandshake("'Connection' header is missing"); - if (connection.toLowerCase() !== 'upgrade') - return this._failHandshake("'Connection' header value is not 'Upgrade'"); - - if (accept !== this._accept) - return this._failHandshake('Sec-WebSocket-Accept mismatch'); - - this.protocol = null; - - if (protocol !== '') { - if (this._protocols.indexOf(protocol) < 0) - return this._failHandshake('Sec-WebSocket-Protocol mismatch'); - else - this.protocol = protocol; - } - - try { - this._extensions.activate(this.headers['sec-websocket-extensions']); - } catch (e) { - return this._failHandshake(e.message); - } - } -}; - -for (var key in instance) - Client.prototype[key] = instance[key]; - -module.exports = Client; diff --git a/node_modules/websocket-driver/lib/websocket/driver/draft75.js b/node_modules/websocket-driver/lib/websocket/driver/draft75.js deleted file mode 100644 index 583f985..0000000 --- a/node_modules/websocket-driver/lib/websocket/driver/draft75.js +++ /dev/null @@ -1,123 +0,0 @@ -'use strict'; - -var Buffer = require('safe-buffer').Buffer, - Base = require('./base'), - util = require('util'); - -var Draft75 = function(request, url, options) { - Base.apply(this, arguments); - this._stage = 0; - this.version = 'hixie-75'; - - this._headers.set('Upgrade', 'WebSocket'); - this._headers.set('Connection', 'Upgrade'); - this._headers.set('WebSocket-Origin', this._request.headers.origin); - this._headers.set('WebSocket-Location', this.url); -}; -util.inherits(Draft75, Base); - -var instance = { - close: function() { - if (this.readyState === 3) return false; - this.readyState = 3; - this.emit('close', new Base.CloseEvent(null, null)); - return true; - }, - - parse: function(chunk) { - if (this.readyState > 1) return; - - this._reader.put(chunk); - - this._reader.eachByte(function(octet) { - var message; - - switch (this._stage) { - case -1: - this._body.push(octet); - this._sendHandshakeBody(); - break; - - case 0: - this._parseLeadingByte(octet); - break; - - case 1: - this._length = (octet & 0x7F) + 128 * this._length; - - if (this._closing && this._length === 0) { - return this.close(); - } - else if ((octet & 0x80) !== 0x80) { - if (this._length === 0) { - this._stage = 0; - } - else { - this._skipped = 0; - this._stage = 2; - } - } - break; - - case 2: - if (octet === 0xFF) { - this._stage = 0; - message = Buffer.from(this._buffer).toString('utf8', 0, this._buffer.length); - this.emit('message', new Base.MessageEvent(message)); - } - else { - if (this._length) { - this._skipped += 1; - if (this._skipped === this._length) - this._stage = 0; - } else { - this._buffer.push(octet); - if (this._buffer.length > this._maxLength) return this.close(); - } - } - break; - } - }, this); - }, - - frame: function(buffer) { - if (this.readyState === 0) return this._queue([buffer]); - if (this.readyState > 1) return false; - - if (typeof buffer !== 'string') buffer = buffer.toString(); - - var length = Buffer.byteLength(buffer), - frame = Buffer.allocUnsafe(length + 2); - - frame[0] = 0x00; - frame.write(buffer, 1); - frame[frame.length - 1] = 0xFF; - - this._write(frame); - return true; - }, - - _handshakeResponse: function() { - var start = 'HTTP/1.1 101 Web Socket Protocol Handshake', - headers = [start, this._headers.toString(), '']; - - return Buffer.from(headers.join('\r\n'), 'utf8'); - }, - - _parseLeadingByte: function(octet) { - if ((octet & 0x80) === 0x80) { - this._length = 0; - this._stage = 1; - } else { - delete this._length; - delete this._skipped; - this._buffer = []; - this._stage = 2; - } - } -}; - -for (var key in instance) - Draft75.prototype[key] = instance[key]; - -module.exports = Draft75; diff --git a/node_modules/websocket-driver/lib/websocket/driver/draft76.js b/node_modules/websocket-driver/lib/websocket/driver/draft76.js deleted file mode 100644 index bdaab31..0000000 --- a/node_modules/websocket-driver/lib/websocket/driver/draft76.js +++ /dev/null @@ -1,117 +0,0 @@ -'use strict'; - -var Buffer = require('safe-buffer').Buffer, - Base = require('./base'), - Draft75 = require('./draft75'), - crypto = require('crypto'), - util = require('util'); - - -var numberFromKey = function(key) { - return parseInt((key.match(/[0-9]/g) || []).join(''), 10); -}; - -var spacesInKey = function(key) { - return (key.match(/ /g) || []).length; -}; - - -var Draft76 = function(request, url, options) { - Draft75.apply(this, arguments); - this._stage = -1; - this._body = []; - this.version = 'hixie-76'; - - this._headers.clear(); - - this._headers.set('Upgrade', 'WebSocket'); - this._headers.set('Connection', 'Upgrade'); - this._headers.set('Sec-WebSocket-Origin', this._request.headers.origin); - this._headers.set('Sec-WebSocket-Location', this.url); -}; -util.inherits(Draft76, Draft75); - -var instance = { - BODY_SIZE: 8, - - start: function() { - if (!Draft75.prototype.start.call(this)) return false; - this._started = true; - this._sendHandshakeBody(); - return true; - }, - - close: function() { - if (this.readyState === 3) return false; - if (this.readyState === 1) this._write(Buffer.from([0xFF, 0x00])); - this.readyState = 3; - this.emit('close', new Base.CloseEvent(null, null)); - return true; - }, - - _handshakeResponse: function() { - var headers = this._request.headers, - key1 = headers['sec-websocket-key1'], - key2 = headers['sec-websocket-key2']; - - if (!key1) throw new Error('Missing required header: Sec-WebSocket-Key1'); - if (!key2) throw new Error('Missing required header: Sec-WebSocket-Key2'); - - var number1 = numberFromKey(key1), - spaces1 = spacesInKey(key1), - - number2 = numberFromKey(key2), - spaces2 = spacesInKey(key2); - - if (number1 % spaces1 !== 0 || number2 % spaces2 !== 0) - throw new Error('Client sent invalid Sec-WebSocket-Key headers'); - - this._keyValues = [number1 / spaces1, number2 / spaces2]; - - var start = 'HTTP/1.1 101 WebSocket Protocol Handshake', - headers = [start, this._headers.toString(), '']; - - return Buffer.from(headers.join('\r\n'), 'binary'); - }, - - _handshakeSignature: function() { - if (this._body.length < this.BODY_SIZE) return null; - - var md5 = crypto.createHash('md5'), - buffer = Buffer.allocUnsafe(8 + this.BODY_SIZE); - - buffer.writeUInt32BE(this._keyValues[0], 0); - buffer.writeUInt32BE(this._keyValues[1], 4); - Buffer.from(this._body).copy(buffer, 8, 0, this.BODY_SIZE); - - md5.update(buffer); - return Buffer.from(md5.digest('binary'), 'binary'); - }, - - _sendHandshakeBody: function() { - if (!this._started) return; - var signature = this._handshakeSignature(); - if (!signature) return; - - this._write(signature); - this._stage = 0; - this._open(); - - if (this._body.length > this.BODY_SIZE) - this.parse(this._body.slice(this.BODY_SIZE)); - }, - - _parseLeadingByte: function(octet) { - if (octet !== 0xFF) - return Draft75.prototype._parseLeadingByte.call(this, octet); - - this._closing = true; - this._length = 0; - this._stage = 1; - } -}; - -for (var key in instance) - Draft76.prototype[key] = instance[key]; - -module.exports = Draft76; diff --git a/node_modules/websocket-driver/lib/websocket/driver/headers.js b/node_modules/websocket-driver/lib/websocket/driver/headers.js deleted file mode 100644 index bc96b7d..0000000 --- a/node_modules/websocket-driver/lib/websocket/driver/headers.js +++ /dev/null @@ -1,35 +0,0 @@ -'use strict'; - -var Headers = function() { - this.clear(); -}; - -Headers.prototype.ALLOWED_DUPLICATES = ['set-cookie', 'set-cookie2', 'warning', 'www-authenticate']; - -Headers.prototype.clear = function() { - this._sent = {}; - this._lines = []; -}; - -Headers.prototype.set = function(name, value) { - if (value === undefined) return; - - name = this._strip(name); - value = this._strip(value); - - var key = name.toLowerCase(); - if (!this._sent.hasOwnProperty(key) || this.ALLOWED_DUPLICATES.indexOf(key) >= 0) { - this._sent[key] = true; - this._lines.push(name + ': ' + value + '\r\n'); - } -}; - -Headers.prototype.toString = function() { - return this._lines.join(''); -}; - -Headers.prototype._strip = function(string) { - return string.toString().replace(/^ */, '').replace(/ *$/, ''); -}; - -module.exports = Headers; diff --git a/node_modules/websocket-driver/lib/websocket/driver/hybi.js b/node_modules/websocket-driver/lib/websocket/driver/hybi.js deleted file mode 100644 index 9027f90..0000000 --- a/node_modules/websocket-driver/lib/websocket/driver/hybi.js +++ /dev/null @@ -1,483 +0,0 @@ -'use strict'; - -var Buffer = require('safe-buffer').Buffer, - crypto = require('crypto'), - util = require('util'), - Extensions = require('websocket-extensions'), - Base = require('./base'), - Frame = require('./hybi/frame'), - Message = require('./hybi/message'); - -var Hybi = function(request, url, options) { - Base.apply(this, arguments); - - this._extensions = new Extensions(); - this._stage = 0; - this._masking = this._options.masking; - this._protocols = this._options.protocols || []; - this._requireMasking = this._options.requireMasking; - this._pingCallbacks = {}; - - if (typeof this._protocols === 'string') - this._protocols = this._protocols.split(/ *, */); - - if (!this._request) return; - - var protos = this._request.headers['sec-websocket-protocol'], - supported = this._protocols; - - if (protos !== undefined) { - if (typeof protos === 'string') protos = protos.split(/ *, */); - this.protocol = protos.filter(function(p) { return supported.indexOf(p) >= 0 })[0]; - } - - this.version = 'hybi-' + Hybi.VERSION; -}; -util.inherits(Hybi, Base); - -Hybi.VERSION = '13'; - -Hybi.mask = function(payload, mask, offset) { - if (!mask || mask.length === 0) return payload; - offset = offset || 0; - - for (var i = 0, n = payload.length - offset; i < n; i++) { - payload[offset + i] = payload[offset + i] ^ mask[i % 4]; - } - return payload; -}; - -Hybi.generateAccept = function(key) { - var sha1 = crypto.createHash('sha1'); - sha1.update(key + Hybi.GUID); - return sha1.digest('base64'); -}; - -Hybi.GUID = '258EAFA5-E914-47DA-95CA-C5AB0DC85B11'; - -var instance = { - FIN: 0x80, - MASK: 0x80, - RSV1: 0x40, - RSV2: 0x20, - RSV3: 0x10, - OPCODE: 0x0F, - LENGTH: 0x7F, - - OPCODES: { - continuation: 0, - text: 1, - binary: 2, - close: 8, - ping: 9, - pong: 10 - }, - - OPCODE_CODES: [0, 1, 2, 8, 9, 10], - MESSAGE_OPCODES: [0, 1, 2], - OPENING_OPCODES: [1, 2], - - ERRORS: { - normal_closure: 1000, - going_away: 1001, - protocol_error: 1002, - unacceptable: 1003, - encoding_error: 1007, - policy_violation: 1008, - too_large: 1009, - extension_error: 1010, - unexpected_condition: 1011 - }, - - ERROR_CODES: [1000, 1001, 1002, 1003, 1007, 1008, 1009, 1010, 1011], - DEFAULT_ERROR_CODE: 1000, - MIN_RESERVED_ERROR: 3000, - MAX_RESERVED_ERROR: 4999, - - // http://www.w3.org/International/questions/qa-forms-utf-8.en.php - UTF8_MATCH: /^([\x00-\x7F]|[\xC2-\xDF][\x80-\xBF]|\xE0[\xA0-\xBF][\x80-\xBF]|[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}|\xED[\x80-\x9F][\x80-\xBF]|\xF0[\x90-\xBF][\x80-\xBF]{2}|[\xF1-\xF3][\x80-\xBF]{3}|\xF4[\x80-\x8F][\x80-\xBF]{2})*$/, - - addExtension: function(extension) { - this._extensions.add(extension); - return true; - }, - - parse: function(chunk) { - this._reader.put(chunk); - var buffer = true; - while (buffer) { - switch (this._stage) { - case 0: - buffer = this._reader.read(1); - if (buffer) this._parseOpcode(buffer[0]); - break; - - case 1: - buffer = this._reader.read(1); - if (buffer) this._parseLength(buffer[0]); - break; - - case 2: - buffer = this._reader.read(this._frame.lengthBytes); - if (buffer) this._parseExtendedLength(buffer); - break; - - case 3: - buffer = this._reader.read(4); - if (buffer) { - this._stage = 4; - this._frame.maskingKey = buffer; - } - break; - - case 4: - buffer = this._reader.read(this._frame.length); - if (buffer) { - this._stage = 0; - this._emitFrame(buffer); - } - break; - - default: - buffer = null; - } - } - }, - - text: function(message) { - if (this.readyState > 1) return false; - return this.frame(message, 'text'); - }, - - binary: function(message) { - if (this.readyState > 1) return false; - return this.frame(message, 'binary'); - }, - - ping: function(message, callback) { - if (this.readyState > 1) return false; - message = message || ''; - if (callback) this._pingCallbacks[message] = callback; - return this.frame(message, 'ping'); - }, - - pong: function(message) { - if (this.readyState > 1) return false; - message = message ||''; - return this.frame(message, 'pong'); - }, - - close: function(reason, code) { - reason = reason || ''; - code = code || this.ERRORS.normal_closure; - - if (this.readyState <= 0) { - this.readyState = 3; - this.emit('close', new Base.CloseEvent(code, reason)); - return true; - } else if (this.readyState === 1) { - this.readyState = 2; - this._extensions.close(function() { this.frame(reason, 'close', code) }, this); - return true; - } else { - return false; - } - }, - - frame: function(buffer, type, code) { - if (this.readyState <= 0) return this._queue([buffer, type, code]); - if (this.readyState > 2) return false; - - if (buffer instanceof Array) buffer = Buffer.from(buffer); - if (typeof buffer === 'number') buffer = buffer.toString(); - - var message = new Message(), - isText = (typeof buffer === 'string'), - payload, copy; - - message.rsv1 = message.rsv2 = message.rsv3 = false; - message.opcode = this.OPCODES[type || (isText ? 'text' : 'binary')]; - - payload = isText ? Buffer.from(buffer, 'utf8') : buffer; - - if (code) { - copy = payload; - payload = Buffer.allocUnsafe(2 + copy.length); - payload.writeUInt16BE(code, 0); - copy.copy(payload, 2); - } - message.data = payload; - - var onMessageReady = function(message) { - var frame = new Frame(); - - frame.final = true; - frame.rsv1 = message.rsv1; - frame.rsv2 = message.rsv2; - frame.rsv3 = message.rsv3; - frame.opcode = message.opcode; - frame.masked = !!this._masking; - frame.length = message.data.length; - frame.payload = message.data; - - if (frame.masked) frame.maskingKey = crypto.randomBytes(4); - - this._sendFrame(frame); - }; - - if (this.MESSAGE_OPCODES.indexOf(message.opcode) >= 0) - this._extensions.processOutgoingMessage(message, function(error, message) { - if (error) return this._fail('extension_error', error.message); - onMessageReady.call(this, message); - }, this); - else - onMessageReady.call(this, message); - - return true; - }, - - _sendFrame: function(frame) { - var length = frame.length, - header = (length <= 125) ? 2 : (length <= 65535 ? 4 : 10), - offset = header + (frame.masked ? 4 : 0), - buffer = Buffer.allocUnsafe(offset + length), - masked = frame.masked ? this.MASK : 0; - - buffer[0] = (frame.final ? this.FIN : 0) | - (frame.rsv1 ? this.RSV1 : 0) | - (frame.rsv2 ? this.RSV2 : 0) | - (frame.rsv3 ? this.RSV3 : 0) | - frame.opcode; - - if (length <= 125) { - buffer[1] = masked | length; - } else if (length <= 65535) { - buffer[1] = masked | 126; - buffer.writeUInt16BE(length, 2); - } else { - buffer[1] = masked | 127; - buffer.writeUInt32BE(Math.floor(length / 0x100000000), 2); - buffer.writeUInt32BE(length % 0x100000000, 6); - } - - frame.payload.copy(buffer, offset); - - if (frame.masked) { - frame.maskingKey.copy(buffer, header); - Hybi.mask(buffer, frame.maskingKey, offset); - } - - this._write(buffer); - }, - - _handshakeResponse: function() { - var secKey = this._request.headers['sec-websocket-key'], - version = this._request.headers['sec-websocket-version']; - - if (version !== Hybi.VERSION) - throw new Error('Unsupported WebSocket version: ' + version); - - if (typeof secKey !== 'string') - throw new Error('Missing handshake request header: Sec-WebSocket-Key'); - - this._headers.set('Upgrade', 'websocket'); - this._headers.set('Connection', 'Upgrade'); - this._headers.set('Sec-WebSocket-Accept', Hybi.generateAccept(secKey)); - - if (this.protocol) this._headers.set('Sec-WebSocket-Protocol', this.protocol); - - var extensions = this._extensions.generateResponse(this._request.headers['sec-websocket-extensions']); - if (extensions) this._headers.set('Sec-WebSocket-Extensions', extensions); - - var start = 'HTTP/1.1 101 Switching Protocols', - headers = [start, this._headers.toString(), '']; - - return Buffer.from(headers.join('\r\n'), 'utf8'); - }, - - _shutdown: function(code, reason, error) { - delete this._frame; - delete this._message; - this._stage = 5; - - var sendCloseFrame = (this.readyState === 1); - this.readyState = 2; - - this._extensions.close(function() { - if (sendCloseFrame) this.frame(reason, 'close', code); - this.readyState = 3; - if (error) this.emit('error', new Error(reason)); - this.emit('close', new Base.CloseEvent(code, reason)); - }, this); - }, - - _fail: function(type, message) { - if (this.readyState > 1) return; - this._shutdown(this.ERRORS[type], message, true); - }, - - _parseOpcode: function(octet) { - var rsvs = [this.RSV1, this.RSV2, this.RSV3].map(function(rsv) { - return (octet & rsv) === rsv; - }); - - var frame = this._frame = new Frame(); - - frame.final = (octet & this.FIN) === this.FIN; - frame.rsv1 = rsvs[0]; - frame.rsv2 = rsvs[1]; - frame.rsv3 = rsvs[2]; - frame.opcode = (octet & this.OPCODE); - - this._stage = 1; - - if (!this._extensions.validFrameRsv(frame)) - return this._fail('protocol_error', - 'One or more reserved bits are on: reserved1 = ' + (frame.rsv1 ? 1 : 0) + - ', reserved2 = ' + (frame.rsv2 ? 1 : 0) + - ', reserved3 = ' + (frame.rsv3 ? 1 : 0)); - - if (this.OPCODE_CODES.indexOf(frame.opcode) < 0) - return this._fail('protocol_error', 'Unrecognized frame opcode: ' + frame.opcode); - - if (this.MESSAGE_OPCODES.indexOf(frame.opcode) < 0 && !frame.final) - return this._fail('protocol_error', 'Received fragmented control frame: opcode = ' + frame.opcode); - - if (this._message && this.OPENING_OPCODES.indexOf(frame.opcode) >= 0) - return this._fail('protocol_error', 'Received new data frame but previous continuous frame is unfinished'); - }, - - _parseLength: function(octet) { - var frame = this._frame; - frame.masked = (octet & this.MASK) === this.MASK; - frame.length = (octet & this.LENGTH); - - if (frame.length >= 0 && frame.length <= 125) { - this._stage = frame.masked ? 3 : 4; - if (!this._checkFrameLength()) return; - } else { - this._stage = 2; - frame.lengthBytes = (frame.length === 126 ? 2 : 8); - } - - if (this._requireMasking && !frame.masked) - return this._fail('unacceptable', 'Received unmasked frame but masking is required'); - }, - - _parseExtendedLength: function(buffer) { - var frame = this._frame; - frame.length = this._readUInt(buffer); - - this._stage = frame.masked ? 3 : 4; - - if (this.MESSAGE_OPCODES.indexOf(frame.opcode) < 0 && frame.length > 125) - return this._fail('protocol_error', 'Received control frame having too long payload: ' + frame.length); - - if (!this._checkFrameLength()) return; - }, - - _checkFrameLength: function() { - var length = this._message ? this._message.length : 0; - - if (length + this._frame.length > this._maxLength) { - this._fail('too_large', 'WebSocket frame length too large'); - return false; - } else { - return true; - } - }, - - _emitFrame: function(buffer) { - var frame = this._frame, - payload = frame.payload = Hybi.mask(buffer, frame.maskingKey), - opcode = frame.opcode, - message, - code, reason, - callbacks, callback; - - delete this._frame; - - if (opcode === this.OPCODES.continuation) { - if (!this._message) return this._fail('protocol_error', 'Received unexpected continuation frame'); - this._message.pushFrame(frame); - } - - if (opcode === this.OPCODES.text || opcode === this.OPCODES.binary) { - this._message = new Message(); - this._message.pushFrame(frame); - } - - if (frame.final && this.MESSAGE_OPCODES.indexOf(opcode) >= 0) - return this._emitMessage(this._message); - - if (opcode === this.OPCODES.close) { - code = (payload.length >= 2) ? payload.readUInt16BE(0) : null; - reason = (payload.length > 2) ? this._encode(payload.slice(2)) : null; - - if (!(payload.length === 0) && - !(code !== null && code >= this.MIN_RESERVED_ERROR && code <= this.MAX_RESERVED_ERROR) && - this.ERROR_CODES.indexOf(code) < 0) - code = this.ERRORS.protocol_error; - - if (payload.length > 125 || (payload.length > 2 && !reason)) - code = this.ERRORS.protocol_error; - - this._shutdown(code || this.DEFAULT_ERROR_CODE, reason || ''); - } - - if (opcode === this.OPCODES.ping) { - this.frame(payload, 'pong'); - this.emit('ping', new Base.PingEvent(payload.toString())) - } - - if (opcode === this.OPCODES.pong) { - callbacks = this._pingCallbacks; - message = this._encode(payload); - callback = callbacks[message]; - - delete callbacks[message]; - if (callback) callback() - - this.emit('pong', new Base.PongEvent(payload.toString())) - } - }, - - _emitMessage: function(message) { - var message = this._message; - message.read(); - - delete this._message; - - this._extensions.processIncomingMessage(message, function(error, message) { - if (error) return this._fail('extension_error', error.message); - - var payload = message.data; - if (message.opcode === this.OPCODES.text) payload = this._encode(payload); - - if (payload === null) - return this._fail('encoding_error', 'Could not decode a text frame as UTF-8'); - else - this.emit('message', new Base.MessageEvent(payload)); - }, this); - }, - - _encode: function(buffer) { - try { - var string = buffer.toString('binary', 0, buffer.length); - if (!this.UTF8_MATCH.test(string)) return null; - } catch (e) {} - return buffer.toString('utf8', 0, buffer.length); - }, - - _readUInt: function(buffer) { - if (buffer.length === 2) return buffer.readUInt16BE(0); - - return buffer.readUInt32BE(0) * 0x100000000 + - buffer.readUInt32BE(4); - } -}; - -for (var key in instance) - Hybi.prototype[key] = instance[key]; - -module.exports = Hybi; diff --git a/node_modules/websocket-driver/lib/websocket/driver/hybi/frame.js b/node_modules/websocket-driver/lib/websocket/driver/hybi/frame.js deleted file mode 100644 index 0fb003f..0000000 --- a/node_modules/websocket-driver/lib/websocket/driver/hybi/frame.js +++ /dev/null @@ -1,21 +0,0 @@ -'use strict'; - -var Frame = function() {}; - -var instance = { - final: false, - rsv1: false, - rsv2: false, - rsv3: false, - opcode: null, - masked: false, - maskingKey: null, - lengthBytes: 1, - length: 0, - payload: null -}; - -for (var key in instance) - Frame.prototype[key] = instance[key]; - -module.exports = Frame; diff --git a/node_modules/websocket-driver/lib/websocket/driver/hybi/message.js b/node_modules/websocket-driver/lib/websocket/driver/hybi/message.js deleted file mode 100644 index e881273..0000000 --- a/node_modules/websocket-driver/lib/websocket/driver/hybi/message.js +++ /dev/null @@ -1,34 +0,0 @@ -'use strict'; - -var Buffer = require('safe-buffer').Buffer; - -var Message = function() { - this.rsv1 = false; - this.rsv2 = false; - this.rsv3 = false; - this.opcode = null; - this.length = 0; - this._chunks = []; -}; - -var instance = { - read: function() { - return this.data = this.data || Buffer.concat(this._chunks, this.length); - }, - - pushFrame: function(frame) { - this.rsv1 = this.rsv1 || frame.rsv1; - this.rsv2 = this.rsv2 || frame.rsv2; - this.rsv3 = this.rsv3 || frame.rsv3; - - if (this.opcode === null) this.opcode = frame.opcode; - - this._chunks.push(frame.payload); - this.length += frame.length; - } -}; - -for (var key in instance) - Message.prototype[key] = instance[key]; - -module.exports = Message; diff --git a/node_modules/websocket-driver/lib/websocket/driver/proxy.js b/node_modules/websocket-driver/lib/websocket/driver/proxy.js deleted file mode 100644 index 2fdd32e..0000000 --- a/node_modules/websocket-driver/lib/websocket/driver/proxy.js +++ /dev/null @@ -1,99 +0,0 @@ -'use strict'; - -var Buffer = require('safe-buffer').Buffer, - Stream = require('stream').Stream, - url = require('url'), - util = require('util'), - Base = require('./base'), - Headers = require('./headers'), - HttpParser = require('../http_parser'); - -var PORTS = { 'ws:': 80, 'wss:': 443 }; - -var Proxy = function(client, origin, options) { - this._client = client; - this._http = new HttpParser('response'); - this._origin = (typeof client.url === 'object') ? client.url : url.parse(client.url); - this._url = (typeof origin === 'object') ? origin : url.parse(origin); - this._options = options || {}; - this._state = 0; - - this.readable = this.writable = true; - this._paused = false; - - this._headers = new Headers(); - this._headers.set('Host', this._origin.host); - this._headers.set('Connection', 'keep-alive'); - this._headers.set('Proxy-Connection', 'keep-alive'); - - var auth = this._url.auth && Buffer.from(this._url.auth, 'utf8').toString('base64'); - if (auth) this._headers.set('Proxy-Authorization', 'Basic ' + auth); -}; -util.inherits(Proxy, Stream); - -var instance = { - setHeader: function(name, value) { - if (this._state !== 0) return false; - this._headers.set(name, value); - return true; - }, - - start: function() { - if (this._state !== 0) return false; - this._state = 1; - - var origin = this._origin, - port = origin.port || PORTS[origin.protocol], - start = 'CONNECT ' + origin.hostname + ':' + port + ' HTTP/1.1'; - - var headers = [start, this._headers.toString(), '']; - - this.emit('data', Buffer.from(headers.join('\r\n'), 'utf8')); - return true; - }, - - pause: function() { - this._paused = true; - }, - - resume: function() { - this._paused = false; - this.emit('drain'); - }, - - write: function(chunk) { - if (!this.writable) return false; - - this._http.parse(chunk); - if (!this._http.isComplete()) return !this._paused; - - this.statusCode = this._http.statusCode; - this.headers = this._http.headers; - - if (this.statusCode === 200) { - this.emit('connect', new Base.ConnectEvent()); - } else { - var message = "Can't establish a connection to the server at " + this._origin.href; - this.emit('error', new Error(message)); - } - this.end(); - return !this._paused; - }, - - end: function(chunk) { - if (!this.writable) return; - if (chunk !== undefined) this.write(chunk); - this.readable = this.writable = false; - this.emit('close'); - this.emit('end'); - }, - - destroy: function() { - this.end(); - } -}; - -for (var key in instance) - Proxy.prototype[key] = instance[key]; - -module.exports = Proxy; diff --git a/node_modules/websocket-driver/lib/websocket/driver/server.js b/node_modules/websocket-driver/lib/websocket/driver/server.js deleted file mode 100644 index dc635b0..0000000 --- a/node_modules/websocket-driver/lib/websocket/driver/server.js +++ /dev/null @@ -1,112 +0,0 @@ -'use strict'; - -var util = require('util'), - HttpParser = require('../http_parser'), - Base = require('./base'), - Draft75 = require('./draft75'), - Draft76 = require('./draft76'), - Hybi = require('./hybi'); - -var Server = function(options) { - Base.call(this, null, null, options); - this._http = new HttpParser('request'); -}; -util.inherits(Server, Base); - -var instance = { - EVENTS: ['open', 'message', 'error', 'close', 'ping', 'pong'], - - _bindEventListeners: function() { - this.messages.on('error', function() {}); - this.on('error', function() {}); - }, - - parse: function(chunk) { - if (this._delegate) return this._delegate.parse(chunk); - - this._http.parse(chunk); - if (!this._http.isComplete()) return; - - this.method = this._http.method; - this.url = this._http.url; - this.headers = this._http.headers; - this.body = this._http.body; - - var self = this; - this._delegate = Server.http(this, this._options); - this._delegate.messages = this.messages; - this._delegate.io = this.io; - this._open(); - - this.EVENTS.forEach(function(event) { - this._delegate.on(event, function(e) { self.emit(event, e) }); - }, this); - - this.protocol = this._delegate.protocol; - this.version = this._delegate.version; - - this.parse(this._http.body); - this.emit('connect', new Base.ConnectEvent()); - }, - - _open: function() { - this.__queue.forEach(function(msg) { - this._delegate[msg[0]].apply(this._delegate, msg[1]); - }, this); - this.__queue = []; - } -}; - -['addExtension', 'setHeader', 'start', 'frame', 'text', 'binary', 'ping', 'close'].forEach(function(method) { - instance[method] = function() { - if (this._delegate) { - return this._delegate[method].apply(this._delegate, arguments); - } else { - this.__queue.push([method, arguments]); - return true; - } - }; -}); - -for (var key in instance) - Server.prototype[key] = instance[key]; - -Server.isSecureRequest = function(request) { - if (request.connection && request.connection.authorized !== undefined) return true; - if (request.socket && request.socket.secure) return true; - - var headers = request.headers; - if (!headers) return false; - if (headers['https'] === 'on') return true; - if (headers['x-forwarded-ssl'] === 'on') return true; - if (headers['x-forwarded-scheme'] === 'https') return true; - if (headers['x-forwarded-proto'] === 'https') return true; - - return false; -}; - -Server.determineUrl = function(request) { - var scheme = this.isSecureRequest(request) ? 'wss:' : 'ws:'; - return scheme + '//' + request.headers.host + request.url; -}; - -Server.http = function(request, options) { - options = options || {}; - if (options.requireMasking === undefined) options.requireMasking = true; - - var headers = request.headers, - version = headers['sec-websocket-version'], - key = headers['sec-websocket-key'], - key1 = headers['sec-websocket-key1'], - key2 = headers['sec-websocket-key2'], - url = this.determineUrl(request); - - if (version || key) - return new Hybi(request, url, options); - else if (key1 || key2) - return new Draft76(request, url, options); - else - return new Draft75(request, url, options); -}; - -module.exports = Server; diff --git a/node_modules/websocket-driver/lib/websocket/driver/stream_reader.js b/node_modules/websocket-driver/lib/websocket/driver/stream_reader.js deleted file mode 100644 index 3564da8..0000000 --- a/node_modules/websocket-driver/lib/websocket/driver/stream_reader.js +++ /dev/null @@ -1,69 +0,0 @@ -'use strict'; - -var Buffer = require('safe-buffer').Buffer; - -var StreamReader = function() { - this._queue = []; - this._queueSize = 0; - this._offset = 0; -}; - -StreamReader.prototype.put = function(buffer) { - if (!buffer || buffer.length === 0) return; - if (!Buffer.isBuffer(buffer)) buffer = Buffer.from(buffer); - this._queue.push(buffer); - this._queueSize += buffer.length; -}; - -StreamReader.prototype.read = function(length) { - if (length > this._queueSize) return null; - if (length === 0) return Buffer.alloc(0); - - this._queueSize -= length; - - var queue = this._queue, - remain = length, - first = queue[0], - buffers, buffer; - - if (first.length >= length) { - if (first.length === length) { - return queue.shift(); - } else { - buffer = first.slice(0, length); - queue[0] = first.slice(length); - return buffer; - } - } - - for (var i = 0, n = queue.length; i < n; i++) { - if (remain < queue[i].length) break; - remain -= queue[i].length; - } - buffers = queue.splice(0, i); - - if (remain > 0 && queue.length > 0) { - buffers.push(queue[0].slice(0, remain)); - queue[0] = queue[0].slice(remain); - } - return Buffer.concat(buffers, length); -}; - -StreamReader.prototype.eachByte = function(callback, context) { - var buffer, n, index; - - while (this._queue.length > 0) { - buffer = this._queue[0]; - n = buffer.length; - - while (this._offset < n) { - index = this._offset; - this._offset += 1; - callback.call(context, buffer[index]); - } - this._offset = 0; - this._queue.shift(); - } -}; - -module.exports = StreamReader; diff --git a/node_modules/websocket-driver/lib/websocket/http_parser.js b/node_modules/websocket-driver/lib/websocket/http_parser.js deleted file mode 100644 index 1396656..0000000 --- a/node_modules/websocket-driver/lib/websocket/http_parser.js +++ /dev/null @@ -1,135 +0,0 @@ -'use strict'; - -var NodeHTTPParser = require('http-parser-js').HTTPParser, - Buffer = require('safe-buffer').Buffer; - -var TYPES = { - request: NodeHTTPParser.REQUEST || 'request', - response: NodeHTTPParser.RESPONSE || 'response' -}; - -var HttpParser = function(type) { - this._type = type; - this._parser = new NodeHTTPParser(TYPES[type]); - this._complete = false; - this.headers = {}; - - var current = null, - self = this; - - this._parser.onHeaderField = function(b, start, length) { - current = b.toString('utf8', start, start + length).toLowerCase(); - }; - - this._parser.onHeaderValue = function(b, start, length) { - var value = b.toString('utf8', start, start + length); - - if (self.headers.hasOwnProperty(current)) - self.headers[current] += ', ' + value; - else - self.headers[current] = value; - }; - - this._parser.onHeadersComplete = this._parser[NodeHTTPParser.kOnHeadersComplete] = - function(majorVersion, minorVersion, headers, method, pathname, statusCode) { - var info = arguments[0]; - - if (typeof info === 'object') { - method = info.method; - pathname = info.url; - statusCode = info.statusCode; - headers = info.headers; - } - - self.method = (typeof method === 'number') ? HttpParser.METHODS[method] : method; - self.statusCode = statusCode; - self.url = pathname; - - if (!headers) return; - - for (var i = 0, n = headers.length, key, value; i < n; i += 2) { - key = headers[i].toLowerCase(); - value = headers[i+1]; - if (self.headers.hasOwnProperty(key)) - self.headers[key] += ', ' + value; - else - self.headers[key] = value; - } - - self._complete = true; - }; -}; - -HttpParser.METHODS = { - 0: 'DELETE', - 1: 'GET', - 2: 'HEAD', - 3: 'POST', - 4: 'PUT', - 5: 'CONNECT', - 6: 'OPTIONS', - 7: 'TRACE', - 8: 'COPY', - 9: 'LOCK', - 10: 'MKCOL', - 11: 'MOVE', - 12: 'PROPFIND', - 13: 'PROPPATCH', - 14: 'SEARCH', - 15: 'UNLOCK', - 16: 'BIND', - 17: 'REBIND', - 18: 'UNBIND', - 19: 'ACL', - 20: 'REPORT', - 21: 'MKACTIVITY', - 22: 'CHECKOUT', - 23: 'MERGE', - 24: 'M-SEARCH', - 25: 'NOTIFY', - 26: 'SUBSCRIBE', - 27: 'UNSUBSCRIBE', - 28: 'PATCH', - 29: 'PURGE', - 30: 'MKCALENDAR', - 31: 'LINK', - 32: 'UNLINK' -}; - -var VERSION = process.version - ? process.version.match(/[0-9]+/g).map(function(n) { return parseInt(n, 10) }) - : []; - -if (VERSION[0] === 0 && VERSION[1] === 12) { - HttpParser.METHODS[16] = 'REPORT'; - HttpParser.METHODS[17] = 'MKACTIVITY'; - HttpParser.METHODS[18] = 'CHECKOUT'; - HttpParser.METHODS[19] = 'MERGE'; - HttpParser.METHODS[20] = 'M-SEARCH'; - HttpParser.METHODS[21] = 'NOTIFY'; - HttpParser.METHODS[22] = 'SUBSCRIBE'; - HttpParser.METHODS[23] = 'UNSUBSCRIBE'; - HttpParser.METHODS[24] = 'PATCH'; - HttpParser.METHODS[25] = 'PURGE'; -} - -HttpParser.prototype.isComplete = function() { - return this._complete; -}; - -HttpParser.prototype.parse = function(chunk) { - var consumed = this._parser.execute(chunk, 0, chunk.length); - - if (typeof consumed !== 'number') { - this.error = consumed; - this._complete = true; - return; - } - - if (this._complete) - this.body = (consumed < chunk.length) - ? chunk.slice(consumed) - : Buffer.alloc(0); -}; - -module.exports = HttpParser; diff --git a/node_modules/websocket-driver/lib/websocket/streams.js b/node_modules/websocket-driver/lib/websocket/streams.js deleted file mode 100644 index 96ab31f..0000000 --- a/node_modules/websocket-driver/lib/websocket/streams.js +++ /dev/null @@ -1,146 +0,0 @@ -'use strict'; - -/** - -Streams in a WebSocket connection ---------------------------------- - -We model a WebSocket as two duplex streams: one stream is for the wire protocol -over an I/O socket, and the other is for incoming/outgoing messages. - - - +----------+ +---------+ +----------+ - [1] write(chunk) -->| ~~~~~~~~ +----->| parse() +----->| ~~~~~~~~ +--> emit('data') [2] - | | +----+----+ | | - | | | | | - | IO | | [5] | Messages | - | | V | | - | | +---------+ | | - [4] emit('data') <--+ ~~~~~~~~ |<-----+ frame() |<-----+ ~~~~~~~~ |<-- write(chunk) [3] - +----------+ +---------+ +----------+ - - -Message transfer in each direction is simple: IO receives a byte stream [1] and -sends this stream for parsing. The parser will periodically emit a complete -message text on the Messages stream [2]. Similarly, when messages are written -to the Messages stream [3], they are framed using the WebSocket wire format and -emitted via IO [4]. - -There is a feedback loop via [5] since some input from [1] will be things like -ping, pong and close frames. In these cases the protocol responds by emitting -responses directly back to [4] rather than emitting messages via [2]. - -For the purposes of flow control, we consider the sources of each Readable -stream to be as follows: - -* [2] receives input from [1] -* [4] receives input from [1] and [3] - -The classes below express the relationships described above without prescribing -anything about how parse() and frame() work, other than assuming they emit -'data' events to the IO and Messages streams. They will work with any protocol -driver having these two methods. -**/ - - -var Stream = require('stream').Stream, - util = require('util'); - - -var IO = function(driver) { - this.readable = this.writable = true; - this._paused = false; - this._driver = driver; -}; -util.inherits(IO, Stream); - -// The IO pause() and resume() methods will be called when the socket we are -// piping to gets backed up and drains. Since IO output [4] comes from IO input -// [1] and Messages input [3], we need to tell both of those to return false -// from write() when this stream is paused. - -IO.prototype.pause = function() { - this._paused = true; - this._driver.messages._paused = true; -}; - -IO.prototype.resume = function() { - this._paused = false; - this.emit('drain'); - - var messages = this._driver.messages; - messages._paused = false; - messages.emit('drain'); -}; - -// When we receive input from a socket, send it to the parser and tell the -// source whether to back off. -IO.prototype.write = function(chunk) { - if (!this.writable) return false; - this._driver.parse(chunk); - return !this._paused; -}; - -// The IO end() method will be called when the socket piping into it emits -// 'close' or 'end', i.e. the socket is closed. In this situation the Messages -// stream will not emit any more data so we emit 'end'. -IO.prototype.end = function(chunk) { - if (!this.writable) return; - if (chunk !== undefined) this.write(chunk); - this.writable = false; - - var messages = this._driver.messages; - if (messages.readable) { - messages.readable = messages.writable = false; - messages.emit('end'); - } -}; - -IO.prototype.destroy = function() { - this.end(); -}; - - -var Messages = function(driver) { - this.readable = this.writable = true; - this._paused = false; - this._driver = driver; -}; -util.inherits(Messages, Stream); - -// The Messages pause() and resume() methods will be called when the app that's -// processing the messages gets backed up and drains. If we're emitting -// messages too fast we should tell the source to slow down. Message output [2] -// comes from IO input [1]. - -Messages.prototype.pause = function() { - this._driver.io._paused = true; -}; - -Messages.prototype.resume = function() { - this._driver.io._paused = false; - this._driver.io.emit('drain'); -}; - -// When we receive messages from the user, send them to the formatter and tell -// the source whether to back off. -Messages.prototype.write = function(message) { - if (!this.writable) return false; - if (typeof message === 'string') this._driver.text(message); - else this._driver.binary(message); - return !this._paused; -}; - -// The Messages end() method will be called when a stream piping into it emits -// 'end'. Many streams may be piped into the WebSocket and one of them ending -// does not mean the whole socket is done, so just process the input and move -// on leaving the socket open. -Messages.prototype.end = function(message) { - if (message !== undefined) this.write(message); -}; - -Messages.prototype.destroy = function() {}; - - -exports.IO = IO; -exports.Messages = Messages; diff --git a/node_modules/websocket-driver/package.json b/node_modules/websocket-driver/package.json deleted file mode 100644 index fab2506..0000000 --- a/node_modules/websocket-driver/package.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "websocket-driver", - "description": "WebSocket protocol handler with pluggable I/O", - "homepage": "https://github.com/faye/websocket-driver-node", - "author": "James Coglan (http://jcoglan.com/)", - "keywords": [ - "websocket" - ], - "license": "Apache-2.0", - "version": "0.7.4", - "engines": { - "node": ">=0.8.0" - }, - "files": [ - "lib" - ], - "main": "./lib/websocket/driver", - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "devDependencies": { - "jstest": "*", - "permessage-deflate": "*" - }, - "scripts": { - "test": "jstest spec/runner.js" - }, - "repository": { - "type": "git", - "url": "git://github.com/faye/websocket-driver-node.git" - }, - "bugs": "https://github.com/faye/websocket-driver-node/issues" -} diff --git a/node_modules/websocket-extensions/CHANGELOG.md b/node_modules/websocket-extensions/CHANGELOG.md deleted file mode 100644 index bb84f5a..0000000 --- a/node_modules/websocket-extensions/CHANGELOG.md +++ /dev/null @@ -1,28 +0,0 @@ -### 0.1.4 / 2020-06-02 - -- Remove a ReDoS vulnerability in the header parser (CVE-2020-7662, reported by - Robert McLaughlin) -- Change license from MIT to Apache 2.0 - -### 0.1.3 / 2017-11-11 - -- Accept extension names and parameters including uppercase letters -- Handle extension names that clash with `Object.prototype` properties - -### 0.1.2 / 2017-09-10 - -- Catch synchronous exceptions thrown when calling an extension -- Fix race condition caused when a message is pushed after a cell has stopped - due to an error -- Fix failure of `close()` to return if a message that's queued after one that - produces an error never finishes being processed - -### 0.1.1 / 2015-02-19 - -- Prevent sessions being closed before they have finished processing messages -- Add a callback to `Extensions.close()` so the caller can tell when it's safe - to close the socket - -### 0.1.0 / 2014-12-12 - -- Initial release diff --git a/node_modules/websocket-extensions/LICENSE.md b/node_modules/websocket-extensions/LICENSE.md deleted file mode 100644 index 3a88e51..0000000 --- a/node_modules/websocket-extensions/LICENSE.md +++ /dev/null @@ -1,12 +0,0 @@ -Copyright 2014-2020 James Coglan - -Licensed under the Apache License, Version 2.0 (the "License"); you may not use -this file except in compliance with the License. You may obtain a copy of the -License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software distributed -under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR -CONDITIONS OF ANY KIND, either express or implied. See the License for the -specific language governing permissions and limitations under the License. diff --git a/node_modules/websocket-extensions/README.md b/node_modules/websocket-extensions/README.md deleted file mode 100644 index 68694ea..0000000 --- a/node_modules/websocket-extensions/README.md +++ /dev/null @@ -1,331 +0,0 @@ -# websocket-extensions [![Build status](https://secure.travis-ci.org/faye/websocket-extensions-node.svg)](http://travis-ci.org/faye/websocket-extensions-node) - -A minimal framework that supports the implementation of WebSocket extensions in -a way that's decoupled from the main protocol. This library aims to allow a -WebSocket extension to be written and used with any protocol library, by -defining abstract representations of frames and messages that allow modules to -co-operate. - -`websocket-extensions` provides a container for registering extension plugins, -and provides all the functions required to negotiate which extensions to use -during a session via the `Sec-WebSocket-Extensions` header. By implementing the -APIs defined in this document, an extension may be used by any WebSocket library -based on this framework. - -## Installation - -``` -$ npm install websocket-extensions -``` - -## Usage - -There are two main audiences for this library: authors implementing the -WebSocket protocol, and authors implementing extensions. End users of a -WebSocket library or an extension should be able to use any extension by passing -it as an argument to their chosen protocol library, without needing to know how -either of them work, or how the `websocket-extensions` framework operates. - -The library is designed with the aim that any protocol implementation and any -extension can be used together, so long as they support the same abstract -representation of frames and messages. - -### Data types - -The APIs provided by the framework rely on two data types; extensions will -expect to be given data and to be able to return data in these formats: - -#### *Frame* - -*Frame* is a structure representing a single WebSocket frame of any type. Frames -are simple objects that must have at least the following properties, which -represent the data encoded in the frame: - -| property | description | -| ------------ | ------------------------------------------------------------------ | -| `final` | `true` if the `FIN` bit is set, `false` otherwise | -| `rsv1` | `true` if the `RSV1` bit is set, `false` otherwise | -| `rsv2` | `true` if the `RSV2` bit is set, `false` otherwise | -| `rsv3` | `true` if the `RSV3` bit is set, `false` otherwise | -| `opcode` | the numeric opcode (`0`, `1`, `2`, `8`, `9`, or `10`) of the frame | -| `masked` | `true` if the `MASK` bit is set, `false` otherwise | -| `maskingKey` | a 4-byte `Buffer` if `masked` is `true`, otherwise `null` | -| `payload` | a `Buffer` containing the (unmasked) application data | - -#### *Message* - -A *Message* represents a complete application message, which can be formed from -text, binary and continuation frames. It has the following properties: - -| property | description | -| -------- | ----------------------------------------------------------------- | -| `rsv1` | `true` if the first frame of the message has the `RSV1` bit set | -| `rsv2` | `true` if the first frame of the message has the `RSV2` bit set | -| `rsv3` | `true` if the first frame of the message has the `RSV3` bit set | -| `opcode` | the numeric opcode (`1` or `2`) of the first frame of the message | -| `data` | the concatenation of all the frame payloads in the message | - -### For driver authors - -A driver author is someone implementing the WebSocket protocol proper, and who -wishes end users to be able to use WebSocket extensions with their library. - -At the start of a WebSocket session, on both the client and the server side, -they should begin by creating an extension container and adding whichever -extensions they want to use. - -```js -var Extensions = require('websocket-extensions'), - deflate = require('permessage-deflate'); - -var exts = new Extensions(); -exts.add(deflate); -``` - -In the following examples, `exts` refers to this `Extensions` instance. - -#### Client sessions - -Clients will use the methods `generateOffer()` and `activate(header)`. - -As part of the handshake process, the client must send a -`Sec-WebSocket-Extensions` header to advertise that it supports the registered -extensions. This header should be generated using: - -```js -request.headers['sec-websocket-extensions'] = exts.generateOffer(); -``` - -This returns a string, for example `"permessage-deflate; -client_max_window_bits"`, that represents all the extensions the client is -offering to use, and their parameters. This string may contain multiple offers -for the same extension. - -When the client receives the handshake response from the server, it should pass -the incoming `Sec-WebSocket-Extensions` header in to `exts` to activate the -extensions the server has accepted: - -```js -exts.activate(response.headers['sec-websocket-extensions']); -``` - -If the server has sent any extension responses that the client does not -recognize, or are in conflict with one another for use of RSV bits, or that use -invalid parameters for the named extensions, then `exts.activate()` will -`throw`. In this event, the client driver should fail the connection with -closing code `1010`. - -#### Server sessions - -Servers will use the method `generateResponse(header)`. - -A server session needs to generate a `Sec-WebSocket-Extensions` header to send -in its handshake response: - -```js -var clientOffer = request.headers['sec-websocket-extensions'], - extResponse = exts.generateResponse(clientOffer); - -response.headers['sec-websocket-extensions'] = extResponse; -``` - -Calling `exts.generateResponse(header)` activates those extensions the client -has asked to use, if they are registered, asks each extension for a set of -response parameters, and returns a string containing the response parameters for -all accepted extensions. - -#### In both directions - -Both clients and servers will use the methods `validFrameRsv(frame)`, -`processIncomingMessage(message)` and `processOutgoingMessage(message)`. - -The WebSocket protocol requires that frames do not have any of the `RSV` bits -set unless there is an extension in use that allows otherwise. When processing -an incoming frame, sessions should pass a *Frame* object to: - -```js -exts.validFrameRsv(frame) -``` - -If this method returns `false`, the session should fail the WebSocket connection -with closing code `1002`. - -To pass incoming messages through the extension stack, a session should -construct a *Message* object according to the above datatype definitions, and -call: - -```js -exts.processIncomingMessage(message, function(error, msg) { - // hand the message off to the application -}); -``` - -If any extensions fail to process the message, then the callback will yield an -error and the session should fail the WebSocket connection with closing code -`1010`. If `error` is `null`, then `msg` should be passed on to the application. - -To pass outgoing messages through the extension stack, a session should -construct a *Message* as before, and call: - -```js -exts.processOutgoingMessage(message, function(error, msg) { - // write message to the transport -}); -``` - -If any extensions fail to process the message, then the callback will yield an -error and the session should fail the WebSocket connection with closing code -`1010`. If `error` is `null`, then `message` should be converted into frames -(with the message's `rsv1`, `rsv2`, `rsv3` and `opcode` set on the first frame) -and written to the transport. - -At the end of the WebSocket session (either when the protocol is explicitly -ended or the transport connection disconnects), the driver should call: - -```js -exts.close(function() {}) -``` - -The callback is invoked when all extensions have finished processing any -messages in the pipeline and it's safe to close the socket. - -### For extension authors - -An extension author is someone implementing an extension that transforms -WebSocket messages passing between the client and server. They would like to -implement their extension once and have it work with any protocol library. - -Extension authors will not install `websocket-extensions` or call it directly. -Instead, they should implement the following API to allow their extension to -plug into the `websocket-extensions` framework. - -An `Extension` is any object that has the following properties: - -| property | description | -| -------- | ---------------------------------------------------------------------------- | -| `name` | a string containing the name of the extension as used in negotiation headers | -| `type` | a string, must be `"permessage"` | -| `rsv1` | either `true` if the extension uses the RSV1 bit, `false` otherwise | -| `rsv2` | either `true` if the extension uses the RSV2 bit, `false` otherwise | -| `rsv3` | either `true` if the extension uses the RSV3 bit, `false` otherwise | - -It must also implement the following methods: - -```js -ext.createClientSession() -``` - -This returns a *ClientSession*, whose interface is defined below. - -```js -ext.createServerSession(offers) -``` - -This takes an array of offer params and returns a *ServerSession*, whose -interface is defined below. For example, if the client handshake contains the -offer header: - -``` -Sec-WebSocket-Extensions: permessage-deflate; server_no_context_takeover; server_max_window_bits=8, \ - permessage-deflate; server_max_window_bits=15 -``` - -then the `permessage-deflate` extension will receive the call: - -```js -ext.createServerSession([ - { server_no_context_takeover: true, server_max_window_bits: 8 }, - { server_max_window_bits: 15 } -]); -``` - -The extension must decide which set of parameters it wants to accept, if any, -and return a *ServerSession* if it wants to accept the parameters and `null` -otherwise. - -#### *ClientSession* - -A *ClientSession* is the type returned by `ext.createClientSession()`. It must -implement the following methods, as well as the *Session* API listed below. - -```js -clientSession.generateOffer() -// e.g. -> [ -// { server_no_context_takeover: true, server_max_window_bits: 8 }, -// { server_max_window_bits: 15 } -// ] -``` - -This must return a set of parameters to include in the client's -`Sec-WebSocket-Extensions` offer header. If the session wants to offer multiple -configurations, it can return an array of sets of parameters as shown above. - -```js -clientSession.activate(params) // -> true -``` - -This must take a single set of parameters from the server's handshake response -and use them to configure the client session. If the client accepts the given -parameters, then this method must return `true`. If it returns any other value, -the framework will interpret this as the client rejecting the response, and will -`throw`. - -#### *ServerSession* - -A *ServerSession* is the type returned by `ext.createServerSession(offers)`. It -must implement the following methods, as well as the *Session* API listed below. - -```js -serverSession.generateResponse() -// e.g. -> { server_max_window_bits: 8 } -``` - -This returns the set of parameters the server session wants to send in its -`Sec-WebSocket-Extensions` response header. Only one set of parameters is -returned to the client per extension. Server sessions that would confict on -their use of RSV bits are not activated. - -#### *Session* - -The *Session* API must be implemented by both client and server sessions. It -contains two methods, `processIncomingMessage(message)` and -`processOutgoingMessage(message)`. - -```js -session.processIncomingMessage(message, function(error, msg) { ... }) -``` - -The session must implement this method to take an incoming *Message* as defined -above, transform it in any way it needs, then return it via the callback. If -there is an error processing the message, this method should yield an error as -the first argument. - -```js -session.processOutgoingMessage(message, function(error, msg) { ... }) -``` - -The session must implement this method to take an outgoing *Message* as defined -above, transform it in any way it needs, then return it via the callback. If -there is an error processing the message, this method should yield an error as -the first argument. - -Note that both `processIncomingMessage()` and `processOutgoingMessage()` can -perform their logic asynchronously, are allowed to process multiple messages -concurrently, and are not required to complete working on messages in the same -order the messages arrive. `websocket-extensions` will reorder messages as your -extension emits them and will make sure every extension is given messages in the -order they arrive from the driver. This allows extensions to maintain state that -depends on the messages' wire order, for example keeping a DEFLATE compression -context between messages. - -```js -session.close() -``` - -The framework will call this method when the WebSocket session ends, allowing -the session to release any resources it's using. - -## Examples - -- Consumer: [websocket-driver](https://github.com/faye/websocket-driver-node) -- Provider: [permessage-deflate](https://github.com/faye/permessage-deflate-node) diff --git a/node_modules/websocket-extensions/lib/parser.js b/node_modules/websocket-extensions/lib/parser.js deleted file mode 100644 index 533767e..0000000 --- a/node_modules/websocket-extensions/lib/parser.js +++ /dev/null @@ -1,103 +0,0 @@ -'use strict'; - -var TOKEN = /([!#\$%&'\*\+\-\.\^_`\|~0-9A-Za-z]+)/, - NOTOKEN = /([^!#\$%&'\*\+\-\.\^_`\|~0-9A-Za-z])/g, - QUOTED = /"((?:\\[\x00-\x7f]|[^\x00-\x08\x0a-\x1f\x7f"\\])*)"/, - PARAM = new RegExp(TOKEN.source + '(?:=(?:' + TOKEN.source + '|' + QUOTED.source + '))?'), - EXT = new RegExp(TOKEN.source + '(?: *; *' + PARAM.source + ')*', 'g'), - EXT_LIST = new RegExp('^' + EXT.source + '(?: *, *' + EXT.source + ')*$'), - NUMBER = /^-?(0|[1-9][0-9]*)(\.[0-9]+)?$/; - -var hasOwnProperty = Object.prototype.hasOwnProperty; - -var Parser = { - parseHeader: function(header) { - var offers = new Offers(); - if (header === '' || header === undefined) return offers; - - if (!EXT_LIST.test(header)) - throw new SyntaxError('Invalid Sec-WebSocket-Extensions header: ' + header); - - var values = header.match(EXT); - - values.forEach(function(value) { - var params = value.match(new RegExp(PARAM.source, 'g')), - name = params.shift(), - offer = {}; - - params.forEach(function(param) { - var args = param.match(PARAM), key = args[1], data; - - if (args[2] !== undefined) { - data = args[2]; - } else if (args[3] !== undefined) { - data = args[3].replace(/\\/g, ''); - } else { - data = true; - } - if (NUMBER.test(data)) data = parseFloat(data); - - if (hasOwnProperty.call(offer, key)) { - offer[key] = [].concat(offer[key]); - offer[key].push(data); - } else { - offer[key] = data; - } - }, this); - offers.push(name, offer); - }, this); - - return offers; - }, - - serializeParams: function(name, params) { - var values = []; - - var print = function(key, value) { - if (value instanceof Array) { - value.forEach(function(v) { print(key, v) }); - } else if (value === true) { - values.push(key); - } else if (typeof value === 'number') { - values.push(key + '=' + value); - } else if (NOTOKEN.test(value)) { - values.push(key + '="' + value.replace(/"/g, '\\"') + '"'); - } else { - values.push(key + '=' + value); - } - }; - - for (var key in params) print(key, params[key]); - - return [name].concat(values).join('; '); - } -}; - -var Offers = function() { - this._byName = {}; - this._inOrder = []; -}; - -Offers.prototype.push = function(name, params) { - if (!hasOwnProperty.call(this._byName, name)) - this._byName[name] = []; - - this._byName[name].push(params); - this._inOrder.push({ name: name, params: params }); -}; - -Offers.prototype.eachOffer = function(callback, context) { - var list = this._inOrder; - for (var i = 0, n = list.length; i < n; i++) - callback.call(context, list[i].name, list[i].params); -}; - -Offers.prototype.byName = function(name) { - return this._byName[name] || []; -}; - -Offers.prototype.toArray = function() { - return this._inOrder.slice(); -}; - -module.exports = Parser; diff --git a/node_modules/websocket-extensions/lib/pipeline/README.md b/node_modules/websocket-extensions/lib/pipeline/README.md deleted file mode 100644 index 322a9c5..0000000 --- a/node_modules/websocket-extensions/lib/pipeline/README.md +++ /dev/null @@ -1,607 +0,0 @@ -# Extension pipelining - -`websocket-extensions` models the extension negotiation and processing pipeline -of the WebSocket protocol. Between the driver parsing messages from the TCP -stream and handing those messages off to the application, there may exist a -stack of extensions that transform the message somehow. - -In the parlance of this framework, a *session* refers to a single instance of an -extension, acting on a particular socket on either the server or the client -side. A session may transform messages both incoming to the application and -outgoing from the application, for example the `permessage-deflate` extension -compresses outgoing messages and decompresses incoming messages. Message streams -in either direction are independent; that is, incoming and outgoing messages -cannot be assumed to 'pair up' as in a request-response protocol. - -Asynchronous processing of messages poses a number of problems that this -pipeline construction is intended to solve. - - -## Overview - -Logically, we have the following: - - - +-------------+ out +---+ +---+ +---+ +--------+ - | |------>| |---->| |---->| |------>| | - | Application | | A | | B | | C | | Driver | - | |<------| |<----| |<----| |<------| | - +-------------+ in +---+ +---+ +---+ +--------+ - - \ / - +----------o----------+ - | - sessions - - -For outgoing messages, the driver receives the result of - - C.outgoing(B.outgoing(A.outgoing(message))) - - or, [A, B, C].reduce(((m, ext) => ext.outgoing(m)), message) - -For incoming messages, the application receives the result of - - A.incoming(B.incoming(C.incoming(message))) - - or, [C, B, A].reduce(((m, ext) => ext.incoming(m)), message) - -A session is of the following type, to borrow notation from pseudo-Haskell: - - type Session = { - incoming :: Message -> Message - outgoing :: Message -> Message - close :: () -> () - } - -(That `() -> ()` syntax is intended to mean that `close()` is a nullary void -method; I apologise to any Haskell readers for not using the right monad.) - -The `incoming()` and `outgoing()` methods perform message transformation in the -respective directions; `close()` is called when a socket closes so the session -can release any resources it's holding, for example a DEFLATE de/compression -context. - -However because this is JavaScript, the `incoming()` and `outgoing()` methods -may be asynchronous (indeed, `permessage-deflate` is based on `zlib`, whose API -is stream-based). So their interface is strictly: - - type Session = { - incoming :: Message -> Callback -> () - outgoing :: Message -> Callback -> () - close :: () -> () - } - - type Callback = Either Error Message -> () - -This means a message *m2* can be pushed into a session while it's still -processing the preceding message *m1*. The messages can be processed -concurrently but they *must* be given to the next session in line (or to the -application) in the same order they came in. Applications will expect to receive -messages in the order they arrived over the wire, and sessions require this too. -So ordering of messages must be preserved throughout the pipeline. - -Consider the following highly simplified extension that deflates messages on the -wire. `message` is a value conforming the type: - - type Message = { - rsv1 :: Boolean - rsv2 :: Boolean - rsv3 :: Boolean - opcode :: Number - data :: Buffer - } - -Here's the extension: - -```js -var zlib = require('zlib'); - -var deflate = { - outgoing: function(message, callback) { - zlib.deflateRaw(message.data, function(error, result) { - message.rsv1 = true; - message.data = result; - callback(error, message); - }); - }, - - incoming: function(message, callback) { - // decompress inbound messages (elided) - }, - - close: function() { - // no state to clean up - } -}; -``` - -We can call it with a large message followed by a small one, and the small one -will be returned first: - -```js -var crypto = require('crypto'), - large = crypto.randomBytes(1 << 14), - small = new Buffer('hi'); - -deflate.outgoing({ data: large }, function() { - console.log(1, 'large'); -}); - -deflate.outgoing({ data: small }, function() { - console.log(2, 'small'); -}); - -/* prints: 2 'small' - 1 'large' */ -``` - -So a session that processes messages asynchronously may fail to preserve message -ordering. - -Now, this extension is stateless, so it can process messages in any order and -still produce the same output. But some extensions are stateful and require -message order to be preserved. - -For example, when using `permessage-deflate` without `no_context_takeover` set, -the session retains a DEFLATE de/compression context between messages, which -accumulates state as it consumes data (later messages can refer to sections of -previous ones to improve compression). Reordering parts of the DEFLATE stream -will result in a failed decompression. Messages must be decompressed in the same -order they were compressed by the peer in order for the DEFLATE protocol to -work. - -Finally, there is the problem of closing a socket. When a WebSocket is closed by -the application, or receives a closing request from the other peer, there may be -messages outgoing from the application and incoming from the peer in the -pipeline. If we close the socket and pipeline immediately, two problems arise: - -* We may send our own closing frame to the peer before all prior messages we - sent have been written to the socket, and before we have finished processing - all prior messages from the peer -* The session may be instructed to close its resources (e.g. its de/compression - context) while it's in the middle of processing a message, or before it has - received messages that are upstream of it in the pipeline - -Essentially, we must defer closing the sessions and sending a closing frame -until after all prior messages have exited the pipeline. - - -## Design goals - -* Message order must be preserved between the protocol driver, the extension - sessions, and the application -* Messages should be handed off to sessions and endpoints as soon as possible, - to maximise throughput of stateless sessions -* The closing procedure should block any further messages from entering the - pipeline, and should allow all existing messages to drain -* Sessions should be closed as soon as possible to prevent them holding memory - and other resources when they have no more messages to handle -* The closing API should allow the caller to detect when the pipeline is empty - and it is safe to continue the WebSocket closing procedure -* Individual extensions should remain as simple as possible to facilitate - modularity and independent authorship - -The final point about modularity is an important one: this framework is designed -to facilitate extensions existing as plugins, by decoupling the protocol driver, -extensions, and application. In an ideal world, plugins should only need to -contain code for their specific functionality, and not solve these problems that -apply to all sessions. Also, solving some of these problems requires -consideration of all active sessions collectively, which an individual session -is incapable of doing. - -For example, it is entirely possible to take the simple `deflate` extension -above and wrap its `incoming()` and `outgoing()` methods in two `Transform` -streams, producing this type: - - type Session = { - incoming :: TransformStream - outtoing :: TransformStream - close :: () -> () - } - -The `Transform` class makes it easy to wrap an async function such that message -order is preserved: - -```js -var stream = require('stream'), - session = new stream.Transform({ objectMode: true }); - -session._transform = function(message, _, callback) { - var self = this; - deflate.outgoing(message, function(error, result) { - self.push(result); - callback(); - }); -}; -``` - -However, this has a negative impact on throughput: it works by deferring -`callback()` until the async function has 'returned', which blocks `Transform` -from passing further input into the `_transform()` method until the current -message is dealt with completely. This would prevent sessions from processing -messages concurrently, and would unnecessarily reduce the throughput of -stateless extensions. - -So, input should be handed off to sessions as soon as possible, and all we need -is a mechanism to reorder the output so that message order is preserved for the -next session in line. - - -## Solution - -We now describe the model implemented here and how it meets the above design -goals. The above diagram where a stack of extensions sit between the driver and -application describes the data flow, but not the object graph. That looks like -this: - - - +--------+ - | Driver | - +---o----+ - | - V - +------------+ +----------+ - | Extensions o----->| Pipeline | - +------------+ +-----o----+ - | - +---------------+---------------+ - | | | - +-----o----+ +-----o----+ +-----o----+ - | Cell [A] | | Cell [B] | | Cell [C] | - +----------+ +----------+ +----------+ - - -A driver using this framework holds an instance of the `Extensions` class, which -it uses to register extension plugins, negotiate headers and transform messages. -The `Extensions` instance itself holds a `Pipeline`, which contains an array of -`Cell` objects, each of which wraps one of the sessions. - - -### Message processing - -Both the `Pipeline` and `Cell` classes have `incoming()` and `outgoing()` -methods; the `Pipeline` interface pushes messages into the pipe, delegates the -message to each `Cell` in turn, then returns it back to the driver. Outgoing -messages pass through `A` then `B` then `C`, and incoming messages in the -reverse order. - -Internally, a `Cell` contains two `Functor` objects. A `Functor` wraps an async -function and makes sure its output messages maintain the order of its input -messages. This name is due to [@fronx](https://github.com/fronx), on the basis -that, by preserving message order, the abstraction preserves the *mapping* -between input and output messages. To use our simple `deflate` extension from -above: - -```js -var functor = new Functor(deflate, 'outgoing'); - -functor.call({ data: large }, function() { - console.log(1, 'large'); -}); - -functor.call({ data: small }, function() { - console.log(2, 'small'); -}); - -/* -> 1 'large' - 2 'small' */ -``` - -A `Cell` contains two of these, one for each direction: - - - +-----------------------+ - +---->| Functor [A, incoming] | - +----------+ | +-----------------------+ - | Cell [A] o------+ - +----------+ | +-----------------------+ - +---->| Functor [A, outgoing] | - +-----------------------+ - - -This satisfies the message transformation requirements: the `Pipeline` simply -loops over the cells in the appropriate direction to transform each message. -Because each `Cell` will preserve message order, we can pass a message to the -next `Cell` in line as soon as the current `Cell` returns it. This gives each -`Cell` all the messages in order while maximising throughput. - - -### Session closing - -We want to close each session as soon as possible, after all existing messages -have drained. To do this, each `Cell` begins with a pending message counter in -each direction, labelled `in` and `out` below. - - - +----------+ - | Pipeline | - +-----o----+ - | - +---------------+---------------+ - | | | - +-----o----+ +-----o----+ +-----o----+ - | Cell [A] | | Cell [B] | | Cell [C] | - +----------+ +----------+ +----------+ - in: 0 in: 0 in: 0 - out: 0 out: 0 out: 0 - - -When a message *m1* enters the pipeline, say in the `outgoing` direction, we -increment the `pending.out` counter on all cells immediately. - - - +----------+ - m1 => | Pipeline | - +-----o----+ - | - +---------------+---------------+ - | | | - +-----o----+ +-----o----+ +-----o----+ - | Cell [A] | | Cell [B] | | Cell [C] | - +----------+ +----------+ +----------+ - in: 0 in: 0 in: 0 - out: 1 out: 1 out: 1 - - -*m1* is handed off to `A`, meanwhile a second message `m2` arrives in the same -direction. All `pending.out` counters are again incremented. - - - +----------+ - m2 => | Pipeline | - +-----o----+ - | - +---------------+---------------+ - m1 | | | - +-----o----+ +-----o----+ +-----o----+ - | Cell [A] | | Cell [B] | | Cell [C] | - +----------+ +----------+ +----------+ - in: 0 in: 0 in: 0 - out: 2 out: 2 out: 2 - - -When the first cell's `A.outgoing` functor finishes processing *m1*, the first -`pending.out` counter is decremented and *m1* is handed off to cell `B`. - - - +----------+ - | Pipeline | - +-----o----+ - | - +---------------+---------------+ - m2 | m1 | | - +-----o----+ +-----o----+ +-----o----+ - | Cell [A] | | Cell [B] | | Cell [C] | - +----------+ +----------+ +----------+ - in: 0 in: 0 in: 0 - out: 1 out: 2 out: 2 - - - -As `B` finishes with *m1*, and as `A` finishes with *m2*, the `pending.out` -counters continue to decrement. - - - +----------+ - | Pipeline | - +-----o----+ - | - +---------------+---------------+ - | m2 | m1 | - +-----o----+ +-----o----+ +-----o----+ - | Cell [A] | | Cell [B] | | Cell [C] | - +----------+ +----------+ +----------+ - in: 0 in: 0 in: 0 - out: 0 out: 1 out: 2 - - - -Say `C` is a little slow, and begins processing *m2* while still processing -*m1*. That's fine, the `Functor` mechanism will keep *m1* ahead of *m2* in the -output. - - - +----------+ - | Pipeline | - +-----o----+ - | - +---------------+---------------+ - | | m2 | m1 - +-----o----+ +-----o----+ +-----o----+ - | Cell [A] | | Cell [B] | | Cell [C] | - +----------+ +----------+ +----------+ - in: 0 in: 0 in: 0 - out: 0 out: 0 out: 2 - - -Once all messages are dealt with, the counters return to `0`. - - - +----------+ - | Pipeline | - +-----o----+ - | - +---------------+---------------+ - | | | - +-----o----+ +-----o----+ +-----o----+ - | Cell [A] | | Cell [B] | | Cell [C] | - +----------+ +----------+ +----------+ - in: 0 in: 0 in: 0 - out: 0 out: 0 out: 0 - - -The same process applies in the `incoming` direction, the only difference being -that messages are passed to `C` first. - -This makes closing the sessions quite simple. When the driver wants to close the -socket, it calls `Pipeline.close()`. This *immediately* calls `close()` on all -the cells. If a cell has `in == out == 0`, then it immediately calls -`session.close()`. Otherwise, it stores the closing call and defers it until -`in` and `out` have both ticked down to zero. The pipeline will not accept new -messages after `close()` has been called, so we know the pending counts will not -increase after this point. - -This means each session is closed as soon as possible: `A` can close while the -slow `C` session is still working, because it knows there are no more messages -on the way. Similarly, `C` will defer closing if `close()` is called while *m1* -is still in `B`, and *m2* in `A`, because its pending count means it knows it -has work yet to do, even if it's not received those messages yet. This concern -cannot be addressed by extensions acting only on their own local state, unless -we pollute individual extensions by making them all implement this same -mechanism. - -The actual closing API at each level is slightly different: - - type Session = { - close :: () -> () - } - - type Cell = { - close :: () -> Promise () - } - - type Pipeline = { - close :: Callback -> () - } - -This might appear inconsistent so it's worth explaining. Remember that a -`Pipeline` holds a list of `Cell` objects, each wrapping a `Session`. The driver -talks (via the `Extensions` API) to the `Pipeline` interface, and it wants -`Pipeline.close()` to do two things: close all the sessions, and tell me when -it's safe to start the closing procedure (i.e. when all messages have drained -from the pipe and been handed off to the application or socket). A callback API -works well for that. - -At the other end of the stack, `Session.close()` is a nullary void method with -no callback or promise API because we don't care what it does, and whatever it -does do will not block the WebSocket protocol; we're not going to hold off -processing messages while a session closes its de/compression context. We just -tell it to close itself, and don't want to wait while it does that. - -In the middle, `Cell.close()` returns a promise rather than using a callback. -This is for two reasons. First, `Cell.close()` might not do anything -immediately, it might have to defer its effect while messages drain. So, if -given a callback, it would have to store it in a queue for later execution. -Callbacks work fine if your method does something and can then invoke the -callback itself, but if you need to store callbacks somewhere so another method -can execute them, a promise is a better fit. Second, it better serves the -purposes of `Pipeline.close()`: it wants to call `close()` on each of a list of -cells, and wait for all of them to finish. This is simple and idiomatic using -promises: - -```js -var closed = cells.map((cell) => cell.close()); -Promise.all(closed).then(callback); -``` - -(We don't actually use a full *Promises/A+* compatible promise here, we use a -much simplified construction that acts as a callback aggregater and resolves -synchronously and does not support chaining, but the principle is the same.) - - -### Error handling - -We've not mentioned error handling so far but it bears some explanation. The -above counter system still applies, but behaves slightly differently in the -presence of errors. - -Say we push three messages into the pipe in the outgoing direction: - - - +----------+ - m3, m2, m1 => | Pipeline | - +-----o----+ - | - +---------------+---------------+ - | | | - +-----o----+ +-----o----+ +-----o----+ - | Cell [A] | | Cell [B] | | Cell [C] | - +----------+ +----------+ +----------+ - in: 0 in: 0 in: 0 - out: 3 out: 3 out: 3 - - -They pass through the cells successfully up to this point: - - - +----------+ - | Pipeline | - +-----o----+ - | - +---------------+---------------+ - m3 | m2 | m1 | - +-----o----+ +-----o----+ +-----o----+ - | Cell [A] | | Cell [B] | | Cell [C] | - +----------+ +----------+ +----------+ - in: 0 in: 0 in: 0 - out: 1 out: 2 out: 3 - - -At this point, session `B` produces an error while processing *m2*, that is *m2* -becomes *e2*. *m1* is still in the pipeline, and *m3* is queued behind *m2*. -What ought to happen is that *m1* is handed off to the socket, then *m2* is -released to the driver, which will detect the error and begin closing the -socket. No further processing should be done on *m3* and it should not be -released to the driver after the error is emitted. - -To handle this, we allow errors to pass down the pipeline just like messages do, -to maintain ordering. But, once a cell sees its session produce an error, or it -receives an error from upstream, it should refuse to accept any further -messages. Session `B` might have begun processing *m3* by the time it produces -the error *e2*, but `C` will have been given *e2* before it receives *m3*, and -can simply drop *m3*. - -Now, say *e2* reaches the slow session `C` while *m1* is still present, -meanwhile *m3* has been dropped. `C` will never receive *m3* since it will have -been dropped upstream. Under the present model, its `out` counter will be `3` -but it is only going to emit two more values: *m1* and *e2*. In order for -closing to work, we need to decrement `out` to reflect this. The situation -should look like this: - - - +----------+ - | Pipeline | - +-----o----+ - | - +---------------+---------------+ - | | e2 | m1 - +-----o----+ +-----o----+ +-----o----+ - | Cell [A] | | Cell [B] | | Cell [C] | - +----------+ +----------+ +----------+ - in: 0 in: 0 in: 0 - out: 0 out: 0 out: 2 - - -When a cell sees its session emit an error, or when it receives an error from -upstream, it sets its pending count in the appropriate direction to equal the -number of messages it is *currently* processing. It will not accept any messages -after it sees the error, so this will allow the counter to reach zero. - -Note that while *e2* is in the pipeline, `Pipeline` should drop any further -messages in the outgoing direction, but should continue to accept incoming -messages. Until *e2* makes it out of the pipe to the driver, behind previous -successful messages, the driver does not know an error has happened, and a -message may arrive over the socket and make it all the way through the incoming -pipe in the meantime. We only halt processing in the affected direction to avoid -doing unnecessary work since messages arriving after an error should not be -processed. - -Some unnecessary work may happen, for example any messages already in the -pipeline following *m2* will be processed by `A`, since it's upstream of the -error. Those messages will be dropped by `B`. - - -## Alternative ideas - -I am considering implementing `Functor` as an object-mode transform stream -rather than what is essentially an async function. Being object-mode, a stream -would preserve message boundaries and would also possibly help address -back-pressure. I'm not sure whether this would require external API changes so -that such streams could be connected to the downstream driver's streams. - - -## Acknowledgements - -Credit is due to [@mnowster](https://github.com/mnowster) for helping with the -design and to [@fronx](https://github.com/fronx) for helping name things. diff --git a/node_modules/websocket-extensions/lib/pipeline/cell.js b/node_modules/websocket-extensions/lib/pipeline/cell.js deleted file mode 100644 index b2901ba..0000000 --- a/node_modules/websocket-extensions/lib/pipeline/cell.js +++ /dev/null @@ -1,53 +0,0 @@ -'use strict'; - -var Functor = require('./functor'), - Pledge = require('./pledge'); - -var Cell = function(tuple) { - this._ext = tuple[0]; - this._session = tuple[1]; - - this._functors = { - incoming: new Functor(this._session, 'processIncomingMessage'), - outgoing: new Functor(this._session, 'processOutgoingMessage') - }; -}; - -Cell.prototype.pending = function(direction) { - var functor = this._functors[direction]; - if (!functor._stopped) functor.pending += 1; -}; - -Cell.prototype.incoming = function(error, message, callback, context) { - this._exec('incoming', error, message, callback, context); -}; - -Cell.prototype.outgoing = function(error, message, callback, context) { - this._exec('outgoing', error, message, callback, context); -}; - -Cell.prototype.close = function() { - this._closed = this._closed || new Pledge(); - this._doClose(); - return this._closed; -}; - -Cell.prototype._exec = function(direction, error, message, callback, context) { - this._functors[direction].call(error, message, function(err, msg) { - if (err) err.message = this._ext.name + ': ' + err.message; - callback.call(context, err, msg); - this._doClose(); - }, this); -}; - -Cell.prototype._doClose = function() { - var fin = this._functors.incoming, - fout = this._functors.outgoing; - - if (!this._closed || fin.pending + fout.pending !== 0) return; - if (this._session) this._session.close(); - this._session = null; - this._closed.done(); -}; - -module.exports = Cell; diff --git a/node_modules/websocket-extensions/lib/pipeline/functor.js b/node_modules/websocket-extensions/lib/pipeline/functor.js deleted file mode 100644 index fadb49a..0000000 --- a/node_modules/websocket-extensions/lib/pipeline/functor.js +++ /dev/null @@ -1,72 +0,0 @@ -'use strict'; - -var RingBuffer = require('./ring_buffer'); - -var Functor = function(session, method) { - this._session = session; - this._method = method; - this._queue = new RingBuffer(Functor.QUEUE_SIZE); - this._stopped = false; - this.pending = 0; -}; - -Functor.QUEUE_SIZE = 8; - -Functor.prototype.call = function(error, message, callback, context) { - if (this._stopped) return; - - var record = { error: error, message: message, callback: callback, context: context, done: false }, - called = false, - self = this; - - this._queue.push(record); - - if (record.error) { - record.done = true; - this._stop(); - return this._flushQueue(); - } - - var handler = function(err, msg) { - if (!(called ^ (called = true))) return; - - if (err) { - self._stop(); - record.error = err; - record.message = null; - } else { - record.message = msg; - } - - record.done = true; - self._flushQueue(); - }; - - try { - this._session[this._method](message, handler); - } catch (err) { - handler(err); - } -}; - -Functor.prototype._stop = function() { - this.pending = this._queue.length; - this._stopped = true; -}; - -Functor.prototype._flushQueue = function() { - var queue = this._queue, record; - - while (queue.length > 0 && queue.peek().done) { - record = queue.shift(); - if (record.error) { - this.pending = 0; - queue.clear(); - } else { - this.pending -= 1; - } - record.callback.call(record.context, record.error, record.message); - } -}; - -module.exports = Functor; diff --git a/node_modules/websocket-extensions/lib/pipeline/index.js b/node_modules/websocket-extensions/lib/pipeline/index.js deleted file mode 100644 index 930bbc8..0000000 --- a/node_modules/websocket-extensions/lib/pipeline/index.js +++ /dev/null @@ -1,47 +0,0 @@ -'use strict'; - -var Cell = require('./cell'), - Pledge = require('./pledge'); - -var Pipeline = function(sessions) { - this._cells = sessions.map(function(session) { return new Cell(session) }); - this._stopped = { incoming: false, outgoing: false }; -}; - -Pipeline.prototype.processIncomingMessage = function(message, callback, context) { - if (this._stopped.incoming) return; - this._loop('incoming', this._cells.length - 1, -1, -1, message, callback, context); -}; - -Pipeline.prototype.processOutgoingMessage = function(message, callback, context) { - if (this._stopped.outgoing) return; - this._loop('outgoing', 0, this._cells.length, 1, message, callback, context); -}; - -Pipeline.prototype.close = function(callback, context) { - this._stopped = { incoming: true, outgoing: true }; - - var closed = this._cells.map(function(a) { return a.close() }); - if (callback) - Pledge.all(closed).then(function() { callback.call(context) }); -}; - -Pipeline.prototype._loop = function(direction, start, end, step, message, callback, context) { - var cells = this._cells, - n = cells.length, - self = this; - - while (n--) cells[n].pending(direction); - - var pipe = function(index, error, msg) { - if (index === end) return callback.call(context, error, msg); - - cells[index][direction](error, msg, function(err, m) { - if (err) self._stopped[direction] = true; - pipe(index + step, err, m); - }); - }; - pipe(start, null, message); -}; - -module.exports = Pipeline; diff --git a/node_modules/websocket-extensions/lib/pipeline/pledge.js b/node_modules/websocket-extensions/lib/pipeline/pledge.js deleted file mode 100644 index 8a1f45d..0000000 --- a/node_modules/websocket-extensions/lib/pipeline/pledge.js +++ /dev/null @@ -1,37 +0,0 @@ -'use strict'; - -var RingBuffer = require('./ring_buffer'); - -var Pledge = function() { - this._complete = false; - this._callbacks = new RingBuffer(Pledge.QUEUE_SIZE); -}; - -Pledge.QUEUE_SIZE = 4; - -Pledge.all = function(list) { - var pledge = new Pledge(), - pending = list.length, - n = pending; - - if (pending === 0) pledge.done(); - - while (n--) list[n].then(function() { - pending -= 1; - if (pending === 0) pledge.done(); - }); - return pledge; -}; - -Pledge.prototype.then = function(callback) { - if (this._complete) callback(); - else this._callbacks.push(callback); -}; - -Pledge.prototype.done = function() { - this._complete = true; - var callbacks = this._callbacks, callback; - while (callback = callbacks.shift()) callback(); -}; - -module.exports = Pledge; diff --git a/node_modules/websocket-extensions/lib/pipeline/ring_buffer.js b/node_modules/websocket-extensions/lib/pipeline/ring_buffer.js deleted file mode 100644 index 676ff94..0000000 --- a/node_modules/websocket-extensions/lib/pipeline/ring_buffer.js +++ /dev/null @@ -1,66 +0,0 @@ -'use strict'; - -var RingBuffer = function(bufferSize) { - this._bufferSize = bufferSize; - this.clear(); -}; - -RingBuffer.prototype.clear = function() { - this._buffer = new Array(this._bufferSize); - this._ringOffset = 0; - this._ringSize = this._bufferSize; - this._head = 0; - this._tail = 0; - this.length = 0; -}; - -RingBuffer.prototype.push = function(value) { - var expandBuffer = false, - expandRing = false; - - if (this._ringSize < this._bufferSize) { - expandBuffer = (this._tail === 0); - } else if (this._ringOffset === this._ringSize) { - expandBuffer = true; - expandRing = (this._tail === 0); - } - - if (expandBuffer) { - this._tail = this._bufferSize; - this._buffer = this._buffer.concat(new Array(this._bufferSize)); - this._bufferSize = this._buffer.length; - - if (expandRing) - this._ringSize = this._bufferSize; - } - - this._buffer[this._tail] = value; - this.length += 1; - if (this._tail < this._ringSize) this._ringOffset += 1; - this._tail = (this._tail + 1) % this._bufferSize; -}; - -RingBuffer.prototype.peek = function() { - if (this.length === 0) return void 0; - return this._buffer[this._head]; -}; - -RingBuffer.prototype.shift = function() { - if (this.length === 0) return void 0; - - var value = this._buffer[this._head]; - this._buffer[this._head] = void 0; - this.length -= 1; - this._ringOffset -= 1; - - if (this._ringOffset === 0 && this.length > 0) { - this._head = this._ringSize; - this._ringOffset = this.length; - this._ringSize = this._bufferSize; - } else { - this._head = (this._head + 1) % this._ringSize; - } - return value; -}; - -module.exports = RingBuffer; diff --git a/node_modules/websocket-extensions/lib/websocket_extensions.js b/node_modules/websocket-extensions/lib/websocket_extensions.js deleted file mode 100644 index 48adad8..0000000 --- a/node_modules/websocket-extensions/lib/websocket_extensions.js +++ /dev/null @@ -1,162 +0,0 @@ -'use strict'; - -var Parser = require('./parser'), - Pipeline = require('./pipeline'); - -var Extensions = function() { - this._rsv1 = this._rsv2 = this._rsv3 = null; - - this._byName = {}; - this._inOrder = []; - this._sessions = []; - this._index = {}; -}; - -Extensions.MESSAGE_OPCODES = [1, 2]; - -var instance = { - add: function(ext) { - if (typeof ext.name !== 'string') throw new TypeError('extension.name must be a string'); - if (ext.type !== 'permessage') throw new TypeError('extension.type must be "permessage"'); - - if (typeof ext.rsv1 !== 'boolean') throw new TypeError('extension.rsv1 must be true or false'); - if (typeof ext.rsv2 !== 'boolean') throw new TypeError('extension.rsv2 must be true or false'); - if (typeof ext.rsv3 !== 'boolean') throw new TypeError('extension.rsv3 must be true or false'); - - if (this._byName.hasOwnProperty(ext.name)) - throw new TypeError('An extension with name "' + ext.name + '" is already registered'); - - this._byName[ext.name] = ext; - this._inOrder.push(ext); - }, - - generateOffer: function() { - var sessions = [], - offer = [], - index = {}; - - this._inOrder.forEach(function(ext) { - var session = ext.createClientSession(); - if (!session) return; - - var record = [ext, session]; - sessions.push(record); - index[ext.name] = record; - - var offers = session.generateOffer(); - offers = offers ? [].concat(offers) : []; - - offers.forEach(function(off) { - offer.push(Parser.serializeParams(ext.name, off)); - }, this); - }, this); - - this._sessions = sessions; - this._index = index; - - return offer.length > 0 ? offer.join(', ') : null; - }, - - activate: function(header) { - var responses = Parser.parseHeader(header), - sessions = []; - - responses.eachOffer(function(name, params) { - var record = this._index[name]; - - if (!record) - throw new Error('Server sent an extension response for unknown extension "' + name + '"'); - - var ext = record[0], - session = record[1], - reserved = this._reserved(ext); - - if (reserved) - throw new Error('Server sent two extension responses that use the RSV' + - reserved[0] + ' bit: "' + - reserved[1] + '" and "' + ext.name + '"'); - - if (session.activate(params) !== true) - throw new Error('Server sent unacceptable extension parameters: ' + - Parser.serializeParams(name, params)); - - this._reserve(ext); - sessions.push(record); - }, this); - - this._sessions = sessions; - this._pipeline = new Pipeline(sessions); - }, - - generateResponse: function(header) { - var sessions = [], - response = [], - offers = Parser.parseHeader(header); - - this._inOrder.forEach(function(ext) { - var offer = offers.byName(ext.name); - if (offer.length === 0 || this._reserved(ext)) return; - - var session = ext.createServerSession(offer); - if (!session) return; - - this._reserve(ext); - sessions.push([ext, session]); - response.push(Parser.serializeParams(ext.name, session.generateResponse())); - }, this); - - this._sessions = sessions; - this._pipeline = new Pipeline(sessions); - - return response.length > 0 ? response.join(', ') : null; - }, - - validFrameRsv: function(frame) { - var allowed = { rsv1: false, rsv2: false, rsv3: false }, - ext; - - if (Extensions.MESSAGE_OPCODES.indexOf(frame.opcode) >= 0) { - for (var i = 0, n = this._sessions.length; i < n; i++) { - ext = this._sessions[i][0]; - allowed.rsv1 = allowed.rsv1 || ext.rsv1; - allowed.rsv2 = allowed.rsv2 || ext.rsv2; - allowed.rsv3 = allowed.rsv3 || ext.rsv3; - } - } - - return (allowed.rsv1 || !frame.rsv1) && - (allowed.rsv2 || !frame.rsv2) && - (allowed.rsv3 || !frame.rsv3); - }, - - processIncomingMessage: function(message, callback, context) { - this._pipeline.processIncomingMessage(message, callback, context); - }, - - processOutgoingMessage: function(message, callback, context) { - this._pipeline.processOutgoingMessage(message, callback, context); - }, - - close: function(callback, context) { - if (!this._pipeline) return callback.call(context); - this._pipeline.close(callback, context); - }, - - _reserve: function(ext) { - this._rsv1 = this._rsv1 || (ext.rsv1 && ext.name); - this._rsv2 = this._rsv2 || (ext.rsv2 && ext.name); - this._rsv3 = this._rsv3 || (ext.rsv3 && ext.name); - }, - - _reserved: function(ext) { - if (this._rsv1 && ext.rsv1) return [1, this._rsv1]; - if (this._rsv2 && ext.rsv2) return [2, this._rsv2]; - if (this._rsv3 && ext.rsv3) return [3, this._rsv3]; - return false; - } -}; - -for (var key in instance) - Extensions.prototype[key] = instance[key]; - -module.exports = Extensions; diff --git a/node_modules/websocket-extensions/package.json b/node_modules/websocket-extensions/package.json deleted file mode 100644 index e4f2f91..0000000 --- a/node_modules/websocket-extensions/package.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "name": "websocket-extensions", - "description": "Generic extension manager for WebSocket connections", - "homepage": "http://github.com/faye/websocket-extensions-node", - "author": "James Coglan (http://jcoglan.com/)", - "keywords": [ - "websocket" - ], - "license": "Apache-2.0", - "version": "0.1.4", - "engines": { - "node": ">=0.8.0" - }, - "files": [ - "lib" - ], - "main": "./lib/websocket_extensions", - "devDependencies": { - "jstest": "*" - }, - "scripts": { - "test": "jstest spec/runner.js" - }, - "repository": { - "type": "git", - "url": "git://github.com/faye/websocket-extensions-node.git" - }, - "bugs": "http://github.com/faye/websocket-extensions-node/issues" -} diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 7f6a14c..0000000 --- a/package-lock.json +++ /dev/null @@ -1,2120 +0,0 @@ -{ - "name": "Hackathon-website-2023", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "dependencies": { - "live-server": "^1.2.2" - } - }, - "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/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "node_modules/anymatch/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/apache-crypt": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/apache-crypt/-/apache-crypt-1.2.6.tgz", - "integrity": "sha512-072WetlM4blL8PREJVeY+WHiUh1R5VNt2HfceGS8aKqttPHcmqE5pkKuXPz/ULmJOFkc8Hw3kfKl6vy7Qka6DA==", - "dependencies": { - "unix-crypt-td-js": "^1.1.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/apache-md5": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/apache-md5/-/apache-md5-1.1.8.tgz", - "integrity": "sha512-FCAJojipPn0bXjuEpjOOOMN8FZDkxfWWp4JGN9mifU2IhxvKyXZYqpzPHdnTSUpmPDy+tsslB6Z1g+Vg6nVbYA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/async-each": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.6.tgz", - "integrity": "sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] - }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/basic-auth": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", - "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", - "dependencies": { - "safe-buffer": "5.1.2" - }, - "engines": { - "node": ">= 0.8" - } - }, - "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/bcryptjs": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", - "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==" - }, - "node_modules/binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "optional": true, - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, - "node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dependencies": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies", - "dependencies": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - }, - "optionalDependencies": { - "fsevents": "^1.2.7" - } - }, - "node_modules/class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" - }, - "node_modules/connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", - "dependencies": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "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/decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" - }, - "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/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/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "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/event-stream": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", - "integrity": "sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==", - "dependencies": { - "duplexer": "~0.1.1", - "from": "~0", - "map-stream": "~0.1.0", - "pause-stream": "0.0.11", - "split": "0.3", - "stream-combiner": "~0.0.4", - "through": "~2.3.1" - } - }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", - "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "optional": true - }, - "node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", - "dependencies": { - "map-cache": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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/from": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==" - }, - "node_modules/fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "deprecated": "The v1 package contains DANGEROUS / INSECURE binaries. Upgrade to safe fsevents v2", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "dependencies": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "node_modules/glob-parent/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, - "node_modules/has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-auth": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/http-auth/-/http-auth-3.1.3.tgz", - "integrity": "sha512-Jbx0+ejo2IOx+cRUYAGS1z6RGc6JfYUNkysZM4u4Sfk1uLlGv814F7/PIjQQAuThLdAWxb74JMGd5J8zex1VQg==", - "dependencies": { - "apache-crypt": "^1.1.2", - "apache-md5": "^1.0.6", - "bcryptjs": "^2.3.0", - "uuid": "^3.0.0" - }, - "engines": { - "node": ">=4.6.1" - } - }, - "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-errors/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/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/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-accessor-descriptor/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/is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", - "dependencies": { - "binary-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-data-descriptor/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/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-descriptor/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/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "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": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "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-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", - "engines": { - "node": ">=4" - } - }, - "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/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/live-server": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/live-server/-/live-server-1.2.2.tgz", - "integrity": "sha512-t28HXLjITRGoMSrCOv4eZ88viHaBVIjKjdI5PO92Vxlu+twbk6aE0t7dVIaz6ZWkjPilYFV6OSdMYl9ybN2B4w==", - "dependencies": { - "chokidar": "^2.0.4", - "colors": "1.4.0", - "connect": "^3.6.6", - "cors": "latest", - "event-stream": "3.3.4", - "faye-websocket": "0.11.x", - "http-auth": "3.1.x", - "morgan": "^1.9.1", - "object-assign": "latest", - "opn": "latest", - "proxy-middleware": "latest", - "send": "latest", - "serve-index": "^1.9.1" - }, - "bin": { - "live-server": "live-server.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-stream": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", - "integrity": "sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==" - }, - "node_modules/map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/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/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/mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mixin-deep/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/morgan": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", - "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", - "dependencies": { - "basic-auth": "~2.0.1", - "debug": "2.6.9", - "depd": "~2.0.0", - "on-finished": "~2.3.0", - "on-headers": "~1.0.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/nan": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", - "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", - "optional": true - }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/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/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/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/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", - "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/opn": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-6.0.0.tgz", - "integrity": "sha512-I9PKfIZC+e4RXZ/qr1RhgyCnGgYX0UEIlXgWnCOVACIvFgaC9rz6Won7xbdhoHrd8IIhV7YEpHjreNUNkqCGkQ==", - "deprecated": "The package has been renamed to `open`", - "dependencies": { - "is-wsl": "^1.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "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/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==" - }, - "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": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pause-stream": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", - "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", - "dependencies": { - "through": "~2.3" - } - }, - "node_modules/posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/proxy-middleware": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/proxy-middleware/-/proxy-middleware-0.15.0.tgz", - "integrity": "sha512-EGCG8SeoIRVMhsqHQUdDigB2i7qU7fCsWASwn54+nPutYO8n4q6EiwMzyfWlC+dzRFExP+kvcnDFdBDHoZBU7Q==", - "engines": { - "node": ">=0.8.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/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dependencies": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regex-not/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regex-not/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==" - }, - "node_modules/repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", - "deprecated": "https://github.com/lydell/resolve-url#deprecated" - }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "engines": { - "node": ">=0.12" - } - }, - "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/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", - "dependencies": { - "ret": "~0.1.10" - } - }, - "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/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/send/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/send/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/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/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/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, - "node_modules/set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dependencies": { - "kind-of": "^3.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "node_modules/source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "deprecated": "See https://github.com/lydell/source-map-url#deprecated" - }, - "node_modules/split": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", - "integrity": "sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==", - "dependencies": { - "through": "2" - }, - "engines": { - "node": "*" - } - }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split-string/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split-string/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "engines": { - "node": ">=0.10.0" - } - }, - "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/stream-combiner": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", - "integrity": "sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==", - "dependencies": { - "duplexer": "~0.1.1" - } - }, - "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/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" - }, - "node_modules/to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.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/union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unix-crypt-td-js": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/unix-crypt-td-js/-/unix-crypt-td-js-1.1.4.tgz", - "integrity": "sha512-8rMeVYWSIyccIJscb9NdCfZKSRBKYTeVnwmiRYT2ulE3qd1RaDQ0xQDP+rI3ccIWbhu/zuo5cgN8z73belNZgw==" - }, - "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/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "engines": { - "node": ">=4", - "yarn": "*" - } - }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", - "deprecated": "Please see https://github.com/lydell/urix#deprecated" - }, - "node_modules/use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "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/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": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "bin": { - "uuid": "bin/uuid" - } - }, - "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/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" - } - } - } -} diff --git a/package.json b/package.json deleted file mode 100644 index d4523f8..0000000 --- a/package.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "dependencies": { - "live-server": "^1.2.2" - } -}